手杀新将bugfix

This commit is contained in:
copcap 2023-11-20 09:34:16 +08:00
parent 647e6b289b
commit 0ff2dc60d9
No known key found for this signature in database
GPG Key ID: 30E7AB6699451AEE
5 changed files with 109 additions and 65 deletions

View File

@ -128,7 +128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(wuqinxi=='鹿'){ if(wuqinxi=='鹿'){
player.logSkill('wuling_wuqinxi'); player.logSkill('wuling_wuqinxi');
player.recover(); player.recover();
player.discard(player.getCards('j')); player.discard(player.getCards('j')).discarder=player;
} }
}, },
ai:{ ai:{
@ -156,7 +156,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
trigger:{ trigger:{
source:'damageBegin1', source:'damageBegin1',
player:['phaseBegin','damageBegin2','phaseUseBegin'], player:['phaseBegin','damageBegin4','phaseUseBegin'],
}, },
filter:function(event,player,name){ filter:function(event,player,name){
var wuqinxi=player.storage.wuling_wuqinxi; var wuqinxi=player.storage.wuling_wuqinxi;
@ -167,15 +167,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(wuqinxi!='虎'||!event.card) return false; if(wuqinxi!='虎'||!event.card) return false;
var evt=event.getParent('useCard'); var evt=event.getParent('useCard');
return evt.targets&&evt.targets.length==1&&evt.targets.includes(event.player); return evt.targets&&evt.targets.length==1&&evt.targets.includes(event.player);
break; case 'damageBegin4':
case 'damageBegin2':
return wuqinxi=='熊'; return wuqinxi=='熊';
break;
default: default:
if(wuqinxi=='鹤') return true; if(wuqinxi=='鹤') return true;
if(wuqinxi!='猿') return false; if(wuqinxi!='猿') return false;
return game.hasPlayer(target=>target.countGainableCards(player,'e')); return game.hasPlayer(target=>target.countGainableCards(player,'e'));
break;
} }
}, },
forced:true, forced:true,
@ -197,7 +194,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.num++; trigger.num++;
event.finish(); event.finish();
break; break;
case 'damageBegin2': case 'damageBegin4':
trigger.num--; trigger.num--;
event.finish(); event.finish();
break; break;
@ -259,11 +256,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
var cards=_status.renku.slice(); var cards=_status.renku.slice();
game.cardsDiscard(cards); game.cardsDiscard(cards).fromRenku=true;
_status.renku.removeArray(cards); _status.renku.removeArray(cards);
player.$throw(cards,1000); player.$throw(cards,1000);
game.updateRenku(); game.updateRenku();
game.log(cards,'被置入了弃牌堆'); game.log(cards,'从仁库进入了弃牌堆');
'step 1' 'step 1'
var targets=game.filterPlayer(); var targets=game.filterPlayer();
player.line(targets); player.line(targets);

View File

