diff --git a/audio/die/caimaozhangyun.mp3 b/audio/die/caimaozhangyun.mp3 new file mode 100644 index 000000000..b71432044 Binary files /dev/null and b/audio/die/caimaozhangyun.mp3 differ diff --git a/audio/die/ol_puyuan.mp3 b/audio/die/ol_puyuan.mp3 new file mode 100644 index 000000000..529d05136 Binary files /dev/null and b/audio/die/ol_puyuan.mp3 differ diff --git a/audio/die/wangxiang.mp3 b/audio/die/wangxiang.mp3 new file mode 100644 index 000000000..67adfd7a6 Binary files /dev/null and b/audio/die/wangxiang.mp3 differ diff --git a/audio/die/wenyang.mp3 b/audio/die/wenyang.mp3 new file mode 100644 index 000000000..4b730723d Binary files /dev/null and b/audio/die/wenyang.mp3 differ diff --git a/audio/die/yanrou.mp3 b/audio/die/yanrou.mp3 new file mode 100644 index 000000000..82952069a Binary files /dev/null and b/audio/die/yanrou.mp3 differ diff --git a/audio/die/zhangyao.mp3 b/audio/die/zhangyao.mp3 new file mode 100644 index 000000000..8edb38b55 Binary files /dev/null and b/audio/die/zhangyao.mp3 differ diff --git a/audio/skill/bingxin1.mp3 b/audio/skill/bingxin1.mp3 new file mode 100644 index 000000000..d4cc5beb7 Binary files /dev/null and b/audio/skill/bingxin1.mp3 differ diff --git a/audio/skill/bingxin2.mp3 b/audio/skill/bingxin2.mp3 new file mode 100644 index 000000000..7a416a876 Binary files /dev/null and b/audio/skill/bingxin2.mp3 differ diff --git a/audio/skill/choutao1.mp3 b/audio/skill/choutao1.mp3 new file mode 100644 index 000000000..d13520006 Binary files /dev/null and b/audio/skill/choutao1.mp3 differ diff --git a/audio/skill/choutao2.mp3 b/audio/skill/choutao2.mp3 new file mode 100644 index 000000000..48050d73f Binary files /dev/null and b/audio/skill/choutao2.mp3 differ diff --git a/audio/skill/jinglan1.mp3 b/audio/skill/jinglan1.mp3 new file mode 100644 index 000000000..412cea150 Binary files /dev/null and b/audio/skill/jinglan1.mp3 differ diff --git a/audio/skill/jinglan2.mp3 b/audio/skill/jinglan2.mp3 new file mode 100644 index 000000000..01330892a Binary files /dev/null and b/audio/skill/jinglan2.mp3 differ diff --git a/audio/skill/lianzhou1.mp3 b/audio/skill/lianzhou1.mp3 new file mode 100644 index 000000000..a06ef9f3b Binary files /dev/null and b/audio/skill/lianzhou1.mp3 differ diff --git a/audio/skill/lianzhou2.mp3 b/audio/skill/lianzhou2.mp3 new file mode 100644 index 000000000..fdccbcfd6 Binary files /dev/null and b/audio/skill/lianzhou2.mp3 differ diff --git a/audio/skill/olqisi1.mp3 b/audio/skill/olqisi1.mp3 new file mode 100644 index 000000000..e80395932 Binary files /dev/null and b/audio/skill/olqisi1.mp3 differ diff --git a/audio/skill/olqisi2.mp3 b/audio/skill/olqisi2.mp3 new file mode 100644 index 000000000..9be07d7a6 Binary files /dev/null and b/audio/skill/olqisi2.mp3 differ diff --git a/audio/skill/olshengong1.mp3 b/audio/skill/olshengong1.mp3 new file mode 100644 index 000000000..6541162f4 Binary files /dev/null and b/audio/skill/olshengong1.mp3 differ diff --git a/audio/skill/olshengong2.mp3 b/audio/skill/olshengong2.mp3 new file mode 100644 index 000000000..346820422 Binary files /dev/null and b/audio/skill/olshengong2.mp3 differ diff --git a/audio/skill/xiangshu1.mp3 b/audio/skill/xiangshu1.mp3 new file mode 100644 index 000000000..3e59a0d9c Binary files /dev/null and b/audio/skill/xiangshu1.mp3 differ diff --git a/audio/skill/xiangshu2.mp3 b/audio/skill/xiangshu2.mp3 new file mode 100644 index 000000000..e4e13953a Binary files /dev/null and b/audio/skill/xiangshu2.mp3 differ diff --git a/audio/skill/xiyan1.mp3 b/audio/skill/xiyan1.mp3 new file mode 100644 index 000000000..26b6ffcf2 Binary files /dev/null and b/audio/skill/xiyan1.mp3 differ diff --git a/audio/skill/xiyan2.mp3 b/audio/skill/xiyan2.mp3 new file mode 100644 index 000000000..eb766e466 Binary files /dev/null and b/audio/skill/xiyan2.mp3 differ diff --git a/audio/skill/yongjin_xin_lingtong1.mp3 b/audio/skill/yongjin_xin_lingtong1.mp3 index 2d910fbaa..24c72af7c 100644 Binary files a/audio/skill/yongjin_xin_lingtong1.mp3 and b/audio/skill/yongjin_xin_lingtong1.mp3 differ diff --git a/audio/skill/yongjin_xin_lingtong2.mp3 b/audio/skill/yongjin_xin_lingtong2.mp3 index 7c1b5fa63..3cf7bbee7 100644 Binary files a/audio/skill/yongjin_xin_lingtong2.mp3 and b/audio/skill/yongjin_xin_lingtong2.mp3 differ diff --git a/audio/skill/yuanyu1.mp3 b/audio/skill/yuanyu1.mp3 new file mode 100644 index 000000000..5c7588ab0 Binary files /dev/null and b/audio/skill/yuanyu1.mp3 differ diff --git a/audio/skill/yuanyu2.mp3 b/audio/skill/yuanyu2.mp3 new file mode 100644 index 000000000..7d1fb07e3 Binary files /dev/null and b/audio/skill/yuanyu2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 8e2a14671..54dc90fc1 100644 --- a/card/extra.js +++ b/card/extra.js @@ -1015,7 +1015,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ["club",11,"tiesuo"], ["club",12,"tiesuo"], ["club",13,"tiesuo"], - ["heart",13,"wuxie"], + ["heart",1,"wuxie"], ["heart",13,"wuxie"], ["spade",13,"wuxie"], ["spade",10,"bingliang"], diff --git a/card/guozhan.js b/card/guozhan.js index 3cf034c4b..3ed6fa56e 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -1256,9 +1256,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ equipSkill:true, trigger:{player:'linkBefore'}, forced:true, - //priority:20, filter:function(event,player){ - return !player.isMajor()&&!player.isLinked(); + return player.isNotMajor()&&!player.isLinked(); }, content:function(){ trigger.cancel(); diff --git a/card/standard.js b/card/standard.js index 48545380d..0e8f5a3c8 100644 --- a/card/standard.js +++ b/card/standard.js @@ -20,7 +20,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target:-1.5 }, tag:{ - losehp:1 + loseHp:1 } } }, diff --git a/card/yingbian.js b/card/yingbian.js index f648a0b00..b51ab5778 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -402,7 +402,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){ forced:true, audio:true, filter:function(event,player){ - if(event.targets.length<2||(event.card.name!='sha'&&(get.type(event.card)!='trick'||get.color(event.card)!='black'))) return false; + if(event.targets.length<2) return false; + if(event.card.name!='sha'){ + var type=get.type(event.card); + if(type!='trick') return false; + if(get.color(event.card)!='black'&&!get.tag(event.card,'damage')) return false; + } if(player.hasSkillTag('unequip2')) return false; if(event.player.hasSkillTag('unequip',false,{ name:event.card?event.card.name:null, @@ -747,7 +752,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ player:function(card,player,target){ - if(typeof card!='object'||!target||get.name(card)!='sha'&&(get.type(card)!='trick'||get.color(card)!='black')) return; + if(typeof card!='object'||!target||get.name(card)!='sha'&&(get.type(card)!='trick'||(get.color(card)!='black'&&!get.tag(card,'damage')))) return; var info=get.info(card); var targets=[]; targets.addArray(ui.selected.targets); @@ -809,7 +814,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ wutiesuolian_info:'锁定技,当你使用【杀】指定目标后,若其未横置,则其横置。', heiguangkai:'黑光铠', heiguangkai_skill:'黑光铠', - heiguangkai_info:'锁定技,当你成为【杀】或黑色普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', + heiguangkai_info:'锁定技,当你成为【杀】或伤害类锦囊牌或黑色普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', tongque:'铜雀', tongque_skill:'铜雀', tongque_info:'锁定技,你于一回合内使用的第一张带有【应变】效果的牌无视条件直接生效。', diff --git a/character/diy.js b/character/diy.js index 0bc3ef296..53a4328d5 100755 --- a/character/diy.js +++ b/character/diy.js @@ -82,7 +82,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_nao:['female','key',3,['nao_duyin','nao_wanxin','nao_shouqing']], key_yuuki:['female','key',3,['yuuki_yicha']], key_kotarou:['male','key',3,['kotarou_rewrite','kotarou_aurora']], - key_tenzen:['male','key',4,['tenzen_yixing','tenzen_lingyu']], + key_tenzen:['male','key',4,['tenzen_fenghuan','tenzen_retianquan']], key_kyouko:['female','key',3,['kyouko_rongzhu','kyouko_gongmian']], key_kyou:['female','key',3,['kyou_zhidian','kyou_duanfa']], @@ -514,6 +514,106 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + tenzen_fenghuan:{ + trigger:{global:'useCardAfter'}, + direct:true, + filter:function(event,player){ + if(player==event.player||event.targets.length!=1||event.targets[0]!=player||!event.player.isIn()|| + (event.card.name!='sha'&&(get.type(event.card,null,false)!='trick'||!get.tag(event.card,'damage')))) return false; + if(!player.canUse({ + name:event.card.name, + nature:event.card.nature, + isCard:true, + },event.player,false)) return false; + var num=get.number(event.card); + if(typeof num!='number') return false; + num*=2; + var hs=player.getCards('he'); + for(var i of hs){ + num-=get.number(i); + if(num<=0) return true; + } + return false; + }, + content:function(){ + 'step 0' + var num=get.number(trigger.card)*2; + var card={ + name:trigger.card.name, + nature:trigger.card.nature, + isCard:true, + }; + player.chooseToDiscard('he',get.prompt('tenzen_fenghuan',trigger.player),'弃置任意张点数之和不小于'+num+'的牌,然后视为对其使用一张'+get.translation(card)).set('selectCard',function(){ + var cards=ui.selected.cards,num=_status.event.cardNumber; + for(var i of cards){ + num-=get.number(i); + if(num<=0) return [cards.length,cards.length+1]; + } + return [cards.length+1,cards.length+1]; + }).set('cardNumber',num).set('logSkill',['tenzen_fenghuan',trigger.player]); + 'step 1' + if(result.bool){ + var card={ + name:trigger.card.name, + nature:trigger.card.nature, + isCard:true, + },target=trigger.player; + if(target.isIn()&&player.canUse(card,target,false)) player.useCard(card,target,false); + } + }, + }, + tenzen_retianquan:{ + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&(player.hp>0||player.countCards('he')>0); + }, + logTarget:'target', + usable:1, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + prompt2:'你可失去1点体力或弃置一张牌,展示牌堆顶的三张牌(若你的体力值小于体力上限的50%,则改为展示五张牌)。每有一张基本牌,其所需使用的【闪】的数量便+1。然后若此牌造成过伤害,则你获得展示牌中的所有非基本牌。', + content:function(){ + 'step 0' + player.chooseToDiscard('弃置一张牌,或点「取消」失去一点体力','he'); + 'step 1' + if(!result.bool) player.loseHp(); + 'step 2' + var cards=get.cards(player.hp<=player.maxHp/2?5:3); + player.showCards(cards,get.translation(player)+'发动了【天全】'); + game.cardsGotoOrdering(cards).relatedEvent=trigger.getParent(); + var num=cards.filter(function(card){ + return get.type(card,false)=='basic'; + }).length; + if(num){ + if(trigger.card.name=='sha'){ + var id=trigger.target.playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].shanRequired=='number'){ + map[id].shanRequired+=num; + } + else{ + map[id].shanRequired=1+num; + } + } + } + if(num<5){ + var next=game.createEvent('tenzen_retianqua_gain'); + next.cards=cards; + next.player=player; + event.next.remove(next); + trigger.getParent().after.push(next); + next.setContent(function(){ + if(player.getHistory('sourceDamage',function(evt){ + return evt.card==event.parent.card; + }).length>0) player.gain(cards.filter(function(card){ + return get.type(card,false)!='basic'; + }),'gain2'); + }); + } + }, + }, satomi_luodao:{ trigger:{player:'useCardToPlayered'}, logTarget:'target', @@ -15719,6 +15819,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ satomi_daohai:'稻海', satomi_daohai_info:'结束阶段,若你本回合内弃置过牌,则你可以视为使用一张【五谷丰登】。然后你可以将你于此【五谷丰登】中获得的牌当做【乐不思蜀】使用。', satomi_daohai_append:'五穀豊穣、刈り入れ時だね!', + tenzen_fenghuan:'封还', + tenzen_fenghuan_info:'其他角色使用的【杀】或伤害性锦囊牌结算结束后,若你是此牌的唯一目标,则你可以弃置任意张点数之和大于等于此牌点数两倍的牌,然后视为对其使用一张名称相同的牌。', + tenzen_retianquan:'天全', + tenzen_retianquan_info:'每回合限一次。当你使用【杀】指定目标后,你可失去1点体力或弃置一张牌,然后展示牌堆顶的三张牌(若你的体力值小于体力上限的50%,则改为展示五张牌)。这些牌中每有一张基本牌,响应此牌所需的【闪】的数量便+1。此牌结算结束后,若此牌造成过伤害,则你获得展示牌中的所有非基本牌。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/extra.js b/character/extra.js index 918887285..9de40ac61 100755 --- a/character/extra.js +++ b/character/extra.js @@ -1895,7 +1895,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 6' if(result.index==0) target.draw(); - else target.chooseToDiscard('he',true); + else target.chooseToDiscard('h',true); 'step 7' if(target.hp==target.countCards('h')) event.goto(4); }, diff --git a/character/hearth.js b/character/hearth.js index 8ad611259..4431ca212 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -3161,7 +3161,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ if(!lib.character.stone_misha){ - lib.character.stone_misha=['male','shu',3,['chaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']]; + lib.character.stone_misha=['male','shu',3,['lslschaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']]; } if(!lib.character.stone_huofu){ lib.character.stone_huofu=['male','qun',2,['stone_chongfeng'],['minskin','stone','mode:stone'],[3,4,'hunter']]; diff --git a/character/rank.js b/character/rank.js index b79e2e51c..2f487752a 100644 --- a/character/rank.js +++ b/character/rank.js @@ -269,6 +269,7 @@ window.noname_character_rank={ 're_fengfangnv', 'caomao', 'guanning', + 'ol_puyuan', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -514,6 +515,7 @@ window.noname_character_rank={ 'tengfanglan', 'tenggongzhu', 'sp_menghuo', + 'ruiji', ], bp:[ 'chess_diaochan', @@ -780,6 +782,8 @@ window.noname_character_rank={ 'tengyin', 'old_yangzhi', 'laiyinger', + 'yanrou', + 'weizi', ], b:[ 'diy_feishi', @@ -1008,6 +1012,7 @@ window.noname_character_rank={ 'liuba', 'jin_guohuai', 'tw_tianyu', + 'zhangyao', ], bm:[ 'diy_xizhenxihong', @@ -1215,6 +1220,7 @@ window.noname_character_rank={ 're_chenqun', 'sp_huaxin', 'sp_xujing', + 'caimaozhangyun', ], d:[ 'lvmeng', @@ -1235,6 +1241,7 @@ window.noname_character_rank={ 'key_youta', 'old_chenqun', 'duanwei', + 'wangxiang', ], rarity:{ legend:[ @@ -1353,6 +1360,7 @@ window.noname_character_rank={ 'zhangmancheng', 'guanning', 'shen_jiangwei', + 'ol_puyuan', 'key_tomoya', 'key_masato', 'key_shiorimiyuki', @@ -1944,6 +1952,10 @@ window.noname_character_rank={ 'tenggongzhu', 'tengfanglan', 'dc_bulianshi', + 'ruiji', + 'weizi', + 'yanrou', + 'zhangyao', ], junk:[ 'sunshao', @@ -1964,6 +1976,7 @@ window.noname_character_rank={ 'key_youta', 'sp_xujing', 'fanjiangzhangda', + 'wangxiang', ], } }; diff --git a/character/refresh.js b/character/refresh.js index 73b7523d6..5fd052165 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -8500,7 +8500,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ target:function (card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; - if(get.tag(card,'damage')&&player!=target) return [1,0.6]; + if(get.tag(card,'damage')&&player!=target){ + var cards=card.cards,evt=_status.event; + if(evt.player==target&&card.name=='damage'&&evt.getParent().type=='card') cards=evt.getParent().cards.filterInD(); + if(target.hp<=1) return; + if(get.itemtype(cards)!='cards') return; + for(var i of cards){ + if(get.name(i,target)=='tao') return [1,5]; + } + if(get.value(cards,target)>=(6+player.getDamagedHp())) return [1,3]; + return [1,0.6]; + } }, }, }, @@ -10586,21 +10596,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:8, result:{ player:function(player){ - if(player.hp<=2) return player.countCards('h')==0?1:0; - if(player.countCards('h',{name:'sha',color:'red'})) return 1; - return player.countCards('h')<=player.hp?1:0; + return get.effect(player,{name:'losehp'},player,player); } }, - effect:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,1]; - return 1.2; - } - if(get.tag(card,'loseHp')){ - if(player.hp<=1) return; - return [0,0]; - } - } } }, zhaxiang:{ @@ -10620,7 +10618,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ - maihp:true + maihp:true, + effect:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,1]; + return 1.2; + } + if(get.tag(card,'loseHp')){ + if(target.hp<=1) return; + var using=target.isPhaseUsing(); + if(target.hp<=2) return [1,player.countCards('h')<=1&&using?3:0]; + if(using&&target.countCards('h',{name:'sha',color:'red'})) return [1,3]; + return [1,(target.countCards('h')<=target.hp||using&&game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)<0&&player.inRange(current); + }))?3:2] + } + } } }, zhaxiang2:{ diff --git a/character/shenhua.js b/character/shenhua.js index c8abafffe..8ddc0e378 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -1373,7 +1373,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 6-get.value(card); }); }else{ - event.target.chooseToDiscard(1,'e',true); + event.target.chooseToDiscard(1,'he',true,{type:'equip'}); event.finish(); }; }else{ @@ -7363,7 +7363,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "nzry_zhenglun":"整论", "nzry_zhenglun_info":"若你没有“橘”,你可以跳过摸牌阶段然后获得一个“橘”", "nzry_feijun":"飞军", - "nzry_feijun_info":"出牌阶段限一次,你可以弃置一张牌,然后选择一项:令一名手牌数大于你的角色交给你一张牌;或令一名装备区里牌数大于你的角色弃置一张装备牌", + "nzry_feijun_info":"出牌阶段限一次。你可以弃置一张牌,然后选择一项:⒈令一名手牌数大于你的角色交给你一张牌;⒉令一名装备区里牌数大于你的角色弃置一张装备牌。", "nzry_binglve":"兵略", "nzry_binglve_info":"锁定技,当你发动“飞军”时,若目标与你之前指定的目标均不相同,则你摸两张牌", "nzry_juzhan1":"拒战", diff --git a/character/sp.js b/character/sp.js index 488cb4589..551769e44 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5,13 +5,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ sp:{ - sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan"], + sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji"], sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu'], sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun"], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao"], - sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan'], + sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan'], sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","fanjiangzhangda"], - sp_liesi:['mizhu'], + sp_liesi:['mizhu','weizi'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv'], sp_wanglang:['wanglang'], @@ -28,6 +28,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + ol_puyuan:['male','shu',4,['olshengong','olqisi']], + ruiji:['female','wu',3,['qiaoli','qingliang']], + weizi:['male','qun',3,['yuanzi','liejie']], tengfanglan:['female','wu',3,['luochong','aichen']], sp_menghuo:['male','qun',4,['spmanwang']], jin_yanghu:['male','jin',4,['huaiyuan','chongxin','dezhang']], @@ -168,6 +171,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + ruiji:'芮姬,芮玄之女,太子孙登妃,黄武五年卒。', + weizi:'卫兹(?-190年),字子许,(《三国演义》中其名为卫弘,当为误记),陈留襄邑(今河南睢县)人。曾举孝廉,先后被车骑将军何苗、司徒杨赐等召辟。中平六年(189年)十二月,曹操在陈留己吾募兵,而卫兹以家财资助曹操,使曹操顺利募得五千士兵。此后,卫兹与曹操共同讨伐董卓。初平元年(190年),卫兹在跟随曹操讨伐董卓途中,于荥阳汴水遭遇董卓军徐荣,力战终日,失利身亡。', tengfanglan:'滕芳兰,生卒年不详,北海剧县(今山东省寿光市)人,太常滕胤的族女,滕牧的女儿,吴末帝孙皓的皇后。永安元年(258年),孙皓为乌程侯时被聘为妃。元兴元年(264年),孙皓登基后被立为皇后。孙吴灭亡后,随孙皓迁居洛阳。', qinghegongzhu:'清河长公主,沛国谯县人,曹操长女(按其与曹操长子曹昂同出于刘夫人,而刘夫人又早死,故其年龄应长于曹丕等其他曹操诸子女,又按长公主亦有年最长之意,故应为曹操之长女)。母刘夫人,得到曹操喜爱。清河公主后来下嫁夏侯楙。曹操初欲嫁丁仪,曹丕劝其嫁与夏侯楙。后与小叔子设计欲谋害丈夫,未果。', fanjiangzhangda:'范强,在明朝小说《三国演义》里叫做范疆。二人均为张飞手下部将。蜀汉章武元年,刘备伐吴,张飞率军从阆中前往江州,出发前,范强和张达杀死张飞,带着张飞的首级投奔了东吴。', @@ -323,6 +328,162 @@ game.import('character',function(lib,game,ui,get,ai,_status){ simazhao:['wangyuanji'], }, card:{ + //蒲元衍生 + sanlve:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip5", + ai:{ + basic:{ + equipValue:5, + }, + }, + skills:["sanlve_skill"], + fullskin:true, + }, + zhaogujing:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip5", + ai:{ + basic:{ + equipValue:6.5, + }, + }, + skills:["zhaogujing_skill"], + fullskin:true, + }, + shufazijinguan:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip5", + modeimage:'boss', + ai:{ + basic:{ + equipValue:8, + }, + }, + skills:["shufazijinguan_skill"], + fullskin:true, + }, + xuwangzhimian:{ + derivation:'ol_puyuan', + type:'equip', + fullskin:true, + subtype:'equip5', + modeimage:'boss', + skills:['xuwangzhimian'], + ai:{ + equipValue:7, + } + }, + hongmianbaihuapao:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip2", + modeimage:'boss', + ai:{ + basic:{ + equipValue:4, + }, + }, + skills:["hongmianbaihuapao_skill"], + fullskin:true, + }, + guofengyupao:{ + derivation:'ol_puyuan', + type:'equip', + fullskin:true, + modeimage:'boss', + subtype:'equip2', + skills:['guofengyupao'], + ai:{ + equipValue:7 + } + }, + qimenbagua:{ + derivation:'ol_puyuan', + type:'equip', + fullskin:true, + modeimage:'boss', + subtype:'equip2', + skills:['qimenbagua'], + ai:{ + equipValue:7.5 + } + }, + linglongshimandai:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip2", + modeimage:'boss', + ai:{ + basic:{ + equipValue:5, + }, + }, + skills:["linglongshimandai_skill"], + fullskin:true, + }, + chixueqingfeng:{ + derivation:'ol_puyuan', + type:'equip', + fullskin:true, + modeimage:'boss', + subtype:'equip1', + distance:{attackFrom:-1}, + skills:['chixueqingfeng'], + ai:{ + equipValue:6.7 + } + }, + guilongzhanyuedao:{ + derivation:'ol_puyuan', + type:'equip', + fullskin:true, + modeimage:'boss', + subtype:'equip1', + distance:{attackFrom:-2}, + skills:['guilongzhanyuedao'], + nomod:true, + nopower:true, + unique:true, + ai:{ + equipValue:4 + } + }, + wushuangfangtianji:{ + derivation:'ol_puyuan', + type:"equip", + modeimage:'boss', + subtype:"equip1", + distance:{ + attackFrom:-3, + }, + ai:{ + basic:{ + equipValue:3, + }, + }, + skills:["wushuangfangtianji_skill"], + fullskin:true, + }, + bintieshuangji:{ + derivation:'ol_puyuan', + type:"equip", + subtype:"equip1", + distance:{ + attackFrom:-2, + }, + ai:{ + basic:{ + equipValue:4.5, + }, + }, + skills:["bintieshuangji_skill"], + fullskin:true, + }, + //王允 wy_meirenji:{ fullskin:true, vanish:true, @@ -484,6 +645,1017 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //蒲元 + olshengong:{ + audio:2, + enable:'phaseUse', + usable:3, + filter:function(event,player){ + var list=['equip1','equip2','others']; + for(var i=0;i1) return; + var card=get.cards()[0]; + if(!card) return; + game.log(player,'展示了',card); + event.cardsx.push(card); + event.cards2[index].push(card); + game.broadcastAll(function(id,card,name,index){ + var dialog=get.idDialog(id); + if(!dialog) return; + var button=ui.create.button(card,'card',dialog.buttonss[index]); + button.querySelector('.info').innerHTML=(name+'|'+get.strNumber(card.number)); + },event.videoId,card,function(target){ + if(target._tempTranslate) return target._tempTranslate; + var name=target.name; + if(lib.translate[name+'_ab']) return lib.translate[name+'_ab']; + return get.translation(name); + }(player),index); + } + }; + event.players=game.filterPlayer(); + event.cardsx=[]; + event.cards2=[[],[]]; + event.videoId=lib.status.videoId++; + event.ai_targets=[]; + game.broadcastAll(function(name,id){ + var dialog=ui.create.dialog(name+'发起了“锻造”','hidden','forcebutton'); + dialog.videoId=id; + dialog.classList.add('scroll1'); + dialog.classList.add('scroll2'); + dialog.classList.add('fullwidth'); + dialog.buttonss=[]; + + var list=['协力锻造的玩家','妨碍锻造的玩家'] + for(var i=0;i'+list[i]+''); + var buttons=ui.create.div('.buttons',dialog.content); + dialog.buttonss.push(buttons); + buttons.classList.add('popup'); + buttons.classList.add('guanxing'); + } + dialog.open(); + },get.translation(player),event.videoId) + for(var i=0;i0) num=0; + else if(att<0) num=1; + sendback({index:num},target); + if(_status.connectMode) target.hideTimer(); + if(!event.ai_targets.length){ + clearInterval(event.interval); + if(event.withai) game.resume(); + } + },750); + },500) + } + 'step 1' + if(event.withme){ + if(_status.connectMode) game.me.unwait(result); + else{ + var index=result.index; + game.log(game.me,'选择了',['#b助力锻造','#g妨碍锻造','#b什么都不做'][index]) + if(index>1) return; + var card=get.cards()[0]; + if(!card) return; + game.log(game.me,'展示了',card); + event.cardsx.push(card); + event.cards2[index].push(card); + game.broadcastAll(function(id,card,name,index){ + var dialog=get.idDialog(id); + if(!dialog) return; + var button=ui.create.button(card,'card',dialog.buttonss[index]); + button.querySelector('.info').innerHTML=(name+'|'+get.strNumber(card.number)); + },event.videoId,card,function(target){ + if(target._tempTranslate) return target._tempTranslate; + var name=target.name; + if(lib.translate[name+'_ab']) return lib.translate[name+'_ab']; + return get.translation(name); + }(game.me),index); + } + } + 'step 2' + if(event.withol&&!event.resultOL){ + game.pause(); + } + 'step 3' + if(event.ai_targets.length>0){ + event.withai=true; + game.pause(); + } + 'step 4' + game.delay(2); + var num1=0,num2=0; + for(var i of event.cards2[0]) num1+=get.number(i,false); + for(var i of event.cards2[1]) num2+=get.number(i,false); + var result=2; + if(num10) result=1; + event.duanzao_result=result; + game.broadcastAll(function(id,result){ + var dialog=get.idDialog(id); + if(dialog) dialog.content.firstChild.innerHTML=['锻造失败…','锻造成功','完美锻造!'][result]; + },event.videoId,result) + 'step 5' + game.cardsGotoOrdering(event.cardsx); + game.broadcastAll('closeDialog',event.videoId); + 'step 6' + var subtype=get.subtype(cards[0]); + if(subtype!='equip1'&&subtype!='equip2') subtype='others'; + var card_map={ + equip1:['wushuangfangtianji','guilongzhanyuedao','chixueqingfeng','bintieshuangji','wutiesuolian','wuxinghelingshan'], + equip2:['linglongshimandai','hongmianbaihuapao','qimenbazhen','guofengyupao','huxinjing','heiguangkai'], + others:['shufazijinguan','xuwangzhimian','tianjitu','taigongyinfu','sanlve','zhaogujing'], + }; + if(!_status.olshengong_map) _status.olshengong_map={}; + if(!_status.olshengong_maken) _status.olshengong_maken={}; + var list=card_map[subtype]; + for(var i=0;i0; + }, + content:function(){ + player.draw(player.countMark('olshengong_draw')); + }, + }, + }, + }, + olqisi:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + filter:function(event,player){ + return !event.numFixed&&event.num>0; + }, + check:function(event,player){ + if(player.isEmpty(2)||player.isEmpty(5)||player.isEmpty(1)) return true; + return false; + }, + content:function(){ + 'step 0' + trigger.num--; + player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){ + if(player.isEmpty(2)) return 'equip2'; + if(player.isEmpty(5)) return 'equip5'; + if(player.isEmpty(1)) return 'equip1'; + return 'equip6'; + }); + 'step 1' + var card=get.cardPile(function(card){ + var type=get.subtype(card); + if(result.control=='equip6') return (type=='equip3'||type=='equip4'); + return type==result.control; + }); + if(card) player.gain(card,'gain2'); + }, + group:'olqisi_init', + subSkill:{ + init:{ + audio:'olqisi', + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + content:function(){ + 'step 0' + var i=0; + var list=[]; + while(i++<2){ + var card=get.cardPile(function(card){ + if(get.type(card)!='equip') return false; + return list.length==0||get.subtype(card)!=get.subtype(list[0]); + }); + if(card) list.push(card); + } + if(!list.length){event.finish();return;} + event.list=list; + player.gain(event.list,'gain2'); + 'step 1' + game.delay(1); + var card=event.list.shift(); + if(player.getCards('h').contains(card)){ + player.$give(card,player,false) + player.equip(card); + } + if(event.list.length) event.redo(); + }, + }, + }, + }, + //蒲元衍生 + zhaogujing_skill:{ + equipSkill:true, + trigger:{player:'phaseUseEnd'}, + direct:true, + filter:function(event,player){ + return player.hasCard(function(card){ + if(_status.connectMode) return true; + var type=get.type(card,player); + return type=='basic'||type=='trick'; + },'h'); + }, + content:function(){ + 'step 0' + player.chooseCard('h',get.prompt('zhaogujing_skill'),'展示并视为使用一张基本牌或普通锦囊牌',function(card,player){ + var type=get.type(card,player); + return type=='basic'||type=='trick'; + }).set('ai',function(card){ + var player=_status.event.player,name=get.name(card,player); + if(name=='jiu') return 0; + return player.getUseValue({ + name:name, + nature:get.nature(card,player), + isCard:true, + }) + }); + 'step 1' + if(result.bool){ + player.logSkill('zhaogujing_skill'); + player.showCards(result.cards,get.translation(player)+'发动了【照骨镜】'); + var card={ + name:get.name(result.cards[0],player), + nature:get.nature(result.cards[0],player), + isCard:true, + } + player.chooseUseTarget(card,true,false); + } + }, + }, + sanlve_skill:{ + equipSkill:true, + mod:{ + maxHandcard:function(player,num){ + return num+1; + }, + attackRange:function(player,num){ + return num+1; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + }, + }, + xuwangzhimian:{ + equipSkill:true, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num+=2; + }, + mod:{ + maxHandcard:function(player,num){ + return num-1; + } + } + }, + shufazijinguan_skill:{ + equipSkill:true, + trigger:{ + player:"phaseZhunbeiBegin", + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('shufazijinguan'),'对一名其他角色造成1点伤害',function(card,player,target){ + return player!=target; + }).set('ai',function(target){ + return get.damageEffect(target,player,player); + }); + "step 1" + if(result.bool){ + player.logSkill('shufazijinguan_skill',result.targets[0]); + result.targets[0].damage(); + } + }, + }, + qimenbagua:{ + equipSkill:true, + trigger:{target:'useCardToBefore'}, + forced:true, + filter:function(event,player){ + if(event.card.name!='sha') return false; + if(player.hasSkillTag('unequip2')) return false; + if(event.player.hasSkillTag('unequip',false,{ + name:event.card?event.card.name:null, + target:player, + card:event.card + })) return false; + return true; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name!='sha') return; + if(target.hasSkillTag('unequip2')||player.hasSkillTag('unequip',false,{ + name:card?card.name:null, + target:player, + card:card + })||player.hasSkillTag('unequip_ai',false,{ + name:card?card.name:null, + target:player, + card:card + })) return; + return 'zerotarget'; + } + } + } + }, + guofengyupao:{ + equipSkill:true, + mod:{ + targetEnabled:function(card,player,target){ + if(player==target||get.type(card)!='trick') return; + if(target.hasSkillTag('unequip2')) return; + if(player.hasSkillTag('unequip',false,{ + name:card?card.name:null, + target:player, + card:card + })) return; + return false; + } + } + }, + hongmianbaihuapao_skill:{ + equipSkill:true, + trigger:{ + player:"damageBegin4", + }, + filter:function(event,player){ + if(!lib.linked.contains(event.nature)) return false; + if(player.hasSkillTag('unequip2')) return false; + if(event.source&&event.source.hasSkillTag('unequip',false,{ + name:event.card?event.card.name:null, + target:player, + card:event.card + })) return false; + return true; + }, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + nofire:true, + nothunder:true, + effect:{ + target:function(card,player,target,current){ + if(!get.tag(card,'natureDamage')) return; + if(!target.hasSkillTag('unequip2')&&!player.hasSkillTag('unequip',false,{ + name:card?card.name:null, + target:player, + card:card + })&&!player.hasSkillTag('unequip_ai',false,{ + name:card?card.name:null, + target:player, + card:card + })) return 'zerotarget'; + }, + }, + }, + }, + linglongshimandai_skill:{ + equipSkill:true, + trigger:{ + target:"useCardToTargeted", + }, + filter:function(event,player){ + if(event.targets&&event.targets.length>1||event.player==player) return false; + if(player.hasSkillTag('unequip2')) return false; + var evt=event.getParent(); + if(evt.player&&evt.player.hasSkillTag('unequip',false,{ + name:evt.card?evt.card.name:null, + target:player, + card:evt.card + })) return false; + return true; + }, + audio:true, + check:function(event,player){ + return get.effect(player,event.card,event.player,player)<=0; + }, + prompt2:(event)=>('进行一次判定。若结果为♥,则'+get.translation(event.card)+'对你无效'), + content:function(){ + "step 0" + player.judge('linglongshimandai',function(card){return (get.suit(card)=='heart')?1.5:-0.5}).judge2=function(result){ + return result.bool?true:false; + }; + "step 1" + if(result.judge>0){ + trigger.getParent().excluded.add(player); + } + }, + ai:{ + effect:{ + target:function(card,player,target,effect){ + if(effect>0||player.hasSkillTag('unequip',false,{ + name:card?card.name:null, + target:player, + card:card + })||player.hasSkillTag('unequip_ai',false,{ + name:card?card.name:null, + target:player, + card:card + })) return; + return 0.75; + }, + }, + }, + }, + bintieshuangji_skill:{ + trigger:{player:'shaMiss'}, + filter:function(event,player){ + return player.hp>0; + }, + prompt2:function(event,player){ + var prompt='失去1点体力,然后' + var cards=event.cards.filterInD(); + if(cards.length) prompt+=('获得'+get.translations(cards)+'、'); + prompt+='摸一张牌、本回合使用【杀】的次数上限+1' + return prompt; + }, + check:function(event,player){ + if(get.effect(player,{name:'losehp'},player,player)>0) return true; + return player.hp>event.target.hp&&event.cards.filterInD().length>0; + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + var cards=trigger.cards.filterInD(); + if(cards.length) player.gain(cards,'gain2'); + player.draw(); + 'step 2' + player.addTempSkill('bintieshuangji_skill_effect'); + player.addMark('bintieshuangji_skill_effect',1,false); + }, + subSkill:{ + effect:{ + charlotte:true, + intro:{content:'使用【杀】的次数上限+#'}, + onremove:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('bintieshuangji_skill_effect'); + }, + }, + }, + }, + }, + chixueqingfeng:{ + equipSkill:true, + trigger:{player:'useCardToPlayered'}, + filter:function(event){ + return event.card.name=='sha'; + }, + logTarget:'target', + forced:true, + content:function(){ + var target=trigger.target; + target.addTempSkill('chixueqingfeng2'); + target.markAuto('chixueqingfeng2',[trigger.card]) + }, + ai:{ + unequip_ai:true, + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.card&&arg.card.name=='sha') return true; + return false; + } + } + }, + chixueqingfeng2:{ + equipSkill:true, + trigger:{global:'useCardAfter'}, + forced:true, + charlotte:true, + popup:false, + firstDo:true, + onremove:true, + filter:function(event,player){ + return player.storage.chixueqingfeng2&&player.storage.chixueqingfeng2.contains(event.card); + }, + content:function(){ + player.storage.chixueqingfeng2.remove(trigger.card); + if(!player.storage.chixueqingfeng2.length) player.removeSkill('chixueqingfeng2'); + }, + mark:true, + marktext:'※', + intro:{ + content:'防具技能无效,且不能使用或打出手牌', + }, + mod:{ + cardEnabled2:function(card){ + if(get.position(card)=='h') return false; + }, + }, + ai:{ + unequip2:true, + }, + }, + guilongzhanyuedao:{ + equipSkill:true, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&get.color(event.card)=='red'; + }, + content:function(){ + trigger.directHit.addArray(game.players); + }, + ai:{ + unequip_ai:true, + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.card&&arg.card.name=='sha'&&get.color(arg.card)=='red') return true; + return false; + } + } + }, + wushuangfangtianji_skill:{ + equipSkill:true, + trigger:{ + source:"damageSource", + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.getParent().type=='card'; + }, + direct:true, + content:function(){ + 'step 0' + var target=trigger.player; + var choices=['摸一张牌']; + if(target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he')) choices.push('弃置'+get.translation(target)+'的一张牌'); + player.chooseControl('cancel2').set('choiceList',choices).set('prompt',get.prompt('wushuangfangtianji_skill')).set('ai',function(){ + var player=_status.event.player,target=_status.event.getTrigger().player; + if(target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he')&&get.effect(target,{name:'guohe_copy2'},player,player)>get.effect(player,{name:'wuzhong'},player,player)/2) return 1; + return 0; + }); + 'step 1' + if(result.control=='cancel2') return; + if(result.index==0){ + player.logSkill('wushuangfangtianji_skill'); + player.draw(); + } + else{ + var target=trigger.player; + player.logSkill('wushuangfangtianji_skill',target); + player.discardPlayerCard(target,'he',true); + } + }, + }, + //芮姬 + qiaoli:{ + audio:2, + enable:'chooseToUse', + viewAs:{name:'juedou'}, + viewAsFilter:function(player){ + return player.hasCard(function(card){ + return get.type(card)=='equip'; + },'ehs') + }, + filterCard:{type:'equip'}, + check:function(card){ + if(get.position(card)=='e') return 7.5-get.value(card); + return 12-_status.event.player.getUseValue(card); + }, + position:'hes', + group:['qiaoli_effect','qiaoli_gain','qiaoli_norespond'], + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return arg&&arg.card&&arg.card.name=='juedou'&&_status.event.skill=='qiaoli'; + }, + }, + subSkill:{ + norespond:{ + trigger:{player:'useCard1'}, + forced:true, + charlotte:true, + popup:false, + filter:function(event,player){ + if(event.skill!='qiaoli') return false; + var card=event.cards[0]; + return get.subtype(card)!='equip1'; + }, + content:function(){ + trigger.directHit.addArray(game.filterPlayer(function(current){ + return current!=player; + })); + }, + }, + effect:{ + trigger:{player:'useCardAfter'}, + forced:true, + charlotte:true, + popup:false, + filter:function(event,player){ + if(event.skill!='qiaoli') return false; + var card=event.cards[0]; + return get.subtype(card)=='equip1'; + }, + content:function(){ + 'step 0' + var card=trigger.cards[0]; + var num=1; + var info=get.info(card,false); + if(info&&info.distance&&typeof info.distance.attackFrom=='number') num-=info.distance.attackFrom; + player.draw(num); + 'step 1' + var cards=result; + if(get.itemtype(cards)!='cards'){ + event.finish(5); + return; + } + var hs=player.getCards('h'); + cards=cards.filter(function(card){ + return hs.contains(card); + }); + if(!cards.length){ + event.finish(5); + return; + } + event.cards=cards; + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + event.given_map={}; + 'step 2' + player.chooseCardTarget({ + filterCard:function(card){ + return _status.event.cards.contains(card)&&!card.hasGaintag('qiaoli_given'); + }, + cards:cards, + filterTarget:lib.filter.notMe, + selectCard:[1,cards.length], + prompt:'是否将获得的牌分配给其他角色?', + ai1:function(card){ + return -1; + }, + ai2:function(target){ + return -1; + }, + }); + 'step 3' + if(result.bool){ + var res=result.cards,target=result.targets[0].playerid; + player.addGaintag(res,'qiaoli_given'); + cards.removeArray(res); + if(!event.given_map[target]) event.given_map[target]=[]; + event.given_map[target].addArray(res); + if(cards.length) event.goto(2); + } + 'step 4' + if(_status.connectMode){ + game.broadcastAll(function(){delete _status.noclearcountdown}); + game.stopCountChoose(); + } + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + player.line(source,'green'); + source.gain(event.given_map[i],player,'giveAuto'); + } + event.next.sort(function(a,b){ + return lib.sort.seat(a.player,b.player); + }); + }, + }, + gain:{ + audio:'qiaoli', + trigger:{player:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return player.hasHistory('useCard',function(evt){ + return evt.skill=='qiaoli'; + }) + }, + content:function(){ + var card=get.cardPile2(function(card){ + return get.type(card)=='equip'; + }); + if(card) player.gain(card,'gain2'); + }, + }, + }, + }, + qingliang:{ + audio:2, + trigger:{target:'useCardToTarget'}, + usable:1, + filter:function(event,player){ + return player!=event.player&&player.countCards('h')>0; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>0||event.player.hasSkillTag('nogain')) return true; + var eff=get.effect(player,event.card,event.player,player); + if(eff>=0) return false; + var suits=[],banned=[],hs=player.getCards('h'); + for(var i of hs){ + var suit=get.suit(i,player); + suits.add(suit); + if(!lib.filter.cardDiscardable(i,player,'qingliang')) banned.add(suit); + } + suits.removeArray(banned); + for(var i of suits){ + var cards=player.getCards('h',function(card){ + return get.suit(card,player)==i; + }); + if((-eff/2-get.value(cards,player))>0) return true; + } + return false; + }, + content:function(){ + 'step 0' + player.showHandcards(get.translation(player)+'发动了【清靓】'); + 'step 1' + var suits=[],banned=[],hs=player.getCards('h'); + for(var i of hs){ + var suit=get.suit(i,player); + suits.add(suit); + if(!lib.filter.cardDiscardable(i,player,'qingliang')) banned.add(suit); + } + if(suits.length>banned.length){ + player.chooseControl().set('choiceList',[ + '和'+get.translation(trigger.player)+'各摸一张牌', + '弃置一种花色的所有手牌,令'+get.translation(trigger.card)+'对自己无效', + ]).set('ai',function(){ + var player=_status.event.player,event=_status.event.getTrigger(); + if(get.attitude(player,event.player)>0||event.player.hasSkillTag('nogain')) return 0; + return 1; + }); + event.suits=suits; + suits.removeArray(banned); + suits.sort(); + } + else{ + event._result={index:0}; + } + 'step 2' + if(result.index==0){ + var list=[player,trigger.player].sortBySeat(); + list[0].draw('nodelay'); + list[1].draw(); + event.finish(); + } + else{ + if(event.suits.length==1) event._result={control:event.suits[0]}; + else player.chooseControl(event.suits).set('prompt','选择弃置一种花色的所有牌').set('ai',function(){ + var player=_status.event.player,list=_status.event.controls.slice(0); + var gett=function(suit){ + var cards=player.getCards('h',function(card){ + return get.suit(card,player)==suit; + }); + return get.value(cards); + } + return list.sort(function(b,a){ + return gett(b)-gett(a); + })[0]; + }); + } + 'step 3' + var cards=player.getCards('h',function(card){ + return get.suit(card)==result.control; + }); + if(cards.length) player.discard(cards); + trigger.targets.remove(player); + trigger.getParent().triggeredTargets2.remove(player); + trigger.untrigger(); + }, + }, + //卫兹 + yuanzi:{ + audio:2, + trigger:{global:'phaseZhunbeiBegin'}, + logTarget:'player', + filter:function(event,player){ + return player!=event.player&&event.player.isAlive()&&player.countCards('h')>0&&!player.hasSkill('yuanzi_round',null,null,false); + }, + check:function(event,player){ + if(get.attitude(player,event.player)<=4) return false; + if(event.player.hasJudge('lebu')) return false; + return game.hasPlayer(function(current){ + return event.player!=player&&game.hasPlayer(function(current){ + return current!=player&¤t!=event.player&&event.player.inRange(current)&&get.attitude(event.player,current)<0; + }); + }) + }, + content:function(){ + var cards=player.getCards('h'); + trigger.player.gain(cards,player,'giveAuto'); + player.addTempSkill('yuanzi_effect'); + player.addTempSkill('yuanzi_round','roundStart'); + }, + subSkill:{ + effect:{ + charlotte:true, + audio:'yuanzi', + trigger:{global:'damageSource'}, + forced:true, + filter:function(event,player){ + var source=event.source; + return source&&source==_status.currentPhase&&player.countCards('h')<=source.countCards('h'); + }, + content:function(){ + player.draw(2); + }, + }, + round:{charlotte:true}, + }, + }, + liejie:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + var source=trigger.source; + var prompt2='弃置至多三张牌并摸等量的牌'; + if(source) prompt2+=(',若弃置的牌中有红色牌,则弃置'+get.translation(source)+'至多等量的牌'); + var next=player.chooseToDiscard('he',[1,3],get.prompt('liejie'),prompt2); + next.set('ai',function(card){ + return 6-get.value(card); + }) + if(source) next.logSkill=['liejie',source]; + else next.logSkill='liejie'; + 'step 1' + if(result.bool){ + var cards=result.cards; + player.draw(cards.length); + if(trigger.source){ + var num=cards.filter(function(i){ + return get.color(i,player)=='red'; + }).length; + if(num>0) player.discardPlayerCard(trigger.source,'he',[1,num]).set('forceAuto',true); + } + } + }, + }, //滕芳兰 luochong:{ audio:2, @@ -695,6 +1867,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + derivation:'sppanqin', }, sppanqin:{ audio:2, @@ -2103,7 +3276,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ name:'诏颂(赋)', name2:'赋', - content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的至多两张牌,然后可以令其摸一张牌。', + content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的至多两张牌。', }, trigger:{player:'phaseUseBegin'}, direct:true, @@ -2118,7 +3291,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的至多两张牌,然后可以令其摸一张牌',function(card,player,current){ + player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的至多两张牌',function(card,player,current){ return current.hasCard(function(card){ return lib.filter.canBeDiscarded(card,player,current); },'hej'); @@ -11166,54 +12339,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){ use:{ audio:'qirang', trigger:{player:'useCard2'}, - direct:true, - filter:function(event,player){ - if(get.type(event.card)!='trick') return false; - if(!event.targets||event.targets.length!=1) return false; - var info=get.info(event.card); - if(info.allowMultiple==false) return false; - if(!player.hasHistory('lose',function(evt){ - if(evt.getParent()!=event) return false; - for(var i in evt.gaintag_map){ - if(evt.gaintag_map[i].contains('qirang')) return true; - } - return false; - })) return false; - if(!info.multitarget){ - if(game.hasPlayer(function(current){ - return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); - })){ - return true; - } - } - return false; - }, - content:function(){ - 'step 0' - var prompt2='为'+get.translation(trigger.card)+'增加一个目标' - player.chooseTarget(get.prompt('qirang'),function(card,player,target){ - var player=_status.event.player; - if(_status.event.targets.contains(target)) return false; - return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); - }).set('prompt2',prompt2).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1); - }).set('targets',trigger.targets).set('card',trigger.card); - 'step 1' - if(result.bool){ - if(!event.isMine()&&!event.isOnline()) game.delayx(); - event.targets=result.targets; - } - else{ - event.finish(); - } - 'step 2' - if(event.targets){ - player.logSkill('qirang_use',event.targets); - trigger.targets.addArray(event.targets); - } - }, + direct:true, + filter:function(event,player){ + if(get.type(event.card)!='trick') return false; + if(!event.targets||event.targets.length!=1) return false; + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(!player.hasHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('qirang')) return true; + } + return false; + })) return false; + if(!info.multitarget){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var prompt2='为'+get.translation(trigger.card)+'增加一个目标' + player.chooseTarget(get.prompt('qirang'),function(card,player,target){ + var player=_status.event.player; + if(_status.event.targets.contains(target)) return false; + return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); + }).set('prompt2',prompt2).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1); + }).set('targets',trigger.targets).set('card',trigger.card); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else{ + event.finish(); + } + 'step 2' + if(event.targets){ + player.logSkill('qirang_use',event.targets); + trigger.targets.addArray(event.targets); + } + }, }, }, }, @@ -16365,7 +17538,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guansuo:['guansuo','ol_guansuo'], zhangxingcai:['zhangxingcai','old_zhangxingcai'], lisu:['ol_lisu','lisu'], - fuwan:['fuwan','sp_fuwan'], + fuwan:['fuwan','sp_fuwan','tw_fuwan'], huaxin:['ol_huaxin','huaxin','sp_huaxin'], xujing:['xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], @@ -16382,6 +17555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangyi:['ol_yangyi','yangyi'], tianyu:['tw_tianyu','tianyu'], huangchengyan:['huangchengyan','dc_huangchengyan'], + puyuan:['puyuan','ol_puyuan'], }, translate:{ "xinfu_lingren":"凌人", @@ -17254,7 +18428,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spolzhouxuan_info:'①弃牌阶段开始时,你可将至多五张置于武将牌上,称为“旋”。②当你使用牌时,你摸一张牌并将一张“旋”置入弃牌堆(若你的手牌数不为全场唯一最多则改为摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。', wuyan:'吾彦', lanjiang:'澜疆', - lanjiang_info:'结束阶段,你可以选择令所有手牌数不小于你的角色。这些角色依次选择是否令你摸一张牌。然后你可以对其中一名手牌数等于你的角色造成1点伤害,随后可以对其中一名手牌数小于你的角色摸一张牌。', + lanjiang_info:'结束阶段,你可以选择所有手牌数不小于你的角色。这些角色依次选择是否令你摸一张牌。然后你可以对其中一名手牌数等于你的角色造成1点伤害,随后可以对其中一名手牌数小于你的角色摸一张牌。', ol_zhuling:'OL朱灵', jixian:'急陷', jixian_info:'摸牌阶段结束时,你可以选择一名满足以下至少一项条件的角色:⒈装备区内有防具牌;⒉拥有的普通技能数大于你;⒊体力值等于体力上限。你视为对其使用一张【杀】,然后摸X张牌(X为其于此【杀】结算前满足的条件数);若此【杀】未造成伤害,则你失去1点体力。', @@ -17287,6 +18461,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luochong_info:'准备阶段开始时/当你受到伤害后,你可选择本轮内未选择过的一项:⒈令一名角色回复1点体力。⒉令一名其他角色失去1点体力。⒊弃置一名其他角色的至多两张牌。⒋令一名角色摸两张牌。', aichen:'哀尘', aichen_info:'锁定技。当你进入濒死状态时,若〖落宠〗中的剩余选项数大于1,则你将体力回复至1点,然后选择移去〖落宠〗中的一个选项。', + weizi:'卫兹', + yuanzi:'援资', + yuanzi_info:'每轮限一次。其他角色的准备阶段开始时,你可将所有手牌交给该角色。若如此做,当该角色于本回合内造成伤害后,若其手牌数不小于你,则你摸两张牌。', + liejie:'烈节', + liejie_info:'当你受到伤害后,你可以弃置至多三张牌,摸等量的牌,然后可弃置伤害来源的至多X张牌(X为你以此法弃置的红色牌的数量)。', + ruiji:'芮姬', + qiaoli:'巧力', + qiaoli_info:'①你可以将一张装备牌当做【决斗】使用。若此【决斗】对应的实体牌:为武器牌,当你以此法声明使用【决斗】时,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;不为武器牌,此牌不可被响应。②结束阶段开始时,若你于本回合内发动过〖巧力①〗,则你从牌堆中获得一张装备牌。', + qiaoli_given:'已分配', + qingliang:'清靓', + qingliang_info:'每回合限一次。当你成为其他角色使用牌的目标时,你可展示所有手牌,然后选择一项:⒈你与其各摸一张牌,⒉取消此目标,然后弃置你手牌中一种花色的所有牌。', + chixueqingfeng:'赤血青锋', + chixueqingfeng2:'赤血青锋', + chixueqingfeng_info:'锁定技,当你使用【杀】指定目标后,你令目标角色不能使用或打出手牌且防具技能无效直到此【杀】结算结束。', + wushuangfangtianji:'无双方天戟', + wushuangfangtianji_skill:"无双方天戟", + wushuangfangtianji_info:"当你因执行【杀】的效果而造成伤害后,你可选择一项:⒈摸一张牌;⒉弃置目标角色的一张牌。", + guilongzhanyuedao:'鬼龙斩月刀', + guilongzhanyuedao_info:'锁定技,你使用的红色【杀】不可被响应。', + bintieshuangji:'镔铁双戟', + bintieshuangji_skill:'镔铁双戟', + bintieshuangji_info:'当你使用的【杀】被抵消后,你可失去1点体力。获得此【杀】对应的所有实体牌,摸一张牌,且本回合使用【杀】的次数上限+1。', + linglongshimandai:"玲珑狮蛮带", + linglongshimandai_info:"当你成为其他角色使用的牌的唯一目标后,你可以进行判定。若判定结果为♥,则此牌对你无效。", + linglongshimandai_skill:"玲珑狮蛮带", + hongmianbaihuapao_skill:"红棉百花袍", + hongmianbaihuapao:"红棉百花袍", + hongmianbaihuapao_info:"锁定技,当你受到属性伤害时,防止此伤害。", + qimenbagua:'奇门八卦', + qimenbagua_info:'锁定技,【杀】对你无效。', + guofengyupao:'国风玉袍', + guofengyupao_info:'锁定技,你不是其他角色使用普通锦囊牌的合法目标。', + shufazijinguan:'束发紫金冠', + shufazijinguan_skill:"束发紫金冠", + shufazijinguan_skill_info:"准备阶段,你可以对一名其他角色造成1点伤害。", + sanlve:'三略', + sanlve_skill:'三略', + sanlve_info:'锁定技。你的攻击范围+1。你的手牌上限+1。你使用【杀】的次数上限+1。', + zhaogujing:'照骨镜', + zhaogujing_skill:'照骨镜', + zhaogujing_info:'出牌阶段结束时,你可展示手牌中的一张基本牌或普通锦囊牌,然后你视为使用一张牌名和属性与此牌相同的牌。', + xuwangzhimian:'虚妄之冕', + xuwangzhimian_info:'锁定技,摸牌阶段,你令额定摸牌数+2;你的手牌上限-1。', + ol_puyuan:'OL蒲元', + olshengong:'神工', + olshengong_info:'出牌阶段每项限一次。你可以弃置一张武器牌/防具牌/其他装备牌,并发起一次“锻造”。然后你从锻造结果中选择一张牌,置于一名角色的装备区内(可替换原装备)。当有因你发动〖神工〗而加入游戏的牌进入弃牌堆后,你将此牌移出游戏,然后你于当前回合结束后摸一张牌。', + olqisi:'奇思', + olqisi_info:'①游戏开始时,你获得两张副类别不同的牌,并将这些牌置入你的装备区。②摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 1ab35b347..8cea69995 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + caimaozhangyun:['male','wei',4,['lianzhou','jinglan']], + yanrou:['male','wei',4,['choutao','xiangshu']], + zhangyao:['female','wu',3,['yuanyu','xiyan']], tenggongzhu:['female','wu',3,['xingchong','liunian']], dc_huangchengyan:['male','qun',3,['dcjiezhen','dczecai','dcyinshi']], laiyinger:['female','qun',3,['xiaowu','huaping']], @@ -148,10 +151,350 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'], sp_xiaohu:['haomeng','yanfuren'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu','yanrou','caimaozhangyun','zhangyao'], } }, skill:{ + //蔡瑁张允 + lianzhou:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + if(!player.isLinked()) return true; + return game.hasPlayer(function(current){ + return current!=player&¤t.hp==player.hp&&!current.isLinked(); + }); + }, + content:function(){ + 'step 0' + if(!player.isLinked()) player.link(); + 'step 1' + var num=game.countPlayer(function(current){ + return current!=player&¤t.hp==player.hp&&!current.isLinked(); + }); + if(num>0){ + player.chooseTarget([1,num],'选择横置任意名体力值等于你的角色',function(card,player,current){ + return current!=player&¤t.hp==player.hp&&!current.isLinked(); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'tiesuo'},player,player); + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets,'green'); + for(var i of targets) i.link(); + } + }, + ai:{halfneg:true}, + }, + jinglan:{ + audio:2, + trigger:{source:'damageSource'}, + forced:true, + content:function(){ + var delta=player.countCards('h')-player.hp; + if(delta>0) player.chooseToDiscard('h',3,true); + else if(delta==0){ + player.chooseToDiscard('h',true); + player.recover(); + } + else{ + player.damage('fire','nosource'); + player.draw(4); + } + }, + ai:{halfneg:true}, + }, + //闫柔 + choutao:{ + audio:2, + trigger:{ + player:'useCard', + target:'useCardToTargeted', + }, + filter:function(event,player){ + if(event.card.name!='sha'||!event.player.isIn()) return false; + if(player==event.player) return player.hasCard(function(card){ + return lib.filter.cardDiscardable(card,player,'choutao'); + },'he'); + return event.player.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,event.player); + },'he'); + }, + check:function(event,player){ + if(player==event.player){ + if(!player.hasCard(function(card){ + return get.value(card)<=5; + },'he')) return false; + for(var i of event.targets){ + var eff1=get.damageEffect(i,player,player); + if(eff1<0) return false; + if(i.hasShan()&&eff1>0) return true; + } + var sha=false; + return player.getCardUsable({name:'sha'})<=0&&player.hasCard(function(card){ + if(!sha&&get.name(card)=='sha'&&player.getUseValue(card)>0){ + sha=true; + return false; + } + return sha&&get.value(card)<=5; + },'hs'); + } + else{ + var eff1=get.effect(event.player,{name:'guohe_copy2'},player,player); + var eff2=get.damageEffect(player,event.player,player); + if(!player.hasShan()) return eff1>0; + if(eff2>0) return eff1>0; + return player.hp>2&&eff20) val+=5; + return 20-val; + }); + else player.discardPlayerCard(trigger.player,true,'he'); + 'step 1' + trigger.directHit.addArray(game.players); + if(player==trigger.player&&trigger.addCount!==false){ + trigger.addCount=false; + player.getStat().card.sha--; + } + }, + }, + xiangshu:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + limited:true, + skillAnimation:true, + animationColor:'gray', + filter:function(event,player){ + return (player.getStat('damage')||0)>0&&game.hasPlayer((current)=>current.isDamaged()); + }, + content:function(){ + 'step 0' + event.num=player.getStat('damage'); + player.chooseTarget('是否发动限定技【襄戍】?','令一名角色回复'+event.num+'点体力并摸'+get.cnNumber(event.num)+'张牌',function(card,player,target){ + return target.isDamaged(); + }).set('ai',function(target){ + var num=_status.event.getParent().num,player=_status.event.player; + var att=get.attitude(player,target); + if(att>0&&num>=Math.min(player.hp,2)) return att*Math.sqrt(target.getDamagedHp()); + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.awakenSkill('xiangshu'); + player.logSkill('xiangshu',target); + target.recover(num); + target.draw(num); + if(player!=target) player.addExpose(0.2); + } + }, + }, + //张瑶 + //Partly powered by 烟雨墨染 + yuanyu:{ + audio:2, + enable:'phaseUse', + usable:1, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.countCards('h')>0){ + var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu'); + for(var i of cards) suits.remove(get.suit(i,false)); + var str='选择一张手牌,作为“怨”置于武将牌上;同时选择一名其他角色,令该角色获得〖怨语〗的后续效果。' + if(suits.length){ + str+='目前“怨”中未包含的花色:'; + for(var i of suits) str+=get.translation(i); + } + player.chooseCardTarget({ + filterCard:true, + filterTarget:lib.filter.notMe, + position:'h', + prompt:'怨语:选择置于武将牌上的牌和目标', + prompt2:str, + suits:suits, + forced:true, + ai1:function(card){ + var val=get.value(card),evt=_status.event; + if(evt.suits.contains(get.suit(card,false))) return 8-get.value(card); + return 5-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + if(player.storage.yuanyu_damage&&player.storage.yuanyu_damage.contains(target)) return 0; + return -get.attitude(player,target); + }, + }); + } + else event.finish(); + 'step 2' + var target=result.targets[0]; + player.addSkill('yuanyu_damage'); + player.markAuto('yuanyu_damage',result.targets); + player.line(target,'green'); + if(!target.storage.yuanyu_mark){ + target.storage.yuanyu_mark=player; + target.markSkillCharacter('yuanyu_mark',player,'怨语','已获得〖怨语〗效果'); + target.addSkill('yuanyu_mark'); + } + player.addToExpansion(result.cards,player,'give').gaintag.add('yuanyu'); + }, + intro:{ + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + player.removeSkill('yuanyu_damage'); + }, + ai:{ + order:7, + result:{ + player:1, + }, + }, + subSkill:{ + mark:{ + mark:'character', + intro:{ + content:'已获得〖怨语〗效果', + onunmark:true, + }, + }, + damage:{ + trigger:{global:'damageSource'}, + forced:true, + charlotte:true, + onremove:function(player,skill){ + if(player.storage[skill]){ + for(var i of player.storage[skill]){ + if(i.storage.yuanyu_mark==player) i.unmarkSkill('yuanyu_mark'); + } + } + delete player.storage[skill]; + }, + filter:function(event,player){ + var source=event.source; + return source&&player.getStorage('yuanyu_damage').contains(source)&&source.countCards('h')>0; + }, + content:function(){ + 'step 0' + event.count=trigger.num; + event.target=trigger.source; + 'step 1' + event.count--; + var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu'); + for(var i of cards) suits.remove(get.suit(i,false)); + var next=target.chooseCard('h',true,'将一张手牌置于'+get.translation(target)+'的武将牌上'); + next.set('suits',suits); + next.set('ai',function(card){ + var val=get.value(card),evt=_status.event; + if(evt.suits.contains(get.suit(card,false))) return 5-get.value(card); + return 8-get.value(card); + }); + if(suits.length){ + var str='目前未包含的花色:'; + for(var i of suits) str+=get.translation(i); + next.set('prompt2',str); + } + 'step 2' + player.addToExpansion(result.cards,target,'give').gaintag.add('yuanyu'); + 'step 3' + if(event.count>0&&target.countCards('he')>0&&player.hasSkill('yuanyu_damage')) event.goto(1); + }, + }, + }, + }, + xiyan:{ + audio:2, + trigger:{player:'addToExpansionAfter'}, + filter:function(event,player){ + if(!event.gaintag.contains('yuanyu')) return false; + var cards=player.getExpansions('yuanyu'); + if(cards.length_status.currentPhase, + forced:true, + content:function(){ + 'step 0' + player.removeSkill('yuanyu_damage'); + var cards=player.getExpansions('yuanyu'); + player.gain(cards,'gain2'); + 'step 1' + var target=_status.currentPhase; + if(player==target){ + player.addMark('xiyan_buff',4,false); + player.addTempSkill('xiyan_buff'); + } + else{ + target.addMark('xiyan_debuff',4,false); + target.addTempSkill('xiyan_debuff'); + } + }, + subSkill:{ + buff:{ + charlotte:true, + mark:true, + marktext:" +4 ", + intro:{ + content:"本回合手牌上限+4且使用牌无次数限制", + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('xiyan_buff'); + }, + cardUsable:function(card,player){ + return Infinity; + }, + }, + sub:true, + }, + debuff:{ + charlotte:true, + mark:true, + marktext:" -4 ", + intro:{ + content:"本回合手牌上限-#且不能使用基本牌", + }, + mod:{ + maxHandcard:function(player,num){ + return num-player.countMark('xiyan_debuff'); + }, + cardEnabled:function(card){ + if(get.type(card)=='basic') return false; + }, + cardSavable:function(card){ + if(get.type(card)=='basic') return false; + }, + }, + sub:true, + }, + }, + }, //滕公主 xingchong:{ audio:2, @@ -263,7 +606,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shuffle1:{ charlotte:true, forced:true, - trigger:{player:'phaseEnd'}, + trigger:{global:'phaseEnd'}, content:function(){ player.gainMaxHp(); game.delayx(); @@ -272,7 +615,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shuffle2:{ charlotte:true, forced:true, - trigger:{player:'phaseEnd'}, + trigger:{global:'phaseEnd'}, content:function(){ 'step 0' player.recover(); @@ -842,7 +1185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var str=get.translation(player); - trigger.player.chooseBool('是否响应'+player+'的主公技【助势】?','令'+get.translation(player)+'摸一张牌').set('goon',get.attitude(trigger.player,player)>0).set('ai',()=>_status.event.goon); + trigger.player.chooseBool('是否响应'+get.translation(player)+'的主公技【助势】?','令'+get.translation(player)+'摸一张牌').set('goon',get.attitude(trigger.player,player)>0).set('ai',()=>_status.event.goon); 'step 1' if(result.bool){ player.logSkill('zhushi'); @@ -915,12 +1258,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return Array.isArray(event.respondTo)&&event.respondTo[0]==player&&player.storage.xizhen_effect&&player.storage.xizhen_effect.isIn(); }, content:function(){ + 'step 0' var target=player.storage.xizhen_effect; - if(target.isHealthy()) player.draw(2); - else{ - target.recover(); - player.draw(); - } + event.target=target; + target.recover(); + 'step 1' + player.draw(target.isHealthy()?2:1); }, mark:'character', intro:{content:'已指定$为目标'}, @@ -1429,7 +1772,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var type=result.control; if(type!='cancel2'){ event.type=type; - var cards=player.getCards('h',function(card){ + var cards=player.getCards('he',function(card){ return get.type2(card,player)==type; }); if(cards.length){ @@ -13280,7 +13623,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(get.prompt2('rewenji'),function(card,player,target){ - return target!=player&&target.countCards('he'); + return target!=player&&target.countCards('he')>0; }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(att>0) return Math.sqrt(att)/10; @@ -13339,7 +13682,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(get.prompt2('spwenji'),function(card,player,target){ - return target!=player&&target.countCards('he'); + return target!=player&&target.countCards('he')>0; }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(att>0) return Math.sqrt(att)/10; @@ -14819,6 +15162,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caomao:'曹髦(241年11月15日-260年6月2日)[1],字彦士,沛国谯县(今安徽省亳州市)人,魏文帝曹丕之孙,东海王曹霖之子,曹魏第四位皇帝(254年11月1日-260年6月2日)。正始二年(241年),生于东海王宫,自幼聪明好学,才慧早成,正始五年(244年),封为高贵乡公,嘉平六年(254年),大将军司马师废除齐王曹芳后,拥立为帝,年号正元,曹髦文才武略,崇拜少康,不满司马氏专权秉政,甘露五年(260年),亲自讨伐司马昭,为太子舍人成济所弑,年仅十九岁,以王礼葬于洛阳西北。曹髦擅长诗文,创制了九言诗,传世文章有《伤魂赋并序》《颜子论》等。爱好儒学,亲赴太学论道,著有《春秋左氏传音》(失传)。精通绘画,一说为中国第一位成为画家的皇帝,唐张彦远《历代名画记》目曹髦为中品。', laiyinger:'来莺儿,是个传说中的人物,正史及古代典籍并无记载。相传来莺儿是东汉歌妓,建安年间洛阳名妓,后爱上曹操的侍卫王图,王图因延误军机而押赴刑场,当时来莺儿奋不顾身以己命换王图一死。新编古装潮剧《曹营恋歌》,秦腔《雀台歌女》讲述了歌女来莺儿与情人王图及曹操三人之间催人泪下的故事。', tenggongzhu:'滕公主,名讳不详,三国人物,吴大帝孙权之女。一说为养女,生父为孙权堂弟孙奂。黄武年间(222年—228年),以公主身份下嫁功臣滕胄之子滕胤,当时滕胤年仅20岁。滕胤皮肤白皙,容貌俊美,每逢入朝大臣们没有不惊叹称羡的。滕胤仕官后,上书言及时局,又对政策多有匡弼。孙权对公主也特别宠爱,因为滕胤的缘故,又格外增加对公主的赏赐,又几次探望慰劳。少帝孙亮时期,孙綝以宗室身份独揽大权作恶多端,引发群臣不满。五凤三年(256年)滕胤与连襟吕据密谋推翻孙綝,事败遭到夷三族 。公主则被亲兄孙壹救出,携其逃亡曹魏。', + zhangyao:'张美人,三国东吴末帝孙皓后妃,张布之女。另有张布女,张美人姊被孙皓立为左夫人。《吴书五妃嫔传第五》:江表传曰:皓以张布女为美人,有宠,皓问曰:“汝父所在?”答曰:“贼以杀之。”皓大怒,棒杀之。后思其颜色,使巧工刻木作美人形象,恒置座侧。问左右:“布复有女否?”答曰:“布大女适故卫尉冯朝子纯。”即夺纯妻入宫,大有宠,拜为左夫人,昼夜与夫人房宴,不听朝政,使尚方以金作华燧、步摇、假髻以千数。令宫人著以相扑,朝成夕败,辄出更作,工匠因缘偷盗,府藏为空。会夫人死,皓哀愍思念,葬于苑中,大作冢,使工匠刻柏作木人,内冢中以为兵卫,以金银珍玩之物送葬,不可称计。已葬之后,皓治丧於内,半年不出。国人见葬太奢丽,皆谓皓已死,所葬者是也。皓舅子何都颜状似皓,云都代立。临海太守奚熙信讹言,举兵欲还诛都,都叔父植时为备海督,击杀熙,夷三族,讹言乃息,而人心犹疑。', + yanrou:'阎柔(生卒年不详),燕国广阳(今北京市附近)人。三国时期曹魏名将。年少时曾被乌丸、鲜卑俘虏,后来却得到他们的信任。刘虞死后,阎柔被鲜于辅等推举为乌丸司马,联系鲜卑为刘虞报仇,和公孙瓒对抗。在官渡之战时归曹操,拜护乌丸校尉,对曹操讨伐乌丸有功,赐爵关内侯。曹操待其如子,曹丕也视其如亲兄弟,阎柔坐镇北方,统帅幽州兵马,抗击胡人的入侵。曹丕即位后,阎柔被拜为度辽将军。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -15670,6 +16015,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xingchong_info:'一轮游戏开始时,你可声明两个自然数X和Y,且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。', liunian:'流年', liunian_info:'锁定技。牌堆第一次洗牌后,你于回合结束时加1点体力上限;牌堆第二次洗牌后,你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。', + zhangyao:'张媱', + yuanyu:"怨语", + yuanyu_info:"出牌阶段限一次。你可以摸一张牌,然后选择一张手牌和一名其他角色。该角色获得如下效果直到你发动〖夕颜〗:{当该角色造成1点伤害后,其须将一张手牌作为“怨”置于你的武将牌上}。然后你将你选择的手牌作为“怨”置于你的武将牌上。", + xiyan:"夕颜", + xiyan_info:"锁定技。当有牌作为“怨”移动到你的武将牌上后,若“怨”中的花色数达到4种,则你获得所有“怨”。然后若当前回合角色:是你,你本回合手牌上限+4且使用牌无次数限制;不是你,当前回合角色本回合手牌上限-4且不能使用基本牌。", + yanrou:'阎柔', + choutao:'仇讨', + choutao_info:'当你使用【杀】时,或成为【杀】的目标后,你可以弃置此【杀】使用者的一张牌,令此【杀】不可被响应。若你是此【杀】的使用者,则你令此【杀】不计入次数限制。', + xiangshu:'襄戍', + xiangshu_info:'限定技。结束阶段开始时,若你本回合内造成过伤害,则你可以选择一名已受伤的角色。该角色回复X点体力并摸X张牌(X为你本回合内造成的伤害值总和且至多为5)。', + caimaozhangyun:'蔡瑁张允', + lianzhou:'连舟', + lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。', + jinglan:'惊澜', + jinglan_info:'锁定技。当你造成伤害后,若你的手牌数:大于体力值,你弃置三张手牌;等于体力值,你弃置一张手牌并回复1点体力;小于体力值,你受到1点无来源火焰伤害并摸四张牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/tw.js b/character/tw.js index a00edcf8f..0f19b04a4 100644 --- a/character/tw.js +++ b/character/tw.js @@ -12,7 +12,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ - tw_puyangxing:['male','wu',3,['twzhengjian','twzhongchi']], + tw_puyangxing:['male','wu',4,['twzhengjian','twzhongchi']], tw_tianyu:['male','wei',4,['twzhenxi','twyangshi']], old_quancong:['male','wu',4,['zhenshan']], tw_wujing:['male','wu',4,['twfenghan','twcongji']], @@ -191,10 +191,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseControl().set('prompt','征建:请选择一种效果').set('choiceList',[ '令“出牌阶段内未使用过非基本牌”的其他角色受到惩罚', '令“出牌阶段内未获得过牌”的其他角色受到惩罚', - ]); + ]).set('ai',()=>Math.random()<=0.5?0:1); 'step 1' player.addSkill('twzhengjian_eff'+result.index); - game.log(player,'获得了','#g【征建】','的','#y效果'+get.cnNumber(result.index+1,true)).set('ai',()=>Math.random()<=0.5?0:1); + game.log(player,'获得了','#g【征建】','的','#y效果'+get.cnNumber(result.index+1,true)); game.delayx(); }, onremove:true, @@ -538,7 +538,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!arg||!arg.name||arg.name!='sha') return false; if(player.storage.counttrigger&&player.storage.counttrigger.twzhenxi) return false; if(!arg.target) return false; - var card=target.getEquip(2); + var card=arg.target.getEquip(2); return card&&get.value(card)>0&&game.hasPlayer(function(current){ return current!=arg.target&¤t.canEquip(card)&&get.effect(current,card,player,player)>0; }) @@ -1190,7 +1190,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.changeZhuanhuanji('twfeifu'); - trigger.target.chooseCard('he',true,'交给'+get.translation(trigger.player)+'一张牌','若选择装备牌,则其可以使用此牌'); + trigger.target.chooseCard('he',true,'非服:交给'+get.translation(trigger.player)+'一张牌','若选择装备牌,则其可以使用此牌'); 'step 1' if(result.bool){ var card=result.cards[0]; diff --git a/character/yingbian.js b/character/yingbian.js index 91b3e53e6..3f8611658 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'yingbian', connect:true, character:{ + wangxiang:['male','jin',3,['bingxin']], jin_guohuai:['female','jin',3,['zhefu','yidu']], jin_jiachong:['male','jin',3,['xiongshu','jianhui']], xuangongzhu:['female','jin',3,['gaoling','qimei','ybzhuiji'],['hiddenSkill']], @@ -32,11 +33,122 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingbian_pack1:['jin_simayi','jin_zhangchunhua','ol_lisu','simazhou','cheliji','ol_huaxin'], yingbian_pack2:['jin_simashi','jin_xiahouhui','zhanghuyuechen','shibao','jin_yanghuiyu'], yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu'], - yingbian_pack4:['zhongyan','xinchang','jin_jiachong','jin_guohuai'], + yingbian_pack4:['zhongyan','xinchang','jin_jiachong','jin_guohuai','wangxiang'], yingbian_pack5:['yangyan','yangzhi'], }, }, skill:{ + bingxin:{ + audio:2, + enable:'chooseToUse', + hiddenCard:function(player,name){ + if(get.type(name)=='basic'&&lib.inpile.contains(name)&&!player.getStorage('bingxin_count').contains(name)) return true; + }, + filter:function(event,player){ + if(event.type=='wuxie') return false; + var hs=player.getCards('h'); + if(hs.length!=Math.max(0,player.hp)) return false; + if(hs.length>1){ + var color=get.color(hs[0],player); + for(var i=1;ifalse, + viewAs:{ + name:links[0][2], + nature:links[0][3], + isCard:true, + }, + precontent:function(){ + player.logSkill('bingxin'); + player.draw(); + delete event.result.skill; + var name=event.result.card.name; + player.addTempSkill('bingxin_count'); + player.markAuto('bingxin_count',[name]); + }, + } + }, + prompt:function(links,player){ + var name=links[0][2]; + var nature=links[0][3]; + return '摸一张并视为使用'+(get.translation(nature)||'')+get.translation(name); + }, + }, + ai:{ + order:function(item,player){ + return 10; + }, + respondShan:true, + respondSha:true, + skillTagFilter:function(player,tag){ + var hs=player.getCards('h'); + if(hs.length!=Math.max(0,hs.length)) return false; + if(hs.length>1){ + var color=get.color(hs[0],player); + for(var i=1;i1||event.player==player) return false; - if(player.hasSkillTag('unequip2')) return false; - var evt=event.getParent(); - if(evt.player&&evt.player.hasSkillTag('unequip',false,{ - name:evt.card?evt.card.name:null, - target:player, - card:evt.card - })) return false; - return true; - }, - audio:true, - check:function(event,player){ - return get.effect(player,event.card,event.player,player)<=0; - }, - content:function(){ - "step 0" - player.judge('linglongshimandai',function(card){return (get.suit(card)=='heart')?1.5:-0.5}); - "step 1" - if(result.judge>0){ - trigger.getParent().excluded.add(player); - } - }, - ai:{ - effect:{ - target:function(card,player,target,effect){ - if(player.hasSkillTag('unequip',false,{ - name:card?card.name:null, - target:player, - card:card - })) return; - }, - }, - }, - }, - "hongmianbaihuapao_skill":{ - equipSkill:true, - trigger:{ - player:"damageBegin4", - }, - filter:function(event,player){ - if(event.source&&event.source.hasSkillTag('unequip',false,{ - name:event.card?event.card.name:null, - target:player, - card:event.card - })) return; - if(event.nature) return true; - }, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - nofire:true, - nothunder:true, - effect:{ - target:function(card,player,target,current){ - if(player.hasSkillTag('unequip',false,{ - name:card?card.name:null, - target:player, - card:card - })) return; - if(get.tag(card,'natureDamage')) return 'zerotarget'; - }, - }, - }, - }, - "wushuangfangtianji_skill":{ - equipSkill:true, - trigger:{ - source:"damageSource", - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'; - }, - content:function(){ - 'step 0' - player.line(trigger.player,'white'); - if(!trigger.player.countCards('he')){ - event.goto(1); - }else{ - event.goto(2); - } - 'step 1' - player.draw(); - event.finish(); - 'step 2' - player.chooseControl('摸一张牌','弃置其一张牌',function(event,player){ - if(get.attitude(player,trigger.player)>2) return '摸一张牌'; - return '弃置其一张牌'; - }); - 'step 3' - if(result.control=='摸一张牌'){ - player.draw(); - event.finish(); - } - else{ - player.discardPlayerCard(trigger.player,'he',true); - event.finish(); - } - }, - }, boss_yaoshou:{ mod:{ @@ -4806,19 +4561,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ noturn:true, } }, - xuwangzhimian:{ - equipSkill:true, - trigger:{player:'phaseDrawBegin'}, - forced:true, - content:function(){ - trigger.num+=2; - }, - mod:{ - maxHandcard:function(player,num){ - return num-1; - } - } - }, xiuluolianyuji2:{ equipSkill:true, vanish:true, @@ -4873,98 +4615,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger.nature='fire'; } }, - chixueqingfeng:{ - equipSkill:true, - trigger:{player:'useCardToPlayered'}, - filter:function(event){ - return event.card.name=='sha'; - }, - logTarget:'target', - forced:true, - content:function(){ - trigger.target.addTempSkill('chixueqingfeng2','shaAfter'); - }, - ai:{ - unequip:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.name=='sha') return true; - return false; - } - } - }, - chixueqingfeng2:{ - equipSkill:true, - mod:{ - cardEnabled:function(){ - return false; - }, - cardUsable:function(){ - return false; - }, - cardRespondable:function(){ - return false; - }, - cardSavable:function(){ - return false; - } - } - }, - qimenbagua:{ - equipSkill:true, - trigger:{target:'shaBefore'}, - forced:true, - filter:function(event,player){ - if(player.hasSkillTag('unequip2')) return false; - if(event.player.hasSkillTag('unequip',false,{ - name:event.card?event.card.name:null, - target:player, - card:event.card - })) return false; - return true; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('unequip',false,{ - name:card?card.name:null, - target:player, - card:card - })) return; - if(card.name=='sha') return 'zerotarget'; - } - } - } - }, - guilongzhanyuedao:{ - equipSkill:true, - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&get.color(event.card)=='red'; - }, - content:function(){ - trigger.directHit.addArray(game.players); - } - }, - guofengyupao:{ - equipSkill:true, - mod:{ - targetEnabled:function(card,player,target,now){ - if(target.hasSkillTag('unequip2')) return false; - if(player!=target){ - if(player.hasSkillTag('unequip',false,{ - name:card?card.name:null, - target:player, - card:card - })){} - else if(get.type(card)=='trick') return false; - } - } - } - }, longfenghemingjian:{ equipSkill:true, inherit:'cixiong_skill', @@ -9263,22 +8913,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ sadouchengbing_info:'出牌阶段对自己使用,若你的势力为“神”,摸X张牌;否则将你手牌补至X;(X为你的体力上限且至多为5)', yihuajiemu:'移花接木', yihuajiemu_info:'出牌阶段对一名有牌的其他角色使用,令其使用一张【杀】,或交给你两张牌', - guilongzhanyuedao:'鬼龙斩月刀', - guilongzhanyuedao_info:'锁定技,你使用的红色【杀】不能被【闪】响应', - guofengyupao:'国风玉袍', - guofengyupao_info:'锁定技,你不能成为其他角色使用普通锦囊牌的目标', chiyanzhenhunqin:'赤焰镇魂琴', chiyanzhenhunqin_info:'锁定技,你造成的伤害均视为具有火属性', - qimenbagua:'奇门八卦', - qimenbagua_info:'锁定技,其他角色使用的【杀】对你无效', juechenjinge:'绝尘金戈', juechenjinge_info:'锁定技,敌方角色计算与己方其他角色距离+1', xiuluolianyuji:'修罗炼狱戟', xiuluolianyuji_info:'你使用【杀】可以额外指定任意名攻击范围内的其他角色为目标;锁定技,你使用【杀】造成的伤害+1,然后令受到伤害的角色回复1点体力', - xuwangzhimian:'虚妄之冕', - xuwangzhimian_info:'锁定技,摸牌阶段,你额外摸两张牌;你的手牌上限-1', - chixueqingfeng:'赤血青锋', - chixueqingfeng_info:'锁定技,你使用【杀】结算结束前,目标角色不能使用或打出手牌,且此【杀】无视其防具', longfenghemingjian:'鸾凤和鸣剑', longfenghemingjian_info:'你使用的【雷杀】或【火杀】指定目标后,可令对方选择弃置一张牌或令你摸一张牌', qicaishenlu:'七彩神鹿', @@ -9599,23 +9239,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "boss_aozhan":"鏖战", "boss_aozhan_info":"锁定技,若你装备区内有:武器牌,你可以多使用一张【杀】;防具牌,防止你受到的超过1点的伤害;坐骑牌,摸牌阶段多摸一张牌;宝物牌,跳过你的判定阶段。", - "shufazijinguan_skill":"束发紫金冠", - "shufazijinguan_skill_info":"准备阶段,你可以对一名其他角色造成1点伤害。", - "linglongshimandai_skill":"玲珑狮蛮带", - "linglongshimandai_skill_info":"当其他角色使用牌指定你为唯一目标后,你可以进行一次判定,若判定结果为红桃,则此牌对你无效。", - "hongmianbaihuapao_skill":"红棉百花袍", - "hongmianbaihuapao_skill_info":"锁定技,防止你受到的属性伤害。", - "wushuangfangtianji_skill":"无双方天戟", - "wushuangfangtianji_skill_info":"你使用【杀】对目标角色造成伤害后,可以摸一张牌或弃置目标角色一张牌。", - "wushuangfangtianji":"无双方天戟", - "wushuangfangtianji_info":"你使用【杀】对目标角色造成伤害后,可以摸一张牌或弃置目标角色一张牌。", - "shufazijinguan":"束发紫金冠", - "shufazijinguan_info":"准备阶段,你可以对一名其他角色造成1点伤害。", - "hongmianbaihuapao":"红棉百花袍", - "hongmianbaihuapao_info":"锁定技,防止你受到的属性伤害。", - "linglongshimandai":"玲珑狮蛮带", - "linglongshimandai_info":"当其他角色使用牌指定你为唯一目标后,你可以进行一次判定,若判定结果为红桃,则此牌对你无效。", - boss_qinguangwang_ab:'秦广王', boss_qinguangwang:'秦广王·蒋子文', boss_panguan:'判官', diff --git a/mode/guozhan.js b/mode/guozhan.js index 63f835599..e648a9575 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -405,7 +405,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_zhugeke:['male','wu',3,['aocai','gzduwu'],['gzskin']], gz_wenqin:['male','wei',4,['gzjinfa'],['doublegroup:wei:wu','gzskin']], gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun','gzskin']], - gz_liuba:['male','shu',3,['tongduo','qingyin'],['gzskin']], + gz_liuba:['male','shu',3,['gztongduo','qingyin'],['gzskin']], gz_pengyang:['male','shu',3,['daming','xiaoni'],['doublegroup:shu:qun','gzskin']], gz_zhuling:['male','wei',4,['gzjuejue','gzfangyuan'],['gzskin']], @@ -1330,7 +1330,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(lib.filter.notMe,get.prompt('gzlianyou'),'令一名其他角色获得〖兴火〗').set('forceDie',true).set('ai',function(target){ - return 10+(get.attitude(_status.event.player,target)*target.hasSkillTag('fireAttack',null,null,true)?2:1) + return 10+(get.attitude(_status.event.player,target)*(target.hasSkillTag('fireAttack',null,null,true)?2:1)); }); 'step 1' if(result.bool){ @@ -2232,13 +2232,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, //刘巴 - tongduo:{ + gztongduo:{ audio:2, trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ - if(player!=event.player&&!player.hasSkill('tongduo')||!event.player.isFriendOf(player)) return false; + if(player!=event.player&&!player.hasSkill('gztongduo')||!event.player.isFriendOf(player)) return false; return event.player.getHistory('lose',function(evt){ return evt.type=='discard'&&evt.cards2.length>0&&evt.getParent('phaseDiscard').player==event.player; }).length>0; @@ -2252,10 +2252,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ num=Math.min(3,num); event.num=num; var next=trigger.player.chooseBool('是否发动【统度】摸'+get.cnNumber(num)+'张牌?'); - if(player==trigger.player) next.setHiddenSkill('tongduo'); + if(player==trigger.player) next.setHiddenSkill('gztongduo'); 'step 1' if(result.bool){ - player.logSkill('tongduo',trigger.player); + player.logSkill('gztongduo',trigger.player); trigger.player.draw(num); } }, @@ -4145,7 +4145,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(get.prompt2('gzwenji'),function(card,player,target){ - return target!=player&&target.countCards('he'); + return target!=player&&target.countCards('he')>0; }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(target.identity=='unknown'&&att<=0) return 20; @@ -11581,8 +11581,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。', xiaoni:'嚣逆', xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。', - tongduo:'统度', - tongduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ', + gztongduo:'统度', + gztongduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ', qingyin:'清隐', qingyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。', gzlianpian:'联翩', @@ -12880,7 +12880,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return; } game.addVideo('showCharacter',this,num); - if(this.identity=='unknown'||(this.identity!='ye'&&(num==0||num==2)&&lib.character[this.name1][1]=='ye')){ + if(this.identity=='unknown'||((num==0||num==2)&&lib.character[this.name1][1]=='ye')){ this.group=this.getGuozhanGroup(num); this._group=this.group; if((num==0||num==2)&&lib.character[this.name1][1]=='ye'){ diff --git a/mode/stone.js b/mode/stone.js index e39336079..59b79537b 100644 --- a/mode/stone.js +++ b/mode/stone.js @@ -1086,7 +1086,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ mode_stone:{ stone_tutengyongshi:['male','wei',4,['shaman_jili'],['minskin','stone'],[4,2,'shaman']], stone_xuejuren:['male','wei',2,['shaman_xueju'],['minskin','stone'],[1,1,'shaman']], - stone_tuyuansu:['male','qun',5,['chaofeng'],['minskin','stone'],[5,4,'shaman']], + stone_tuyuansu:['male','qun',5,['lschaofeng'],['minskin','stone'],[5,4,'shaman']], stone_huoyuansu:['male','shu',3,['shaman_huoxi'],['minskin','stone'],[4,3,'shaman']], stone_fachao:['male','wei',3,['shaman_tuteng','shaman_fachao'],['minskin','stone'],[3,0,'shaman']], stone_huoshe:['male','shu',3,['shaman_tuteng','shaman_huoshe'],['minskin','stone'],[3,0,'shaman']], @@ -1099,13 +1099,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_kuangyedoushi:['male','wu',3,['druid_nuhuo'],['minskin','stone'],[4,2,'druid']], stone_conglinshouwei:['male','wu',3,['druid_huwei'],['minskin','stone'],[4,2,'druid']], - stone_baohuzhishu:['male','qun',6,['chaofeng'],['minskin','stone'],[6,4,'druid']], + stone_baohuzhishu:['male','qun',6,['lschaofeng'],['minskin','stone'],[6,4,'druid']], stone_liebao:['male','wei',3,['stone_chongfeng'],['minskin','stone'],[3,2,'druid']], - stone_zongxiong:['male','shu',4,['chaofeng'],['minskin','stone'],[4,2,'druid']], + stone_zongxiong:['male','shu',4,['lschaofeng'],['minskin','stone'],[4,2,'druid']], stone_baoqishi:['female','wei',2,['druid_chengzhang'],['minskin','stone'],[2,2,'druid']], stone_renyaqishi:['female','wei',1,['druid_renya'],['minskin','stone'],[1,1,'druid']], stone_huangyeqishi:['male','wei',4,['druid_chicheng'],['minskin','stone'],[5,2,'druid']], - stone_huoshanxiemu:['male','wei',3,['druid_juhuo','chaofeng'],['minskin','stone'],[5,6,'druid']], + stone_huoshanxiemu:['male','wei',3,['druid_juhuo','lschaofeng'],['minskin','stone'],[5,6,'druid']], stone_conglinxiaoshou:['male','wei',3,['druid_yuehuo'],['minskin','stone'],[4,4,'druid']], stone_lindishuyao:['female','wei',3,['druid_yeyou'],['minskin','stone'],[3,3,'druid']], stone_xunmenglong:['male','wei',2,['druid_qicheng'],['minskin','stone'],[3,3,'druid']], @@ -1113,7 +1113,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_caoyuanshi:['male','qun',5,['hunter_nuhou'],['minskin','stone'],[5,2,'hunter']], stone_leiouke:['male','shu',2,['hunter_zhanhuo'],['minskin','stone'],[3,1,'hunter']], stone_huofu:['male','qun',2,['stone_chongfeng'],['minskin','stone'],[3,4,'hunter']], - stone_misha:['male','shu',3,['chaofeng'],['minskin','stone'],[3,3,'hunter']], + stone_misha:['male','shu',3,['lschaofeng'],['minskin','stone'],[3,3,'hunter']], stone_jiewangzhu:['male','wu',1,['hunter_jiewang'],['minskin','stone'],[1,2,'hunter']], stone_xunshoushi:['male','qun',2,['hunter_xunshou'],['minskin','stone'],[4,3,'hunter']], stone_senlinlang:['male','qun',1,['hunter_qunxi'],['minskin','stone'],[1,2,'hunter']], @@ -1154,7 +1154,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_xiaogui:['male','qun',1,[],['minskin','stone','stonehidden'],[1,1]], stone_kongjuzhanma:['male','qun',1,['warlock_yongsheng'],['minskin','stone'],[3,1,'warlock']], stone_morishouwei:['male','qun',4,['stone_chongfeng','warlock_zaihuo'],['minskin','stone'],[4,4,'warlock']], - stone_xukongxingzhe:['male','qun',2,['chaofeng'],['minskin','stone'],[1,1,'warlock']], + stone_xukongxingzhe:['male','qun',2,['lschaofeng'],['minskin','stone'],[1,1,'warlock']], stone_diyuhuo:['male','qun',4,['warlock_yuhuo'],['minskin','stone'],[5,4,'warlock']], stone_diyuhuox:['male','qun',2,[],['minskin','stone','stonehidden'],[2,2,'warlock']], stone_heishitanfan:['male','qun',2,['warlock_anyu'],['minskin','stone'],[2,2,'warlock']], @@ -1169,10 +1169,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_zhujiashi:['male','qun',2,['warrior_zhujia'],['minskin','stone'],[2,1,'warrior']], stone_jiangong:['male','qun',2,['warrior_jiangong'],['minskin','stone'],[2,2,'warrior']], stone_chidunshinv:['female','qun',4,['warrior_tidun'],['minskin','stone'],[5,4,'warrior']], - stone_yuanhou:['male','qun',2,['chaofeng'],['minskin','stone'],[2,3,'warrior']], + stone_yuanhou:['male','qun',2,['lschaofeng'],['minskin','stone'],[2,3,'warrior']], stone_heiyaoyaoshou:['male','qun',4,['warrior_heiyao'],['minskin','stone'],[5,4,'warrior']], stone_honglongyongshi:['male','qun',2,['warrior_fenyong'],['minskin','stone'],[2,3,'warrior']], - stone_peilianshi:['male','qun',2,['chaofeng','warrior_peilian'],['minskin','stone'],[2,2,'warrior']], + stone_peilianshi:['male','qun',2,['lschaofeng','warrior_peilian'],['minskin','stone'],[2,2,'warrior']], stone_jingyingweishi:['male','qun',3,['stone_chongfeng'],['minskin','stone'],[4,3,'warrior']], stone_mengmaren:['male','qun',3,['warrior_chuanci'],['minskin','stone'],[4,4,'warrior']], stone_zhifuzhe:['male','qun',2,['warrior_zhifu'],['minskin','stone'],[3,1,'warrior']], @@ -1237,18 +1237,18 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_shumiao:['none','wu',1,[],['minskin','stone','stonehidden'],[1,1]], stone_shuren:['none','wu',2,['stone_chongfeng','stone_zibao'],['minskin','stone','stonehidden'],[2,2]], stone_shurenx:['none','wu',2,[],['minskin','stone','stonehidden'],[2,2]], - stone_shurenxx:['none','wu',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], - stone_youlinglang:['none','qun',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], + stone_shurenxx:['none','wu',2,['lschaofeng'],['minskin','stone','stonehidden'],[2,2]], + stone_youlinglang:['none','qun',2,['lschaofeng'],['minskin','stone','stonehidden'],[2,2]], stone_xiaojingling:['none','qun',1,['xuying'],['minskin','stone','stonehidden'],[1,1]], stone_zhumo:['none','qun',2,[],['minskin','stone','stonehidden'],[2,2]], - stone_jingxiang:['none','qun',2,['stone_jingxiang','chaofeng'],['minskin','stone','stonehidden'],[2,0]], + stone_jingxiang:['none','qun',2,['stone_jingxiang','lschaofeng'],['minskin','stone','stonehidden'],[2,0]], stone_shengguanghuwei:['female','qun',2,['priest_shengguang'],['minskin','stone','stonehidden'],[1,1]], stone_liegou:['none','qun',1,['stone_chongfeng'],['minskin','stone','stonehidden'],[1,2]], stone_mianyang:['none','qun',1,['mage_mianyang'],['minskin','stone','stonehidden'],[1,0]], stone_qingwa:['none','wu',1,['shaman_qingwa'],['minskin','stone','stonehidden'],[1,0]], - stone_shengjiachong:['none','qun',1,['chaofeng'],['minskin','stone','stonehidden'],[1,1]], + stone_shengjiachong:['none','qun',1,['lschaofeng'],['minskin','stone','stonehidden'],[1,1]], - stone_tuteng1:['none','qun',2,['shaman_tuteng','chaofeng'],['minskin','stone','stonehidden'],[2,0]], + stone_tuteng1:['none','qun',2,['shaman_tuteng','lschaofeng'],['minskin','stone','stonehidden'],[2,0]], stone_tuteng2:['none','qun',2,['shaman_tuteng','shaman_zhuore'],['minskin','stone','stonehidden'],[2,0]], stone_tuteng3:['none','qun',2,['shaman_tuteng','shaman_fali'],['minskin','stone','stonehidden'],[2,0]], stone_tuteng4:['none','qun',2,['shaman_tuteng','shaman_zhiliao'],['minskin','stone','stonehidden'],[2,0]], @@ -1260,7 +1260,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_nuoziduomu:['male','qun',4,['stone_shixu'],['minskin','stone','stonehidden','stonelegend'],[6,4]], stone_maligousi:['male','qun',4,['stone_mowang'],['minskin','stone','stonehidden','stonelegend'],[6,2]], - stone_aolajier:['male','qun',4,['stone_chongfeng','shaman_fengnu','paladin_hudun','chaofeng'],['minskin','stone','stonehidden','stonelegend_shaman'],[6,4]], + stone_aolajier:['male','qun',4,['stone_chongfeng','shaman_fengnu','paladin_hudun','lschaofeng'],['minskin','stone','stonehidden','stonelegend_shaman'],[6,4]], stone_andongni:['male','qun',4,['stone_zhiyin'],['minskin','stone','stonehidden','stonelegend_mage'],[6,4]], stone_jialakesi:['male','qun',6,['stone_bianshen'],['minskin','stone','stonehidden','stonelegend_warlock'],[6,0]], stone_jialakesix:['male','qun',6,['stone_lianyu'],['modeimage','stonehidden','stonespecial']], @@ -1268,7 +1268,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stone_geluomashi:['male','qun',4,['stone_chongfeng','stone_jinu'],['minskin','stone','stonehidden','stonelegend_warrior'],[6,4]], stone_aidewen:['male','qun',3,['stone_lianji'],['minskin','stone','stonehidden','stonelegend_rogue'],[6,3]], stone_sainaliusi:['male','qun',3,['stone_shenyu'],['minskin','stone','stonehidden','stonelegend_druid'],[6,3]], - stone_fuding:['male','qun',3,['paladin_hudun','chaofeng','stone_fuchou'],['minskin','stone','stonehidden','stonelegend_paladin'],[6,3]], + stone_fuding:['male','qun',3,['paladin_hudun','lschaofeng','stone_fuchou'],['minskin','stone','stonehidden','stonelegend_paladin'],[6,3]], stone_weilun:['male','qun',4,['stone_shenyou'],['minskin','stone','stonehidden','stonelegend_priest'],[6,6]], } }, @@ -1688,7 +1688,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ get:{ rawAttitude:function(from,to){ var num; - if(to.isMin()&&!to.hasSkill('chaofeng')){ + if(to.isMin()&&!to.hasSkill('lschaofeng')){ num=5; } else{ @@ -5338,14 +5338,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ stoneact:1, filterTarget:function(card,player,target){ return target.isMin()&&target.side==player.side&& - (!target.hasSkill('chaofeng')||target.hp