diff --git a/audio/die/clan_wanghun.mp3 b/audio/die/clan_wanghun.mp3 new file mode 100644 index 000000000..e740c6428 Binary files /dev/null and b/audio/die/clan_wanghun.mp3 differ diff --git a/audio/die/clan_wukuang.mp3 b/audio/die/clan_wukuang.mp3 new file mode 100644 index 000000000..3a3bbb4d1 Binary files /dev/null and b/audio/die/clan_wukuang.mp3 differ diff --git a/audio/die/clan_zhongyan.mp3 b/audio/die/clan_zhongyan.mp3 new file mode 100644 index 000000000..d32ad7e96 Binary files /dev/null and b/audio/die/clan_zhongyan.mp3 differ diff --git a/audio/die/dongxie.mp3 b/audio/die/dongxie.mp3 new file mode 100644 index 000000000..eb8c5502f Binary files /dev/null and b/audio/die/dongxie.mp3 differ diff --git a/audio/die/ol_wenqin.mp3 b/audio/die/ol_wenqin.mp3 new file mode 100644 index 000000000..bdd0a1bc7 Binary files /dev/null and b/audio/die/ol_wenqin.mp3 differ diff --git a/audio/die/peiyuanshao.mp3 b/audio/die/peiyuanshao.mp3 new file mode 100644 index 000000000..8268990d5 Binary files /dev/null and b/audio/die/peiyuanshao.mp3 differ diff --git a/audio/skill/clanbaozu_clan_zhongyan1.mp3 b/audio/skill/clanbaozu_clan_zhongyan1.mp3 new file mode 100644 index 000000000..770c9cf5b Binary files /dev/null and b/audio/skill/clanbaozu_clan_zhongyan1.mp3 differ diff --git a/audio/skill/clanbaozu_clan_zhongyan2.mp3 b/audio/skill/clanbaozu_clan_zhongyan2.mp3 new file mode 100644 index 000000000..197621315 Binary files /dev/null and b/audio/skill/clanbaozu_clan_zhongyan2.mp3 differ diff --git a/audio/skill/clanchenya1.mp3 b/audio/skill/clanchenya1.mp3 new file mode 100644 index 000000000..7e5d95e69 Binary files /dev/null and b/audio/skill/clanchenya1.mp3 differ diff --git a/audio/skill/clanchenya2.mp3 b/audio/skill/clanchenya2.mp3 new file mode 100644 index 000000000..7cd14cfce Binary files /dev/null and b/audio/skill/clanchenya2.mp3 differ diff --git a/audio/skill/clanfuxun1.mp3 b/audio/skill/clanfuxun1.mp3 new file mode 100644 index 000000000..1bd834c43 Binary files /dev/null and b/audio/skill/clanfuxun1.mp3 differ diff --git a/audio/skill/clanfuxun2.mp3 b/audio/skill/clanfuxun2.mp3 new file mode 100644 index 000000000..587d2678f Binary files /dev/null and b/audio/skill/clanfuxun2.mp3 differ diff --git a/audio/skill/clanguangu1.mp3 b/audio/skill/clanguangu1.mp3 new file mode 100644 index 000000000..ffceae1db Binary files /dev/null and b/audio/skill/clanguangu1.mp3 differ diff --git a/audio/skill/clanguangu2.mp3 b/audio/skill/clanguangu2.mp3 new file mode 100644 index 000000000..11d6e3d0d Binary files /dev/null and b/audio/skill/clanguangu2.mp3 differ diff --git a/audio/skill/clanlianzhu1.mp3 b/audio/skill/clanlianzhu1.mp3 new file mode 100644 index 000000000..73b642137 Binary files /dev/null and b/audio/skill/clanlianzhu1.mp3 differ diff --git a/audio/skill/clanlianzhu2.mp3 b/audio/skill/clanlianzhu2.mp3 new file mode 100644 index 000000000..d84b02560 Binary files /dev/null and b/audio/skill/clanlianzhu2.mp3 differ diff --git a/audio/skill/clanmuyin_clan_wukuang1.mp3 b/audio/skill/clanmuyin_clan_wukuang1.mp3 new file mode 100644 index 000000000..3e15f3246 Binary files /dev/null and b/audio/skill/clanmuyin_clan_wukuang1.mp3 differ diff --git a/audio/skill/clanmuyin_clan_wukuang2.mp3 b/audio/skill/clanmuyin_clan_wukuang2.mp3 new file mode 100644 index 000000000..57974fc38 Binary files /dev/null and b/audio/skill/clanmuyin_clan_wukuang2.mp3 differ diff --git a/audio/skill/clanxiaoyong1.mp3 b/audio/skill/clanxiaoyong1.mp3 new file mode 100644 index 000000000..2692a8652 Binary files /dev/null and b/audio/skill/clanxiaoyong1.mp3 differ diff --git a/audio/skill/clanxiaoyong2.mp3 b/audio/skill/clanxiaoyong2.mp3 new file mode 100644 index 000000000..81ed8ede9 Binary files /dev/null and b/audio/skill/clanxiaoyong2.mp3 differ diff --git a/audio/skill/clanzhongliu_clan_wanghun1.mp3 b/audio/skill/clanzhongliu_clan_wanghun1.mp3 new file mode 100644 index 000000000..53f920c82 Binary files /dev/null and b/audio/skill/clanzhongliu_clan_wanghun1.mp3 differ diff --git a/audio/skill/clanzhongliu_clan_wanghun2.mp3 b/audio/skill/clanzhongliu_clan_wanghun2.mp3 new file mode 100644 index 000000000..720e9c7a3 Binary files /dev/null and b/audio/skill/clanzhongliu_clan_wanghun2.mp3 differ diff --git a/audio/skill/dchumei1.mp3 b/audio/skill/dchumei1.mp3 new file mode 100644 index 000000000..9a6e40f04 Binary files /dev/null and b/audio/skill/dchumei1.mp3 differ diff --git a/audio/skill/dchumei2.mp3 b/audio/skill/dchumei2.mp3 new file mode 100644 index 000000000..47dc6de1e Binary files /dev/null and b/audio/skill/dchumei2.mp3 differ diff --git a/audio/skill/dcjiaoxia1.mp3 b/audio/skill/dcjiaoxia1.mp3 new file mode 100644 index 000000000..9eb9ed12f Binary files /dev/null and b/audio/skill/dcjiaoxia1.mp3 differ diff --git a/audio/skill/dcjiaoxia2.mp3 b/audio/skill/dcjiaoxia2.mp3 new file mode 100644 index 000000000..5b3e56669 Binary files /dev/null and b/audio/skill/dcjiaoxia2.mp3 differ diff --git a/audio/skill/dcmoyu1.mp3 b/audio/skill/dcmoyu1.mp3 new file mode 100644 index 000000000..798caa605 Binary files /dev/null and b/audio/skill/dcmoyu1.mp3 differ diff --git a/audio/skill/dcmoyu2.mp3 b/audio/skill/dcmoyu2.mp3 new file mode 100644 index 000000000..a9b7567a3 Binary files /dev/null and b/audio/skill/dcmoyu2.mp3 differ diff --git a/audio/skill/olguangao1.mp3 b/audio/skill/olguangao1.mp3 new file mode 100644 index 000000000..d4354bf3d Binary files /dev/null and b/audio/skill/olguangao1.mp3 differ diff --git a/audio/skill/olguangao2.mp3 b/audio/skill/olguangao2.mp3 new file mode 100644 index 000000000..b477639a0 Binary files /dev/null and b/audio/skill/olguangao2.mp3 differ diff --git a/audio/skill/olhuiqi1.mp3 b/audio/skill/olhuiqi1.mp3 new file mode 100644 index 000000000..d9f84c4fc Binary files /dev/null and b/audio/skill/olhuiqi1.mp3 differ diff --git a/audio/skill/olhuiqi2.mp3 b/audio/skill/olhuiqi2.mp3 new file mode 100644 index 000000000..2d68a6ae1 Binary files /dev/null and b/audio/skill/olhuiqi2.mp3 differ diff --git a/audio/skill/olxieju1.mp3 b/audio/skill/olxieju1.mp3 new file mode 100644 index 000000000..9655e514a Binary files /dev/null and b/audio/skill/olxieju1.mp3 differ diff --git a/audio/skill/olxieju2.mp3 b/audio/skill/olxieju2.mp3 new file mode 100644 index 000000000..11758552f Binary files /dev/null and b/audio/skill/olxieju2.mp3 differ diff --git a/character/clan.js b/character/clan.js index e5683048d..9ef8ceb95 100644 --- a/character/clan.js +++ b/character/clan.js @@ -898,6 +898,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:'clanlianzhu_global', subSkill:{ global:{ + forceaudio:true, + audio:'clanlianzhu', enable:'phaseUse', filter:(event,player)=>game.hasPlayer(current=>lib.skill.clanlianzhu_global.filterTarget(null,player,current)), filterCard:(card,player)=>game.hasPlayer(current=>current.hasSkill('clanlianzhu')&&!current.hasSkill('clanlianzhu_targeted')&&!current.storage.clanlianzhu)&&player.canRecast(card), @@ -2026,6 +2028,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 6-ui.selected.cards.length-get.value(card); }, onuse:function(links,player){ + lib.skill.chenliuwushi.change(player,-1); player.addTempSkill('clanzhanding_effect'); }, ai:{ @@ -2044,7 +2047,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.skill=='clanzhanding'; }, content:function(){ - lib.skill.chenliuwushi.change(player,-1); if(player.hasHistory('sourceDamage',function(evt){ return evt.card==trigger.card; })){ @@ -2283,7 +2285,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chenliuwushi:'陈留·吴氏', clan_wuban:'族吴班', clanzhanding:'斩钉', - clanzhanding_info:'你可以将任意张牌当做【杀】使用。你以此法使用的【杀】结算结束后,你令你的手牌上限-1,然后若你因此【杀】造成过伤害,则你将手牌摸至手牌上限(至多摸五张),否则你令此【杀】不计入次数限制。', + clanzhanding_info:'你可以将任意张牌当做【杀】使用并你令你的手牌上限-1。你以此法使用的【杀】结算结束后,若你因此【杀】造成过伤害,则你将手牌摸至手牌上限(至多摸五张),否则你令此【杀】不计入次数限制。', clan_xunshu:'族荀淑', clanshenjun:'神君', clanshenjun_info:'当一名角色使用【杀】或普通锦囊牌时,若你手牌中有该牌名的牌,你展示之,且这些牌称为“神君”。然后本阶段结束时,你可以将等同于你“神君”数张牌当做一张“神君”牌使用。', diff --git a/character/extra.js b/character/extra.js index 966ca1dbb..664cfd768 100755 --- a/character/extra.js +++ b/character/extra.js @@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_mobilezhi:['shen_guojia','shen_xunyu'], extra_mobilexin:['shen_taishici','shen_sunce'], extra_tw:['tw_shen_guanyu','tw_shen_lvmeng'], - extra_offline:['shen_diaochan','boss_zhaoyun'], + extra_offline:['shen_diaochan','boss_zhaoyun','shen_dianwei'], }, }, character:{ @@ -2829,7 +2829,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.control!='cancel2'){ if(result.control=='选项二'){ - player.logSkill('tspowei',target); + player.logSkill('tspowei_use',target); player.gainPlayerCard(target,'h',true); event.goto(3); } diff --git a/character/huicui.js b/character/huicui.js index 50809121b..6f4937a63 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -11,9 +11,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangkai:['male','qun',4,['dcxiangshu']], gaoxiang:['male','shu',4,['dcchiying'],['unseen']], yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']], - dongwan:['female','qun',3,['dcshengdu','dcjieling'],['unseen']], + dongwan:['female','qun',3,['dcshengdu','dcjieling']], zhangchu:['female','qun',3,['dcjizhong','dcrihui','dcguangshi']], - peiyuanshao:['male','qun',4,['dcmoyu'],['unseen']], + peiyuanshao:['male','qun',4,['dcmoyu']], mengjie:['male','qun',3,['dcyinlu','dcyouqi']], dc_huojun:['male','shu',4,['dcgue','dcsigong']], dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu']], @@ -885,12 +885,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToUse(function(card,player,event){ if(get.name(card)!='sha') return false; return lib.filter.filterCard.apply(this,arguments); - },'是否对'+get.translation(player)+'使用一张【杀】(伤害基数为'+num+')?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + },'是否对'+get.translation(player)+'使用一张无距离限制的【杀】(伤害基数为'+num+')?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; - return lib.filter.filterTarget.apply(this,arguments); + return lib.filter.targetEnabled.apply(this,arguments); }).set('sourcex',player).set('num',num).set('oncard',card=>{ - var evt=_status.event; - evt.baseDamage=evt.num; + _status.event.baseDamage=_status.event.getParent().num; }); 'step 2' if(result.bool){ @@ -904,7 +903,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, onremove:true, }, - ban:{charlotte:true}, + ban:{ + charlotte:true, + mark:true, + marktext:'欲', + intro:{content:'偷马贼被反打了!'}, + }, ai:{ ai:{ effect:{ @@ -937,7 +941,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target:player, card:{name:'sha'}, },true)) return eff; - if(player.getStorage('dcmoyu_clear').length||player.hp+player.countCards('hs','tao')<=1) return 0; + if(target.hasSha()&&player.hp+player.countCards('h',function(card){ + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,player,'unchanged','cardSavable',player); + if(mod!='unchanged') return mod; + var savable=get.info(card).savable; + if(typeof savable=='function') savable=savable(card,player,player); + return savable; + })<=player.getStorage('dcmoyu_clear').length+1) return 0; return eff; } } @@ -1148,16 +1160,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetInRange:function(card){ if(card.storage&&card.storage.dcjieling) return true; }, + cardUsable:function(card,player,num){ + if(card.storage&&card.storage.dcjieling) return Infinity; + }, }, subSkill:{ after:{ - trigger:{global:'useCardAfter'}, - forced:true, - direct:true, charlotte:true, + audio:'dcjieling', + trigger:{global:'useCardAfter'}, filter:function(event,player){ return event.card.name=='sha'&&event.card.storage&&event.card.storage.dcjieling; }, + direct:true, content:function(){ 'step 0' var damaged=game.hasPlayer2(current=>{ @@ -10197,7 +10212,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcsigong_info:'其他角色的回合结束时,若其于本回合内使用牌被响应过,你可以将手牌摸至或弃置至1,视为对其使用一张需使用X张【闪】抵消的【杀】,且此【杀】的伤害基数+1(X为你以此法弃置的牌数且至少为1)。当你以此法造成伤害后,该技能于本轮失效。', peiyuanshao:'裴元绍', dcmoyu:'没欲', - dcmoyu_info:'出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张【杀】,且此【杀】伤害基数为X(X为你于本回合发动此技能的次数)。若此【杀】对你造成了伤害,你令此技能于本回合失效。', + dcmoyu_info:'出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张无距离限制的【杀】,且此【杀】伤害基数为X(X为你于本回合发动此技能的次数)。若此【杀】对你造成了伤害,你令此技能于本回合失效。', zhangchu:'张楚', dcjizhong:'集众', dcjizhong_info:'出牌阶段限一次。你可以令一名其他角色摸两张牌,然后其选择一项:1.若其没有“信众”标记,其获得“信众”标记;2.弃置三张手牌。', diff --git a/character/mobile.js b/character/mobile.js index 778fb69e2..b5f31c60d 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -7920,6 +7920,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:3, enable:'phaseUse', usable:1, + filter:function(event,player){ + return game.hasPlayer(function(target){ + return lib.skill.beizhu.filterTarget(null,player,target); + }); + }, filterTarget:function(card,player,target){ return target!=player&&target.countCards('h')>0; }, @@ -7933,12 +7938,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.cards=cards; event.goto(5); } - else player.discardPlayerCard('he',target,true); + else player.discardPlayerCard('he',target,'visible',true); 'step 2' - player.chooseBool('是否令'+get.translation(target)+'获得一张【杀】?').set('ai',function(){ - var evt=_status.event.getParent(); - return get.attitude(evt.player,evt.target)>0; - }); + player.chooseBool('是否令'+get.translation(target)+'获得一张【杀】?').set('choice',get.attitude(player,target)>0); 'step 3' if(result.bool){ var card=get.cardPile2(function(card){ @@ -7965,6 +7967,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.redo(); } }, + ai:{ + order:7, + threaten:1.14+5.14, + result:{ + player:function(player,target){ + var eff=get.effect(target,{name:'guohe_copy2'},player,player); + var cards=target.getCards('h',{name:'sha'}); + if(!cards.length) return eff; + return eff/(cards.length+3); + }, + }, + }, }, beizhu_draw:{ trigger:{player:'damageEnd'}, diff --git a/character/sp.js b/character/sp.js index 69287cc32..3f6286392 100755 --- a/character/sp.js +++ b/character/sp.js @@ -9038,7 +9038,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var type=get.type(trigger.card,false); player.chooseToDiscard('h',get.prompt('olfengzi'),'弃置一张'+get.translation(type)+'牌,令'+get.translation(trigger.card)+'结算两次',function(card,player){ return get.type2(card,player)==_status.event.type; - }).set('type',type).set('ai',()=>-1).logSkill='olfengzi'; + }).set('type',type).set('ai',function(card){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + if(trigger.card.name=='tiesuo') return 0; + var num=0; + for(var i of trigger.targets) num+=get.effect(i,trigger.card,player,player); + if(num<=0) return 0; + return 7-get.value(card); + }).logSkill='olfengzi'; 'step 1' if(result.bool){ trigger.effectCount++; diff --git a/character/sp2.js b/character/sp2.js index 55591f96f..ddfd92a93 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -51,7 +51,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhaozhong:['male','qun',6,['yangzhong','huangkong']], hanfu:['male','qun',4,['hfjieying','weipo']], re_quyi:['male','qun',4,['refuqi','jiaozi']], - dongxie:['female','qun','3/4',['juntun','jiaojie']], + dongxie:['female','qun',4,['dcjiaoxia','dchumei']], wangrong:['female','qun',3,['minsi','jijing','zhuide']], ol_dingyuan:['male','qun',4,['cixiao','xianshuai']], xin_baosanniang:['female','shu',3,['decadewuniang','decadexushen']], @@ -111,6 +111,173 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //董翓 + dcjiaoxia:{ + mod:{ + cardUsableTarget:function(card,player,target){ + if(!player.isPhaseUsing()) return; + if(card.name=='sha'&&!player.getStorage('dcjiaoxia_mark').contains(target)) return true; + }, + }, + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return player.countCards('h'); + }, + check:function(event,player){ + return player.countCards('h',card=>{ + return game.hasPlayer(target=>{ + var cardx=get.autoViewAs({name:'sha'},[card]); + return player.canUse(cardx,target)&&get.effect(target,cardx,player,player)>0&&(!player.hasUseTarget(card)||player.hasValueTarget(card)); + }); + }); + }, + content:function(){ + var cards=player.getCards('h'); + player.addTempSkill('dcjiaoxia_used','phaseUseAfter'); + player.addGaintag(cards,'dcjiaoxia_used'); + }, + group:'dcjiaoxia_load', + subSkill:{ + load:{ + charlotte:true, + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(!player.isPhaseUsing()) return false; + return event.card.name=='sha'&&event.targets&&event.targets.some(target=>!player.getStorage('dcjiaoxia_mark').contains(target)); + }, + forced:true, + popup:false, + firstDo:true, + content:function(){ + player.addTempSkill('dcjiaoxia_mark','phaseUseAfter'); + player.markAuto('dcjiaoxia_mark',trigger.targets.filter(target=>!player.getStorage('dcjiaoxia_mark').contains(target))); + }, + }, + mark:{ + charlotte:true, + onremove:true, + }, + used:{ + mod:{ + aiOrder:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('dcjiaoxia_used')) return num+1; + }, + cardname:function(card,player){ + if(get.itemtype(card)=='card'&&card.hasGaintag('dcjiaoxia_used')) return 'sha'; + }, + }, + charlotte:true, + onremove:function(player){ + player.removeGaintag('dcjiaoxia_used'); + }, + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return event.cards&&event.cards.length==1&&player.hasUseTarget(get.copy(event.cards[0]))&&player.getHistory('lose',evt=>{ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('dcjiaoxia_used')) return true; + } + return false; + }).length&&player.getHistory('sourceDamage',evt=>evt.card==event.card).length; + }, + direct:true, + content:function(){ + var card=get.copy(trigger.cards[0]); + player.chooseUseTarget(card,get.prompt('dcjiaoxia'),false,false).set('prompt2','视为使用'+get.translation(card)).logSkill='dcjiaoxia'; + }, + }, + }, + }, + dchumei:{ + subSkill:{ + 0:{charlotte:true}, + 1:{charlotte:true}, + 2:{charlotte:true}, + }, + onChooseToUse:function(event){ + if(!game.online&&!event.dchumei_num){ + var player=event.player; + var evtx=event.getParent('phaseUse'); + event.set('dchumei_num',player.getHistory('sourceDamage',function(evt){ + return evt.getParent('phaseUse')==evtx; + }).length); + } + }, + audio:2, + enable:'phaseUse', + filter:function(event,player){ + if(typeof event.dchumei_num!='number') return false; + return game.hasPlayer(target=>lib.skill.dchumei.filterTarget(null,player,target)); + }, + filterTarget:function(card,player,target){ + if(target.getHp()>_status.event.dchumei_num) return false; + if(!player.hasSkill('dchumei_0')) return true; + if(!player.hasSkill('dchumei_1')&&target.countCards('he')) return true; + if(!player.hasSkill('dchumei_2')&&target.isDamaged()) return true; + return false; + }, + content:function(){ + 'step 0' + var str=get.translation(target); + player.chooseButton([ + '狐魅:请选择一项', + [[ + [0,'令'+str+'摸一张牌'], + [1,'令'+str+'交给你一张牌'], + [2,'令'+str+'回复1点体力'], + ].filter(list=>{ + if(player.hasSkill('dchumei_'+list[0])) return false; + if(list[0]==1&&!target.countCards('he')) return false; + if(list[0]==2&&target.isHealthy()) return false; + return true; + }),'textbutton'] + ],true).set('filterButton',button=>{ + var target=_status.event.target; + if(player.hasSkill('dchumei_'+button.link)) return false; + if(button.link==1&&!target.countCards('he')) return false; + if(button.link==2&&target.isHealthy()) return false; + return true; + }).set('ai',function(button){ + var target=_status.event.target; + return [ + get.effect(target,{name:'wuzhong'},player,player)/2, + get.effect(target,{name:'shunshou_copy2'},player,player), + get.recoverEffect(target,player,player), + ][button.link]; + }).set('target',target); + 'step 1' + if(result.bool){ + var num=result.links[0]; + player.addTempSkill('dchumei_'+num,'phaseUseAfter'); + switch(num){ + case 0: + target.draw(); + break; + case 1: + target.chooseCard('狐魅:交给'+get.translation(player)+'一张牌','he',true); + break; + case 2: + target.recover(); + break; + } + if(num!=1) event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool) player.gain(result.cards,target,'giveAuto'); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(!player.hasSkill('dchumei_0')) return 1; + if(!player.hasSkill('dchumei_1')) return -1; + if(!player.hasSkill('dchumei_2')) return 1; + }, + }, + }, + }, //魏关羽 dcdanji:{ audio:'danji', @@ -10060,6 +10227,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ juntun_info:'锁定技,准备阶段,若X大于1,则你减1点体力上限并摸X张牌(X为你的体力上限)。', jiaojie:'狡黠', jiaojie_info:'锁定技,你的红色牌不计入手牌上限。你使用黑色牌无距离和次数限制。', + dcjiaoxia:'狡黠', + dcjiaoxia_info:'①出牌阶段开始时,你可以令自己的所有手牌于此阶段均视为【杀】。若如此做,你使用以此法转化的【杀】造成伤害后,你可以视为使用此牌对应的原卡牌。②出牌阶段,你对你本阶段未使用过【杀】的角色使用【杀】无次数限制。', + dchumei:'狐魅', + dchumei_info:'出牌阶段各限一次,你可以选择一名体力值不大于X的角色,令其:①摸一张牌。②交给你一张牌。③回复1点体力。(X为你本阶段造成伤害的次数)', buchen:'不臣', buchen_info:'隐匿技,你于其他角色的回合登场时,可获得当前回合角色的一张牌。', smyyingshi:'鹰视', diff --git a/character/tw.js b/character/tw.js index b686cb847..69577c6eb 100644 --- a/character/tw.js +++ b/character/tw.js @@ -8747,8 +8747,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, intro:{ content:function(storage,player){ - if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果二。'; - return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。'; + if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果一。'; + return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。'; }, }, }, @@ -8773,8 +8773,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return list.length>=Math.ceil(num1/2); }, content:function(){ - player.storage.twzhengjian=true; + 'step 0' + player.awakenSkill('twzhongchi'); + 'step 1' + player.recover(2); player.addSkill('twzhongchi_effect'); + player.storage.twzhengjian=true; + 'step 2' game.delayx(); }, subSkill:{ @@ -11406,7 +11411,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case 'equip2': target.draw(); break; - case 'equip3': case 'equip4': case 'equip6': + case 'equip3': case 'equip4': case 'equip5': target.recover(); break; } @@ -11432,7 +11437,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var hp=player.hp,hs=player.countCards('h',(card)=>card!=ui.selected.cards[0]); var tp=target.hp,ts=target.countCards('h'); if(sub=='equip2') ts++; - if(tpplayer.countCards('h')||player.group==target.group) player.draw(); }, ai:{ + order:7, result:{ player:function(player,target){ if(player.countCards('h')!player.getStorage('dcposuo_suits').contains(suit)); + if(!suits.length||!player.countCards('hs',card=>suits.contains(get.suit(card,player)))||player.getHistory('sourceDamage',evt=>{ + return evt.player!=player&&evt.getParent('phaseUse')==evtx; + }).length) event.set('dcposuo_cards',undefined); + else{ + var list=[],cards=Array.from(ui.cardPile.childNodes); + cards.addArray(Array.from(ui.discardPile.childNodes)); + game.countPlayer(current=>cards.addArray(current.getCards('hejxs'))); + for(var name of lib.inpile){ + if(!get.tag({name:name},'damage')) continue; + if(cards.some(card=>get.name(card,false)==name&&!get.nature(card,false))){ + for(var suit of suits){ + if(cards.some(card=>get.name(card,false)==name&&!get.nature(card,false)&&get.suit(card,false)==suit)){ + list.push([get.type(name),get.translation(suit),name,undefined,suit]); + } + } + } + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + if(cards.some(card=>get.name(card,false)==name&&get.nature(card,false)==nature)){ + for(var suit of suits){ + if(cards.some(card=>get.name(card,false)==name&&get.nature(card,false)==nature&&get.suit(card,false)==suit)){ + list.push([get.type(name),get.translation(suit),name,nature,suit]); + } + } + } + } + } + } + event.set('dcposuo_cards',list); + } + } + }, + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return event.dcposuo_cards&&event.dcposuo_cards.length; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('婆娑',[event.dcposuo_cards,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + return player.getUseValue({name:button.link[2],nature:button.link[3]}); + }, + backup:function(links,player){ + return { + suit:links[0][4], + filterCard:function(card,player){ + return get.suit(card,player)==lib.skill.dcposuo_backup.suit; + }, + viewAs:{ + name:links[0][2], + nature:links[0][3], + isCard:true, + }, + check:function(card){ + return 6.5-get.value(card); + }, + precontent:function(){ + player.logSkill('dcposuo'); + delete event.result.skill; + player.addTempSkill('dcposuo_suits'); + player.markAuto('dcposuo_suits',[get.suit(event.result.cards[0])]); + }, + } + }, + prompt:function(links,player){ + var suit=links[0][4]; + var name=links[0][2]; + var nature=links[0][3]; + return '将一张'+get.translation(suit)+'牌当作'+(get.translation(nature)||'')+get.translation(name)+'使用'; + }, + }, + ai:{ + order:10, + result:{player:1}, + }, + subSkill:{ + suits:{ + charlotte:true, + onremove:true, + }, + }, + }, + dcxiaoren:{ + audio:2, + trigger:{source:'damageSource'}, + usable:1, + content:function(){ + 'step 0' + player.judge(); + 'step 1' + if(result.color!='red'&&result.color!='black') return; + if(result.color=='red'&&!game.hasPlayer(current=>current.isDamaged())) return; + if(result.color=='black'&&(!trigger.player.isIn()||game.countPlayer()<3)) return; + var next=game.createEvent('dcxiaoren_'+result.color); + next.player=player; + if(result.color=='black') next.target=trigger.player; + next.setContent(lib.skill.dcxiaoren['content_'+result.color]); + }, + content_red:function(){ + 'step 0' + player.chooseTarget('绡刃:是否令一名其他角色回复1点体力?',(card,player,target)=>target.isDamaged()).set('ai',target=>get.recoverEffect(target,_status.event.player,_status.event.player)); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.recover(); + } + }, + content_black:function(){ + 'step 0' + if(target.getPrevious()==player) event._result={control:'下家'}; + else if(target.getNext()==player) event._result={control:'上家'}; + else player.chooseControl('上家','下家').set('prompt','绡刃:请选择一个方向').set('prompt2','对'+get.translation(target)+'上家或下家造成1点伤害,然后你以此方向可重复此流程直到有角色因此死亡或此方向的下个目标为你').set('ai',()=>{ + var player=_status.event.player; + var target=_status.event.target; + var left=0,right=0; + var leftx=target.getPrevious(),lefty=target.getNext(); + while(leftx!=player){ + if(get.damageEffect(leftx,player,player)<0) break; + else{ + left+=get.damageEffect(leftx,player,player); + leftx=leftx.getPrevious(); + } + } + while(rightx!=player){ + if(get.damageEffect(rightx,player,player)<0) break; + else{ + right+=get.damageEffect(rightx,player,player); + rightx=leftx.getPrevious(); + } + } + return left>right?'上家':'下家'; + }).set('target',target); + 'step 1' + if(result.control){ + event.num=1; + player.popup(result.control); + game.log(player,'选择了','#y'+result.control); + event.fangxiang=result.control; + } + else event.finish(); + 'step 2' + var current=target; + for(var i=0;i=0); + 'step 4' + if(result.bool){ + event.num++; + event.goto(2); + } + }, + }, //孙翎鸾 dclingyue:{ audio:2, @@ -11406,6 +11581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ganfurenmifuren:'甘夫人,刘备起兵后于沛城娶之为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月,刘备病死于白帝城,追谥甘夫人为“昭烈皇后”。
糜夫人,刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。', sunlingluan:'孙翎鸾,孙坚与妾室丁氏的女儿,孙策的妹妹,孙权、孙尚香的姐姐。孙翎年幼时曾得杜夔点化,窥得音律玄妙,丝竹八音,擅长琵琶,每次弹奏琵琶时,经常引来百鸟,称为奇观。早年孙翎鸾出游,山林巧遇葛玄,葛玄观其面相为吉,特传授修行辟谷之法,可令其身心洗涤,容颜久存。孙翎鸾有恋人名张奋,两人情投意合,可惜造化弄人,张奋病死外域,孙翎鸾倚楼盼归,日复一日、年复一年。后有五彩孔雀自东南而来,绕楼而鸣,其声如慕,孙翎鸾泪染笑靥,与孔雀耳语几句后乘翎而去。', zhoubuyi:'周不疑(192年—208年),字元直(或作“文直”),零陵重安(今湖南衡阳县)人,刘表别驾刘先的外甥,少有异才,聪明敏达,在十七岁时就著有文论四首。曹冲死后,曹操怀疑曹丕无法驾驭周不疑,于是派人杀了周不疑。', + tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。', }, characterTitle:{ // wulan:'#b对决限定武将', @@ -11922,6 +12098,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcchangqu_info:'出牌阶段限一次。你可以开一艘战舰(你从你的上家或下家开始选择任意名座位连续的其他角色,且起点角色获得“战舰”标记)。这些角色按照你选择的顺序依次执行:{若其有本次获得的“战舰”,其选择一项:1.交给你X张手牌,然后将“战舰”移动给你选择的下一名目标角色;2.令其下次受到的属性伤害值+X,然后横置(X为本次〖长驱〗中选项一被选择过的次数且至少为1)。}。', dctongye:'统业', dctongye_info:'锁定技。游戏开始时或一名角色死亡后,若场上势力数:不大于4,你的手牌上限+3;不大于3,你的攻击范围+3;不大于2,你使用【杀】的次数上限+3;不大于1,你摸牌阶段额定摸牌数+3。', + tianshangyi:'田尚衣', + dcposuo:'婆娑', + dcposuo_info:'出牌阶段,若你本阶段未造成过伤害,则你可以将一张你本阶段未以此法使用过的花色的手牌当作任意一张存在于游戏的同花色伤害牌使用。', + dcxiaoren:'绡刃', + dcxiaoren_info:'每回合限一次,当你造成伤害后,你可以进行判定,若结果为:红色,你可以令一名角色回复1点体力;黑色,你可以对受伤角色的上家或下家造成1点伤害,然后你可以重复此方向的伤害流程直到有角色因此死亡或下个目标角色为你。', sp2_yinyu:'隐山之玉', sp2_huben:'百战虎贲', diff --git a/image/character/dongwan.jpg b/image/character/dongwan.jpg new file mode 100644 index 000000000..22c360b57 Binary files /dev/null and b/image/character/dongwan.jpg differ diff --git a/image/character/peiyuanshao.jpg b/image/character/peiyuanshao.jpg new file mode 100644 index 000000000..a0359f71b Binary files /dev/null and b/image/character/peiyuanshao.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index 07d1caa48..5c5093212 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -13278,10 +13278,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ target.showCharacter(0); game.delay(2); if(targets.length) event.goto(1); - else if(game.players.length<3){ - delete _status.showYexings; - event.finish(); - } } else{ if(targets.length) event.goto(1); @@ -13302,58 +13298,70 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'step 3' var source=event.targets2.shift(); event.source=source; - var targets=game.filterPlayer(function(current){ - return current.identity!='ye'&¤t!=source&&!get.is.jun(current)&&!event.targets2.contains(current)&&!current.storage.yexinjia_friend; - }).sortBySeat(source); - if(!targets.length){ - delete _status.showYexings; - event.finish(); - } - else{ - event.targets=targets; - source.chooseBool('是否发起【拉拢人心】?','令所有其他不为君主/暴露野心家的角色依次选择是否与你结盟。第一个选择加入的人将势力和胜利条件改为与你相同'); - } + event.targets3=[]; + event.targets4=[source]; + if(!_status.yexinjia_list) _status.yexinjia_list=['夏','商','周','秦','汉','隋','唐','宋','辽','金','元','明']; + source.chooseControl(_status.yexinjia_list).set('prompt','请选择自己所属的野心家势力的标识').set('ai',()=>(_status.yexinjia_list?_status.yexinjia_list.randomGet():0)); 'step 4' - if(!result.bool){ - if(event.targets2.length) event.goto(3); - return; + var text,source=event.source;; + if(result.control){ + text=result.control; + _status.yexinjia_list.remove(result.control); } + else text=_status.yexinjia_list.randomRemove(); + event.text=text; + game.broadcastAll(function(player,text){ + player.setIdentity(text,'ye'); + },source,text); + source.removeMark('yexinjia_mark',1); + var targets=game.filterPlayer(function(current){ + return current.identity!='ye'&¤t!=source&&!get.is.jun(current)&&!event.targets2.contains(current)&&!current.getStorage('yexinjia_friend').length; + }); + if(!targets.length) event.goto(8); + else event.targets=targets; 'step 5' + var source=event.source; var target=targets.shift(); event.target=target; source.line(target,'green'); - target.chooseBool('是否响应'+get.translation(source)+'发起的【拉拢人心】?','将势力改为野心家,且视为和该角色阵营相同').set('ai',function(){ - if(game.players.length<4) return true; - if(game.players.length<5) return Math.random()<0.5; - return Math.random()<0.3; - }); + target.chooseBool('是否响应'+get.translation(source)+'发起的【拉拢人心】?','将势力改为'+event.text+(['辽','金'].contains(event.text)?'':'朝')).set('choice',Math.random()<=0.98);//反骨[doge] 'step 6' if(result.bool){ target.chat('加入'); - if(!_status.yexinjia_list) _status.yexinjia_list=['夏','商','周','秦','汉','隋','唐','宋','辽','金','元','明']; - source.chooseControl(_status.yexinjia_list).set('prompt','请选择自己所属的野心家势力的标识').set('ai',()=>(_status.yexinjia_list?_status.yexinjia_list.randomGet():0)); + event.targets4.push(target); + game.broadcastAll(function(player,target,text){ + player.identity='ye'; + player.setIdentity(text,'ye'); + },target,event.source,event.text); } else{ target.chat('拒绝'); - game.delay(1.5); - if(targets.length) event.goto(5); - else event.goto(8); + event.targets3.push(target); + } + game.delay(1.5); + if(targets.length) event.goto(5); + else if(event.targets4.length){ + for(var i of event.targets4){ + i.markAuto('yexinjia_friend',event.targets4.filter(j=>j!=i)); + } } 'step 7' - game.broadcastAll(function(player,target,text){ - player.identity='ye'; - source.setIdentity(text,'ye'); - player.setIdentity(text,'ye'); - player.storage.yexinjia_friend=target; - },target,source,result.control); - _status.yexinjia_list.remove(result.control); - target.markSkill('yexinjia_friend'); - source.removeMark('yexinjia_mark',1); - target.drawTo(4); - target.recover(); + if(event.targets3.length){ + for(var i of event.targets3){ + i.drawTo(4); + i.recover(); + } + } 'step 8' if(event.targets2.length) event.goto(3); - else delete _status.showYexings; + else{ + delete _status.showYexings; + if(!game.hasPlayer(current=>{ + return game.hasPlayer(target=>{ + return !target.isFriendOf(current); + }); + })) game.checkResult(); + } }); }, getCharacterChoice:function(list,num){ @@ -14830,6 +14838,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzzhuidu_info:'出牌阶段限一次。当你造成伤害时,你可以令受伤角色选择一项:1.此伤害+1;2.弃置装备区里的所有牌。若该角色为女性,则你可以弃置一张牌,改为令其选择两项。', gzshigong:'示恭', gzshigong_info:'限定技。当你于回合外进入濒死状态时,你可以移除副将,然后令当前回合角色选择一项:1.获得你以此法移除的副将武将牌上的一个没有技能标签的技能,然后令你将体力值回复至体力上限;2.令你将体力值回复至1点。', + gz_old_huaxiong:'华雄', gzyaowu:'耀武', gzyaowu_info:'限定技。当你造成伤害后,你可以明置此武将牌,然后你加2点体力上限并回复2点体力,修改〖恃勇〗,且当你死亡后,所有与你势力相同的角色失去1点体力。', gzshiyong:'恃勇', @@ -15614,7 +15623,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, differentIdentityFrom:function(target,self){ if(this==target) return false; - if(this.storage.yexinjia_friend==target||target.storage.yexinjia_friend==this) return false; + if(this.getStorage('yexinjia_friend').contains(target)) return false; + if(target.getStorage('yexinjia_friend').contains(this)) return false; if(self){ if(target.identity=='unknown') return false; if(target.identity=='ye'||this.identity=='ye') return true; @@ -15631,7 +15641,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return this.identity!=target.identity; }, sameIdentityAs:function(target,shown){ - if(this.storage.yexinjia_friend==target||target.storage.yexinjia_friend==this) return true; + if(this.getStorage('yexinjia_friend').contains(target)) return true; + if(target.getStorage('yexinjia_friend').contains(this)) return true; if(shown){ if(this.identity=='ye'||this.identity=='unknown') return false; } @@ -15692,11 +15703,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ })); } else if(that.identity=='ye'){ - if((that.storage.yexinjia_friend&&source==that.storage.yexinjia_friend)||(source.storage.yexinjia_friend&&that==source.storage.yexinjia_friend)) source.discard(source.getCards('he')); + if(that.getStorage('yexinjia_friend').contains(source)||source.getStorage('yexinjia_friend').contains(that)) source.discard(source.getCards('he')); else source.draw(1+game.countPlayer(function(current){ if(current==that) return false; - if(current.storage.yexinjia_friend&&that==current.storage.yexinjia_friend) return true; - if(that.storage.yexinjia_friend&¤t==that.storage.yexinjia_friend) return true; + if(current.getStorage('yexinjia_friend').contains(that)) return true; + if(that.getStorage('yexinjia_friend').contains(current)) return true; return false; })); } @@ -16432,7 +16443,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ '
声明
  • 以下所有规则均为根据公开爆料整理,经村规改动后制定的临时规则。不代表任何官方意见。请以后续发布的官方规则作为标准。
' +'
双势力武将
  • 双势力武将牌可以和野心家武将牌/包含势力单武将牌/含有重叠势力的其他双势力武将牌组合,若你的主将为双势力武将,则:若你的副将为单势力武将牌,你的势力视为此势力;若你的副将为双势力武将,你的势力视为两张武将牌上的重叠势力(若重叠势力不止一个则需在游戏开始时选择一个作为自己的势力);野心家武将牌为主将,双势力武将牌为副将时,游戏开始时需选择一个副将所含势力作为副将的势力。
  • 变更副将时,可以选择包含原势力的双势力武将牌。左慈发动【役鬼】时,可以使用双势力武将牌同时指定两个不同势力的角色为目标。
  • 特殊地,“冈崎汐”作为多势力武将牌,结算流程和规则与其他双势力武将相同。
' +'
野心家武将
  • 野心家武将只能放在主将位置。副将可以为任意非野心家武将牌。
  • 选择了野心家武将牌的角色(以下简称“野心家角色”)仅明置副将时,若副将为单势力武将牌,则势力暂时视为与该武将牌相同。若副将为双势力武将牌,则势力视为游戏开始时选择的副将代表的势力。
  • 野心家角色明置主将时,其势力改为野心家。若其是首次明置该武将牌,则其获得一个“野心家”标记。
  • “野心家”标记可以当做“先驱”标记,“阴阳鱼”标记或是“珠联璧合”标记使用。当同时拥有两种标记时,优先弃置原装标记,下次发动时才弃置“野心家”标记。
  • 野心家角色变更副将时,若其主将未明置过,则按照副将的势力进行变更。若主将已经明置过,则可以选择所有的非野心家武将牌。左慈发动【役鬼】时,可以使用野心家武将牌同时指定所有势力的角色为目标。' - +'
  • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将。然后若场上存活角色数大于等于3,则这些角色选择是否发起“拉拢人心”
  • 选择发起“拉拢人心”的野心家角色,令所有其他非野心家角色和非君主角色依次选择是否和该野心家角色“结盟”。若有人选择“是”,则野心家角色弃置“野心家”标记,且该角色将势力改为野心家,将手牌摸至四张并回复1点体力,且视为和发起“拉拢人心”的野心家角色势力相同,并终止对其他角色的询问。
' + +'
  • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将,然后选择是否发起“拉拢人心”
  • 选择发起“拉拢人心”的野心家角色选择一个新的势力作为自己的势力,弃置“野心家”标记,令所有其他非野心家角色且非君主且非已“结盟”角色依次选择是否和该野心家角色“结盟”。选择“是”的角色将势力改为和该野心家势力相同。此次“拉拢人心”对所有其他角色询问结束后,所有选择“否”的角色将手牌摸至四张并回复1点体力。' +'
    纵横捭阖
    • 当一名角色对目标角色发动具有拥有“纵横”衍生技的技能时,其可以令对方获得“纵横”衍生技直到其下回合结束。
    ', }, };