@ -411,7 +411,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=player.countDiscardableCards(player,'he'); var num=player.countDiscardableCards(player,'he');
if(num){ if(num){
var result=yield player.chooseToDiscard('纳学:弃置任意张牌并摸等量的牌',[1,num],true).set('ai',lib.skill.zhiheng.check); var result=yield player.chooseToDiscard('纳学:弃置任意张牌并摸等量的牌',[1,num],true).set('ai',lib.skill.zhiheng.check);
if(result.bool) player.draw(result.cards.length); if(result.bool) yield player.draw(result.cards.length);
} }
if(player.countCards('he')){ if(player.countCards('he')){
var result2=yield player.chooseCardTarget({ var result2=yield player.chooseCardTarget({
@ -449,16 +449,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
forced:true, forced:true,
forceDie:true, forceDie:true,
skillAnimation:true,
animationColor:'orange',
logTarget:function(event,player){
return game.filterPlayer(target=>target!=player);
},
content:function(){ content:function(){
'step 0'
var targets=game.filterPlayer(target=>target!=player); var targets=game.filterPlayer(target=>target!=player);
var sum=targets.reduce((num,target)=>num+=target.hp,0); var sum=targets.reduce((num,target)=>num+=target.hp,0);
sum=Math.max(1,Math.floor(sum/targets.length)); sum=Math.max(1,Math.floor(sum/targets.length));
targets.forEach(target=>{ event.num=sum;
if(target.hp!=sum){ event.targets=targets;
game.log(target,'将体力从',target.hp,'改为',sum); 'step 1'
target.changeHp(sum-target.hp)._triggered=null; var target=targets.shift();
} var delta=target.hp-num;
}); if(delta!=0){
target[delta>0?'loseHp':'recover'](Math.abs(delta));
}
if(targets.length) event.redo();
}, },
}, },
//阎象 //阎象
@ -15745,7 +15754,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
naxue:'纳学', naxue:'纳学',
naxue_info:'你可以跳过出牌阶段。若如此做,你弃置任意张牌并摸等量的牌,然后交给一名其他角色至多两张牌。', naxue_info:'你可以跳过出牌阶段。若如此做,你弃置任意张牌并摸等量的牌,然后交给一名其他角色至多两张牌。',
yijie:'遗诫', yijie:'遗诫',
yijie_info:'锁定技当你死亡时所有其他角色将体力调整为XX为所有其他角色的体力值之和除以所有其他角色数向下取整且X至少为1。', yijie_info:'锁定技。当你死亡时你令所有其他角色将体力回复或失去至XX为所有其他角色的体力之和除以所有其他角色数向下取整且X至少为1。',
mobile_standard:'手杀异构·标准包', mobile_standard:'手杀异构·标准包',
mobile_shenhua_feng:'手杀异构·其疾如风', mobile_shenhua_feng:'手杀异构·其疾如风',

View File

@ -61,32 +61,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.type2(card)=='trick') return true; if(get.type2(card)=='trick') return true;
}, },
}, },
init:function(player){
var skill='sbqicai_'+player.playerid;
if(!lib.skill[skill]){
lib.skill[skill]={
onremove:true,
mark:true,
marktext:'奇',
intro:{
markcount:function(storage){
return (storage||0).toString();
},
content:function(storage){
return '已被掠夺'+(storage||0)+'张普通锦囊牌';
},
},
};
lib.translate[skill]='奇才';
lib.translate[skill+'_bg']='奇';
}
},
getLimit:3, getLimit:3,
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
onChooseToUse:function(event){
if(!event.sbqicai&&!game.online){
const player=get.player();
const cards=Array.from(ui.discardPile.childNodes).filter(card=>lib.skill.sbqicai.filterCardx(card,player));
event.set('sbqicai',cards);
}
},
filter:function(event,player){ filter:function(event,player){
if(!game.hasPlayer(target=>target!=player&&target.hasEmptySlot(2))) return false; if(!game.hasPlayer(target=>target!=player&&target.hasEmptySlot(2))) return false;
return player.countCards('h',card=>lib.skill.sbqicai.filterCardx(card,player))||Array.from(ui.discardPile.childNodes).some(card=>lib.skill.sbqicai.filterCardx(card,player)); return player.countCards('h',card=>lib.skill.sbqicai.filterCardx(card,player))||event.sbqicai&&event.sbqicai.length;
}, },
filterCardx:function(card,player){ filterCardx:function(card,player){
if(player.getStorage('sbqicai').includes(card.name)) return false; if(player.getStorage('sbqicai').includes(card.name)) return false;
@ -95,8 +82,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
usable:1, usable:1,
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
var list1=player.getCards('h',card=>lib.skill.sbqicai.filterCardx(card,player)); const list1=player.getCards('h',card=>lib.skill.sbqicai.filterCardx(card,player));
var list2=Array.from(ui.discardPile.childNodes).filter(card=>lib.skill.sbqicai.filterCardx(card,player)); const list2=event.sbqicai;
var dialog=ui.create.dialog('###奇才###<div class="text center">请选择一张防具牌置入一名其他角色的装备区</div>'); var dialog=ui.create.dialog('###奇才###<div class="text center">请选择一张防具牌置入一名其他角色的装备区</div>');
if(list1.length){ if(list1.length){
dialog.add('<div class="text center">手牌区</div>'); dialog.add('<div class="text center">手牌区</div>');
@ -105,6 +92,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(list2.length){ if(list2.length){
dialog.add('<div class="text center">弃牌堆</div>'); dialog.add('<div class="text center">弃牌堆</div>');
dialog.add(list2); dialog.add(list2);
if(list1.length) dialog.classList.add('fullheight');
} }
return dialog; return dialog;
}, },
@ -143,7 +131,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.markAuto('sbqicai',[cards[0].name]); player.markAuto('sbqicai',[cards[0].name]);
target.equip(cards[0]); target.equip(cards[0]);
player.addSkill('sbqicai_gain'); player.addSkill('sbqicai_gain');
target.addSkill('sbqicai_'+player.playerid); lib.skill.sbqicai.updateCounter(player,target,0);
}, },
ai:{ ai:{
result:{ result:{
@ -161,6 +149,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '请选择置入'+get.translation(links)+'的角色'; return '请选择置入'+get.translation(links)+'的角色';
}, },
}, },
updateCounter:function(player,target,num){
const skill=`sbqicai_${player.playerid}`;
game.broadcastAll(lib.skill.sbqicai.initSkill,skill);
if(!target.hasSkill(skill)) target.addSkill(skill);
if(num==0) target.clearMark(skill,false);
else if(num>0) target.addMark(skill,num,false);
if(target.countMark(skill)>=lib.skill.sbqicai.getLimit) target.removeSkill(skill);
if(!_status.postReconnect.sbqicai){
_status.postReconnect.sbqicai=[
lib.skill.sbqicai.initSkill,
[]
];
}
_status.postReconnect.sbqicai[1].add(skill);
},
initSkill:skill=>{
if(!lib.skill[skill]){
lib.skill[skill]={
onremove:true,
mark:true,
marktext:'奇',
intro:{
markcount:function(storage){
return (storage||0).toString();
},
content:function(storage){
return '已被掠夺'+get.cnNumber(storage||0)+'张普通锦囊牌';
},
},
};
lib.translate[skill]='奇才';
lib.translate[skill+'_bg']='奇';
}
},
ai:{ ai:{
order:7, order:7,
result:{ result:{
@ -170,6 +192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
}, },
marktext:'才',
intro:{content:'已使用$发动过此技能'}, intro:{content:'已使用$发动过此技能'},
subSkill:{ subSkill:{
gain:{ gain:{
@ -183,14 +206,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}); });
}, },
forced:true, forced:true,
direct:true,
charlotte:true,
content:function(){ content:function(){
'step 0' 'step 0'
if(!event.checkedTargets) event.checkedTargets=[];
var target=game.findPlayer(function(current){ var target=game.findPlayer(function(current){
if(!trigger.getg(current).length||!current.hasSkill('sbqicai_'+player.playerid)) return false; if(!trigger.getg(current).length||!current.hasSkill('sbqicai_'+player.playerid)) return false;
if(event.checkedTargets.includes(current)) return false;
if(current.countMark('sbqicai_'+player.playerid)>=lib.skill.sbqicai.getLimit) return false; if(current.countMark('sbqicai_'+player.playerid)>=lib.skill.sbqicai.getLimit) return false;
return trigger.getg(current).some(card=>get.type(card)=='trick'&&lib.filter.canBeGained(card,current,player)); return trigger.getg(current).some(card=>get.type(card)=='trick'&&lib.filter.canBeGained(card,current,player));
}); });
if(!target){
event.finish();
return;
}
event.target=target; event.target=target;
player.logSkill('sbqicai_gain',target);
event.checkedTargets.add(target);
var cards=trigger.getg(target).filter(card=>get.type(card)=='trick'&&lib.filter.canBeGained(card,target,player)); var cards=trigger.getg(target).filter(card=>get.type(card)=='trick'&&lib.filter.canBeGained(card,target,player));
if(cards.length<=lib.skill.sbqicai.getLimit-target.countMark('sbqicai_'+player.playerid)) event._result={bool:true,links:cards}; if(cards.length<=lib.skill.sbqicai.getLimit-target.countMark('sbqicai_'+player.playerid)) event._result={bool:true,links:cards};
else{ else{
@ -201,9 +234,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
'step 1' 'step 1'
if(result.bool){ if(result.bool){
game.delaye(0.5);
target.give(result.links,player); target.give(result.links,player);
target.addMark('sbqicai_'+player.playerid,result.links.length,false); lib.skill.sbqicai.updateCounter(player,target,result.links.length);
} }
event.goto(0);
}, },
}, },
}, },
@ -365,7 +400,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return event.player!=player&&player.getStorage('sbkanpo').includes(event.card.name); return event.player!=player&&player.getStorage('sbkanpo').includes(event.card.name);
}, },
prompt2:function(event,player){ prompt2:function(event,player){
return '移除'+get.translation(event.card.name)+',令'+get.translation(event.card)+'效'; return '移除'+get.translation(event.card.name)+'的记录,令'+get.translation(event.card)+'效';
}, },
check:function(event,player){ check:function(event,player){
var effect=0; var effect=0;
@ -423,12 +458,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=player.getCards('s',card=>card.hasGaintag('sbguanxing')); var cards=player.getCards('s',card=>card.hasGaintag('sbguanxing'));
if(cards.length){ if(cards.length){
player.chooseToMove().set('list',[ player.chooseToMove().set('list',[
['“星”',cards], ['你的“星”',cards],
['牌堆顶'], ['牌堆顶'],
]).set('prompt','观星:点击将牌移动到牌堆顶').set('processAI',function(list){ ]).set('prompt','观星:点击将牌移动到牌堆顶').set('processAI',function(list){
var cards=list[0][1].slice(),player=_status.event.player; var cards=list[0][1].slice(),player=_status.event.player;
var name=_status.event.getTrigger().name; var name=_status.event.getTrigger().name;
var target=(name=='phaseBegin'?player:target); var target=(name=='phaseZhunbei'?player:target);
var top=[],att=get.sgn(get.attitude(player,target)); var top=[],att=get.sgn(get.attitude(player,target));
if(att!=0&&(target!=player||!player.hasWuxie())){ if(att!=0&&(target!=player||!player.hasWuxie())){
for(var i=0;i<judges.length;i++){ for(var i=0;i<judges.length;i++){
@ -447,12 +482,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2' 'step 2'
if(result.bool){ if(result.bool){
var cards=result.moved[1]; var cards=result.moved[1];
player.$throw(cards,1000); player.loseToDiscardpile(cards,ui.cardPile,'insert').log=false;
for(var i=cards.length-1;i>=0;i--){ game.log(player,'将',cards,'置于了牌堆顶');
player.lose([cards[i]],ui.cardPile,'insert');
}
} }
else if(trigger.name=='phaseBegin') player.addTempSkill('sbguanxing_on'); else if(trigger.name=='phaseZhunbei') player.addTempSkill('sbguanxing_on');
}, },
group:'sbguanxing_unmark', group:'sbguanxing_unmark',
subSkill:{ subSkill:{
@ -495,22 +528,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
sbkongcheng:{ sbkongcheng:{
audio:2, audio:2,
trigger:{player:'damageBegin2'}, trigger:{player:['damageBegin3','damageBegin4']},
filter:function(event,player){ filter:function(event,player,name){
return player.hasSkill('sbguanxing'); return player.hasSkill('sbguanxing');
}, },
forced:true, forced:true,
content:function(){ content:function(){
'step 0' 'step 0'
var num=player.countCards('s',card=>card.hasGaintag('sbguanxing')); var num=player.countCards('s',card=>card.hasGaintag('sbguanxing'));
event.num=num; if(!num&&event.triggername=='damageBegin3'){
if(!num){ trigger.increase('num');
trigger.num++; }
event.finish(); else if(num&&event.triggername=='damageBegin4'){
player.judge(function(result){
if(get.number(result)<=get.player().countCards('s',card=>card.hasGaintag('sbguanxing'))) return 2;
return -1;
}).set('judge2',result=>result.bool).set('callback',function(){
if(event.judgeResult.number<=player.countCards('s',card=>card.hasGaintag('sbguanxing'))){
event.getParent('sbkongcheng').getTrigger().decrease('num');
}
});
} }
else player.judge();
'step 1'
if(result.number<=num) trigger.num--;
}, },
}, },
//卢植 //卢植
@ -5571,14 +5609,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbkanpo:'看破', sbkanpo:'看破',
sbkanpo_info:'①一轮开始时,你清除“看破”记录的牌名,然后你可以记录三个非此次移去的牌名的牌名。②一名其他角色使用你“看破”记录的牌名的牌时,你可以从“看破”中移去此牌名,令此牌无效。', sbkanpo_info:'①一轮开始时,你清除“看破”记录的牌名,然后你可以记录三个非此次移去的牌名的牌名。②一名其他角色使用你“看破”记录的牌名的牌时,你可以从“看破”中移去此牌名,令此牌无效。',
sbguanxing:'观星', sbguanxing:'观星',
sbguanxing_info:'①准备阶段,你将武将牌上所有“星”置入弃牌堆将牌堆顶的X张牌称为“星”置于你的武将牌上X为你此次移去的“星”数+1且至多为7本次为第一次发动〖观星〗则X为7然后你可以将任意张“星”置于牌堆顶若你未将任意“星”置于牌堆顶你可以于结束阶段将任意张“星”置于牌堆顶。②你可以如手牌般使用或打出“星”。', sbguanxing_info:'①准备阶段,你将所有“星”置入弃牌堆将牌堆顶的X张牌置于你的武将牌上,称为“星”。然后你可以将任意张“星”置于牌堆顶X为你此次移去的“星”数+1且至多为7你此前未发动过〖观星①〗则X为7。②结束阶段若你未于本回合的准备阶段将“星”置于过牌堆顶你可以将任意张“星”置于牌堆顶。③你可以如手牌般使用或打出“星”。',
sbkongcheng:'空城', sbkongcheng:'空城',
sbkongcheng_info:'锁定技,当你受到伤害时,若你拥有技能〖观星〗,则:若你有“星”,你进行一次判定,若判定结果点数小于等于你的“星”,则此伤害-1没有“星”此伤害+1。', sbkongcheng_info:'锁定技。当你受到伤害时,若你有〖观星〗,且若你:有“星”,你判定,若结果点数不大于你的“星”数,此伤害-1没有“星”此伤害+1。',
sb_huangyueying:'谋黄月英', sb_huangyueying:'谋黄月英',
sb_huangyueying_prefix:'谋', sb_huangyueying_prefix:'谋',
sbqicai:'奇才', sbqicai:'奇才',
sbqicai_backup:'奇才', sbqicai_backup:'奇才',
sbqicai_info:'①出牌阶段限一次,你可以将手牌中或弃牌堆中的一张防具牌置于一名其他角色的装备栏,然后其须将之后获得的前三张基本锦囊牌交给你。②你使用锦囊牌无距离限制。', sbqicai_info:'①出牌阶段限一次。你可以将手牌中或弃牌堆中的一张防具牌置于一名其他角色的防具栏,然后其获得如下效果:当其得到普通锦囊牌后,其将此牌交给你(限三张)。②你使用锦囊牌无距离限制。',
sbjizhi:'集智', sbjizhi:'集智',
sbjizhi_info:'锁定技,当你使用一张普通锦囊牌时,你摸一张牌,且此牌本回合不计入你的手牌上限。', sbjizhi_info:'锁定技,当你使用一张普通锦囊牌时,你摸一张牌,且此牌本回合不计入你的手牌上限。',

View File

@ -956,7 +956,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.checkGlobalHistory('cardMove',function(evt){ game.checkGlobalHistory('cardMove',function(evt){
if(evt.name=='cardsDiscard'&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards); if(evt.name=='cardsDiscard'&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards);
}); });
return cards; return cards.filterInD('d');
}, },
audio:2, audio:2,
sunbenSkill:true, sunbenSkill:true,

View File

@ -404,6 +404,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(result.bool){ if(result.bool){
var suits=result.links.map(i=>i[2].slice(6)); var suits=result.links.map(i=>i[2].slice(6));
player.logSkill('qingbei');
player.addTempSkill('qingbei_effect','roundStart'); player.addTempSkill('qingbei_effect','roundStart');
player.setStorage('qingbei_effect',suits); player.setStorage('qingbei_effect',suits);
player.markSkill('qingbei_effect'); player.markSkill('qingbei_effect');
@ -418,12 +419,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'useCardAfter'}, trigger:{player:'useCardAfter'},
charlotte:true, charlotte:true,
onremove:true, onremove:true,
forced:true,
filter:function(event,player){ filter:function(event,player){
if(!lib.suit.includes(get.suit(event.card))) return false; if(!lib.suit.includes(get.suit(event.card))) return false;
return player.getStorage('qingbei_effect').length; return player.getStorage('qingbei_effect').length;
}, },
direct:true,
firstDo:true,
content:function(){ content:function(){
player.draw(player.getStorage('qingbei_effect').length); player.draw(player.getStorage('qingbei_effect').length);
}, },