commit
f72b6d719e
|
@ -575,21 +575,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content(){
|
||||
'step 0'
|
||||
player.unmarkSkill('clanyuzhi');
|
||||
var num1=0,num2=0,num3=0,bool=true;
|
||||
var history=player.actionHistory;
|
||||
for(var i=history.length-2;i>=0;i--){
|
||||
for(var evt of history[i].gain){
|
||||
if(evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'){
|
||||
if(bool) num1+=evt.cards.length;
|
||||
else num2+=evt.cards.length;
|
||||
}
|
||||
}
|
||||
if(bool) num3+=history[i].useCard.length;
|
||||
if(history[i].isRound){
|
||||
if(bool) bool=false;
|
||||
else break;
|
||||
}
|
||||
}
|
||||
var num1=player.getRoundHistory('gain',evt=>{
|
||||
return evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi';
|
||||
},1).reduce((sum,evt)=>sum+evt.cards.length,0);
|
||||
var num2=player.getRoundHistory('gain',evt=>{
|
||||
return evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi';
|
||||
},2).reduce((sum,evt)=>sum+evt.cards.length,0);
|
||||
var num3=player.getRoundHistory('useCard',evt=>{
|
||||
return evt.cards&&evt.cards.length;
|
||||
},1).reduce((sum,evt)=>sum+evt.cards.length,0);
|
||||
event.num1=num1;
|
||||
if(num1>0&&(num2>0&&num1>num2)||num1>num3){
|
||||
player.logSkill('clanyuzhi');
|
||||
|
@ -607,15 +601,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 2'
|
||||
if(!player.countCards('h')) event.finish();
|
||||
'step 3'
|
||||
player.chooseToDiscard('迂志:请弃置一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',true,function(card,player){
|
||||
player.chooseCard('迂志:请展示一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',function(card,player){
|
||||
var num=get.cardNameLength(card);
|
||||
return typeof num=='number'&&num>0;
|
||||
}).set('logSkill','clanyuzhi').set('ai',function(card){
|
||||
},true).set('logSkill','clanyuzhi').set('ai',function(card){
|
||||
if(_status.event.dying&&_status.event.num>0&&get.cardNameLength(card)>_status.event.num) return 1/get.cardNameLength(card);//怂
|
||||
return get.cardNameLength(card);//勇
|
||||
}).set('dying',player.hp+player.countCards('hs',{name:['tao','jiu']})<1).set('num',event.num1);
|
||||
'step 4'
|
||||
if(result.bool){
|
||||
player.logSkill('clanyuzhi');
|
||||
player.showCards(result.cards,get.translation(player)+'发动了【迂志】');
|
||||
player.draw(get.cardNameLength(result.cards[0]));
|
||||
player.storage.clanyuzhi=get.cardNameLength(result.cards[0]);
|
||||
player.markSkill('clanyuzhi');
|
||||
|
@ -632,7 +628,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
trigger:{player:'damageEnd',source:'damageSource'},
|
||||
filter(event,player){
|
||||
if(!event.card||player.isLinked()) return false;
|
||||
if(!event.card/*||player.isLinked()*/) return false;
|
||||
if(game.getGlobalHistory('everything',evt=>{
|
||||
if(evt.name!='damage'||!evt.card) return false;
|
||||
return evt.player==player||(evt.source&&evt.source==player);
|
||||
|
@ -645,7 +641,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 0'
|
||||
var num=get.cardNameLength(trigger.card),str='';
|
||||
if(player.getDamagedHp()>0) str+=('并摸'+get.cnNumber(player.getDamagedHp())+'张牌');
|
||||
player.chooseToDiscard(get.prompt('clanxieshu'),'横置武将牌,弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){
|
||||
player.chooseToDiscard(get.prompt('clanxieshu'),/*'横置武将牌,'+*/'弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){
|
||||
var player=_status.event.player;
|
||||
var num=_status.event.num;
|
||||
var num2=player.getDamagedHp();
|
||||
|
@ -655,7 +651,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}).set('num',num).logSkill='clanxieshu';
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
player.link(true);
|
||||
//player.link(true);
|
||||
if(player.getDamagedHp()>0) player.draw(player.getDamagedHp());
|
||||
}
|
||||
},
|
||||
|
@ -1989,16 +1985,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
forced:true,
|
||||
filter(event,player){
|
||||
if(!game.hasPlayer(current=>current!=player)) return false;
|
||||
var card=event.card,type=get.type2(card);
|
||||
for(var i=player.actionHistory.length-1; i>=0; i--){
|
||||
var history=player.actionHistory[i].useCard;
|
||||
for(var evt of history){
|
||||
if(evt==event) continue;
|
||||
if(get.type2(evt.card)==type) return false;
|
||||
}
|
||||
if(player.actionHistory[i].isRound) break;
|
||||
}
|
||||
return true;
|
||||
const type=get.type2(event.card);
|
||||
return player.getRoundHistory('useCard',evt=>get.type2(evt.card)==type).indexOf(event)==0;
|
||||
},
|
||||
getNum(player){
|
||||
return (player.countCards('ej')>0)+(player.isDamaged())+(Math.max(0,player.hp)<player.countCards('h'));
|
||||
|
@ -2482,23 +2470,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
intro:{
|
||||
content:'已使用过的花色:$',
|
||||
onunmark:true
|
||||
onunmark:true,
|
||||
},
|
||||
trigger:{player:'useCardAfter'},
|
||||
forced:true,
|
||||
filter(event,player){
|
||||
if(!lib.suit.includes(get.suit(event.card))) return false;
|
||||
var card=event.card,suit=get.suit(card);
|
||||
for(var i=player.actionHistory.length-1; i>=0; i--){
|
||||
var history=player.actionHistory[i].useCard;
|
||||
for(var evt of history){
|
||||
if(evt==event) continue;
|
||||
if(get.suit(evt.card)==suit) return false;
|
||||
}
|
||||
if(player.actionHistory[i].isRound) break;
|
||||
}
|
||||
return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||
|
||||
player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h');
|
||||
const suit=get.suit(event.card);
|
||||
if(player.getRoundHistory('useCard',evt=>get.suit(evt.card)==suit).indexOf(event)!=0) return false;
|
||||
return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h');
|
||||
},
|
||||
content(){
|
||||
'step 0'
|
||||
|
@ -2514,37 +2494,49 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(event.link&&event.recast) player.draw();
|
||||
},
|
||||
group:['clandianzhan_count','clandianzhan_clear'],
|
||||
group:'clandianzhan_count',
|
||||
subSkill:{
|
||||
count:{
|
||||
charlotte:true,
|
||||
trigger:{player:'useCardAfter'},
|
||||
filter(event,player){
|
||||
let suit=get.suit(event.card);
|
||||
return lib.suits.includes(suit)&&!player.getStorage('clandianzhan').includes(suit);
|
||||
},
|
||||
forced:true,
|
||||
silent:true,
|
||||
charlotte:true,
|
||||
content(){
|
||||
player.storage.clandianzhan=[];
|
||||
for(let i=player.actionHistory.length-1; i>=0; i--){
|
||||
let history=player.actionHistory[i].useCard;
|
||||
for(let evt of history){
|
||||
player.storage.clandianzhan.add(get.suit(evt.card));
|
||||
}
|
||||
if(player.actionHistory[i].isRound) break;
|
||||
let suits=player.getRoundHistory('useCard',evt=>{
|
||||
return lib.suits.includes(get.suit(evt.card));
|
||||
}).reduce((list,evt)=>{
|
||||
return list.add(get.suit(evt.card));
|
||||
},[]).sort((a,b)=>lib.suits.indexOf(a)-lib.suits.indexOf(b));
|
||||
if(!player.storage.clandianzhan){
|
||||
player.when({global:'roundStart'}).then(()=>{
|
||||
delete player.storage.clandianzhan;
|
||||
player.unmarkSkill('clandianzhan');
|
||||
});
|
||||
}
|
||||
player.storage.clandianzhan=suits;
|
||||
player.markSkill('clandianzhan');
|
||||
},
|
||||
sub:true
|
||||
},
|
||||
clear:{
|
||||
trigger:{global:'roundStart'},
|
||||
silent:true,
|
||||
charlotte:true,
|
||||
content(){
|
||||
player.unmarkSkill('clandianzhan');
|
||||
},
|
||||
sub:true
|
||||
},
|
||||
init(player){
|
||||
let suits=player.getRoundHistory('useCard',evt=>{
|
||||
return lib.suits.includes(get.suit(evt.card));
|
||||
}).reduce((list,evt)=>{
|
||||
return list.add(get.suit(evt.card));
|
||||
},[]).sort((a,b)=>lib.suits.indexOf(a)-lib.suits.indexOf(b));
|
||||
if(suits.length){
|
||||
if(!player.storage.clandianzhan){
|
||||
player.when({global:'roundStart'}).then(()=>{
|
||||
delete player.storage.clandianzhan;
|
||||
player.unmarkSkill('clandianzhan');
|
||||
});
|
||||
}
|
||||
player.storage.clandianzhan=suits;
|
||||
player.markSkill('clandianzhan');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2940,9 +2932,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
clanchenya_info:'当一名角色发动“出牌阶段限一次”的技能后,你可以令其重铸任意张牌名字数为X的牌(X为其手牌数)。',
|
||||
clan_zhonghui:'族钟会',
|
||||
clanyuzhi:'迂志',
|
||||
clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你弃置一张手牌,然后摸X张牌(X为此牌牌名字数)。',
|
||||
clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你展示一张手牌,然后摸X张牌(X为此牌牌名字数)。',
|
||||
clanxieshu:'挟术',
|
||||
clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以横置武将牌,然后弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。',
|
||||
clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。',
|
||||
clan_zhongyu:'族钟毓',
|
||||
clanjiejian:'捷谏',
|
||||
clanjiejian_info:'当你于一回合使用第X张牌指定第一个目标后,若此牌不为装备牌,则你可以令一名目标角色摸X张牌。(X为此牌牌名字数)',
|
||||
|
|
|
@ -1093,7 +1093,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger:{player:'phaseJieshuBegin'},
|
||||
prompt2:function(event,player){
|
||||
var str='获得技能';
|
||||
var num=lib.skill.olsbranji.getNum(event,player);
|
||||
var num=lib.skill.olsbranji.getNum(player);
|
||||
if(num>=player.getHp()) str+='【困奋】';
|
||||
if(num==player.getHp()) str+='和';
|
||||
if(num<=player.getHp()) str+='【诈降】';
|
||||
|
@ -1109,7 +1109,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return str;
|
||||
},
|
||||
check:function(event,player){
|
||||
var num=lib.skill.olsbranji.getNum(event,player);
|
||||
var num=lib.skill.olsbranji.getNum(player);
|
||||
if(num==player.getHp()) return true;
|
||||
return player.getHandcardLimit()-player.countCards('h')>=3||player.getDamagedHp()>=2;
|
||||
},
|
||||
|
@ -1120,7 +1120,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var player=map.player;
|
||||
var trigger=map.trigger;
|
||||
player.awakenSkill('olsbranji');
|
||||
var num=lib.skill.olsbranji.getNum(trigger,player);
|
||||
var num=lib.skill.olsbranji.getNum(player);
|
||||
const skills = [];
|
||||
if(num>=player.getHp()){
|
||||
skills.push('kunfen');
|
||||
|
@ -1159,8 +1159,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
getList:function(event){
|
||||
return event.getParent().phaseList.map(list=>list.split('|')[0]);
|
||||
},
|
||||
getNum:function(event,player){
|
||||
return lib.skill.olsbranji.getList(event).slice(0,event.getParent().num).filter(name=>player.getHistory('useCard',evt=>evt.getParent(name).name==name).length).length;
|
||||
getNum:function(player){
|
||||
return player.getHistory('useCard',evt=>{
|
||||
return lib.phaseName.some(name=>{
|
||||
return evt.getParent(name).name==name;
|
||||
});
|
||||
}).reduce((list,evt)=>{
|
||||
return list.add(evt.getParent(lib.phaseName.find(name=>evt.getParent(name).name==name)));
|
||||
},[]).length;
|
||||
},
|
||||
subSkill:{
|
||||
norecover:{
|
||||
|
|
|
@ -760,8 +760,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{threaten:2.5},
|
||||
getLimit:9,
|
||||
getNum(num){
|
||||
if(typeof num!='number'||!Array.from({length:9}).map((_,i)=>i+1).includes(num)) return 0;
|
||||
return [2,2,5,5,1,2,2,3,3][num-1];
|
||||
const list=[2,2,5,5,1,2,2,3,3,2];
|
||||
if(typeof num!='number'||!Array.from({length:list.length}).map((_,i)=>i+1).includes(num)) return 0;
|
||||
return list[num-1];
|
||||
},
|
||||
getEffect(player,num){
|
||||
if(!player||typeof num!='number') return 0;
|
||||
|
@ -772,8 +773,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return get.attitude(player,target)>0&&target.isTurnedOver();
|
||||
})) return 10;
|
||||
return 0;
|
||||
case 2://-2,摸min(5,max(1,阵亡角色数))的牌
|
||||
return Math.min(5,(Math.max(1,game.dead.length)));
|
||||
case 2://-2,摸min(5,max(2,阵亡角色数))的牌
|
||||
return Math.min(5,(Math.max(2,game.dead.length)));
|
||||
case 3://-5,加上限加血+复原装备栏
|
||||
if(!game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)>0&&target.maxHp<10;
|
||||
|
@ -812,6 +813,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return get.attitude(player,target)<0;
|
||||
})) return 2.5;
|
||||
return 0;
|
||||
case 10://-2,封印锦囊牌外的手牌
|
||||
if(game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)<0;
|
||||
})) return 1.5;
|
||||
return 0;
|
||||
default://其他
|
||||
return 0;
|
||||
}
|
||||
|
@ -833,7 +839,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var dialog=ui.create.dialog('行殇:请选择你要执行的一项','hidden');
|
||||
dialog.add([[
|
||||
[1,'移去2个“颂”标记,复原一名角色的武将牌'],
|
||||
[2,'移去2个“颂”标记,令一名角色摸'+get.cnNumber(Math.min(5,Math.max(1,game.dead.length)))+'张牌'],
|
||||
[2,'移去2个“颂”标记,令一名角色摸'+get.cnNumber(Math.min(5,Math.max(2,game.dead.length)))+'张牌'],
|
||||
[3,'移去5个“颂”标记,令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏'],
|
||||
[4,'移去5个“颂”标记,获得一名已阵亡角色的所有技能,然后失去〖行殇〗〖放逐〗〖颂威〗'],
|
||||
],'textbutton']);
|
||||
|
@ -888,7 +894,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(target.isTurnedOver()) target.turnOver();
|
||||
break;
|
||||
case 2:
|
||||
target.draw(Math.min(5,Math.max(1,game.dead.length)));
|
||||
target.draw(Math.min(5,Math.max(2,game.dead.length)));
|
||||
break;
|
||||
case 3:
|
||||
target.gainMaxHp();
|
||||
|
@ -951,7 +957,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
case 1:
|
||||
return str+'移去2个“颂”标记,复原一名角色的武将牌';
|
||||
case 2:
|
||||
return str+'移去2个“颂”标记,令一名角色摸'+get.cnNumber(Math.min(5,Math.max(1,game.dead.length)))+'张牌';
|
||||
return str+'移去2个“颂”标记,令一名角色摸'+get.cnNumber(Math.min(5,Math.max(2,game.dead.length)))+'张牌';
|
||||
case 3:
|
||||
return str+'移去5个“颂”标记,令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏';
|
||||
case 4:
|
||||
|
@ -963,7 +969,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
order(_,player){
|
||||
const info=get.info('sbxingshang');
|
||||
const goon=(player.hasSkill('sbfangzhu')&&(player.getStat('skill').sbfangzhu||0)<(get.info('sbfangzhu').usable||Infinity));
|
||||
let list=Array.from({length:goon?9:4}).map((_,i)=>i+1);
|
||||
let list=Array.from({length:goon?10:4}).map((_,i)=>i+1);
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num));
|
||||
list.sort((a,b)=>info.getEffect(player,b)-info.getEffect(player,a));
|
||||
return (Array.from({length:4}).map((_,i)=>i+1).includes(list[0])&&info.getEffect(player,list[0])>0)?1:0;
|
||||
|
@ -989,7 +995,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
[2,'移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束'],
|
||||
[3,'移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束'],
|
||||
[4,'移去3个“颂”标记,令一名其他角色将武将牌翻面'],
|
||||
[5,'移去3个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束']
|
||||
[5,'移去3个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束'],
|
||||
[6,'移去2个“颂”标记,令一名其他角色于手牌中只能使用锦囊牌直到其回合结束'],
|
||||
],'textbutton']);
|
||||
return dialog;
|
||||
},
|
||||
|
@ -998,12 +1005,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return game.hasPlayer(target=>{
|
||||
if(target==player) return false;
|
||||
const num=button.link,storage=target.getStorage('sbfangzhu_ban');
|
||||
return !((num==1&&storage.includes('basic'))||(num==5&&storage.includes('equip')));
|
||||
return !((num==1&&storage.includes('basic'))||(num==5&&storage.includes('equip'))||(num==6&&storage.includes('trick')));
|
||||
});
|
||||
},
|
||||
check(button){
|
||||
const player=get.event('player'),info=get.info('sbxingshang');
|
||||
let list=Array.from({length:5}).map((_,i)=>i+1);
|
||||
let list=Array.from({length:6}).map((_,i)=>i+1);
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num+4));
|
||||
const num=list.sort((a,b)=>info.getEffect(player,b+4)-info.getEffect(player,a+4))[0]-4;
|
||||
return (button.link==num)?10:0;
|
||||
|
@ -1017,20 +1024,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filterTarget(card,player,target){
|
||||
if(target==player) return false;
|
||||
const num=lib.skill.sbfangzhu_backup.num,storage=target.getStorage('sbfangzhu_ban');
|
||||
return !((num==1&&storage.includes('basic'))||(num==5&&storage.includes('equip')));
|
||||
return !((num==1&&storage.includes('basic'))||(num==5&&storage.includes('equip'))||(num==6&&storage.includes('trick')));
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const target=event.target;
|
||||
const num=lib.skill.sbfangzhu_backup.num;
|
||||
player.removeMark('sbxingshang',get.info('sbxingshang').getNum(num+4));
|
||||
switch(num){
|
||||
case 1:
|
||||
case 1: case 2: case 6:
|
||||
const type=['basic','equip','trick'][[1,2,6].indexOf(num)];
|
||||
target.addTempSkill('sbfangzhu_ban',{player:'phaseEnd'});
|
||||
target.markAuto('sbfangzhu_ban',['basic']);
|
||||
break;
|
||||
case 2:
|
||||
target.removeSkill('baiban');
|
||||
target.addTempSkill('baiban',{player:'phaseEnd'});
|
||||
target.markAuto('sbfangzhu_ban',[type]);
|
||||
break;
|
||||
case 3:
|
||||
target.addTempSkill('sbfangzhu_kill',{player:'phaseEnd'});
|
||||
|
@ -1062,6 +1066,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return 0;
|
||||
case 5:
|
||||
return -target.countCards('h',card=>get.type(card)!='equip')-3;
|
||||
case 6:
|
||||
return -target.countCards('h',card=>get.type2(card)!='trick')-2;
|
||||
}
|
||||
},
|
||||
},
|
||||
|
@ -1081,6 +1087,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return str+'移去3个“颂”标记,令一名其他角色将武将牌翻面';
|
||||
case 5:
|
||||
return str+'移去3个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束';
|
||||
case 6:
|
||||
return str+'移去2个“颂”标记,令一名其他角色于手牌中只能使用锦囊牌直到其回合结束';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1088,10 +1096,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
order(_,player){
|
||||
const info=get.info('sbxingshang');
|
||||
const goon=(player.hasSkill('sbxingshang')&&(player.getStat('skill').sbxingshang_use||0)<(info.subSkill.use.usable||Infinity));
|
||||
let list=Array.from({length:goon?9:5}).map((_,i)=>i+(goon?1:5));
|
||||
let list=Array.from({length:goon?10:6}).map((_,i)=>i+(goon?1:5));
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num));
|
||||
list.sort((a,b)=>info.getEffect(player,b)-info.getEffect(player,a));
|
||||
return (Array.from({length:5}).map((_,i)=>i+5).includes(list[0])&&info.getEffect(player,list[0])>0)?1:0;
|
||||
return (Array.from({length:6}).map((_,i)=>i+5).includes(list[0])&&info.getEffect(player,list[0])>0)?1:0;
|
||||
},
|
||||
result:{player:1},
|
||||
},
|
||||
|
@ -1150,7 +1158,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
forced:true,
|
||||
locked:false,
|
||||
async content(event,trigger,player){
|
||||
player.addMark('sbxingshang',Math.min(get.info('sbxingshang').getLimit-player.countMark('sbxingshang'),game.countPlayer(target=>target.group=='wei'&&target!=player)));
|
||||
player.addMark('sbxingshang',Math.min(get.info('sbxingshang').getLimit-player.countMark('sbxingshang'),2*game.countPlayer(target=>target.group=='wei'&&target!=player)));
|
||||
},
|
||||
group:'sbsongwei_delete',
|
||||
subSkill:{
|
||||
|
@ -7069,11 +7077,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sb_caopi:'谋曹丕',
|
||||
sb_caopi_prefix:'谋',
|
||||
sbxingshang:'行殇',
|
||||
sbxingshang_info:'①当一名角色受到伤害后(每回合限一次)或死亡时,你获得2个“颂”标记(你至多拥有9个“颂”标记)。②出牌阶段限两次,你可以:1.移去2个“颂”标记,令一名角色复原武将牌;2.移去2个“颂”标记,令一名角色摸X张牌(X为场上阵亡角色数,且X至少为1,至多为5);3.移去5个“颂”标记,令一名体力上限小于10的角色加1点体力上限,回复1点体力,随机恢复一个已废除的装备栏;4.移去5个“颂”标记,获得一名阵亡角色武将牌上的所有技能,然后你失去〖行殇〗〖放逐〗〖颂威〗。',
|
||||
sbxingshang_info:'①当一名角色受到伤害后(每回合限一次)或死亡时,你获得2个“颂”标记(你至多拥有9个“颂”标记)。②出牌阶段限两次,你可以:1.移去2个“颂”标记,令一名角色复原武将牌;2.移去2个“颂”标记,令一名角色摸X张牌(X为场上阵亡角色数,且X至少为2,至多为5);3.移去5个“颂”标记,令一名体力上限小于10的角色加1点体力上限,回复1点体力,随机恢复一个已废除的装备栏;4.移去5个“颂”标记,获得一名阵亡角色武将牌上的所有技能,然后你失去〖行殇〗〖放逐〗〖颂威〗。',
|
||||
sbfangzhu:'放逐',
|
||||
sbfangzhu_info:'出牌阶段限一次,你可以:1.移去1个“颂”标记,令一名其他角色于手牌中只能使用基本牌直到其回合结束;2.移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束;3.移去2个“颂”标记,令一名其他角色不能响应除其以外的角色使用的牌直到其回合结束;4.移去3个“颂”标记,令一名其他角色将武将牌翻面;5.移去3个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束。',
|
||||
sbfangzhu_info:'出牌阶段限一次,你可以:1.移去1个“颂”标记,令一名其他角色于手牌中只能使用基本牌直到其回合结束;2.移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束;3.移去2个“颂”标记,令一名其他角色不能响应除其以外的角色使用的牌直到其回合结束;4.移去3个“颂”标记,令一名其他角色将武将牌翻面;5.移去3个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束;6.移去2个“颂”标记,令一名其他角色于手牌中只能使用锦囊牌直到其回合结束。',
|
||||
sbsongwei:'颂威',
|
||||
sbsongwei_info:'主公技。①出牌阶段开始时,你获得Y个“颂”标记(Y为场上其他魏势力角色数)。②每局游戏限一次,出牌阶段,你可以令一名其他魏势力角色失去所有武将牌的技能。',
|
||||
sbsongwei_info:'主公技。①出牌阶段开始时,你获得Y个“颂”标记(Y为场上其他魏势力角色数的两倍)。②每局游戏限一次,出牌阶段,你可以令一名其他魏势力角色失去所有武将牌的技能。',
|
||||
sb_xunyu:'谋荀彧',
|
||||
sb_xunyu_prefix:'谋',
|
||||
sbquhu:'驱虎',
|
||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
characterSort:{
|
||||
sp:{
|
||||
sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'],
|
||||
sp_sibi:["yangxiu",'guotu',"chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi','tianchou'],
|
||||
sp_sibi:['ol_lukai',"yangxiu",'guotu',"chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi','tianchou'],
|
||||
sp_tianzhu:['liyi','zhangyan','niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'],
|
||||
sp_nvshi:['ol_dingshangwan',"lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu',"daxiaoqiao","jin_guohuai",'ol_hujinding'],
|
||||
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'],
|
||||
|
@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_zhongdan:["cuiyan","huangfusong"],
|
||||
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
|
||||
sp_others:["hanba","caiyang"],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan','ol_lukai','ol_liupi'],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan','ol_liupi'],
|
||||
},
|
||||
},
|
||||
characterFilter:{
|
||||
|
@ -3473,13 +3473,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return order;
|
||||
},
|
||||
},
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event){
|
||||
trigger:{player:['useCard','useCardAfter']},
|
||||
filter:function(event,player,name){
|
||||
if(name=='useCardAfter'){
|
||||
if(player.isTempBanned('olxiaofan')) return false;
|
||||
return player.getHistory('useCard',evt=>{
|
||||
return !player.getHistory('sourceDamage',evt2=>{
|
||||
return evt2.card&&evt2.card==evt.card;
|
||||
}).length&&get.tag(evt.card,'damage');
|
||||
}).indexOf(event)>=2;
|
||||
}
|
||||
return [1,11,12,13].includes(get.number(event.card));
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
if(event.triggername=='useCardAfter'){
|
||||
player.tempBanSkill('olxiaofan');
|
||||
event.finish();
|
||||
return;
|
||||
}
|
||||
trigger.targets.length=0;
|
||||
trigger.all_excluded=true;
|
||||
game.log(trigger.card,'被无效了');
|
||||
|
@ -27700,7 +27713,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olxiaofan:'嚣翻',
|
||||
olxiaofan_info:'当你需要使用不为【无懈可击】的牌时,你可以观看牌堆底的X+1张牌并使用其中的一张。此牌结算结束时,你依次弃置以下前X个区域中的所有牌:⒈判定区、⒉装备区、⒊手牌区(X为本回合你使用过的牌中包含的类型数)。',
|
||||
oltuishi:'侻失',
|
||||
oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。',
|
||||
oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。③当你使用伤害类卡牌结算完毕后,若此牌为你本回合使用的第三张或以上未造成伤害的卡牌,则你令本回合〖器翻〗失效。',
|
||||
ol_tw_zhangji:'张既',
|
||||
skill_zhangji_A:'技能',
|
||||
skill_zhangji_A_info:'出牌阶段限X次(X为你的体力值),当你使用牌指定一名其他角色为目标后,你可以观看其手牌,然后你选择一项:<br>1.弃置其一张牌,然后若弃置的牌是能造成火焰伤害的牌,你摸一张牌。<br>2.重铸其手牌中的所有【杀】和【决斗】。<br>3.若其没有【闪】,你与其互相对对方造成1点伤害。',
|
||||
|
|
356
mode/guozhan.js
356
mode/guozhan.js
|
@ -518,7 +518,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
gz_zoushi:['female','qun',3,['huoshui','new_qingcheng']],
|
||||
|
||||
gz_dengai:['male','wei',4,['tuntian','ziliang','gzjixi'],['gzskin','die_audio']],
|
||||
gz_caohong:['male','wei',4,['gzhuyuan','heyi'],['gzskin']],
|
||||
gz_caohong:['male','wei',4,['fakehuyuan','heyi'],['gzskin']],
|
||||
gz_jiangfei:['male','shu',3,['shengxi','gzshoucheng']],
|
||||
gz_jiangwei:['male','shu',4,['tiaoxin','yizhi','tianfu'],['gzskin']],
|
||||
gz_xusheng:['male','wu',4,['fakeyicheng'],['gzskin']],
|
||||
|
@ -569,7 +569,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
gz_wangping:['male','shu',4,['jianglue'],['gzskin']],
|
||||
gz_fazheng:['male','shu',3,['gzxuanhuo','gzenyuan'],['gzskin']],
|
||||
gz_wuguotai:['female','wu',3,['gzbuyi','ganlu'],['gzskin']],
|
||||
gz_lukang:['male','wu',4,['fakejueyan','keshou'],['gzskin']],
|
||||
gz_lukang:['male','wu',4,['fakejueyan','fakekeshou'],['gzskin']],
|
||||
gz_yuanshu:['male','qun',4,['gzweidi','gzyongsi'],['gzskin']],
|
||||
gz_zhangxiu:['male','qun',4,['gzfudi','gzcongjian'],['gzskin']],
|
||||
gz_jun_caocao:['male','wei',4,['jianan','huibian','gzzongyu','wuziliangjiangdao'],[]],
|
||||
|
@ -1449,7 +1449,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
if(goon){
|
||||
event.tochange.push(_status.characterlist[i]);
|
||||
if(event.tochange.length==event.num) break;
|
||||
}
|
||||
}
|
||||
event.tochange=event.tochange.filter(character=>{
|
||||
|
@ -1457,7 +1456,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
const doublex=get.is.double(character,true);
|
||||
const group=(doublex?doublex:[get.character(character,1)]);
|
||||
return !group.some(j=>groups.includes(j));
|
||||
});
|
||||
}).randomGets(event.num);
|
||||
if(!event.tochange.length) event.finish();
|
||||
else{
|
||||
if(event.tochange.length==1) event._result={
|
||||
|
@ -2115,13 +2114,36 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
},'he');
|
||||
},
|
||||
filterCard(card,player){
|
||||
if(!lib.suit.includes(get.suit(card))) return false;
|
||||
return lib.filter.cardDiscardable(card,player)&&!player.getStorage('fakezhufu_effect').includes(get.suit(card));
|
||||
},
|
||||
position:'he',
|
||||
check(card){
|
||||
const player=get.event('player');
|
||||
if(player.hasUseTarget(card,true,true)) return 0;
|
||||
return 5+3*Math.random()-get.value(card);
|
||||
let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true));
|
||||
let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player));
|
||||
for(let i=1;i<discards.length;i++){
|
||||
if(discards.slice(0,i).some(card=>get.suit(card)==get.suit(discards[i]))) discards.splice(i--,1);
|
||||
}
|
||||
cards.removeArray(discards);
|
||||
if(!cards.length||!discards.length) return 0;
|
||||
cards.sort((a,b)=>{
|
||||
return (player.getUseValue(b,true,true)>0?get.order(b):0)-(player.getUseValue(a,true,true)>0?get.order(a):0);
|
||||
});
|
||||
const cardx=cards[0];
|
||||
if(get.order(cardx,player)>0&&discards.includes(card)){
|
||||
if((get.suit(card)=='heart'&&get.type(cardx)!='equip'&&(function(card,player){
|
||||
const num=get.info('fakezhufu').getMaxUseTarget(card,player);
|
||||
return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num;
|
||||
}(cardx,player))&&game.hasPlayer(target=>{
|
||||
return target.isFriendOf(player)&&target.hasCard(cardy=>{
|
||||
return lib.filter.cardDiscardable(cardy,target)&&get.type2(cardy)==get.type2(cardx);
|
||||
},'h');
|
||||
}))||(get.suit(card)=='diamond'&&get.type(cardx)!='equip'&&!game.hasPlayer(target=>{
|
||||
return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0);
|
||||
}))||(get.suit(card)=='spade'&&player.getHp()==1)||(get.suit(card)=='club'&&get.tag(cardx,'damage')&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0)) return 1/(getvalue(card)||0.5);
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const suit=get.suit(event.cards[0],player);
|
||||
|
@ -2129,8 +2151,74 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
player.markAuto('fakezhufu_effect',[[suit,false]]);
|
||||
},
|
||||
ai:{
|
||||
order:7,
|
||||
result:{player:1},
|
||||
order(item,player){
|
||||
let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true));
|
||||
let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player));
|
||||
for(let i=1;i<discards.length;i++){
|
||||
if(discards.slice(0,i).some(card=>get.suit(card)==get.suit(discards[i]))) discards.splice(i--,1);
|
||||
}
|
||||
cards.removeArray(discards);
|
||||
if(!cards.length||!discards.length) return 0;
|
||||
cards.sort((a,b)=>{
|
||||
return (player.getUseValue(b,true,true)>0?get.order(b):0)-(player.getUseValue(a,true,true)>0?get.order(a):0);
|
||||
});
|
||||
const cardx=cards[0];
|
||||
return (get.order(cardx,player)>0&&((discards.some(card=>{
|
||||
return get.suit(card)=='heart';
|
||||
})&&get.type(cardx)!='equip'&&(function(card,player){
|
||||
const num=get.info('fakezhufu').getMaxUseTarget(card,player);
|
||||
return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num;
|
||||
}(cardx,player))&&game.hasPlayer(target=>{
|
||||
return target.isFriendOf(player)&&target.hasCard(cardy=>{
|
||||
return lib.filter.cardDiscardable(cardy,target)&&get.type2(cardy)==get.type2(cardx);
|
||||
},'h');
|
||||
}))||(get.type(cardx)!='equip'&&discards.some(card=>{
|
||||
return get.suit(card)=='diamond'&&!game.hasPlayer(target=>{
|
||||
return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0);
|
||||
});
|
||||
}))||(discards.some(card=>{
|
||||
return get.suit(card)=='spade';
|
||||
})&&player.getHp()==1)||(get.tag(cardx,'damage')&&discards.some(card=>{
|
||||
return get.suit(card)=='club'&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0;
|
||||
}))))?(get.order(cardx,player)+0.00001):0;
|
||||
},
|
||||
result:{
|
||||
player(player,target){
|
||||
let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true));
|
||||
let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player));
|
||||
discards=discards.sort((a,b)=>get.value(a)-get.value(b));
|
||||
for(let i=1;i<discards.length;i++){
|
||||
if(discards.slice(0,i).some(card=>get.suit(card)==get.suit(discards[i]))) discards.splice(i--,1);
|
||||
}
|
||||
cards.removeArray(discards);
|
||||
if(!cards.length||!discards.length) return 0;
|
||||
if((discards.some(card=>{
|
||||
return get.suit(card)=='heart';
|
||||
})&&cards.some(card=>{
|
||||
return get.type(card)!='equip'&&(function(card,player){
|
||||
const num=get.info('fakezhufu').getMaxUseTarget(card,player);
|
||||
return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num;
|
||||
}(card,player))&&game.hasPlayer(target=>{
|
||||
return target.isFriendOf(player)&&target.hasCard(cardx=>{
|
||||
return lib.filter.cardDiscardable(cardx,target)&&get.type2(cardx)==get.type2(card);
|
||||
},'h');
|
||||
});
|
||||
}))||discards.some(card=>{
|
||||
return get.suit(card)=='diamond'&&cards.some(cardx=>{
|
||||
return get.type(cardx)!='equip'&&!game.hasPlayer(target=>{
|
||||
return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0);
|
||||
});
|
||||
});
|
||||
})||(discards.some(card=>{
|
||||
return get.suit(card)=='spade';
|
||||
})&&player.getHp()==1)||discards.some(card=>{
|
||||
return get.suit(card)=='club'&&cards.some(cardx=>{
|
||||
return get.tag(cardx,'damage')&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0;
|
||||
});
|
||||
})) return 1;
|
||||
return 0;
|
||||
},
|
||||
},
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
|
@ -2144,7 +2232,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
let str='';
|
||||
str+='<li>已弃置过的花色:';
|
||||
str+=suits;
|
||||
if(used.length){
|
||||
if(usedSuits.length){
|
||||
str+='<br><li>已触发过的花色:';
|
||||
str+=usedSuits;
|
||||
}
|
||||
|
@ -2157,22 +2245,67 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
return player.getStorage('fakezhufu_effect').some(list=>!list[1]);
|
||||
},
|
||||
forced:true,
|
||||
content(){
|
||||
if(!Array.isArray(trigger.temporaryYingbian)) trigger.temporaryYingbian=[];
|
||||
trigger.forceYingbian=true
|
||||
trigger.temporaryYingbian.addArray(player.getStorage('fakezhufu_effect').filter(list=>{
|
||||
return !list[1];
|
||||
}).map(list=>{
|
||||
return get.info('fakezhufu').YingBianMap[list[0]];
|
||||
}));
|
||||
firstDo:true,
|
||||
async content(event,trigger,player){
|
||||
const list=player.getStorage('fakezhufu_effect').filter(i=>!i[1]);
|
||||
const forced=(function(trigger,player){
|
||||
if(trigger.forceYingbian||player.hasSkillTag('forceYingbian')) return true;
|
||||
const list=(trigger.temporaryYingbian||[]);
|
||||
return list.includes('force')||get.cardtag(trigger.card,'yingbian_force');
|
||||
}(trigger,player));
|
||||
if(forced){
|
||||
player.popup('yingbian_force_tag',lib.yingbian.condition.color.get('force'));
|
||||
game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件');
|
||||
}
|
||||
const hasYingBian=(trigger.temporaryYingbian||[]),map=get.info('fakezhufu').YingBianMap;
|
||||
for(const j of list){
|
||||
player.storage.fakezhufu_effect[player.getStorage('fakezhufu_effect').indexOf(j)][1]=true;
|
||||
const tag=map[j[0]][0],eff=map[j[0]][1];
|
||||
if(get.cardtag(trigger.card,`yingbian_${tag}`)) continue;
|
||||
if(j[0]=='heart'){
|
||||
if(!forced&&!hasYingBian.includes('add')){
|
||||
const {result}=await lib.yingbian.condition.complex.get('zhuzhan')(trigger);
|
||||
if(result.bool){
|
||||
game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')');
|
||||
trigger.yingbian_addTarget=true;
|
||||
player.addTempSkill('yingbian_changeTarget');
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(!forced){
|
||||
game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')');
|
||||
}
|
||||
trigger.yingbian_addTarget=true;
|
||||
player.addTempSkill('yingbian_changeTarget');
|
||||
}
|
||||
}
|
||||
else{
|
||||
const goon=(hasYingBian.includes(eff)||lib.yingbian.condition.simple.get(tag)(trigger));
|
||||
if(!forced&&goon){
|
||||
player.popup('yingbian_force_tag',lib.yingbian.condition.color.get(eff));
|
||||
game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')');
|
||||
}
|
||||
if(forced||goon) await game.yingbianEffect(trigger,lib.yingbian.effect.get(eff));
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
YingBianMap:{
|
||||
'heart':'yingbian_zhuzhan',
|
||||
'diamond':'yingbian_fujia',
|
||||
'spade':'yingbian_canqu',
|
||||
'club':'yingbian_kongchao',
|
||||
'heart':['zhuzhan','add'],
|
||||
'diamond':['fujia','hit'],
|
||||
'spade':['canqu','draw'],
|
||||
'club':['kongchao','damage'],
|
||||
},
|
||||
getMaxUseTarget(card,player){
|
||||
let range;
|
||||
const select=get.copy(get.info(card).selectTarget);
|
||||
if(select==undefined) range=[1,1];
|
||||
else if(typeof select=='number') range=[select,select];
|
||||
else if(get.itemtype(select)=='select') range=select;
|
||||
else if(typeof select=='function') range=select(card,player);
|
||||
game.checkMod(card,player,range,'selectTarget',player);
|
||||
return range;
|
||||
},
|
||||
},
|
||||
fakeguishu:{
|
||||
|
@ -2329,7 +2462,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
fakeqizhi:{
|
||||
audio:'qizhi',
|
||||
inherit:'qizhi',
|
||||
trigger:{player:'useCard'},
|
||||
trigger:{player:'useCard1'},
|
||||
filter(event,player){
|
||||
if(!event.targets||!event.targets.length) return false;
|
||||
if(_status.currentPhase!=player) return false;
|
||||
|
@ -2350,11 +2483,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
async content(event,trigger,player){
|
||||
const target=event.targets[0];
|
||||
const {result:{bool,cards}}=await player.discardPlayerCard(target,'he',true);
|
||||
if(get.is.yingbianConditional(trigger.card)&&bool){
|
||||
if(bool){
|
||||
await target.draw();
|
||||
if(cards.some(i=>get.suit(i,target)==get.suit(trigger.card))){
|
||||
player.when('yingbian')
|
||||
.filter(evt=>evt.card==trigger.card)
|
||||
.then(()=>trigger.forceYingbian=true);
|
||||
trigger.forceYingbian=true;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -3330,7 +3462,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
const {result:{bool,links}}=await player.chooseButton(['宝箧:是否使用其中一张宝物牌?',cards]).set('ai',button=>{
|
||||
return get.equipValue(button.link,get.event('player'));
|
||||
});
|
||||
if(bool) await player.chooseUseTarget(card,true);
|
||||
if(bool) await player.chooseUseTarget(links[0],true);
|
||||
}
|
||||
},
|
||||
ai:{mingzhi_no:true},
|
||||
|
@ -4046,6 +4178,116 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
},
|
||||
fakehuyuan:{
|
||||
audio:'yuanhu',
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
filter(event,player){
|
||||
return player.countCards('he',card=>{
|
||||
if(get.position(card)=='h'&&_status.connectMode) return true;
|
||||
return get.type(card)=='equip';
|
||||
})>0;
|
||||
},
|
||||
async cost(event,trigger,player){
|
||||
event.result=await player.chooseCardTarget({
|
||||
prompt:get.prompt2('yuanhu'),
|
||||
filterCard(card){
|
||||
return get.type(card)=='equip';
|
||||
},
|
||||
position:'he',
|
||||
filterTarget(card,player,target){
|
||||
return target.canEquip(card);
|
||||
},
|
||||
ai1(card){
|
||||
return 6-get.value(card);
|
||||
},
|
||||
ai2(target){
|
||||
return get.attitude(_status.event.player,target)-3;
|
||||
},
|
||||
}).set('hiddenSkill','fakehuyuan').forResult();
|
||||
},
|
||||
preHidden:true,
|
||||
async content(event,trigger,player){
|
||||
const card=event.cards[0],target=event.targets[0];
|
||||
if(target!=player) player.$give(card,target,false);
|
||||
await target.equip(thisCard);
|
||||
},
|
||||
group:'fakehuyuan_discard',
|
||||
subSkill:{
|
||||
discard:{
|
||||
trigger:{global:'equipEnd'},
|
||||
filter(event,player){
|
||||
return _status.currentPhase==player&&game.hasPlayer(target=>{
|
||||
return get.distance(event.player,target)<=1&&target!=event.player&&target.countCards('hej');
|
||||
});
|
||||
},
|
||||
async cost(event,trigger,player){
|
||||
event.result=await player.chooseTarget(get.prompt('fakehuyuan'),'弃置一名与'+get.translation(trigger.player)+'距离为1以内的另一名角色区域里的一张牌',(card,player,target)=>{
|
||||
const trigger=get.event().getTrigger();
|
||||
return get.distance(trigger.player,target)<=1&&target!=trigger.player&&target.countCards('hej');
|
||||
}).set('ai',target=>{
|
||||
const player=get.event('player');
|
||||
return get.effect(target,{name:'guohe'},player,player);
|
||||
}).set('hiddenSkill','fakehuyuan').forResult();
|
||||
},
|
||||
popup:false,
|
||||
async content(event,trigger,player){
|
||||
const target=event.targets[0];
|
||||
player.logSkill('fakehuyuan',target);
|
||||
await player.discardPlayerCard(target,'hej',true);
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
fakekeshou:{
|
||||
audio:'keshou',
|
||||
trigger:{player:'damageBegin3'},
|
||||
filter(event,player){
|
||||
return event.num>0;
|
||||
},
|
||||
preHidden:true,
|
||||
async cost(event,trigger,player){
|
||||
event.result=await player.chooseToDiscard(get.prompt('fakekeshou'),'弃置两张颜色相同的牌,令即将受到的伤害-1','he',2,card=>{
|
||||
return !ui.selected.cards.length||get.color(card)==get.color(ui.selected.cards[0]);
|
||||
}).set('logSkill','fakekeshou').set('complexCard',true).setHiddenSkill('fakekeshou').set('ai',card=>{
|
||||
if(!_status.event.check) return 0;
|
||||
var player=_status.event.player;
|
||||
if(player.hp==1){
|
||||
if(!player.countCards('h',function(card){return get.tag(card,'save')})&&!player.hasSkillTag('save',true)) return 10-get.value(card);
|
||||
return 7-get.value(card);
|
||||
}
|
||||
return 6-get.value(card);
|
||||
}).set('check',(player.countCards('h',{color:'red'})>1||player.countCards('h',{color:'black'})>1)).forResult();
|
||||
},
|
||||
popup:false,
|
||||
async content(event,trigger,player){
|
||||
trigger.num--;
|
||||
},
|
||||
group:'fakekeshou_draw',
|
||||
subSkill:{
|
||||
draw:{
|
||||
audio:'keshou',
|
||||
trigger:{
|
||||
player:'loseAfter',
|
||||
global:'loseAsyncAfter',
|
||||
},
|
||||
filter(event,player){
|
||||
if(event.type!='discard'||event.getlx===false) return false;
|
||||
if(!(!player.isUnseen()&&!game.hasPlayer(current=>{
|
||||
return current!=player&¤t.isFriendOf(player);
|
||||
}))) return false;
|
||||
const evt=event.getl(player);
|
||||
return evt&&evt.cards2&&evt.cards2.length>1;
|
||||
},
|
||||
prompt2:'进行一次判定,若为红色,则你摸一张牌',
|
||||
async content(event,trigger,player){
|
||||
const result=await player.judge(card=>{
|
||||
return get.color(card)=='red'?1:0;
|
||||
}).forResult();
|
||||
if(result.judge>0) await player.draw();
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//国战典藏2023补充
|
||||
//吕范
|
||||
gzdiaodu:{
|
||||
|
@ -14525,7 +14767,7 @@ return event.junling=='junling5'?1:0;});
|
|||
if(content&&content.length){
|
||||
dialog.addSmall(content);
|
||||
}
|
||||
dialog.addText('<ul style="margin-top:5px;padding-left:22px;"><li>每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。<li>根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上~英姿;两张以上~好施;三张以上~涉猎;四张以上~度势;五张以上~可额外选择一项。<li>锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',false)
|
||||
dialog.addText('<ul style="margin-top:5px;padding-left:22px;"><li>每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。<li>根据“烽火”的数量,所有吴势力角色可于其准备阶段选择并获得其中一个技能直到回合结束:一张以上~英姿;两张以上~好施;三张以上~涉猎;四张以上~度势;五张以上~可额外选择一项。<li>锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',false)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -17867,7 +18109,7 @@ return event.junling=='junling5'?1:0;});
|
|||
gzjiancai:'荐才',
|
||||
gzjiancai_info:'副将技,此武将牌上单独的阴阳鱼个数-1。与你势力相同的角色即将受到伤害而进入濒死状态时,你可以防止此伤害,若如此做,你须变更副将;与你势力相同的角色变更副将时,其额外获得两张备选武将牌。',
|
||||
gzzhuhai:'诛害',
|
||||
gzzhuhai_info:'其他角色的结束阶段开始时,若其本回合内造成过伤害,则你可以对其使用一张【杀】(无距离限制)。若其本回合内对与你势力相同的角色造成过伤害,则此【杀】无视防具,且当其抵消此【杀】后,其须弃置一张牌。',
|
||||
gzzhuhai_info:'其他角色的结束阶段,若其本回合内造成过伤害,则你可以对其使用一张【杀】(无距离限制)。若其本回合内对与你势力相同的角色造成过伤害,则此【杀】无视防具,且当其抵消此【杀】后,其须弃置一张牌。',
|
||||
gzzhuosheng:'擢升',
|
||||
gzzhuosheng2:'擢升',
|
||||
gzzhuosheng_info:'当一名与你势力相同的角色受到伤害后,你可令其摸一张牌。然后直到其下个结束阶段前,其使用此牌根据类型执行以下效果:1. 基本牌,不计入次数且无距离限制;2. 普通锦囊牌,此牌目标可+1或-1;3. 装备牌,可摸一张牌。',
|
||||
|
@ -17879,7 +18121,7 @@ return event.junling=='junling5'?1:0;});
|
|||
gzhuaiyi:'怀异',
|
||||
gzhuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法得到的装备牌置于武将牌上,称为“异”。',
|
||||
gzzisui:'恣睢',
|
||||
gzzisui_info:'锁定技,摸牌阶段,你多摸X张牌。结束阶段开始时,若X大于你的体力上限,你死亡(X为“异”数)。',
|
||||
gzzisui_info:'锁定技,摸牌阶段,你多摸X张牌。结束阶段,若X大于你的体力上限,你死亡(X为“异”数)。',
|
||||
|
||||
gz_tangzi:'唐咨',
|
||||
gz_mengda:'孟达',
|
||||
|
@ -17928,17 +18170,17 @@ return event.junling=='junling5'?1:0;});
|
|||
gzjuejue:'决绝',
|
||||
gzjuejue_info:'①弃牌阶段开始时,你可失去1点体力。然后若你于此阶段内弃置过你的牌,则你令其他角色各选择一项:1.将X张手牌置入弃牌堆(X为你于此阶段内弃置过的牌数);2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。',
|
||||
gzfangyuan:'方圆',
|
||||
gzfangyuan_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段开始时,你视为对一名围攻角色使用【杀】。',
|
||||
gzfangyuan_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段,你视为对一名围攻角色使用【杀】。',
|
||||
daming:'达命',
|
||||
daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①令A回复1点体力;②令A视为对由你选择的另一名角色使用一张雷【杀】。',
|
||||
xiaoni:'嚣逆',
|
||||
xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。',
|
||||
gztongduo:'统度',
|
||||
gztongduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。',
|
||||
gztongduo_info:'己方角色的结束阶段,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。',
|
||||
qingyin:'清隐',
|
||||
qingyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。',
|
||||
gzlianpian:'联翩',
|
||||
gzlianpian_info:'①结束阶段开始时,若你于此回合内弃置过所有角色的牌数之和大于你的体力值,你可令一名与你势力相同的角色将手牌补至X张(X为其体力上限)。②其他角色的结束阶段开始时,若其于此回合内弃置过所有角色的牌数之和大于你的体力值,其可选择:1.弃置你的一张牌;2.令你回复1点体力。',
|
||||
gzlianpian_info:'①结束阶段,若你于此回合内弃置过所有角色的牌数之和大于你的体力值,你可令一名与你势力相同的角色将手牌补至X张(X为其体力上限)。②其他角色的结束阶段,若其于此回合内弃置过所有角色的牌数之和大于你的体力值,其可选择:1.弃置你的一张牌;2.令你回复1点体力。',
|
||||
gzyusui:'玉碎',
|
||||
gzyusui_info:'当你成为其他势力的角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:①令其弃置X张手牌(X为其体力上限);②令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)。',
|
||||
gzboyan:'驳言',
|
||||
|
@ -17950,10 +18192,10 @@ return event.junling=='junling5'?1:0;});
|
|||
gzduwu:'黩武',
|
||||
gzduwu_info:'限定技,出牌阶段,你可以选择一个“军令”。你令攻击范围内所有的非己方角色选择是否执行。若有角色选择否,则你对其造成1点伤害且你摸一张牌。若有角色于此技能结算过程中进入濒死状态且存活,则你失去1点体力。',
|
||||
gzxishe:'袭射',
|
||||
gzxishe_info:'其他角色的准备阶段开始时,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。',
|
||||
gzxishe_info:'其他角色的准备阶段,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。',
|
||||
gzcongcha:'聪察',
|
||||
gzcongcha2:'聪察',
|
||||
gzcongcha_info:'①准备阶段开始时,你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后,若其:与你势力相同,则你与其各摸两张牌;与你势力不同,则其失去1点体力。②摸牌阶段开始时,若场上所有角色均有明置的武将牌,则你可以令额定摸牌数+2。',
|
||||
gzcongcha_info:'①准备阶段,你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后,若其:与你势力相同,则你与其各摸两张牌;与你势力不同,则其失去1点体力。②摸牌阶段开始时,若场上所有角色均有明置的武将牌,则你可以令额定摸牌数+2。',
|
||||
gzchenglve:'成略',
|
||||
gzchenglve_info:'己方角色使用牌结算结束后,若此牌的目标数大于1,则你可以令其摸一张牌。若你受到过渠道为此牌的伤害,则你可以令一名没有国战标记的己方角色获得一枚“阴阳鱼”。',
|
||||
gzbaolie:'豹烈',
|
||||
|
@ -17967,7 +18209,7 @@ return event.junling=='junling5'?1:0;});
|
|||
qiuan_info:'当你受到伤害后,若此伤害的渠道有对应的实体牌且你的武将牌上没有“函”,则你可以防止此伤害并将这些牌置于你的武将牌上,称为“函”。',
|
||||
liangfan:'量反',
|
||||
liangfan2:'量反',
|
||||
liangfan_info:'锁定技,准备阶段开始时,若你的武将牌上有“函”,则你获得这些牌,然后失去1点体力。当你于此回合内因使用实体牌中包含“函”的牌且执行这些牌的效果而对目标角色造成伤害时,你可以获得目标角色的一张牌。',
|
||||
liangfan_info:'锁定技,准备阶段,若你的武将牌上有“函”,则你获得这些牌,然后失去1点体力。当你于此回合内因使用实体牌中包含“函”的牌且执行这些牌的效果而对目标角色造成伤害时,你可以获得目标角色的一张牌。',
|
||||
gzwenji:'问计',
|
||||
gzwenji_info:'出牌阶段开始时,你可令一名其他角色交给你一张牌。然后若该角色:未确定势力或势力与你相同,则你于本回合内使用实体牌包含“问计”牌的牌无距离和次数限制,且不可被其他角色响应。与你势力不同,则你交给其一张不为“问计”牌的牌或令其摸一张牌。',
|
||||
gztunjiang:'屯江',
|
||||
|
@ -17981,9 +18223,9 @@ return event.junling=='junling5'?1:0;});
|
|||
gzbiluan:'避乱',
|
||||
gzbiluan_info:'锁定技。其他角色计算至你的距离时+X(X为你装备区内的牌数)。',
|
||||
gzrelixia:'礼下',
|
||||
gzrelixia_info:'锁定技。与你势力不同的角色的准备阶段开始时,若你不在其攻击范围内,则其选择一项:①弃置你装备区内的一张牌并失去1点体力。②令你摸一张牌。',
|
||||
gzrelixia_info:'锁定技。与你势力不同的角色的准备阶段,若你不在其攻击范围内,则其选择一项:①弃置你装备区内的一张牌并失去1点体力。②令你摸一张牌。',
|
||||
gzlixia:'礼下',
|
||||
gzlixia_info:'与你势力不同的角色的准备阶段开始时,其可弃置你装备区内的一张牌,然后其选择一项:①弃置两张手牌。②失去1点体力。③令你摸两张牌。',
|
||||
gzlixia_info:'与你势力不同的角色的准备阶段,其可弃置你装备区内的一张牌,然后其选择一项:①弃置两张手牌。②失去1点体力。③令你摸两张牌。',
|
||||
gzrekuangcai:'狂才',
|
||||
gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内:未使用过牌,则你本局游戏的手牌上限+1;使用过牌但未造成过伤害,则你本局游戏的手牌上限-1。',
|
||||
gzkuangcai:'狂才',
|
||||
|
@ -18022,7 +18264,7 @@ return event.junling=='junling5'?1:0;});
|
|||
gzfengying_info:'限定技,你可以将所有手牌当【挟天子以令诸侯】使用(无视大势力限制),然后所有与你势力相同的角色将手牌补至体力上限。',
|
||||
gz_yujin:'于禁',
|
||||
gzjieyue:'节钺',
|
||||
gzjieyue_info:'准备阶段开始时,你可以将一张手牌交给一名非魏势力角色,然后选择一个“军令”并令其选择一项:执行该军令,然后你摸一张牌;或令你于此回合摸牌阶段额外摸三张牌。',
|
||||
gzjieyue_info:'准备阶段,你可以将一张手牌交给一名非魏势力角色,然后选择一个“军令”并令其选择一项:执行该军令,然后你摸一张牌;或令你于此回合摸牌阶段额外摸三张牌。',
|
||||
gz_wangping:'王平',
|
||||
jianglue:'将略',
|
||||
jianglue_info:'限定技,出牌阶段,你可以选择一个“军令”,然后与你势力相同的其他角色可以执行该军令(未确定势力角色可以在此时明置一张单势力武将牌)。你与所有执行该军令的角色增加1点体力上限,然后回复1点体力,然后你摸X张牌(X为以此法回复了体力的角色数)。',
|
||||
|
@ -18058,7 +18300,7 @@ return event.junling=='junling5'?1:0;});
|
|||
wuziliangjiangdao:'五子良将纛',
|
||||
wuziliangjiangdao_ab:'将纛',
|
||||
wuziliangjiangdao_bg:'纛',
|
||||
wuziliangjiangdao_info:'魏势力角色的准备阶段开始时,其可以弃置一张牌。若如此做,其选择一张暗置的武将牌(若没有,则选择一张暗置),然后获得下列技能中的一项(其他角色已有的技能无法选择)且不能明置选择的武将牌直到你的下个回合开始:〖突袭〗,〖巧变〗,〖骁果〗,〖节钺〗,〖断粮〗。',
|
||||
wuziliangjiangdao_info:'魏势力角色的准备阶段,其可以弃置一张牌。若如此做,其选择一张暗置的武将牌(若没有,则选择一张暗置),然后获得下列技能中的一项(其他角色已有的技能无法选择)且不能明置选择的武将牌直到你的下个回合开始:〖突袭〗,〖巧变〗,〖骁果〗,〖节钺〗,〖断粮〗。',
|
||||
huibian:'挥鞭',
|
||||
huibian_info:'出牌阶段限一次,你可以选择一名魏势力角色和另一名已受伤的魏势力角色。若如此做,你对前者造成1点伤害,然后其摸两张牌,然后后者回复1点体力。',
|
||||
gzzongyu:'总御',
|
||||
|
@ -18121,7 +18363,7 @@ return event.junling=='junling5'?1:0;});
|
|||
"baka_hunshang":"魂殇",
|
||||
"baka_hunshang_info":"副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你获得〖英姿〗和〖英魂〗直到回合结束。",
|
||||
"baka_yinghun":"英魂",
|
||||
"baka_yinghun_info":"准备阶段开始时,你可令一名其他角色执行一项:摸X张牌,然后弃置一张牌;或摸一张牌,然后弃置X张牌(X为你已损失的体力值)。",
|
||||
"baka_yinghun_info":"准备阶段,你可令一名其他角色执行一项:摸X张牌,然后弃置一张牌;或摸一张牌,然后弃置X张牌(X为你已损失的体力值)。",
|
||||
"baka_yingzi":"英姿",
|
||||
"baka_yingzi_info":"锁定技,摸牌阶段摸,你多摸一张牌;你的手牌上限+X(X为你已损失的体力值)。",
|
||||
gzyiji:"遗计",
|
||||
|
@ -18182,19 +18424,19 @@ return event.junling=='junling5'?1:0;});
|
|||
gzxiongsuan:'凶算',
|
||||
gzxiongsuan_info:'限定技,出牌阶段,你可以弃置一张手牌并选择与你势力相同的一名角色,对其造成1点伤害,然后你摸三张牌。若该角色有已发动的限定技,则你选择其中一个限定技,此回合结束后视为该限定技未发动过。',
|
||||
gzhuashen:'化身',
|
||||
gzhuashen_info:'准备阶段开始时,若你的“化身”不足两张,则你可以观看剩余武将牌堆中的五张牌,然后扣置其中至多两张武将牌在你的武将旁,称为“化身”;若“化身”有两张以上,则你可以用剩余武将牌堆顶的一张牌替换一张“化身”。你可以于相应的时机明置并发动“化身”的一个技能,技能结算完成后将该“化身”放回剩余武将牌堆。你每个时机只能发动一张“化身”的技能,且不能发动带有技能类型的技能(锁定技、限定技等)。',
|
||||
gzhuashen_info:'准备阶段,若你的“化身”不足两张,则你可以观看剩余武将牌堆中的五张牌,然后扣置其中至多两张武将牌在你的武将旁,称为“化身”;若“化身”有两张以上,则你可以用剩余武将牌堆顶的一张牌替换一张“化身”。你可以于相应的时机明置并发动“化身”的一个技能,技能结算完成后将该“化身”放回剩余武将牌堆。你每个时机只能发动一张“化身”的技能,且不能发动带有技能类型的技能(锁定技、限定技等)。',
|
||||
gzxinsheng:'新生',
|
||||
gzxinsheng_info:'当你受到伤害后,你可以从剩余武将牌堆中扣置一张牌加入到“化身”牌中。',
|
||||
|
||||
jubao:'聚宝',
|
||||
jubao_info:'锁定技,你装备区里的宝物牌不能被其他角色获得。结束阶段开始时,若场上或弃牌堆有【定澜夜明珠】,则你摸一张牌,然后获得装备区里有【定澜夜明珠】角色的一张牌。',
|
||||
jubao_info:'锁定技,你装备区里的宝物牌不能被其他角色获得。结束阶段,若场上或弃牌堆有【定澜夜明珠】,则你摸一张牌,然后获得装备区里有【定澜夜明珠】角色的一张牌。',
|
||||
jiahe:'嘉禾',
|
||||
jiahe_info:'君主技,只要此武将牌处于明置状态,你便拥有“缘江烽火图”。',
|
||||
jiahe_put:'烽火',
|
||||
jiahe_put_info:'出牌阶段限一次,你可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。',
|
||||
jiahe_skill:'缘江烽火图',
|
||||
yuanjiangfenghuotu:'缘江烽火图',
|
||||
yuanjiangfenghuotu_info:'每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。<br>根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上:〖英姿〗;两张以上:〖好施〗;三张以上:〖涉猎〗;四张以上:〖度势〗;五张以上:可额外选择一项。<br>锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',
|
||||
yuanjiangfenghuotu_info:'每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。<br>根据“烽火”的数量,所有吴势力角色可于其准备阶段选择并获得其中一个技能直到回合结束:一张以上:〖英姿〗;两张以上:〖好施〗;三张以上:〖涉猎〗;四张以上:〖度势〗;五张以上:可额外选择一项。<br>锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',
|
||||
yuanjiangfenghuotu_ab:'江图',
|
||||
yuanjiangfenghuotu_bg:'图',
|
||||
wuxin:'悟心',
|
||||
|
@ -18202,7 +18444,7 @@ return event.junling=='junling5'?1:0;});
|
|||
hongfa:'弘法',
|
||||
hongfa_use:'天兵',
|
||||
hongfa_respond:'天兵',
|
||||
hongfa_info:'君主技,锁定技,此武将牌明置时,你获得“黄巾天兵符”;准备阶段开始时,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)。',
|
||||
hongfa_info:'君主技,锁定技,此武将牌明置时,你获得“黄巾天兵符”;准备阶段,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)。',
|
||||
wendao:'问道',
|
||||
wendao_info:'出牌阶段限一次,你可以弃置一张不为【太平要术】的红色牌,然后获得弃牌堆或场上的一张【太平要术】。',
|
||||
huangjintianbingfu:'黄巾天兵符',
|
||||
|
@ -18243,7 +18485,7 @@ return event.junling=='junling5'?1:0;});
|
|||
gzyongjue:'勇决',
|
||||
gzyongjue_info:'与你势力相同的一名角色于其回合内使用【杀】结算完成后,若此牌是其本回合内使用的第一张牌,则其可以获得此牌对应的所有实体牌。',
|
||||
gzqianxi:'潜袭',
|
||||
gzqianxi_info:'准备阶段开始时,你可以进行判定,然后你选择距离为1的一名角色,直到回合结束,该角色不能使用或打出与结果颜色相同的手牌。',
|
||||
gzqianxi_info:'准备阶段,你可以进行判定,然后你选择距离为1的一名角色,直到回合结束,该角色不能使用或打出与结果颜色相同的手牌。',
|
||||
gzshangyi:'尚义',
|
||||
gzshangyi_info:'出牌阶段限一次,你可以令一名其他角色观看你的手牌。若如此做,你选择一项:1.观看其手牌并可以弃置其中的一张黑色牌;2.观看其所有暗置的武将牌。',
|
||||
niaoxiang:'鸟翔',
|
||||
|
@ -18262,11 +18504,11 @@ return event.junling=='junling5'?1:0;});
|
|||
gzjixi:'急袭',
|
||||
gzjixi_info:'主将技,此武将牌减少半个阴阳鱼。你可以将一张“田”当作【顺手牵羊】使用。',
|
||||
huyuan:'护援',
|
||||
huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。',
|
||||
huyuan_info:'结束阶段,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。',
|
||||
heyi:'鹤翼',
|
||||
heyi_info:'阵法技。与你处于同一队列的角色视为拥有技能〖飞影〗。',
|
||||
gzhuyuan:'护援',
|
||||
gzhuyuan_info:'结束阶段开始时,你可以选择一项:⒈将一张非装备牌交给一名其他角色。⒉将一张装备牌置入其他角色的装备区内,然后你可以弃置场上的一张牌。',
|
||||
gzhuyuan_info:'结束阶段,你可以选择一项:⒈将一张非装备牌交给一名其他角色。⒉将一张装备牌置入其他角色的装备区内,然后你可以弃置场上的一张牌。',
|
||||
gz_shibing1wei:'魏兵',
|
||||
gz_shibing2wei:'魏兵',
|
||||
gz_shibing1shu:'蜀兵',
|
||||
|
@ -18298,7 +18540,7 @@ return event.junling=='junling5'?1:0;});
|
|||
duoshi:'度势',
|
||||
duoshi_info:'出牌阶段限四次,你可以将一张红色手牌当做【以逸待劳】使用。',
|
||||
gzxiaoguo:'骁果',
|
||||
gzxiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌;2.受到你对其造成的1点伤害。',
|
||||
gzxiaoguo_info:'其他角色的结束阶段,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌;2.受到你对其造成的1点伤害。',
|
||||
|
||||
gzdangxian:'当先',
|
||||
gzdangxian_info:'锁定技。当你首次明置此武将牌时,你获得一枚“先驱”标记。回合开始时,你获得一个额外的出牌阶段。',
|
||||
|
@ -18335,10 +18577,10 @@ return event.junling=='junling5'?1:0;});
|
|||
gzlisi:'离思',
|
||||
gzlisi_info:'一名己方角色死亡后,你可以选择〖诏颂〗中的一个已发动过的选项,令其视为未发动过。',
|
||||
gzcaiyuan:'才媛',
|
||||
gzcaiyuan_info:'锁定技。结束阶段开始时,若你的手牌数大于本回合开始时的手牌数,则你摸两张牌或回复1点体力。',
|
||||
gzcaiyuan_info:'锁定技。结束阶段,若你的手牌数大于本回合开始时的手牌数,则你摸两张牌或回复1点体力。',
|
||||
gzwanyi:'婉嫕',
|
||||
gzwanyi_info:'出牌阶段每项各限一次。你可以将一张带有“合纵”标签的牌当做【联军盛宴】/【火烧连营】/【挟天子以令诸侯】/【戮力同心】使用。',
|
||||
gzwanyi_info_yingbian:'出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。',
|
||||
gzwanyi_info_guozhan_yingbian:'出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。',
|
||||
gzmaihuo:'埋祸',
|
||||
gzmaihuo_info:'限定技。当有己方角色成为【杀】的目标时,你可以取消此【杀】的所有目标。然后此【杀】的使用者下回合开始时,其视为对你使用一张【杀】。若此【杀】对你造成伤害,则你防止此伤害,摸两张牌并移除此武将牌(若此武将牌为副将则改为变更副将)。',
|
||||
gzzhenxi:'震袭',
|
||||
|
@ -18394,7 +18636,7 @@ return event.junling=='junling5'?1:0;});
|
|||
gzrebushi:'布施',
|
||||
gzrebushi_info:'①回合结束后,你获得X个“义舍”标记(X为你的体力值)。②其他角色的准备阶段,你可以失去1个“义舍”标记,交给其一张牌并摸两张牌。③准备阶段,你须弃置Y张牌,然后失去所有“义舍”标记(Y为场上存活人数-你的体力值-2)。',
|
||||
gzremidao:'米道',
|
||||
gzremidao_info:'①结束阶段开始时,若你的武将牌上没有“米”,则你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为“米”。②一名角色的判定牌生效前,你可以打出一张“米”作为新的判定牌,然后你获得原判定牌。',
|
||||
gzremidao_info:'①结束阶段,若你的武将牌上没有“米”,则你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为“米”。②一名角色的判定牌生效前,你可以打出一张“米”作为新的判定牌,然后你获得原判定牌。',
|
||||
jiahe_reyingzi:'英姿',
|
||||
jiahe_haoshi:'好施',
|
||||
jiahe_shelie:'涉猎',
|
||||
|
@ -18462,7 +18704,7 @@ return event.junling=='junling5'?1:0;});
|
|||
fakepaiyi:'排异',
|
||||
fakepaiyi_info:'出牌阶段限一次,你可以选择一名角色,然后选择一个军令令其选择是否执行。若其执行,则你摸X张牌,然后将一张“权”置入弃牌堆;若其不执行,则你可以对至多X名与其势力相同的角色各造成1点伤害,然后将等量的“权”置入弃牌堆。(X为你武将牌上的“权”数)',
|
||||
fakeshilu:'嗜戮',
|
||||
fakeshilu_info:'①出牌阶段结束时,若你有副将且本阶段未发动过副将武将牌上的非锁定技,则你更换副将并将原副将称为“戮”置于武将牌上。②准备阶段,你弃置X张手牌,然后摸X张牌(X为你武将牌上的“戮”数,少牌全弃,无牌不弃)。',
|
||||
fakeshilu_info:'①出牌阶段结束时,若你有副将且本阶段未发动过副将武将牌上的非锁定技,则你更换副将至你武将牌上的“戮”未包含的势力并将原副将称为“戮”置于武将牌上。②准备阶段,你弃置X张手牌,然后摸X张牌(X为你武将牌上的“戮”数,少牌全弃,无牌不弃)。',
|
||||
fakexiongnve:'凶虐',
|
||||
fakexiongnve_info:'①当你使用【杀】造成伤害时或受到【杀】造成的伤害时,若你武将牌上的“戮”包含伤害来源的势力,则你令此伤害+1。②当你受到不为【杀】造成的伤害时,若你武将牌上的“戮”包含伤害来源的势力,则此伤害-1。',
|
||||
fakehuaiyi:'怀异',
|
||||
|
@ -18488,7 +18730,7 @@ return event.junling=='junling5'?1:0;});
|
|||
fakedujin:'独进',
|
||||
fakedujin_info:'①摸牌阶段,你可以额外摸X张牌(X为你装备区的牌数的一半,向上取整)。②当你首次明置此武将牌时,若你为你们势力第一个明置武将牌的角色,则你获得1个“先驱”标记。',
|
||||
fakezhufu:'注傅',
|
||||
fakezhufu_info:'出牌阶段,你可以弃置一张本阶段未以此法弃置过的花色的牌,然后根据此牌的花色为你使用的下一张牌添加对应的应变效果(无视条件触发):红桃——助战;方片——富甲;黑桃——残躯;草花——空巢。',
|
||||
fakezhufu_info:'出牌阶段,你可以弃置一张本阶段未以此法弃置过的花色的牌,然后根据此牌的花色为你使用的下一张牌添加对应的应变效果:红桃,助战、目标+1;方片,富甲、不可被响应;黑桃,残躯、摸一张牌;草花,空巢、伤害+1。',
|
||||
fakeguishu:'鬼术',
|
||||
fakeguishu_info:'出牌阶段限一次,你可以将一张黑桃手牌当作【知己知彼】或【远交近攻】使用。若你本局游戏内已经发动过了〖鬼术〗,则你必须选择与上次不同的选项。',
|
||||
fakeyuanyu:'远域',
|
||||
|
@ -18496,7 +18738,7 @@ return event.junling=='junling5'?1:0;});
|
|||
fakemibei:'秘备',
|
||||
fakemibei_info:'①准备阶段,若你的手牌数不为全场最多,则你须选择一名手牌数为全场最多的角色,令其对你发起军令。②当你执行军令后,你将手牌数摸至与发起者相同(至多摸五张)。③当你拒绝执行军令后,你展示一至三张牌,然后你本回合可以将其中一张牌当作另一张基本牌或非延时锦囊牌使用一次。',
|
||||
fakeqizhi:'奇制',
|
||||
fakeqizhi_info:'当你于回合内使用非装备牌A时,你可以弃置不是此牌目标的一名角色的一张牌B,然后其摸一张牌。若A具有应变效果,且A和B的花色相同,则你无视条件触发A的应变效果。',
|
||||
fakeqizhi_info:'当你于回合内声明使用非装备牌A时,你可以弃置不是此牌目标的一名角色的一张牌B,然后其摸一张牌。若A具有应变效果,且A和B的花色相同,则你无视条件触发A的应变效果。',
|
||||
fakejinqu:'进趋',
|
||||
fakejinqu_info:'结束阶段,你可以摸两张牌,然后你将手牌弃置至X张(X为你本回合发动过〖奇制〗的次数)。',
|
||||
fakejuzhan:'拒战',
|
||||
|
@ -18557,6 +18799,10 @@ return event.junling=='junling5'?1:0;});
|
|||
fakecaiwang_info:'①你可以助战自己。②每回合每项各限一次,当你响应助战后,若你弃置的牌和被强化的牌:颜色相同,你可以弃置一名其他角色的一张牌;颜色不同,你摸一张牌。',
|
||||
fakenaxiang:'纳降',
|
||||
fakenaxiang_info:'锁定技。①当你对与你势力不同的角色造成伤害后,或受到与你势力不同的角色对你造成的伤害后。你对其发起军令,若其不执行,则你不能对其发动〖纳降①〗直到你的下个回合开始。②你响应助战弃牌无类别限制,且你触发具有应变的卡牌的条件均视为助战。',
|
||||
fakehuyuan:'护援',
|
||||
fakehuyuan_info:'①你的回合内,当一张装备牌进入一名角色的装备区后,你可以弃置与其距离为1以内的另一名角色区域里的一张牌。②结束阶段,你可以将一张装备牌置入一名角色的装备区。',
|
||||
fakekeshou:'恪守',
|
||||
fakekeshou_info:'①当你受到伤害时,你可以弃置两张颜色相同的牌并令此伤害-1。②当你因弃置而一次性失去至少两张牌后,若你的势力已确定且场上没有与你势力相同的其他角色,则你可以进行判定,若结果判定为红色,你摸一张牌。',
|
||||
|
||||
guozhan_default:"国战标准",
|
||||
guozhan_zhen:"君临天下·阵",
|
||||
|
|
|
@ -8116,6 +8116,44 @@ export class Player extends HTMLDivElement {
|
|||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 快速获取一名角色当前轮次/前X轮次的历史
|
||||
*
|
||||
* 第一个参数填写获取的动作
|
||||
*
|
||||
* 第二个参数填写获取历史的筛选条件
|
||||
*
|
||||
* 第三个参数填写数字(不填默认为0),获取上X轮的历史(X为0则为本轮历史),第四个参数若为true,则获取从上X轮开始至现在
|
||||
*
|
||||
* 第四个参数若为true,则获取从上X轮开始至现在所有符合条件的历史
|
||||
*
|
||||
* 第五个参数填写event,获取此event之前所有符合条件的历史
|
||||
*
|
||||
* @param { string | function | number | boolean | object } map
|
||||
*/
|
||||
getRoundHistory(key, filter, num, keep, last) {
|
||||
if (!num) num = 0;
|
||||
const player = this;
|
||||
let evts = [], history = player.actionHistory;
|
||||
for (let i = history.length - 1; i >= 0; i--) {
|
||||
if (keep === true || num == 0) {
|
||||
let currentHistory = history[i];
|
||||
if (key) currentHistory = currentHistory[key];
|
||||
if (filter) currentHistory = currentHistory.filter(filter);
|
||||
evts.addArray(currentHistory.reverse());
|
||||
}
|
||||
if (history[i].isRound) {
|
||||
if (num > 0) num--;
|
||||
else break;
|
||||
}
|
||||
}
|
||||
evts.reverse();
|
||||
if (last && evts.includes(last)) {
|
||||
const lastIndex = evts.indexOf(last);
|
||||
return evts.filter(evt => evts.indexOf(evt) <= lastIndex);
|
||||
}
|
||||
return evts;
|
||||
}
|
||||
getHistory(key, filter, last) {
|
||||
if (!key) return this.actionHistory[this.actionHistory.length - 1];
|
||||
if (!filter) return this.actionHistory[this.actionHistory.length - 1][key];
|
||||
|
|
Loading…
Reference in New Issue