diff --git a/card/gwent.js b/card/gwent.js index 8c2eae131..83ca51243 100644 --- a/card/gwent.js +++ b/card/gwent.js @@ -3,6 +3,330 @@ 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:true, + 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 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:true, + notarget:true, + contentBefore:function(){ + player.$skill('阿尔德印','legend','metal'); + game.delay(2); + }, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return get.distance(player,current,'pure')==1; + }); + event.list=list.sortBySeat(); + 'step 1' + if(event.list.length){ + var target=event.list.shift(); + player.line(target,'green'); + target.damage(); + target.draw(false); + target.$draw(); + target.turnOver(); + event.redo(); + } + 'step 2' + 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){ + return -get.attitude(player,current); + } + }); + } + }, + order:0.5, + } + }, gw_ansha:{ fullborder:'gold', type:'spell', @@ -27,7 +351,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(list.length){ var target=list.randomGet(); player.line(target); - target.die()._triggered=null; + target.die(); } }, contentAfter:function(){ @@ -62,9 +386,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var target=game.findMax(game.filterPlayer(function(current){ + var target=get.max(game.filterPlayer(function(current){ return !current.isUnseen(); - }).randomSort(),function(current){ + },'list').randomSort(),function(current){ var att=get.attitude(player,current); var rank=get.rank(current,true); if(current.maxHp>=3){ @@ -759,6 +1083,87 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, skill:{ + gw_dieyi:{ + init:function(player){ + player.storage.gw_dieyi=1; + }, + onremove:true, + trigger:{global:'phaseEnd'}, + forced:true, + mark: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 '在每个准备阶段令牌数为全场最多的所有其他角色各随机弃置一张牌'; + } + } + }, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + var list=game.filterPlayer(); + for(var i=0;i
  • 法术为分金、银、铜三类,金卡和银卡不出现在牌堆中
  • '+ '摸牌阶段有一定概率摸到银卡,在16个摸牌阶段中至少会摸到2张银卡
  • '+ '摸牌阶段有一定概率摸到金卡,在16个摸牌阶段中至少会摸到1张金卡
  • '+ - '金卡造成的任何效果不会触发相关技能,金卡无视调虎离山、潜行等免疫效果
  • '+ + '金卡无视调虎离山、潜行等免疫目标的效果
  • '+ '进行洗牌时金卡、银卡将从弃牌堆中消失,不进入牌堆' }, translate:{ @@ -827,8 +1232,29 @@ game.import('card',function(lib,game,ui,get,ai,_status){ spell_gold:'金卡法术', spell_silver:'银卡法术', spell_bronze:'铜卡法术', + 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:'获得技能雷咒术(在每个准备阶段令全场牌数最多的所有其他角色各随机弃置一张牌,重复获得时效果叠加),然后结束出牌阶段', + gw_aerdeyin:'阿尔德印', + gw_aerdeyin_info:'对相邻的角色造成一点伤害,目标摸一张牌并翻面,然后结束出牌阶段', gw_xinsheng:'新生', - gw_xinsheng_info:'随机观看12张武将牌,选择一张替代一名角色的武将牌(不触发技能),然后结束出牌阶段', + gw_xinsheng_info:'随机观看12张武将牌,选择一张替代一名角色的武将牌,然后结束出牌阶段', gw_zhongmozhizhan:'终末之战', gw_zhongmozhizhan_info:'将所有角色区域内的所有牌置入弃牌堆(不触发技能),然后结束出牌阶段', gw_butianshu:'卜天术', @@ -838,7 +1264,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ gw_niuquzhijing:'纽曲之镜', gw_niuquzhijing_info:'交换全场体力值最大和最小角色的体力值(不触发技能),然后结束出牌阶段', gw_ansha:'暗杀', - gw_ansha_info:'令一名体力为1的随机敌方角立即死亡(不触发技能),然后结束出牌阶段', + gw_ansha_info:'令一名体力为1的随机敌方角立即死亡,然后结束出牌阶段', gw_shizizhaohuan:'十字召唤', gw_shizizhaohuan_info:'从牌堆中获得两张杀以及决斗、火攻、火烧连营、南蛮入侵中的随机一张', gw_zuihouyuanwang:'最后愿望', diff --git a/character/hearth.js b/character/hearth.js index 1a5c54f6d..8ffc01387 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -66,7 +66,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hs_xsylvanas:['female','qun',3,['busi','xshixin','xmojian']], hs_siwangzhiyi:['male','qun',12,['mieshi']], hs_bilanyoulong:['male','wei',4,['lingzhou']], - hs_jinglinglong:['male','wu',3,['mianyi']], + hs_jinglinglong:['male','wu',3,['moyao']], hs_ruanniguai:['male','wu',3,['nianfu','xiaorong']], hs_hudunren:['male','shu',2,['hhudun']], hs_nate:['male','wu',4,['chuidiao']], @@ -4580,7 +4580,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - mianyi:{ + moyao:{ mod:{ targetEnabled:function(card,player,target,now){ if(player!=target){ @@ -5754,7 +5754,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ui.discardPile.appendChild(player.storage.bingjia); delete player.storage.bingjia; player.changeHujia(); - player.addTempSkill('bingjia3','phaseAfter'); + player.addTempSkill('mianyi','phaseAfter'); }, intro:{ mark:function(dialog,content,player){ @@ -5773,28 +5773,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - bingjia3:{ - trigger:{player:'damageBefore'}, - mark:true, - forced:true, - content:function(){ - trigger.untrigger(); - trigger.finish(); - }, - ai:{ - nofire:true, - nothunder:true, - nodamage:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')) return [0,0]; - } - }, - }, - intro:{ - content:'防止一切伤害' - } - }, bianxing2:{}, zuzhou:{ trigger:{player:'phaseBegin'}, @@ -7826,8 +7804,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ronghuo_info:'锁定技,你的普通杀均视为火杀', luoshi:'落石', luoshi_info:'锁定技,每当你受到一次伤害,你与伤害来源各随机弃置一张牌', - mianyi:'免疫', - mianyi_info:'锁定技,你不能成为其他角色的普通锦囊牌的目标', + moyao:'魔耀', + moyao_info:'锁定技,你不能成为其他角色的普通锦囊牌的目标', jiaohui:'教诲', jiaohui_info:'结束阶段,若你没有于本回合内造成伤害,你可以令一名角色摸一张牌或回复一点体力', chenshui:'沉睡', @@ -7936,8 +7914,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shengguang_info:'出牌阶段限一次,你可以弃置一张红色牌令一名角色回复一点体力', bingjia:'冰甲', bingjia2:'冰甲', - bingjia3:'冰甲', - bingjia3_bg:'免', bingjia_info:'出牌阶段,若你武将牌上没有牌,你可以将一张手牌背面朝上置于你的武将牌上,当你成为其他角色的与此牌花色相同的牌的目标时,你移去此牌,获得一点护甲,并且本回合内防止一切伤害', bianxing:'变形', bianxing_info:'当一其他角色于回合内使用卡牌指定了惟一的其他目标后,你可以用一张合理的基本牌替代此牌,每名角色的回合限一次', diff --git a/character/old.js b/character/old.js index ff0bde4db..65b434aac 100644 --- a/character/old.js +++ b/character/old.js @@ -170,7 +170,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, result:{ - player:1 + player:function(player){ + if(_status.event.type=='dying'){ + return get.attitude(player,_status.event.dying); + } + else{ + return 1; + } + } } } }, diff --git a/game/asset.js b/game/asset.js index bc2a47b5b..c94751a91 100644 --- a/game/asset.js +++ b/game/asset.js @@ -54,13 +54,18 @@ window.noname_asset_list=[ 'image/card/guohe.png', 'image/card/gw_ansha.png', 'image/card/gw_aozuzhilei.png', + 'image/card/gw_aerdeyin.png', 'image/card/gw_butianshu.png', + 'image/card/gw_dieyi.png', 'image/card/gw_fuyuan.png', + 'image/card/gw_hudiewu.png', + 'image/card/gw_leizhoushu.png', 'image/card/gw_niuquzhijing.png', 'image/card/gw_poxiao.png', 'image/card/gw_shizizhaohuan.png', 'image/card/gw_tongdi.png', 'image/card/gw_xinsheng.png', + 'image/card/gw_yigeniyin.png', 'image/card/gw_youer.png', 'image/card/gw_zhihuanjun.png', 'image/card/gw_zhongmozhizhan.png', diff --git a/game/game.js b/game/game.js index 4878efdd0..b12cb9520 100644 --- a/game/game.js +++ b/game/game.js @@ -7167,7 +7167,7 @@ lib.cardPack[i]=[]; if(card[i].card){ for(var j in card[i].card){ - if(card[i].translate[j+'_info']){ + if(!card[i].card[j].hidden&&card[i].translate[j+'_info']){ lib.cardPack[i].push(j); } } @@ -8574,7 +8574,8 @@ _chongzhu:'重铸', _lianhuan:'连环', _lianhuan2:'连环', - qianxing:'潜行', + qianxing:'潜行', + mianyi:'免疫', fengyin:'封印', pause:'暂停', @@ -8759,7 +8760,7 @@ lib.cardPack[i]=[]; if(card[i].card){ for(var j in card[i].card){ - if(card[i].translate[j+'_info']){ + if(!card[i].card[j].hidden&&card[i].translate[j+'_info']){ lib.cardPack[i].push(j); } } @@ -9210,12 +9211,21 @@ player.$phaseJudge(event.card); event.cancelled=false; event.trigger('phaseJudge'); - player.popup(event.card.viewAs||event.card.name,'thunder'); + var name=event.card.viewAs||event.card.name; + player.popup(name,'thunder'); + if(!lib.card[name].effect){ + game.delay(); + event.redo(); + } + else if(!lib.card[name].judge){ + game.delay(); + event.nojudge=true; + } } } else event.finish(); "step 1" - if(!event.cancelled) player.judge(event.card).set('type','phase'); + if(!event.cancelled&&!event.nojudge) player.judge(event.card).set('type','phase'); "step 2" var name=event.card.viewAs||event.card.name; if(event.cancelled&&!event.direct){ @@ -11834,7 +11844,12 @@ source.stat[source.stat.length-1].damage+=num; } } - player.changeHp(-num,false); + if(event.notrigger){ + player.changeHp(-num,false)._triggered=null; + } + else{ + player.changeHp(-num,false); + } if(event.animate!==false){ player.$damage(source); game.broadcastAll(function(nature,player){ @@ -11849,12 +11864,14 @@ },event.nature,player); player.$damagepop(-num,event.nature); } - if(num==0){ - event.trigger('damageZero'); - event._triggered=null; - } - else{ - event.trigger('damage'); + if(!event.notrigger){ + if(num==0){ + event.trigger('damageZero'); + event._triggered=null; + } + else{ + event.trigger('damage'); + } } "step 2" if(player.hp<=0&&player.isAlive()){ @@ -14457,7 +14474,7 @@ return next; }, randomDiscard:function(){ - var position='he',num=1; + var position='he',num=1,delay=null; for(var i=0;i=nh) return false; + } + else{ + if(game.players[i].countCards('he')>nh) return false; + } + } + return true; + }, + isMinCard:function(equal){ + var nh=this.countCards('he'); + for(var i=0;i