diff --git a/audio/die/re_guohuanghou.mp3 b/audio/die/re_guohuanghou.mp3 new file mode 100644 index 000000000..132c29bb0 Binary files /dev/null and b/audio/die/re_guohuanghou.mp3 differ diff --git a/audio/die/tw_caocao.mp3 b/audio/die/tw_caocao.mp3 new file mode 100644 index 000000000..178ea2f82 Binary files /dev/null and b/audio/die/tw_caocao.mp3 differ diff --git a/audio/die/tw_liuhong.mp3 b/audio/die/tw_liuhong.mp3 new file mode 100644 index 000000000..2aabe866c Binary files /dev/null and b/audio/die/tw_liuhong.mp3 differ diff --git a/audio/skill/redanxin1.mp3 b/audio/skill/redanxin1.mp3 new file mode 100644 index 000000000..2750c3a86 Binary files /dev/null and b/audio/skill/redanxin1.mp3 differ diff --git a/audio/skill/redanxin2.mp3 b/audio/skill/redanxin2.mp3 new file mode 100644 index 000000000..2ff04a0de Binary files /dev/null and b/audio/skill/redanxin2.mp3 differ diff --git a/audio/skill/rejiaozhao1.mp3 b/audio/skill/rejiaozhao1.mp3 new file mode 100644 index 000000000..f9acb4457 Binary files /dev/null and b/audio/skill/rejiaozhao1.mp3 differ diff --git a/audio/skill/rejiaozhao2.mp3 b/audio/skill/rejiaozhao2.mp3 new file mode 100644 index 000000000..ce99c6ee4 Binary files /dev/null and b/audio/skill/rejiaozhao2.mp3 differ diff --git a/audio/skill/twgezhi1.mp3 b/audio/skill/twgezhi1.mp3 new file mode 100644 index 000000000..5ebdc5ccf Binary files /dev/null and b/audio/skill/twgezhi1.mp3 differ diff --git a/audio/skill/twgezhi2.mp3 b/audio/skill/twgezhi2.mp3 new file mode 100644 index 000000000..330856d6a Binary files /dev/null and b/audio/skill/twgezhi2.mp3 differ diff --git a/audio/skill/twlingfa1.mp3 b/audio/skill/twlingfa1.mp3 new file mode 100644 index 000000000..7318aa140 Binary files /dev/null and b/audio/skill/twlingfa1.mp3 differ diff --git a/audio/skill/twlingfa2.mp3 b/audio/skill/twlingfa2.mp3 new file mode 100644 index 000000000..79b4d5da9 Binary files /dev/null and b/audio/skill/twlingfa2.mp3 differ diff --git a/audio/skill/twyujue1.mp3 b/audio/skill/twyujue1.mp3 new file mode 100644 index 000000000..a0a486b59 Binary files /dev/null and b/audio/skill/twyujue1.mp3 differ diff --git a/audio/skill/twyujue2.mp3 b/audio/skill/twyujue2.mp3 new file mode 100644 index 000000000..e466ef9b5 Binary files /dev/null and b/audio/skill/twyujue2.mp3 differ diff --git a/audio/skill/twzhian1.mp3 b/audio/skill/twzhian1.mp3 new file mode 100644 index 000000000..a848e0e3b Binary files /dev/null and b/audio/skill/twzhian1.mp3 differ diff --git a/audio/skill/twzhian2.mp3 b/audio/skill/twzhian2.mp3 new file mode 100644 index 000000000..f386ff4f7 Binary files /dev/null and b/audio/skill/twzhian2.mp3 differ diff --git a/card/sp.js b/card/sp.js index d752403a2..9e3b934c0 100644 --- a/card/sp.js +++ b/card/sp.js @@ -251,13 +251,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, singleCard:true, type:'trick', - selectTarget:2, complexTarget:true, multitarget:true, targetprompt:['给一张牌','得两张牌'], filterTarget:function(card,player,target){ return target!=player; }, + filterAddedTarget:function(card,player,target){ + return target!=player; + }, content:function(){ 'step 0' if(!player.countCards('h')){ diff --git a/card/standard.js b/card/standard.js index 42c673bdc..94806625d 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1567,31 +1567,30 @@ game.import('card',function(lib,game,ui,get,ai,_status){ fullskin:true, type:'trick', enable:true, - selectTarget:2, singleCard:true, - multitarget:true, targetprompt:['被借刀','出杀目标'], + complexSelect:true, complexTarget:true, multicheck:function(){ return game.hasPlayer(function(current){ if(current.getEquip(1)){ return game.hasPlayer(function(current2){ - return lib.filter.filterTarget({name:'sha'},current,current2); + return current.inRange(current2)&¤t.canUse('sha',current2,false); }) } }); }, filterTarget:function(card,player,target){ - if(ui.selected.targets.length==0){ - return (player!=target&&target.getCards('e',{subtype:'equip1'}).length); - } - else{ - return lib.filter.filterTarget({name:'sha'},ui.selected.targets[0],target); - } + return player!=target&&target.getEquip(1)&&game.hasPlayer(function(current){ + return target!=current&&target.inRange(current)&&target.canUse('sha',current,false); + }); + }, + filterAddedTarget:function(card,player,target,preTarget){ + return target!=preTarget&&preTarget.inRange(target)&&preTarget.canUse('sha',target,false); }, content:function(){ "step 0" - if(event.directHit||(!_status.connectMode&&lib.config.skip_shan&&!target.hasSha())){ + if(event.directHit||!event.addedTarget||(!_status.connectMode&&lib.config.skip_shan&&!target.hasSha())){ event.directfalse=true; } else{ diff --git a/character/diy.js b/character/diy.js index 3e4915655..39a015839 100755 --- a/character/diy.js +++ b/character/diy.js @@ -97,9 +97,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']], diy_wenyang:['male','wei','4/6',['lvli','choujue']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], - // diy_hanlong:['male','wei',4,['siji','ciqiu']], + diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['nsshuaiyan','moshou']], - diy_liuyan:['male','shu',3,['juedao','geju']], + diy_liuyan:['male','qun',3,['juedao','geju']], // diy_luxun:['male','wu',3,['shaoying','zonghuo']], diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']], // diy_zhouyu:['male','wu',3,['jieyan','honglian']], @@ -195,7 +195,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"], diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"], diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"], - diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], + diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"], + diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"], diy_noname:['noname'], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang'], @@ -203,6 +204,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterIntro:{ noname:'无名杀的吉祥物。
画师:空城
技能设计:李木子', + diy_hanlong:'韩龙,魏国刺客。他孤身一人深入到了长城外的敌人领地,成功刺杀了敌方首领轲比能,瓦解了鲜卑民族,曹魏边境因此获得了几十年的安稳。', ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。', diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。', @@ -14874,40 +14876,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ciqiu:{ - unique:true, - trigger:{source:'damageBegin'}, + trigger:{source:"damageBegin1"}, forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.player.hp==event.player.maxHp&&event.notLink(); + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.player.isHealthy(); }, content:function(){ + "step 0" trigger.num++; - trigger._ciqiu3=true; - }, - group:['ciqiu2'] - }, - ciqiu2:{ - trigger:{global:'dying'}, - priority:9, - filter:function(event,player){ - return event.player!=player&&event.parent._ciqiu3&&event.parent.source==player; - }, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - forced:true, - logTarget:'player', - content:function(){ - 'step 0' - trigger.player.die(); - player.removeSkill('ciqiu2'); - 'step 1' - if(!trigger.player.isAlive()){ - trigger.cancel(true); + if(trigger.num>=trigger.player.hp){ + trigger.player.addTempSkill('ciqiu_dying'); + player.removeSkill('ciqiu') } - } + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){ + return [1,-2]; + } + }, + }, + }, + }, + ciqiu_dying:{ + trigger:{player:"dyingBegin"}, + forced:true, + silent:true, + firstDo:true, + content:function(){ + player.die(); + }, + popup:false, }, - ciqiu3:{}, juedao:{ enable:'phaseUse', filter:function(event,player){ @@ -15928,8 +15929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ siji:'伺机', ciqiu:'刺酋', - ciqiu2:'刺酋', - ciqiu3:'刺酋', + ciqiu_dying:'刺酋', diy_liuyan:'刘焉', juedao:'绝道', geju:'割据', @@ -15991,6 +15991,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ junk_zhangrang_ab:'张让', old_jiakui_ab:'贾逵', diy_tieba:'吧友设计', + diy_xushi:'玩点论杀·虚实篇', diy_default:'常规', diy_noname:'无名专属', diy_key:'论外', diff --git a/character/extra.js b/character/extra.js index 233aa94a1..714f527ec 100755 --- a/character/extra.js +++ b/character/extra.js @@ -4893,7 +4893,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dulie:'笃烈', dulie_info:'锁定技。当你成为【杀】的目标时,若使用者的体力值大于你,则你进行判定。若结果为红桃,则取消此目标。', tspowei:'破围', - tspowei_info:'使命技。①游戏开始时,你令所有其他角色获得一个“围”。②一名角色受到伤害后,若其有“围”,则其移去“围”。③回合开始时,你选择所有有“围”的角色。这些角色失去“围”,然后这些角色的第一个不为你的下家获得等量的“围”。④一名其他角色的回合开始时,若其有围,则你可以选择一项:⒈弃置一张手牌并对其造成1点伤害。⒉若其体力值不大于你,则你获得其一张手牌。选择完成后,你视为在其攻击范围内直到回合结束。⑤使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。⑥失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。', + tspowei_info:'使命技。①游戏开始时,你令所有其他角色获得一个“围”。②一名角色受到伤害后,若其有“围”,则其移去“围”。③回合开始时,你选择所有有“围”的角色。这些角色失去“围”,然后这些角色的第一个不为你的下家获得等量的“围”。④一名其他角色的回合开始时,若其有“围”,则你可以选择一项:⒈弃置一张手牌并对其造成1点伤害。⒉若其体力值不大于你,则你获得其一张手牌。选择完成后,你视为在其攻击范围内直到回合结束。⑤使命:回合开始时,若场上没有“围”,则你获得技能〖神著〗。⑥失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。', shenzhu:'神著', shenzhu_info:'锁定技,当你使用有对应实体牌的非转化【杀】结算结束后,你选择一项:①摸一张牌,且本回合使用【杀】的次数上限+1。②摸三张牌,且本回合不能再使用【杀】。', dangmo:'荡魔', diff --git a/character/mobile.js b/character/mobile.js index 16a195bdd..8dcc1ffe1 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -81,7 +81,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_mifuren:['female','shu',3,['xinguixiu','qingyu']], sp_xinpi:['male','wei',3,['spyinju','spchijie']], nanhualaoxian:['male','qun',3,['yufeng','tianshu']], - feiyi:['male','shu',3,['mjshengxi','mjkuanji']], + feiyi:['male','shu',3,['mjshengxi','fyjianyu']], sp_bianfuren:['female','wei',3,['spwanwei','spyuejian']], sp_duyu:['male','qun',4,['spwuku','spsanchen']], luotong:['male','wu',4,['qinzheng']], @@ -1242,6 +1242,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sptaoluan:{ audio:2, trigger:{global:'judgeEnd'}, + usable:1, filter:function(event,player){ return event.result&&event.result.suit=='spade'; }, @@ -3157,6 +3158,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.storage.jueyong) player.storage.jueyong=[[],[]]; player.storage.jueyong[0].push(card); player.storage.jueyong[1].push(trigger.player); + game.delayx(); }, onremove:function(player,skill){ var cards=player.getExpansions(skill); @@ -3165,9 +3167,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, intro:{ markcount:function(storage){ + if(!storage) return 0; return storage[0].length; }, mark:function(dialog,storage,player){ + if(!storage) return; dialog.addAuto(storage[0]); dialog.addText(get.translation(storage[1])); }, @@ -5150,12 +5154,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targets.sortBySeat(); for(var i of targets) i.addMark('luanchou',1); }, - global:'gonghuan', + global:['gonghuan','gonghuan_clear'], derivation:'gonghuan', marktext:'姻', intro:{ name:'共患', - content:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。', + content:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。', + onunmark:true, }, ai:{ order:10, @@ -5182,6 +5187,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, content:function(){ + trigger._gonghuan_player=trigger.player; trigger.player=player; }, ai:{ @@ -5204,6 +5210,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + subSkill:{ + clear:{ + trigger:{player:'damageEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return event._gonghuan_player&&player.hp==event._gonghuan_player.hp; + }, + content:function(){ + player.removeMark('luanchou',player.countMark('luanchou')); + trigger._gonghuan_player.removeMark('luanchou',trigger._gonghuan_player.countMark('luanchou')); + }, + }, + }, }, //刘璋 xiusheng:{ @@ -5446,19 +5466,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ if(player==event.player) return false; if(_status.renku.length) return true; - return event.player.countCards('h')>1&&event.player.countCards('h')!=event.player.hp; + return event.player.countCards('h')>event.player.hp; }, direct:true, content:function(){ 'step 0' var target=trigger.player; event.target=target; - var num=Math.min(9,Math.abs(target.hp-target.countCards('h'))); + var num=Math.max(0,target.countCards('h')-target.hp); var choiceList=['令其从仁库中获得一张牌','令其将'+get.cnNumber(num)+'张手牌置入仁库']; var choices=[]; if(_status.renku.length) choices.push('选项一'); else choiceList[0]=''+choiceList[0]+''; - if(target.countCards('h')>1&&target.countCards('h')!=target.hp){ + if(target.countCards('h')>target.hp){ event.num=num; choices.push('选项二'); } @@ -5471,7 +5491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(_status.renku.length>0) return '选项一'; return 0; } - if(target.countCards('h')>1&&target.countCards('h')!=target.hp) return '选项二'; + if(target.countCards('h')>target.hp) return '选项二'; return 'cancel2'; }); 'step 1' @@ -6792,7 +6812,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var num=Math.max(1,player.hp),target=trigger.player; - player.chooseCard('he',get.prompt('sheyi',target),'交给其至少'+get.cnNumber(num)+'张牌,防止即将受到的伤害('+trigger.num+'点)',[num,player.countCards('h')]).set('goon',function(){ + player.chooseCard('he',get.prompt('sheyi',target),'交给其至少'+get.cnNumber(num)+'张牌,防止即将受到的伤害('+trigger.num+'点)',[num,player.countCards('he')]).set('goon',function(){ if(get.attitude(player,target)<0) return false; if(trigger.num=0) return false; if(trigger.num<2&&target.hp>trigger.num) return 6/Math.sqrt(num); @@ -16069,7 +16089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liaoyi:'疗疫', liaoyi_info:'其他角色的回合开始时,若其:①手牌数小于体力值且仁库内牌数大于等于X,则你可令其从仁库中获得X张牌;②手牌数大于体力值,则你可以令其将X张牌置于仁库中(X为其手牌数与体力值之差且至多为4)。', xinliaoyi:'疗疫', - xinliaoyi_info:'其他角色的回合开始时,你可选择一项:①令其从仁库中获得一张牌。②若其手牌数大于1,则令其将X张手牌置入仁库(X为其手牌数与体力值之差且至多为9)。', + xinliaoyi_info:'其他角色的回合开始时,你可选择一项:①令其从仁库中获得一张牌。②若其手牌数大于体力值,则令其将X张手牌置入仁库(X为其手牌数与体力值之差)。', binglun:'病论', binglun_info:'出牌阶段限一次,你可以将仁库中的一张牌置于弃牌堆并选择一名角色。该角色选择一项:①摸一张牌。②于其下回合结束时回复1点体力。', sp_zhangwen:'手杀张温', @@ -16090,7 +16110,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luanchou:'鸾俦', luanchou_info:'出牌阶段限一次,你可令两名角色获得“姻”标记并清除原有标记。拥有“姻”标记的角色视为拥有技能〖共患〗。', gonghuan:'共患', - gonghuan_info:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。', + gonghuan_info:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。', sp_yanghu:'羊祜', mingfa:'明伐', mingfa_info:'①结束阶段,你可展示一张牌并记录为“明伐”。②出牌阶段开始时,若“明伐”牌在你的手牌区或装备区,则你可以使用“明伐”牌与一名其他角色拼点。若你赢:你获得对方一张牌并从牌堆中获得一张点数等于“明伐”牌牌面点数-1的牌。若你没赢:你本回合不能使用牌指定其他角色为目标。③你的拼点牌亮出后,你令此牌的点数+2。', @@ -16283,7 +16303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spshiji:'势击', spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。', sptaoluan:'讨乱', - sptaoluan_info:'一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)', + sptaoluan_info:'每回合限一次。一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)', sp_yangwan:'杨婉', spmingxuan:'瞑昡', spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张牌(X为未选择过选项①的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:①对你使用一张【杀】。②交给你一张牌,然后你摸一张牌。', diff --git a/character/old.js b/character/old.js index 581546ce2..08fd74871 100755 --- a/character/old.js +++ b/character/old.js @@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_shenhua:["yuji","zhangjiao","old_zhugezhan","old_guanqiujian","xiahouyuan","weiyan","xiaoqiao","pangde","xuhuang"], old_refresh:["old_zhangfei","old_huatuo","old_zhaoyun","ol_huaxiong"], old_yijiang1:["masu","xushu","xin_yujin","old_xusheng","old_lingtong","fazheng"], - old_yijiang2:["old_zhonghui"], + old_yijiang2:["old_zhonghui","madai"], old_yijiang3:["liru","old_zhuran","old_fuhuanghou","old_caochong"], old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"], old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"], @@ -19,6 +19,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + madai:['male','shu',4,['mashu','oldqianxi']], xuhuang:['male','wei',4,['gzduanliang']], junk_simayi:['male','jin',3,['buchen','smyyingshi','xiongzhi','quanbian'],['hiddenSkill']], fazheng:['male','shu',3,['enyuan','xuanhuo']], @@ -783,6 +784,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fazheng:'旧法正', junk_simayi:'旧晋司马懿', junk_simayi_ab:'司马懿', + madai:'旧马岱', old_standard:'标准包', old_shenhua:'神话再临', @@ -794,6 +796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yijiang5:'一将成名2015', old_yijiang67:'原创设计', old_sp:'SP', + old_yingbian:'文德武备', old_mobile:'移动版', } }; diff --git a/character/rank.js b/character/rank.js index bb8850cc9..3040845c0 100644 --- a/character/rank.js +++ b/character/rank.js @@ -496,6 +496,8 @@ window.noname_character_rank={ 'ol_dongzhao', 'xin_jushou', 'sp_zhujun', + 're_guohuanghou', + 'tw_liuhong', ], bp:[ 'chess_diaochan', @@ -744,6 +746,7 @@ window.noname_character_rank={ 'sp_maojie', 'ol_xuhuang', 'ol_zhuling', + 'tw_zangba', ], b:[ 'diy_feishi', @@ -861,6 +864,7 @@ window.noname_character_rank={ 're_zhangzhang', 're_masu', 'old_madai', + 're_madai', 'wangyi', 'guanzhang', 'ns_chengpu', @@ -959,6 +963,9 @@ window.noname_character_rank={ 'wangtao', 'tianyu', 'fanjiangzhangda', + 'zhaoyan', + 'huojun', + 'tw_caocao', ], bm:[ 'diy_xizhenxihong', @@ -1483,6 +1490,8 @@ window.noname_character_rank={ 'zhongyan', 'kaisa', 'tw_zhaoxiang', + 'tw_caocao', + 'tw_liuhong', 'key_kano', 'key_haruko', 'key_akiko', @@ -1852,6 +1861,9 @@ window.noname_character_rank={ 'sp_zhujun', 'ol_chendeng', 'ol_xuhuang', + 're_guohuanghou', + 'tw_huojun', + 'zhaoyan', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 0b6f44dce..57d655b71 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -10,14 +10,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'], refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], - refresh_yijiang2:['old_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], + refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','xin_jushou'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi'], + refresh_yijiang6:['re_guohuanghou'], }, }, connect:true, character:{ + re_guohuanghou:['female','wei',3,['rejiaozhao','redanxin']], re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']], xin_jushou:['male','qun',3,['xinjianying','shibei']], ol_lusu:['male','wu',3,['olhaoshi','oldimeng']], @@ -48,7 +50,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_hanhaoshihuan:['male','wei',4,['reshenduan','reyonglve']], re_panzhangmazhong:['male','wu',4,['reduodao','reanjian']], re_wangyi:['female','wei',4,['zhenlie','miji']], - old_madai:['male','shu',4,['mashu','qianxi']], + re_madai:['male','shu',4,['mashu','reqianxi']], guanzhang:['male','shu',4,['fuhun']], xin_xusheng:['male','wu',4,['decadepojun']], re_taishici:['male','wu',4,['tianyi','hanzhan']], @@ -141,6 +143,286 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + rejiaozhao:{ + audio:2, + enable:'phaseUse', + group:'rejiaozhao_base', + mod:{ + targetEnabled:function(card,player,target){ + if(player==target&&card.storage&&card.storage.rejiaozhao) return false; + }, + }, + filter:function(event,player){ + return (player.hasMark('redanxin')&&player.countCards('h')&&player.getStorage('rejiaozhao_clear').length8-get.value(card), + onuse:function(result,player){ + player.addTempSkill('rejiaozhao_clear','phaseUseAfter'); + player.markAuto('rejiaozhao_clear',[get.type(result.card)]) + }, + } + if(player.countMark('redanxin')<2) next.viewAs.storage={rejiaozhao:true}; + return next; + }, + prompt:function(links){ + return '将一张手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + }, + }, + ai:{ + order:6, + result:{ + player:1 + } + }, + derivation:['rejiaozhao_lv2','rejiaozhao_lv3'], + subSkill:{ + clear:{onremove:true}, + base:{ + audio:'rejiaozhao', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(player.hasMark('redanxin')) return false; + return player.countCards('h')>0&&game.hasPlayer((current)=>current!=player); + }, + filterCard:true, + position:'h', + discard:false, + lose:false, + check:function(card){ + return 1/Math.max(1,_status.event.player.getUseValue(card)); + }, + prompt:'出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。', + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + var targets=game.filterPlayer(); + targets.remove(player); + targets.sort(function(a,b){ + return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b)); + }); + var distance=Math.max(1,get.distance(player,targets[0])); + for(var i=1;idistance){ + targets.splice(i);break; + } + } + player.chooseTarget('请选择【矫诏】的目标',true,function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('targets',targets); + 'step 2' + if(!result.bool){ + event.finish(); + return; + } + var target=result.targets[0]; + event.target=target; + var list=[]; + for(var i=0;i0?1:-1); + 'step 3' + var chosen=result.links[0][2]; + var nature=result.links[0][3]; + var fakecard={ + name:chosen, + storage:{rejiaozhao:true}, + }; + if(nature) fakecard.nature=nature; + event.target.showCards(game.createCard({ + name:chosen, + nature:nature, + suit:cards[0].suit, + number:cards[0].number, + }),get.translation(event.target)+'声明了'+get.translation(chosen)); + player.storage.rejiaozhao_viewas=fakecard; + cards[0].addGaintag('rejiaozhao') + player.addTempSkill('rejiaozhao_viewas','phaseUseEnd'); + }, + ai:{ + order:9, + result:{ + player:1, + } + }, + }, + backup:{audio:'rejiaozhao'}, + viewas:{ + enable:'phaseUse', + mod:{ + targetEnabled:function(card,player,target){ + if(player==target&&card.storage&&card.storage.rejiaozhao) return false; + }, + }, + filter:function(event,player){ + if(!player.storage.rejiaozhao_viewas) return false; + var cards=player.getCards('h',function(card){ + return card.hasGaintag('rejiaozhao'); + }); + if(!cards.length) return false; + if(!game.checkMod(cards[0],player,'unchanged','cardEnabled2',player)) return false; + var card=get.autoViewAs(player.storage.rejiaozhao_viewas,cards); + return event.filterCard(card,player,event); + }, + viewAs:function(cards,player){ + return player.storage.rejiaozhao_viewas; + }, + filterCard:function(card){ + return card.hasGaintag('rejiaozhao'); + }, + selectCard:-1, + position:'h', + popname:true, + prompt:function(){ + return '将“矫诏”牌当做'+get.translation(_status.event.player.storage.rejiaozhao_viewas)+'使用'; + }, + onremove:function(player){ + player.removeGaintag('rejiaozhao'); + delete player.storage.rejiaozhao_viewas; + }, + ai:{order:8}, + }, + }, + }, + redanxin:{ + audio:2, + trigger:{player:'damageEnd'}, + frequent:true, + content:function(){ + player.draw(); + if(player.countMark('redanxin')<2) player.addMark('redanxin',1,false); + }, + intro:{content:'当前升级等级。:Lv#'}, + }, + //马岱 + reqianxi:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + frequent:true, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqianxi'),'he')) player.chooseToDiscard('he',true); + else event.finish(); + 'step 2' + if(result.bool&&game.hasPlayer((current)=>current!=player&&get.distance(player,current)<=1)){ + var color=get.color(result.cards[0],player); + event.color=color; + color=get.translation(color); + player.chooseTarget(true,'选择【潜袭】的目标','令其本回合不能使用或打出'+color+'牌,且'+color+'防具失效,且回复体力时,你摸两张牌',function(card,player,target){ + return target!=player&&get.distance(player,target)<=1; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)*Math.sqrt(1+target.countCards('he')); + }); + } + else event.finish(); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.storage.reqianxi_effect=[event.color,player]; + target.addTempSkill('reqianxi_effect'); + } + }, + subSkill:{ + effect:{ + mark:true, + intro:{ + markcount:()=>0, + content:function(storage,player){ + var color=get.translation(storage[0]),source=get.translation(storage[1]); + return '本回合不能使用或打出'+color+'牌,且'+color+'防具失效,且回复体力时,'+source+'摸两张牌'; + }, + }, + charlotte:true, + onremove:true, + mod:{ + cardEnabled2:function(card,player){ + if(get.itemtype(card)=='card'&&get.color(card)==player.getStorage('reqianxi_effect')[0]) return false; + }, + }, + trigger:{player:'recoverEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.reqianxi_effect&&player.storage.reqianxi_effect[1].isIn(); + }, + content:function(){ + var target=player.storage.reqianxi_effect[1]; + target.logSkill('reqianxi',player); + target.draw(2); + }, + ai:{ + unequip2:true, + skillTagFilter:function(player){ + var evt=_status.event,color=player.getStorage('reqianxi_effect')[0]; + if(evt.name=='lose'&&evt.loseEquip){ + var card=evt.cards[evt.num]; + if(card&&get.subtype(card,false)=='equip2'&&get.color(card)==color) return true; + return false; + } + else{ + var equip=player.getEquip(2); + if(equip&&get.color(equip)==color) return true; + return false; + } + }, + }, + }, + }, + }, //徐晃 olduanliang:{ audio:2, @@ -1305,7 +1587,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chooseButton:{ check:function(button){ if(typeof button.link=='object') return 1; - var player=_status.event.player,num=player.storage.xinquanji.length-1; + var player=_status.event.player,num=player.getExpansions('xinquanji').length-1; if(button.link==1){ if(game.countPlayer(function(current){ return get.damageEffect(current,player,player)>0; @@ -2254,9 +2536,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gzpaiyi:{ audio:2, enable:'phaseUse', - usable:1, + usable:2, filter:function(event,player){ - return player.getExpansions('gzquanji').length>0&&!player.hasSkill('gzquanji2'); + return player.getExpansions('gzquanji').length>0; }, chooseButton:{ dialog:function(event,player){ @@ -2275,11 +2557,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:10, result:{ target:function(player,target){ - var num=player.getExpansions('gzquanji').length-1; - if(num==0){ - if(target.countCards('h')>player.countCards('h')) return get.damageEffect(target,player,target); - return 0; - } if(target!=player) return 0; if(player.needsToDiscard()&&!player.getEquip('zhuge')&&!player.hasSkill('new_paoxiao')) return 0; return 1; @@ -2294,10 +2571,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 0" var card=lib.skill.gzpaiyi_backup.card; player.loseToDiscardpile(card); - player.addTempSkill('gzquanji2'); "step 1" - var num=player.getExpansions('gzquanji').length; - if(num) target.draw(Math.min(7,num)); + target.draw(2); "step 2" if(target.countCards('h')>player.countCards('h')){ target.damage(); @@ -10713,7 +10988,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ decadepojun:'破军', decadepojun2:'破军', decadepojun_info:'当你使用【杀】指定目标后,你可以将其的至多X张牌置于其武将牌上(X为其体力值)。若这些牌中:有装备牌,你将这些装备牌中的一张置于弃牌堆;有锦囊牌,你摸一张牌。其于回合结束时获得其武将牌上的这些牌。', - old_madai:'界马岱', re_wangyi:'界王异', wangyi:'王异', guanzhang:'界关兴张苞', @@ -10807,7 +11081,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gzquanji_info:'当你受到伤害后或当你使用牌指定唯一目标并对其造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', gzpaiyi:'排异', gzpaiyi_backup:'排异', - gzpaiyi_info:'出牌阶段限一次。你可以移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量且至多为7),若其手牌数不小于你,则你对其造成1点伤害。', + gzpaiyi_info:'出牌阶段限两次。你可以移去一张“权”,然后选择一名角色并令其摸两张牌。若其手牌数大于你,则你对其造成1点伤害。', ol_zhurong:'界祝融', changbiao:'长标', changbiao_info:'出牌阶段限一次,你可以将任意张手牌当做【杀】使用(无距离限制)。若你因此【杀】对目标角色造成过伤害,则你于出牌阶段结束时摸X张牌(X为此【杀】对应的实体牌数量)。', @@ -10902,6 +11176,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olduanliang_info:'你可以将一张黑色非锦囊牌当做【兵粮寸断】使用。若你于当前回合内未造成过伤害,则你使用【兵粮寸断】无距离限制。', oljiezi:'截辎', oljiezi_info:'①当有角色跳过摸牌阶段后,你可选择一名角色。若该角色:手牌数为全场最少且没有“辎”,则其获得一枚“辎”。否则其摸一张牌。②一名角色的摸牌阶段结束时,若其有“辎”,则你移去其“辎”,然后令其获得一个额外的摸牌阶段。', + re_madai:'界马岱', + reqianxi:'潜袭', + reqianxi_info:'准备阶段开始时,你可摸一张牌,然后弃置一张牌并选择一名距离为1的其他角色。该角色于本回合内:{不能使用或打出与此牌颜色相同的牌,且其装备区内与此牌颜色相同的防具牌无效,且当其回复体力时,你摸两张牌。}', + re_guohuanghou:'界郭皇后', + rejiaozhao:'矫诏', + rejiaozhao_info:'出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。', + rejiaozhao_lv2:'矫诏·升级 Lv.1', + rejiaozhao_lv2_info:'出牌阶段限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。', + rejiaozhao_lv3:'矫诏·升级 Lv.2', + rejiaozhao_lv3_info:'出牌阶段每种类型各限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。', + redanxin:'殚心', + redanxin_info:'当你受到伤害后,你可以摸一张牌并升级〖矫诏〗。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', @@ -10913,6 +11199,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang3:'界限突破·将3', refresh_yijiang4:'界限突破·将4', refresh_yijiang5:'界限突破·将5', + refresh_yijiang6:'界限突破·原6', }, }; }); diff --git a/character/sp.js b/character/sp.js index d10db16a6..a5a3bb712 100755 --- a/character/sp.js +++ b/character/sp.js @@ -2527,7 +2527,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event._result={control:target.name1}; } - else event.goto(4); + else event.finish(); 'step 4' target.reinit(result.control,'guansuo'); if(_status.characterlist){ @@ -5250,7 +5250,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var num=Math.max(1,player.getDamagedHp()); player.chooseTarget('是否发动【誓仇】,令至多'+num+'名其他角色也成为此【杀】的目标?',[1,num],function(card,player,target){ - return target!=player&&!trigger.targets.contains(target)&&player.canUse({name:'sha'},target); + var evt=_status.event.getTrigger(); + return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target); }).ai=function(target){ return get.effect(target,{name:'sha'},_status.event.player); }; @@ -11085,19 +11086,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ recover:{ audio:'yishe', trigger:{ - player:['loseAfter','gainAfter'], + player:['loseAfter'], global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], }, filter:function(event,player){ + if(player.isHealthy()) return false; var evt=event.getl(player); if(!evt||!evt.xs||!evt.xs.length||player.getExpansions('yishe').length>0) return false; - for(var i in evt.gaintag_map){ - if(evt.gaintag_map[i].contains('yishe')) return true; + if(event.name=='lose'){ + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('yishe')) return true; + } + return false; } - return false; + return player.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('yishe')) return true; + } + return false; + }); }, forced:true, - popup:false, content:function(){ player.recover(); }, @@ -15884,6 +15894,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_dongzhao:['ol_dongzhao','tw_dongzhao'], mayunlu:['tw_mayunlu','mayunlu'], zhuling:['ol_zhuling','zhuling'], + zangba:['tw_zangba','zangba'], }, translate:{ "xinfu_lingren":"凌人", diff --git a/character/sp2.js b/character/sp2.js index 880edee41..4901a4f09 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + zhaoyan:['female','wu',3,['jinhui','qingman']], re_sunyi:['male','wu',5,['syjiqiao','syxiongyi']], re_pangdegong:['male','qun',3,['heqia','yinyi']], wangtao:['female','shu',3,['huguan','yaopei']], @@ -115,7 +116,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:["puyuan","guanlu","gexuan","xushao"], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"], - sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan'], + sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan','zhaoyan'], sp_huangjin:['liuhong','zhujun','re_hansui'], sp_qihuan:['liubian','zhaozhong','re_hejin'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], @@ -129,12 +130,153 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //赵嫣 + jinhui:{ + audio:2, + enable:'phaseUse', + usable:1, + content:function(){ + 'step 0' + var cards=[]; + while(cards.length<3){ + var card=get.cardPile2(function(card){ + for(var i of cards){ + if(i.name==card.name) return false; + } + var info=get.info(card,false); + if(info.ai&&info.ai.tag&&info.ai.tag.damage) return false; + return !info.notarget&&(info.toself||info.singleCard||!info.selectTarget||info.selectTarget==1); + }); + if(card) cards.push(card); + else break; + } + if(!cards.length) event.finish(); + else{ + player.showCards(cards,get.translation(player)+'发动了【锦绘】'); + event.cards=cards; + game.cardsGotoOrdering(cards); + if(game.hasPlayer((current)=>(current!=player))) player.chooseTarget('选择【锦绘】的目标',true,lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player,cards=_status.event.getParent().cards.slice(0); + var max_effect=0,max_effect_player=0; + for(var i of cards){ + var targetx=lib.skill.jinhui.getUsableTarget(i,target,player); + if(targetx){ + var effect2=get.effect(targetx,i,target,target); + var effect3=get.effect(targetx,i,target,player); + if(effect2>max_effect){ + max_effect=effect2; + max_effect_player=effect3; + } + } + } + return max_effect_player; + }); + else event.finish(); + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + var cards=cards.filter(function(card){ + return lib.skill.jinhui.getUsableTarget(card,target,player); + }); + if(cards.length){ + if(cards.length==1) event._result={bool:true,links:cards}; + else target.chooseButton(['选择按“锦绘”规则使用一张牌',cards],true).set('ai',function(button){ + var player=_status.event.player,target=_status.event.getParent().player,card=button.link; + var targetx=lib.skill.jinhui.getUsableTarget(card,player,target); + var effect=get.effect(targetx,card,player,player),cards=_status.event.getParent().cards.slice(0); + var effect2=0,effect3=0; + cards.remove(button.link); + for(var i of cards){ + var targetx=lib.skill.jinhui.getUsableTarget(i,target,player); + if(targetx){ + effect2+=get.effect(targetx,i,target,target); + effect3+=get.effect(targetx,i,target,player); + } + } + if(effect2>0) effect+=effect3; + return effect; + }); + } + else event.goto(3); + } + else event.finish(); + 'step 2' + if(result.bool){ + var card=result.links[0]; + event.cards.remove(card); + var targetx=lib.skill.jinhui.getUsableTarget(card,target,player); + target.useCard(card,targetx,false,'noai'); + } + 'step 3' + var cards=cards.filter(function(card){ + return lib.skill.jinhui.getUsableTarget(card,player,target); + }); + var effect=0; + for(var i of cards){ + effect+=get.effect(lib.skill.jinhui.getUsableTarget(i,player,target),i,player,player) + } + if(cards.length){ + player.chooseBool('是否按“锦绘规则使用以下牌?”',get.translation(cards)).set('goon',effect>0).set('ai',()=>_status.event.goon); + } + else event.finish(); + 'step 4' + if(!result.bool) event.finish(); + 'step 5' + for(var card of cards){ + var targetx=lib.skill.jinhui.getUsableTarget(card,player,target); + if(targetx){ + player.useCard(card,targetx,false,'noai'); + cards.remove(card); + if(cards.length) event.redo(); + break; + } + } + }, + getUsableTarget:function(card,player,target){ + var info=get.info(card,false); + if(info.toself) return player.canUse(card,player,false)?player:false; + return (target.isIn&&player.canUse(card,target,false))?target:false; + }, + ai:{ + order:5, + result:{player:1}, + }, + }, + qingman:{ + audio:2, + trigger:{global:'phaseEnd'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + if(!event.player.isAlive()) return false; + var num=player.countCards('h'); + if(num>=5) return false; + var num2=0; + for(var i=1;i<=5;i++){ + if(event.player.isEmpty(i)) num2++; + } + return num0){ + dialog.push('
红色牌
'); + dialog.push(reds); + } + if(blacks.length>0){ + dialog.push('
黑色牌
'); + dialog.push(blacks); + }; + player.chooseButton(dialog,true).set('ai',function(button){ var player=_status.event.player; var color=get.color(button.link),cards=player.getExpansions('syjiqiao'); var num1=cards.filter((card)=>get.color(card)==color),num2=cards.length-num1; @@ -1545,7 +1698,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target:1, }, }, - derivation:['releiji','rebiyue','new_retuxi','mingce','zhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'], + derivation:['releiji','rebiyue','new_retuxi','mingce','xinzhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'], subSkill:{ clear:{ onremove:function(player){ @@ -4112,31 +4265,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //牛金 recuorui:{ audio:'cuorui', - trigger:{player:'phaseBegin'}, + enable:'phaseUse', + limited:true, skillAnimation:true, animationColor:'thunder', filter:function(event,player){ - return player.phaseNumber==1&&player.hp>0&&game.hasPlayer(function(current){ + return player.hp>0&&game.hasPlayer(function(current){ return current!=player&¤t.countGainableCards(player,'h')>0; }) }, - direct:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countGainableCards(player,'h')>0; + }, + selectTarget:function(){ + return [1,_status.event.player.hp]; + }, content:function(){ - 'step 0' - player.chooseTarget([1,player.hp],get.prompt('recuorui'),'获得至多'+get.cnNumber(player.hp)+'名角色的各一张手牌',function(card,player,current){ - return current!=player&¤t.countGainableCards(player,'h')>0; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.hasSkill('tuntian')) return att/10; - return 1-att; - }); - 'step 1' - if(result.bool){ - var targets=result.targets; - player.logSkill('recuorui',targets); - targets.sortBySeat(); - player.gainMultiple(targets); - } + if(num==0) player.awakenSkill('recuorui'); + player.gainPlayerCard(target,true,'h'); }, }, reliewei:{ @@ -4144,13 +4290,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'dying'}, frequent:true, filter:function(event,player){ - var evt=event.getParent(); - return evt&&evt.name=='damage'&&evt.source==player&&player.getHistory('custom',function(evt){ - return evt&&evt.reliewei==true; - }).length0); + if(player==_status.currentPhase||player.countCards('h')) return false; + return event.card.name=='sha'||get.type(event.card,false)=='trick'; }, content:function(){ player.draw(2); @@ -10269,7 +10410,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //管辂和葛玄 gxlianhua:{ - derivation:['reyingzi','reguanxing','zhiyan','gongxin'], + derivation:['reyingzi','reguanxing','xinzhiyan','gongxin'], audio:2, init:function(player,skill){ if(!player.storage[skill]) player.storage[skill]={ @@ -10324,7 +10465,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else if(redcurrent!=player).sortBySeat()); + player.addTempSkill('twlingfa_sha','roundStart'); + break; + case 2: + player.logSkill('twlingfa',game.filterPlayer((current)=>current!=player).sortBySeat()); + player.addTempSkill('twlingfa_tao','roundStart'); + break; + default: + player.logSkill('twlingfa'); + player.removeSkill('twlingfa'); + game.log(player,'失去了技能','#g【令法】'); + player.addSkillLog('twzhian'); + break; + } + } + }, + subSkill:{ + sha:{ + audio:'twlingfa', + trigger:{global:'useCard'}, + charlotte:true, + forced:true, + filter:function(event,player){ + return player!=event.player&&event.card.name=='sha'&&event.player.countCards('he')>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + game.delayx(); + trigger.player.chooseToDiscard('he','令法:弃置一张牌,或受到来自'+get.translation(player)+'的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){ + if(!_status.event.goon) return 0; + return 8-get.value(card); + }); + 'step 1' + if(!result.bool){ + trigger.player.damage(); + } + }, + mark:true, + marktext:'', + intro:{content:'其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。'}, + }, + tao:{ + audio:'twlingfa', + trigger:{global:'useCard'}, + charlotte:true, + forced:true, + filter:function(event,player){ + return player!=event.player&&event.card.name=='tao'&&event.player.countCards('he')>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + game.delayx(); + trigger.player.chooseCard('he','令法:交给'+get.translation(player)+'一张牌,否则受到来自其的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){ + if(!_status.event.goon) return 0; + return 8-get.value(card); + }); + 'step 1' + if(!result.bool){ + trigger.player.damage(); + } + else player.gain(result.cards,trigger.player,'giveAuto'); + }, + mark:true, + marktext:'', + intro:{content:'其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。'}, + }, + }, + derivation:'twzhian', + }, + twzhian:{ + audio:2, + usable:1, + trigger:{global:'useCardAfter'}, + direct:true, + filter:function(event,player){ + var type=get.type(event.card); + if(type!='delay'&&type!='equip') return false; + if(event.cards.length!=1) return false; + var position=get.position(event.cards[0]); + if(position=='e'||position=='j') return true; + return event.player.isIn(); + }, + content:function(){ + 'step 0' + var str=get.translation(trigger.cards[0]),owner=get.owner(trigger.cards[0]); + var choiceList=[ + '弃置'+(owner?(get.translation(owner)+'区域内的'):'')+str, + '弃置一张手牌并获得'+str, + '对'+get.translation(trigger.player)+'造成1点伤害', + ]; + var choices=[]; + if(owner&&lib.filter.canBeDiscarded(card,player,owner)) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(owner&&player.hasCard(function(card){ + return lib.filter.cardDiscardable(card,player,'twzhian'); + },'h')&&lib.filter.canBeGained(card,player,owner)) choices.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(trigger.player.isIn()) choices.push('选项三'); + else choiceList[2]=''+choiceList[2]+''; + player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('twzhian')).set('ai',function(){ + var player=_status.event.player,choices=_status.event.controls.slice(0); + var card=_status.event.getTrigger().cards[0],owner=get.owner(card); + var getEffect=function(choice){ + if(choice=='cancel2') return 0.1; + if(choice=='选项三'){ + return get.damageEffect(_status.event.getTrigger().player,player,player); + } + var result; + if(get.position(card)=='j'){ + result=-get.effect(player,{ + name:card.viewAs||card.name, + cards:[card], + },player,player)*get.sgn(get.attitude(player,owner)); + } + else result=-(get.value(card,owner)-0.01)*get.sgn(get.attitude(player,owner)); + if(choice=='选项一') return result; + if(player.hasCard(function(cardx){ + return lib.filter.cardDiscardable(cardx,player,'twzhian')&&get.value(cardx,player)0) event.count=num; + else if(targets.length>0) event.redo(); + else event.finish(); + } + else if(targets.length>0) event.redo(); + else event.finish(); + 'step 2' + event.count--; + player.chooseBool(get.prompt('twyujue',target),'可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。').set('ai',function(){ + var evt=_status.event.getParent(); + return get.attitude(evt.player,evt.target)>0; + }); + 'step 3' + if(result.bool){ + player.logSkill('twyujue',target); + var list=[0,1]; + if(target.hasSkill('twyujue_effect0')) list.remove(0); + if(target.hasSkill('twyujue_effect1')) list.remove(1); + if(!list.length) event.goto(6); + else if(list.length==1) event._result={index:list[0]}; + else target.chooseControl().set('choiceList',['弃置攻击范围内一名角色的一张牌','下一次使用牌时,从牌堆中获得一张同类别的牌']).set('ai',function(){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0; + })) return 0; + return 1; + }); + } + else event.goto(6); + 'step 4' + target.addTempSkill('twyujue_effect'+result.index); + if(result.index==0){ + if(game.hasPlayer(function(current){ + return target.inRange(current)&¤t.countDiscardableCards(target,'he')>0; + })){ + target.chooseTarget('弃置攻击范围内一名角色的一张牌',true,function(card,player,target){ + return player.inRange(target)&&target.countDiscardableCards(player,'he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player) + }); + } + else event.goto(6); + } + else event.goto(6); + 'step 5' + if(result.bool){ + var target2=result.targets[0]; + target.line(target2,'green'); + target.discardPlayerCard(target2,'he',true); + } + 'step 6' + game.delayx(); + if(event.count>0) event.goto(2); + else if(targets.length) event.goto(1); + }, + subSkill:{ + clear:{ + onremove:true, + }, + effect0:{charlotte:true}, + effect1:{ + charlotte:true, + trigger:{player:'useCard'}, + usable:1, + forced:true, + popup:false, + content:function(){ + player.unmarkSkill('twyujue_effect1'); + var type2=get.type2(trigger.card,false); + var card=get.cardPile2(function(card){ + return get.type2(card,false)==type2; + }); + if(card) trigger.player.gain(card,'gain2'); + }, + mark:true, + marktext:'爵', + intro:{content:'使用下一张牌时,从牌堆中获得一张类型相同的牌'}, + }, + }, + }, + twyujue_give:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + if(!player.countCards('he')) return false; + var targets=game.filterPlayer(function(current){ + return current!=player&¤t.hasSkill('twyujue'); + }); + if(!targets.length) return false; + for(var target of targets){ + var num=2; + if(player.group=='qun'&&target.hasZhuSkill('twfengqi',player)) num=4; + if(target.countMark('twyujue_clear')=Math.max(1,ui.selected.cards.length); + }, + selectTarget:function(){ + var player=_status.event.player; + var targets=game.filterPlayer(function(current){ + return current!=player&¤t.hasSkill('twyujue'); + }); + return targets.length>1?1:-1; + }, + complexSelect:true, + prompt:function(){ + var player=_status.event.player; + var targets=game.filterPlayer(function(current){ + return current!=player&¤t.hasSkill('twyujue'); + }); + return '将任意张牌交给'+get.translation(targets)+(targets.length>1?'中的一人':''); + }, + position:'he', + discard:false, + lose:false, + delay:false, + check:function(card){ + if(ui.selected.cards.length) return 0; + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return lib.skill.twyujue_give.filterTarget(null,player,current)&&get.attitude(player,current)>0; + })){ + var val=get.value(card); + if(val<=0&&get.position(card)=='e') return 100-val; + if(!player.hasSkill('twyujue_effect1')&&player.hasCard(function(cardx){ + return cardx!=card&&player.getUseValue(cardx,null,true)>0; + },'hs')) return 6-get.value(card); + if(!player.hasSkill('twyujue_effect0')&&game.hasPlayer(function(current){ + return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0; + })) return 5.5-get.value(card); + } + return 0; + }, + content:function(){ + game.trySkillAudio('twyujue',target); + target.gain(cards,player,'give'); + target.addTempSkill('twyujue_clear'); + target.addMark('twyujue_clear',cards.length,false); + }, + ai:{ + order:10, + result:{target:1}, + }, + }, + twgezhi:{ + audio:2, + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + if(!player.countCards('h')) return false; + var evt=event.getParent('phaseUse'); + if(!evt||evt.player!=player) return false; + var type=get.type2(event.card,false); + return !player.hasHistory('useCard',function(evtx){ + return evtx!=event&&get.type2(evtx.card,false)==type&&evtx.getParent('phaseUse')==evt; + },event); + }, + content:function(){ + 'step 0' + if(!event.isMine()&&!event.isOnline()) game.delayx(); + player.chooseCard('是否发动【革制】重铸一张牌?').set('ai',function(card){ + return 5.5-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('twgezhi'); + player.loseToDiscardpile(result.cards); + player.draw(); + } + }, + group:'twgezhi_buff', + subSkill:{ + buff:{ + audio:'twgezhi', + trigger:{player:'phaseUseEnd'}, + direct:true, + filter:function(event,player){ + return player.getHistory('lose',function(evt){ + return evt.getParent(2).name=='twgezhi'&&evt.getParent('phaseUse')==event; + }).length>1; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twgezhi'),'你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',function(card,player,target){ + return !target.hasSkill('twgezhi_选项一')||!target.hasSkill('twgezhi_选项二')||!target.hasSkill('twgezhi_选项三'); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twgezhi',target); + var list=[]; + for(var i=1;i<=3;i++){ + var str='选项'+get.cnNumber(i,true); + if(!target.hasSkill('twgezhi_'+str)) list.push(str); + } + if(list.length==1) event._result={control:list[0]}; + else target.chooseControl(list).set('choiceList',['令自己的攻击范围+2','令自己的手牌上限+2','令自己的体力上限+1']).set('ai',function(){ + var player=_status.event.player,controls=_status.event.controls; + if(controls.contains('选项一')&&game.hasPlayer(function(current){ + return (get.realAttitude||get.attitude)(player,current)<0&&get.distance(player,current,'attack')>1; + })) return '选项一'; + if(controls.contains('选项二')&&player.needsToDiscard()) return '选项二'; + if(controls.contains('选项三')) return '选项三'; + return controls.randomGet(); + }); + } + else{ + event._triggered=null; + event.finish(); + } + 'step 2' + target.addSkill('twgezhi_'+result.control); + if(result.control=='选项三') target.gainMaxHp(); + 'step 3' + game.delayx(); + }, + }, + 选项一:{ + charlotte:true, + mod:{ + attackFrom:function(from,to,distance){ + return distance-2; + }, + }, + mark:true, + marktext:' +2 ', + intro:{content:'攻击范围+2'}, + }, + 选项二:{ + charlotte:true, + mod:{ + maxHandcard:function(player,num){ + return num+2; + }, + }, + mark:true, + marktext:' +2 ', + intro:{content:'手牌上限+2'}, + }, + 选项三:{ + charlotte:true, + mark:true, + marktext:' +1 ', + intro:{content:'体力上限+1'}, + }, + }, + }, + twfengqi:{ + audio:2, + zhuSkill:true, + trigger:{player:'twgezhi_buffAfter'}, + direct:true, + filter:function(event,player){ + if(!event.target||!event.target.isIn()||!player.hasZhuSkill('twfengqi',event.target)) return false; + var skills=event.target.getStockSkills(true,true); + for(var i of skills){ + var info=get.info(i); + if(info.zhuSkill&&!event.target.hasZhuSkill(i)) return true; + } + return false; + }, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + event.target=trigger.target; + event.target.chooseBool(get.prompt('twfengqi'),'激活武将牌上的所有主公技'); + 'step 1' + if(result.bool){ + target.logSkill('twfengqi',player); + var skills=target.getStockSkills(true,true).filter(function(i){ + var info=get.info(i); + if(info.zhuSkill&&!target.hasZhuSkill(i)) return true; + }); + target.markAuto('zhuSkill_twfengqi',skills); + game.log(target,'激活了武将牌上的主公技') + } + }, + }, + twsidai:{ + audio:2, + enable:'phaseUse', + usable:1, + locked:false, + skillAnimation:true, + animationColor:'fire', + filter:function(event,player){ + var cards=player.getCards('h',{type:'basic'}); + if(!cards.length) return false; + for(var i of cards){ + if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false; + } + return event.filterCard(get.autoViewAs({name:'sha',storage:{twsidai:true}},cards),player,event); + }, + viewAs:{name:'sha',storage:{twsidai:true}}, + filterCard:{type:'basic'}, + selectCard:-1, + check:()=>1, + onuse:function(result,player){ + player.awakenSkill('twsidai'); + player.addTempSkill('twsidai_effect'); + }, + ai:{ + order:2.9, + result:{ + target:function(player,target){ + var cards=ui.selected.cards.slice(0); + var names=[]; + for(var i of cards) names.add(i.name); + if(names.length=0) return -20; + return lib.card.sha.ai.result.target.apply(this,arguments); + }, + }, + }, + mod:{ + cardUsable:function(card){ + if(card.storage&&card.storage.twsidai) return Infinity; + }, + targetInRange:function(card){ + if(card.storage&&card.storage.twsidai) return true; + }, + }, + subSkill:{ + effect:{ + charlotte:true, + trigger:{source:'damageBegin1'}, + filter:function(event,player){ + if(!event.card||!event.card.storage||!event.card.storage.twsidai||event.getParent().type!='card') return false; + for(var i of event.cards){ + if(i.name=='jiu') return true; + } + return false; + }, + forced:true, + popup:false, + content:function(){ + trigger.num*=2; + game.log(trigger.card,'的伤害值','#y×2'); + }, + group:['twsidai_tao','twsidai_shan'], + }, + tao:{ + trigger:{source:'damageSource'}, + filter:function(event,player){ + if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.player.isIn()) return false; + for(var i of event.cards){ + if(i.name=='tao') return true; + } + return false; + }, + forced:true, + popup:false, + content:function(){ + trigger.player.loseMaxHp(); + }, + }, + shan:{ + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.target.isIn()) return false; + for(var i of event.cards){ + if(i.name=='shan') return true; + } + return false; + }, + forced:true, + popup:false, + content:function(){ + 'step 0' + trigger.target.chooseToDiscard('h',{type:'basic'},'弃置一张基本牌,否则不能响应'+get.translation(trigger.card)).set('ai',function(card){ + var player=_status.event.player; + if(player.hasCard('hs',function(cardx){ + return cardx!=card&&get.name(cardx,player)=='shan'; + })) return 12-get.value(card); + return 0; + }); + 'step 1' + if(!result.bool) trigger.directHit.add(trigger.target); + }, + }, + }, + }, + twjieyu:{ + audio:2, + trigger:{player:['phaseJieshuBegin','damageEnd']}, + round:1, + filter:function(event,player){ + if(event.name!='phaseJieshu'){ + var history=player.getHistory('damage'); + for(var i of history){ + if(i==event) break; + return false; + } + var all=player.actionHistory; + for(var i=all.length-2;i>=0;i--){ + if(all[i].damage.length) return false; + if(all[i].isRound) break; + } + } + return player.countCards('h')>0&&!player.hasCard(function(card){ + return !lib.filter.cardDiscardable(card,player,'twjieyu'); + },'h') + }, + check:function(event,player){ + var cards=[],names=[]; + for(var i=0;ieffect1; + }, + content:function(){ + var targets=lib.skill.twhengjiang.logTarget(trigger,player); + trigger.targets.length=0; + trigger.targets.addArray(targets); + trigger.getParent().triggeredTargets1.length=0; + trigger.getParent().twhengjiang_buffed=true; + player.addTempSkill('twhengjiang2','phaseUseAfter'); + }, + }, + twhengjiang2:{ + charlotte:true, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.twhengjiang_buffed&&game.hasPlayer2(function(current){ + return current!=player&&(current.hasHistory('useCard',function(evt){ + return evt.respondTo&&evt.respondTo[1]==event.card; + })||current.hasHistory('respond',function(evt){ + return evt.respondTo&&evt.respondTo[1]==event.card; + })) + }); + }, + content:function(){ + player.draw(game.countPlayer2(function(current){ + return current!=player&&(current.hasHistory('useCard',function(evt){ + return evt.respondTo&&evt.respondTo[1]==trigger.card; + })||current.hasHistory('respond',function(evt){ + return evt.respondTo&&evt.respondTo[1]==trigger.card; + })) + })); + }, + }, twyuanhu:{ audio:'yuanhu', enable:'phaseUse', @@ -2051,6 +2792,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + characterReplace:{ + tw_caocao:['tw_caocao','yj_caocao'], + }, dynamicTranslate:{ twfengpo:function(player){ if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。'; @@ -2162,7 +2906,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyuanhu_info:'出牌阶段限一次。你可将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌,其回复1点体力。若其的体力值或手牌数不大于你,则你可摸一张牌,且可以于本回合的结束阶段再发动一次〖援护〗。', twjuezhu:'决助', twjuezhu_info:'限定技。准备阶段,你可废除一个坐骑栏,令一名角色获得〖飞影〗并废除判定区。该角色死亡后,你恢复以此法废除的装备栏。', - tw_mobile:'移动版', + tw_zangba:'TW臧霸', + twhanyu:'捍御', + twhanyu_info:'锁定技。游戏开始时,你获得牌堆中的基本牌,锦囊牌,装备牌各一张。', + twhengjiang:'横江', + twhengjiang_info:'出牌阶段限一次,当你使用基本牌或普通锦囊牌指定唯一目标后,你可将此牌的目标改为攻击范围内的所有合法目标,然后你于此牌结算结束后摸X张牌(X为因响应此牌而使用或打出过牌的角色数)。', + tw_huojun:'霍峻', + twsidai:'伺怠', + twsidai_info:'限定技。出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用(无距离和次数限制)。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限;包含【酒】,则当目标角色受到此牌的伤害时,此伤害×2。', + twjieyu:'竭御', + twjieyu_info:'每轮限一次。结束阶段开始时,或当你于一轮内第一次受到伤害后,你可以弃置所有手牌,然后从弃牌堆中获得不同牌名的基本牌各一张。', + tw_liuhong:'TW刘宏', + twyujue:'鬻爵', + twyujue_give:'鬻爵', + twyujue_info:'①其他角色的出牌阶段内,可以交给你任意张牌(每阶段上限为两张)。②当你于回合外获得其他角色的一张牌后,你可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。', + twgezhi:'革制', + twgezhi_info:'①当你于出牌阶段内首次使用某种类别的牌时,你可以重铸一张手牌。②出牌阶段结束时,若你本阶段内因〖革制①〗失去过至少两张牌,则你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。', + twfengqi:'烽起', + twfengqi_info:'主公技,锁定技。①其他群势力角色发动〖鬻爵①〗时,将每阶段上限改为四张。②以其他角色为目标的〖革制②〗结算结束后,目标角色可以激活其武将牌上的主公技。', + tw_caocao:'TW曹操', + twlingfa:'令法', + twlingfa_info:'①第一轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。②第二轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。③第三轮游戏开始时,你失去〖令法〗并获得〖治暗〗。', + twzhian:'治暗', + twzhian_info:'每回合限一次。一名角色使用装备牌或延时锦囊牌后,你可选择:⒈弃置位于场上的此牌。⒉弃置一张手牌并获得位于场上的此牌。⒊对其造成1点伤害。', + + tw_mobile:'移动版·海外服', + tw_mobile2:'海外服异构', tw_yijiang:'一将成名TW', tw_english:'英文版', } diff --git a/character/yijiang.js b/character/yijiang.js index 58587d7f8..914952c4e 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ yijiang:{ yijiang_2011:['caozhi','yujin','zhangchunhua','xin_fazheng','xin_masu','xin_xushu','xusheng','lingtong','wuguotai','chengong','gaoshun'], - yijiang_2012:['old_wangyi','xunyou','zhonghui','madai','liaohua','old_guanzhang','bulianshi','handang','chengpu','liubiao','old_huaxiong','caozhang'], + yijiang_2012:['old_wangyi','xunyou','zhonghui','old_madai','liaohua','old_guanzhang','bulianshi','handang','chengpu','liubiao','old_huaxiong','caozhang'], yijiang_2013:['manchong','guohuai','caochong','guanping','liufeng','jianyong','yufan','panzhangmazhong','zhuran','xin_liru','fuhuanghou'], yijiang_2014:['hanhaoshihuan','chenqun','caozhen','zhangsong','wuyi','zhoucang','zhuhuan','guyong','sunluban','yj_jushou','caifuren'], yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'], @@ -39,7 +39,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fuhuanghou:['female','qun',3,['qiuyuan','zhuikong']], zhonghui:['male','wei',4,['quanji','zili']], jianyong:['male','shu',3,['qiaoshui','jyzongshi']], - madai:['male','shu',4,['mashu','oldqianxi']], + old_madai:['male','shu',4,['mashu','qianxi']], liufeng:['male','shu',4,['xiansi']], manchong:['male','wei',3,['junxing','yuce']], chenqun:['male','wei',3,['pindi','faen']], @@ -963,14 +963,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ unique:true, limited:true, enable:'chooseToUse', - init:function(player){ - player.storage.xinfuli=false; - }, mark:true, filter:function(event,player){ if(event.type!='dying') return false; if(player!=event.dying) return false; - if(player.storage.xinfuli) return false; return true; }, content:function(){ @@ -4406,7 +4402,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:button.link[2], nature:button.link[3], storage:{ - nowuxie:true, jiaozhao:player, } }; @@ -4417,7 +4412,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var nature=result.links[0][3]; var fakecard={ name:chosen, - storage:{nowuxie:true,jiaozhao:player}, + storage:{jiaozhao:player}, }; if(nature) fakecard.nature=nature; event.target.showCards(game.createCard({ @@ -9298,7 +9293,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ if(player!=target) return 0; - if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.storage.quanji.length)) return 1; + if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.getExpansions('quanji').length)) return 1; return 0; } }, @@ -9335,10 +9330,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ limited:true, enable:'phaseUse', filter:function(event,player){ - return !player.storage.xianzhou&&player.countCards('e')>0; - }, - init:function(player){ - player.storage.xianzhou=false; + return player.countCards('e')>0; }, filterTarget:function(card,player,target){ return player!=target; @@ -9351,7 +9343,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=player.getCards('e'); target.gain(cards,player,'give'); event.num=cards.length; - player.storage.xianzhou=true; game.delay(); "step 1" target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+ @@ -12071,7 +12062,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangyi:['wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], guanzhang:['guanzhang','old_guanzhang'], - madai:['old_madai','madai'], + madai:['re_madai','old_madai','madai'], liaohua:['xin_liaohua','re_liaohua','liaohua'], bulianshi:['re_bulianshi','bulianshi','old_bulianshi'], handang:['xin_handang','re_handang','handang'], @@ -12140,7 +12131,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangsong:'张松', guyong:'顾雍', jianyong:'简雍', - madai:'马岱', + old_madai:'马岱', + gz_madai:'马岱', xin_xushu:'徐庶', manchong:'满宠', liufeng:'刘封', diff --git a/character/yingbian.js b/character/yingbian.js index 72127e608..1d869d5d0 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -335,10 +335,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target.isIn()&&player.canUse(card,target,null,true)){ player.useCard(card,target,cards); } - else event.finish(); 'step 1' player.removeSkill('maihuo_effect'); }, + marktext:'祸', intro:{ content:'expansion', markcount:'expansion', @@ -354,11 +354,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return event.player.hasSkill('maihuo_effect')&&event.player.storage.maihuo_effect&&event.player.storage.maihuo_effect.length>0; + return event.player.hasSkill('maihuo_effect')&&event.player.getExpansions('maihuo_effect').length>0; }, content:function(){ trigger.player.removeSkill('maihuo_effect'); - game.delayx(); }, }, }, @@ -2915,7 +2914,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanyi:'婉嫕', wanyi_info:'每回合每项限一次。出牌阶段,你可以将一张具有应变效果的牌当做【逐近弃远】/【出其不意】/【水淹七军】/【洞烛先机】使用。', maihuo:'埋祸', - maihuo_info:'①当你成为其他角色使用【杀】的目标后,若此【杀】不为转化牌且有对应的实体牌且其武将牌上没有“祸”且你是此牌的唯一目标,则你可以令此牌对你无效,并将此【杀】置于其武将牌上,称为“祸”。②一名其他角色的出牌阶段开始时,若其武将牌上有“祸”,则其对你使用此“祸”(有距离限制且计入次数限制)。③当你对有“祸”的其他角色造成伤害后,你移去其“祸”。', + maihuo_info:'①当你成为其他角色使用【杀】的目标后,若此【杀】不为转化牌且有对应的实体牌且其武将牌上没有“祸”且你是此牌的唯一目标,则你可以令此牌对你无效,并将此【杀】置于其武将牌上,称为“祸”。②一名其他角色的出牌阶段开始时,若其武将牌上有“祸”,则其对你使用此“祸”(有距离限制且计入次数限制,若你不是此牌的合法目标,则改为将此“祸”置入弃牌堆)。③当你对有“祸”的其他角色造成伤害后,你移去其“祸”。', xinchang:'辛敞', canmou:'参谋', canmou_info:'一名角色使用普通锦囊牌指定第一个目标时,若其手牌数为全场唯一最多,则你可以为此牌增加一个额外目标。', diff --git a/game/asset.js b/game/asset.js index 12e4a5d50..510809066 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.113.2', + 'v1.9.113.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -851,6 +851,9 @@ window.noname_asset_list=[ 'audio/die/ol_chendeng.mp3', 'audio/die/re_sunyi.mp3', 'audio/die/tianyu.mp3', + 'audio/die/re_guohuanghou.mp3', + 'audio/die/tw_caocao.mp3', + 'audio/die/tw_liuhong.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3878,6 +3881,18 @@ window.noname_asset_list=[ 'audio/skill/yuanchou2.mp3', 'audio/skill/zhuitao1.mp3', 'audio/skill/zhuitao2.mp3', + 'audio/skill/redanxin1.mp3', + 'audio/skill/redanxin2.mp3', + 'audio/skill/rejiaozhao1.mp3', + 'audio/skill/rejiaozhao2.mp3', + 'audio/skill/twgezhi1.mp3', + 'audio/skill/twgezhi2.mp3', + 'audio/skill/twlingfa1.mp3', + 'audio/skill/twlingfa2.mp3', + 'audio/skill/twyujue1.mp3', + 'audio/skill/twyujue2.mp3', + 'audio/skill/twzhian1.mp3', + 'audio/skill/twzhian2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4916,6 +4931,14 @@ window.noname_asset_list=[ 'image/character/re_sunyi.jpg', 'image/character/tianyu.jpg', 'image/character/fanjiangzhangda.jpg', + 'image/character/diy_hanlong.jpg', + 'image/character/re_guohuanghou.jpg', + 'image/character/re_madai.jpg', + 'image/character/tw_caocao.jpg', + 'image/character/tw_huojun.jpg', + 'image/character/tw_liuhong.jpg', + 'image/character/tw_zangba.jpg', + 'image/character/zhaoyan.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 9ce25a2f7..b42b9d065 100644 --- a/game/game.js +++ b/game/game.js @@ -11422,6 +11422,37 @@ 'step 2' game.delay(); }, + addExtraTarget:function(){ + "step 0" + event.num=0; + "step 1" + var target=targets[num],info=get.info(card); + if(target==event.target&&event.addedTarget){ + event.addedTargets[num]=event.addedTarget; + event._result={bool:false}; + } + else if(game.hasPlayer(function(current){ + return info.filterAddedTarget(card,player,current,target) + })){ + var next=player.chooseTarget(get.translation(event.card)+':选择'+get.translation(targets[num])+'对应的指向目标',function(card,player,target){ + var card=get.card(),info=get.info(card); + return info.filterAddedTarget(card,player,target,_status.event.preTarget) + },true); + next.set('_get_card',card); + next.set('preTarget',targets[num]); + } + else{ + event.addedTargets[num]=false; + event._result={bool:false}; + } + "step 2" + if(result.bool){ + event.addedTargets[num]=result.targets[0]; + player.line2([targets[num],result.targets[0]]); + } + event.num++; + if(event.num0 + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i=0;i