diff --git a/card/extra.js b/card/extra.js index 21fdfcb20..528e09422 100644 --- a/card/extra.js +++ b/card/extra.js @@ -330,6 +330,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(get.suit(card)=='club') return 0; return -3; }, + judge2:function(result){ + if(result.bool==false) return true; + return false; + }, effect:function(){ if(result.bool==false){ if(get.is.changban()) player.addTempSkill('bingliang_changban'); diff --git a/card/standard.js b/card/standard.js index 98844990b..8cb5c8f6d 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1509,6 +1509,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(get.suit(card)=='heart') return 0; return -3; }, + judge2:function(result){ + if(result.bool==false) return true; + return false; + }, effect:function(){ if(result.bool==false){ player.skip('phaseUse'); @@ -1555,6 +1559,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(get.suit(card)=='spade'&&get.number(card)>1&&get.number(card)<10) return -6; return 0; }, + judge2:function(result){ + if(result.bool==false) return true; + return false; + }, effect:function(){ if(result.bool==false){ player.damage(3,'thunder','nosource'); @@ -2135,7 +2143,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" trigger.bagua_skill=true; - player.judge('bagua',function(card){return (get.color(card)=='red')?1.5:-0.5}); + player.judge('bagua',function(card){return (get.color(card)=='red')?1.5:-0.5}).judge2=function(result){ + return result.bool; + }; "step 1" if(result.judge>0){ trigger.untrigger(); @@ -2615,7 +2625,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ juedou_info:'出牌阶段,对一名其他角色使用。由其开始,其与你轮流打出一张【杀】,直到其中一方未打出【杀】为止。未打出【杀】的一方受到另一方对其造成的1点伤害。', shunshou_info:'出牌阶段,对距离为1且区域里有牌的一名其他角色使用。你获得其区域里的一张牌。', guohe_info:'出牌阶段,对区域里有牌的一名其他角色使用。你弃置其区域里的一张牌。', - jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。', + jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。
这是一种十分含蓄的计谋。', wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。', lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。', shandian_info:'出牌阶段,对自己使用。若判定结果为黑桃2~9,则目标角色受到3点雷电伤害。若判定不为黑桃2~9,将之移动到下家的判定区里。', diff --git a/card/yingbian.js b/card/yingbian.js index 2e3472bcc..008a04458 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -472,7 +472,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ //function(card,player,target){ // return !target.isLinked(); //}, - '是否发动【太公阴符】横置一名角色?').set('ai',function(target){ + '是否发动【太公阴符】横置或重置一名角色?').set('ai',function(target){ return get.effect(target,{name:'tiesuo'},_status.event.player,_status.event.player); }); 'step 1' @@ -1001,7 +1001,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ help:{ '应变篇':('
应变机制
'), + '
  • 应变条件
    '), }, } }); diff --git a/character/diy.js b/character/diy.js index 6f4a32c0d..899d7ac11 100755 --- a/character/diy.js +++ b/character/diy.js @@ -3012,7 +3012,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addTempSkill('shiroha_guying_temp'); player.judge(function(card){ return (get.color(card)==(_status.event.getParent('shiroha_guying').num>0?'black':'red'))?2:0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; } else event.finish(); 'step 2' @@ -6136,7 +6138,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(function(card){ return get.suit(card)=='spade'?2:-2; - }); + }).judge2=function(result){ + return result.bool; + }; 'step 1' if(result.bool){ player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害').set('ai',function(target){ @@ -7097,7 +7101,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(function(card){ return get.color(card)=='red'?5:0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; 'step 1' if(result.bool){ player.line(trigger.getParent().playerfalse); @@ -8137,6 +8143,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ animationColor:'key', content:function(){ 'step 0' + player.awakenSkill('umi_qihuan'); player.reinit('key_umi','key_umi2'); player.recover(game.countGroup()||1); if(!game.dead.length) event.finish(); @@ -14998,7 +15005,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_doruji:'多鲁基', key_yuiko:'来谷唯湖', key_riki:'直枝理树'/*+'子'*/, - key_hisako:'久子', + key_hisako:'高桥久子', key_hinata:'日向秀树', key_noda:'野田', key_tomoya:'冈崎朋也', diff --git a/character/extra.js b/character/extra.js index cd66c6ec9..c192cfba2 100755 --- a/character/extra.js +++ b/character/extra.js @@ -278,7 +278,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(result){ if(get.color(result)=='red') return 2; return -1; - }); + }).judge2=function(result){ + return result.bool; + }; 'step 1' if(result.bool){ trigger.targets.remove(player); @@ -428,7 +430,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; }).set('callback',function(){ event.getParent().orderingCards.remove(event.judgeResult.card); - }); + }).judge2=function(result){ + return result.bool?true:false; + }; 'step 2' event.cards.push(result.card); if(result.bool&&player.maxHp<10){ @@ -1522,7 +1526,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.judge(function(card){ if(['tao','taoyuan'].contains(card.name)) return 10; return -10; - }); + }).judge2=function(result){ + return result.bool==false?true:false; + }; "step 3" if(!result.bool){ lib.element.player.die.apply(target,[]); diff --git a/character/gujian.js b/character/gujian.js index 3d9545631..17ed6e7a2 100644 --- a/character/gujian.js +++ b/character/gujian.js @@ -983,8 +983,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:['useCard','respond']}, forced:true, filter:function(event,player){ - if(get.is.converted(event)) return false; - if(event.card.zhenying_link) return false; + if(!event.card.isCard) return false; + if(event.cards[0]&&event.cards[0].zhenying_link) return false; if(get.color(event.card)!='black') return false; if(['delay','equip'].contains(get.type(event.card))) return false; return true; diff --git a/character/mobile.js b/character/mobile.js index 3d47d6032..c9b98fb2e 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -15,14 +15,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin"], - mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan"], + mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou"], - mobile_yijiang4:[,"xin_zhoucang","xin_caifuren"], + mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong"], mobile_yijiang67:["re_jikang"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']], + re_zhonghui:['male','wei',4,['requanji','zili']], xin_caifuren:['female','qun',3,['xinqieting','xianzhou']], sp_yanghu:['male','qun',3,['mingfa','rongbei']], qiaogong:['male','wu',3,['yizhu','luanchou']], @@ -129,6 +131,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + gongsunkang:'公孙康(生卒年不详),辽东襄平(今辽宁辽阳)人。东汉末年辽东地区割据军阀,辽东太守公孙度长子(一作庶子)、车骑将军公孙恭之兄。公孙康在其父死后继任辽东太守。建安十二年(207年),擒斩图谋不轨的袁尚、袁熙兄弟,将其首级献予曹操,被拜为左将军,封襄平侯。建安十四年(209年),公孙康大破高句丽,陷其国都,并讨伐韩濊,设置带方郡。死后因二子年幼,由公孙恭继任。曹丕称帝后,被追赠为大司马。', qiaogong:'桥公,亦作“乔公”,名字不详,是中国汉末三国时期的长者,江东二乔的父亲,三国时期庐江郡皖县(今安徽潜山)人,中国长篇古典名著《三国演义》中称之为“乔国老”。', liuzhang:'刘璋(生卒年不详),字季玉,江夏竟陵(今湖北省天门市)人。东汉末年宗室、军阀,益州牧刘焉幼子,在父亲刘焉死后继任益州牧。刘璋为人懦弱多疑。汉中张鲁骄纵,不听刘璋号令,于是刘璋杀张鲁母弟,双方成为仇敌,刘璋派庞羲攻击张鲁,战败。后益州内乱,平定后,又有曹操将前来袭击的消息。在内外交逼之下,刘璋听信手下张松、法正之言,迎接刘备入益州,想借刘备之力,抵抗曹操。不料此举乃引狼入室,刘备反手攻击刘璋,又有法正为内应,进至成都。成都吏民都想抵抗刘备,但刘璋为百姓计而开城出降,群下莫不流涕。刘备占据成都后,刘璋以振威将军的身份被迁往荆州居住,关羽失荆州后,刘璋归属东吴,被孙权任命为益州牧,不久后去世,卒年不详。', zhangzhongjing:'张仲景(约公元150~154年—约公元215~219年),名机,字仲景,南阳涅阳县(今河南省邓州市穰东镇张寨村)人。东汉末年著名医学家,被后人尊称为“医圣”。张仲景广泛收集医方,写出了传世巨著《伤寒杂病论》。它确立的“辨证论治”原则,是中医临床的基本原则,是中医的灵魂所在。在方剂学方面,《伤寒杂病论》也做出了巨大贡献,创造了很多剂型,记载了大量有效的方剂。其所确立的六经辨证的治疗原则,受到历代医学家的推崇。这是中国第一部从理论到实践、确立辨证论治法则的医学专著,是中国医学史上影响最大的著作之一,是后学者研习中医必备的经典著作,广泛受到医学生和临床大夫的重视。', @@ -561,6 +564,146 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //顾雍 + xinshenxing:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return (player.getStat('skill').xinshenxing||0)1; + }, + selectCard:2, + position:'he', + check:function(card){ + if(!ui.selected.cards.length||get.color(card)!=get.color(ui.selected.cards[0])) return 6.5-get.value(card); + return 6.5-get.value(card)-get.value(ui.selected.cards[0]); + }, + filterCard:true, + content:function(){ + player.draw(get.color(cards)=='none'?2:1); + }, + ai:{ + order:1, + result:{player:1}, + }, + }, + xinbingyi:{ + audio:'bingyi', + audioname:['xin_guyong'], + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterx:function(event,player){ + var cards=player.getCards('h'); + if(cards.length==1) return true; + var color=get.color(cards[0],player),type=get.type(cards[0],player); + for(var i=1;iplayer.hp; + return event.num>0; + }, + content:function(){ + "step 0" + event.count=trigger.num||1; + "step 1" + event.count--; + player.draw(); + "step 2" + if(player.countCards('h')){ + player.chooseCard('将一张手牌置于武将牌上作为“权”',true); + } + else{ + event.goto(4); + } + "step 3" + if(result.cards&&result.cards.length){ + player.lose(result.cards,ui.special,'toStorage'); + player.storage.quanji=player.storage.quanji.concat(result.cards); + player.syncStorage('quanji'); + player.markSkill('quanji'); + game.log(player,'将',result.cards,'置于武将牌上作为“权”'); + } + "step 4" + if(event.count>0){ + player.chooseBool(get.prompt2('requanji')).set('frequentSkill','requanji'); + } + else event.finish(); + "step 5" + if(result.bool){ + player.logSkill('requanji'); + event.goto(1); + } + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.quanji.length; + } + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; + if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, //王凌 xingqi:{ audio:2, @@ -3734,7 +3877,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.number(card)>6) return 2; return 0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; 'step 1' if(result.bool){ trigger.targets.length=0; @@ -9033,9 +9178,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ if(!player.storage.relianji) player.storage.relianji=0; player.storage.relianji++; - if(player.storage.relianji>2){ - event.trigger('remoucheng_awaken'); - } + event.trigger('remoucheng_awaken'); }, }, }, @@ -9046,6 +9189,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'remoucheng_awaken' }, forced:true, + filter:function(event,player){ + return player.storage.relianji&&player.storage.relianji>2; + }, audio:'moucheng', juexingji:true, skillAnimation:true, @@ -9640,7 +9786,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:"bagua_skill", content:function(){ "step 0" - player.judge('rewrite_bagua',function(card){return (get.suit(card)!='spade')?1.5:-0.5}); + player.judge('rewrite_bagua',function(card){return (get.suit(card)!='spade')?1.5:-0.5}).judge2=function(result){ + return result.bool; + }; "step 1" if(result.judge>0){ trigger.untrigger(); @@ -10120,7 +10268,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:function(links,player){ - var str=!player.storage.yizan?'两张牌(其中至少应有一张基本牌)':'一张基本牌'; + var str=player.storage.yizan?'一张基本牌':'两张牌(其中至少应有一张基本牌)'; return '将'+str+'当做'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'使用或打出'; }, }, @@ -11544,7 +11692,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ relianji:'连计', relianji_info:'出牌阶段限一次,你可以选择两名其他角色。第一名角色随机使用牌堆中的一张武器牌,然后这名角色视为对另一名角色随机使用一张下列的牌名的牌:【决斗】、【火攻】、【南蛮入侵】、【万箭齐发】或普【杀】。然后若此牌造成伤害,你获得X枚“连计”标记(X为此次扣减的体力值点数)。', remoucheng:'谋逞', - remoucheng_info:'觉醒技,当一名角色造成伤害后,若你拥有的“连计”标记数大于2,你加1点体力上限,回复1点体力,失去“连计”,获得“矜功”。', + remoucheng_info:'觉醒技,当一名角色因〖连计〗造成伤害后,若你拥有的“连计”标记数大于2,你加1点体力上限,回复1点体力,失去“连计”,获得“矜功”。', mobile_default:'常规', mobile_others:'其他', @@ -11916,7 +12064,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guying_info:'锁定技。每回合限一次,当你于回合外因使用/打出/弃置而失去牌后,若牌数为1,则你获得一枚“固”并令当前回合角色选择一项:①随机交给你一张牌。②令你获得本次失去的牌,若为装备牌,则你使用之。准备阶段开始时,你移去所有“固”并弃置等量的牌。', muzhen:'睦阵', muzhen_backup:'睦阵', - muzhen_info:'出牌阶段各限一次。①你可以将两张牌交给一名装备区内有牌的其他角色,然后获得其装备区内的一张牌。②你可以将装备区内的一张牌置于其他角色的装备区内,然后获得其一张牌。', + muzhen_info:'出牌阶段各限一次。①你可以将两张牌交给一名装备区内有牌的其他角色,然后获得其装备区内的一张牌。②你可以将装备区内的一张牌置于其他角色的装备区内,然后获得其一张手牌。', sp_huaxin:'手杀华歆', hxrenshi:'仁仕', hxrenshi_info:'出牌阶段每名角色限一次。你可以将一张手牌交给一名其他角色。', @@ -11998,7 +12146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xuancun:'悬存', xuancun_info:'其他角色的回合结束时,若你的手牌数小于体力值,则你可以令其摸X张牌(X为你的体力值与手牌数之差且至多为2)', xinlirang:'礼让', - xinlirang_info:'①其他角色的摸牌阶段开始时,若你没有“谦”标记,则你可以获得一枚“谦”标记。若如此做,其额定摸牌数+2,且本回合的弃牌阶段开始时,你可以获得其弃置的至多两张牌。②摸牌阶段开始时,若你有“谦”标记,则你跳过出牌阶段并移除“谦”标记。', + xinlirang_info:'①其他角色的摸牌阶段开始时,若你没有“谦”标记,则你可以获得一枚“谦”标记。若如此做,其额定摸牌数+2,且本回合的弃牌阶段开始时,你可以获得其弃置的至多两张牌。②摸牌阶段开始时,若你有“谦”标记,则你跳过此摸牌阶段并移除“谦”标记。', xinmingshi:'名仕', xinmingshi_info:'锁定技,当你受到伤害后,若你有“谦”标记,则伤害来源弃置一张牌。若此牌为:黑色:你获得之。红色,你回复1点体力。', xingqi:'星启', @@ -12009,6 +12157,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mibei_info:'使命技。①使命:当你使用的牌结算完成后,若你的“备”中包含的基本牌,锦囊牌,装备牌数量均大于1,则你从牌堆中获得这三种类型的牌各一张并获得技能“谋立”。②失败:结束阶段开始时,若你没有“备”,且你于本回合的准备阶段开始时也没有“备”,则你减1点体力上限。', xinmouli:'谋立', xinmouli_info:'出牌阶段限一次,你可以指定一名其他角色。其移去你的一个“备”,然后从牌堆中获得一张与此“备”名称相同的牌。', + re_zhonghui:'手杀钟会', + requanji:'权计', + requanji_info:'出牌阶段结束时,若你的手牌数大于体力值,或当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', + xin_guyong:'手杀顾雍', + xinshenxing:'慎行', + xinshenxing_info:'出牌阶段限X次(X为你的体力值),你可以弃置两张牌,然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。', + xinbingyi:'秉壹', + xinbingyi_info:'结束阶段,你可展示所有手牌。若这些牌的颜色或类型均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数)。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/offline.js b/character/offline.js index 81e3eb0e5..164ae290c 100644 --- a/character/offline.js +++ b/character/offline.js @@ -142,7 +142,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'longyi_effect', subSkill:{ effect:{ - trigger:{player:'useCard'}, + trigger:{player:['useCard','respond']}, forced:true, charlotte:true, popup:false, @@ -160,7 +160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ map[get.type2(i,player)]=true; } if(map.trick) player.draw(); - if(map.equip) trigger.directHit.addArray(game.players); + if(map.equip&&trigger.directHit) trigger.directHit.addArray(game.players); }, }, backup:{}, diff --git a/character/rank.js b/character/rank.js index fb8cfd046..9857eacc8 100644 --- a/character/rank.js +++ b/character/rank.js @@ -694,6 +694,8 @@ window.noname_character_rank={ 'sp_kongrong', 'qiaogong', 'liuzhang', + 're_guyong', + 'xin_zhonghui', ], b:[ 'diy_feishi', @@ -1032,6 +1034,7 @@ window.noname_character_rank={ 'caizhenji', 'longyufei', 'sp_zhangwen', + 're_zoushi', ], c:[ 'xiahoudun', @@ -1384,6 +1387,7 @@ window.noname_character_rank={ 'ns_yanghu', 'ol_huaxin', 'longyufei', + 're_guyong', 'key_haruko', 'key_akiko', 'key_sunohara', @@ -1714,6 +1718,7 @@ window.noname_character_rank={ 'qiaogong', 'liuzhang', 'zhangzhongjing', + 'xin_zhonghui', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index a942fcdbe..14904589e 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -10,15 +10,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_lin:['re_menghuo','ol_sunjian','re_caopi','re_xuhuang','ol_dongzhuo','ol_zhurong'], 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','wangyi','guanzhang','xin_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], + refresh_yijiang2:['old_madai','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','re_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','xin_guyong'], + refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji'], }, }, connect:true, character:{ - xin_guyong:['male','wu',3,['xinshenxing','bingyi']], + re_guyong:['male','wu',3,['reshenxing','rebingyi']], + xin_zhonghui:['male','wei',4,['xinquanji','xinzili']], re_caifuren:['female','qun',3,['reqieting','rexianzhou']], re_guanping:['male','shu',4,['relongyin','jiezhong']], re_guotufengji:['male','qun',3,['rejigong','shifei']], @@ -49,7 +50,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_taishici:['male','wu',4,['tianyi','hanzhan']], re_masu:['male','shu',3,['resanyao','rezhiman']], re_sunluban:['female','wu',3,['rechanhui','rejiaojin']], - re_zhonghui:['male','wei',4,['requanji','zili']], xin_handang:['male','wu',4,['xingongji','xinjiefan']], yujin_yujin:['male','wei',4,['decadezhenjun']], re_caozhang:['male','wei',4,['xinjiangchi']], @@ -137,26 +137,319 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ - xinshenxing:{ + //顾雍 + reshenxing:{ audio:2, enable:'phaseUse', filter:function(event,player){ - return (player.getStat('skill').xinshenxing||0)1; + return player.countCards('he')>=Math.min(2,(player.getStat('skill').reshenxing||0)); + }, + selectCard:function(){ + return Math.min(2,(_status.event.player.getStat('skill').reshenxing||0)); + }, + prompt:function(){ + return '弃置'+get.cnNumber(Math.min(2,(_status.event.player.getStat('skill').reshenxing||0)))+'张牌并摸一张牌'; }, - selectCard:2, - position:'he', check:function(card){ - if(!ui.selected.cards.length||get.color(card)!=get.color(ui.selected.cards[0])) return 6.5-get.value(card); - return 6.5-get.value(card)-get.value(ui.selected.cards[0]); + var num=_status.event.player.countCards('h',{color:get.color(card)}); + if(get.position(card)=='e') num++; + return (Math.max(4,7.1-num)-get.value(card))/num; }, filterCard:true, + position:'he', content:function(){ - player.draw(get.color(cards)=='none'?2:1); + player.draw(); + }, + ai:{ + order:function(item,player){ + if(!player.getStat('skill').reshenxing) return 10; + return 1; + }, + result:{player:1}, + }, + }, + rebingyi:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterx:function(player){ + var cards=player.getCards('h'); + if(cards.length==1) return true; + var color=get.color(cards[0],player); + for(var i=1;i0; + }, + content:function(){ + 'step 0' + event.count=(trigger.name=='damage'?trigger.num:1); + 'step 1' + event.count--; + player.draw(); + 'step 2' + var hs=player.getCards('h'); + if(hs.length){ + if(hs.length==1) event._result={bool:true,cards:hs}; + else player.chooseCard('h',true,'选择一张手牌作为“权”'); + } + else event.goto(4); + 'step 3' + if(result.bool&&result.cards&&result.cards.length){ + var card=result.cards[0]; + player.lose(card,ui.special,'toStorage'); + player.markAuto('xinquanji',result.cards); + game.log(player,'将',card,'置于了武将牌上'); + } + 'step 4' + if(event.count>0){ + player.chooseBool(get.prompt2('xinquanji')).set('frequentSkill','xinquanji'); + } + else event.finish(); + 'step 5' + if(result.bool){ + player.logSkill('xinquanji'); + event.goto(1); + } + }, + locked:false, + intro:{ + content:'cards', + onunmark:'throw', + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.getStorage('xinquanji').length; + }, + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; + if(!target.hasSkill('xinpaiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, + xinzili:{ + derivation:'xinpaiyi', + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return player.getStorage('xinquanji').length>2; + }, + content:function(){ + player.awakenSkill('xinzili'); + player.recover(); + player.draw(2); + player.loseMaxHp(); + player.addSkill('xinpaiyi'); + }, + }, + xinpaiyi:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.getStorage('xinquanji').length>0&&(!player.hasSkill('xinpaiyi_0')||!player.hasSkill('xinpaiyi_1')) + }, + chooseButton:{ + check:function(button){ + if(typeof button.link=='object') return 1; + var player=_status.event.player,num=player.storage.xinquanji.length-1; + if(button.link==1){ + if(game.countPlayer(function(current){ + return get.damageEffect(current,player,player)>0; + })'; + td.link=i; + td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button); + for(var j in lib.element.button){ + td[j]=lib.element.button[j]; + } + table.appendChild(td); + dialog.buttons.add(td); + } + dialog.content.appendChild(table); + dialog.add(player.storage.xinquanji); + return dialog; + }, + select:2, + filter:function(button,player){ + if(ui.selected.buttons.length) return (typeof ui.selected.buttons[0].link)!=(typeof button.link) + return true; + }, + backup:function(links){ + if(typeof links[0]=='object') links.reverse(); + var next=get.copy(lib.skill['xinpaiyi_backup'+links[0]]); + next.card=links[1]; + return next; + }, + prompt:function(links,player){ + if(typeof links[0]=='object') links.reverse(); + var num=get.cnNumber(Math.max(1,player.storage.xinquanji.length-1)),card=get.translation(links[1]); + if(links[0]==0) return '移去'+card+'并令一名角色摸'+num+'张牌'; + return '移去'+card+'并对至多'+num+'名角色造成1点伤害'; + }, }, ai:{ order:1, result:{player:1}, }, + subSkill:{ + 0:{}, + 1:{}, + backup0:{ + audio:'xinpaiyi', + filterCard:()=>false, + selectCard:-1, + filterTarget:true, + delay:false, + content:function(){ + 'step 0' + player.addTempSkill('xinpaiyi_0','phaseUseEnd'); + var card=lib.skill.xinpaiyi_backup.card; + player.unmarkAuto('xinquanji',[card]); + game.log(card,'进入了弃牌堆'); + player.$throw(card,1000); + game.delayx(); + game.cardsDiscard(card); + 'step 1' + target.draw(Math.max(1,player.getStorage('xinquanji').length)); + }, + ai:{ + result:{ + target:function(player,target){ + if(target.hasSkill('nogain')) return 0; + if(player==target&&!player.needsToDiscard()) return 3; + return 1; + }, + }, + }, + }, + backup1:{ + audio:'xinpaiyi', + filterCard:()=>false, + selectCard:-1, + filterTarget:true, + delay:false, + multitarget:true, + multiline:true, + selectTarget:function(){ + return [1,Math.max(1,_status.event.player.storage.xinquanji.length-1)]; + }, + content:function(){ + 'step 0' + targets.sortBySeat(); + player.addTempSkill('xinpaiyi_1','phaseUseEnd'); + var card=lib.skill.xinpaiyi_backup.card; + player.unmarkAuto('xinquanji',[card]); + game.log(card,'进入了弃牌堆'); + player.$throw(card,1000); + game.delayx(); + game.cardsDiscard(card); + 'step 1' + for(var i of targets) i.damage(); + }, + ai:{ + tag:{ + damage:1, + }, + result:{ + target:-1.5, + }, + }, + }, + }, }, //界蔡夫人 reqieting:{ @@ -628,7 +921,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case 'diamond':return get.sgn(get.attitude(evt.target,evt.player))*-3; } return 0; - }); + }).judge2=function(result){ + if(result.color=='black') return true; + return false; + }; 'step 1' switch(result.suit){ case 'spade': case 'club': @@ -670,6 +966,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //界曹彰 xinjiangchi:{ + audio:'new_jiangchi', trigger:{player:'phaseUseBegin'}, direct:true, content:function(){ @@ -2463,7 +2760,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(function(card){ return get.suit(card)=='heart'?2:0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; 'step 1' event.card=result.card; if(result.bool&&get.position(event.card,true)=='d'){ @@ -2615,7 +2914,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.suit(card)=='spade') return 4; return 0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; } else{ event.finish(); @@ -3035,74 +3336,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - requanji:{ - audio:2, - trigger:{player:['damageEnd','phaseUseEnd']}, - frequent:true, - locked:false, - notemp:true, - init:function(player){ - if(!player.storage.quanji) player.storage.quanji=[]; - }, - filter:function(event,player){ - if(event.name=='phaseUse') return player.countCards('h')>player.hp; - return event.num>0; - }, - content:function(){ - "step 0" - event.count=trigger.num||1; - "step 1" - event.count--; - player.draw(); - "step 2" - if(player.countCards('h')){ - player.chooseCard('将一张手牌置于武将牌上作为“权”',true); - } - else{ - event.goto(4); - } - "step 3" - if(result.cards&&result.cards.length){ - player.lose(result.cards,ui.special,'toStorage'); - player.storage.quanji=player.storage.quanji.concat(result.cards); - player.syncStorage('quanji'); - player.markSkill('quanji'); - game.log(player,'将',result.cards,'置于武将牌上作为“权”'); - } - "step 4" - if(event.count>0){ - player.chooseBool(get.prompt2('requanji')).set('frequentSkill','requanji'); - } - else event.finish(); - "step 5" - if(result.bool){ - player.logSkill('requanji'); - event.goto(1); - } - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.quanji.length; - } - }, - ai:{ - maixie:true, - maixie_hp:true, - threaten:0.8, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; - if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; - if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; - if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; - } - } - } - } - }, ollongdan:{ audio:'longdan_sha', audioname:['re_zhaoyun'], @@ -5585,7 +5818,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 0; }, content:function(){ - player.judge(lib.skill.xinleiji.judgeCheck); + player.judge(lib.skill.xinleiji.judgeCheck).judge2=function(result){ + return result.bool?true:false; + }; }, ai:{ useShan:true, @@ -6907,7 +7142,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var next=player.judge(function(card){ if(get.color(card)=='black') return 1.5; return -1.5; - }); + }).judge2=function(result){ + return result.bool; + }; if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){ if(event.judgeResult.color=='black'&&get.position(card,true)=='o'){ player.gain(card,'gain2').gaintag.add('reluoshen'); @@ -9637,9 +9874,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ollongdan_info:'你可以将一张【杀】当做【闪】、【闪】当做【杀】、【酒】当做【桃】、【桃】当做【酒】使用或打出。', olyajiao:'涯角', olyajiao_info:'当你于回合外因使用或打出而失去手牌后,你可以展示牌堆顶的一张牌。若这两张牌的类别相同,你可以将展示的牌交给一名角色;若类别不同,你可弃置攻击范围内包含你的角色区域里的一张牌。', - re_zhonghui:'界钟会', - requanji:'权计', - requanji_info:'出牌阶段结束时,若你的手牌数大于体力值,或当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', regongji:'弓骑', regongji_info:'出牌阶段限一次,你可以弃置一张非基本牌,然后弃置一名其他角色的一张牌。锁定技,当你的装备区内有坐骑牌时,你的攻击范围无限。', ol_sunjian:'界孙坚', @@ -9801,9 +10035,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reqieting_info:'其他角色的回合结束时,若其本回合内未造成过伤害,则你可将其装备区内的一张牌置于你的装备区内;若其本回合内未对其他角色使用过牌,则你可摸一张牌。', rexianzhou:'献州', rexianzhou_info:'限定技。出牌阶段,你可将装备区内的所有牌交给一名其他角色。你回复X点体力,然后对其攻击范围内的至多X名角色各造成1点伤害(X为你以此法给出的牌数)。', - xin_guyong:'界顾雍', - xinshenxing:'慎行', - xinshenxing_info:'出牌阶段限X次(X为你的体力值),你可以弃置两张牌,然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。', + xin_zhonghui:'界钟会', + xinquanji:'权计', + xinquanji_info:'①当你受到1点伤害后,或你的牌被其他角色获得后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”。②你的手牌上限+X(X为“权”的数量)。', + xinzili:'自立', + xinzili_info:'觉醒技。准备阶段,若你的“权”数大于2,则你回复1点体力并摸两张牌,减1点体力上限并获得〖排异〗。', + xinpaiyi:'排异', + xinpaiyi_backup:'排异', + xinpaiyi_info:'出牌阶段每项各限一次,你可移去一张“权”并选择一项:①令一名角色摸X张牌。②对至多X名角色各造成1点伤害。(X为“权”数)', + re_guyong:'界顾雍', + reshenxing:'慎行', + reshenxing_info:'出牌阶段,你可以(X为你本阶段内发动过〖慎行〗的次数),然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。', + rebingyi:'秉壹', + rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index 4b75af922..8cc5a221e 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -3261,6 +3261,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.suit(card)=='heart') return -1; return 1; }); + next.judge2=function(result){ + return result.bool; + }; if(get.mode()!='guozhan'){ next.callback=lib.skill.tuntian.callback; event.finish(); @@ -4903,7 +4906,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.source.judge(function(card){ if(get.suit(card)=='spade') return 4; return 0; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; } else{ event.finish(); @@ -5834,7 +5839,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(suit=='spade') return -4; if(suit=='club') return -2; return 0; - }); + }).judge2=function(result){ + return result.bool==false?true:false; + }; } else{ event.finish(); @@ -6519,7 +6526,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, group:'gzbuqu_recover', //locked:true, - frequent:true, + forced:true, + locked:false, ondisable:true, onremove:function(player){ if(player.storage.gzbuqu.length){ @@ -6725,7 +6733,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.target.judge(function(card){ if(get.suit(card)=='spade') return -4; return 0; - }); + }).judge2=function(result){ + return result.bool==false?true:false; + }; } else{ event.finish(); @@ -7715,7 +7725,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinliegong:'烈弓', xinkuanggu:'狂骨', gzbuqu:'不屈', - gzbuqu_info:'当你扣减1点体力时,若你的体力值为0,你可以将牌堆顶的一张牌置于你的武将牌上:若此牌的点数与你武将牌上的其他牌均不同,你不会死亡;若你的武将牌上有点数相同的牌,你进入濒死状态', + gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,则你将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死状态。', xinkuanggu_info:'当你对距离1以内的一名角色造成1点伤害后,你可以回复1点体力或摸一张牌。', xinliegong_info:'你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标;当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被【闪】响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。', jiewei_info:'当你的武将牌翻面后,你可以摸一张牌。然后你可以使用一张锦囊牌或装备牌,并可以在此牌结算后弃置场上一张同类型的牌', diff --git a/character/sp.js b/character/sp.js index 319967db7..570d2e4d3 100755 --- a/character/sp.js +++ b/character/sp.js @@ -75,7 +75,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhanglu:['male','qun',3,['yishe','bushi','midao']], wutugu:['male','qun',15,['ranshang','hanyong']], sp_caiwenji:['female','wei',3,['chenqing','mozhi']], - zhugeguo:['female','shu',3,['yuhua','qirang']], + zhugeguo:['female','shu',3,['qirang','yuhua']], lingju:['female','qun',3,['jieyuan','fenxin']], @@ -132,7 +132,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jiling:['male','qun',4,['shuangren']], zangba:['male','wei',4,['rehengjiang']], zhangren:['male','qun',4,['chuanxin','zfengshi']], - zoushi:['female','qun',3,['zhuoshui','zqingcheng']], wangyun:['male','qun',4,['xinlianji','xinmoucheng']], sunqian:['male','shu',3,['qianya','shuimeng']], @@ -1104,7 +1103,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(lib.skill.jinzhi_backup.viewAs.name=='jiu'&&!player.countCards('h',function(cardx){ return card!=cardx&&!ui.selected.cards.contains(cardx)&&get.name(cardx,player)=='sha'; })) return 0; - return 6-get.value(card); + return Math.min(0.01,6-get.value(card)); }, precontent:function(){ player.logSkill('jinzhi'); @@ -2237,7 +2236,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.color(result)=='red') return -1; return 0; }; - player.judge(func); + player.judge(func).judge2=function(result){ + return result.color=='red'?true:false; + }; 'step 1' if(result.color=='red'&&get.itemtype(trigger.source)=='player'&&player.canUse('sha',trigger.source,false)){ player.useCard({name:'sha',isCard:true},trigger.source,false,'noai'); @@ -3279,8 +3280,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=result.cards; player.gain(cards,trigger.target,'giveAuto'); } - else trigger.getParent().directHit.add(trigger.target); - game.delay(); + else{ + trigger.getParent().directHit.add(trigger.target); + game.delay(); + } }, }, //变权移植 @@ -5215,159 +5218,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, - huoshui:{ - audio:2, - enable:'phaseUse', - unique:true, - forceunique:true, - filter:function(event,player){ - if(player.name1=='gz_zoushi') return player.isUnseen(0); - return player.isUnseen(1); - }, - content:function(){ - if(player.name1=='gz_zoushi') player.showCharacter(0); - else player.showCharacter(1); - }, - global:'huoshui_mingzhi' - }, - huoshui_mingzhi:{ - ai:{ - nomingzhi:true, - skillTagFilter:function(player){ - if(_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('huoshui')){ - return true; - } - return false; - } - } - }, - qingcheng:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})&&game.hasPlayer(function(current){ - return current!=player&&!current.isUnseen(2); - }); - }, - filterCard:{type:'equip'}, - position:'he', - filterTarget:function(card,player,target){ - return !target.isUnseen(2); - }, - check:function(card){ - return 6-get.value(card,_status.event.player); - }, - content:function(){ - 'step 0' - if(get.is.jun(target)){ - event._result={control:'副将'}; - } - else{ - var choice='主将'; - var skills=lib.character[target.name2][3]; - for(var i=0;i=0) return 0; - if(player.hasCard(function(card){ - return get.tag(card,'damage')&&player.canUse(card,target,true,true); - })){ - if(target.maxHp>3) return -0.5; - return -1; - } - return 0; - } - } - } - }, - qingcheng_ai:{ - ai:{ - effect:{ - target:function(card){ - if(get.tag(card,'damage')) return 2; - } - } - } - }, - zhuoshui:{ - audio:'huoshui', - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - content:function(){ - game.countPlayer(function(current){ - if(current!=player&&!current.hasSkill('fengyin')){ - player.line(current,'green'); - current.addTempSkill('fengyin'); - } - }); - } - }, - zqingcheng:{ - audio:'qingcheng', - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - filterCard:{type:'equip'}, - position:'he', - filterTarget:function(card,player,target){ - return target!=player; - }, - check:function(card){ - var player=_status.event.player; - if(game.hasPlayer(function(current){ - return get.attitude(player,current)>2&¤t.isTurnedOver(); - })){ - return 10-get.value(card,player); - } - return 6-get.value(card,player); - }, - content:function(){ - 'step 0' - target.turnOver(); - 'step 1' - target.draw(2); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noturn')) return 0; - if(target.isTurnedOver()) return 2; - return -0.5; - } - } - } - }, zfengshi:{ audio:2, trigger:{player:'useCardToPlayered'}, @@ -6036,19 +5886,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', filterTarget:function(card,player,target){ - return !target.hasSkill('fuman2')&&target!=player; + if(target==player) return false; + var stat=player.getStat().fuman_targets; + return !stat||!stat.contains(target); }, filter:function(event,player){ - return player.countCards('h','sha'); + return player.countCards('h')>0&&game.hasPlayer((current)=>lib.skill.fuman.filterTarget(null,player,current)); }, discard:false, lose:false, delay:false, - filterCard:{name:'sha'}, + filterCard:true, content:function(){ target.gain(cards,player,'giveAuto').gaintag.add('fuman'); - target.storage.fuman2=player; - target.addTempSkill('fuman2',{player:'phaseAfter'}); + target.addSkill('fuman2'); + player.addSkill('fuman_draw'); + var stat=player.getStat('skill'); + if(!stat.fuman_targets) stat.fuman_targets=[]; + stat.fuman_targets.push(target); }, check:function(card){ return 6-get.value(card); @@ -6061,40 +5916,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; } } - } + }, + subSkill:{ + draw:{ + trigger:{global:'useCardAfter'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.player.hasHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('fuman')) return true; + } + return false; + }); + }, + logTarget:'player', + content:function(){ + player.draw(trigger.player.hasHistory('sourceDamage',function(evt){ + return evt.card==trigger.card; + })?2:1); + }, + }, + }, }, fuman2:{ mod:{ aiOrder:function(player,card,num){ - if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')&&player.storage.fuman2.isIn()) return num+get.sgn(get.attitude(player,player.storage.fuman2)); + if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')) return num+1; + }, + cardname:function(card,player){ + if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')) return 'sha'; }, - }, - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - if(!player.storage.fuman2.isIn()) return false; - return player.getHistory('lose',function(evt){ - if(evt.getParent()!=event) return false; - for(var i in evt.gaintag_map){ - if(evt.gaintag_map[i].contains('fuman')) return true; - } - return false; - }).length>0; - }, - mark:true, - intro:{ - content:'下个回合结束之前使用“抚蛮”牌时,令$摸一张牌' - }, - content:function(){ - 'step 0' - game.delayx(); - 'step 1' - player.line(player.storage.fuman2,'green'); - player.storage.fuman2.draw(); - }, - onremove:function(player){ - delete player.storage.fuman2; - player.removeGaintag('fuman'); }, }, qizhou:{ @@ -6651,14 +6504,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, yjixi:{ - init:function(player){ - player.storage.yjixi=0; - }, derivation:'rewangzun', trigger:{player:'phaseJieshuBegin'}, forced:true, filter:function(event,player){ - return player.storage.yjixi>=3; + return player.countMark('yjixi')>=3; }, skillAnimation:true, animationColor:'gray', @@ -6715,23 +6565,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - group:['yjixi_count1','yjixi_count2'], - subSkill:{ - count1:{ - trigger:{player:'phaseZhunbeiBegin'}, - silent:true, - content:function(){ - player.storage.yjixi++; - } - }, - count2:{ - trigger:{player:'loseHpAfter'}, - silent:true, - content:function(){ - player.storage.yjixi=0; - } - } - } }, xinyongsi:{ group:['xinyongsi1','xinyongsi2'], @@ -6763,7 +6596,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(!result.bool){ player.loseHp(); + var num=player.countMark('yjixi'); + if(num) player.removeMark('yjixi',num,false); } + else player.addMark('yjixi',1,false); } }, lianzhu:{ @@ -9524,9 +9360,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'equipEnd'}, frequent:true, content:function(){ - player.gain(get.cardPile(function(card){ + var card=get.cardPile(function(card){ return get.type(card,'trick')=='trick'; - }),'gain2'); + }); + if(card) player.gain(card,'gain2').gaintag.add('qirang'); }, ai:{ effect:{ @@ -9535,16 +9372,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, threaten:1.3 - } + }, + group:'qirang_use', + subSkill:{ + 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); + } + }, + }, + }, }, yuhua:{ - trigger:{player:'phaseDiscardBegin'}, + trigger:{player:'phaseJieshuBegin'}, forced:true, + locked:false, audio:2, filter:function(event,player){ - return player.countCards('h')>player.getHandcardLimit(); + return player.countCards('h')>player.maxHp; + }, + content:function(){ + 'step 0' + var cards=get.cards(); + game.cardsGotoOrdering(cards); + event.card=cards[0]; + player.chooseControl('牌堆顶','牌堆底').set('dialog',['羽化:牌堆顶的一张牌',cards]); + 'step 1' + if(result.control=='牌堆顶') ui.cardPile.insertBefore(card,ui.cardPile.firstChild); + else ui.cardPile.appendChild(card); + game.updateRoundNumber(); }, - content:function(){}, mod:{ ignoredHandcard:function(card,player){ if(get.type(card)!='basic'){ @@ -15091,14 +14994,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fenyue2_bg:'钺', fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.令其不能使用或打出手牌直到回合结束;2.视为你对其使用了【杀】(不计入次数限制)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)', - huoshui:'祸水', - huoshui_info:'出牌阶段,你可以明置此武将牌:你的回合内,若此武将牌处于明置状态,其他角色不能明置其武将牌。', - qingcheng:'倾城', - qingcheng_info:'出牌阶段,你可以弃置一张装备牌并选择一名两张武将牌均明置的其他角色,你暗置其一张武将牌', - zhuoshui:'祸水', - zhuoshui_info:'锁定技,准备阶段,你令所有其他角色的非锁定技失效直到回合结束。', - zqingcheng:'倾城', - zqingcheng_info:'出牌阶段,你可以弃置一张装备牌,然后令一名角色翻面并摸两张牌。', zfengshi:'锋矢', zfengshi_info:'当你使用【杀】指定目标后,你可以令目标弃置装备区内的一张牌。', chuanxin:'穿心', @@ -15124,7 +15019,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sheyan_info:'当你成为普通锦囊牌的目标时(【借刀杀人】等带有指向目标的锦囊除外),你可以为此牌增加一个目标或令其对其中一个目标无效。(有效目标数至少为一)', fuman:'抚蛮', fuman2:'抚蛮', - fuman_info:'出牌阶段,你可以将一张【杀】交给一名本回合未获得过〖抚蛮〗牌的其他角色,其于下个回合结束之前使用〖抚蛮〗牌时,你摸一张牌。', + fuman_info:'出牌阶段每名角色限一次,你可以将一张手牌交给一名其他角色并标记为“抚蛮”且“抚蛮”牌的牌名视为【杀】。然后当一名角色使用“抚蛮”牌结算结束后,你摸一张牌。若此牌造成过伤害,则改为摸两张牌。', qizhou:'绮胄', qizhou_info:'锁定技,你根据装备区里牌的花色数获得以下技能:1种或以上:〖马术〗;2种或以上:〖英姿〗;3种或以上:〖短兵〗;4种:〖奋威〗。', shanxi:'闪袭', @@ -15265,9 +15160,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xisheng:'牺牲', xisheng_info:'每名其他角色的回合限一次,你可以将两张牌当做【桃】使用。', yuhua:'羽化', - yuhua_info:'锁定技,弃牌阶段内,你的非基本牌不计入手牌上限。', + yuhua_info:'锁定技,你的非基本牌不计入手牌上限。结束阶段,若你的手牌数大于体力上限,则你卜算1。', qirang:'祈禳', - qirang_info:'当有装备牌进入你的装备区时,你可以随机获得牌堆中的一张锦囊牌。', + qirang_info:'①当有装备牌进入你的装备区时,你可获得牌堆中的一张锦囊牌。②当你使用“祈禳”牌选择唯一目标后,可为此牌增加一个目标。', biluan:'避乱', biluan_info:'摸牌阶段开始时,若有与你距离不大于1的其他角色,你可以放弃摸牌。若如此做,本局内其他角色计算与你的距离时+X。(X为势力数)', lixia:'礼下', @@ -15285,7 +15180,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bushi_info:'当你受到1点伤害后,或其他角色受到你造成的1点伤害后,受到伤害的角色可以获得你的一张「米」', midao_info:'一名角色的判定牌生效前,你可以打出一张「米」代替之。', fengpo:'凤魄', - fengpo_info:'每种牌名限一次,当你于出牌阶段内第一次使用【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.令此牌的伤害值基数+X。(X为其手牌中方牌的数量)', + fengpo_info:'每种牌名限一次,当你于出牌阶段内第一次使用【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.令此牌的伤害值基数+X。(X为其手牌中♦牌的数量)', chenqing:'陈情', chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后其弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】。', mozhi:'默识', @@ -15601,11 +15496,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ juguan_info:'出牌阶段限一次,你可将一张手牌当【杀】或【决斗】使用。若受到此牌伤害的角色未在你的下回合开始前对你造成过伤害,你的下个摸牌阶段摸牌数+2。', duxi:'杜袭', quxi:'驱徙', - quxi_info:'限定技。出牌阶段结束时,你可跳过下个弃牌阶段并选择两名手牌数不同的其他角色。你将翻至背面,令这两名角色中手牌数较少的角色获得另一名角色的一张牌并获得一枚“丰”,另一名角色获得一枚“歉”。拥有“丰”/“歉”的角色的摸牌阶段额定摸牌数+1/-1。拥有“丰”/“歉”的角色死亡时,或一轮游戏开始时,你可转移“丰”/“歉”。', + quxi_info:'限定技。出牌阶段结束时,你可跳过下个弃牌阶段并选择两名手牌数不同的其他角色。你将武将牌翻至背面,令这两名角色中手牌数较少的角色获得另一名角色的一张牌并获得一枚“丰”,另一名角色获得一枚“歉”。拥有“丰”/“歉”的角色的摸牌阶段额定摸牌数+1/-1。拥有“丰”/“歉”的角色死亡时,或一轮游戏开始时,你可转移“丰”/“歉”。', bixiong:'避凶', bixiong2:'避凶', bixiong_info:'锁定技,当你于弃牌阶段弃置手牌后,你不能成为与这些牌花色相同的牌的目标直到你下回合开始。', + sp_default:"常规", sp_tongque:"铜雀台", sp_zhongdan:"忠胆英杰", diff --git a/character/sp2.js b/character/sp2.js index 63b9dc236..64e07a42a 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,10 +4,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_zoushi:['female','qun',3,['rehuoshui','reqingcheng']], luyusheng:['female','wu',3,['zhente','zhiwei']], huaxin:['male','wei',3,['spwanggui','xibing']], re_dongbai:['female','qun',3,['relianzhu','rexiahui']], - qiuliju:['male','qun',6,['koulve','qljsuiren']], + qiuliju:['male','qun','4/6',['koulve','qljsuiren']], heyan:['male','wei',3,['yachai','qingtan']], re_hucheer:['male','qun',4,['redaoji','fuzhong']], re_dongcheng:['male','qun',4,['xuezhao']], @@ -97,10 +98,56 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_qihuan:['liubian','zhaozhong'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_hucheer','re_dongcheng','yangwan','qiuliju','heyan'], + sp_zhongyuan:['re_hucheer','re_zoushi'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','qiuliju','heyan'], } }, skill:{ + rehuoshui:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + var num=Math.min(game.countPlayer()-1,Math.max(1,player.getDamagedHp())); + player.chooseTarget([1,num],get.prompt('rehuoshui'),'令至多'+get.cnNumber(num)+'名角色的非锁定技失效直到回合结束',lib.filter.notMe).set('ai',function(target){ + var att=-get.attitude(_status.event.player,target); + if(att<=0) return 0; + if(target.hasSkillTag('maixie')||target.hasSkill('maixie_hp')||target.hasSkill('maixie_defed')) att*=3; + return att/get.threaten(target); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.logSkill('rehuoshui',targets); + for(var i of targets) i.addTempSkill('fengyin'); + game.delayx(); + } + }, + }, + reqingcheng:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer((current)=>lib.skill.reqingcheng.filterTarget(null,player,current)); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.sex=='male'&&target.countCards('h')0) return -Math.max(get.value(target.getCards('h'),player)-get.value(player.getCards('h'),player),0); + return 0; + }, + }, + }, + }, //陆郁生 zhente:{ audio:2, @@ -437,6 +484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //董白 relianzhu:{ + audio:'lianzhu', enable:'phaseUse', usable:1, filter:function(event,player){ @@ -490,6 +538,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, rexiahui:{ + audio:'xiahui', mod:{ ignoredHandcard:function(card,player){ if(get.color(card,player)=='black') return true; @@ -554,7 +603,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ player.removeSkill('rexiahui_block'); }, - onremove:function(){ + onremove:function(player){ player.removeSkill('rexiahui_block'); }, }, @@ -1222,7 +1271,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageBegin4'}, direct:true, filter:function(event,player){ - return event.source!=player&&event.source!=player.storage.jielie; + return (!event.source)||(event.source!=player&&event.source!=player.storage.jielie); }, content:function(){ 'step 0' @@ -2904,10 +2953,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, audio:'xinfu_wuniang', direct:true, - filter:function (event,player){ + filter:function(event,player){ return event.card.name=='sha'; }, - content:function (){ + content:function(){ 'step 0' player.chooseTarget(get.prompt2('decadewuniang'),function(card,player,target){ if(player==target) return false; @@ -3492,11 +3541,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ global:"useCardToPlayered", }, - filter:function (event,player){ + filter:function(event,player){ return event.isFirstTarget&&event.targets&&event.targets.length>1&&get.type2(event.card)=='trick'; }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget(get.prompt('decadezhennan'),'对一名其他角色造成1点伤害',function(card,player,target){ return target!=player; @@ -4456,21 +4505,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ global:"phaseUseBegin", }, - filter:function (event,player){ + filter:function(event,player){ return event.player!=player&&event.player.isAlive()&&event.player.inRange(player)&&player.countCards('he')>0; }, direct:true, derivation:["rezhixi"], - checkx:function (event,player){ + checkx:function(event,player){ if(get.attitude(player,event.player)>=0) return false; - var e2=player.getEquip(2); - if(e2){ - if(e2.name=='tengjia') return true; - if(e2.name=='bagua') return true; - } return event.player.countCards('h')>event.player.hp; }, - content:function (){ + content:function(){ "step 0" var check=lib.skill.new_meibu.checkx(trigger,player); player.chooseToDiscard(get.prompt2('remeibu',trigger.player),'he').set('ai',function(card){ @@ -4482,12 +4526,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=trigger.player; var card=result.cards[0]; player.line(target,'green'); + player.markAuto('remeibu_gain',[get.suit(card,player)]); + player.addTempSkill('remeibu_gain'); target.addTempSkill('rezhixi','phaseUseEnd'); } }, ai:{ expose:0.2, }, + subSkill:{ + gain:{ + trigger:{global:'loseAfter'}, + forced:true, + charlotte:true, + popup:false, + onremove:true, + filter:function(event,player){ + return event.getParent(3).name=='rezhixi'&&player.getStorage('remeibu_gain').contains(get.suit(event.cards[0],event.player))&&get.position(event.cards[0])=='d'; + }, + content:function(){ + player.gain(trigger.cards[0],'gain2'); + }, + }, + }, }, remumu:{ audio:"mumu", @@ -4495,50 +4556,52 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseUseBegin", }, direct:true, - content:function (){ + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('e')>0; + }); + }, + content:function(){ 'step 0' - player.chooseTarget(get.prompt('remumu'),'弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌',function(card,player,target){ - if(target==player) return target.getEquip(2)!=undefined; + player.chooseTarget(get.prompt2('remumu'),function(card,player,target){ return target.countCards('e')>0; }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target) - if(target.getEquip(2)&&player.isEmpty(2)){ - return -2*att; + var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('e'),val=0; + for(var i of es){ + var eff=-(get.value(i,target)-0.1)*att; + if(eff>val) val=eff; } - return -att; + return eff; }); 'step 1' - if(result.bool&&result.targets&&result.targets.length){ - event.target=result.targets[0]; - player.logSkill('remumu',event.target); - player.line(event.target,'green'); - var e=event.target.getEquip(2); - event.e=e; - if(target==player) event.choice='获得一张防具牌'; - else if(e){ - player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){ - if(_status.event.player.getEquip(2)){ - return '弃置一张装备牌'; - } - return '获得一张防具牌'; + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('remumu',target); + if(player==target) event._result={index:1}; + else{ + var str=get.translation(target); + player.chooseControl().set('choiceList',[ + '弃置'+str+'装备区的一张牌且本阶段使用【杀】的次数上限+1', + '获得'+str+'装备区的一张牌且本阶段使用【杀】的次数上限-1', + ]).set('ai',function(){ + var player=_status.event.player; + if(player.countCards('hs',function(card){ + return get.name(card,player)=='sha'&&player.hasValueTarget(card); + })0&&!player.storage.biaozhao; }, - content:function (){ + content:function(){ 'step 0' player.chooseCard('he',get.prompt2('biaozhao')).ai=function(card){ return 6-get.value(card); @@ -6399,7 +6465,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, forced:true, audio:"biaozhao", - filter:function (event,player){ + filter:function(event,player){ if(!player.storage.biaozhao) return false; var suit=get.suit(player.storage.biaozhao[0]); var num=get.number(player.storage.biaozhao[0]); @@ -6409,7 +6475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return false; }, - content:function (){ + content:function(){ "step 0" var card=player.storage.biaozhao[0]; delete player.storage.biaozhao; @@ -6433,10 +6499,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, charlotte:true, audio:"biaozhao", - filter:function (event,player){ + filter:function(event,player){ return player.storage.biaozhao!=undefined; }, - content:function (){ + content:function(){ "step 0" var card=player.storage.biaozhao[0]; delete player.storage.biaozhao; @@ -6470,7 +6536,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forceDie:true, skillAnimation:true, animationColor:'wood', - content:function (){ + content:function(){ "step 0" player.chooseTarget(get.prompt2('yechou'),function(card,player,target){ return player!=target&&target.getDamagedHp()>1 @@ -6500,7 +6566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:"phaseAfter", }, forced:true, - content:function (){player.loseHp()}, + content:function(){player.loseHp()}, }, yanjiao:{ audio:2, @@ -6513,10 +6579,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return target!=player; }, - content:function (){ + content:function(){ "step 0" var num=4; if(player.storage.xingshen){ @@ -6710,7 +6776,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } event.goto(8); }, - getResult:function (cards){ + getResult:function(cards){ var cl=cards.length; var maxmium=Math.pow(3,cl); var filter=function(list){ @@ -6763,7 +6829,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:"本回合手牌上限-1", }, mod:{ - maxHandcard:function (player,num){ + maxHandcard:function(player,num){ return num-1; }, }, @@ -6777,7 +6843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"damageEnd", }, frequent:true, - content:function (){ + content:function(){ player.draw(player.isMinHandcard()?2:1); if(!player.storage.xingshen) player.storage.xingshen=0; player.storage.xingshen+=player.isMinHp()?2:1; @@ -7286,7 +7352,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(suit=='spade') return -10; if(suit=='club') return -5; return 0; - }); + }).judge2=function(result){ + return result.color=='black'?true:false; + }; 'step 1' if(result.suit=='spade'){ trigger.target.damage(3,'thunder'); @@ -7388,7 +7456,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.number(card)<_status.lslixun) return -_status.lslixun; return 1; - }); + }).judge2=function(result){ + return result.bool?true:false; + }; 'step 1' delete _status.lslixun; if(!result.bool){ @@ -8134,13 +8204,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ player:"useCardEnd", }, - check:function (event,player){ + check:function(event,player){ return get.value(event.cards)+player.maxHp*2-18>0; }, - filter:function (event,player){ + filter:function(event,player){ return player.isPhaseUsing()&&get.type(event.card)=='trick'&&event.cards.filterInD().length>0; }, - content:function (){ + content:function(){ player.loseMaxHp(); player.gain(trigger.cards.filterInD(),'gain2','log'); }, @@ -8151,12 +8221,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ player:"useCardAfter", }, - filter:function (event,player){ + filter:function(event,player){ if(!player.isPhaseUsing()) return false; if(get.type(event.card)==undefined) return false; return (event.targets&&event.targets.length==1); }, - content:function (){ + content:function(){ var card=get.cardPile2(function(card){ return card.number==6; }); @@ -8180,10 +8250,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return player!=target&&target.countCards('e')get.strNumber(i)); target.chooseControl(list).set('ai',function(){ @@ -8217,7 +8287,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ order:9, result:{ - target:function (player,target){ + target:function(player,target){ var numj=target.countCards('j'); var numhe=target.countCards('he'); if(numhe==0) return numj>0?6:-6; @@ -8234,13 +8304,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ unique:true, enable:"phaseUse", audio:2, - filter:function (event,player){ + filter:function(event,player){ if(player.storage.xinfu_tunjun) return false; return player.storage.xinfu_lveming&&player.storage.xinfu_lveming>0; }, filterTarget:true, selectTarget:1, - content:function (){ + content:function(){ "step 0" player.awakenSkill('xinfu_tunjun'); event.num=player.storage.xinfu_lveming; @@ -8273,7 +8343,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ content:"limited", }, - init:function (player){ + init:function(player){ player.storage.xinfu_tunjun=false; }, }, @@ -8281,10 +8351,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return player!=target; }, - content:function (){ + content:function(){ "step 0" if(target.countCards('hej')==0){ event._result={index:1}; @@ -8310,11 +8380,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ - order:function (){ + order:function(){ return [2,4,6,8,10].randomGet(); }, result:{ - target:function (player,target){ + target:function(player,target){ return -2-target.countCards('h'); }, }, @@ -8381,11 +8451,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ viewAs:{ name:"shunshou", }, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return _status.event.targets&&_status.event.targets.contains(target)&&lib.filter.filterTarget.apply(this,arguments); }, prompt:"将一张手牌当顺手牵羊使用", - check:function (card){return 7-get.value(card)}, + check:function(card){return 7-get.value(card)}, onuse:function(links,player){player.addTempSkill('xinfu_sidaoy')}, }, xinfu_sidaoy:{}, @@ -8399,10 +8469,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return target!=player; }, - content:function (){ + content:function(){ 'step 0' event.cards=get.cards(1); player.showCards(get.translation(player)+'对'+get.translation(target)+'发动了【图南】',event.cards); @@ -8462,7 +8532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:"phaseDiscardBegin", }, audio:'xinfu_bijing', - filter:function (event,player){ + filter:function(event,player){ if(event.player==player) return false; return player.getHistory('lose',function(evt){ for(var i in evt.gaintag_map){ @@ -8487,7 +8557,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return card.hasGaintag('xinfu_bijing'); }).length>0; }, - content:function (){ + content:function(){ player.discard(player.getCards('h',function(card){ return card.hasGaintag('xinfu_bijing'); })); @@ -8499,10 +8569,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseJieshuBegin", }, direct:true, - filter:function (player,event){ + filter:function(player,event){ return event.countCards('h')>0; }, - content:function (){ + content:function(){ 'step 0' player.chooseCard(get.prompt2('xinfu_bijing'),'h').set('ai',function(card){ if(card.name=='shan') return 6; @@ -8521,7 +8591,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:["damageEnd","phaseJieshuBegin"], }, direct:true, - content:function (){ + content:function(){ 'step 0' player.chooseControl('一张','两张','三张','cancel2').set('prompt',get.prompt2('xinfu_zhenxing')).set('',function(){return 0}); 'step 1' @@ -8626,7 +8696,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ dis:{ mod:{ - maxHandcard:function (player,num){ + maxHandcard:function(player,num){ return num-2; }, }, @@ -8640,7 +8710,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ global:"phaseDiscardBegin", }, - filter:function (event,player){ + filter:function(event,player){ if(player.storage.xinfu_qianxin2!=event.player) return false; if(!player.storage.xinfu_qianxin) return false; var hs=event.player.getCards('h'); @@ -8655,7 +8725,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return false; }, - content:function (){ + content:function(){ 'step 0' delete player.storage.xinfu_qianxin2; if(player.countCards('h')>=4){ @@ -8693,18 +8763,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:"已指定过#个目标", }, enable:"phaseUse", - filter:function (event,player){ + filter:function(event,player){ if(player.hasSkill('xinfu_fuhai_next')&&player.hasSkill('xinfu_fuhai_previous')) return false; return player.countCards('h')>0; }, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ if(![player.next,player.previous].contains(target)||target.countCards('h')==0) return false; if(player.hasSkill('xinfu_fuhai_next')) return target==player.previous; if(player.hasSkill('xinfu_fuhai_previous')) return target==player.next; return true; }, line:false, - content:function (){ + content:function(){ 'step 0' event.side=target==player.next?'next':'previous'; event.current=target; @@ -8794,16 +8864,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, silent:true, popup:false, - filter:function (event,player){ + filter:function(event,player){ return player.storage.xinfu_fuhai!=undefined; }, - content:function (){ + content:function(){ player.unmarkSkill('xinfu_fuhai'); delete player.storage.xinfu_fuhai; }, }, "xz_xunxun":{ - filter:function (event,player){ + filter:function(event,player){ var num=game.countPlayer(function(current){ return current.isDamaged(); }); @@ -8814,7 +8884,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseDrawBegin1", }, //priority:10, - content:function (){ + content:function(){ "step 0" event.cards=get.cards(4); player.chooseCardButton(true,event.cards,2,'选择两张牌置于牌堆顶').set('ai',ai.get.buttonValue); @@ -8839,7 +8909,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:["xz_xunxun","xinfu_xingzhao2"], mark:true, intro:{ - content:function (storage,player){ + content:function(storage,player){ var num=game.countPlayer(function(current){ return current.isDamaged(); }) @@ -8860,14 +8930,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"useCard", }, forced:true, - filter:function (event,player){ + filter:function(event,player){ if(get.type(event.card)!='equip') return false; var num=game.countPlayer(function(current){ return current.isDamaged(); }); return num>=2; }, - content:function (){ + content:function(){ player.draw(); }, }, @@ -8877,13 +8947,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseDiscardBefore", }, forced:true, - filter:function (event,player){ + filter:function(event,player){ var num=game.countPlayer(function(current){ return current.isDamaged(); }); return num>=3; }, - content:function (){ + content:function(){ trigger.cancel(); game.log(player,'跳过了弃牌阶段'); }, @@ -8895,10 +8965,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"enterGame", }, forced:true, - filter:function (){ + filter:function(){ return game.players.length>1; }, - content:function (){ + content:function(){ 'step 0' player.chooseTarget('选择【点虎】的目标',lib.translate.xinfu_dianhu_info,true,function(card,player,target){ return target!=player&&!target.hasSkill('xinfu_dianhu2'); @@ -8928,13 +8998,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, popup:false, - filter:function (event,player){ + filter:function(event,player){ if(player.storage.xinfu_dianhu2&&player.storage.xinfu_dianhu2.isIn()){ if(event.name=='damage') return event.source==player.storage.xinfu_dianhu2; return true; }; }, - content:function (){ + content:function(){ 'step 0' var target=player.storage.xinfu_dianhu2; target.logSkill('xinfu_dianhu'); @@ -8946,10 +9016,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return target!=player; }, - content:function (){ + content:function(){ 'step 0' target.draw(); 'step 1' @@ -8980,7 +9050,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"useCardToPlayered", }, frequent:true, - filter:function (event,player){ + filter:function(event,player){ if(!event.targets||!event.targets.length|| event.getParent().triggeredTargets3.length>1||!event.isPhaseUsing(player)) return false; var evt=player.getLastUsed(1); @@ -8990,7 +9060,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return false; }, - content:function (){ + content:function(){ 'step 0' player.draw(); 'step 1' @@ -9178,6 +9248,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pengyang:'彭羕(184年-220年),字永年,广汉(今四川广汉北)人。东汉末年官吏。彭羕起初在益州任书佐,但后来其他人向益州牧刘璋诽谤他,刘璋于是以“髡钳”(剃去头发和胡须,并戴上刑具)处罚他,并且贬奴隶。此时刘备入蜀,彭羕想投靠刘备,于是去见庞统。庞统和他会面后很欣赏他,而法正亦很清楚彭羕,于是二人共同向刘备推荐彭羕。刘备多次命令彭羕传递军情和指示给诸将,表现都十分满意,日渐被赏识。刘备入主益州,领益州牧后就任命他为治州从事。彭羕见此,又变得嚣张自矜,诸葛亮对他礼待但心中并不喜欢他,多次密告刘备,说彭羕“心大志广,难可保安”。刘备见诸葛亮这样说,决定疏远彭羕,又观察他行事,于是贬他为江阳太守。彭羕见将被派往外地,心感不悦,与马超见面时又曾对他说“老革荒悖,可复道邪!”“卿为其外,我为其内,天下不足定也。”马超听后大惊,彭羕走后以他的说话告发彭羕,彭羕于是被收监下狱。最后彭羕被处死,死时三十七岁。', huaxin:'华歆(157年-232年1月30日),字子鱼,汉族。平原郡高唐县人(今山东省高唐县)。汉末至三国曹魏初年名士、重臣。华歆早年拜太尉陈球为师,与卢植、郑玄、管宁等为同门,又与管宁、邴原共称一龙,华歆为龙头。汉灵帝时华歆被举为孝廉,任郎中,因病去官。又被大将军何进征召为尚书郎。后任豫章太守,甚得民心。孙策率军南下,华歆举郡投降,被奉为上宾。官渡之战时,被征为议郎、参司空军事。入为尚书、侍中,又代荀彧为尚书令。丞相曹操讨孙权时,授华歆为军师。后为魏王国的御史大夫。曹丕即王位,拜华歆为相国,封安乐乡侯。曹魏建立后,其相国职名改称司徒。魏明帝即位,升任太尉,晋封博平侯。太和五年十二月(232年1月),华歆去世,年七十五,谥号“敬”。有文集三十卷,今佚失,其余见《全三国文》。', luyusheng:'陆郁生(?年-?),三国时期吴国官员陆绩之女。陆郁生的父亲陆绩是吴郡公认的才子,又是当时吴郡陆氏的领袖。陆绩赴任担任郁林太守,遂取此名。陆郁生年少的时候就定下坚贞的志向。建安二十四年(219年),陆绩早亡,她与两个兄弟陆宏、陆睿当时都只有几岁,一起返回吴县,被他们的从兄陆瑁接回抚养。13周岁的陆郁生嫁给同郡出身的张白为妻。出嫁3个月后,张白因为其兄张温一族的案件遭到连坐,被处以流刑,后死于流放地,陆郁生成为了寡妇,其后公开宣言不再改嫁,困难于生计但拒绝了所有提亲,在艰苦中从未停止服侍、照顾张白的姐妹。事情传到朝廷,皇帝褒奖陆郁生,号其为“义姑”。她的表侄姚信在文集中称赞她的义举。', + dongxie:'董卓之女,牛辅之妻。在《三国群英传》中名为董宜,在电视剧《三国群英会之吕布与貂蝉》中名为董媛。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -9498,11 +9569,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liji_info:'出牌阶段限X次,你可以弃置一张牌并对一名其他角色造成1点伤害。(X为本回合内进入过弃牌堆的卡牌数除以8,若场上人数小于5则改为除以4,向下取整)', re_sunluyu:'孙鲁育', remeibu:'魅步', - remeibu_info:'其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌,令该角色于本阶段内拥有〖止息〗。', + remeibu_info:'其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌A,该角色于本阶段内拥有〖止息〗,且当其因〖止息〗弃置与牌A花色相同的牌时,你获得之。', rezhixi:'止息', rezhixi_info:'锁定技,当你使用【杀】或普通锦囊牌时,你弃置一张手牌。', remumu:'穆穆', - remumu_info:'出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌,然后你本回合可使用【杀】的次数+1;2.获得一名角色装备区里的一张防具牌,然后你本回合可使用【杀】的次数-1。', + remumu_info:'出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌,然后你本回合可使用【杀】的次数+1;2.获得一名角色装备区里的一张牌,然后你本回合可使用【杀】的次数-1。', sp_zhangliao:'SP张辽', //这仨技能给SP仲村由理毫无违和感好吗!!! mubing:'募兵', @@ -9720,7 +9791,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qingtan:'清谈', qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中花色唯一最多的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。', qiuliju:'丘力居', - koulve:'宼略', + koulve:'寇略', koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其一张手牌。若此牌:为带有伤害标签的基本牌或锦囊牌,则你获得之;为红色牌,你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', qljsuiren:'随认', qljsuiren_info:'当你死亡时,你可以将手牌中所有的带有伤害标签的基本牌或锦囊牌交给一名其他角色。', @@ -9746,6 +9817,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiwei2:'至微', zhiwei_info:'游戏开始时/你的回合开始时,若场上没有因此法被选择过的角色存活,则你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。', zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ', + re_zoushi:'邹氏', + rehuoshui:'祸水', + rehuoshui_info:'准备阶段,你可以令至多X名角色的非锁定技无效直到回合结束(X为你已损失的体力值且至少为1)。', + reqingcheng:'倾城', + reqingcheng_info:'出牌阶段限一次,你可以与一名手牌数小于你的男性角色交换手牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -9760,6 +9836,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xuzhou:'徐州风云', sp_caizijiaren:'才子佳人', sp_qihuan:'戚宦之争', + sp_zhongyuan:'中原狼烟', sp_decade:'其他新服武将', }, }; diff --git a/character/standard.js b/character/standard.js index 146ef25a5..181ea88f5 100755 --- a/character/standard.js +++ b/character/standard.js @@ -363,7 +363,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.suit(card)=='heart') return -2; return 2; - }) + }).judge2=function(result){ + return result.bool; + }; "step 1" if(result.judge<2){ event.finish();return; @@ -410,7 +412,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.suit(card)=='heart') return -2; return 2; - }) + }).judge2=function(result){ + return result.bool; + }; "step 3" if(result.judge<2){ event.finish();return; @@ -623,6 +627,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.color(card)=='black') return 1.5; return -1.5; }); + next.judge2=function(result){ + return result.bool; + }; if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){ if(event.judgeResult.color=='black'&&get.position(card,true)=='o') player.gain(card,'gain2'); }); @@ -667,7 +674,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(function(card){ if(get.color(card)=='black') return 1.5; return -1.5; - },ui.special); + },ui.special).judge2=function(result){ + return result.bool; + }; "step 1" if(result.judge>0){ event.cards.push(result.card); @@ -1592,7 +1601,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.color(card)=='red') return 2; } return -0.5; - }); + }).judge2=function(result){ + return result.bool; + }; "step 1" if(result.bool){ trigger.getParent().directHit.add(trigger.target); diff --git a/character/xianjian.js b/character/xianjian.js index e6b1f8a68..e4029063c 100644 --- a/character/xianjian.js +++ b/character/xianjian.js @@ -92,7 +92,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ animationColor:'water', unique:true, filter:function(event,player){ - return game.roundNumber>=3&&player.countUsed()>player.hp; + return game.roundNumber>=3&&player.getHistory('useCard').length>player.hp; }, content:function(){ 'step 0' diff --git a/character/yijiang.js b/character/yijiang.js index d79380cd4..f20d40e54 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -373,7 +373,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(function(card){ return get.color(card)=='black'?1:-1; - }); + }).judge2=function(result){ + return result.bool; + }; 'step 1' if(result.bool&&player.maxHp>player.hp){ var cards=get.cards(player.maxHp-player.hp); @@ -423,7 +425,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(function(card){ return get.suit(card)!='heart'?1:-1; - }); + }).judge2=function(result){ + return result.bool; + }; 'step 1' if(result.bool){ trigger.cancel(); @@ -5024,7 +5028,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.target.judge(function(card){ if(get.color(card)=='red') return -1; return 0; - }); + }).judge2=function(result){ + return result.bool==false?true:false; + }; } 'step 2' if(result.color=='red') trigger.directHit.add(trigger.target); @@ -6620,7 +6626,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 4' if(result&&result.cards){ event.card=result.cards[0]; - event.current.lose(result.cards,ui.cardPile,'visible','insert'); + event.current.lose(result.cards,ui.cardPile,'insert'); game.broadcastAll(function(player){ var cardx=ui.create.card(); cardx.classList.add('infohidden'); @@ -8932,7 +8938,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.dingpin.push(get.type(cards[0],'trick')); target.judge(function(card){ return get.color(card)=='black'?1:-1; - }); + }).judge2=function(result){ + return result.bool; + }; "step 1" if(result.bool){ target.draw(target.maxHp-target.hp); @@ -12082,7 +12090,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wuguotai:['re_wuguotai','wuguotai'], lingtong:['xin_lingtong','re_lingtong','lingtong','old_lingtong'], gaoshun:['gaoshun','re_gaoshun'], - zhonghui:['re_zhonghui','zhonghui','old_zhonghui'], + zhonghui:['re_zhonghui','xin_zhonghui','zhonghui','old_zhonghui'], wangyi:['wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], guanzhang:['guanzhang','old_guanzhang'], @@ -12122,7 +12130,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guotufengji:['re_guotufengji','guotufengji'], guanping:['re_guanping','guanping'], caifuren:['xin_caifuren','re_caifuren','caifuren'], - guyong:['xin_guyong','guyong'], + guyong:['re_guyong','xin_guyong','guyong'], }, translate:{ old_huaxiong:'华雄', diff --git a/game/asset.js b/game/asset.js index d0d60661a..45bb74f20 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.8.6', + 'v1.9.110.9.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4374,6 +4374,9 @@ window.noname_asset_list=[ 'image/character/xin_caifuren.jpg', 'image/character/xin_guyong.jpg', 'image/character/zhangzhongjing.jpg', + 'image/character/re_guyong.jpg', + 'image/character/re_zoushi.jpg', + 'image/character/xin_zhonghui.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 573168ee4..ac353e7b8 100644 --- a/game/game.js +++ b/game/game.js @@ -6646,8 +6646,8 @@ globalId:0, }, help:{ - '游戏操作':'
    • 长按/鼠标悬停/右键单击显示信息
    • 触屏模式中,双指点击切换暂停;下划显示菜单,上划切换托管
    • 键盘快捷键
      '+ - '
      A切换托管
      W切换不询问无懈
      空格暂停
    • 编辑牌堆
      在卡牌包中修改牌堆后,将自动创建一个临时牌堆,在所有模式中共用,当保存当前牌堆后,临时牌堆被清除。每个模式可设置不同的已保存牌堆,设置的牌堆优先级大于临时牌堆
    ', + '游戏操作':'
    • 长按/鼠标悬停/右键单击显示信息。
    • 触屏模式中,双指点击切换暂停;下划显示菜单,上划切换托管。
    • 键盘快捷键
      '+ + '
      A切换托管
      W切换不询问无懈
      空格暂停
    • 编辑牌堆
      在卡牌包中修改牌堆后,将自动创建一个临时牌堆,在所有模式中共用,当保存当前牌堆后,临时牌堆被清除。每个模式可设置不同的已保存牌堆,设置的牌堆优先级大于临时牌堆。
    ', '游戏命令':'
    变量名
    • 场上角色
      game.players
    • 阵亡角色
      game.dead'+ '
    • 玩家
      game.me
    • 玩家的上/下家
      game.me.previous/next'+ '
    • 玩家的上/下家(含阵亡)
      game.me.previousSeat/
      nextSeat'+ @@ -6662,10 +6662,10 @@ '
    • 角色资料
      lib.character
    • 卡牌资料
      lib.card
    ', '游戏名词':'
    • 智囊:无名杀默认为过河拆桥/无懈可击/无中生有/洞烛先机。牌堆中没有的智囊牌会被过滤。可在卡牌设置中自行增减。若没有可用的智囊,则改为随机选取的三种锦囊牌的牌名。'+ '
    • 仁库:部分武将使用的游戏外共通区域。至多包含六张牌。当有新牌注入后,若牌数超过上限,则将最早进入仁库的溢出牌置入弃牌堆。'+ - '
    • 护甲:和体力类似,每点护甲可抵挡一点伤害,但不影响手牌上限'+ - '
    • 随从:通过技能获得,拥有独立的技能、手牌区和装备区(共享判定区),出场时替代主武将的位置;随从死亡时自动切换回主武将'+ - '
    • 发现:从三张随机亮出的牌中选择一张,若无特殊说明,则获得此牌'+ - '
    • 蓄力技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍' + '
    • 护甲:和体力类似,每点护甲可抵挡一点伤害,但不影响手牌上限。'+ + '
    • 随从:通过技能获得,拥有独立的技能、手牌区和装备区(共享判定区),出场时替代主武将的位置;随从死亡时自动切换回主武将。'+ + '
    • 发现:从三张随机亮出的牌中选择一张,若无特殊说明,则获得此牌。'+ + '
    • 蓄力技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。' }, setIntro:function(node,func,left){ if(lib.config.touchscreen){ @@ -16194,12 +16194,10 @@ else event.result.bool=null; player.judging.shift(); game.checkMod(player,event.result,'judge',player); - if(event.result.bool==true){ - player.popup('洗具'); - } - else if(event.result.bool==false){ - player.popup('杯具'); - } + if(event.judge2){ + var judge2=event.judge2(event.result); + if(typeof judge2=='boolean') player.tryJudgeAnimate(judge2); + }; if(event.clearArena!=false){ game.broadcastAll(ui.clear); } @@ -16596,6 +16594,14 @@ },1200); },600); }, + tryJudgeAnimate:function(bool){ + var player=this; + game.broadcast(function(player,bool){ + player.trySkillAnimate(bool); + },player,bool); + if(bool) this.popup('判定生效','wood',false); + else this.popup('判定失效','fire',false); + }, trySkillAnimate:function(name,popname,checkShow){ if(!game.online&&lib.config.skill_animation_type!='off'&&lib.skill[name]&&lib.skill[name].skillAnimation){ if(lib.config.skill_animation_type=='default'){ @@ -17134,7 +17140,7 @@ } } this.maxHp=parseInt(config.number); - this.hp=info[3]; + this.hp=Math.min(this.maxHp,info[3]); if(this.hp'+this.hp+'/'+this.maxHp+''); @@ -20465,6 +20471,7 @@ } if(next.card&&next.judge==undefined){ next.judge=get.judge(next.card); + next.judge2=get.judge2(next.card); } if(next.judge==undefined) next.judge=function(){return 0}; if(next.position==undefined) next.position=ui.discardPile; @@ -44103,6 +44110,7 @@ // } ui.sortCard=ui.create.system('整理手牌',function(){ + if(!game.me) return; var hs=game.me.getCards('h'); if(!hs.length) return; game.addVideo('lose',game.me,[get.cardsInfo(hs),[],[],[]]); @@ -50023,16 +50031,16 @@ } else if(config.mode=='single'){ switch(config.single_mode){ - case 'normal':return '新1v1'; + case 'normal':return '新1v1'; case 'changban':return '血战长坂坡'; case 'dianjiang':return '点将单挑'; } } - else if(config.mode=='identity'&&config.identity_mode!='normal'){ + else if(config.mode=='identity'){ switch(config.identity_mode){ case 'purple':return '三对三对二'; case 'zhong':return (config.double_character?'双将':'')+'忠胆英杰'; - default:return (config.double_character?'双将':'')+get.cnNumber(parseInt(config.number))+'人身份'; + default:return get.cnNumber(parseInt(config.number))+'人'+(config.double_character?'双将':'')+'身份'; } } else if(config.mode=='guozhan'&&config.guozhan_mode!='normal'){ @@ -50877,6 +50885,10 @@ if(card.viewAs) return lib.card[card.viewAs].judge; return get.info(card).judge; }, + judge2:function(card){ + if(card.viewAs) return lib.card[card.viewAs].judge2; + return get.info(card).judge2; + }, distance:function(from,to,method){ if(from==to) return 0; if(!game.players.contains(from)&&!game.dead.contains(from)) return Infinity; diff --git a/game/update.js b/game/update.js index ea39cc66c..67971b47b 100644 --- a/game/update.js +++ b/game/update.js @@ -1,47 +1,48 @@ window.noname_update={ - version:'1.9.110.9', - update:'1.9.110.8.6.1', + version:'1.9.110.9.1', + update:'1.9.110.9', changeLog:[ - '联机服务器改版', + '界钟会,界顾雍,邹氏', + '诸葛果、孙鲁育技能调整', 'bug修复', ], files:[ - //'card/extra.js', + 'card/extra.js', //'card/gujian.js', //'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', //'card/sp.js', - //'card/standard.js', + 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - //'card/yingbian.js', + 'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', - //'character/extra.js', + 'character/diy.js', + 'character/extra.js', //'character/hearth.js', - //'character/gujian.js', + 'character/gujian.js', //'character/gwent.js', //'character/hearth.js', 'character/mobile.js', //'character/mtg.js', - //'character/offline.js', + 'character/offline.js', //'character/old.js', //'character/ow.js', - //'character/rank.js', - //'character/refresh.js', - //'character/shenhua.js', + 'character/rank.js', + 'character/refresh.js', + 'character/shenhua.js', 'character/sp.js', - //'character/sp2.js', + 'character/sp2.js', //'character/tw.js', - //'character/standard.js', + 'character/standard.js', //'character/swd.js', - //'character/xianjian.js', + 'character/xianjian.js', //'character/xinghuoliaoyuan.js', //'character/yingbian.js', - //'character/yijiang.js', + 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', 'layout/default/layout.css', @@ -51,11 +52,11 @@ window.noname_update={ //'mode/boss.js', //'mode/brawl.js', //'mode/chess.js', - 'mode/connect.js', + //'mode/connect.js', //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/guozhan.js', //'mode/identity.js', - //'mode/single.js', + 'mode/single.js', //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', diff --git a/image/character/re_guyong.jpg b/image/character/re_guyong.jpg new file mode 100644 index 000000000..32558f95a Binary files /dev/null and b/image/character/re_guyong.jpg differ diff --git a/image/character/re_zoushi.jpg b/image/character/re_zoushi.jpg new file mode 100644 index 000000000..629c8a40a Binary files /dev/null and b/image/character/re_zoushi.jpg differ diff --git a/image/character/xin_zhonghui.jpg b/image/character/xin_zhonghui.jpg new file mode 100644 index 000000000..f3181fcf4 Binary files /dev/null and b/image/character/xin_zhonghui.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index c4ee93164..e9990e9fd 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -538,6 +538,45 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //邹氏 + huoshui:{ + audio:2, + enable:'phaseUse', + unique:true, + forceunique:true, + filter:function(event,player){ + if(player.name1=='gz_zoushi') return player.isUnseen(0); + return player.isUnseen(1); + }, + content:function(){ + if(player.name1=='gz_zoushi') player.showCharacter(0); + else player.showCharacter(1); + }, + global:'huoshui_mingzhi' + }, + huoshui_mingzhi:{ + ai:{ + nomingzhi:true, + skillTagFilter:function(player){ + if(_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('huoshui')){ + return true; + } + return false; + } + } + }, + qingcheng:{ + audio:2, + }, + qingcheng_ai:{ + ai:{ + effect:{ + target:function(card){ + if(get.tag(card,'damage')) return 2; + } + } + } + }, //文聘 gzzhenwei:{ trigger:{player:'phaseDiscardBegin'}, @@ -5117,7 +5156,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ if(target.hp<=0) return -5; - if(player.getStat().skill.qingcheng) return 0; + if(player.getStat().skill.new_qingcheng) return 0; if(!target.hasSkillTag('maixie')) return 0; if(get.attitude(player,target)>=0) return 0; if(player.hasCard(function(card){ @@ -10438,6 +10477,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "new_luanji_info":"你可以将两张与你本回合以此法转化的花色均不相同的手牌当【万箭齐发】使用。当一名与你势力相同的角色因响应此牌而打出【闪】时,该角色摸一张牌。", "new_qingcheng":"倾城", "new_qingcheng_info":"出牌阶段,你可以弃置一张黑色牌并选择一名武将牌均明置的其他角色,然后你暗置其一张武将牌。若你以此法弃置的牌为装备牌,则你可以暗置另一名武将牌均明置的角色的一张武将牌。", + huoshui:'祸水', + huoshui_info:'出牌阶段,你可以明置此武将牌:你的回合内,若此武将牌处于明置状态,其他角色不能明置其武将牌。', "new_kongcheng":"空城", "new_kongcheng_info":"锁定技,若你没有手牌,1.当你成为【杀】或【决斗】的目标时,取消之;2.你的回合外,其他角色交给你牌后,你将这些牌置于你的武将牌上。摸牌阶段开始时,你获得武将牌上的这些牌。", "new_keji":"克己", diff --git a/mode/single.js b/mode/single.js index 768f8d530..0a946b604 100644 --- a/mode/single.js +++ b/mode/single.js @@ -355,11 +355,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).set('dialog',event.videoId); "step 4" game.me.init(result.links[0]); + game.addRecentCharacter(result.links[0]); game.me.chooseButton(true).set('ai',function(button){ return Math.random(); }).set('dialog',event.videoId); "step 5" game.me.next.init(result.links[0]); + game.addRecentCharacter(result.links[0]); setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500);