diff --git a/card/guozhan.js b/card/guozhan.js index 7b31688a9..f15cc2075 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -247,7 +247,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return 8-get.value(card); }); 'step 3' - if(event.forceExecute||!result.bool) target.damage('thunder'); + if(card.yingbian||!result.bool) target.damage('thunder'); }, ai:{ order:7, diff --git a/card/standard.js b/card/standard.js index 362e13ec1..32304a917 100644 --- a/card/standard.js +++ b/card/standard.js @@ -48,6 +48,18 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } }, + icedamage:{ + ai:{ + result:{ + target:-1.5 + }, + tag:{ + damage:1, + iceDamage:1, + natureDamage:1, + } + } + }, respondShan:{ ai:{ result:{ @@ -63,13 +75,23 @@ game.import('card',function(lib,game,ui,get,ai,_status){ sha:{ audio:true, fullskin:true, - nature:['thunder','fire','kami'], + nature:['thunder','fire','kami','ice'], type:'basic', enable:true, usable:1, updateUsable:'phaseUse', + global:'icesha_skill', range:{attack:1}, selectTarget:1, + yingbian:function(event){ + if(event.card.nature=='fire'){ + if(typeof event.baseDamage!='number') event.baseDamage=1; + event.baseDamage++; + } + else{ + event.yingbian_addTarget=true; + } + }, filterTarget:function(card,player,target){return player!=target}, content:function(){ "step 0" @@ -233,6 +255,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ cardcolor:'red', notarget:true, nodelay:true, + yingbian:function(event){ + event.player.draw(); + }, content:function(){ event.result='shaned'; event.getParent().delayx=false; @@ -735,6 +760,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:'trick', enable:true, selectTarget:-1, + yingbian:function(event){ + event.yingbian_removeTarget=true; + }, filterTarget:function(card,player,target){ return target!=player; }, @@ -920,6 +948,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ fullskin:true, type:'trick', enable:true, + yingbian:function(event){ + event.directHit.addArray(game.players); + }, filterTarget:function(card,player,target){ return target!=player; }, @@ -1330,6 +1361,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ delete ui.tempnowuxie; } } + if(event.card.yingbian){ + var cardx=event.getParent().respondTo[1]; + if(cardx&&cardx.cards&&cardx.cards.filterInD().length) player.gain(cardx.cards.filterInD(),'gain2','log'); + } }, }, lebu:{ @@ -1566,6 +1601,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } }, + icesha_skill:{ + inherit:'hanbing_skill', + trigger:{source:'damageBegin2'}, + equipSkill:false, + ruleSkill:true, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.nature=='ice'&&event.notLink()&&event.player.getCards('he').length>0; + }, + }, renwang_skill:{ equipSkill:true, trigger:{target:'shaBegin'}, @@ -2411,6 +2455,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。', lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。', shandian_info:'出牌阶段,对自己使用。若判定结果为黑桃2~9,则目标角色受到3点雷电伤害。若判定不为黑桃2~9,将之移动到下家的判定区里。', + icesha_skill:'冰杀', + icesha_skill_info:'防止即将造成的伤害,改为依次弃置其两张牌。', }, list:[ ["spade",7,"sha"], diff --git a/card/yingbian.js b/card/yingbian.js new file mode 100644 index 000000000..7227ac20b --- /dev/null +++ b/card/yingbian.js @@ -0,0 +1,769 @@ +'use strict'; +game.import('card',function(lib,game,ui,get,ai,_status){ + return { + name:'yingbian', + //connect:true, + card:{ + suijiyingbian:{ + global:'suijiyingbian_skill', + fullskin:true, + type:'trick', + }, + zhujinqiyuan:{ + type:'trick', + enable:true, + audio:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('hej')>0; + }, + content:function(){ + var dist=get.distance(player,target); + if(dist>1||card.yingbian) player.discardPlayerCard(target,'hej',true); + if(dist<=1||card.yingbian) player.gainPlayerCard(target,'hej',true); + }, + fullskin:true, + postAi:function(targets){ + return targets.length==1&&targets[0].countCards('j'); + }, + ai:{ + wuxie:function(target,card,player,viewer){ + if(get.attitude(viewer,player)>0&&get.attitude(viewer,target)>0){ + return 0; + } + }, + basic:{ + order:7.5, + useful:4, + value:9 + }, + result:{ + target:function(player,target){ + var discard=get.distance(player,target)>1; + if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){ + return get.value(card,target)>0&&(discard||card!=target.getEquip('jinhe')); + })>0)?-1.5:1.5; + var js=target.getCards('j'); + if(js.length){ + var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; + if(js.length==1&&get.effect(target,jj,target,player)>=0){ + return -1.5; + } + return 3; + } + return -1.5; + }, + player:function(player,target){ + if(get.distance(player,target)>1) return 0; + if(get.attitude(player,target)<0&&!target.countCards('he',function(card){ + return get.value(card,target)>0&&card!=target.getEquip('jinhe'); + })){ + return 0; + } + if(get.attitude(player,target)>1){ + var js=target.getCards('j'); + if(js.length){ + var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; + if(js.length==1&&get.effect(target,jj,target,player)>=0){ + return 0; + } + return 1; + } + return 0; + } + return 1; + } + }, + tag:{ + loseCard:1, + gain:1, + } + }, + }, + dongzhuxianji:{ + audio:true, + fullskin:true, + type:'trick', + enable:true, + selectTarget:-1, + toself:true, + filterTarget:function(card,player,target){ + return target==player; + }, + modTarget:true, + content:function(){ + target.chooseToGuanxing(2); + target.draw(2); + }, + ai:{ + basic:{ + order:7.2, + useful:4.5, + value:9.2 + }, + result:{ + target:2.1, + }, + tag:{ + draw:2 + } + } + }, + chuqibuyi:{ + audio:true, + enable:true, + type:'trick', + fullskin:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + yingbian:function(event){ + event.yingbian_addTarget=true; + }, + content:function(){ + 'step 0' + if(player.isDead()||!target.countCards('h')){ + event.finish(); + return; + } + player.choosePlayerCard(target,'h',true); + 'step 1' + if(result.bool){ + target.showCards(result.cards); + if(get.suit(card)!=get.suit(result.cards[0])) target.damage(); + } + }, + ai:{ + basic:{ + order:5, + useful:2, + value:6 + }, + result:{ + target:function(player,target,cardx){ + if(player.hasSkillTag('viewHandcard',null,target,true)) return target.countCards('h',function(card){ + return get.suit(card)!=get.suit(cardx) + })>0?-1.5:0; + return -1.4; + }, + }, + tag:{ + damage:1, + } + } + }, + wuxinghelingshan:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip1', + distance:{attackFrom:-3}, + ai:{ + basic:{ + equipValue:2 + } + }, + skills:['wuxinghelingshan_skill'] + }, + wutiesuolian:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip1', + distance:{attackFrom:-2}, + ai:{ + basic:{ + equipValue:2 + } + }, + skills:['wutiesuolian_skill'] + }, + heiguangkai:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip2', + ai:{ + basic:{ + equipValue:2 + } + }, + skills:['heiguangkai_skill'] + }, + tongque:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip5', + ai:{ + basic:{ + equipValue:2 + } + }, + skills:['tongque_skill'] + }, + tianjitu:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip5', + loseDelay:false, + onEquip:function(){ + player.logSkill('tianjitu'); + if(player.countCards('he',function(cardx){ + return cardx!=card; + })) player.chooseToDiscard(true,function(card){ + return card!=_status.event.card; + },'he').set('card',card); + }, + onLose:function(){ + var next=game.createEvent('tianjitu_lose'); + event.next.remove(next); + var evt=event.getParent(); + if(evt.getlx===false) evt=evt.getParent(); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + if(player.countCards('h')<5){ + player.logSkill('tianjitu'); + player.drawTo(5); + } + }); + }, + }, + taigongyinfu:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip5', + ai:{ + basic:{ + equipValue:2 + } + }, + skills:['taigongyinfu_skill'] + }, + }, + skill:{ + suijiyingbian_skill:{ + mod:{ + cardname:function(card,player){ + if(card.name=='suijiyingbian'&&player.storage.suijiyingbian) return player.storage.suijiyingbian; + }, + }, + trigger:{ + player:['useCard1','respond','phaseBeginStart'], + }, + silent:true, + firstDo:true, + filter:function(event,player,name){ + if(name=='phaseBeginStart') return true; + var type=get.type(event.card); + return type=='basic'||type=='trick'; + }, + content:function(){ + if(event.triggername=='phaseBeginStart') delete player.storage.suijiyingbian; + else player.storage.suijiyingbian=trigger.card.name; + }, + }, + wuxinghelingshan_skill:{ + equipSkill:true, + trigger:{player:'useCard1'}, + filter:function(event,player){ + return (event.card.name=='sha'&&event.card.nature&&event.card.nature!='kami'); + }, + audio:true, + direct:true, + content:function(){ + 'step 0' + var list=lib.linked.slice(0); + list.remove('kami'); + list.remove(trigger.card.nature); + list.push('cancel2'); + player.chooseControl(list).set('prompt',get.prompt('wuxinghelingshan_skill')).set('prompt2','将'+get.translation(trigger.card)+'转换为以下属性之一'); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('wuxinghelingshan_skill'); + trigger.card.nature=result.control; + player.popup(get.translation(result.control)+'杀',result.control); + game.log(trigger.card,'被转为了','#y'+get.translation(result.control),'属性') + } + } + }, + wutiesuolian_skill:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + equipSkill:true, + audio:true, + filter:function(event,player){ + return event.card.name=='sha'&&(!event.target.isLinked()||event.target.countCards('h')); + }, + logTarget:'target', + content:function(){ + var target=trigger.target; + if(!target.isLinked()) target.link(); + else player.viewHandcards(target); + }, + }, + heiguangkai_skill:{ + equipSkill:true, + trigger:{target:'useCardToTargeted'}, + forced:true, + audio:true, + filter:function(event,player){ + if(event.targets.length<2||(event.card.name!='sha'&&get.type(event.card)!='trick')) return false; + if(player.hasSkillTag('unequip2')) return false; + if(event.player.hasSkillTag('unequip',false,{ + name:event.card?event.card.name:null, + target:player, + card:event.card + })) return false; + return true; + }, + content:function(){ + trigger.excluded.add(player); + }, + }, + tongque_skill:{ + ai:{forceYingbian:true}, + }, + tianjitu_skill:{ + audio:true, + }, + taigongyinfu_skill:{ + audio:true, + }, + _yingbian:{ + trigger:{player:'useCard1'}, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + var bool=player.hasSkillTag('forceYingbian'); + var card=event.card; + if(get.cardtag(card,'yingbian_kongchao')&&(!player.countCards('h')||bool)) return true; + if(get.cardtag(card,'yingbian_canqu')&&(player.hp==1||bool)) return true; + if(get.cardtag(card,'yingbian_fujia')&&(player.isMaxHandcard()||bool)) return true; + if(get.cardtag(card,'yingbian_zhuzhan')||bool) return true; + return false; + }, + content:function(){ + 'step 0' + var card=trigger.card; + event.card=card; + var bool=false; + if(get.cardtag(card,'yingbian_kongchao')&&!player.countCards('h')){ + player.popup('空巢','soil'); + bool=true; + } + else if(get.cardtag(card,'yingbian_canqu')&&player.hp==1){ + player.popup('残躯','fire'); + bool=true; + } + else if(get.cardtag(card,'yingbian_fujia')&&player.isMaxHandcard()){ + player.popup('富甲','orange'); + bool=true; + } + else if(player.hasSkillTag('forceYingbian')) bool=true; + if(bool){ + game.log(player,'触发了',card,'的应变条件'); + event.goto(10); + } + 'step 1' + event._global_waiting=true; + event.send=function(player,card,source,id,id2,skillState){ + if(skillState){ + player.applySkills(skillState); + } + var type=get.type(card); + var next=player.chooseCard({ + filterCard:function(card){ + return get.type(card)==type&&lib.filter.cardDiscardable.apply(this,arguments); + }, + prompt:(get.translation(source)+'使用了'+get.translation(card)+',是否弃置一张'+get.translation(type)+'为其助战?'), + position:'h', + _global_waiting:true, + id:id, + id2:id2, + ai:function(card){ + if(get.attitude(player,source)<=0) return false; + return 5-get.value(card); + }, + }); + if(game.online){ + _status.event._resultid=id; + game.resume(); + } + }; + 'step 2' + var type=get.type(card); + var list=game.filterPlayer(function(current){ + if(current==player) return false; + if(!current.countCards('h')) return false; + return _status.connectMode||current.countCards('h',function(cardx){ + return get.type(cardx)==type; + }) + }); + event.list=list; + event.id=get.id(); + list.sort(function(a,b){ + return get.distance(event.source,a,'absolute')-get.distance(event.source,b,'absolute'); + }); + 'step 3' + if(event.list.length==0){ + event.finish(); + return; + } + else if(_status.connectMode&&(event.list[0].isOnline()||event.list[0]==game.me)){ + event.goto(5); + } + else{ + event.current=event.list.shift(); + event.send(event.current,event.card,player,event.id,trigger.parent.id); + } + 'step 4' + if(result.bool){ + event.zhuzhanresult=event.current; + event.zhuzhanresult2=result; + if(event.current!=game.me) game.delayx(); + event.goto(9); + } + else{ + event.goto(3); + } + 'step 5' + var id=event.id; + var sendback=function(result,player){ + if(result&&result.id==id&&!event.zhuzhanresult&&result.bool){ + event.zhuzhanresult=player; + event.zhuzhanresult2=result; + game.broadcast('cancel',id); + if(_status.event.id==id&&_status.event.name=='chooseCard'&&_status.paused){ + return (function(){ + event.resultOL=_status.event.resultOL; + ui.click.cancel(); + if(ui.confirm) ui.confirm.close(); + }); + } + } + else{ + if(_status.event.id==id&&_status.event.name=='chooseCard'&&_status.paused){ + return (function(){ + event.resultOL=_status.event.resultOL; + }); + } + } + }; + + var withme=false; + var withol=false; + var list=event.list; + for(var i=0;i1) return true; + if(!event.yingbian_addTarget) return false; + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + if(trigger.yingbian_addTarget) player.chooseTarget('应变:是否为'+get.translation(trigger.card)+'增加一个目标?',function(card,player,target){ + var trigger=_status.event.getTrigger(); + var card=trigger.card; + return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(card,player,target)&&lib.filter.targetInRange(card,player,target); + }).set('ai',function(target){ + var player=_status.event.player; + var card=_status.event.getTrigger().card; + return get.effect(target,card,player,player); + }); + else event.goto(2); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(player,'发动应变效果,令',target,'也成为了',trigger.card,'的目标'); + trigger.targets.add(target); + } + 'step 2' + if(trigger.yingbian_removeTarget&&trigger.targets.length>1) player.chooseTarget('应变:是否为'+get.translation(trigger.card)+'减少一个目标?',function(card,player,target){ + var trigger=_status.event.getTrigger(); + return trigger.targets.contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + var card=_status.event.getTrigger().card; + return -get.effect(target,card,player,player); + }); + else event.finish(); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(player,'发动应变效果,将',target,'从',trigger.card,'的目标中移除了'); + trigger.targets.remove(target); + } + }, + } + }, + translate:{ + suijiyingbian:'随机应变', + suijiyingbian_info:'此牌的牌名视为你本回合内使用或打出的上一张基本牌或普通锦囊牌的牌名。', + zhujinqiyuan:'逐近弃远', + zhujinqiyuan_info:'出牌阶段,对一名有牌的其他角色使用。若你与其距离的大于1,你弃置其区域内的一张牌;若你与其的距离等于1,你获得其区域内的一张牌。', + dongzhuxianji:'洞烛先机', + dongzhuxianji_info:'出牌阶段,对包含你在内的一名角色使用。你观看牌堆顶的两张牌并将其以任意顺序置于牌堆顶或牌堆底,然后摸两张牌。', + chuqibuyi:'出其不意', + chuqibuyi_info:'出牌阶段,对一名有手牌的其他角色使用。你展示其一张手牌,若此牌与【出其不意】的花色不同,则你对其造成1点伤害。', + wuxinghelingshan:'五行鹤翎扇', + wuxinghelingshan_skill:'五行鹤翎扇', + wuxinghelingshan_info:'当你声明使用不为神属性的属性【杀】时,你可将此【杀】的属性改为不为神属性的其他属性。', + wutiesuolian:'乌铁锁链', + wutiesuolian_skill:'乌铁锁链', + wutiesuolian_skill_info:'当你使用【杀】指定目标后,若其:已横置,你观看其手牌。未横置,其横置。', + heiguangkai:'黑光铠', + heiguangkai_skill:'黑光铠', + heiguangkai_info:'锁定技,当你成为【杀】或普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', + tongque:'铜雀', + tongque_info:'你使用带有【应变】效果的牌可以无视条件直接生效。', + tianjitu:'天机图', + tianjitu_skill:'天机图', + tianjitu_info:'锁定技,当此牌进入你的装备区时,你弃置一张不为此【天机图】的牌。当此牌离开你的装备区后,你将手牌摸至五张。', + taigongyinfu:'太公阴符', + taigongyinfu_info:'出牌阶段开始时,你可以横置一名角色。出牌阶段结束时,你可以重置一张手牌。', + yingbian_zhuzhan_tag:'助战', + yingbian_kongchao_tag:'空巢', + yingbian_fujia_tag:'富甲', + yingbian_canqu_tag:'残躯', + _yingbian:'应变', + yingbian_changeTarget:'应变', + }, + list:[ + ['spade',1,'juedou',null,['yingbian_fujia']], + ['spade',1,'taigongyinfu'], + ['spade',1,'guding'], + ['spade',2,'cixiong'], + ['spade',2,'bagua'], + ['spade',2,'tengjia'], + ['spade',2,'suijiyingbian'], + ['spade',3,'jiu'], + ['spade',3,'zhujinqiyuan'], + ['spade',3,'shuiyanqijunx',null,['yingbian_zhuzhan']], + ['spade',4,'sha','thunder'], + ['spade',4,'guohe'], + ['spade',4,'shuiyanqijunx',null,['yingbian_zhuzhan']], + ['spade',5,'sha','thunder'], + ['spade',5,'qinglong'], + ['spade',5,'jueying'], + ['spade',6,'sha','thunder'], + ['spade',6,'lebu'], + ['spade',6,'qinggang'], + ['spade',7,'sha','ice'], + ['spade',7,'sha','ice'], + ['spade',7,'nanman',null,['yingbian_fujia']], + ['spade',8,'sha','ice'], + ['spade',8,'sha','ice'], + ['spade',8,'sha','ice'], + ['spade',9,'sha',null,['yingbian_canqu']], + ['spade',9,'sha',null,['yingbian_canqu']], + ['spade',9,'jiu'], + ['spade',10,'sha',null,['yingbian_canqu']], + ['spade',10,'sha',null,['yingbian_canqu']], + ['spade',10,'bingliang'], + ['spade',11,'wuxie'], + ['spade',11,'shuiyanqijunx'], + ['spade',11,'tiesuo'], + ['spade',12,'zhujinqiyuan',null,['yingbian_zhuzhan']], + ['spade',12,'tiesuo'], + ['spade',12,'zhangba'], + ['spade',13,'wuxie',null,['yingbian_kongchao']], + ['spade',13,'nanman',null,['yingbian_fujia']], + ['spade',13,'dawan'], + + ['heart',1,'taoyuan'], + ['heart',1,'wanjian'], + ['heart',1,'wuxie'], + ['heart',2,'shan',null,['yingbian_kongchao']], + ['heart',2,'shan',null,['yingbian_kongchao']], + ['heart',2,'chuqibuyi',null,['yingbian_zhuzhan']], + ['heart',3,'wugu'], + ['heart',3,'tao'], + ['heart',3,'chuqibuyi',null,['yingbian_zhuzhan']], + ['heart',4,'sha','fire'], + ['heart',4,'tao'], + ['heart',4,'suijiyingbian'], + ['heart',5,'chitu'], + ['heart',5,'tao'], + ['heart',5,'qilin'], + ['heart',6,'tao'], + ['heart',6,'tao'], + ['heart',6,'lebu'], + ['heart',7,'sha','fire'], + ['heart',7,'tao'], + ['heart',7,'dongzhuxianji'], + ['heart',8,'tao'], + ['heart',8,'shan'], + ['heart',8,'dongzhuxianji'], + ['heart',9,'tao'], + ['heart',9,'shan'], + ['heart',9,'dongzhuxianji'], + ['heart',10,'sha','fire',['yingbian_canqu']], + ['heart',10,'sha'], + ['heart',10,'sha'], + ['heart',11,'sha'], + ['heart',11,'shan'], + ['heart',11,'dongzhuxianji'], + ['heart',12,'tao'], + ['heart',12,'shan'], + ['heart',12,'guohe'], + ['heart',1,'shandian'], + ['heart',13,'wuxie',null,['yingbian_kongchao']], + ['heart',13,'shan'], + ['heart',13,'zhuahuang'], + + ['club',1,'juedou',null,['yingbian_fujia']], + ['club',1,'zhuge'], + ['club',1,'huxinjing'], + ['club',2,'sha',null,['yingbian_kongchao']], + ['club',2,'heiguangkai'], + ['club',2,'tengjia'], + ['club',1,'renwang'], + ['club',3,'sha',null,['yingbian_kongchao']], + ['club',3,'jiu'], + ['club',3,'zhujinqiyuan',null,['yingbian_zhuzhan']], + ['club',4,'sha',null,['yingbian_kongchao']], + ['club',4,'bingliang'], + ['club',4,'zhujinqiyuan',null,['yingbian_zhuzhan']], + ['club',5,'sha',null,['yingbian_kongchao']], + ['club',5,'sha'], + ['club',5,'dilu'], + ['club',6,'sha'], + ['club',6,'sha','thunder'], + ['club',6,'lebu'], + ['club',7,'sha'], + ['club',7,'sha','thunder'], + ['club',7,'nanman'], + ['club',8,'sha'], + ['club',8,'sha','thunder'], + ['club',8,'jiu'], + ['club',9,'sha','thunder'], + ['club',9,'sha','thunder'], + ['club',9,'jiu'], + ['club',10,'sha','thunder'], + ['club',10,'sha','thunder'], + ['club',10,'tiesuo'], + ['club',11,'sha'], + ['club',11,'sha',null,['yingbian_canqu']], + ['club',11,'tiesuo'], + ['club',12,'wuxie'], + ['club',12,'tianjitu'], + ['club',12,'tiesuo'], + ['club',13,'wuxie'], + ['club',13,'tongque'], + ['club',13,'tiesuo'], + + ['diamond',1,'juedou'], + ['diamond',1,'zhuge'], + ['diamond',1,'wuxinghelingshan'], + ['diamond',2,'tao'], + ['diamond',2,'shan',null,['yingbian_kongchao']], + ['diamond',2,'shan',null,['yingbian_kongchao']], + ['diamond',3,'tao'], + ['diamond',3,'shan'], + ['diamond',3,'shunshou'], + ['diamond',4,'sha','fire',['yingbian_canqu']], + ['diamond',4,'shan'], + ['diamond',4,'shunshou'], + ['diamond',5,'sha','fire'], + ['diamond',5,'shan'], + ['diamond',5,'guanshi'], + ['diamond',6,'sha'], + ['diamond',6,'shan'], + ['diamond',6,'shan'], + ['diamond',7,'sha'], + ['diamond',7,'shan'], + ['diamond',7,'shan'], + ['diamond',8,'sha',null,['yingbian_canqu']], + ['diamond',8,'shan'], + ['diamond',8,'shan'], + ['diamond',9,'sha'], + ['diamond',9,'shan'], + ['diamond',9,'jiu'], + ['diamond',10,'sha','fire'], + ['diamond',10,'shan'], + ['diamond',10,'shan'], + ['diamond',11,'chuqibuyi'], + ['diamond',11,'shan'], + ['diamond',11,'shan'], + ['diamond',12,'tao'], + ['diamond',12,'shan'], + ['diamond',12,'wutiesuolian'], + ['diamond',12,'wuxie'], + ['diamond',13,'sha','fire'], + ['diamond',13,'zixin'], + ['diamond',13,'hualiu'], + ], + } +}); diff --git a/character/diy.js b/character/diy.js index 57b7a19f1..b844c10f4 100755 --- a/character/diy.js +++ b/character/diy.js @@ -95,7 +95,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_liufu:['male','wei',3,['zhucheng','duoqi']], diy_xizhenxihong:['male','shu',4,['fuchou','jinyan']], diy_liuzan:['male','wu',4,['kangyin']], - diy_zaozhirenjun:['male','wei',3,['liangce','jianbi','juntun']], + diy_zaozhirenjun:['male','wei',3,['liangce','jianbi','diyjuntun']], diy_yangyi:['male','shu',3,['choudu','liduan']], diy_tianyu:['male','wei',4,['chezhen','youzhan']], @@ -10390,7 +10390,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - juntun:{ + diyjuntun:{ enable:'phaseUse', filter:function(event,player){ return player.countCards('he',{type:'equip'})>0; @@ -12228,8 +12228,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liangce_info:'①出牌阶段限一次,你可以将一张基本牌当【五谷丰登】使用。②当因执行【五谷丰登】的效果而亮出的牌因效果执行完毕而置入弃牌堆后,你可以选择一名角色,令该角色获取之', jianbi:'坚壁', jianbi_info:'当你成为锦囊牌的目标时,若此牌的目标包括其他角色,你可以令此牌对1个目标无效', - juntun:'军屯', - juntun_info:'出牌阶段,你可以重铸装备牌', + diyjuntun:'军屯', + diyjuntun_info:'出牌阶段,你可以重铸装备牌', choudu:'筹度', choudu_info:'出牌阶段限一次,你可以弃置一张牌,并指定一名角色视为其使用一张调兵遣将', liduan:'立断', diff --git a/character/mobile.js b/character/mobile.js index 51e513872..1d1156756 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6425,7 +6425,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ quanfeng_info:'锁定技,限定技,一名角色死亡时,你选择获得其的一个技能(主公技,限定技,觉醒技,带有Charlotte标签的技能除外),然后加1点体力上限并回复1点体力。', simashi:'司马师', baiyi:'败移', - baiyi_info:'限定技,出牌阶段,若你已受伤,你可以交换两名角色的座次。', + baiyi_info:'限定技,出牌阶段,若你已受伤,你可以交换两名其他角色的座次。', jinglve:'景略', jinglve2:'景略', jinglve3:'景略', diff --git a/character/sp.js b/character/sp.js index a459c2cc8..3e80aefd5 100755 --- a/character/sp.js +++ b/character/sp.js @@ -1629,7 +1629,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(info.allowMultiple==false) return false; if(event.targets&&!info.multitarget){ if(game.hasPlayer(function(current){ - return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current); + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); })){ return true; } diff --git a/character/sp2.js b/character/sp2.js index 94b484cc7..d80b6c1a2 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,7 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ - //jin_zhangchunhua:['female','wei',3,['jiang','hunzi'],['hiddenSkill']], + jin_zhangchunhua:['female','jin',3,['huishi','qingleng','xuanmu'],['hiddenSkill']], + dongxie:['female','qun','3/4',['juntun','jiaojie']], //jin_simayi:['female','wei',3,['reyingzi','gzyinghun'],['hiddenSkill']], re_xinxianying:['female','wei',3,['rezhongjian','recaishi']], luyusheng:['female','wu',3,['sicong','xianzhao'],['unseen']], @@ -73,6 +74,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ + sp_yingbian:['jin_zhangchunhua'], sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], @@ -82,7 +84,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_baigei:['re_panfeng','xingdaorong','caoxing'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_huangjin:['liuhong','zhujun','re_hejin','hansui'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','liubian','re_xinxianying'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','liubian','re_xinxianying','dongxie'], sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], sp_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], sp_yongjian:["ns_chendao","yj_caoang"], @@ -90,6 +92,118 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + juntun:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.maxHp>1; + }, + content:function(){ + player.loseMaxHp(); + player.draw(player.maxHp); + }, + }, + jiaojie:{ + mod:{ + ignoredHandcard:function(card,player){ + if(get.color(card)=='red'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.color(card)=='red'){ + return false; + } + }, + targetInRange:function(card){ + if(get.color(card)=='black') return true; + }, + cardUsable:function(card){ + if(get.color(card)=='black') return Infinity; + }, + }, + }, + huishi:{ + audio:2, + trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return ui.cardPile.childElementCount%10>0&&!event.numFixed; + }, + prompt:function(){ + return get.prompt('huishi')+'(当前牌堆尾数:'+ui.cardPile.childElementCount%10+')'; + }, + check:function(event,player){ + return ui.cardPile.childElementCount%10>3; + }, + content:function(){ + 'step 0' + trigger.changeToZero(); + event.cards=game.cardsGotoOrdering(get.cards(ui.cardPile.childElementCount%10)).cards; + var num=Math.ceil(event.cards.length/2); + var str='按顺序将卡牌置于牌堆底'; + if(event.cards.length>num) str='按顺序将'+get.cnNumber(num)+'张牌置于牌堆底,然后获得其余的牌'; + player.chooseButton([str,'
(先选择的在上)
',event.cards],true,num).set('ai',function(card){ + return -get.value(card); + }); + 'step 1' + for(var i of result.links){ + cards.remove(i); + i.fix(); + ui.cardPile.appendChild(i); + } + game.updateRoundNumber(); + if(cards.length) player.gain(cards,'gain2','log'); + }, + }, + qingleng:{ + audio:2, + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + var target=event.player; + return target!=player&&!target.storage.nohp&&(target.hp+target.countCards('h'))>=(ui.cardPile.childElementCount%10)&&player.countCards('he')>0&&player.canUse({name:'sha',nature:'ice'},target,false); + }, + content:function(){ + 'step 0' + player.chooseCard('he',get.prompt('qingleng',trigger.player),'将一张牌当做冰【杀】对其使用',function(card,player){ + return player.canUse(get.autoViewAs({name:'sha',nature:'ice'},[card]),_status.event.target,false); + }).set('target',trigger.player).set('ai',function(card){ + if(get.effect(_status.event.target,get.autoViewAs({name:'sha',nature:'ice'},[card]),player)<=0) return false; + return 6-get.value(card); + }); + 'step 1' + if(result.bool){ + player.useCard(get.autoViewAs({name:'sha',nature:'ice'},result.cards),result.cards,false,trigger.player,'qingleng'); + } + }, + }, + xuanmu:{ + audio:2, + trigger:{player:'showCharacterAfter'}, + forced:true, + hiddenSkill:true, + filter:function(event,player){ + return event.toShow.contains('jin_zhangchunhua')&&player!=_status.currentPhase; + }, + content:function(){ + player.addTempSkill('xuanmu2'); + }, + }, + xuanmu2:{ + trigger:{player:'damageBegin4'}, + forced:true, + popup:false, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')&&!player.hasSkillTag('jueqing',false,target)) return 'zerotarget'; + }, + }, + }, + }, decadewuniang:{ trigger:{ player:["useCard","respond"], @@ -5182,10 +5296,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '共有'+(storage.red+storage.black)+'个标记'; }, }, - trigger:{global:'damage'}, + trigger:{global:'damageEnd'}, forced:true, filter:function(event,player){ - return event.player!=player&&_status.currentPhase!=player; + return event.player!=player&&event.player.isAlive()&&_status.currentPhase!=player; }, content:function(){ player.storage.gxlianhua[player.getFriends().contains(trigger.player)?'red':'black']++; @@ -7161,7 +7275,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ decadewuniang:'武娘', decadewuniang_info:'当你使用或打出【杀】时,你可以获得一名其他角色的一张牌。若如此做,其摸一张牌。(若你已发动许身,则关索也摸一张牌)', jin_zhangchunhua:'晋张春华', + jin_zhangchunhua_ab:'张春华', + huishi:'慧识', + huishi_info:'摸牌阶段,你可以放弃摸牌,改为观看牌堆顶的X张牌,获得其中的一半(向下取整),然后将其余牌置入牌堆底。(X为牌堆数量的个位数)', + qingleng:'清冷', + qingleng_info:'一名角色的回合结束时,若其体力值与手牌数之和不小于X,你可将一张牌当无距离限制的冰属性【杀】对其使用。(X为牌堆数量的个位数)', + xuanmu:'宣穆', + xuanmu2:'宣穆', + xuanmu_info:'锁定技,隐匿技。你于其他角色的回合登场时,防止你受到的伤害直到回合结束。', jin_simayi:'晋司马懿', + dongxie:'董翓', + juntun:'军屯', + juntun_info:'锁定技,准备阶段,若X大于1,则你减1点体力上限并摸X张牌(X为你的体力上限)。', + jiaojie:'狡黠', + jiaojie_info:'锁定技,你的红色牌不计入手牌上限。你使用黑色牌无距离和次数限制。', + sp_yingbian:'应变篇', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", sp_longzhou:"同舟共济", diff --git a/character/yijiang.js b/character/yijiang.js index 590c13990..0aaef4371 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -12054,7 +12054,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterReplace:{ caozhi:['re_caozhi','caozhi'], - zhangchunhua:['zhangchunhua','mini_zhangchunhua'], + zhangchunhua:['zhangchunhua','jin_zhangchunhua','mini_zhangchunhua'], yujin:['yujin_yujin','re_yujin','ol_yujin','xin_yujin','yujin'], xushu:['re_xushu','xin_xushu','xushu'], fazheng:['xin_fazheng','fazheng'], diff --git a/game/asset.js b/game/asset.js index acb3009d0..26c7e398f 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.106.4', + 'v1.9.106.4.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -3514,6 +3514,8 @@ window.noname_asset_list=[ 'image/character/xin_lingtong.jpg', 'image/character/xin_liubiao.jpg', 'image/character/re_xinxianying.jpg', + 'image/character/jin_zhangchunhua.jpg', + 'image/character/dongxie.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 0dc51175c..139af90fb 100644 --- a/game/game.js +++ b/game/game.js @@ -9360,14 +9360,15 @@ }, c:function(){ (function(){ - var a=0,b=0,c=0,d=0,e=0,f=0; - var sa=0,sb=0,sc=0,sd=0,se=0,sf=0; + var a=0,b=0,c=0,d=0,e=0,f=0,g=0; + var sa=0,sb=0,sc=0,sd=0,se=0,sf=0,sg=0; for(var i in lib.character){ switch(lib.character[i][1]){ case 'wei':a++;if(lib.config.banned.contains(i)) sa++;break; case 'shu':b++;if(lib.config.banned.contains(i)) sb++;break; case 'wu':c++;if(lib.config.banned.contains(i)) sc++;break; case 'qun':d++;if(lib.config.banned.contains(i)) sd++;break; + case 'jin':g++;if(lib.config.banned.contains(i)) sg++;break; case 'western':e++;if(lib.config.banned.contains(i)) se++;break; case 'key':f++;if(lib.config.banned.contains(i)) sf++;break; } @@ -9376,6 +9377,7 @@ console.log('蜀:'+(b-sb)+'/'+b); console.log('吴:'+(c-sc)+'/'+c); console.log('群:'+(d-sd)+'/'+d); + console.log('晋:'+(g-sg)+'/'+g); console.log('西:'+(e-se)+'/'+e); console.log('键:'+(f-sf)+'/'+f); console.log('已启用:'+((a+b+c+d+e+f)-(sa+sb+sc+sd+se+sf))+'/'+(a+b+c+d+e+f)); @@ -9822,6 +9824,7 @@ thunder:"雷", poison:"毒", kami:'神', + ice:'冰', wei:'魏', shu:'蜀', wu:'吴', @@ -9829,6 +9832,7 @@ shen:'神', western:'西', key:'键', + jin:'晋', wei2:'魏国', shu2:'蜀国', wu2:'吴国', @@ -9836,6 +9840,7 @@ shen2:'神明', western2:'西方', key2:'KEY', + jin2:'晋朝', male:'男', female:'女', mad:'混乱', @@ -9853,6 +9858,7 @@ qunColor:"#f6f6f6", shenColor:"#ffe14c", westernColor:"#ffe14c", + jinColor:"#ffe14c", keyColor:"#c9b1fd", basic:'基本', equip:'装备', @@ -9881,6 +9887,7 @@ _lianhuan:'连环', _lianhuan2:'连环', _kamisha:'神杀', + _icesha:'冰杀', qianxing:'潜行', mianyi:'免疫', fengyin:'封印', @@ -15888,6 +15895,7 @@ this.name=this.name1; skills=lib.character[this.name][3]||[]; this.sex=lib.character[this.name][0]; + if(this.group=='unknown') this.group=lib.character[this.name][1]; this.classList.remove('unseen'); break; case 1: @@ -15906,6 +15914,7 @@ var skills=(lib.character[this.name][3]||[]); if(this.name2) skills=skills.concat(lib.character[this.name2][3]||[]); this.sex=lib.character[this.name][0]; + if(this.group=='unknown') this.group=lib.character[this.name][1]; this.classList.remove('unseen'); this.classList.remove('unseen2'); break; @@ -15918,8 +15927,7 @@ game.broadcast(function(player,name,sex,num,group){ player.group=group; player.name=name; - player.sex=sex; - player.node.identity.classList.remove('guessing'); + player.sex=sex;; switch(num){ case 0:player.classList.remove('unseen');break; case 1:player.classList.remove('unseen2');break; @@ -16344,25 +16352,19 @@ this.node.intro.innerHTML=lib.config.intro; this.node.name.dataset.nature=get.groupnature(this.group); lib.setIntro(this); - // var name=get.translation(character); this.node.name.innerHTML=get.slimName(character); if(this.classList.contains('minskin')&&this.node.name.querySelectorAll('br').length>=4){ this.node.name.classList.add('long'); } - // if(!lib.config.show_name){ - // this.node.name.style.display='none'; - // } - // for(var i=0;i'; - // } if(info[4].contains('hiddenSkill')){ if(!this.hiddenSkills) this.hiddenSkills=[]; this.hiddenSkills.addArray(skills); skills=[]; this.classList.add('unseen'); this.name='unknown'; - //this.node.name_seat=ui.create.div('.name.name_seat','未知',this); + this.node.name_seat=ui.create.div('.name.name_seat',get.verticalStr(get.translation(this.name)),this); + this.sex='male'; + this.group='unknown'; this.storage.nohp=true; } if(character2&&lib.character[character2]){ @@ -16423,15 +16425,7 @@ } else skills=skills.concat(info2[3]); - // var name=get.translation(character2); this.node.name2.innerHTML=get.slimName(character2); - // this.node.name2.dataset.nature=get.groupnature(info2[1]); - // if(!lib.config.show_name){ - // this.node.name2.style.display='none'; - // } - // for(var i=0;i'; - // } } if(this.storage.nohp) this.node.hp.hide(); if(skill!=false){ @@ -16913,6 +16907,8 @@ linked:this.isLinked(), turnedover:this.isTurnedOver(), phaseNumber:this.phaseNumber, + unseen:this.isUnseen(0), + unseen2:this.isUnseen(1), } for(var i=0;i'; @@ -24755,7 +24766,7 @@ } var fullskills=game.expandSkills(player.getSkills().concat(lib.skill.global)); var info=get.info(skill); - if(info.noHidden&&!fullskills.contains(skill)){ + if((info.noHidden||get.mode()!='guozhan')&&!fullskills.contains(skill)){ return false; } if(!info.trigger) return false; @@ -25248,7 +25259,7 @@ }, skill:{ _showHiddenCharacter:{ - trigger:{player:['changeHp','phaseBeginStart']}, + trigger:{player:['changeHp','phaseBeginStart','loseMaxHpBegin']}, firstDo:true, forced:true, popup:false, @@ -26764,7 +26775,13 @@ player.setModeState(info); } else{ - player.init(info.name,info.name2); + player.init(info.name1,info.name2); + } + if(!info.unseen) player.classList.remove('unseen'); + if(!info.unseen2) player.classList.remove('unseen2'); + if(!player.isUnseen(2)&&player.storage.nohp){ + delete player.storage.nohp; + player.node.hp.show(); } player.playerid=i; player.nickname=info.nickname; @@ -27017,8 +27034,8 @@ }, suit:['club','spade','diamond','heart'], group:['wei','shu','wu','qun','shen'], - nature:['fire','thunder','poison','kami'], - linked:['fire','thunder','kami'], + nature:['fire','thunder','poison','kami','ice'], + linked:['fire','thunder','kami','ice'], groupnature:{ shen:'thunder', wei:'water', @@ -27027,6 +27044,7 @@ qun:'metal', western:'thunder', key:'key', + jin:'thunder', }, phaseName:['phaseZhunbei','phaseJudge','phaseDraw','phaseUse','phaseDiscard','phaseJieshu'], }; @@ -31636,6 +31654,7 @@ if(cardnature) tempname=get.translation(cardnature)+tempname; if(cardnature=='thunder') cards[i]._tempName.dataset.nature='thunder'; if(cardnature=='kami') cards[i]._tempName.dataset.nature='kami'; + if(cardnature=='ice') cards[i]._tempName.dataset.nature='ice'; } cards[i]._tempName.innerHTML=lib.config.cardtempname=='default'?get.verticalStr(tempname):tempname; cards[i]._tempName.tempname=tempname; @@ -31818,7 +31837,7 @@ else if(info.enable=='phaseUse') enable=(event.type=='phase'); else if(typeof info.enable=='string') enable=(info.enable==event.name); if(enable){ - if(!game.expandSkills(player.getSkills().concat(lib.skill.global)).contains(skills2[i])&&(info.noHidden||player.hasSkillTag('nomingzhi',false,null,true))) enable=false; + if(!game.expandSkills(player.getSkills().concat(lib.skill.global)).contains(skills2[i])&&(info.noHidden||get.mode()!='guozhan'||player.hasSkillTag('nomingzhi',false,null,true))) enable=false; if(info.filter&&!info.filter(event,player)) enable=false; if(info.viewAs&&typeof info.viewAs!='function'&&event.filterCard&&!event.filterCard(info.viewAs,player,event)) enable=false; if(info.viewAs&&typeof info.viewAs!='function'&&info.viewAsFilter&&info.viewAsFilter(player)==false) enable=false; @@ -36608,9 +36627,10 @@ if(info[name][1]=='shu') return 1; if(info[name][1]=='wu') return 2; if(info[name][1]=='qun') return 3; - if(info[name][1]=='western') return 4; - if(info[name][1]=='key') return 5; - return 6; + if(info[name][1]=='jin') return 4; + if(info[name][1]=='western') return 5; + if(info[name][1]=='key') return 6; + return 7; } list.sort(function(a,b){ var del=groupSort(a)-groupSort(b); @@ -38710,7 +38730,7 @@ editnode.classList.add('disabled'); delnode.innerHTML='取消'; delete delnode.button; - container.code='card={\n \n}\n\n\/*\n示例:\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; + container.code='card={\n \n}\n\n\/*\n示例:\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; } newCard=ui.create.div('.new_character',page); @@ -38924,7 +38944,7 @@ }; var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput); var editor=ui.create.div(editorpage); - container.code='card={\n \n}\n\n\/*\n示例:\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; + container.code='card={\n \n}\n\n\/*\n示例:\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; var editnode=ui.create.div('.menubutton.large.new_card.disabled','创建卡牌',newCard,function(){ var name=page.querySelector('input.new_name').value; @@ -39606,8 +39626,8 @@ else{ dashes.content.node.code='function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项(见选项代码);参数2为扩展定义的武将、卡牌和技能等(可在此函数中修改)\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; dashes.precontent.node.code='function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前,且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; - dashes.config.node.code='config={\n \n}\n\n\/*\n示例:\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; - dashes.help.node.code='help={\n \n}\n\n\/*\n示例:\nhelp={\n "帮助条目":"
  • 列表1-条目1
  • 列表1-条目2
  1. 列表2-条目1
  2. 列表2-条目2"\n}\n帮助内容将显示在菜单-选项-帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; + dashes.config.node.code='config={\n \n}\n\n\/*\n示例:\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; + dashes.help.node.code='help={\n \n}\n\n\/*\n示例:\nhelp={\n "帮助条目":"
    • 列表1-条目1
    • 列表1-条目2
    1. 列表2-条目1
    2. 列表2-条目2"\n}\n帮助内容将显示在菜单-选项-帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; } }; var dashes={}; @@ -39730,8 +39750,8 @@ }; page.content={} createCode('主','主代码',page,clickCode,'content','function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项(见选项代码);参数2为扩展定义的武将、卡牌和技能等(可在此函数中修改)\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); - createCode('启','启动代码',page,clickCode,'precontent','function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前,且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); - createCode('选','选项代码',page,clickCode,'config','config={\n \n}\n\n\/*\n示例:\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); + createCode('启','启动代码',page,clickCode,'precontent','function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前,且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); + createCode('选','选项代码',page,clickCode,'config','config={\n \n}\n\n\/*\n示例:\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); createCode('帮','帮助代码',page,clickCode,'help','help={\n \n}\n\n\/*\n示例:\nhelp={\n "帮助条目":"
      • 列表1-条目1
      • 列表1-条目2
      1. 列表2-条目1
      2. 列表2-条目2"\n}\n帮助内容将显示在菜单-选项-帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); return page; @@ -41597,7 +41617,7 @@ },true,true); }, groupControl:function(dialog){ - return ui.create.control('wei','shu','wu','qun','western','key',function(link,node){ + return ui.create.control('wei','shu','wu','qun','jin','western','key',function(link,node){ if(link=='全部'){ dialog.currentcapt=''; dialog.currentgroup=''; @@ -42024,7 +42044,7 @@ } } if(!thisiscard){ - var groups=['wei','shu','wu','qun']; + var groups=['wei','shu','wu','qun','jin']; var bool1=false; var bool2=false; var bool3=(get.mode()=='guozhan'&&_status.forceKey!=true&&get.config('onlyguozhan')); @@ -43586,7 +43606,7 @@ name:ui.create.div('.name',node), intro:ui.create.div('.intro',node) } - if(item.name.indexOf('unknown')==0){ + if(item.name&&item.name.indexOf('unknown')==0){ if(item.node&&item.node.name_seat){ node.classList.add('cardbg'); ui.create.div('.avatar_name',node,get.translation(item.name)); @@ -49952,6 +49972,9 @@ else if(str.nature=='kami'){ str2='神'+str2; } + else if(str.nature=='ice'){ + str2='冰'+str2; + } } if(get.itemtype(str)=='card'||str.isCard){ if(_status.cardtag&&str.cardid){ @@ -51591,7 +51614,7 @@ } }, groups:function(){ - return ['wei','shu','wu','qun','western','key']; + return ['wei','shu','wu','qun','jin','western','key']; }, types:function(){ var types=[]; diff --git a/game/update.js b/game/update.js index cad2c33c5..834492010 100644 --- a/game/update.js +++ b/game/update.js @@ -1,32 +1,32 @@ window.noname_update={ - version:'1.9.106.4.1', - update:'1.9.106.4', + version:'1.9.106.4.2', + update:'1.9.106.4.1', changeLog:[ - '铃木央人', - '界凌统、界刘表', - '辛宪英、鲍三娘', + '晋张春华', + '董翓', 'bug修复', ], files:[ //'card/extra.js', //'card/huanlekapai.js', //'card/sp.js', - //'card/standard.js', + 'card/standard.js', //'card/swd.js', //'card/mtg.js', //'card/gujian.js', - //'card/guozhan.js', + 'card/guozhan.js', //'card/gwent.js', //'card/yunchou.js', + 'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', + 'character/diy.js', //'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', //'character/old.js', //'character/rank.js', @@ -39,22 +39,22 @@ window.noname_update={ //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', - //'character/yijiang.js', + 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', - //'layout/default/layout.css', + 'layout/default/layout.css', //'layout/nova/layout.css', //'mode/identity.js', //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/guozhan.js', //'mode/chess.js', //'mode/tafang.js', //'mode/single.js', //'mode/stone.js', - //'mode/brawl.js', + 'mode/brawl.js', //'mode/versus.js', //'mode/boss.js', - //'game/game.js', + 'game/game.js', //'game/keyWords.js', //'game/server.js', //'game/NoSleep.js', diff --git a/image/character/dongxie.jpg b/image/character/dongxie.jpg new file mode 100644 index 000000000..7b1476874 Binary files /dev/null and b/image/character/dongxie.jpg differ diff --git a/image/character/jin_zhangchunhua.jpg b/image/character/jin_zhangchunhua.jpg new file mode 100644 index 000000000..f291031c4 Binary files /dev/null and b/image/character/jin_zhangchunhua.jpg differ diff --git a/layout/default/layout.css b/layout/default/layout.css index 3ecdef5c4..e94faccae 100644 --- a/layout/default/layout.css +++ b/layout/default/layout.css @@ -2279,6 +2279,9 @@ div:not(.handcards)>.card>.info>span, #window>.damage.fullscreenavatar[data-nature='water']>div:first-child>div{ box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0,0.5) 0 0 10px, rgba(0, 0, 0,0.3) 0 0 30px, rgba(78, 117, 140,1) 0 0 60px, rgba(78, 117, 140,1) 0 0 60px; } +#window>.damage.fullscreenavatar[data-nature='ice']>div:first-child>div{ + box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0,0.5) 0 0 20px, rgba(0, 0, 0,0.3) 0 0 40px, rgba(213, 194, 179, 1) 0 0 80px; +} #window>.damage.fullscreenavatar[data-nature='soil']>div:first-child>div{ box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0,0.5) 0 0 10px, rgba(0, 0, 0,0.3) 0 0 30px, rgba(128, 59, 2,1) 0 0 60px; } @@ -2765,7 +2768,8 @@ div:not(.handcards)>.card>.info>span, .player>.name_seat { opacity: 0; } -.player:not([data-position='0']).unseen.unseen2>.name_seat { +.player:not([data-position='0']).unseen.unseen2>.name_seat, +.player:not([data-position='0']):not(.fullskin2).unseen>.name_seat { opacity: 1 !important; } @@ -3472,6 +3476,9 @@ div:not(.handcards)>.card>.info>span, .kami { color: rgba(90,118,99,0.3); } +.ice { + color: rgba(80,160,255,0.3); +} .poison { color: rgba(30, 133, 51,0.4); } @@ -3803,6 +3810,7 @@ span[data-nature='keymm'] { .player .identity[data-color="ye"], .player .identity[data-color="rYe"], .player .identity[data-color="bYe"], +.player .identity[data-color="jin"], div[data-nature='thunder'], span[data-nature='thunder'] { text-shadow: rgba(100, 74, 139,1) 0 0 2px,rgba(100, 74, 139,1) 0 0 5px,rgba(100, 74, 139,1) 0 0 10px, @@ -3926,6 +3934,27 @@ span[data-nature='graymx'] { rgba(213, 194, 179,1) 0 0 5px,black 0 0 1px; } +div[data-nature='ice'], +span[data-nature='ice'] { + text-shadow: rgba(213, 194, 179,1) 0 0 2px,rgba(213, 194, 179,1) 0 0 5px,rgba(213, 194, 179,1) 0 0 10px, + rgba(213, 194, 179,1) 0 0 10px,rgba(213, 194, 179,1) 0 0 20px,rgba(213, 194, 179,1) 0 0 20px,black 0 0 1px; +} +div[data-nature='icem'], +span[data-nature='icem'] { + text-shadow: rgba(213, 194, 179,1) 0 0 2px,rgba(213, 194, 179,1) 0 0 5px,rgba(213, 194, 179,1) 0 0 5px, + rgba(213, 194, 179,1) 0 0 5px,black 0 0 1px; +} +div[data-nature='icemm'], +span[data-nature='icemm'] { + text-shadow: rgba(213, 194, 179,1) 0 0 2px,rgba(213, 194, 179,1) 0 0 2px,rgba(213, 194, 179,1) 0 0 2px, + rgba(213, 194, 179,1) 0 0 2px,black 0 0 1px; +} +div[data-nature='icemx'], +span[data-nature='icemx'] { + text-shadow: black 0 0 1px,rgba(213, 194, 179,0.2) 0 0 2px,rgba(213, 194, 179,1) 0 0 2px,rgba(213, 194, 179,1) 0 0 5px, + rgba(213, 194, 179,1) 0 0 5px,black 0 0 1px; +} + .player .identity[data-color="unknownx"], div[data-nature='black'], span[data-nature='black'] { @@ -4095,6 +4124,10 @@ div[data-decoration="bronze"]::after{ color: #1F3C38; border: 1px solid #1F3C38; } +.card.fullskin.ice>.name { + color: #152E63; + border: 1px solid #152E63; +} .card.fullskin.fire>.name { color: #631515; border: 1px solid #631515; @@ -4268,6 +4301,7 @@ div[data-decoration="bronze"]::after{ color: rgb(104,221,127); } .thundertext, +.icetext, .controlthundertext { color: rgb(117,186,255); } diff --git a/mode/brawl.js b/mode/brawl.js index fffe84cf4..2ebaae8ee 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -3865,6 +3865,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(cname=='sha'){ pileaddlist.push(['huosha','火杀']); pileaddlist.push(['leisha','雷杀']); + pileaddlist.push(['icesha','冰杀']); + pileaddlist.push(['kamisha','神杀']); } } } diff --git a/mode/guozhan.js b/mode/guozhan.js index 4003dc312..12b174dd5 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -4390,7 +4390,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var card={name:button.link[2]}; var info=get.info(card); var num=player.countCards('h'); - if(get.tag(card,'multitarget')&&get.select(info.selectTarget)[1]==-1){ + //if(get.tag(card,'multitarget')&&get.select(info.selectTarget)[1]==-1){ + if(get.select(info.selectTarget)[1]==-1){ if(game.countPlayer(function(current){ return player.canUse(card,current) })>num){