diff --git a/character/refresh.js b/character/refresh.js index a241b1075..ab0949294 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9729,7 +9729,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, olzhiba3:{}, rehuashen:{ - //mode:['identity','single','doudizhu'], audio:2, unique:true, direct:true, @@ -9753,7 +9752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); event.aiChoice=skills[0]; var choice='更换技能'; - if(event.aiChoice==player.storage.rehuashen.current2||get.skillRank(event.aiChoice,cond)<1) choice='弃置化身'; + if(event.aiChoice==player.storage.rehuashen.current2||get.skillRank(event.aiChoice,cond)<1) choice='制衡化身'; if(player.isOnline2()){ player.send(function(cards,id){ var dialog=ui.create.dialog('是否发动【化身】?',[cards,'character']); @@ -9766,7 +9765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.dialog.style.display='none'; } if(event.triggername=='rehuashen') event._result={control:'更换技能'}; - else player.chooseControl('弃置化身','更换技能','cancel2').set('ai',function(){ + else player.chooseControl('制衡化身','更换技能','cancel2').set('ai',function(){ return _status.event.choice; }).set('choice',choice); "step 1" @@ -9784,7 +9783,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(!event.logged){player.logSkill('rehuashen');event.logged=true} var next=player.chooseButton(true).set('dialog',event.videoId); - if(event.control=='弃置化身'){ + if(event.control=='制衡化身'){ next.set('selectButton',[1,2]); next.set('filterButton',function(button){ return button.link!=_status.event.current; @@ -9797,7 +9796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); next.set('choice',event.aiChoice); } - var prompt=event.control=='弃置化身'?'选择弃置至多两张化身':'选择要切换的化身'; + var prompt=event.control=='制衡化身'?'选择制衡至多两张化身':'选择要切换的化身'; var func=function(id,prompt){ var dialog=get.idDialog(id); if(dialog){ @@ -9811,7 +9810,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ func(event.videoId,prompt); } "step 2" - if(result.bool&&event.control!='弃置化身'){ + if(result.bool&&event.control!='制衡化身'){ event.card=result.links[0]; var func=function(card,id){ var dialog=get.idDialog(id); @@ -9871,22 +9870,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!_status.noclearcountdown){ game.stopCountChoose(); } - if(event.control=='弃置化身') return; + if(event.control=='制衡化身') return; if(player.storage.rehuashen.current!=event.card){ player.storage.rehuashen.current=event.card; - game.broadcastAll(function(character,player){ - player.sex=lib.character[character][0]; - //player.group=lib.character[character][1]; - //player.node.name.dataset.nature=get.groupnature(player.group); - },event.card,player); - player.changeGroup(lib.character[event.card][1],false); + game.broadcastAll(function(player,sex){ + player.sex=sex; + game.log(player,'将性别变为了','#y'+get.translation(sex)+'性'); + },player,lib.character[event.card][0]); + player.changeGroup(lib.character[event.card][1]); } var link=result.control; player.storage.rehuashen.current2=link; if(!player.additionalSkills.rehuashen||!player.additionalSkills.rehuashen.contains(link)){ player.addAdditionalSkill('rehuashen',link); player.flashAvatar('rehuashen',event.card); - game.log(player,'获得技能','#g【'+get.translation(link)+'】'); + game.log(player,'获得了技能','#g【'+get.translation(link)+'】'); player.popup(link); player.syncStorage('rehuashen'); player.updateMarks('rehuashen'); @@ -9903,31 +9901,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:['phaseBegin','phaseEnd','rehuashen'], }, filter:function(event,player,name){ - //if(name=='phaseBegin'&&game.phaseNumber==1) return false; return player.storage.rehuashen&&player.storage.rehuashen.character.length>0; }, - banned:['lisu','sp_xiahoudun','xushao','zhoutai','old_zhoutai'], + banned:['lisu','sp_xiahoudun','xushao','zhoutai','old_zhoutai','shixie'], addHuashen:function(player){ if(!player.storage.rehuashen) return; if(!_status.characterlist){ - if(_status.connectMode) var list=get.charactersOL(); - else{ - var list=[]; - for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; - list.push(i); - } - } - game.countPlayer(function(current){ - list.remove(current.name); - list.remove(current.name1); - list.remove(current.name2); - if(current.storage.huashen&¤t.storage.huashen.owned){ - for(var i in current.storage.huashen.owned) list.removeArray(current.storage.huashen.owned[i]); - } - if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character) - }); - _status.characterlist=list; + lib.skill.pingjian.initList(); } _status.characterlist.randomSort(); var bool=false; diff --git a/character/shenhua.js b/character/shenhua.js index 6281919ec..dd7c73870 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -4255,24 +4255,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ addHuashen:function(player){ if(!player.storage.huashen) return; if(!_status.characterlist){ - if(_status.connectMode) var list=get.charactersOL(); - else{ - var list=[]; - for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; - list.push(i); - } - } - game.countPlayer(function(current){ - list.remove(current.name); - list.remove(current.name1); - list.remove(current.name2); - if(current.storage.huashen&¤t.storage.huashen.owned){ - for(var i in current.storage.huashen.owned) list.removeArray(current.storage.huashen.owned[i]); - } - if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character) - }); - _status.characterlist=list; + lib.skill.pingjian.initList(); } _status.characterlist.randomSort(); var bool=false; @@ -4495,6 +4478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.markSkill('huashen'); game.broadcastAll(function(character,player){ player.sex=lib.character[character][0]; + game.log(player,'将性别变为了','#y'+get.translation(lib.character[character][0])+'性'); //player.group=lib.character[character][1]; //player.node.name.dataset.nature=get.groupnature(player.group); var mark=player.marks.huashen; @@ -4514,7 +4498,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ },200); } },character,player); - player.changeGroup(lib.character[character][1],false); + player.changeGroup(lib.character[character][1]); } player.storage.huashen.current2=skill; if(!player.additionalSkills.huashen||!player.additionalSkills.huashen.contains(skill)){ @@ -8150,4 +8134,4 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shenhua_lei:'神话再临·雷', }, }; -}); \ No newline at end of file +}); diff --git a/character/sp2.js b/character/sp2.js index b172a08b5..aed20935c 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -7917,199 +7917,216 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, pingjian:{ - audio:2, - trigger:{ - player:['damageEnd','phaseJieshuBegin'], - }, initList:function(){ var list=[]; - if(_status.connectMode) var list=get.charactersOL(); + if(_status.connectMode) list=get.charactersOL(); else{ var list=[]; for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; - list.push(i); + if(!lib.filter.characterDisabled2(i)&&!lib.filter.characterDisabled(i)) list.push(i); } } game.countPlayer2(function(current){ list.remove(current.name); list.remove(current.name1); list.remove(current.name2); - if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character) }); _status.characterlist=list; }, + init:function(player){ + player.addSkill('pingjian_check'); + if(!player.storage.pingjian_check) player.storage.pingjian_check={}; + }, + onremove:function(player){ + player.removeSkill('pingjian_check'); + }, + audio:2, + trigger:{player:['damageEnd','phaseJieshuBegin']}, frequent:true, content:function(){ 'step 0' - if(!player.storage.pingjian) player.storage.pingjian=[]; - event._result={bool:true}; - 'step 1' - if(result.bool){ - if(!_status.characterlist){ - lib.skill.pingjian.initList(); - } - var list=[]; - var skills=[]; - var map=[]; - _status.characterlist.randomSort(); - var name2=event.triggername; - for(var i=0;i<_status.characterlist.length;i++){ - var name=_status.characterlist[i]; - if(name.indexOf('zuoci')!=-1||name.indexOf('xushao')!=-1) continue; - var skills2=lib.character[name][3]; - for(var j=0;j2) break; - } - if(!skills.length){ - //player.draw(); - event.finish(); - } - else{ - //skills.unshift('摸一张牌'); - player.chooseControl(skills).set('dialog',['请选择要发动的技能',[list,'character']]).set('ai',function(){return 0}); } + if(list.length>2) break; } + if(skills.length) player.chooseControl(skills).set('dialog',['评鉴:请选择尝试发动的技能',[list,'character']]); else event.finish(); - 'step 2' - if(result.control=='摸一张牌'){ - player.draw(); - return; + 'step 1' + player.markAuto('pingjian',[result.control]); + player.addTempSkill(result.control); + player.storage.pingjian_check[result.control]=(trigger.name=='damage'?trigger:'phaseJieshu'); + if(trigger.name=='damage'){ + var info=lib.translate[result.control+'_info']; + if(info&&info.indexOf('1点伤害')+info.indexOf('一点伤害')!=-2) trigger.num=1;//暂时想到的让多点伤害只执行一次的拙见 } - player.storage.pingjian.add(result.control); - player.addTempSkill(result.control,event.triggername=='damageEnd'?'damageAfter':'phaseJieshu'); }, group:'pingjian_use', - phaseUse_special:['xinfu_lingren'], + phaseUse_special:[], + ai:{threaten:5}, }, pingjian_use:{ audio:'pingjian', enable:'phaseUse', usable:1, - position:'he', + prompt:()=>lib.translate.pingjian_info, content:function(){ 'step 0' - if(!player.storage.pingjian) player.storage.pingjian=[]; - event._result={bool:true}; - 'step 1' - if(result.bool){ - var list=[]; - var skills=[]; - var map=[]; - if(!_status.characterlist){ - lib.skill.pingjian.initList(); - } - _status.characterlist.randomSort(); - for(var i=0;i<_status.characterlist.length;i++){ - var name=_status.characterlist[i]; - if(name.indexOf('zuoci')!=-1||name.indexOf('xushao')!=-1) continue; - var skills2=lib.character[name][3]; - for(var j=0;j2) break; - } - if(!skills.length){ - //player.draw(); - event.finish(); - } - else{ - //skills.unshift('摸一张牌'); - player.chooseControl(skills).set('dialog',['请选择要发动的技能',[list,'character']]).set('ai',function(){return 0}); } + if(list.length>2) break; } + if(skills.length) player.chooseControl(skills).set('dialog',['评鉴:请选择尝试发动的技能',[list,'character']]); else event.finish(); - 'step 2' - if(result.control=='摸一张牌'){ - player.draw(); - return; - } - player.storage.pingjian.add(result.control); - player.addTempSkill(result.control,'phaseUseEnd'); - player.addTempSkill('pingjian_temp','phaseUseEnd'); - player.storage.pingjian_temp=result.control; - //event.getParent(2).goto(0); + 'step 1' + player.markAuto('pingjian',[result.control]); + player.addTempSkill(result.control); + player.storage.pingjian_check[result.control]='phaseUse'; }, - ai:{order:10,result:{player:1}}, + ai:{order:12,result:{player:1}}, }, - pingjian_temp:{ - onremove:true, - trigger:{player:['useSkillBegin','useCard1']}, - silent:true, - firstDo:true, + pingjian_check:{ + charlotte:true, + trigger:{player:['useSkill','logSkillBegin']}, filter:function(event,player){ - var info=lib.skill[event.skill]; - if(!info) return false; - if(event.skill==player.storage.pingjian_temp) return true; - if(info.sourceSkill==player.storage.pingjian_temp||info.group==player.storage.pingjian_temp) return true; - if(Array.isArray(info.group)&&info.group.contains(player.storage.pingjian_temp)) return true; - return false; + if(get.info(event.skill).charlotte) return false; + var skill=event.sourceSkill||event.skill; + return player.storage.pingjian_check[skill]; }, + direct:true, + firstDo:true, + priority:Infinity, content:function(){ - player.removeSkill(player.storage.pingjian_temp); - player.removeSkill('pingjian_temp'); + var skill=trigger.sourceSkill||trigger.skill; + player.removeSkill(skill); + delete player.storage.pingjian_check[skill]; + }, + group:'pingjian_check2', + }, + pingjian_check2:{ + charlotte:true, + trigger:{player:['phaseUseEnd','damageEnd','phaseJieshuBegin']}, + filter:function(event,player){ + return Object.keys(player.storage.pingjian_check).find(function(skill){ + if(event.name!='damage') return player.storage.pingjian_check[skill]==event.name; + return player.storage.pingjian_check[skill]==event; + }); + }, + direct:true, + lastDo:true, + priority:-Infinity, + content:function(){ + var skills=Object.keys(player.storage.pingjian_check).filter(function(skill){ + if(trigger.name!='damage') return player.storage.pingjian_check[skill]==trigger.name; + return player.storage.pingjian_check[skill]==trigger; + }); + player.removeSkill(skills); + for(var skill of skills) delete player.storage.pingjian_check[skill]; }, }, //上兵伐谋 @@ -10122,8 +10139,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xugong:"许贡", zhangchangpu:"张昌蒲", pingjian:'评荐', - pingjian_info:'结束阶段开始时/当你受到伤害后/出牌阶段限一次,你可以令系统随机从剩余武将牌堆中检索出三张拥有发动时机为结束阶段开始时/当你受到伤害后/出牌阶段的技能的武将牌。然后你可以选择尝试发动其中一个技能。每个技能每局只能选择一次。', pingjian_use:'评荐', + pingjian_info:'结束阶段开始时/当你受到伤害后/出牌阶段限一次,你可以令系统随机检索出三张拥有发动时机为结束阶段开始时/当你受到伤害后/出牌阶段的技能的武将牌。然后你可以选择尝试发动其中一个技能。每个技能每局游戏只能选择一次。', songshu:'颂蜀', songshu_info:'出牌阶段,你可以和其他角色拼点。若你没赢,你与其各摸两张牌,且你本阶段内不能再发动〖颂蜀〗。', diff --git a/mode/guozhan.js b/mode/guozhan.js index c061c64b2..ca2d58f1f 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -3358,7 +3358,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, frequent:true, content:function(){ - player.draw(player.getHistory('useCard').length); + player.draw(Math.min(player.getHistory('useCard').length,5)); }, }, gzduannian:{ @@ -3540,7 +3540,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ target:1, }, }, - derivation:['releiji','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'], + derivation:['leiji','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'], subSkill:{ clear:{ onremove:function(player){ @@ -3748,24 +3748,29 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ audio:'gzxiongnve', mark:true, intro:{ - content:'受到的伤害-1', + content:'其他角色对你造成伤害时,此伤害-1', }, trigger:{player:'damageBegin3'}, + filter:function(event,player){ + return event.source&&event.source!=player; + }, forced:true, + logTarget:'source', content:function(){ trigger.num--; }, ai:{ effect:{ target:function(card,player,target){ + if(target==player) return; if(player.hasSkillTag('jueqing',false,target)) return; var num=get.tag(card,'damage'); if(num){ if(num>1) return 0.5; return 0; } - } - } + }, + }, }, }, end:{ @@ -4122,7 +4127,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, goon:function(){ var target=trigger.player; - if(player.canUse('tao',target)&&get.effect(target,{name:'tao',isCard:true},player,player)>0) return true; + if(get.recoverEffect(target,player,player)>0) return true; var card={name:'sha',nature:'thunder',isCard:true}; if(game.hasPlayer(function(current){ return current!=player&¤t!=target&&target.canUse(card,current,false)&&get.effect(current,card,target,player)>0; @@ -4139,7 +4144,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return current!=target&¤t.isFriendOf(target)&¤t.isLinked(); }))?3:1)*(-get.attitude(target,player,player)+1); }, - }).setHiddenSkill(event.name); + }).setHiddenSkill('daming'); 'step 1' if(result.bool){ var target=result.targets[0]; @@ -4178,28 +4183,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(num>0) player.draw(num); 'step 4' if(trigger.player.isIn()){ - var target=trigger.player,tao=(lib.filter.cardEnabled({name:'tao',isCard:true},player,'forceEnable')&&lib.filter.targetEnabled2({name:'tao',isCard:true},player,target)),sha=game.filterPlayer(function(current){ + var target=trigger.player,sha=game.filterPlayer(function(current){ return current!=target&¤t!=player&&target.canUse({name:'sha',nature:'thunder',isCard:true},current,false); }); if(sha.length){ var next=player.chooseTarget('请选择'+get.translation(target)+'使用雷【杀】的目标',function(card,player,target){ return _status.event.list.contains(target); }); - if(tao){ - next.set('prompt2','或点「取消」并视为对其使用【桃】'); - next.set('goon',get.effect(target,{name:'tao',isCard:true},player,player)); - } - else{ - next.set('forced',true); - next.set('goon',0); - } + next.set('prompt2','或点「取消」令其回复1点体力'); + next.set('goon',get.recoverEffect(target,player,player)); next.set('list',sha); next.set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'sha',nature:'thunder',isCard:true},_status.event.getTrigger().player,player)-_status.event.goon; }); } - else if(tao) event._result={bool:false}; + else if(target.isDamaged()) event._result={bool:false}; else event.finish(); } else event.finish(); @@ -4213,7 +4212,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } trigger.player.useCard({name:'sha',nature:'thunder',isCard:true},target,false).animate=false; } - else player.useCard({name:'tao',isCard:true},trigger.player); + else{ + player.line(trigger.player); + trigger.player.recover(); + } }, }, xiaoni:{ @@ -5199,6 +5201,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzzhuosheng:{ + audio:'zhuosheng', trigger:{global:'damageEnd'}, logTarget:'player', filter:function(event,player){ @@ -5232,6 +5235,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(get.itemtype(card)=='card'&&card.hasGaintag('gzzhuosheng2')&&get.type(card)=='basic') return num-0.1; }, }, + audio:'zhuosheng', trigger:{player:'useCard2'}, direct:true, filterx:function(event,player){ @@ -5289,7 +5293,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ group:['gzzhuosheng2_equip','gzzhuosheng2_silent'], subSkill:{ equip:{ - audio:'gzzhuosheng2', + audio:'zhuosheng', trigger:{player:'useCard'}, filter:function(event,player){ return get.type(event.card)=='equip'&&lib.skill.gzzhuosheng2.filterx(event,player); @@ -8086,6 +8090,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, gzxuanhuo:{ + audio:'rexuanhuo', global:'gzxuanhuo_others', derivation:['fz_new_rewusheng','fz_gzpaoxiao','fz_new_longdan','fz_new_tieji','fz_liegong','fz_xinkuanggu'], ai:{ @@ -8098,6 +8103,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, subSkill:{ others:{ + audio:'rexuanhuo', + forceaudio:true, enable:'phaseUse', usable:1, filter:function(event,player){ @@ -8293,7 +8300,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, gzenyuan:{ locked:true, - audio:['enyuan',2], + audio:'reenyuan', group:['gzenyuan_gain','gzenyuan_damage'], preHidden:true, ai:{ @@ -8308,6 +8315,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, subSkill:{ gain:{ + audio:'reenyuan', trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ @@ -8315,9 +8323,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, logTarget:'player', content:function(){trigger.player.draw()}, - audio:'enyuan1', }, damage:{ + audio:'reenyuan', trigger:{player:'damageEnd'}, forced:true, filter:function(event,player){ @@ -8336,7 +8344,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } else trigger.source.loseHp(); }, - audio:'enyuan2', }, } }, @@ -13718,7 +13725,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzzhukou:'逐寇', gzzhukou_info:'当你于一名角色的出牌阶段第一次造成伤害后,你可以摸X张牌(X为本回合你已使用的牌数且至多为5)。', gzduannian:'断念', - gzduannian_info:'出牌阶段结束时,若你有手牌你可以弃置所有手牌,然后将手牌摸至体力上限。', + gzduannian_info:'出牌阶段结束时,若你有手牌,你可以弃置所有手牌,然后将手牌摸至体力上限。', gzlianyou:'莲佑', gzlianyou_info:'你死亡时,可以选择一名其他角色。该角色获得技能“兴火”。', gzxinghuo:'兴火', @@ -13742,7 +13749,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzfangyuan:'方圆', gzfangyuan_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段开始时,你视为对一名围攻角色使用【杀】。', daming:'达命', - daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。', + daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①令A回复1点体力;②令A视为对由你选择的另一名角色使用一张雷【杀】。', xiaoni:'嚣逆', xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。', gztongduo:'统度',