diff --git a/card/gujian.js b/card/gujian.js index 7997e6ca8..ef76a1b79 100644 --- a/card/gujian.js +++ b/card/gujian.js @@ -870,13 +870,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return 0; }, result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current==target||(get.distance(target,current,'pure')==1&¤t.countCards('he'))){ - return -get.sgn(get.attitude(player,current)); - } - }); - } + target:-1, } } }, @@ -933,13 +927,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){ multineg:1, }, result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current==target||(get.distance(target,current,'pure')==1)){ - return get.sgn(get.effect(current,{name:'chiyuxi'},player,player)); - } - }); - } + target:function(player,target){ + if(target.hasSkillTag('nofire')) return 0; + if(player.hasUnknown(2)) return 0; + var nh=target.countCards('h'); + if(lib.config.mode=='identity'){ + if(target.isZhu&&nh<=2&&target.hp<=1) return -100; + } + if(nh==0) return -2; + if(nh==1) return -1.7 + return -1.5; + }, } } }, diff --git a/card/guozhan.js b/card/guozhan.js index 067057825..6b6c39b65 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -280,27 +280,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return 0; }, result:{ - player:function(player,target){ - if(get.mode()=='versus') return game.countPlayer(function(current){ - if(target.isFriendOf(current)){ - if(current.isFriendOf(player)&¤t.isLinked()){ - return get.attitude(player,target); - } - else if(current.isEnemyOf(player)&&!current.isLinked()){ - return -get.attitude(player,target)*0.6; - } - } - }); - return game.countPlayer(function(current){ - if(target.isMajor()==current.isMajor()){ - if(current.isLinked()){ - return get.attitude(player,target); - } - else{ - return -get.attitude(player,target)*0.8; - } - } - }); + target:function(player,target){ + if(get.mode()=='versus'){ + if(target.isFriendOf(player)) return target.isLinked()?1:0; + return target.isLinked()?0:-1; + } + return target.isLinked()?1:-1; } } } @@ -390,8 +375,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ value:4, useful:2, result:{ - player:1.5, - target:1, + target:function(player,target){ + if(player==target) return 2; + return 1; + }, }, }, }, diff --git a/card/gwent.js b/card/gwent.js index b98b126d3..2099e2318 100644 --- a/card/gwent.js +++ b/card/gwent.js @@ -1,2347 +1,2334 @@ -'use strict'; -game.import('card',function(lib,game,ui,get,ai,_status){ - return { - name:'gwent', - card:{ - gw_dieyi:{ - fullskin:true - }, - gw_dieyi_equip1:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - type:'equip', - subtype:'equip1', - onLose:function(){ - lib.skill.gw_dieyi.process(player); - }, - loseDelay:false, - skills:[], - ai:{ - equipValue:0 - } - }, - gw_dieyi_equip2:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - type:'equip', - subtype:'equip2', - onLose:function(){ - lib.skill.gw_dieyi.process(player); - }, - loseDelay:false, - skills:[], - ai:{ - equipValue:0 - } - }, - gw_dieyi_equip3:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - type:'equip', - subtype:'equip3', - onLose:function(){ - lib.skill.gw_dieyi.process(player); - }, - loseDelay:false, - skills:[], - ai:{ - equipValue:0 - } - }, - gw_dieyi_equip4:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - type:'equip', - subtype:'equip4', - onLose:function(){ - lib.skill.gw_dieyi.process(player); - }, - loseDelay:false, - skills:[], - ai:{ - equipValue:0 - } - }, - gw_dieyi_equip5:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - type:'equip', - subtype:'equip5', - onLose:function(){ - lib.skill.gw_dieyi.process(player); - }, - loseDelay:false, - skills:[], - ai:{ - equipValue:0 - } - }, - gw_dieyi_judge:{ - fullskin:true, - vanish:true, - hidden:true, - cardimage:'gw_dieyi', - enable:true, - type:'delay', - filterTarget:true, - effect:function(){ - lib.skill.gw_dieyi.process(player); - }, - }, - gw_hudiewu:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:function(card,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('ej'); - }); - }, - notarget:true, - contentBefore:function(){ - player.$skill('蝴蝶舞','legend','metal'); - game.delay(2); - }, - content:function(){ - 'step 0' - event.targets=game.filterPlayer(function(current){ - return current.countCards('ej'); - }).sortBySeat(); - event.targets.remove(player); - 'step 1' - if(event.targets.length){ - var target=event.targets.shift(); - var ej=target.getCards('ej'); - player.line(target); - target.removeEquipTrigger(); - for(var i=0;imax2){ - return get.damageEffect(get.max(enemies,func,'item'),player,player,'fire'); - } - else{ - var num; - if(max1>max2){ - num=get.sgn(get.damageEffect(get.max(enemies,func,'item'),player,player,'fire')); - } - else if(max1==max2){ - num=0; - } - else{ - num=1; - } - return num+game.countPlayer(function(current){ - if(current.hp>=max2){ - return get.sgn(get.damageEffect(current,player,player,'fire')); - } - }); - } - } - }, - order:0.7, - } - }, - gw_leizhoushu:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:true, - notarget:true, - contentBefore:function(){ - player.$skill('雷咒术','legend','metal'); - game.delay(2); - }, - content:function(){ - if(player.hasSkill('gw_leizhoushu')){ - if(typeof player.storage.gw_leizhoushu!='number'){ - player.storage.gw_leizhoushu=2; - } - else{ - player.storage.gw_leizhoushu++; - } - player.syncStorage('gw_leizhoushu'); - player.updateMarks(); - } - else{ - player.addSkill('gw_leizhoushu'); - } - }, - contentAfter:function(){ - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - }, - ai:{ - value:8, - useful:[6,1], - result:{ - player:function(player){ - return 1+game.countPlayer(function(current){ - if(current!=player&¤t.isMaxHandcard()){ - return -get.sgn(get.attitude(player,current)); - } - }); - } - }, - order:0.5, - } - }, - gw_aerdeyin:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:function(card,player){ - var enemies=player.getEnemies(); - return enemies.length>0; - }, - notarget:true, - contentBefore:function(){ - player.$skill('阿尔德印','legend','metal'); - game.delay(2); - }, - content:function(){ - 'step 0' - var enemies=player.getEnemies(); - event.list=[enemies.randomGet()]; - 'step 1' - if(event.list.length){ - var target=event.list.shift(); - event.target=target; - player.line(target,'green'); - target.damage(); - } - else{ - delete event.target; - } - 'step 2' - if(event.target){ - if(!event.target.isTurnedOver()){ - event.target.turnOver(); - event.target.addSkill('gw_aerdeyin'); - } - event.goto(1); - } - 'step 3' - game.delay(); - }, - contentAfter:function(){ - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - }, - ai:{ - value:8, - useful:[6,1], - result:{ - player:function(player){ - return game.countPlayer(function(current){ - if(get.distance(player,current,'pure')==1){ - var att=get.sgn(get.attitude(player,current)); - if(current==player.next){ - return -att*1.5; - } - return -att; - } - }); - } - }, - order:0.5, - } - }, - gw_ansha:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:function(card,player){ - var enemies=player.getEnemies(); - return game.hasPlayer(function(current){ - return current.hp==1&&enemies.contains(current); - }); - }, - notarget:true, - contentBefore:function(){ - player.$skill('暗杀','legend','metal'); - game.delay(2); - }, - content:function(){ - var enemies=player.getEnemies(); - var list=game.filterPlayer(function(current){ - return current.hp==1&&enemies.contains(current); - }); - if(list.length){ - var target=list.randomGet(); - player.line(target); - target.die(); - } - }, - contentAfter:function(){ - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - }, - ai:{ - value:8, - useful:[6,1], - result:{ - player:1 - }, - order:0.6, - } - }, - gw_xinsheng:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:function(card,player){ - return game.hasPlayer(function(current){ - return !current.isUnseen(); - }); - }, - notarget:true, - contentBefore:function(){ - player.$skill('新生','legend','metal'); - game.delay(2); - }, - content:function(){ - 'step 0' - var target=get.max(game.filterPlayer(function(current){ - return !current.isUnseen(); - },'list').randomSort(),function(current){ - var att=get.attitude(player,current); - if(att<0&¤t.isDamaged()&¤t.hp<=3){ - return -10; - } - var rank=get.rank(current,true); - if(current.maxHp>=3){ - if(current.hp<=1){ - if(att>0) return att*3+2; - return att*3; - } - else if(current.hp==2){ - if(att>0){ - att*=1.5; - } - else{ - att/=1.5; - } - } - } - if(rank>=7){ - if(att>0){ - return att/10; - } - return -att/5; - } - else if(rank<=4){ - if(att<0){ - return -att/10; - } - return att; - } - return Math.abs(att/2); - },'item'); - event.aitarget=target; - var list=[]; - for(var i in lib.character){ - if(!lib.filter.characterDisabled(i)&&!lib.filter.characterDisabled2(i)){ - list.push(i); - } - } - var players=game.players.concat(game.dead); - for(var i=0;i0){ - return get.rank(button.link,true); - } - else{ - return -get.rank(button.link,true); - } - }; - 'step 1' - event.nametarget=result.links[0]; - player.chooseTarget(true,'使用'+get.translation(event.nametarget)+'替换一名角色的武将牌',function(card,player,target){ - return !target.isUnseen()&&!target.isMin(); - }).ai=function(target){ - if(target==event.aitarget){ - return 1; - } - else{ - return 0; - } - } - 'step 2' - var target=result.targets[0]; - var hp=target.hp; - target.reinit(target.name,event.nametarget); - target.hp=Math.min(hp+1,target.maxHp); - target.update(); - player.line(target,'green'); - 'step 3' - game.triggerEnter(target); - }, - contentAfter:function(){ - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - }, - ai:{ - value:8, - useful:[6,1], - result:{ - player:1 - }, - order:0.5, - } - }, - gw_niuquzhijing:{ - fullborder:'gold', - type:'spell', - subtype:'spell_gold', - vanish:true, - enable:function(card,player){ - return game.hasPlayer(function(current){ - return current.hp!=player.hp; - }); - }, - notarget:true, - contentBefore:function(){ - var list1=game.filterPlayer(function(current){ - return current.isMaxHp(); - }); - var list2=game.filterPlayer(function(current){ - return current.isMinHp(); - }); - player.line(list1); - for(var i=0;ilist11.length){ - list11.push(list1.randomGet()); - } - while(list22.length0; - }, - content:function(){ - 'step 0' - var cards=target.getCards('h'); - target.lose(cards,ui.special); - target.storage.gw_youer=cards; - target.addSkill('gw_youer'); - 'step 1' - player.draw(); - }, - ai:{ - basic:{ - order:10, - value:7, - useful:[3,1], - }, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noh')) return 3; - var num=-Math.sqrt(target.countCards('h')); - if(player.hasSha()&&player.canUse('sha',target)){ - num-=2; - } - return num; - }, - }, - } - }, - gw_tongdi:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - vanish:true, - enable:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h'); - }, - content:function(){ - 'step 0' - player.gainPlayerCard(target,'h',true,'visible').set('ai',function(button){ - return get.value(button.link); - }); - 'step 1' - target.gain(game.createCard('sha'),'gain2'); - }, - ai:{ - basic:{ - order:8, - value:9.5, - useful:[5,1], - }, - result:{ - target:function(player,target){ - if(target.getEquip(4)) return -2; - return -1; - } - }, - } - }, - gw_fuyuan:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - vanish:true, - savable:true, - selectTarget:-1, - content:function(){ - target.recover(); - target.draw(); - }, - ai:{ - basic:{ - order:6, - useful:10, - value:[8,6.5,5,4], - }, - result:{ - target:2 - }, - tag:{ - recover:1, - save:1, - } - } - }, - gw_zhuoshao:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - vanish:true, - enable:true, - filterTarget:function(card,player,target){ - return target.isMaxHp(); - }, - cardnature:'fire', - selectTarget:[1,Infinity], - content:function(){ - target.damage('fire'); - }, - ai:{ - basic:{ - order:8.5, - value:7.5, - useful:[4,1], - }, - result:{ - target:-1 - }, - tag:{ - damage:1, - fireDamage:1, - natureDamage:1, - } - } - }, - gw_butianshu:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - vanish:true, - enable:true, - filterTarget:true, - // contentBefore:function(){ - // player.$skill('卜天术','legend','water'); - // game.delay(2); - // }, - content:function(){ - 'step 0' - var list=[]; - for(var i in lib.card){ - if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; - if(lib.card[i].vanish) continue; - if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); - } - var dialog=ui.create.dialog('卜天术',[list,'vcard']); - var bing=target.countCards('h')<=1; - player.chooseButton(dialog,true,function(button){ - if(get.effect(target,{name:button.link[2]},player,player)>0){ - if(button.link[2]=='bingliang'){ - if(bing) return 2; - return 0.7; - } - if(button.link[2]=='lebu'){ - return 1; - } - if(button.link[2]=='guiyoujie'){ - return 0.5; - } - if(button.link[2]=='caomu'){ - return 0.3; - } - return 0.2; - } - return 0; - }).filterButton=function(button){ - return !target.hasJudge(button.link[2]); - }; - 'step 1' - var card=game.createCard(result.links[0][2]); - event.judgecard=card; - target.$draw(card); - game.delay(0.7); - 'step 2' - target.addJudge(event.judgecard); - }, - ai:{ - value:8, - useful:[5,1], - result:{ - player:function(player,target){ - var eff=0; - for(var i in lib.card){ - if(lib.card[i].type=='delay'){ - var current=get.effect(target,{name:i},player,player); - if(current>eff){ - eff=current; - } - } - } - return eff; - } - }, - order:6, - } - }, - gw_shizizhaohuan:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - vanish:true, - enable:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - // contentBefore:function(){ - // player.$skill('十字召唤','legend','water'); - // game.delay(2); - // }, - content:function(){ - var list=[]; - list.push(get.cardPile2('juedou')); - list.push(get.cardPile2('huogong')); - list.push(get.cardPile2('nanman')); - list.push(get.cardPile2('huoshaolianying')); - for(var i=0;i0; - }); - var aozu2=game.hasPlayer(function(current){ - return player.canUse('gw_aozuzhilei',current)&¤t.hp<=2&&get.effect(current,{name:'gw_aozuzhilei'},player,player)>0; - }); - var aozu3=game.hasPlayer(function(current){ - return player.canUse('gw_aozuzhilei',current)&&get.effect(current,{name:'gw_aozuzhilei'},player,player)>0; - }); - var baoxue=game.hasPlayer(function(current){ - return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&&[2,3].contains(current.countCards('h'))&&!current.hasSkillTag('noh'); - }); - var baoxue2=game.hasPlayer(function(current){ - return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&&[2].contains(current.countCards('h'))&&!current.hasSkillTag('noh'); - }); - var baoxue3=game.hasPlayer(function(current){ - return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&¤t.countCards('h')>=2&&!current.hasSkillTag('noh'); - }); - var nongwu=game.hasPlayer(function(current){ - return get.attitude(player,current)<0&&(get.attitude(player,current.getNext())<0||get.attitude(player,current.getPrevious())<0); - }); - var nongwu2=game.hasPlayer(function(current){ - return get.attitude(player,current)<0&&get.attitude(player,current.getNext())<0&&get.attitude(player,current.getPrevious())<0; - }); - var yanzi=game.hasPlayer(function(current){ - return get.attitude(player,current)>0&¤t.isMinHandcard(); - }); - player.chooseButton(dialog,true,function(button){ - var name=button.link[2]; - switch(name){ - case 'gw_ciguhanshuang': - if(nongwu2) return 3; - if(nongwu) return 1; - return 0; - case 'gw_baoxueyaoshui': - if(baoxue2) return 2; - if(baoxue) return 1.5; - if(baoxue3) return 0.5; - return 0; - case 'gw_aozuzhilei': - if(aozu2) return 2.5; - if(aozu) return 1.2; - if(aozu3) return 0.2; - return 0; - case 'gw_yanziyaoshui': - if(yanzi) return 2; - return 0.6; - } - if(game.hasPlayer(function(current){ - return player.canUse(name,current)&&get.effect(current,{name:name},player,player)>0; - })){ - return Math.random(); - } - return 0; - }).filterButton=function(button){ - var name=button.link[2]; - if(!lib.card[name].notarget){ - return game.hasPlayer(function(current){ - return player.canUse(name,current); - }) - } - return true; - }; - 'step 1' - player.chooseUseTarget(true,game.createCard(result.links[0][2],get.suit(card),get.number(card))); - }, - ai:{ - value:7, - useful:[4,1], - result:{ - player:function(player){ - return 1; - } - }, - order:7, - } - }, - - gw_nuhaifengbao:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_nuhaifengbao'); - }, - content:function(){ - target.addSkill('gw_nuhaifengbao'); - }, - ai:{ - value:[7,1], - useful:[4,1], - result:{ - target:function(player,target){ - return -2/Math.sqrt(1+target.hp); - } - }, - order:1.2, - } - }, - gw_baishuang:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_ciguhanshuang'); - }, - selectTarget:[1,3], - content:function(){ - target.addSkill('gw_ciguhanshuang'); - }, - ai:{ - value:[7.5,1], - useful:[5,1], - result:{ - target:-1 - }, - order:1.2, - } - }, - gw_baobaoshu:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_baobaoshu'); - }, - selectTarget:[1,2], - content:function(){ - target.addTempSkill('gw_baobaoshu',{player:'phaseAfter'}); - }, - ai:{ - value:[7.5,1], - useful:[5,1], - result:{ - target:function(player,target){ - return -Math.sqrt(target.countCards('h'))-0.5; - } - }, - order:1.2, - } - }, - gw_guaiwuchaoxue:{ - fullborder:'silver', - type:'spell', - subtype:'spell_silver', - enable:true, - usable:1, - forceUsable:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - var list=get.gainableSkills(function(info,skill){ - return !info.notemp&&info.ai&&info.ai.maixie_hp&&!player.hasSkill(skill); - }); - list.remove('guixin'); - if(list.length){ - var skill=list.randomGet(); - player.popup(skill); - player.addTempSkill(skill,{player:'phaseBegin'}); - var enemies=player.getEnemies(); - if(enemies.length){ - var source=enemies.randomGet(); - source.line(player); - source.addExpose(0.1); - player.damage(source); - player.recover(); - } - } - }, - ai:{ - value:[8,1], - useful:[3,1], - result:{ - target:function(player,target){ - if(target.hp<=1||target.hujia) return 0; - return 1; - } - }, - order:1, - } - }, - - gw_qinpendayu:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_qinpendayu'); - }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); - }, - content:function(){ - target.addSkill('gw_qinpendayu'); - }, - ai:{ - value:[5,1], - useful:[3,1], - result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current.hasSkill('gw_qinpendayu')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - var num=-get.sgn(get.attitude(player,current)); - if(current.needsToDiscard()) return num; - if(current.needsToDiscard(1)) return 0.7*num; - if(current.needsToDiscard(2)) return 0.4*num; - return 0.1*num; - } - }); - } - }, - order:1.2, - } - }, - gw_birinongwu:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_birinongwu'); - }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); - }, - content:function(){ - target.addSkill('gw_birinongwu'); - }, - ai:{ - value:[5,1], - useful:[3,1], - result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current.hasSkill('gw_birinongwu')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - return -get.sgn(get.attitude(player,current)); - } - }); - } - }, - order:1.2, - } - }, - gw_ciguhanshuang:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gw_ciguhanshuang'); - }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); - }, - content:function(){ - target.addSkill('gw_ciguhanshuang'); - }, - ai:{ - value:[5,1], - useful:[3,1], - result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current.hasSkill('gw_ciguhanshuang')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - return -get.sgn(get.attitude(player,current)); - } - }); - } - }, - order:1.2, - } - }, - gw_baoxueyaoshui:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - filterTarget:true, - content:function(){ - 'step 0' - target.chooseToDiscard('h',2,true).delay=false; - 'step 1' - target.draw(); - }, - ai:{ - value:6, - useful:[3,1], - result:{ - target:function(player,target){ - if(target.hasSkillTag('noh')) return 0.1; - switch(target.countCards('h')){ - case 0:return 0.5; - case 1:return 0; - case 2:return -1.5; - default:return -1; - } - } - }, - order:8, - tag:{ - loseCard:1, - discard:1, - } - } - }, - gw_zhihuanjun:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - filterTarget:function(card,player,target){ - return target.isDamaged(); - }, - content:function(){ - 'step 0' - target.loseMaxHp(true); - 'step 1' - if(target.isDamaged()&&target.countCards('h')=player.hp; - }, - content:function(){ - 'step 0' - target.damage('thunder'); - 'step 1' - if(target.isIn()){ - target.draw(); - } - }, - ai:{ - basic:{ - order:1.8, - value:[5,1], - useful:[4,1], - }, - result:{ - target:-1 - }, - tag:{ - damage:1, - thunderDamage:1, - natureDamage:1, - } - } - }, - gw_poxiao:{ - fullborder:'bronze', - type:'spell', - subtype:'spell_bronze', - enable:true, - notarget:true, - content:function(){ - 'step 0' - var choice=1; - if(game.countPlayer(function(current){ - if(current.countCards('j')||current.hasSkillTag('weather')){ - if(get.attitude(player,current)>0){ - choice=0; - } - return true; - } - })){ - player.chooseControl(function(){ - return choice; - }).set('choiceList',[ - '解除任意名角色的天气效果并移除其判定区内的牌', - '随机获得一张铜卡法术(破晓除外)并展示之' - ]); - } - else{ - event.directfalse=true; - } - 'step 1' - if(!event.directfalse&&result.index==0){ - player.chooseTarget(true,[1,Infinity],'解除任意名角色的天气效果并移除其判定区内的牌',function(card,player,target){ - return target.countCards('j')||target.hasSkillTag('weather'); - }).ai=function(target){ - return get.attitude(player,target); - }; - } - else{ - var list=get.libCard(function(info,name){ - return name!='gw_poxiao'&&info.subtype=='spell_bronze'; - }); - if(list.length){ - player.gain(game.createCard(list.randomGet()),'gain2'); - } - else{ - player.draw(); - } - event.finish(); - } - 'step 2' - event.list=result.targets.slice(0).sortBySeat(); - 'step 3' - if(event.list.length){ - var target=event.list.shift(); - player.line(target,'green'); - var cards=target.getCards('j'); - if(cards.length){ - target.discard(cards); - } - if(target.hasSkillTag('weather')){ - var skills=target.getSkills(); - for(var i=0;i0){ - player.updateMarks(); - } - else{ - player.removeSkill('gw_kunenfayin'); - } - }, - } - }, - group:'gw_kunenfayin_count', - onremove:true - }, - gw_baobaoshu:{ - mark:true, - nopop:true, - intro:{ - content:'每使用一张基本牌或锦囊牌,需弃置一张牌' - }, - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - if(player.countCards('he')==0) return false; - var type=get.type(event.card,'trick'); - return type=='basic'||type=='trick'; - }, - content:function(){ - if(!event.isMine()) game.delay(0.5); - player.chooseToDiscard(true,'he'); - }, - ai:{ - weather:true, - effect:{ - player:function(card,player){ - if(!player.needsToDiscard()) return 'zeroplayertarget'; - } - } - } - }, - gw_nuhaifengbao:{ - mark:true, - intro:{ - content:'结束阶段随机弃置一张牌(剩余#回合)' - }, - init:function(player){ - player.storage.gw_nuhaifengbao=2; - }, - trigger:{player:'phaseEnd'}, - forced:true, - nopop:true, - content:function(){ - player.randomDiscard(); - player.storage.gw_nuhaifengbao--; - if(player.storage.gw_nuhaifengbao>0){ - player.updateMarks(); - } - else{ - player.removeSkill('gw_nuhaifengbao'); - } - }, - onremove:true, - ai:{ - neg:true, - weather:true - } - }, - gw_youer:{ - trigger:{global:'phaseEnd',player:'dieBegin'}, - forced:true, - audio:false, - mark:true, - intro:{ - content:'cards' - }, - content:function(){ - if(player.storage.gw_youer){ - if(trigger.name=='phase'){ - player.gain(player.storage.gw_youer); - } - else{ - player.$throw(player.storage.gw_youer,1000); - for(var i=0;i0; - }, - content:function(){ - trigger.num--; - player.removeSkill('gw_ciguhanshuang'); - }, - ai:{ - weather:true - } - }, - gw_dieyi:{ - init:function(player){ - player.storage.gw_dieyi=1; - }, - onremove:true, - trigger:{global:'phaseEnd'}, - forced:true, - mark:true, - nopop:true, - process:function(player){ - if(player.hasSkill('gw_dieyi')){ - player.storage.gw_dieyi++; - } - else{ - player.addSkill('gw_dieyi'); - } - player.syncStorage('gw_dieyi'); - player.updateMarks(); - }, - intro:{ - content:'在当前回合的结束阶段,你随机弃置#张牌' - }, - content:function(){ - player.randomDiscard(player.storage.gw_dieyi); - player.removeSkill('gw_dieyi'); - } - }, - gw_leizhoushu:{ - mark:true, - intro:{ - content:function(storage,player){ - if(storage>=2){ - return '锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标(重复'+storage+'次)'; - } - else{ - return '锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标'; - } - } - }, - nopop:true, - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - var list=game.filterPlayer(); - for(var i=0;i0&&event.parent.name=='phaseDraw'; - }, - content:function(){ - if(!player.storage.spell_gain||Math.max.apply(null,player.storage.spell_gain)<0){ - var tmp=player.storage.spell_gain2; - player.storage.spell_gain=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].randomGets(3); - player.storage.spell_gain2=Math.floor((15-Math.max.apply(null,player.storage.spell_gain))/2); - if(tmp){ - for(var i=0;i<3;i++){ - player.storage.spell_gain[i]+=tmp; - } - } - } - for(var i=0;i<3;i++){ - if(player.storage.spell_gain[i]==0){ - var list; - if(i==0){ - list=get.libCard(function(info){ - return info.subtype=='spell_gold'; - }); - if(get.mode()=='stone'){ - list.remove('gw_aerdeyin'); - list.remove('gw_niuquzhijing'); - } - } - else{ - list=get.libCard(function(info){ - return info.subtype=='spell_silver'; - }); - if(get.mode()=='stone'){ - list.remove('gw_butianshu'); - } - } - if(list&&list.length){ - ui.cardPile.insertBefore(game.createCard(list.randomGet()),ui.cardPile.firstChild); - } - } - player.storage.spell_gain[i]--; - } - } - } - }, - help:{ - '昆特牌':'
  • 法术为分金、银、铜三类,金卡和银卡不出现在牌堆中
  • '+ - '摸牌阶段有一定概率摸到银卡,在16个摸牌阶段中至少会摸到2张银卡
  • '+ - '摸牌阶段有一定概率摸到金卡,在16个摸牌阶段中至少会摸到1张金卡
  • '+ - '金卡无视调虎离山、潜行等免疫目标的效果
  • '+ - '进行洗牌时金卡、银卡将从弃牌堆中消失,不进入牌堆' - }, - translate:{ - spell:'法术', - spell_gold:'金卡法术', - spell_silver:'银卡法术', - spell_bronze:'铜卡法术', - - gw_youlanzhimeng:'幽蓝之梦', - gw_guaiwuchaoxue:'怪物巢穴', - gw_guaiwuchaoxue_info:'出牌阶段限用一次,随机获得一个卖血技能直到下一回合开始;令一名随机敌方角色对你造成一点伤害,然后你回复一点体力', - gw_baobaoshu:'雹暴术', - gw_baobaoshu_info:'天气牌,出牌阶段对至多两名角色使用,目标每使用一张基本牌或锦囊牌,需弃置一张牌,直到下一回合结束', - gw_baishuang:'白霜', - gw_baishuang_info:'天气牌,出牌阶段对至多三名角色使用,目标下个摸牌阶段摸牌数-1', - gw_nuhaifengbao:'怒海风暴', - gw_nuhaifengbao_bg:'海', - gw_nuhaifengbao_info:'天气牌,出牌阶段对一名角色使用,目标在结束阶段随机弃置一张牌,持续2回合', - gw_ganhan:'干旱', - gw_ganhan_info:'所有角色减少一点体力上限(不触发技能),然后结束出牌阶段', - gw_huangjiashenpan:'皇家审判', - gw_huangjiashenpan_info:'获得任意一张金卡法术(皇家审判除外),然后结束出牌阶段', - gw_chongci:'冲刺', - gw_chongci_info:'弃置所有牌并随机获得一张非金法术牌,每弃置一张手牌,便随机获得一张类别相同的牌;每弃置一张装备区内的牌,随机装备一件类别相同的装备;获得潜行直到下一回合开始,然后结束出牌阶段', - gw_tunshi:'吞噬', - gw_tunshi_info:'随机移除一名敌方角色的一个随机技能,你获得此技能并减少一点体力和体力上限,被移除技能的角色增加一点体力和体力上限,然后结束出牌阶段', - gw_dieyi:'蝶翼', - gw_dieyi_equip1:'蝶翼·器', - gw_dieyi_equip2:'蝶翼·衣', - gw_dieyi_equip3:'蝶翼·攻', - gw_dieyi_equip4:'蝶翼·防', - gw_dieyi_equip5:'蝶翼·宝', - gw_dieyi_judge:'蝶翼·判', - gw_dieyi_equip1_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_dieyi_equip2_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_dieyi_equip3_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_dieyi_equip4_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_dieyi_equip5_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_dieyi_judge_info:'你在判定阶段移去此牌,并获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', - gw_hudiewu:'蝴蝶舞', - gw_hudiewu_info:'将其他角色在场上的所有牌替换为蝶翼(每当你失去一张蝶翼,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌),然后结束出牌阶段', - gw_yigeniyin:'伊格尼印', - gw_yigeniyin_info:'对敌方角色中体力值最高的一名随机角色造成一点火焰伤害,然后对场上体力值最高的所有角色各造成一点火焰伤害,然后结束出牌阶段', - gw_leizhoushu:'雷咒术', - gw_leizhoushu_info:'获得技能雷咒术(在每个准备阶段令全场牌数最多的所有其他角色各随机弃置一张牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标,结算X次,X为本局获得此技能的次数),然后结束出牌阶段', - gw_aerdeyin:'阿尔德印', - gw_aerdeyin_bg:'印', - gw_aerdeyin_info:'对一名随机敌方角色造成一点伤害,若目标武将牌正面朝上,则将其翻面;新的一轮开始时,若目标武将牌正面朝上,则在当前回合结束后进行一个额外回合,否则将武将牌翻回正面', - gw_xinsheng:'新生', - gw_xinsheng_info:'选择一名角色,随机观看12张武将牌,选择一张替代其武将牌,并令其增加一点体力,然后结束出牌阶段', - gw_zhongmozhizhan:'终末之战', - gw_zhongmozhizhan_info:'将所有角色区域内的所有牌置入弃牌堆(不触发技能),然后结束出牌阶段', - gw_butianshu:'卜天术', - gw_butianshu_info:'出牌阶段对任意角色使用,将任意一张延时锦囊牌置入其判定区', - gw_zhihuanjun:'致幻菌', - gw_zhihuanjun_info:'出牌阶段对一名已受伤角色使用,令其减少一点体力上限;若该角色仍处于受伤状态且手牌数小于体力上限,则重复此结算', - gw_niuquzhijing:'纽曲之镜', - gw_niuquzhijing_info:'令全场体力最多的角色减少一点体力和体力上限,体力最少的角色增加一点体力和体力上限(不触发技能),然后结束出牌阶段', - gw_ansha:'暗杀', - gw_ansha_info:'令一名体力为1的随机敌方角立即死亡,然后结束出牌阶段', - gw_shizizhaohuan:'十字召唤', - gw_shizizhaohuan_info:'从牌堆中获得一张杀以及决斗、火攻、火烧连营、南蛮入侵四张牌中的随机一张', - gw_zuihouyuanwang:'最后愿望', - gw_zuihouyuanwang_info:'摸X张牌并弃置X张牌,X为存活角色数', - gw_zirankuizeng:'自然馈赠', - gw_zirankuizeng_info:'选择任意一张铜卡法术使用', - gw_poxiao:'破晓', - gw_poxiao_info:'选择一项:解除任意名角色的天气效果并移除其判定区内的牌,或随机获得一张铜卡法术(破晓除外)并展示之', - gw_zumoshoukao:'阻魔手铐', - gw_zumoshoukao_info:'令一名角色非锁定技失效直到下一回合结束', - gw_aozuzhilei:'奥祖之雷', - gw_aozuzhilei_info:'对一名体力值不小于你的角色造成一点雷属性伤害,然后该角色摸一张牌', - gw_zhuoshao:'灼烧', - gw_zhuoshao_info:'对任意名体力值为全场最高的角色使用,造成一点火属性伤害', - gw_fuyuan:'复原', - gw_fuyuan_info:'对一名濒死状态角色使用,目标回复一点体力并摸一张牌', - gw_youer:'诱饵', - gw_youer_bg:'饵', - gw_youer_info:'将一名其他角色的所有手牌移出游戏,然后摸一张牌,当前回合结束后该角色将以此法失去的牌收回手牌', - gw_tongdi:'通敌', - gw_tongdi_info:'观看一名其他角色的手牌并获得其中一张,然后令目标获得一张杀', - gw_baoxueyaoshui:'暴雪药水', - gw_baoxueyaoshui_info:'令一名角色弃置两张手牌并摸一张牌', - gw_birinongwu:'蔽日浓雾', - gw_birinongwu_bg:'雾', - gw_birinongwu_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标不能使用杀直到下一个出牌阶段结束', - gw_qinpendayu:'倾盆大雨', - gw_qinpendayu_bg:'雨', - gw_qinpendayu_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标手牌上限-1直到下一个弃牌阶段结束', - gw_ciguhanshuang:'刺骨寒霜', - gw_ciguhanshuang_bg:'霜', - gw_ciguhanshuang_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标下个摸牌阶段摸牌数-1', - gw_wenyi:'瘟疫', - gw_wenyi_info:'令所有体力值为全场最少的角色随机弃置一张手牌;若没有手牌,改为失去一点体力', - gw_yanziyaoshui:'燕子药水', - gw_yanziyaoshui_info:'令一名角色摸一张牌,若其手牌数为全场最少或之一,改为摸两张', - gw_shanbengshu:'山崩术', - gw_shanbengshu_info:'出牌阶段对自己使用,随机弃置两件敌方角色场上的装备', - gw_kunenfayin:'昆恩法印', - gw_kunenfayin_info:'出牌阶段对一名角色使用,目标防止所有非属性伤害,持续X个角色的回合(X为存活角色数且最多为5)', - }, - cardType:{ - spell:0.5, - spell_bronze:0.2, - spell_silver:0.3, - spell_gold:0.4 - }, - list:[ - ['club',3,'gw_zhihuanjun'], - ['spade',2,'gw_zhihuanjun'], - - ['heart',7,'gw_poxiao'], - ['diamond',4,'gw_poxiao'], - - ['spade',9,'gw_aozuzhilei','thunder'], - ['club',7,'gw_aozuzhilei','thunder'], - - ['club',1,'gw_zumoshoukao'], - ['spade',1,'gw_zumoshoukao'], - - ['diamond',5,'gw_qinpendayu'], - ['club',7,'gw_qinpendayu'], - - ['spade',9,'gw_birinongwu'], - ['heart',13,'gw_birinongwu'], - - ['diamond',11,'gw_ciguhanshuang'], - ['club',7,'gw_ciguhanshuang'], - - ['heart',4,'gw_baoxueyaoshui'], - ['spade',8,'gw_baoxueyaoshui'], - - ['spade',8,'gw_shanbengshu'], - ['spade',2,'gw_kunenfayin'], - ['club',3,'gw_wenyi'], - ['heart',8,'gw_yanziyaoshui'], - ], - }; -}); +'use strict'; +game.import('card',function(lib,game,ui,get,ai,_status){ + return { + name:'gwent', + card:{ + gw_dieyi:{ + fullskin:true + }, + gw_dieyi_equip1:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + type:'equip', + subtype:'equip1', + onLose:function(){ + lib.skill.gw_dieyi.process(player); + }, + loseDelay:false, + skills:[], + ai:{ + equipValue:0 + } + }, + gw_dieyi_equip2:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + type:'equip', + subtype:'equip2', + onLose:function(){ + lib.skill.gw_dieyi.process(player); + }, + loseDelay:false, + skills:[], + ai:{ + equipValue:0 + } + }, + gw_dieyi_equip3:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + type:'equip', + subtype:'equip3', + onLose:function(){ + lib.skill.gw_dieyi.process(player); + }, + loseDelay:false, + skills:[], + ai:{ + equipValue:0 + } + }, + gw_dieyi_equip4:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + type:'equip', + subtype:'equip4', + onLose:function(){ + lib.skill.gw_dieyi.process(player); + }, + loseDelay:false, + skills:[], + ai:{ + equipValue:0 + } + }, + gw_dieyi_equip5:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + type:'equip', + subtype:'equip5', + onLose:function(){ + lib.skill.gw_dieyi.process(player); + }, + loseDelay:false, + skills:[], + ai:{ + equipValue:0 + } + }, + gw_dieyi_judge:{ + fullskin:true, + vanish:true, + hidden:true, + cardimage:'gw_dieyi', + enable:true, + type:'delay', + filterTarget:true, + effect:function(){ + lib.skill.gw_dieyi.process(player); + }, + }, + gw_hudiewu:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:function(card,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('ej'); + }); + }, + notarget:true, + contentBefore:function(){ + player.$skill('蝴蝶舞','legend','metal'); + game.delay(2); + }, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(function(current){ + return current.countCards('ej'); + }).sortBySeat(); + event.targets.remove(player); + 'step 1' + if(event.targets.length){ + var target=event.targets.shift(); + var ej=target.getCards('ej'); + player.line(target); + target.removeEquipTrigger(); + for(var i=0;imax2){ + return get.damageEffect(get.max(enemies,func,'item'),player,player,'fire'); + } + else{ + var num; + if(max1>max2){ + num=get.sgn(get.damageEffect(get.max(enemies,func,'item'),player,player,'fire')); + } + else if(max1==max2){ + num=0; + } + else{ + num=1; + } + return num+game.countPlayer(function(current){ + if(current.hp>=max2){ + return get.sgn(get.damageEffect(current,player,player,'fire')); + } + }); + } + } + }, + order:0.7, + } + }, + gw_leizhoushu:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:true, + notarget:true, + contentBefore:function(){ + player.$skill('雷咒术','legend','metal'); + game.delay(2); + }, + content:function(){ + if(player.hasSkill('gw_leizhoushu')){ + if(typeof player.storage.gw_leizhoushu!='number'){ + player.storage.gw_leizhoushu=2; + } + else{ + player.storage.gw_leizhoushu++; + } + player.syncStorage('gw_leizhoushu'); + player.updateMarks(); + } + else{ + player.addSkill('gw_leizhoushu'); + } + }, + contentAfter:function(){ + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + }, + ai:{ + value:8, + useful:[6,1], + result:{ + player:function(player){ + return 1+game.countPlayer(function(current){ + if(current!=player&¤t.isMaxHandcard()){ + return -get.sgn(get.attitude(player,current)); + } + }); + } + }, + order:0.5, + } + }, + gw_aerdeyin:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:function(card,player){ + var enemies=player.getEnemies(); + return enemies.length>0; + }, + notarget:true, + contentBefore:function(){ + player.$skill('阿尔德印','legend','metal'); + game.delay(2); + }, + content:function(){ + 'step 0' + var enemies=player.getEnemies(); + event.list=[enemies.randomGet()]; + 'step 1' + if(event.list.length){ + var target=event.list.shift(); + event.target=target; + player.line(target,'green'); + target.damage(); + } + else{ + delete event.target; + } + 'step 2' + if(event.target){ + if(!event.target.isTurnedOver()){ + event.target.turnOver(); + event.target.addSkill('gw_aerdeyin'); + } + event.goto(1); + } + 'step 3' + game.delay(); + }, + contentAfter:function(){ + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + }, + ai:{ + value:8, + useful:[6,1], + result:{ + player:function(player){ + return game.countPlayer(function(current){ + if(get.distance(player,current,'pure')==1){ + var att=get.sgn(get.attitude(player,current)); + if(current==player.next){ + return -att*1.5; + } + return -att; + } + }); + } + }, + order:0.5, + } + }, + gw_ansha:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:function(card,player){ + var enemies=player.getEnemies(); + return game.hasPlayer(function(current){ + return current.hp==1&&enemies.contains(current); + }); + }, + notarget:true, + contentBefore:function(){ + player.$skill('暗杀','legend','metal'); + game.delay(2); + }, + content:function(){ + var enemies=player.getEnemies(); + var list=game.filterPlayer(function(current){ + return current.hp==1&&enemies.contains(current); + }); + if(list.length){ + var target=list.randomGet(); + player.line(target); + target.die(); + } + }, + contentAfter:function(){ + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + }, + ai:{ + value:8, + useful:[6,1], + result:{ + player:1 + }, + order:0.6, + } + }, + gw_xinsheng:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:function(card,player){ + return game.hasPlayer(function(current){ + return !current.isUnseen(); + }); + }, + notarget:true, + contentBefore:function(){ + player.$skill('新生','legend','metal'); + game.delay(2); + }, + content:function(){ + 'step 0' + var target=get.max(game.filterPlayer(function(current){ + return !current.isUnseen(); + },'list').randomSort(),function(current){ + var att=get.attitude(player,current); + if(att<0&¤t.isDamaged()&¤t.hp<=3){ + return -10; + } + var rank=get.rank(current,true); + if(current.maxHp>=3){ + if(current.hp<=1){ + if(att>0) return att*3+2; + return att*3; + } + else if(current.hp==2){ + if(att>0){ + att*=1.5; + } + else{ + att/=1.5; + } + } + } + if(rank>=7){ + if(att>0){ + return att/10; + } + return -att/5; + } + else if(rank<=4){ + if(att<0){ + return -att/10; + } + return att; + } + return Math.abs(att/2); + },'item'); + event.aitarget=target; + var list=[]; + for(var i in lib.character){ + if(!lib.filter.characterDisabled(i)&&!lib.filter.characterDisabled2(i)){ + list.push(i); + } + } + var players=game.players.concat(game.dead); + for(var i=0;i0){ + return get.rank(button.link,true); + } + else{ + return -get.rank(button.link,true); + } + }; + 'step 1' + event.nametarget=result.links[0]; + player.chooseTarget(true,'使用'+get.translation(event.nametarget)+'替换一名角色的武将牌',function(card,player,target){ + return !target.isUnseen()&&!target.isMin(); + }).ai=function(target){ + if(target==event.aitarget){ + return 1; + } + else{ + return 0; + } + } + 'step 2' + var target=result.targets[0]; + var hp=target.hp; + target.reinit(target.name,event.nametarget); + target.hp=Math.min(hp+1,target.maxHp); + target.update(); + player.line(target,'green'); + 'step 3' + game.triggerEnter(target); + }, + contentAfter:function(){ + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + }, + ai:{ + value:8, + useful:[6,1], + result:{ + player:1 + }, + order:0.5, + } + }, + gw_niuquzhijing:{ + fullborder:'gold', + type:'spell', + subtype:'spell_gold', + vanish:true, + enable:function(card,player){ + return game.hasPlayer(function(current){ + return current.hp!=player.hp; + }); + }, + notarget:true, + contentBefore:function(){ + var list1=game.filterPlayer(function(current){ + return current.isMaxHp(); + }); + var list2=game.filterPlayer(function(current){ + return current.isMinHp(); + }); + player.line(list1); + for(var i=0;ilist11.length){ + list11.push(list1.randomGet()); + } + while(list22.length0; + }, + content:function(){ + 'step 0' + var cards=target.getCards('h'); + target.lose(cards,ui.special); + target.storage.gw_youer=cards; + target.addSkill('gw_youer'); + 'step 1' + player.draw(); + }, + ai:{ + basic:{ + order:10, + value:7, + useful:[3,1], + }, + result:{ + target:function(player,target){ + if(target.hasSkillTag('noh')) return 3; + var num=-Math.sqrt(target.countCards('h')); + if(player.hasSha()&&player.canUse('sha',target)){ + num-=2; + } + return num; + }, + }, + } + }, + gw_tongdi:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + vanish:true, + enable:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h'); + }, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'h',true,'visible').set('ai',function(button){ + return get.value(button.link); + }); + 'step 1' + target.gain(game.createCard('sha'),'gain2'); + }, + ai:{ + basic:{ + order:8, + value:9.5, + useful:[5,1], + }, + result:{ + target:function(player,target){ + if(target.getEquip(4)) return -2; + return -1; + } + }, + } + }, + gw_fuyuan:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + vanish:true, + savable:true, + selectTarget:-1, + content:function(){ + target.recover(); + target.draw(); + }, + ai:{ + basic:{ + order:6, + useful:10, + value:[8,6.5,5,4], + }, + result:{ + target:2 + }, + tag:{ + recover:1, + save:1, + } + } + }, + gw_zhuoshao:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + vanish:true, + enable:true, + filterTarget:function(card,player,target){ + return target.isMaxHp(); + }, + cardnature:'fire', + selectTarget:[1,Infinity], + content:function(){ + target.damage('fire'); + }, + ai:{ + basic:{ + order:8.5, + value:7.5, + useful:[4,1], + }, + result:{ + target:-1 + }, + tag:{ + damage:1, + fireDamage:1, + natureDamage:1, + } + } + }, + gw_butianshu:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + vanish:true, + enable:true, + filterTarget:true, + // contentBefore:function(){ + // player.$skill('卜天术','legend','water'); + // game.delay(2); + // }, + content:function(){ + 'step 0' + var list=[]; + for(var i in lib.card){ + if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; + if(lib.card[i].vanish) continue; + if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); + } + var dialog=ui.create.dialog('卜天术',[list,'vcard']); + var bing=target.countCards('h')<=1; + player.chooseButton(dialog,true,function(button){ + if(get.effect(target,{name:button.link[2]},player,player)>0){ + if(button.link[2]=='bingliang'){ + if(bing) return 2; + return 0.7; + } + if(button.link[2]=='lebu'){ + return 1; + } + if(button.link[2]=='guiyoujie'){ + return 0.5; + } + if(button.link[2]=='caomu'){ + return 0.3; + } + return 0.2; + } + return 0; + }).filterButton=function(button){ + return !target.hasJudge(button.link[2]); + }; + 'step 1' + var card=game.createCard(result.links[0][2]); + event.judgecard=card; + target.$draw(card); + game.delay(0.7); + 'step 2' + target.addJudge(event.judgecard); + }, + ai:{ + value:8, + useful:[5,1], + result:{ + player:function(player,target){ + var eff=0; + for(var i in lib.card){ + if(lib.card[i].type=='delay'){ + var current=get.effect(target,{name:i},player,player); + if(current>eff){ + eff=current; + } + } + } + return eff; + } + }, + order:6, + } + }, + gw_shizizhaohuan:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + vanish:true, + enable:true, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + // contentBefore:function(){ + // player.$skill('十字召唤','legend','water'); + // game.delay(2); + // }, + content:function(){ + var list=[]; + list.push(get.cardPile2('juedou')); + list.push(get.cardPile2('huogong')); + list.push(get.cardPile2('nanman')); + list.push(get.cardPile2('huoshaolianying')); + for(var i=0;i0; + }); + var aozu2=game.hasPlayer(function(current){ + return player.canUse('gw_aozuzhilei',current)&¤t.hp<=2&&get.effect(current,{name:'gw_aozuzhilei'},player,player)>0; + }); + var aozu3=game.hasPlayer(function(current){ + return player.canUse('gw_aozuzhilei',current)&&get.effect(current,{name:'gw_aozuzhilei'},player,player)>0; + }); + var baoxue=game.hasPlayer(function(current){ + return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&&[2,3].contains(current.countCards('h'))&&!current.hasSkillTag('noh'); + }); + var baoxue2=game.hasPlayer(function(current){ + return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&&[2].contains(current.countCards('h'))&&!current.hasSkillTag('noh'); + }); + var baoxue3=game.hasPlayer(function(current){ + return player.canUse('gw_baoxueyaoshui',current)&&get.attitude(player,current)<0&¤t.countCards('h')>=2&&!current.hasSkillTag('noh'); + }); + var nongwu=game.hasPlayer(function(current){ + return get.attitude(player,current)<0&&(get.attitude(player,current.getNext())<0||get.attitude(player,current.getPrevious())<0); + }); + var nongwu2=game.hasPlayer(function(current){ + return get.attitude(player,current)<0&&get.attitude(player,current.getNext())<0&&get.attitude(player,current.getPrevious())<0; + }); + var yanzi=game.hasPlayer(function(current){ + return get.attitude(player,current)>0&¤t.isMinHandcard(); + }); + player.chooseButton(dialog,true,function(button){ + var name=button.link[2]; + switch(name){ + case 'gw_ciguhanshuang': + if(nongwu2) return 3; + if(nongwu) return 1; + return 0; + case 'gw_baoxueyaoshui': + if(baoxue2) return 2; + if(baoxue) return 1.5; + if(baoxue3) return 0.5; + return 0; + case 'gw_aozuzhilei': + if(aozu2) return 2.5; + if(aozu) return 1.2; + if(aozu3) return 0.2; + return 0; + case 'gw_yanziyaoshui': + if(yanzi) return 2; + return 0.6; + } + if(game.hasPlayer(function(current){ + return player.canUse(name,current)&&get.effect(current,{name:name},player,player)>0; + })){ + return Math.random(); + } + return 0; + }).filterButton=function(button){ + var name=button.link[2]; + if(!lib.card[name].notarget){ + return game.hasPlayer(function(current){ + return player.canUse(name,current); + }) + } + return true; + }; + 'step 1' + player.chooseUseTarget(true,game.createCard(result.links[0][2],get.suit(card),get.number(card))); + }, + ai:{ + value:7, + useful:[4,1], + result:{ + player:function(player){ + return 1; + } + }, + order:7, + } + }, + + gw_nuhaifengbao:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_nuhaifengbao'); + }, + content:function(){ + target.addSkill('gw_nuhaifengbao'); + }, + ai:{ + value:[7,1], + useful:[4,1], + result:{ + target:function(player,target){ + return -2/Math.sqrt(1+target.hp); + } + }, + order:1.2, + } + }, + gw_baishuang:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_ciguhanshuang'); + }, + selectTarget:[1,3], + content:function(){ + target.addSkill('gw_ciguhanshuang'); + }, + ai:{ + value:[7.5,1], + useful:[5,1], + result:{ + target:-1 + }, + order:1.2, + } + }, + gw_baobaoshu:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_baobaoshu'); + }, + selectTarget:[1,2], + content:function(){ + target.addTempSkill('gw_baobaoshu',{player:'phaseAfter'}); + }, + ai:{ + value:[7.5,1], + useful:[5,1], + result:{ + target:function(player,target){ + return -Math.sqrt(target.countCards('h'))-0.5; + } + }, + order:1.2, + } + }, + gw_guaiwuchaoxue:{ + fullborder:'silver', + type:'spell', + subtype:'spell_silver', + enable:true, + usable:1, + forceUsable:true, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + var list=get.gainableSkills(function(info,skill){ + return !info.notemp&&info.ai&&info.ai.maixie_hp&&!player.hasSkill(skill); + }); + list.remove('guixin'); + if(list.length){ + var skill=list.randomGet(); + player.popup(skill); + player.addTempSkill(skill,{player:'phaseBegin'}); + var enemies=player.getEnemies(); + if(enemies.length){ + var source=enemies.randomGet(); + source.line(player); + source.addExpose(0.1); + player.damage(source); + player.recover(); + } + } + }, + ai:{ + value:[8,1], + useful:[3,1], + result:{ + target:function(player,target){ + if(target.hp<=1||target.hujia) return 0; + return 1; + } + }, + order:1, + } + }, + + gw_qinpendayu:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_qinpendayu'); + }, + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); + }, + content:function(){ + target.addSkill('gw_qinpendayu'); + }, + ai:{ + value:[5,1], + useful:[3,1], + result:{ + target:function(player,current){ + if(current.hasSkill('gw_qinpendayu')) return 0; + if(current.needsToDiscard()) return -1; + if(current.needsToDiscard(1)) return -0.7; + if(current.needsToDiscard(2)) return -0.4; + return -0.1; + } + }, + order:1.2, + } + }, + gw_birinongwu:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_birinongwu'); + }, + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); + }, + content:function(){ + target.addSkill('gw_birinongwu'); + }, + ai:{ + value:[5,1], + useful:[3,1], + result:{ + player:function(player,current){ + if(current.hasSkill('gw_birinongwu')) return 0; + return -1; + } + }, + order:1.2, + } + }, + gw_ciguhanshuang:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gw_ciguhanshuang'); + }, + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); + }, + content:function(){ + target.addSkill('gw_ciguhanshuang'); + }, + ai:{ + value:[5,1], + useful:[3,1], + result:{ + player:function(player,target){ + if(current.hasSkill('gw_ciguhanshuang')) return 0; + return -1; + } + }, + order:1.2, + } + }, + gw_baoxueyaoshui:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + filterTarget:true, + content:function(){ + 'step 0' + target.chooseToDiscard('h',2,true).delay=false; + 'step 1' + target.draw(); + }, + ai:{ + value:6, + useful:[3,1], + result:{ + target:function(player,target){ + if(target.hasSkillTag('noh')) return 0.1; + switch(target.countCards('h')){ + case 0:return 0.5; + case 1:return 0; + case 2:return -1.5; + default:return -1; + } + } + }, + order:8, + tag:{ + loseCard:1, + discard:1, + } + } + }, + gw_zhihuanjun:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + filterTarget:function(card,player,target){ + return target.isDamaged(); + }, + content:function(){ + 'step 0' + target.loseMaxHp(true); + 'step 1' + if(target.isDamaged()&&target.countCards('h')=player.hp; + }, + content:function(){ + 'step 0' + target.damage('thunder'); + 'step 1' + if(target.isIn()){ + target.draw(); + } + }, + ai:{ + basic:{ + order:1.8, + value:[5,1], + useful:[4,1], + }, + result:{ + target:-1 + }, + tag:{ + damage:1, + thunderDamage:1, + natureDamage:1, + } + } + }, + gw_poxiao:{ + fullborder:'bronze', + type:'spell', + subtype:'spell_bronze', + enable:true, + notarget:true, + content:function(){ + 'step 0' + var choice=1; + if(game.countPlayer(function(current){ + if(current.countCards('j')||current.hasSkillTag('weather')){ + if(get.attitude(player,current)>0){ + choice=0; + } + return true; + } + })){ + player.chooseControl(function(){ + return choice; + }).set('choiceList',[ + '解除任意名角色的天气效果并移除其判定区内的牌', + '随机获得一张铜卡法术(破晓除外)并展示之' + ]); + } + else{ + event.directfalse=true; + } + 'step 1' + if(!event.directfalse&&result.index==0){ + player.chooseTarget(true,[1,Infinity],'解除任意名角色的天气效果并移除其判定区内的牌',function(card,player,target){ + return target.countCards('j')||target.hasSkillTag('weather'); + }).ai=function(target){ + return get.attitude(player,target); + }; + } + else{ + var list=get.libCard(function(info,name){ + return name!='gw_poxiao'&&info.subtype=='spell_bronze'; + }); + if(list.length){ + player.gain(game.createCard(list.randomGet()),'gain2'); + } + else{ + player.draw(); + } + event.finish(); + } + 'step 2' + event.list=result.targets.slice(0).sortBySeat(); + 'step 3' + if(event.list.length){ + var target=event.list.shift(); + player.line(target,'green'); + var cards=target.getCards('j'); + if(cards.length){ + target.discard(cards); + } + if(target.hasSkillTag('weather')){ + var skills=target.getSkills(); + for(var i=0;i0){ + player.updateMarks(); + } + else{ + player.removeSkill('gw_kunenfayin'); + } + }, + } + }, + group:'gw_kunenfayin_count', + onremove:true + }, + gw_baobaoshu:{ + mark:true, + nopop:true, + intro:{ + content:'每使用一张基本牌或锦囊牌,需弃置一张牌' + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(player.countCards('he')==0) return false; + var type=get.type(event.card,'trick'); + return type=='basic'||type=='trick'; + }, + content:function(){ + if(!event.isMine()) game.delay(0.5); + player.chooseToDiscard(true,'he'); + }, + ai:{ + weather:true, + effect:{ + player:function(card,player){ + if(!player.needsToDiscard()) return 'zeroplayertarget'; + } + } + } + }, + gw_nuhaifengbao:{ + mark:true, + intro:{ + content:'结束阶段随机弃置一张牌(剩余#回合)' + }, + init:function(player){ + player.storage.gw_nuhaifengbao=2; + }, + trigger:{player:'phaseEnd'}, + forced:true, + nopop:true, + content:function(){ + player.randomDiscard(); + player.storage.gw_nuhaifengbao--; + if(player.storage.gw_nuhaifengbao>0){ + player.updateMarks(); + } + else{ + player.removeSkill('gw_nuhaifengbao'); + } + }, + onremove:true, + ai:{ + neg:true, + weather:true + } + }, + gw_youer:{ + trigger:{global:'phaseEnd',player:'dieBegin'}, + forced:true, + audio:false, + mark:true, + intro:{ + content:'cards' + }, + content:function(){ + if(player.storage.gw_youer){ + if(trigger.name=='phase'){ + player.gain(player.storage.gw_youer); + } + else{ + player.$throw(player.storage.gw_youer,1000); + for(var i=0;i0; + }, + content:function(){ + trigger.num--; + player.removeSkill('gw_ciguhanshuang'); + }, + ai:{ + weather:true + } + }, + gw_dieyi:{ + init:function(player){ + player.storage.gw_dieyi=1; + }, + onremove:true, + trigger:{global:'phaseEnd'}, + forced:true, + mark:true, + nopop:true, + process:function(player){ + if(player.hasSkill('gw_dieyi')){ + player.storage.gw_dieyi++; + } + else{ + player.addSkill('gw_dieyi'); + } + player.syncStorage('gw_dieyi'); + player.updateMarks(); + }, + intro:{ + content:'在当前回合的结束阶段,你随机弃置#张牌' + }, + content:function(){ + player.randomDiscard(player.storage.gw_dieyi); + player.removeSkill('gw_dieyi'); + } + }, + gw_leizhoushu:{ + mark:true, + intro:{ + content:function(storage,player){ + if(storage>=2){ + return '锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标(重复'+storage+'次)'; + } + else{ + return '锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标'; + } + } + }, + nopop:true, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + var list=game.filterPlayer(); + for(var i=0;i0&&event.parent.name=='phaseDraw'; + }, + content:function(){ + if(!player.storage.spell_gain||Math.max.apply(null,player.storage.spell_gain)<0){ + var tmp=player.storage.spell_gain2; + player.storage.spell_gain=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].randomGets(3); + player.storage.spell_gain2=Math.floor((15-Math.max.apply(null,player.storage.spell_gain))/2); + if(tmp){ + for(var i=0;i<3;i++){ + player.storage.spell_gain[i]+=tmp; + } + } + } + for(var i=0;i<3;i++){ + if(player.storage.spell_gain[i]==0){ + var list; + if(i==0){ + list=get.libCard(function(info){ + return info.subtype=='spell_gold'; + }); + if(get.mode()=='stone'){ + list.remove('gw_aerdeyin'); + list.remove('gw_niuquzhijing'); + } + } + else{ + list=get.libCard(function(info){ + return info.subtype=='spell_silver'; + }); + if(get.mode()=='stone'){ + list.remove('gw_butianshu'); + } + } + if(list&&list.length){ + ui.cardPile.insertBefore(game.createCard(list.randomGet()),ui.cardPile.firstChild); + } + } + player.storage.spell_gain[i]--; + } + } + } + }, + help:{ + '昆特牌':'
    • 法术为分金、银、铜三类,金卡和银卡不出现在牌堆中
    • '+ + '摸牌阶段有一定概率摸到银卡,在16个摸牌阶段中至少会摸到2张银卡
    • '+ + '摸牌阶段有一定概率摸到金卡,在16个摸牌阶段中至少会摸到1张金卡
    • '+ + '金卡无视调虎离山、潜行等免疫目标的效果
    • '+ + '进行洗牌时金卡、银卡将从弃牌堆中消失,不进入牌堆' + }, + translate:{ + spell:'法术', + spell_gold:'金卡法术', + spell_silver:'银卡法术', + spell_bronze:'铜卡法术', + + gw_youlanzhimeng:'幽蓝之梦', + gw_guaiwuchaoxue:'怪物巢穴', + gw_guaiwuchaoxue_info:'出牌阶段限用一次,随机获得一个卖血技能直到下一回合开始;令一名随机敌方角色对你造成一点伤害,然后你回复一点体力', + gw_baobaoshu:'雹暴术', + gw_baobaoshu_info:'天气牌,出牌阶段对至多两名角色使用,目标每使用一张基本牌或锦囊牌,需弃置一张牌,直到下一回合结束', + gw_baishuang:'白霜', + gw_baishuang_info:'天气牌,出牌阶段对至多三名角色使用,目标下个摸牌阶段摸牌数-1', + gw_nuhaifengbao:'怒海风暴', + gw_nuhaifengbao_bg:'海', + gw_nuhaifengbao_info:'天气牌,出牌阶段对一名角色使用,目标在结束阶段随机弃置一张牌,持续2回合', + gw_ganhan:'干旱', + gw_ganhan_info:'所有角色减少一点体力上限(不触发技能),然后结束出牌阶段', + gw_huangjiashenpan:'皇家审判', + gw_huangjiashenpan_info:'获得任意一张金卡法术(皇家审判除外),然后结束出牌阶段', + gw_chongci:'冲刺', + gw_chongci_info:'弃置所有牌并随机获得一张非金法术牌,每弃置一张手牌,便随机获得一张类别相同的牌;每弃置一张装备区内的牌,随机装备一件类别相同的装备;获得潜行直到下一回合开始,然后结束出牌阶段', + gw_tunshi:'吞噬', + gw_tunshi_info:'随机移除一名敌方角色的一个随机技能,你获得此技能并减少一点体力和体力上限,被移除技能的角色增加一点体力和体力上限,然后结束出牌阶段', + gw_dieyi:'蝶翼', + gw_dieyi_equip1:'蝶翼·器', + gw_dieyi_equip2:'蝶翼·衣', + gw_dieyi_equip3:'蝶翼·攻', + gw_dieyi_equip4:'蝶翼·防', + gw_dieyi_equip5:'蝶翼·宝', + gw_dieyi_judge:'蝶翼·判', + gw_dieyi_equip1_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_dieyi_equip2_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_dieyi_equip3_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_dieyi_equip4_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_dieyi_equip5_info:'在你从装备区中失去此牌后,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_dieyi_judge_info:'你在判定阶段移去此牌,并获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌', + gw_hudiewu:'蝴蝶舞', + gw_hudiewu_info:'将其他角色在场上的所有牌替换为蝶翼(每当你失去一张蝶翼,你获得一枚“蝶翼”标记;在任意角色的结束阶段,你移去所有“蝶翼”标记,并随机弃置等量的牌),然后结束出牌阶段', + gw_yigeniyin:'伊格尼印', + gw_yigeniyin_info:'对敌方角色中体力值最高的一名随机角色造成一点火焰伤害,然后对场上体力值最高的所有角色各造成一点火焰伤害,然后结束出牌阶段', + gw_leizhoushu:'雷咒术', + gw_leizhoushu_info:'获得技能雷咒术(在每个准备阶段令全场牌数最多的所有其他角色各随机弃置一张牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标,结算X次,X为本局获得此技能的次数),然后结束出牌阶段', + gw_aerdeyin:'阿尔德印', + gw_aerdeyin_bg:'印', + gw_aerdeyin_info:'对一名随机敌方角色造成一点伤害,若目标武将牌正面朝上,则将其翻面;新的一轮开始时,若目标武将牌正面朝上,则在当前回合结束后进行一个额外回合,否则将武将牌翻回正面', + gw_xinsheng:'新生', + gw_xinsheng_info:'选择一名角色,随机观看12张武将牌,选择一张替代其武将牌,并令其增加一点体力,然后结束出牌阶段', + gw_zhongmozhizhan:'终末之战', + gw_zhongmozhizhan_info:'将所有角色区域内的所有牌置入弃牌堆(不触发技能),然后结束出牌阶段', + gw_butianshu:'卜天术', + gw_butianshu_info:'出牌阶段对任意角色使用,将任意一张延时锦囊牌置入其判定区', + gw_zhihuanjun:'致幻菌', + gw_zhihuanjun_info:'出牌阶段对一名已受伤角色使用,令其减少一点体力上限;若该角色仍处于受伤状态且手牌数小于体力上限,则重复此结算', + gw_niuquzhijing:'纽曲之镜', + gw_niuquzhijing_info:'令全场体力最多的角色减少一点体力和体力上限,体力最少的角色增加一点体力和体力上限(不触发技能),然后结束出牌阶段', + gw_ansha:'暗杀', + gw_ansha_info:'令一名体力为1的随机敌方角立即死亡,然后结束出牌阶段', + gw_shizizhaohuan:'十字召唤', + gw_shizizhaohuan_info:'从牌堆中获得一张杀以及决斗、火攻、火烧连营、南蛮入侵四张牌中的随机一张', + gw_zuihouyuanwang:'最后愿望', + gw_zuihouyuanwang_info:'摸X张牌并弃置X张牌,X为存活角色数', + gw_zirankuizeng:'自然馈赠', + gw_zirankuizeng_info:'选择任意一张铜卡法术使用', + gw_poxiao:'破晓', + gw_poxiao_info:'选择一项:解除任意名角色的天气效果并移除其判定区内的牌,或随机获得一张铜卡法术(破晓除外)并展示之', + gw_zumoshoukao:'阻魔手铐', + gw_zumoshoukao_info:'令一名角色非锁定技失效直到下一回合结束', + gw_aozuzhilei:'奥祖之雷', + gw_aozuzhilei_info:'对一名体力值不小于你的角色造成一点雷属性伤害,然后该角色摸一张牌', + gw_zhuoshao:'灼烧', + gw_zhuoshao_info:'对任意名体力值为全场最高的角色使用,造成一点火属性伤害', + gw_fuyuan:'复原', + gw_fuyuan_info:'对一名濒死状态角色使用,目标回复一点体力并摸一张牌', + gw_youer:'诱饵', + gw_youer_bg:'饵', + gw_youer_info:'将一名其他角色的所有手牌移出游戏,然后摸一张牌,当前回合结束后该角色将以此法失去的牌收回手牌', + gw_tongdi:'通敌', + gw_tongdi_info:'观看一名其他角色的手牌并获得其中一张,然后令目标获得一张杀', + gw_baoxueyaoshui:'暴雪药水', + gw_baoxueyaoshui_info:'令一名角色弃置两张手牌并摸一张牌', + gw_birinongwu:'蔽日浓雾', + gw_birinongwu_bg:'雾', + gw_birinongwu_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标不能使用杀直到下一个出牌阶段结束', + gw_qinpendayu:'倾盆大雨', + gw_qinpendayu_bg:'雨', + gw_qinpendayu_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标手牌上限-1直到下一个弃牌阶段结束', + gw_ciguhanshuang:'刺骨寒霜', + gw_ciguhanshuang_bg:'霜', + gw_ciguhanshuang_info:'天气牌,出牌阶段对一名角色及其相邻角色使用,目标下个摸牌阶段摸牌数-1', + gw_wenyi:'瘟疫', + gw_wenyi_info:'令所有体力值为全场最少的角色随机弃置一张手牌;若没有手牌,改为失去一点体力', + gw_yanziyaoshui:'燕子药水', + gw_yanziyaoshui_info:'令一名角色摸一张牌,若其手牌数为全场最少或之一,改为摸两张', + gw_shanbengshu:'山崩术', + gw_shanbengshu_info:'出牌阶段对自己使用,随机弃置两件敌方角色场上的装备', + gw_kunenfayin:'昆恩法印', + gw_kunenfayin_info:'出牌阶段对一名角色使用,目标防止所有非属性伤害,持续X个角色的回合(X为存活角色数且最多为5)', + }, + cardType:{ + spell:0.5, + spell_bronze:0.2, + spell_silver:0.3, + spell_gold:0.4 + }, + list:[ + ['club',3,'gw_zhihuanjun'], + ['spade',2,'gw_zhihuanjun'], + + ['heart',7,'gw_poxiao'], + ['diamond',4,'gw_poxiao'], + + ['spade',9,'gw_aozuzhilei','thunder'], + ['club',7,'gw_aozuzhilei','thunder'], + + ['club',1,'gw_zumoshoukao'], + ['spade',1,'gw_zumoshoukao'], + + ['diamond',5,'gw_qinpendayu'], + ['club',7,'gw_qinpendayu'], + + ['spade',9,'gw_birinongwu'], + ['heart',13,'gw_birinongwu'], + + ['diamond',11,'gw_ciguhanshuang'], + ['club',7,'gw_ciguhanshuang'], + + ['heart',4,'gw_baoxueyaoshui'], + ['spade',8,'gw_baoxueyaoshui'], + + ['spade',8,'gw_shanbengshu'], + ['spade',2,'gw_kunenfayin'], + ['club',3,'gw_wenyi'], + ['heart',8,'gw_yanziyaoshui'], + ], + }; +}); diff --git a/card/sp.js b/card/sp.js index a8e0fcee4..4afff5935 100644 --- a/card/sp.js +++ b/card/sp.js @@ -677,7 +677,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ list:[ ['spade',1,'caomu'], ['club',3,'caomu'], - ['heart',12,'shengdong',], + ['heart',12,'shengdong'], ['club',9,'shengdong'], ['spade',9,'shengdong'], ['diamond',4,'zengbin'], @@ -695,7 +695,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ["club",13,'jinchan'], ["club",12,'qijia'], ["club",13,'qijia'], - ["spade",1,'fulei','thunder'], + ["spade",1,'fulei'], ["spade",6,'qibaodao'], ["spade",5,'zhungangshuo'], ["spade",2,'lanyinjia'], diff --git a/card/standard.js b/card/standard.js index a018678d3..c77c99c84 100644 --- a/card/standard.js +++ b/card/standard.js @@ -278,7 +278,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ // if(player==target&&player.hp<=0) return 2; - if(player.hasSkillTag('nokeep')) return 2; + if(player.hasSkillTag('nokeep',true,null,true)) return 2; var nd=player.needsToDiscard(); var keep=false; if(nd<=0){ diff --git a/character/extra.js b/character/extra.js index f2b87be08..34d0b52fe 100755 --- a/character/extra.js +++ b/character/extra.js @@ -3145,14 +3145,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ cardUsable:function (card,player,num){ - if(player.hasMark('drlt_jieying_mark')&&game.hasPlayer(function(current){ + if(player.hasMark('drlt_jieying_mark')&&card.name=='sha') return num+game.countPlayer(function(current){ return current.hasSkill('drlt_jieying'); - })&&card.name=='sha') return num+1; + }); }, maxHandcard:function (player,num){ - if(player.hasMark('drlt_jieying_mark')&&game.hasPlayer(function(current){ + if(player.hasMark('drlt_jieying_mark')) return num+game.countPlayer(function(current){ return current.hasSkill('drlt_jieying'); - })) return num+1; + }); }, }, audio:'drlt_jieying', @@ -3166,12 +3166,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, content:function(){ - trigger.num++; + trigger.num+=game.countPlayer(function(current){ + return current.hasSkill('drlt_jieying'); + }); }, ai:{ nokeep:true, skillTagFilter:function(player){ - return player.hasMark('drlt_jieying_mark'); + if(!player.hasMark('drlt_jieying_mark')) return false; }, }, }, @@ -3225,8 +3227,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=result.targets[0]; player.line(target); player.logSkill('drlt_jieying',target); - player.removeMark('drlt_jieying_mark',1); - target.addMark('drlt_jieying_mark',1); + var mark=player.countMark('drlt_jieying_mark'); + player.removeMark('drlt_jieying_mark',mark); + target.addMark('drlt_jieying_mark',mark); }; }, }, @@ -3244,7 +3247,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(trigger.player.countCards('h')>0){ trigger.player.give(trigger.player.getCards('h'),player); } - trigger.player.removeMark('drlt_jieying_mark',1); + trigger.player.removeMark('drlt_jieying_mark',trigger.player.countMark('drlt_jieying_mark')); }, }, }, diff --git a/character/mobile.js b/character/mobile.js index fa9a0fe18..3d37d219b 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -4095,9 +4095,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //audio:'kuangcai', silent:true, popup:false, - usable:5, + //usable:5, filter:function(event,player){ - if(!player.forceCountChoose){ + if(!player.forceCountChoose||!player.forceCountChoose.phaseUse){ return false; } return true; @@ -4129,7 +4129,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //ui.auto.show(); player.removeSkill('kuangcai_use'); player.removeSkill('kuangcai_cancel'); - if(player.storage.counttrigger) delete player.storage.counttrigger.kuangcai_use; } } }, @@ -4779,7 +4778,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!['basic','trick'].contains(get.type(event.card))) return false; return player.getHistory('useCard',function(ev){ return ev.getParent('phaseUse')==evt&&get.tag(ev.card,'damage')&&['basic','trick'].contains(get.type(ev.card)); - }).indexOf(event)==0; + }).indexOf(event)==0&&game.hasPlayer(function(current){ + return current!=player&&!current.storage.weifeng2&&event.targets.contains(current); + }); }, content:function(){ 'step 0' diff --git a/character/sp.js b/character/sp.js index c8a8db853..1656e0320 100755 --- a/character/sp.js +++ b/character/sp.js @@ -20,7 +20,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guozhan2:["mifuren","mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","bianfuren","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi"], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_single:["hejin","hansui","niujin"], - sp_others:["hanba"], + sp_others:["hanba","caiyang"], }, }, characterFilter:{ @@ -32,6 +32,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + caiyang:['male','qun',1,['yinka'],['forbidai','unseen']], sp_xuyou:['male','qun',3,['spshicai','spfushi']], chunyuqiong:['male','qun',5,['cangchu','sushou','liangying']], lvkuanglvxiang:['male','qun',4,['liehou','qigong']], @@ -199,6 +200,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + caiyang:'蔡阳(?-201年),又作蔡扬,东汉丞相曹操部下武将,汝南太守。于建安六年(201)奉曹操之命攻击与刘备联合的汝南贼龚都等人,兵败被刘备所杀。明代小说《三国演义》改编为“云长擂鼓斩蔡阳”。', + pujing:'湖北省当阳境内有一座山,名叫玉泉山。东汉建安末年,山上住着一个老和尚,法名普净,普净原来是沂水关镇国寺方丈,后因云游天下,来到此处,风这地方山明水秀,就于山中结草为庵,每天坐禅参道,身边只有一个小和尚,外出化一些斋饭,供养师父。在《三国演义》中,当关羽通过汜水关时,正是由于普净提醒,关羽才揭穿了卞喜的阴谋,并杀死了卞喜。关羽死后,其怨魂亦在普净的指点下醒悟,放下了心中的仇恨,专心致力于造福一方百姓。', + huban:'为《三国演义》所杜撰的人物,正史无记载,荥阳太守王植麾下从事、桓帝时议郎胡华之子。关羽过五关斩六将时其中一关就是王植所镇守,胡班奉命放火夜袭关公,因敬服公之气概,并得其父托公所带家书,班看毕,叹曰:“险些误杀忠良!”故将之放走。胡班到荆州来投降关公,公念其旧日相救之情,甚爱之;令随费诗入川,见汉中王受爵。费诗辞别关公,带了胡班,自回蜀中去了。', chunyuqiong:'淳于琼(?-200年),字仲简,颍川(治今河南禹州)人。东汉时期官吏,于汉灵帝中平五年(188)被任命为西园八校尉之一的右校尉,与蹇硕、袁绍、鲍鸿、曹操、赵融、冯芳、夏牟同列。为袁绍大将,与张郃、高览等人齐名。在官渡之战时镇守乌巢,遭到曹操的偷袭而惨败,自己也被曹操处斩。', lvkuanglvxiang:'吕旷(生卒年不详),与吕翔同是袁绍属下,袁绍去世后,为袁尚守东平,后来投降曹操,并被封为列侯。在《三国演义》中,在曹操准备往南准备攻击前,两人跟著大将曹仁和将军李典准备要攻击刘备。但吕旷被赵云刺下马身亡,而吕翔也死于张飞矛下,可以算是出师未捷身先死', caobuxing:'曹不兴,亦名弗兴,三国时著名画家。孙吴吴兴(今浙江湖州)人,生卒年不详。他在黄武年间(222—229年)享有很大的声誉。被称为“佛画之祖”。与东晋顾恺之、南朝宋陆探微、南朝梁张僧繇并称“六朝四大家”。又与赵达的算术、严武的弈棋、皇象的草书等号称“吴中八绝”。曹不兴善画龙、虎、马及人物,有“落墨为蝇”等传奇故事,其佛画成就对后世影响很大,相传其所画龙头令谢赫叹服不已。画迹今已不存,据《贞观公私画史》载,作品有《青溪龙》、《赤盘龙》、《南海监牧进十种马图》、《夷事夷兽样》、《桃源图》等,惜早已散佚。 但之后的著名画家卫协直接师承其法。', @@ -529,6 +533,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //蔡阳 + yinka:{ + trigger:{player:['drawBegin','judgeBegin']}, + direct:true, + filter:function(){ + return ui.cardPile.childNodes.length>0; + }, + content:function(){ + 'step 0' + player.chooseButton(['印卡:请选择要置于牌堆'+(trigger.bottom?'底':'顶')+'的牌(先选择的在上)',Array.from(ui.cardPile.childNodes)],[1,trigger.num||1]); + 'step 1' + if(result.bool){ + while(result.links.length){ + if(trigger.bottom){ + var card=result.links.shift(); + ui.cardPile.removeChild(card); + ui.cardPile.appendChild(card); + } + else{ + var card=result.links.pop(); + ui.cardPile.removeChild(card); + ui.cardPile.insertBefore(card,ui.cardPile.firstChild) + } + } + } + }, + ai:{isLuckyStar:true}, + }, //吕旷吕翔和淳于琼和官渡哔哔机 spshicai:{ audio:2, @@ -16815,6 +16847,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{ global:"gameDrawAfter", + player:"enterGame", }, forced:true, filter:function (){ @@ -19310,6 +19343,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zezhu_info:'出牌阶段限一次,你可以获得双方主帅的各一张牌(若无牌则改为你摸一张牌),然后交给双方主帅各一张牌。', chenggong:'逞功', chenggong_info:'当有角色使用牌指定目标后,若此牌对目标数大于1,则你可令使用者摸一张牌。', + caiyang:'蔡阳', + yinka:'印卡', sp_default:"常规", sp_whlw:"文和乱武", diff --git a/character/yijiang.js b/character/yijiang.js index c89e8428e..47a0d5bed 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -10426,6 +10426,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" player.draw(); + var cards=Array.from(ui.ordering.childNodes); + while(cards.length){ + cards.shift().discard(); + } "step 1" var evt=_status.event.getParent('phase'); if(evt){ diff --git a/game/asset.js b/game/asset.js index bf21809b4..710076990 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.100.7', + 'v1.9.101', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -3189,6 +3189,9 @@ window.noname_asset_list=[ 'image/character/yj_zhangliao.jpg', 'image/character/key_miki.jpg', 'image/character/key_shiki.jpg', + 'image/character/caiyang.jpg', + 'image/character/huban.jpg', + 'image/character/pujing.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index be88cea3f..7eb5f5422 100644 --- a/game/game.js +++ b/game/game.js @@ -6013,6 +6013,11 @@ init:true, frequent:true }, + qianlidanji:{ + name:'千里单骑', + init:true, + frequent:true + }, liangjunduilei:{ name:'两军对垒', init:true, @@ -9883,7 +9888,7 @@ if(!_status.event.targets.contains(target)) return false; return lib.filter[_status.event.nodistance?'targetEnabled':'filterTarget'].apply(this,arguments); }); - next.set('ai',event.ai||get.effect); + next.set('ai',event.ai||get.effect_use); next.set('selectTarget',event.selectTarget||lib.filter.selectTarget); if(event.nodistance) next.set('nodistance',true); if(event.forced) next.set('forced',true); @@ -13677,39 +13682,48 @@ } } } - if(true){ - var str=''; - if(targets.length){ - str+='对'+(targets[0]==player?'自己':get.translation(targets[0])); - for(var i=1;i'; - } - else{ - str+=get.translation(arguments[i]); - } + str+=''+get.translation(arguments[i])+''; + str2+=get.translation(arguments[i]); } else if(itemtype=='cards'||itemtype=='card'||(typeof arguments[i]=='object'&&arguments[i]&&arguments[i].name)){ - if(lib.config.log_highlight){ - str+=''+get.translation(arguments[i])+''; - } - else{ - str+=get.translation(arguments[i]); - } + str+=''+get.translation(arguments[i])+''; + str2+=get.translation(arguments[i]); } else if(typeof arguments[i]=='object'){ if(arguments[i]){ @@ -32577,52 +32579,52 @@ } else{ str+=get.translation(arguments[i]); + str2+=get.translation(arguments[i]); } } } else if(typeof arguments[i]=='string'){ - if(lib.config.log_highlight){ - if(arguments[i][0]=='【'&&arguments[i][arguments[i].length-1]=='】'){ - str+=''+get.translation(arguments[i])+''; - } - else if(arguments[i][0]=='#'){ - var color=''; - switch(arguments[i][1]){ - case 'b':color='blue';break; - case 'y':color='yellow';break; - case 'g':color='green';break; - } - str+=''+get.translation(arguments[i].slice(2))+''; - } - else{ - str+=get.translation(arguments[i]); + if(arguments[i][0]=='【'&&arguments[i][arguments[i].length-1]=='】'){ + str+=''+get.translation(arguments[i])+''; + str2+=get.translation(arguments[i]); + } + else if(arguments[i][0]=='#'){ + var color=''; + switch(arguments[i][1]){ + case 'b':color='blue';break; + case 'y':color='yellow';break; + case 'g':color='green';break; } + str+=''+get.translation(arguments[i].slice(2))+''; + str2+=get.translation(arguments[i].slice(2)); } else{ str+=get.translation(arguments[i]); + str2+=get.translation(arguments[i]); } } else{ str+=arguments[i]; + str2+=arguments[i]; } } var node=ui.create.div(); - node.innerHTML=str; + node.innerHTML=lib.config.log_highlight?str:str2; ui.sidebar.insertBefore(node,ui.sidebar.firstChild); - game.addVideo('log',null,str); - game.broadcast(function(str){ - game.log(str); - },str); + game.addVideo('log',null,lib.config.log_highlight?str:str2); + game.broadcast(function(str,str2){ + game.log(lib.config.log_highlight?str:str2); + },str,str2); if(!_status.video&&!game.online){ if(!logvid){ logvid=_status.event.getLogv(); } if(logvid){ - game.logv(logvid,'
      '+str+'
      '); + game.logv(logvid,'
      '+lib.config.log_highlight?str:str2+'
      '); } } - // if(lib.config.title) document.title=str; + // if(lib.config.title) document.title=lib.config.log_highlight?str:str2; if(lib.config.show_log!='off'&&!game.chess){ var nodeentry=node.cloneNode(true); ui.arenalog.insertBefore(nodeentry,ui.arenalog.firstChild); @@ -40184,7 +40186,7 @@ row2.hide(); } if(lib.config.mode=='identity'||lib.config.mode=='guozhan'){ - if(!game.phaseNumber){ + if(!game.phaseNumber||_status.qianlidanji){ nodereplace.classList.add('unselectable'); } else if(_status.event.isMine()&&ui.auto.classList.contains('hidden')){ @@ -49507,7 +49509,7 @@ uiintro.addText(get.colorspan(lib.characterTitle[node.name])); } - if(node.isUnderControl()||(game.me&&game.me.hasSkillTag('viewHandcard',null,node,true))){ + if(node.isUnderControl()||(!game.observe&&game.me&&game.me.hasSkillTag('viewHandcard',null,node,true))){ var hs=node.getCards('h'); if(hs.length){ uiintro.add('
      手牌
      '); @@ -50726,6 +50728,32 @@ } return result; }, + effect_use:function(target,card,player,player2,isLink){ + var event=_status.event; + var eventskill=null; + if(player==undefined) player=_status.event.player; + if(typeof card!='string'&&(typeof card!='object'||!card.name)){ + var skillinfo=get.info(event.skill); + if(event.skill&&skillinfo.viewAs==undefined) card=_status.event.skill; + else{ + card=get.card(); + if(skillinfo&&skillinfo.viewAs&&card.name===skillinfo.viewAs.name){ + eventskill=event.skill; + } + } + } + var info=get.info(card); + if(typeof card=='object'&&info&&info.changeTarget){ + var targets=[target]; + info.changeTarget(player,targets); + var eff=0; + for(var i of targets){ + eff+=get.effect(i,card,player,player2,isLink); + } + return eff; + } + return get.effect.apply(this,arguments); + }, effect:function(target,card,player,player2,isLink){ var event=_status.event; var eventskill=null; diff --git a/game/update.js b/game/update.js index 16a032360..76088b55c 100644 --- a/game/update.js +++ b/game/update.js @@ -1,21 +1,21 @@ window.noname_update={ - version:'1.9.100.7.1', - update:'1.9.100.7', + version:'1.9.101', + update:'1.9.100.7.1', changeLog:[ - '神山识', + '千里单骑(乱斗)', 'bug修复', ], files:[ //'card/extra.js', //'card/huanlekapai.js', - //'card/sp.js', - //'card/standard.js', + 'card/sp.js', + 'card/standard.js', //'card/swd.js', //'card/mtg.js', - //'card/gujian.js', - //'card/guozhan.js', - //'card/gwent.js', + 'card/gujian.js', + 'card/guozhan.js', + 'card/gwent.js', //'card/yunchou.js', //'card/zhenfa.js', //'card/zhulu.js', @@ -25,18 +25,18 @@ window.noname_update={ //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', //'character/old.js', //'character/refresh.js', //'character/shenhua.js', - //'character/sp.js', + 'character/sp.js', //'character/tw.js', //'character/standard.js', //'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', @@ -48,10 +48,10 @@ window.noname_update={ //'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/NoSleep.js', //'game/config.js', //'game/package.js', diff --git a/image/character/caiyang.jpg b/image/character/caiyang.jpg new file mode 100644 index 000000000..706e26dcf Binary files /dev/null and b/image/character/caiyang.jpg differ diff --git a/image/character/huban.jpg b/image/character/huban.jpg new file mode 100644 index 000000000..97abd0bd1 Binary files /dev/null and b/image/character/huban.jpg differ diff --git a/image/character/pujing.jpg b/image/character/pujing.jpg new file mode 100644 index 000000000..5fbe76d34 Binary files /dev/null and b/image/character/pujing.jpg differ diff --git a/mode/brawl.js b/mode/brawl.js index 4f6cc6997..ea1c0877b 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -424,6 +424,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, init:function(){}, content:{ + submode:'normal', chooseCharacterBefore:function(){ game.identityVideoName='幻化之战'; var skills=[]; @@ -2443,6 +2444,544 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } }, + qianlidanji:{ + name:'千里单骑', + mode:'identity', + showcase:function(init){ + var node=this; + var player1; + if(init){ + player1=ui.create.player(null,true).init('jsp_guanyu'); + player1.node.marks.remove(); + player1.node.hp.remove(); + player1.style.left='20px'; + player1.style.top='20px'; + player1.style.transform='scale(0.9)'; + player1.node.count.remove(); + this.appendChild(player1); + this.player1=player1; + } + else{ + player1=this.player1; + } + var rect1=player1.getBoundingClientRect(); + var func=function(){ + var player2=ui.create.player(null,true).init('caiyang'); + player2.node.marks.remove(); + player2.node.hp.remove(); + player2.style.left='auto'; + player2.style.right='20px'; + player2.style.top='20px'; + player2.node.count.remove(); + player2.style.transform='scale(0.7)'; + player2.style.opacity=0; + node.appendChild(player2); + ui.refresh(player2); + player2.style.opacity=1; + player2.style.transform='scale(0.9)'; + var rect2=player2.getBoundingClientRect(); + var left1=rect1.left+rect1.width/2-ui.arena.offsetLeft; + var left2=rect2.left+rect2.width/2-ui.arena.offsetLeft; + var top1=rect1.top+rect1.height/2-ui.arena.offsetTop; + var top2=rect2.top+rect2.height/2-ui.arena.offsetTop; + setTimeout(function(){ + if(!player2) return; + game.linexy([left1,top1,left2,top2]); + var popup=ui.create.div('.damage'); + popup.innerHTML='-1'; + popup.dataset.nature='soil'; + player2.appendChild(popup); + ui.refresh(popup); + popup.classList.add('damageadded'); + popup.listenTransition(function(){ + setTimeout(function(){ + popup.delete(); + },200); + }); + },600); + setTimeout(function(){ + if(!player2) return; + player2.style.transition='all 0.5s'; + player2.style.transform='scale(1.2)'; + player2.delete(); + },1100); + }; + node.showcaseinterval=setInterval(func,2600); + func(); + }, + intro:[ + '无尽而漫长的单挑试炼', + (lib.config.qianlidanji_level?('你的最高纪录是连续通过'+lib.config.qianlidanji_level+'关,是否能够突破这一记录呢?'):'你能否过五关斩六将,击败古城战神蔡阳呢?'), + ], + init:function(){ + if(!_status.qianlidanji) _status.qianlidanji={ + completeNumber:0, + used:['pujing','huban','caiyang'], + addFellow:function(name){ + game.fan.dataset.position=2; + ui.arena.setNumber(3); + game.fellow=game.addFellow(1,name); + game.fellow.gain(get.cards(4)); + game.fellow.identity='zhong'; + game.fellow.setIdentity(); + game.fellow.identityShown=true; + game.fellow.node.identity.classList.remove('guessing'); + _status.event.getParent('phaseLoop').player=game.fellow; + }, + completeReward:[ + ['回复1点体力并摸一张牌',function(){ + game.zhu.recover(); + game.zhu.draw(); + }], + ['摸三张牌',function(){ + game.zhu.recover(); + }], + ['将一张防具牌置入装备区并摸一张牌',function(){ + var card=get.cardPile(function(card){ + return get.subtype(card)=='equip2'&&!get.cardtag(card,'gifts'); + }); + if(card) game.zhu.equip(card); + game.zhu.draw(); + }], + ['将一张武器牌置入装备区并摸一张牌',function(){ + var card=get.cardPile(function(card){ + return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts'); + }); + if(card) game.zhu.equip(card); + game.zhu.draw(); + }], + ['回复2点体力并弃置一张牌',function(){ + game.zhu.recover(2); + game.zhu.chooseToDiscard('he',true); + }], + ['摸五张牌,然后弃置三张牌',function(){ + game.zhu.draw(5); + game.zhu.chooseToDiscard(3,'he',true); + }], + ['摸五张牌,然后对手摸两张牌',function(){ + game.zhu.draw(5); + game.fan.draw(2); + }], + ['将一张武器牌和一张防具牌置入装备区',function(){ + var card=get.cardPile(function(card){ + return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts'); + }); + if(card) game.zhu.equip(card); + var card2=get.cardPile(function(card){ + return get.subtype(card)=='equip2'&&!get.cardtag(card,'gifts'); + }); + if(card2) game.zhu.equip(card2); + }], + ['将一张武器牌和一张防御坐骑牌置入装备区',function(){ + var card=get.cardPile(function(card){ + return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts'); + }); + if(card) game.zhu.equip(card); + var card2=get.cardPile(function(card){ + return get.subtype(card)=='equip3'&&!get.cardtag(card,'gifts'); + }); + if(card2) game.zhu.equip(card2); + }], + ['弃置所有手牌并于下一关获得【涅槃】(标)',function(){ + var hs=game.zhu.getCards('h'); + if(hs.length) game.zhu.discard(hs); + game.zhu.addTempSkill('oldniepan','dieBegin'); + game.zhu.restoreSkill('oldniepan'); + }], + ['获得两张锦囊牌',function(){ + var list=[]; + while(list.length<2){ + var card=get.cardPile(function(card){ + return !list.contains(card)&&get.type(card,'trick')=='trick'; + }); + if(!card) break; + list.push(card); + } + if(list.length) game.zhu.gain(list,'gain2','log'); + }], + ['将体力回复至体力上限,然后弃置一张牌',function(){ + var num=game.zhu.maxHp-game.zhu.hp; + if(num) game.zhu.recover(num); + game.zhu.chooseToDiscard('he',true); + }], + ['弃置两张牌,在下一关的第一个回合后进行一个额外的回合',function(){ + game.zhu.chooseToDiscard(2,true,'he'); + game.zhu.addSkill('qianlidanji_phase'); + }], + ['摸一张牌,然后将对手翻面',function(){ + game.zhu.draw(); + game.fan.turnOver(true); + }], + ['摸一张牌,然后令对手受到1点伤害',function(){ + game.zhu.draw(); + game.fan.damage(game.zhu); + }], + ['获得五张基本牌',function(){ + var list=[]; + while(list.length<5){ + var card=get.cardPile(function(card){ + return !list.contains(card)&&get.type(card)=='basic'; + }); + if(!card) break; + list.push(card); + } + if(list.length) game.zhu.gain(list,'gain2','log'); + }], + ['失去1点体力,然后摸五张牌',function(){ + game.zhu.loseHp(); + game.zhu.draw(5); + }], + ['失去体力至1点,然后摸七张牌',function(){ + var num=game.zhu.hp-1; + if(num) game.zhu.loseHp(num); + game.zhu.draw(7) + }], + ['弃置一张牌,然后令对手受到2点伤害',function(){ + game.zhu.chooseToDiscard('he',true); + game.fan.damage(game.zhu,2); + }], + ['在下一关中召唤普净一同战斗',function(){ + _status.qianlidanji.addFellow('pujing'); + }], + ['在下一关中召唤胡班一同战斗',function(){ + _status.qianlidanji.addFellow('huban'); + }], + ], + replace_character:function(){ + 'step 0' + _status.qianlidanji.completeNumber++; + if(!lib.config.qianlidanji_level||lib.config.qianlidanji_level<_status.qianlidanji.completeNumber){ + lib.config.qianlidanji_level=_status.qianlidanji.completeNumber; + game.saveConfig('qianlidanji_level',lib.config.qianlidanji_level); + } + if(game.fellow&&game.fellow.isAlive()){ + if(ui.land&&ui.land.player==game.fellow){ + game.addVideo('destroyLand'); + ui.land.destroy(); + } + game.zhu.next=game.fan; + game.fan.next=game.zhu; + game.zhu.nextSeat=game.fan; + game.fan.nextSeat=game.zhu; + game.players.remove(game.fellow); + _status.dying.remove(game.fellow); + game.fellow.out(); + for(var mark in game.fellow.marks){ + game.fellow.unmarkSkill(mark); + } + while(game.fellow.node.marks.childNodes.length>1){ + game.fellow.node.marks.lastChild.remove(); + } + for(var i in game.fellow.tempSkills){ + game.fellow.removeSkill(i); + } + var skills=game.fellow.getSkills(); + for(var i=0;i=6){ + list.push('我不想再打了,直接在这里结束吧!'); + list2.push(function(){ + game.over(true); + }); + } + event.list=list2; + game.zhu.chooseControl().set('choiceList',list).set('prompt','请选择一项奖励(当前已通过'+_status.qianlidanji.completeNumber+'关)'); + } + 'step 2' + if(_status.qianlidanji.completeNumber!=5){ + if(result.index==3){ + game.over(true); + return; + } + event.reward=event.list[result.index]; + } + _status.characterlist.removeArray(_status.qianlidanji.used); + if(_status.qianlidanji.completeNumber==5) event._result={links:['caiyang']}; + else game.zhu.chooseButton(['选择下一关出战的对手',[_status.characterlist.randomGets(3),'character']],true); + 'step 3' + _status.event.getParent('phaseLoop').player=game.zhu; + var source=game.fan; + var name=result.links[0]; + source.revive(null,false); + _status.characterlist.remove(name); + _status.qianlidanji.used.push(name); + source.uninit(); + source.init(name); + game.addVideo('reinit',source,[name]); + source.lose(source.getCards('hej'))._triggered=null; + var gain=4; + var add=0; + switch(_status.qianlidanji.completeNumber){ + case 5:break; + case 1:gain=5;break; + case 2:gain=5;add=1;break; + case 3:gain=6;add=1;break; + default:gain=6;add=2;break; + }; + source.hp+=add; + source.maxHp+=add; + source.update(); + source.gain(get.cards(gain))._triggered=null; + game.triggerEnter(source); + if(event.reward) event.reward(); + 'step 4' + var cards=Array.from(ui.ordering.childNodes); + while(cards.length){ + cards.shift().discard(); + } + var evt=_status.event.getParent('phase'); + if(evt){ + game.resetSkills(); + _status.event=evt; + _status.event.finish(); + _status.event.untrigger(true); + } + }, + }; + _status.qianlidanji.player_number=get.config('player_number'); + game.saveConfig('player_number','2','identity'); + }, + content:{ + submode:'normal', + chooseCharacterBefore:function(){ + game.identityVideoName='千里单骑'; + game.saveConfig('player_number',_status.qianlidanji.player_number,'identity'); + game.chooseCharacter=function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.setContent(function(){ + "step 0" + ui.arena.classList.add('choose-character'); + game.me.identity='zhu'; + game.zhu=game.me; + game.fan=game.me.next; + game.fan.identity='fan'; + game.zhu.setIdentity(); + game.zhu.identityShown=true; + game.zhu.node.identity.classList.remove('guessing'); + game.fan.setIdentity(); + game.fan.identityShown=true; + game.fan.node.identity.classList.remove('guessing'); + + event.list=[]; + for(var i in lib.character){ + if(lib.filter.characterDisabled(i)) continue; + event.list.push(i); + } + event.list.randomSort(); + _status.characterlist=event.list.slice(0); + var list=event.list.slice(0,5); + delete event.swapnochoose; + var dialog; + if(event.swapnodialog){ + dialog=ui.dialog; + event.swapnodialog(dialog,list); + delete event.swapnodialog; + } + else{ + var str='选择角色'; + dialog=ui.create.dialog(str,'hidden',[list,'character']); + } + dialog.setCaption('选择角色'); + game.me.chooseButton(dialog,true).set('onfree',true); + + ui.create.cheat=function(){ + _status.createControl=ui.cheat2; + ui.cheat=ui.create.control('更换',function(){ + if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ + return; + } + if(game.changeCoin){ + game.changeCoin(-3); + } + + event.list.randomSort(); + list=event.list.slice(0,5); + + var buttons=ui.create.div('.buttons'); + var node=_status.event.dialog.buttons[0].parentNode; + _status.event.dialog.buttons=ui.create.buttons(list,'character',buttons); + _status.event.dialog.content.insertBefore(buttons,node); + buttons.animate('start'); + node.remove(); + game.uncheck(); + game.check(); + }); + delete _status.createControl; + }; + if(lib.onfree){ + lib.onfree.push(function(){ + event.dialogxx=ui.create.characterDialog('heightset'); + if(ui.cheat2){ + ui.cheat2.animate('controlpressdownx',500); + ui.cheat2.classList.remove('disabled'); + } + }); + } + else{ + event.dialogxx=ui.create.characterDialog('heightset'); + } + + ui.create.cheat2=function(){ + ui.cheat2=ui.create.control('自由选将',function(){ + if(this.dialog==_status.event.dialog){ + if(game.changeCoin){ + game.changeCoin(50); + } + this.dialog.close(); + _status.event.dialog=this.backup; + this.backup.open(); + delete this.backup; + game.uncheck(); + game.check(); + if(ui.cheat){ + ui.cheat.animate('controlpressdownx',500); + ui.cheat.classList.remove('disabled'); + } + } + else{ + if(game.changeCoin){ + game.changeCoin(-10); + } + this.backup=_status.event.dialog; + _status.event.dialog.close(); + _status.event.dialog=_status.event.parent.dialogxx; + this.dialog=_status.event.dialog; + this.dialog.open(); + game.uncheck(); + game.check(); + if(ui.cheat){ + ui.cheat.classList.add('disabled'); + } + } + }); + if(lib.onfree){ + ui.cheat2.classList.add('disabled'); + } + } + if(!_status.brawl||!_status.brawl.chooseCharacterFixed){ + if(!ui.cheat&&get.config('change_choice')) + ui.create.cheat(); + if(!ui.cheat2&&get.config('free_choose')) + ui.create.cheat2(); + } + "step 1" + if(ui.cheat){ + ui.cheat.close(); + delete ui.cheat; + } + if(ui.cheat2){ + ui.cheat2.close(); + delete ui.cheat2; + } + game.addRecentCharacter(result.buttons[0].link); + game.zhu.init(result.buttons[0].link); + _status.characterlist.remove(result.buttons[0].link); + _status.qianlidanji.used.add(result.buttons[0].link); + game.zhu.chooseControl('地狱','困难','普通','简单','无双').set('prompt','请选择游戏难度'); + "step 2" + var hp=Math.floor(result.index/2); + event.draw=Math.floor((result.index+1)/2); + if(hp){ + game.zhu.hp+=hp; + game.zhu.maxHp+=hp; + game.zhu.update(); + } + game.zhu.chooseButton(['请选择对手的登场武将',[_status.characterlist.randomGets(3),'character']],true); + "step 3" + game.fan.init(result.links[0]); + _status.characterlist.remove(result.links[0]); + _status.qianlidanji.used.add(result.links[0]); + if(event.draw){ + game.zhu.directgain(get.cards(event.draw)); + } + setTimeout(function(){ + ui.arena.classList.remove('choose-character'); + },500); + + var pack={ + character:{ + pujing:['male','qun',1,[],[]], + huban:['male','qun',2,[],[]], + }, + translate:{ + pujing:'普净', + huban:'胡班', + }, + skill:{ + qianlidanji_phase:{ + trigger:{global:'phaseBefore'}, + forced:true, + silent:true, + firstDo:true, + content:function(){ + player.removeSkill('qianlidanji_phase'); + player.insertPhase(); + }, + }, + }, + }; + for(var i in pack){ + for(var j in pack[i]){ + lib[i][j]=pack[i][j]; + } + } + delete pack.skill; + game.addVideo('arrangeLib',null,pack); + game.addOverDialog=function(dialog){ + dialog.addText('共计通过'+_status.qianlidanji.completeNumber+'关'); + }; + lib.element.player.dieAfter=function(){ + if(this==game.fellow) return; + _status.characterlist.removeArray(_status.qianlidanji.used); + if(game.zhu==this||!_status.characterlist.length){ + var bool=false; + if(_status.qianlidanji.completeNumber>5) bool=true; + game.over(bool); + } + else{ + var next=game.createEvent('qianlidanji_replace',false); + next.setContent(_status.qianlidanji.replace_character); + } + }; + lib.element.player.dieAfter2=function(){ + _status.characterlist.removeArray(_status.qianlidanji.used); + }; + game.zhu.dieAfter=lib.element.player.dieAfter; + game.fan.dieAfter=lib.element.player.dieAfter; + game.zhu.dieAfter2=lib.element.player.dieAfter2; + game.fan.dieAfter2=lib.element.player.dieAfter2; + }); + }; + } + } + }, liangjunduilei:{ name:'两军对垒', mode:'versus',