更改描述:将“基本牌”改为“基本牌或普通锦囊牌”';
}
player.chooseControl(list,function(){
if(!_status.event.player.hasSkill('jiaozhao')) return 'draw_card';
return '更改描述';
}).set('prompt',prompt);
}
'step 1'
if(result.control=='draw_card'){
player.draw();
}
else{
game.log(player,'更改了','【矫诏】','的描述');
player.popup('更改描述');
player.markSkill('jiaozhao');
if(player.storage.jiaozhao1){
player.storage.jiaozhao2=true;
}
else{
player.storage.jiaozhao1=true;
}
}
}
},
zongzuo:{
trigger:{global:'phaseBefore'},
forced:true,
priority:10,
audio:2,
filter:function(event,player){
return !player.storage.zongzuo;
},
content:function(){
'step 0'
player.storage.zongzuo=true;
var num=game.countGroup();
player.gainMaxHp(num);
event.num=num;
'step 1'
player.recover(event.num);
//player.update();
},
group:'zongzuo_lose',
subSkill:{
lose:{
trigger:{global:'dieAfter'},
forced:true,
audio:'zongzuo',
filter:function(event,player){
if(!lib.group.contains(event.player.group)) return false;
if(game.hasPlayer(function(current){
return current.group==event.player.group;
})){
return false;
}
return true;
},
content:function(){
player.loseMaxHp();
}
}
}
},
zhige:{
enable:'phaseUse',
usable:1,
audio:2,
filter:function(event,player){
return player.countCards('h')>player.hp;
},
filterTarget:function(card,player,target){
return get.distance(target,player,'attack')<=1&&target.countCards('e')>0;
},
content:function(){
'step 0'
target.chooseToUse({name:'sha'},'止戈:使用一张杀,或将其装备区里的一张牌交给'+get.translation(player));
'step 1'
if(!result.bool&&target.countCards('e')){
target.chooseCard('e',true,'将其装备区里的一张牌交给'+get.translation(player));
}
else{
event.finish();
}
'step 2'
if(result.bool&&result.cards&&result.cards.length){
player.gain(result.cards,target,'give');
}
},
ai:{
expose:0.2,
order:5,
result:{
target:-1,
player:function(player,target){
if(target.countCards('h')==0) return 0;
if(target.countCards('h')==1) return -0.1;
if(player.hp<=2) return -2;
if(player.countCards('h','shan')==0) return -1;
return -0.5;
}
}
}
},
kuangbi:{
enable:'phaseUse',
usable:1,
audio:2,
filterTarget:function(card,player,target){
return target!=player&&target.countCards('he')>0;
},
content:function(){
'step 0'
target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',true).set('ai',function(card){
if(get.attitude(_status.event.player,_status.event.getParent().player)>0){
return 7-get.value(card);
}
return -get.value(card);
});
'step 1'
if(result.bool){
target.$give(result.cards.length,player,false);
target.lose(result.cards,ui.special,'toStorage');
if(!player.storage.kuangbi_draw) player.storage.kuangbi_draw=[];
player.storage.kuangbi_draw.push([result.cards,target]);
player.addSkill('kuangbi_draw');
player.syncStorage('kuangbi_draw');
player.updateMarks('kuangbi_draw');
}
},
ai:{
order:1,
result:{
target:function(player,target){
if(get.attitude(player,target)>0){
return Math.sqrt(target.countCards('he'));
}
return 0;
},
player:1
}
},
subSkill:{
draw:{
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
mark:true,
charlotte:true,
audio:'kuangbi',
intro:{
onunmark:function(storage,player){
var cards=[];
while(storage.length){
cards.addArray(storage.shift()[0]);
}
if(cards.length){
game.cardsDiscard(cards);
player.$throw(cards,1000);
game.log(cards,'被置入了弃牌堆');
}
},
markcount:function(content){
var cards=[];
for(var i=0;i
0;
},
audio:2,
content:function(){
'step 0'
player.gainPlayerCard(target,'h',true);
'step 1'
var name=get.translation(target);
player.chooseControl(function(){
return Math.random()<0.5?'选项一':'选项二';
}).set('prompt','督粮').set('choiceList',['令'+name+'观看牌堆顶的两张牌,然后获得其中的基本牌','令'+name+'于下个摸牌阶段额外摸一张牌']);
'step 2'
if(result.control=='选项一'){
var cards=get.cards(2);
target.viewCards('督粮',cards);
event.cards2=[];
event.tothrow=[];
for(var i=0;i=_status.event.getParent().num) return -1;
if(_status.event.player.hasSkillTag('nofire')) return -1;
if(_status.event.res>=0) return 6-get.value(card);
if(get.type(card)!='basic'){
return 10-get.value(card);
}
return 8-get.value(card);
}).set('res',res);
}
else{
event.finish();
}
"step 2"
if(!result.bool){
event.target.damage(2,'fire');
event.num=1;
}
else{
event.num=result.cards.length+1;
}
event.goto(1);
},
ai:{
order:1,
result:{
player:function(player){
var num=0,players=game.filterPlayer();
for(var i=0;i0){
num--;
}
else if(att<0){
num++;
}
}
}
if(game.players.length<5){
return num-1;
}
else{
return num-2;
}
}
}
},
init:function(player){
player.storage.xinfencheng=false;
},
intro:{
content:'limited'
}
},
xinjuece:{
audio:'juece',
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return game.hasPlayer(function(player){
return player.countCards('h')==0;
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('xinjuece'),'对一名没有手牌的其他角色造成1点伤害',function(card,player,target){
return target.countCards('h')==0;
}).set('ai',function(target){
var player=_status.event.player;
return get.damageEffect(target,player,player);
});
'step 1'
if(result.bool){
player.logSkill('xinjuece',result.targets);
result.targets[0].damage();
}
}
},
xinmieji:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.countCards('h',{type:['trick','delay'],color:'black'});
},
filterCard:function(card){
return get.color(card)=='black'&&get.type(card,'trick')=='trick';
},
filterTarget:function(card,player,target){
return target!=player&&target.countCards('h')>0;
},
discard:false,
delay:false,
check:function(card){
return 8-get.value(card);
},
content:function(){
'step 0'
player.showCards(cards);
'step 1'
cards[0].fix();
ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild);
game.updateRoundNumber();
'step 2'
target.chooseToDiscard('he',true).set('prompt','请弃置一张锦囊牌,或依次弃置两张非锦囊牌。');
'step 3'
if((!result.cards||get.type(result.cards[0],'trick',result.cards[0].original=='h'?target:false)!='trick')&&target.countCards('he',function(card){
return get.type(card,'trick')!='trick';
})){
target.chooseToDiscard('he',true,function(card){
return get.type(card,'trick')!='trick';
}).set('prompt','请弃置第二张非锦囊牌');
}
},
ai:{
order:9,
result:{
target:-1
}
}
},
qianju:{
mod:{
globalFrom:function(from,to,distance){
return distance-(from.getDamagedHp());
}
}
},
reqianju:{
mod:{
globalFrom:function(from,to,distance){
return distance-(Math.max(1,from.getDamagedHp()));
}
}
},
reqingxi:{
audio:'qingxi',
trigger:{player:'useCardToPlayered'},
filter:function(event,player){
return event.card.name=='sha';
},
check:function(event,player){
return get.attitude(player,event.target)<0;
},
content:function(){
'step 0'
var num=game.countPlayer(function(current){
return player.inRange(current);
});
if(trigger.target.countCards('h')2){
return 0;
}
return 8-get.value(card);
}
});
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
player.discard(e1,'notBySelf');
}
}
else{
var storage=trigger.target.storage;
var id=trigger.target.playerid;
var map=trigger.customArgs;
if(!map[id]) map[id]={};
if(!map[id].extraDamage) map[id].extraDamage=0;
map[id].extraDamage++;
if(!storage.reqingxi2) storage.reqingxi2=[];
storage.reqingxi2.push(trigger.card);
trigger.target.addTempSkill('reqingxi2');
}
}
},
reqingxi2:{
mod:{
cardEnabled:function(card,player){
if(card.name=='shan'&&player.storage.reqingxi2&&player.storage.reqingxi2.filter(function(cd){
return get.suit(cd)!=get.suit(card);
}).length) return false;
},
},
firstDo:true,
onremove:true,
trigger:{
player:['damage','damageCancelled','damageZero'],
target:['shaMiss','useCardToExcluded'],
},
charlotte:true,
filter:function(event,player){
return player.storage.reqingxi2&&event.card&&player.storage.reqingxi2.contains(event.card);
},
silent:true,
forced:true,
popup:false,
priority:12,
content:function(){
player.storage.reqingxi2.remove(trigger.card);
if(!player.storage.reqingxi2.length) player.removeSkill('reqingxi2');
},
},
qingxi:{
audio:2,
trigger:{source:'damageBegin1'},
check:function(event,player){
return get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.getParent().name=='sha'&&player.getEquip(1);
},
content:function(){
'step 0'
var num=1;
var info=get.info(player.getEquip(1));
if(info&&info.distance&&info.distance.attackFrom){
num-=info.distance.attackFrom;
}
if(trigger.player.countCards('h')2){
return 0;
}
return 8-get.value(card);
}
});
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
player.discard(e1,'notBySelf');
}
}
else{
trigger.num++;
}
}
},
jieyue:{
group:'jieyue1'
},
jieyue1:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
direct:true,
content:function(){
'step 0'
player.chooseCardTarget({
filterTarget:function(card,player,target){
return target!=player&&target.countCards('he')>0;
},
filterCard:lib.filter.cardDiscardable,
ai1:function(card){
return 7-get.useful(card);
},
ai2:function(target){
return 1-get.attitude(_status.event.player,target);
},
prompt:get.prompt2('jieyue')
});
'step 1'
if(result.bool){
player.logSkill('jieyue1',result.targets);
player.discard(result.cards);
var target=result.targets[0];
event.target=target;
target.chooseCard('将一张牌置于'+get.translation(player)+'的武将牌上,或令其弃置你的一张牌','he').set('ai',function(card){
if(card.name=='du') return 20;
var player=_status.event.player;
if(get.attitude(player,_status.event.getParent().player)>0){
return 8-get.value(card);
}
var nh=player.countCards('h');
if(nh<=2){
return 6-get.value(card);
}
if(nh<=3){
return 2-get.value(card);
}
return 0;
});
}
else{
event.finish();
}
'step 2'
if(result.bool&&result.cards&&result.cards.length){
event.target.$give(result.cards,player,false);
player.storage.jieyue2=result.cards[0];
event.target.lose(result.cards[0],ui.special,'toStorage');
player.syncStorage('jieyue2');
player.addSkill('jieyue2');
}
else if(event.target.countCards('he')){
player.discardPlayerCard(event.target,true);
}
},
ai:{
expose:0.1
}
},
jieyue2:{
mark:'card',
intro:{
content:'card'
},
audio:true,
enable:'chooseToUse',
filterCard:function(card){
return get.color(card)=='black';
},
viewAsFilter:function(player){
return player.countCards('h',{color:'black'})>0;
},
viewAs:{name:'wuxie'},
prompt:'将一张黑色手牌当无懈可击使用',
check:function(card){return 8-get.value(card)},
threaten:1.2,
group:['jieyue3','jieyue4']
},
jieyue3:{
enable:['chooseToRespond','chooseToUse'],
filterCard:function(card){
return get.color(card)=='red';
},
viewAs:{name:'shan'},
viewAsFilter:function(player){
if(!player.countCards('h',{color:'red'})) return false;
},
audio:true,
prompt:'将一张红色手牌当闪使用或打出',
check:function(){return 1},
ai:{
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('h',{color:'red'})) return false;
},
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')&¤t<0) return 0.8
}
}
}
},
jieyue4:{
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
content:function(){
player.gain(player.storage.jieyue2,'gain2','fromStorage');
player.storage.jieyue2=null;
player.removeSkill('jieyue2');
}
},
jinjiu:{
mod:{
cardname:function(card,player){
if(card.name=='jiu') return 'sha';
},
},
ai:{
skillTagFilter:function(player){
if(!player.countCards('h','jiu')) return false;
},
respondSha:true,
},
audio:2,
trigger:{player:['useCard1','respond']},
firstDo:true,
forced:true,
filter:function(event,player){
return event.card.name=='sha'&&!event.skill&&
event.cards.length==1&&event.cards[0].name=='jiu';
},
content:function(){},
},
xinxianzhen:{
audio:'xianzhen',
inherit:'xianzhen',
},
xinxianzhen2:{
audio:'xianzhen',
mod:{
targetInRange:function(card,player,target){
if(target==player.storage.xinxianzhen) return true;
},
cardUsable:function(card,player,num){
if(typeof num=='number') return num+100;
},
playerEnabled:function(card,player,target){
if(card.name=='sha'&&player.storage.xinxianzhen!=target&&!ui.selected.targets.contains(player.storage.xinxianzhen)){
var num=player.getCardUsable(card)-100;
if(num<=0) return false;
}
}
},
ai:{
unequip:true,
skillTagFilter:function(player,tag,arg){
if(arg.target!=player.storage.xinxianzhen) return false;
},
effect:{
player:function(card,player,target,current,isLink){
if(isLink||!player.storage.xinxianzhen) return;
if(target!=player.storage.xinxianzhen&&['sha','guohe','shunshou','huogong','juedou'].contains(card.name)){
if(get.effect(player.storage.xinxianzhen,card,player,player)>0){
return [1,2];
}
}
}
}
},
trigger:{player:'useCard2'},
filter:function(event,player){
return (event.card.name=='sha'||get.type(event.card)=='trick')&&
event.targets&&event.targets.length==1&&!event.targets.contains(player.storage.xinxianzhen);
},
check:function(event,player){
return get.effect(player.storage.xinxianzhen,event.card,player,player)>0;
},
logTarget:function(event,player){
return player.storage.xinxianzhen;
},
prompt2:'令该角色也成为此牌的目标',
content:function(){
var target=player.storage.xinxianzhen;
trigger.targets.push(target);
game.log(target,'成为了',trigger.card,'的额外目标');
},
},
xinxianzhen3:{
charlotte:true,
mod:{
cardEnabled:function(card){
if(card.name=='sha') return false;
},
ignoredHandcard:function(card,player){
if(get.name(card)=='sha'){
return true;
}
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&get.name(card)=='sha'){
return false;
}
},
},
},
xianzhen:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player.canCompare(target);
},
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
"step 0"
player.chooseToCompare(target);
"step 1"
if(result.bool){
player.storage[event.name]=target;
player.addTempSkill(event.name+2);
}
else{
player.addTempSkill(event.name+3);
}
},
ai:{
order:function(name,player){
var cards=player.getCards('h');
if(player.countCards('h','sha')==0){
return 1;
}
for(var i=0;i11&&get.value(cards[i])<7){
return 9;
}
}
return get.order({name:'sha'})-1;
},
result:{
player:function(player){
if(player.countCards('h','sha')>0) return 0;
var num=player.countCards('h');
if(num>player.hp) return 0;
if(num==1) return -2;
if(num==2) return -1;
return -0.7;
},
target:function(player,target){
var num=target.countCards('h');
if(num==1) return -1;
if(num==2) return -0.7;
return -0.5
},
},
threaten:1.3
}
},
xianzhen2:{
charlotte:true,
mod:{
targetInRange:function(card,player,target){
if(target==player.storage.xianzhen) return true;
},
cardUsable:function(card,player,num){
if(card.name=='sha'&&typeof num=='number') return num+100;
},
playerEnabled:function(card,player,target){
if(card.name=='sha'&&player.storage.xianzhen!=target&&!ui.selected.targets.contains(player.storage.xianzhen)){
var num=player.getCardUsable(card)-100;
if(num<=0) return false;
}
}
},
ai:{
unequip:true,
skillTagFilter:function(player,tag,arg){
if(arg.target!=player.storage.xianzhen) return false;
},
}
},
xianzhen3:{
charlotte:true,
mod:{
cardEnabled:function(card){if(card.name=='sha') return false}
}
},
lihuo:{
trigger:{player:'useCard1'},
filter:function(event,player){
if(event.card.name=='sha'&&!event.card.nature) return true;
return false;
},
audio:2,
check:function(event,player){
return false;
},
content:function(){
trigger.card.nature='fire';
var next=game.createEvent('lihuo_clear');
next.player=player;
next.card=trigger.card;
event.next.remove(next);
next.forceDie=true;
trigger.after.push(next);
next.setContent(function(){
if(player.isAlive()&&player.getHistory('sourceDamage',function(evt){
return evt.getParent(2)==event.parent;
}).length>0) player.loseHp();
delete card.nature;
});
},
group:'lihuo2'
},
lihuo2:{
trigger:{player:'useCard2'},
filter:function(event,player){
if(event.card.name!='sha'||get.nature(event.card)!='fire') return false;
return game.hasPlayer(function(current){
return !event.targets.contains(current)&&player.canUse(event.card,current);
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('lihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
}).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,_status.event.card,player,player);
});
'step 1'
if(result.bool){
if(!event.isMine()&&!_status.connectMode) game.delayx();
event.target=result.targets[0];
}
else{
event.finish();
}
'step 2'
player.logSkill('lihuo',event.target);
trigger.targets.push(event.target);
},
},
lihuo3:{
trigger:{player:'useCardAfter'},
vanish:true,
filter:function(event,player){
return event.card.name=='sha';
},
forced:true,
audio:false,
content:function(){
player.loseHp();
player.removeSkill('lihuo3');
}
},
chunlao:{
trigger:{player:'phaseJieshuBegin'},
direct:true,
audio:2,
audioname:['xin_chengpu'],
filter:function(event,player){
return player.countCards('h')>0&&(_status.connectMode||player.countCards('h','sha')>0)&&!player.storage.chunlao.length;
},
init:function(player){
if(!player.storage.chunlao) player.storage.chunlao=[];
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
},
content:function(){
'step 0'
player.chooseCard([1,Math.max(1,player.countCards('h','sha'))],get.prompt('chunlao'),{name:'sha'}).set('ai',function(){
return 1;
});
'step 1'
if(result.bool){
player.logSkill('chunlao');
player.storage.chunlao=player.storage.chunlao.concat(result.cards);
player.syncStorage('chunlao');
player.markSkill('chunlao');
player.lose(result.cards,ui.special,'toStorage');
player.$give(result.cards,player,false);
}
},
ai:{
effect:{
player:function(card,player,target){
if(_status.currentPhase!=player) return;
if(card.name=='sha'&&!player.needsToDiscard()&&
!player.storage.chunlao.length&&target.hp>1){
return 'zeroplayertarget';
}
}
},
threaten:1.4
},
group:'chunlao2'
},
chunlao2:{
enable:'chooseToUse',
filter:function(event,player){
return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.chunlao.length>0;
},
filterTarget:function(card,player,target){
return target==_status.event.dying;
},
direct:true,
clearTime:true,
delay:false,
selectTarget:-1,
content:function(){
"step 0"
player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true);
"step 1"
if(result.bool){
player.logSkill('chunlao',target);
player.$throw(result.links);
player.storage.chunlao.remove(result.links[0]);
game.cardsDiscard(result.links[0]);
player.syncStorage('chunlao')
event.type='dying';
target.useCard({name:'jiu',isCard:true},target);
if(!player.storage.chunlao.length){
player.unmarkSkill('chunlao');
}
else{
player.markSkill('chunlao');
}
}
},
ai:{
order:6,
skillTagFilter:function(player){
return player.storage.chunlao.length>0;
},
save:true,
result:{
target:3
},
threaten:1.6
},
},
chunlao2_old:{
trigger:{global:'dying'},
//priority:6,
filter:function(event,player){
return event.player.hp<=0&&player.storage.chunlao.length>0;
},
direct:true,
content:function(){
"step 0"
var att=get.attitude(player,trigger.player);
player.chooseCardButton(get.prompt('chunlao',trigger.player),player.storage.chunlao).set('ai',function(button){
if(_status.event.att>0) return 1;
return 0;
}).set('att',att);
"step 1"
if(result.bool){
player.logSkill('chunlao',trigger.player);
player.$throw(result.links);
player.storage.chunlao.remove(result.links[0]);
result.links[0].discard();
player.syncStorage('chunlao');
trigger.player.useCard({name:'jiu',isCard:true},trigger.player);
if(!player.storage.chunlao.length){
player.unmarkSkill('chunlao');
}
else{
player.markSkill('chunlao');
}
}
},
ai:{
expose:0.2
}
},
shenduan:{
trigger:{player:'loseAfter'},
filter:function(event,player){
if(event.type!='discard') return;
for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){
var cs=_status.event.cards;
for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){
var cs=_status.event.cards;
for(var i=0;i0;
},
content:function(){
'step 0'
var att=get.attitude(player,trigger.player);
var nh=trigger.player.countCards('h');
var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player);
if(!player.canUse({name:'sha',isCard:true},trigger.player,false)) eff=0;
player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){
var name=button.link.viewAs||button.link.name;
var att=_status.event.att;
var nh=_status.event.nh;
var eff=_status.event.eff;
var trigger=_status.event.getTrigger();
if(att>0&&eff>=0) return 1;
if(att>=0&&eff>0) return 1;
if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){
if(name=='lebu'&&nh>trigger.player.hp) return 1;
if(name=='bingliang'&&nh0&&player.inRange(event.player);
},
content:function(){
'step 0'
var att=get.attitude(player,trigger.player);
var nh=trigger.player.countCards('h');
var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player);
if(!player.canUse({name:'sha',isCard:true},trigger.player)) eff=0;
player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){
var name=button.link.viewAs||button.link.name;
var att=_status.event.att;
var nh=_status.event.nh;
var eff=_status.event.eff;
var trigger=_status.event.getTrigger();
if(att>0&&eff>=0) return 1;
if(att>=0&&eff>0) return 1;
if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){
if(name=='lebu'&&nh>trigger.player.hp) return 1;
if(name=='bingliang'&&nh0;
})){
player.draw();
}
},
//group:'yonglve2'
},
yonglve2:{
trigger:{source:'damage'},
forced:true,
popup:false,
filter:function(event){
return event.parent.skill=='yonglve';
},
content:function(){
player.storage.yonglve=true;
}
},
benxi:{
audio:2,
trigger:{player:'useCard2'},
forced:true,
filter:function(event,player){
return player.isPhaseUsing();
},
content:function(){},
mod:{
globalFrom:function(from,to,distance){
if(_status.currentPhase==from){
return distance-from.countUsed();
}
},
selectTarget:function(card,player,range){
if(_status.currentPhase==player){
if(card.name=='sha'&&range[1]!=-1){
if(!game.hasPlayer(function(current){
return get.distance(player,current)>1;
})){
range[1]++;
}
}
}
}
},
ai:{
unequip:true,
skillTagFilter:function(player){
if(game.hasPlayer(function(current){
return get.distance(player,current)>1;
})){
return false;
}
}
}
},
sidi:{
audio:2,
trigger:{global:'useCard'},
filter:function(event,player){
if(event.card.name!='shan') return false;
if(event.player==player) return true;
return _status.currentPhase==player;
},
frequent:true,
init:function(player){
if(!player.storage.sidi) player.storage.sidi=[];
},
intro:{
content:'cards',
onunmark:'throw',
},
content:function(){
var card=game.cardsGotoSpecial(get.cards()).cards[0];
game.log(player,'将',card,'置于武将牌上');
player.$gain2(card);
player.storage.sidi.add(card);
player.markSkill('sidi');
player.syncStorage('sidi');
},
group:'sidi2'
},
sidi2:{
trigger:{global:'phaseUseBegin'},
filter:function(event,player){
if(event.player==player||event.player.isDead()) return false;
if(!player.storage.sidi||!player.storage.sidi.length) return false;
return true;
},
check:function(event,player){
if(get.attitude(player,event.player)>=0) return false;
if(event.player.getEquip('zhuge')) return false;
if(event.player.hasSkill('paoxiao')) return false;
var players=game.filterPlayer();
for(var i=0;i0) break;
}
if(i==players.length) return false;
var nh=event.player.countCards('h');
var nsha=event.player.countCards('h','sha');
if(nh<2) return false;
switch(nh){
case 2:
if(nsha) return Math.random()<0.4;
return Math.random()<0.2;
case 3:
if(nsha) return Math.random()<0.8;
return Math.random()<0.3;
case 4:
if(nsha>1) return true;
if(nsha) return Math.random()<0.9;
return Math.random()<0.5;
default:return true;
}
},
logTarget:'player',
content:function(){
'step 0'
if(player.storage.sidi.length==1){
event.directbutton=player.storage.sidi[0];
}
else{
player.chooseCardButton('弃置一张“司敌”牌',player.storage.sidi,true);
}
'step 1'
var button;
if(event.directbutton){
button=event.directbutton;
}
else if(result.bool&&result.links&&result.links.length){
button=result.links[0];
}
if(button){
player.$throw([button]);
game.log(player,'将',button,'置于弃牌堆');
game.cardsDiscard(button);
trigger.player.addTempSkill('sidi3');
trigger.player.addMark('sidi3',1,false);
player.storage.sidi.remove(button);
player.syncStorage('sidi');
if(player.storage.sidi.length==0){
player.unmarkSkill('sidi');
}
else{
player.markSkill('sidi');
}
game.delayx();
}
}
},
sidi3:{
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num-player.countMark('sidi3');
}
},
onremove:true,
},
zhongyong:{
trigger:{player:'shaMiss'},
direct:true,
filter:function(event,player){
return event.responded&&get.itemtype(event.responded.cards)=='cards';
},
content:function(){
"step 0"
var cards=trigger.responded.cards;
event.cards=cards;
player.chooseTarget('忠勇:将'+get.translation(trigger.responded.cards)+'交给一名角色',function(card,player,target){
return target!=_status.event.source;
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(target.countCards('h','shan')&&target.countCards('h')>=2){
att/=1.5;
}
return att;
}).set('source',trigger.target);
"step 1"
if(result.bool){
player.logSkill('zhongyong',result.targets);
result.targets[0].gain(event.cards,'gain2');
if(result.targets[0]==player){
event.finish();
}
}
else{
event.finish();
}
"step 2"
player.chooseToUse('是否对'+get.translation(trigger.target)+'再使用一张杀?',
{name:'sha'},trigger.target,-1).set('addCount',false);
}
},
xinzhongyong:{
trigger:{player:'useCardAfter'},
audio:'zhongyong',
direct:true,
filter:function(event,player){
return event.card.name=='sha';
},
content:function(){
"step 0"
event.sha=trigger.cards.slice(0).filterInD();
event.shan=[];
game.countPlayer2(function(current){
current.getHistory('useCard',function(evt){
if(evt.card.name=='shan'&&evt.getParent(3)==trigger) event.shan.addArray(evt.cards);
});
});
event.shan.filterInD('d');
if(!event.sha.length&&!event.shan.length) event.finish();
player.chooseTarget(get.prompt2('zhongyong'),function(card,player,target){
return !_status.event.source.contains(target)&&target!=player;
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
}).set('source',trigger.targets);
"step 1"
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('xinzhongyong',target);
if(event.sha.length&&event.shan.length){
player.chooseControl().set('choiceList',[
'将'+get.translation(event.sha)+'交给'+get.translation(target),
'将'+get.translation(event.shan)+'交给'+get.translation(target),
]).set('ai',function(){
return _status.event.choice;
}).set('choice',function(){
if(get.color(event.sha)!='black') return 0;
return 1;
}());
}
else event._result={index:event.sha.length?0:1};
}
else{
event.finish();
}
"step 2"
var cards=result.index==0?event.sha:event.shan;
event.useSha=false;
target.gain(cards,'gain2');
for(var i=0;i0&&event.player.isPhaseUsing();
},
content:function(){
'step 0'
var go=false;
if(get.attitude(player,trigger.player)>0){
if(get.color(trigger.card)=='red'){
go=true;
}
else if(!trigger.player.hasSkill('paoxiao')&&
!trigger.player.hasSkill('tanlin3')&&
!trigger.player.hasSkill('zhaxiang2')&&
!trigger.player.hasSkill('fengnu')&&
!trigger.player.getEquip('zhuge')){
var nh=trigger.player.countCards('h');
if(player==trigger.player){
go=(player.countCards('h','sha')>0);
}
else if(nh>=4){
go=true;
}
else if(player.countCards('h','sha')){
if(nh==3){
go=Math.random()<0.8;
}
else if(nh==2){
go=Math.random()<0.5;
}
}
else if(nh>=3){
if(nh==3){
go=Math.random()<0.5;
}
else if(nh==2){
go=Math.random()<0.2;
}
}
}
}
var next=player.chooseToDiscard(get.prompt('longyin'),'弃置一张牌'+(get.color(trigger.card)=='red'?'并摸一张牌':'')+',令'+get.translation(trigger.player)+'本次使用的【杀】不计入使用次数','he');
next.logSkill=['longyin',trigger.player];
next.set('ai',function(card){
if(_status.event.go){
return 6-get.value(card);
}
return 0;
});
next.set('go',go);
'step 1'
if(result.bool){
trigger.player.getStat().card.sha--;
if(get.color(trigger.card)=='red'){
player.draw();
}
// player.logSkill('longyin',trigger.player);
}
},
ai:{
expose:0.2
}
},
jigong:{
audio:2,
trigger:{player:'phaseUseBegin'},
check:function(event,player){
var nh=player.countCards('h')-player.countCards('h',{type:'equip'});
if(nh<=1) return true;
if(player.countCards('h','tao')) return false;
if(nh<=2) return Math.random()<0.7;
if(nh<=3) return Math.random()<0.4;
return false;
},
content:function(){
player.draw(2);
player.addTempSkill('jigong2');
}
},
jigong2:{
mod:{
maxHandcardBase:function(player,num){
var damage=player.getStat().damage;
if(typeof damage=='number') return damage;
return 0;
}
}
},
shifei:{
audio:2,
trigger:{player:['chooseToRespondBegin','chooseToUseBegin']},
filter:function(event,player){
if(!_status.currentPhase) return false;
if(event.responded) return false;
if(!event.filterCard({name:'shan'},player,event)) return false;
if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false;
return true;
},
check:function(event,player){
if(get.attitude(player,_status.currentPhase)>0) return true;
var nh=_status.currentPhase.countCards('h')+1;
var players=game.filterPlayer();
for(var i=0;inh){
if(!player.hasShan()||get.attitude(player,players[i])<=0) return true;
}
}
return false;
},
content:function(){
'step 0'
player.line(_status.currentPhase,'green');
_status.currentPhase.draw();
'step 1'
if(_status.currentPhase.isMaxHandcard(true)){
event.finish();
return;
}
var targets=game.filterPlayer(function(current){
return current.isMaxHandcard();
})
if(targets.length==1){
event.onlytarget=targets[0];
}
else if(targets.length){
player.chooseTarget('选择一名角色弃置其一张牌',true,function(card,player,target){
return _status.event.targets.contains(target);
}).set('ai',function(target){
return -get.attitude(_status.event.player,target);
}).set('targets',targets);
}
else{
event.finish();
}
'step 2'
var target;
if(event.onlytarget){
target=event.onlytarget;
}
else if(result.targets&&result.targets.length){
target=result.targets[0];
}
if(target){
player.line(target,'green');
player.discardPlayerCard(target,'he',true);
trigger.untrigger();
trigger.responded=true;
trigger.result={bool:true,card:{name:'shan',isCard:true}}
}
},
ai:{
respondShan:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')&¤t<0){
var nh=player.countCards('h');
var players=game.filterPlayer();
for(var i=0;inh) return 0.4;
}
}
}
}
}
},
huaiyi:{
audio:2,
enable:'phaseUse',
usable:1,
delay:false,
filter:function(event,player){
return player.countCards('h',{color:'red'})&&player.countCards('h',{color:'black'});
},
content:function(){
'step 0'
player.showHandcards();
'step 1'
player.chooseControl('红色','黑色').set('ai',function(){
var player=_status.event.player;
if(player.countCards('h',{color:'red'})==1&&
player.countCards('h',{color:'black'})>1) return '红色';
return '黑色';
});
'step 2'
event.control=result.control;
var cards;
if(event.control=='红色'){
cards=player.getCards('h',{color:'red'});
}
else{
cards=player.getCards('h',{color:'black'});
}
player.discard(cards);
event.num=cards.length;
'step 3'
player.chooseTarget('请选择至多'+get.cnNumber(event.num)+'名有牌的其他角色,获得这些角色的各一张手牌。',[1,event.num],function(card,player,target){
return target!=player&&target.countCards('he')>0;
}).set('ai',function(target){
return -get.attitude(_status.event.player,target)+0.5;
});
'step 4'
if(result.bool&&result.targets){
player.line(result.targets,'green');
event.targets=result.targets;
event.targets.sort(lib.sort.seat);
event.gained=0;
}
else{
event.finish();
}
'step 5'
if(player.isAlive()&&event.targets.length){
player.gainPlayerCard(event.targets.shift(),'he',true);
}
else event.finish();
'step 6'
if(result.bool){
event.gained+=result.cards.length;
}
if(event.targets.length) event.goto(5);
'step 7'
if(event.gained>1) player.loseHp();
},
ai:{
order:function(item,player){
if(player.countCards('h',{color:'red'})==1) return 10;
if(player.countCards('h',{color:'black'})==1) return 10;
return 1;
},
result:{
player:1
}
}
},
yaoming:{
audio:2,
trigger:{player:'damageEnd',source:'damageSource'},
direct:true,
filter:function(event,player){
if(player.hasSkill('yaoming2')) return false;
var nh=player.countCards('h');
return game.hasPlayer(function(current){
return current.countCards('h')!=nh;
});
},
content:function(){
'step 0'
var nh=player.countCards('h');
player.chooseTarget(get.prompt2('yaoming'),function(card,player,target){
return _status.event.nh!=target.countCards('h');
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(target.countCards('h')>_status.event.nh) return -att;
return att;
}).set('nh',nh);
'step 1'
if(result.bool){
player.logSkill('yaoming',result.targets);
player.addTempSkill('yaoming2');
var target=result.targets[0];
if(target.countCards('h')0;
},
content:function(){
'step 0'
player.choosePlayerCard(target,'e',true);
'step 1'
if(result.links){
var num=0,players=game.filterPlayer();
for(var i=0;inum2){
player.draw();
}
},
ai:{
order:7,
result:{
target:function(player,target){
if(target.hasSkillTag('noe')) return 1;
if(target.getEquip(1)||target.getEquip(4)) return -1;
if(target.getEquip(2)) return -0.7;
return -0.5;
}
}
}
},
reyanzhu:{
enable:'phaseUse',
audio:'yanzhu',
usable:1,
filterTarget:lib.filter.notMe,
content:function(){
'step 0'
if(!target.countCards('e')) event._result={bool:false};
else target.chooseCard('e','将一张装备区的牌交给'+get.translation(target)+',或令下一次受到的伤害+1。');
'step 1'
if(result.bool) player.gain(result.cards,'giveAuto',target);
else{
target.addSkill('reyanzhu2');
target.addMark('reyanzhu2',1,false);
}
},
ai:{
order:10,
result:{
target:function(player,target){
if(target.countCards('e',function(card){
return card.name!='tengjia'&&get.value(card)<=0
})) return -0.5;
return -1.5;
},
},
},
},
reyanzhu2:{
trigger:{player:'damageBegin3'},
forced:true,
onremove:true,
content:function(){
trigger.num+=player.countMark('reyanzhu2');
game.log(player,'受到的伤害+'+player.countMark('reyanzhu2'));
player.removeSkill('reyanzhu2');
},
intro:{
content:'下次受到的伤害+#',
},
},
rexingxue:{
trigger:{player:'phaseJieshuBegin'},
direct:true,
audio:'xingxue',
filter:function(event,player){
return player.maxHp>0;
},
content:function(){
'step 0'
player.chooseTarget([1,player.maxHp],get.prompt2('rexingxue')).set('ai',function(target){
var att=get.attitude(player,target);
if(target.countCards('h')==target.hp-1) att*=2;
return att;
});
'step 1'
if(result.bool){
event.targets=result.targets.sortBySeat();
player.logSkill('rexingxue',event.targets);
game.asyncDraw(result.targets);
}
else event.finish();
'step 2'
game.delay();
'step 3'
if(event.targets.length){
event.target=event.targets.shift();
if(event.target.isDead()) event.redo();
}
else event.finish();
'step 4'
if(target.isAlive()&&target.countCards('h')&&target.countCards('h')!=target.hp) target.chooseCard('he',true,'将一张牌置于牌堆顶');
else event.goto(3);
'step 5'
if(result&&result.cards){
event.card=result.cards[0];
target.lose(result.cards,ui.special);
game.log(target,'将',(get.position(event.card)=='h'?'一张牌':get.translation(event.card)),'置于牌堆顶');
game.broadcastAll(function(player){
var cardx=ui.create.card();
cardx.classList.add('infohidden');
cardx.classList.add('infoflip');
player.$throw(cardx,1000,'nobroadcast');
},target);
}
else{
event.card=null;
}
'step 6'
if(event.card){
event.card.fix();
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
game.delay();
}
event.goto(3);
},
},
rezhaofu:{
unique:true,
global:'rezhaofu2',
zhuSkill:true
},
rezhaofu2:{
mod:{
inRangeOf:function(from,to){
if(from.group!='wu') return;
var players=game.filterPlayer();
for(var i=0;i0&&target!=player;
},
content:function(){
'step 0'
if(target.countCards('e')){
target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?').set('ai',function(){
if(_status.event.player.countCards('e')>=3) return false;
return true;
});
}
else{
target.chooseToDiscard(true,'he');
event.finish();
}
'step 1'
if(result.bool){
var es=target.getCards('e');
player.gain(es,target,'give');
player.removeSkill('yanzhu');
}
else{
target.chooseToDiscard(true,'he');
}
},
ai:{
order:6,
result:{
target:function(player,target){
var ne=target.countCards('e');
if(!ne) return -2;
if(ne>=2) return -ne;
return 0;
}
}
}
},
shizhi:{
mod:{
cardname:function(card,player,name){
if(card.name=='shan'&&player.hp==1) return 'sha';
},
},
ai:{
skillTagFilter:function(player){
if(!player.countCards('h','shan')) return false;
if(player.hp!=1) return false;
},
respondSha:true,
},
audio:2,
trigger:{player:['useCard1','respond']},
firstDo:true,
forced:true,
filter:function(event,player){
return event.card.name=='sha'&&!event.skill&&
event.cards.length==1&&event.cards[0].name=='shan';
},
content:function(){},
},
wurong:{
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.countCards('h')>0;
},
filterTarget:function(card,player,target){
return target.countCards('h')>0&&target!=player;
},
content:function(){
"step 0"
if(target.countCards('h')==0||player.countCards('h')==0){
event.finish();
return;
}
"step 1"
var sendback=function(){
if(_status.event!=event){
return function(){
event.resultOL=_status.event.resultOL;
};
}
};
if(player.isOnline()){
player.wait(sendback);
event.ol=true;
player.send(function(){
game.me.chooseCard(true).set('glow_result',true).ai=function(){
return Math.random();
};
game.resume();
});
}
else{
event.localPlayer=true;
player.chooseCard(true).set('glow_result',true).ai=function(){
return Math.random();
};
}
if(target.isOnline()){
target.wait(sendback);
event.ol=true;
target.send(function(){
var rand=Math.random()<0.4;
game.me.chooseCard(true).set('glow_result',true).ai=function(card){
if(rand) return card.name=='shan'?1:0;
return card.name=='shan'?0:1;
};
game.resume();
});
}
else{
event.localTarget=true;
}
"step 2"
if(event.localPlayer){
event.card1=result.cards[0];
}
if(event.localTarget){
var rand=Math.random()<0.4;
target.chooseCard(true).set('glow_result',true).ai=function(card){
if(rand) return card.name=='shan'?1:0;
return card.name=='shan'?0:1;
};
}
"step 3"
if(event.localTarget){
event.card2=result.cards[0];
}
if(!event.resultOL&&event.ol){
game.pause();
}
"step 4"
try{
if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0];
if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0];
if(!event.card1||!event.card2){
throw('err');
}
}
catch(e){
console.log(e);
event.finish();
return;
}
if(event.card2.number>=10||event.card2.number<=4){
if(target.countCards('h')>2){
event.addToAI=true;
}
}
game.broadcastAll(function(card1,card2){
card1.classList.remove('glow');
card2.classList.remove('glow');
},event.card1,event.card2);
"step 5"
game.broadcastAll(function(){
ui.arena.classList.add('thrownhighlight');
});
game.addVideo('thrownhighlight1');
player.$compare(event.card1,target,event.card2);
game.delay(4);
"step 6"
game.log(player,'展示了',event.card1);
game.log(target,'展示了',event.card2);
var name1=get.name(event.card1);
var name2=get.name(event.card2);
if(name1=='sha'&&name2!='shan'){
player.discard(event.card1).set('animate',false);
target.$gain2(event.card2);
var clone=event.card1.clone;
if(clone){
clone.style.transition='all 0.5s';
clone.style.transform='scale(1.2)';
clone.delete();
game.addVideo('deletenode',player,get.cardsInfo([clone]));
}
game.broadcast(function(card){
var clone=card.clone;
if(clone){
clone.style.transition='all 0.5s';
clone.style.transform='scale(1.2)';
clone.delete();
}
},event.card1);
target.damage('nocard');
}
else if(name1!='sha'&&name2=='shan'){
player.discard(event.card1).set('animate',false);
target.$gain2(event.card2);
var clone=event.card1.clone;
if(clone){
clone.style.transition='all 0.5s';
clone.style.transform='scale(1.2)';
clone.delete();
game.addVideo('deletenode',player,get.cardsInfo([clone]));
}
game.broadcast(function(card){
var clone=card.clone;
if(clone){
clone.style.transition='all 0.5s';
clone.style.transform='scale(1.2)';
clone.delete();
}
},event.card1);
player.gainPlayerCard(target,true,'he');
}
else{
player.$gain2(event.card1);
target.$gain2(event.card2);
}
game.broadcastAll(function(){
ui.arena.classList.remove('thrownhighlight');
});
game.addVideo('thrownhighlight2');
},
ai:{
order:6,
result:{
target:-1,
}
}
},
zhanjue:{
audio:2,
enable:'phaseUse',
filterCard:true,
selectCard:-1,
filter:function(event,player){
if(player.getStat().skill.zhanjue_draw&&player.getStat().skill.zhanjue_draw>=2) return false;
var hs=player.getCards('h');
if(!hs.length) return false;
for(var i=0;i=3||target.countCards('h')>=3) return 'zeroplayertarget';
if(player.countCards('h','tao')) return 'zeroplayertarget';
if(target.countCards('h','sha')>1) return 'zeroplayertarget';
}
}
}
}
},
zhanjue2:{
audio:false,
trigger:{player:'phaseBefore'},
silent:true,
content:function(){
player.storage.zhanjue=0;
}
},
zhanjue3:{
audio:false,
trigger:{player:'damageAfter',source:'damageAfter'},
forced:true,
popup:false,
filter:function(event,player){
return event.parent.skill=='zhanjue';
},
content:function(){
trigger.player.addTempSkill('zhanjue5');
}
},
zhanjue4:{
audio:false,
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='zhanjue';
},
content:function(){
"step 0"
var stat=player.getStat().skill;
if(!stat.zhanjue_draw) stat.zhanjue_draw=0;
stat.zhanjue_draw++;
player.draw('nodelay');
var list=game.filterPlayer(function(current){
if(current.getHistory('damage',function(evt){
return evt.card==trigger.card;
}).length>0){
if(current==player){
stat.zhanjue_draw++;
}
return true;
}
return false;
});
if(list.length){
list.sortBySeat();
game.asyncDraw(list);
}
"step 1"
game.delay();
}
},
zhanjue5:{},
qinwang:{
audio:'qinwang1',
unique:true,
group:['qinwang1','qinwang2'],
zhuSkill:true,
subSkill:{
ai:{}
}
},
qinwang1:{
audio:2,
trigger:{player:'chooseToRespondBegin'},
filter:function(event,player){
if(event.responded) return false;
if(!player.hasZhuSkill('qinwang')) return false;
if(!player.countCards('he')) return false;
if(!event.filterCard({name:'sha'},player,event)) return false;
return game.hasPlayer(function(current){
return current!=player&¤t.group=='shu';
});
},
direct:true,
content:function(){
"step 0"
var yep=false;
if(!player.storage.jijianging&&!trigger.jijiang){
var players=game.filterPlayer();
for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){
yep=true;break;
}
}
}
var next=player.chooseToDiscard(get.prompt('qinwang'),'弃置一张牌并发动【激将】','he');
next.set('ai',function(card){
if(_status.event.yep) return 5-get.value(card);
return 0;
});
next.set('yep',yep);
next.logSkill='qinwang'
"step 1"
if(!result.bool){
event.finish();
}
"step 2"
if(event.current==undefined) event.current=player.next;
if(event.current==player){
event.finish();
}
else if(event.current.group=='shu'){
player.storage.jijianging=true;
var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'});
next.set('ai',function(){
var event=_status.event;
return (get.attitude(event.player,event.sourcex)-2);
});
next.set('sourcex',player);
next.set('jijiang',true);
next.noOrdering=true;
next.autochoose=lib.filter.autoRespondSha;
}
else{
event.current=event.current.next;
event.redo();
}
"step 3"
player.storage.jijianging=false;
if(result.bool){
event.finish();
trigger.result=result;
trigger.responded=true;
trigger.animate=false;
event.current.draw();
if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){
event.current.ai.shown+=0.3;
if(event.current.ai.shown>0.95) event.current.ai.shown=0.95;
}
}
else{
event.current=event.current.next;
event.goto(2);
}
}
},
qinwang2:{
audio:'qinwang1',
enable:'chooseToUse',
filter:function(event,player){
if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false;
if(!player.hasZhuSkill('qinwang')) return false;
if(!lib.filter.cardUsable({name:'sha'},player)) return false;
return game.hasPlayer(function(current){
return current!=player&¤t.group=='shu';
});
},
filterCard:true,
position:'he',
check:function(card){
var player=_status.event.player,players=game.filterPlayer();
for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){
return 5-get.value(card);
}
}
return 0;
},
filterTarget:function(card,player,target){
if(_status.event._backup&&
typeof _status.event._backup.filterTarget=='function'&&
!_status.event._backup.filterTarget({name:'sha'},player,target)){
return false;
}
return player.canUse({name:'sha'},target);
},
content:function(){
"step 0"
if(event.current==undefined) event.current=player.next;
if(event.current==player){
player.addSkill('jijiang3');
player.addTempSkill('qinwang_ai');
event.getParent(2).step=0;
event.finish();
}
else if(event.current.group=='shu'){
var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀',
function(card,player,event){
var evt=event||_status.event;
return card.name=='sha'&&evt.source.canUse(card,evt.target);
});
next.set('ai',function(card){
var event=_status.event;
return get.effect(event.target,card,event.source,event.player);
});
next.set('source',player);
next.set('target',target);
next.set('jijiang',true);
next.noOrdering=true;
next.autochoose=lib.filter.autoRespondSha;
}
else{
event.current=event.current.next;
event.redo();
}
"step 1"
if(result.bool){
event.finish();
event.current.draw();
if(result.cards&&result.cards.length){
player.useCard({name:'sha',isCard:true},result.cards,target).animate=false;
}
else{
player.useCard({name:'sha',isCard:true},target).animate=false;
}
if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){
event.current.ai.shown+=0.3;
if(event.current.ai.shown>0.95) event.current.ai.shown=0.95;
}
}
else{
event.current=event.current.next;
event.goto(0);
}
},
ai:{
respondSha:true,
result:{
target:function(player,target){
if(player.hasSkill('jijiang3')) return 0;
if(player.hasSkill('qinwang_ai')) return 0;
return get.effect(target,{name:'sha'},player,target);
}
},
order:function(){
return get.order({name:'sha'})-0.1;
},
}
},
zuoding:{
trigger:{global:'useCardToPlayered'},
filter:function(event,player){
if(event.getParent().triggeredTargets3.length>1) return false;
return get.suit(event.card)=='spade'&&
_status.currentPhase==event.player&&event.targets&&event.targets.length&&
event.player!=player&&game.countPlayer2(function(current){
return current.getHistory('damage').length>0;
})==0;
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('zuoding'),'令一名目标角色摸一张牌',function(card,player,target){
return _status.event.targets.contains(target);
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
}).set('targets',trigger.targets);
'step 1'
if(result.bool){
player.logSkill('zuoding',result.targets);
result.targets[0].draw();
}
},
ai:{
expose:0.2
},
//group:'zuoding3'
},
zuoding2:{},
zuoding3:{
trigger:{global:'damage'},
silent:true,
content:function(){
player.addTempSkill('zuoding2');
}
},
huomo:{
audio:2,
group:['huomo_count','huomo_count2','huomo_use']
},
huomo2:{},
huomo_count:{
init:function(player){
player.storage.huomo={};
},
trigger:{global:'phaseBefore'},
silent:true,
content:function(){
player.storage.huomo={};
}
},
huomo_count2:{
trigger:{player:['useCard1']},
silent:true,
firstDo:true,
filter:function(event){
return get.type(event.card)=='basic';
},
content:function(){
if(!player.storage.huomo) player.storage.huomo={};
player.storage.huomo[trigger.card.name]=true;
}
},
huomo_use:{
enable:'chooseToUse',
filter:function(event,player){
if(!player.storage.huomo) player.storage.huomo={};
if((!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event))||
(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event))||
(!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event))||
(!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event))){
return player.hasCard(function(card){
return get.color(card)=='black'&&get.type(card)!='basic';
},'he');
}
return false;
},
chooseButton:{
dialog:function(event,player){
var list=[];
if(!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event)){
list.push(['基本','','sha']);
list.push(['基本','','sha','fire']);
list.push(['基本','','sha','thunder']);
}
if(!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event)){
list.push(['基本','','tao']);
}
if(!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event)){
list.push(['基本','','shan']);
}
if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)){
list.push(['基本','','jiu']);
}
return ui.create.dialog('活墨',[list,'vcard'],'hidden');
},
check:function(button){
var player=_status.event.player;
var card={name:button.link[2],nature:button.link[3]};
if(game.hasPlayer(function(current){
return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
})){
switch(button.link[2]){
case 'tao':return 5;
case 'jiu':return 3.01;
case 'shan':return 3.01;
case 'sha':
if(button.link[3]=='fire') return 2.95;
else if(button.link[3]=='fire') return 2.92;
else return 2.9;
}
}
return 0;
},
backup:function(links,player){
return {
check:function(card){
return 1/Math.max(0.1,get.value(card));
},
filterCard:function(card){
return get.type(card)!='basic'&&get.color(card)=='black';
},
viewAs:{name:links[0][2],nature:links[0][3],suit:null,number:null,isCard:true},
position:'he',
popname:true,
ignoreMod:true,
precontent:function(){
'step 0'
player.logSkill('huomo');
var card=event.result.cards[0];
event.card=card;
player.$throw(card,1000);
game.log(player,'将',card,'置于牌堆顶');
event.result.card={name:event.result.card.name,nature:event.result.card.nature};
event.result.cards=[];
player.lose(card,ui.special,'visible');
'step 1'
game.delay();
'step 2'
event.card.fix();
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
game.updateRoundNumber();
},
}
},
prompt:function(links,player){
return '将一张黑色非基本牌置于牌堆顶并视为使用一张'+get.translation(links[0][3]||'')+get.translation(links[0][2]);
}
},
ai:{
order:function(){
var player=_status.event.player;
var event=_status.event;
if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){
return 3.1;
}
return 2.9;
},
save:true,
respondSha:true,
respondShan:true,
skillTagFilter:function(player,tag,arg){
if(player.hasCard(function(card){
return get.color(card)=='black'&&get.type(card)!='basic';
},'he')){
if(!player.storage.huomo) player.storage.huomo={};
if(tag=='respondSha'){
if(arg!='use') return false;
if(player.storage.huomo.sha) return false;
}
else if(tag=='respondShan'){
if(player.storage.huomo.shan) return false;
}
else{
if(player.storage.huomo.tao&&player.storage.huomo.jiu) return false;
}
}
else{
return false;
}
},
result:{
player:1
}
}
},
taoxi:{
audio:2,
trigger:{player:'useCardToPlayered'},
filter:function(event,player){
return _status.currentPhase==player&&event.targets.length==1&&
event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target;
},
check:function(event,player){
return get.attitude(player,event.target)<0;
},
intro:{
content:'card'
},
content:function(){
var card=trigger.target.getCards('h').randomGet();
player.showCards([card]);
player.storage.taoxi=card;
player.storage.taoxi2=trigger.target;
player.syncStorage('taoxi');
player.markSkill('taoxi');
player.addTempSkill('taoxi4');
},
group:['taoxi2','taoxi3']
},
taoxi2:{
audio:false,
enable:'phaseUse',
filter:function(event,player){
if(player.storage.taoxi&&player.storage.taoxi2&&
get.owner(player.storage.taoxi)==player.storage.taoxi2&&
lib.filter.filterCard(player.storage.taoxi,player,event)){
return true;
}
return false;
},
filterTarget:function(card,player,target){
return player.canUse(player.storage.taoxi,target);
},
selectTarget:function(){
var info=get.info(_status.event.player.storage.taoxi);
if(info.notarget) return -1;
return get.select(info.selectTarget);
},
multitarget:true,
multiline:true,
content:function(){
'step 0'
var card=player.storage.taoxi;
if(!card){
event.finish();
return;
}
var owner=get.owner(card);
if(owner){
owner.lose(card,ui.special);
}
event.card=card;
player.$throw(card);
'step 1'
player.useCard(event.card,targets).animate=false;
delete player.storage.taoxi;
delete player.storage.taoxi2;
player.unmarkSkill('taoxi');
},
ai:{
order:8,
result:{
target:function(player,target){
return get.effect(target,player.storage.taoxi,player,target);
},
player:1
}
}
},
taoxi3:{
trigger:{player:'phaseJieshuBegin'},
forced:true,
popup:false,
filter:function(event,player){
return player.storage.taoxi?true:false;
},
content:function(){
if(get.owner(player.storage.taoxi)==player.storage.taoxi2){
player.loseHp();
}
delete player.storage.taoxi;
delete player.storage.taoxi2;
player.unmarkSkill('taoxi');
}
},
taoxi4:{},
xingshuai:{
skillAnimation:true,
animationColor:'thunder',
audio:2,
trigger:{player:'dying'},
//priority:6,
zhuSkill:true,
filter:function(event,player){
if(player.storage.xingshuai) return false;
if(player.hp>0) return false;
if(!player.hasZhuSkill('xingshuai')) return false;
return game.hasPlayer(function(current){
return current!=player&¤t.group=='wei';
});
},
init:function(player){
if(player.hasZhuSkill('xingshuai')){
player.markSkill('xingshuai');
player.storage.xingshuai=false;
}
},
intro:{
content:'limited'
},
unique:true,
limited:true,
mark:false,
content:function(){
'step 0'
player.storage.xingshuai=true;
player.awakenSkill('xingshuai');
var targets=game.filterPlayer();
targets.remove(player);
event.targets=targets;
event.damages=[];
'step 1'
if(event.targets.length){
var current=event.targets.shift();
if(current.group=='wei'){
current.chooseBool('是否令'+get.translation(player)+'回复一点体力?').set('ai',function(){
return get.attitude(_status.event.player,_status.event.target)>2;
}).set('target',player);
event.current=current;
}
else{
event.redo();
}
}
else{
event.goto(3);
}
'step 2'
if(result.bool){
event.damages.push(event.current);
event.current.line(player,'green');
game.log(event.current,'令',player,'回复一点体力');
player.recover();
}
if(event.targets.length){
event.goto(1);
}
'step 3'
if(event.damages.length){
var next=game.createEvent('xingshuaI_next');
event.next.remove(next);
trigger.after.push(next);
next.targets=event.damages;
next.setContent(function(){
targets.shift().damage();
if(targets.length) event.redo();
});
}
}
},
mingjian:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target;
},
filter:function(event,player){
return player.countCards('h')>0;
},
filterCard:true,
selectCard:-1,
discard:false,
lose:false,
delay:false,
content:function(){
target.gain(cards,player,'giveAuto');
target.addTempSkill('mingjian2',{player:'phaseAfter'});
target.storage.mingjian2++;
target.updateMarks('mingjian2');
},
ai:{
order:1,
result:{
target:function(player,target){
if(target.hasSkillTag('nogain')) return 0;
if(player.countCards('h')==player.countCards('h','du')) return -1;
if(target.hasJudge('lebu')) return 0;
if(get.attitude(player,target)>3){
var basis=get.threaten(target);
if(player==get.zhu(player)&&player.hp<=2&&player.countCards('h','shan')&&!game.hasPlayer(function(current){
return get.attitude(current,player)>3&¤t.countCards('h','tao')>0;
})) return 0;
if(target.countCards('h')+player.countCards('h')>target.hp+2) return basis*0.8;
return basis;
}
return 0;
}
}
}
},
mingjian2:{
charlotte:true,
mark:true,
intro:{
content:'手牌上限+#,出杀次数+#'
},
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=0;
},
onremove:true,
mod:{
maxHandcard:function(player,num){
return num+player.storage.mingjian2;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.storage.mingjian2;
}
},
},
mingjian_old:{
audio:2,
trigger:{player:'phaseUseBefore'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
'step 0'
var go=Math.random()<0.5;
player.chooseTarget(get.prompt('mingjian_old'),function(card,player,target){
return player!=target
}).ai=function(target){
var att=get.attitude(player,target);
if(att>3){
if(player.countCards('h')>player.hp) return att;
if(go) return att;
}
return 0;
}
'step 1'
if(result.bool){
player.logSkill('mingjian_old',result.targets);
trigger.cancel();
var target=result.targets[0];
target.addSkill('mingjian2_old');
var hs=player.getCards('h');
target.gain(hs,player);
player.$give(hs.length,target);
}
}
},
mingjian2_old:{
audio:false,
trigger:{global:'phaseAfter'},
forced:true,
popup:false,
charlotte:true,
content:function(){
if(lib.config.glow_phase){
if(_status.currentPhase){
_status.currentPhase.classList.remove('glow_phase');
}
player.classList.add('glow_phase');
}
game.addVideo('phaseChange',player);
_status.currentPhase=player;
player.ai.tempIgnore=[];
player.stat.push({card:{},skill:{}});
player.phaseUse();
player.removeSkill('mingjian2_old');
}
},
huituo:{
audio:2,
trigger:{player:'damageEnd'},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('huituo')).set('ai',function(target){
var player=_status.event.player;
if(get.attitude(player,target)>0){
return get.recoverEffect(target,player,player)+1;
}
return 0;
});
'step 1'
if(result.bool){
player.logSkill('huituo',result.targets);
var target=result.targets[0];
event.target=target;
target.judge(function(card){
if(target.hp==target.maxHp){
if(get.color(card)=='red') return -1;
}
if(get.color(card)=='red') return 1;
return 0;
});
}
else{
event.finish();
}
'step 2'
if(result.color){
if(result.color=='red'){
if(event.target.hp0&&event.source&&
event.card&&event.card.name=='sha';
},
direct:true,
//priority:5,
audio:2,
content:function(){
'step 0'
var prompt='弃置一张牌'
if(trigger.source.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquip(1)));
var next=player.chooseToDiscard('he',get.prompt('duodao',trigger.source),prompt);
next.logSkill=['duodao',trigger.source];
next.set('ai',function(card){
if(!_status.event.getTrigger().source.getEquip(1)) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().source)<=0){
return 6-get.value(card);
}
return 0;
});
'step 1'
if(result.bool&&trigger.source.getEquip(1)){
player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf');
}
},
ai:{
maixie_defend:true,
}
},
reanjian:{
trigger:{player:'useCardToPlayered'},
forced:true,
audio:'anjian',
filter:function(event,player){
return event.card.name=='sha'&&!event.target.inRange(player);
},
logTarget:'target',
content:function(){
trigger.getParent().reanjian_buffed=true;
var map=trigger.customArgs;
var id=trigger.target.playerid;
if(!map[id]) map[id]={};
if(!map[id].extraDamage) map[id].extraDamage=0;
map[id].extraDamage++;
trigger.target.addTempSkill('reanjian2');
trigger.target.addTempSkill('reanjian4');
trigger.target.storage.reanjian2.add(trigger.card);
},
ai:{
unequip_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.name=='sha'&&arg.target&&!arg.target.inRange(player)) return true;
return false;
}
},
},
reanjian2:{
firstDo:true,
ai:{unequip2:true},
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[];
},
onremove:true,
trigger:{
player:['damage','damageCancelled','damageZero'],
target:['shaMiss','useCardToExcluded'],
},
charlotte:true,
filter:function(event,player){
return player.storage.reanjian2&&event.card&&player.storage.reanjian2.contains(event.card);
},
silent:true,
forced:true,
popup:false,
priority:12,
content:function(){
player.storage.reanjian2.remove(trigger.card);
if(!player.storage.reanjian2.length) player.removeSkill('reanjian2');
},
},
reanjian3:{
mod:{
cardSavable:function(card){
if(card.name=='tao') return false;
},
},
},
reanjian4:{
trigger:{player:'dyingBegin'},
forced:true,
silent:true,
firstDo:true,
filter:function(event,player){
return event.getParent(2).reanjian_buffed=true;
},
content:function(){
player.addTempSkill('reanjian3',{global:['dyingEnd','phaseEnd']});
},
},
reduodao:{
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0);
},
direct:true,
audio:'duodao',
content:function(){
'step 0'
if(get.color(trigger.card)!='red'){
var prompt='弃置一张牌'
if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1)));
var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt);
next.logSkill=['reduodao',trigger.player];
next.set('ai',function(card){
if(!_status.event.getTrigger().player.getEquip(1)) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){
return 6-get.value(card);
}
return 0;
});
}
else{
player.chooseBool('是否发动夺刀】,获得'+get.translation(trigger.player)+'装备区的'+get.translation(trigger.player.getEquip(1))+'?').set('ai',function(){
var player=_status.event.player;
var source=_status.event.getTrigger().player;
return get.attitude(player,source)*get.value(source.getEquip(1))<=0;
});
}
'step 1'
if(result.bool&&trigger.player.getEquip(1)){
if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player);
player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf');
}
},
},
anjian:{
audio:2,
trigger:{source:'damageBegin1'},
check:function(event,player){
return get.attitude(player,event.player)<=0;
},
forced:true,
filter:function(event,player){
return event.getParent().name=='sha'&&!event.player.inRange(player);
},
content:function(){
trigger.num++;
}
},
xinpojun:{
shaRelated:true,
trigger:{player:'useCardToPlayered'},
direct:true,
filter:function(event,player){
return event.card.name=='sha'&&player.isPhaseUsing()&&event.target.hp>0&&event.target.countCards('he')>0;
},
audio:2,
content:function(){
'step 0'
player.choosePlayerCard(trigger.target,'he',
[1,Math.min(trigger.target.countCards('he'),trigger.target.hp)],get.prompt('xinpojun',trigger.target));
'step 1'
if(result.bool&&result.links.length){
player.logSkill('xinpojun',trigger.target);
if(trigger.target.storage.xinpojun2){
trigger.target.storage.xinpojun2=trigger.target.storage.xinpojun2.concat(result.links);
}
else{
trigger.target.storage.xinpojun2=result.links.slice(0);
}
game.addVideo('storage',trigger.target,['xinpojun2',get.cardsInfo(trigger.target.storage.xinpojun2),'cards']);
trigger.target.addSkill('xinpojun2');
trigger.target.lose(result.links,ui.special,'toStorage');
}
},
ai:{
unequip_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false;
}
},
},
xinpojun2:{
trigger:{global:'phaseEnd'},
forced:true,
audio:false,
mark:true,
intro:{
content:'cardCount',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
},
content:function(){
if(player.storage.xinpojun2){
player.gain(player.storage.xinpojun2,'fromStorage');
delete player.storage.xinpojun2;
}
player.removeSkill('xinpojun2');
},
//group:'xinpojun3'
},
xinpojun3:{
trigger:{player:'dieBegin'},
forced:true,
popup:false,
content:function(){
player.$throw(player.storage.xinpojun2,1000);
for(var i=0;i=0;
},
//priority:-5,
logTarget:'player',
content:function(){
game.asyncDraw([trigger.player,player]);
},
ai:{
expose:0.1
}
},
yanyu:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
return player.countCards('h','sha')>0;
},
filterCard:{name:'sha'},
prepare:function(cards,player){
player.$throw(cards,1000);
game.log(player,'将',cards,'置入了弃牌堆');
},
discard:false,
loseTo:'discardPile',
visible:true,
delay:0.5,
content:function(){
player.draw();
},
ai:{
basic:{
order:1
},
result:{
player:1,
},
},
group:'yanyu2'
},
yanyu2:{
trigger:{player:'phaseUseEnd'},
direct:true,
filter:function(event,player){
return player.getStat().skill.yanyu>=2;
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('yanyu'),'令一名男性角色摸两张牌',function(card,player,target){
return target.sex=='male'&&target!=player;
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
});
'step 1'
if(result.bool){
player.logSkill('yanyu',result.targets);
result.targets[0].draw(2);
}
}
},
youdi:{
audio:true,
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return player.countCards('he')>0;
},
content:function(){
"step 0"
player.chooseTarget(get.prompt('youdi'),function(card,player,target){
return player!=target;
}).set('ai',function(target){
if(!_status.event.goon) return 0;
if(target.countCards('he')==0) return 0;
return -get.attitude(_status.event.player,target);
}).set('goon',player.countCards('h','sha')<=player.countCards('h')/3);
"step 1"
if(result.bool){
game.delay();
player.logSkill('youdi',result.targets);
event.target=result.targets[0];
event.target.discardPlayerCard(player,'he',true);
}
else{
event.finish();
}
"step 2"
if(result.links[0].name!='sha'&&event.target.countCards('he')){
player.gainPlayerCard('he',event.target,true);
}
},
ai:{
expose:0.2,
threaten:1.4
}
},
fuhun:{
enable:['chooseToUse','chooseToRespond'],
filterCard:true,
selectCard:2,
position:'h',
audio:2,
derivation:['new_rewusheng','olpaoxiao'],
viewAs:{name:'sha'},
prompt:'将两张手牌当杀使用或打出',
check:function(card){
if(_status.event.player.hasSkill('new_rewusheng')&&get.color(card)=='red') return 0;
if(_status.event.name=='chooseToRespond'){
if(card.name=='sha') return 0;
return 6-get.useful(card);
}
if(_status.event.player.countCards('h')<4) return 6-get.useful(card);
return 7-get.useful(card);
},
ai:{
respondSha:true,
order:function(item,player){
if(player.hasSkill('new_rewusheng')&&player.hasSkill('olpaoxiao')){
return 1;
}
if(player.countCards('h')<4){
return 1;
}
return 4;
},
},
group:'fuhun2'
},
fuhun2:{
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
if(player.hasSkill('fuhun3')) return false;
return event.getParent().skill=='fuhun';
},
content:function(){
player.addTempSkill('new_rewusheng');
player.addTempSkill('olpaoxiao');
player.addTempSkill('fuhun3');
}
},
fuhun3:{},
fencheng:{
skillAnimation:'epic',
animationColor:'gray',
audio:2,
enable:'phaseUse',
filter:function(event,player){
return !player.storage.fencheng;
},
filterTarget:function(card,player,target){
return player!=target;
},
unique:true,
limited:true,
selectTarget:-1,
mark:true,
line:'fire',
content:function(){
"step 0"
player.storage.fencheng=true;
player.awakenSkill('fencheng');
var res=get.damageEffect(target,player,target,'fire');
var num=Math.max(1,target.countCards('e'));
target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌或受到1点火焰伤害').set('ai',function(card){
var res=_status.event.res;
var num=_status.event.num;
var player=_status.event.player;
if(res>=0) return -1;
if(num>2&&player.hp>1) return -1;
if(num>1&&player.hp>2) return -1;
if(get.position(card)=='e'){
return 10-get.value(card);
}
return 6-get.value(card);
}).set('res',res).set('num',num);
"step 1"
if(!result.bool){
target.damage('fire');
}
},
ai:{
order:1,
result:{
player:function(player){
var num=0,players=game.filterPlayer();
for(var i=0;i0){
num-=Math.max(1,players[i].countCards('e'));
}
else if(att<0){
num+=Math.max(1,players[i].countCards('e'));
}
}
}
if(players.length<5){
return num-1;
}
else{
return num-2;
}
}
}
},
init:function(player){
player.storage.fencheng=false;
},
intro:{
content:'limited'
}
},
mieji:{
trigger:{player:'useCard2'},
direct:true,
audio:2,
filter:function(event,player){
return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black';
},
position:'he',
content:function(){
"step 0"
player.chooseTarget(get.prompt('mieji'),'为'+get.translation(trigger.card)+'增加一个额外目标',function(card,player,target){
var trigger=_status.event;
return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0];
}).set('autodelay',true).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,player,player);
}).set('targets',trigger.targets).set('card',trigger.card);
"step 1"
if(result.bool){
trigger.targets.push(result.targets[0]);
player.logSkill('mieji',result.targets);
}
}
},
junxing:{
enable:'phaseUse',
audio:2,
usable:1,
filterCard:true,
selectCard:[1,Infinity],
filter:function(event,player){
return player.countCards('h')>0;
},
check:function(card){
if(ui.selected.cards.length) return -1;
var val=get.value(card);
if(get.type(card)=='basic') return 8-get.value(card);
return 5-get.value(card);
},
filterTarget:function(card,player,target){
return player!=target;
},
content:function(){
"step 0"
var types=[];
for(var i=0;i0;
},
filter:function(event,player){
if(event.player.countCards('h')) return false;
if(_status.currentPhase!=player) return false;
if(event.player==player) return false;
return event.hs&&event.hs.length>0;
},
content:function(){
player.line(trigger.player,'green');
trigger.player.damage();
},
ai:{
threaten:1.1
}
},
jiefan:{
skillAnimation:true,
animationColor:'wood',
audio:2,
audioname:['re_handang'],
unique:true,
limited:true,
mark:true,
init:function(player){
player.storage.jiefan=false;
},
enable:'phaseUse',
filter:function(event,player){
return !player.storage.jiefan;
},
intro:{
content:'limited'
},
filterTarget:true,
content:function(){
"step 0"
player.awakenSkill('jiefan');
player.storage.jiefan=true;
event.players=game.filterPlayer(function(current){
return current!=target&¤t.inRange(target);
});
event.players.sortBySeat(target);
"step 1"
if(event.players.length){
event.current=event.players.shift();
event.current.animate('target');
player.line(event.current,'green');
if(event.current.countCards('he')&&target.isAlive()){
event.current.chooseToDiscard({subtype:'equip1'},'he','弃置一张武器牌或让'+
get.translation(target)+'摸一张牌').set('ai',function(card){
if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card);
return -1;
}).set('target',target);
event.tempbool=false;
}
else{
event.tempbool=true;
}
}
else{
event.finish();
}
"step 2"
if(event.tempbool||result.bool==false){
target.draw();
}
event.goto(1);
},
ai:{
order:5,
result:{
target:function(player,target){
if(player.hp>2){
if(game.phaseNumber0&&event.player.countCards('j')) return true;
if(event.num>1){
if(att<0) return false;
if(att>0) return true;
}
var cards=event.player.getGainableCards(player,'e');
for(var i=0;i=6) return true;
}
return false;
},
logTarget:'player',
content:function(){
if(trigger.player.countGainableCards(player,'ej')){
player.gainPlayerCard(trigger.player,'ej',true);
}
trigger.cancel();
}
},
sanyao:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target.isMaxHp();
},
check:function(card){return 7-get.value(card);},
position:'he',
filterCard:true,
content:function(){
target.damage('nocard');
},
ai:{
result:{
target:function(player,target){
if(target.countCards('j')&&get.attitude(player,target)>0){
return 1;
}
if(target.countCards('e')){
return -1;
}
return get.damageEffect(target,player);
},
},
order:7
}
},
rezhiman:{
audio:'zhiman',
audioname:['guansuo'],
trigger:{source:'damageBegin2'},
check:function(event,player){
if(get.damageEffect(event.player,player,player)<0) return true;
var att=get.attitude(player,event.player);
if(att>0&&event.player.countCards('j')) return true;
if(event.num>1){
if(att<0) return false;
if(att>0) return true;
}
var cards=event.player.getGainableCards(player,'he');
for(var i=0;i=6) return true;
}
return false;
},
logTarget:'player',
content:function(){
if(trigger.player.countGainableCards(player,'hej')){
player.gainPlayerCard(trigger.player,'hej',true);
}
trigger.cancel();
}
},
resanyao:{
audio:'sanyao',
enable:'phaseUse',
usable:1,
selectCard:function(){
var player=_status.event.player;
return [Math.max(1,ui.selected.targets.length),game.countPlayer(function(target){
return target!=player&&!game.hasPlayer(function(current){
return current!=player&¤t.hp>target.hp
});
})];
},
selectTarget:function(){
return ui.selected.cards.length;
},
filterTarget:function(card,player,target){
return target!=player&&!game.hasPlayer(function(current){
return current!=player&¤t.hp>target.hp
});
},
check:function(card){
var player=_status.event.player;
if(game.countPlayer(function(target){
return target!=player&&!game.hasPlayer(function(current){
return current!=player&¤t.hp>target.hp
})&&get.effect(target,'sanyao',player,player)>0;
})<=ui.selected.cards.length) return 0;
return 7-get.value(card);
},
position:'he',
filterCard:true,
content:function(){
target.damage('nocard');
},
ai:{
result:{
target:function(player,target){
var disbool=false;
if(player.hasSkill('rezhiman')){
if(target.countCards('j')&&get.attitude(player,target)>0){
return 1;
}
if(target.countCards('he',function(card){
return card.name=='tengjia'||get.value(card)>0;
})){
disbool=true;
}
}
var damage=get.damageEffect(target,player);
if(disbool&&get.attitude(player,target)<0) return Math.min(-1,damage);
return damage;
},
},
order:7
}
},
reqiaoshui:{
audio:'qiaoshui',
enable:'phaseUse',
filterTarget:function(card,player,target){
return player.canCompare(target);
},
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
'step 0'
player.chooseToCompare(target);
'step 1'
if(result.bool) player.addTempSkill('qiaoshui3','phaseUseEnd');
else{
player.addTempSkill('qiaoshui4');
event.getParent(3).skipped=true;
}
},
ai:{
order:10,
result:{
target:function (player,target){
if(player.hasSkill('qiaoshui3')) return 0;
var nd=!player.needsToDiscard();
if(player.hasCard(function(card){
if(get.position(card)!="h") return false;
var val=get.value(card)
if(nd&&val<0) return true;
if(val<=5){
return card.number>=12;
}
if(val<=6){
return card.number>=13;
}
return false;
})) return -1;
return 0;
},
},
},
},
qiaoshui:{
audio:2,
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('qiaoshui'),function(card,player,target){
return player.canCompare(target);
}).set('ai',function(target){
return -get.attitude(_status.event.player,target)/target.countCards('h');
});
"step 1"
if(result.bool){
player.logSkill('qiaoshui',result.targets[0]);
player.chooseToCompare(result.targets[0]);
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.addTempSkill('qiaoshui3');
}
else{
player.addTempSkill('qiaoshui2');
}
},
ai:{
expose:0.1
}
},
qiaoshui2:{
mod:{
cardEnabled:function(card){
if(get.type(card,'trick')=='trick') return false;
}
}
},
qiaoshui3:{
trigger:{player:'useCard2'},
direct:true,
filter:function(event,player){
var type=get.type(event.card);
return type=='basic'||type=='trick';
},
content:function(){
'step 0'
player.removeSkill('qiaoshui3');
var goon=false;
var info=get.info(trigger.card);
if(trigger.targets&&!info.multitarget){
var players=game.filterPlayer();
for(var i=0;i1){
event.goto(3);
}
}
'step 1'
if(result.bool){
if(!event.isMine()) game.delayx();
event.target=result.targets[0];
}
else{
event.finish();
}
'step 2'
if(event.target){
player.logSkill('qiaoshui',event.target);
trigger.targets.add(event.target);
}
event.finish();
'step 3'
player.chooseTarget('巧说:是否减少一名'+get.translation(trigger.card)+'的目标?',function(card,player,target){
return _status.event.targets.contains(target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
return -get.effect(target,trigger.card,trigger.player,_status.event.player);
}).set('targets',trigger.targets);
'step 4'
if(result.bool){
event.targets=result.targets;
if(event.isMine()){
player.logSkill('qiaoshui',event.targets);
event.finish();
}
for(var i=0;i1) return false;
return event.card&&get.type(event.card)=='trick'&&event.player!=player;
},
frequent:true,
content:function(){
player.draw();
},
ai:{
effect:function(card,player,target){
if(get.type(card)=='trick') return [1,1];
},
}
},
shenxing:{
audio:2,
enable:'phaseUse',
position:'he',
filterCard:true,
selectCard:2,
prompt:'弃置两张牌并摸一张牌',
check:function(card){return 4-get.useful(card)},
content:function(){
player.draw();
},
ai:{
order:1,
result:{
player:1
},
},
},
bingyi:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
filter:function(event,player){
return player.countCards('h')>0;
},
filterx:function(event,player){
var cards=player.getCards('h');
if(cards.length<1) return false;
var color=get.color(cards[0]);
for(var i=1;i=2) return false;
if(player.hp==1) return false;
if(player.hp==2&&player.countCards('h')<2) return false;
if(event.player.countCards('h')>=event.player.hp) return false;
return true;
},
content:function(){
"step 0"
player.draw(2);
"step 1"
player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){
if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1;
if(get.tag(card,'damage')) return 1;
if(get.type(card)=='equip') return 1;
return 0;
});
"step 2"
trigger.player.gain(result.cards,player,'giveAuto');
trigger.player.addSkill('xiantu4');
trigger.player.storage.xiantu4.push(player);
},
ai:{
threaten:1.1,
expose:0.3
}
},
xiantu1:{audio:true},
xiantu2:{audio:true},
xiantu4:{
trigger:{player:'phaseUseEnd'},
forced:true,
audio:false,
onremove:true,
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[];
},
charlotte:true,
content:function(){
while(player.storage.xiantu4.length){
var current=player.storage.xiantu4.shift();
if(current.isDead()) continue;
current.logSkill('xiantu2');
current.loseHp();
}
player.removeSkill('xiantu4');
},
group:'xiantu3'
},
xiantu3:{
trigger:{source:'dieAfter'},
forced:true,
audio:false,
content:function(){
player.removeSkill('xiantu4');
}
},
qiangzhi:{
audio:2,
trigger:{player:'phaseUseBegin'},
direct:true,
filterTarget:function(card,player,target){
return target!=player&&target.countCards('h')>0;
},
content:function(){
'step 0'
player.chooseTarget(get.prompt2('qiangzhi'),function(card,player,target){
return target!=player&&target.countCards('h')>0;
}).set('ai',function(){
return Math.random();
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('qiangzhi',target);
var card=target.getCards('h').randomGet();
player.showCards(card);
player.storage.qiangzhi=get.type(card,'trick');
game.addVideo('storage',player,['qiangzhi',player.storage.qiangzhi]);
player.markSkill('qiangzhi');
}
},
intro:{
content:function(type){
return get.translation(type)+'牌';
}
},
group:['qiangzhi2','qiangzhi3'],
ai:{
order:11,
result:{
player:1
}
}
},
qiangzhi2:{
trigger:{player:'useCard'},
frequent:true,
filter:function(event,player){
// return (get.type(event.card,'trick')==player.storage.qiangzhi&&event.cards[0]&&event.cards[0]==event.card);
return get.type(event.card,'trick')==player.storage.qiangzhi;
},
content:function(){
player.draw();
},
ai:{
threaten:1.4
}
},
qiangzhi3:{
trigger:{player:'phaseUseEnd'},
silent:true,
content:function(){
delete player.storage.qiangzhi;
player.unmarkSkill('qiangzhi');
}
},
dingpin:{
group:['dingpin3','dingpin4'],
enable:'phaseUse',
//usable:3,
audio:2,
filter:function(event,player){
return player.countCards('h')>0;
},
filterTarget:function(card,player,target){
return target.hp0;
},
logTarget:'player',
content:function(){
trigger.player.draw();
},
ai:{
expose:0.2
}
},
jiaojin:{
audio:2,
trigger:{player:'damageBegin3'},
filter:function(event,player){
return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male';
},
direct:true,
content:function(){
"step 0"
var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令伤害-1?',function(card,player){
return get.type(card)=='equip';
});
next.set('ai',function(card){
var player=_status.event.player;
if(player.hp==1||_status.event.getTrigger().num>1){
return 9-get.value(card);
}
if(player.hp==2){
return 8-get.value(card);
}
return 7-get.value(card);
});
next.logSkill='jiaojin';
"step 1"
if(result.bool){
game.delay(0.5);
trigger.num--;
}
}
},
chanhui:{
audio:2,
trigger:{player:'useCardToPlayer'},
filter:function(event,player){
if(_status.currentPhase!=player) return false;
if(player.hasSkill('chanhui2')) return false;
if(event.targets.length>1) return false;
var card=event.card;
if(card.name=='sha') return true;
if(get.color(card)=='black'&&get.type(card)=='trick') return true;
return false;
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt2('chanhui'),function(card,player,target){
if(player==target) return false;
var trigger=_status.event;
return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false;
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,player,player)+0.01;
}).set('targets',trigger.targets).set('card',trigger.card);
"step 1"
if(result.bool){
game.delay(0,200);
event.target=result.targets[0];
}
else{
event.finish();
}
"step 2"
game.delay();
player.addSkill('chanhui2');
player.logSkill('chanhui',event.target);
event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+
get.translation(trigger.card)+'的额外目标').set('ai',function(card){
return 5-get.value(card);
});
"step 3"
if(result.bool){
player.gain(result.cards,event.target,'giveAuto');
trigger.untrigger();
trigger.getParent().player=event.target;
game.log(event.target,'成为了',trigger.card,'的使用者');
}
else{
game.log(event.target,'成为了',trigger.card,'的额外目标');
trigger.getParent().targets.push(event.target);
}
}
},
rechanhui:{
audio:'chanhui',
trigger:{player:'useCardToPlayer'},
filter:function(event,player){
if(_status.currentPhase!=player||player.hasSkill('rechanhui2')) return false;
if(event.targets.length>1) return false;
var card=event.card;
if(card.name=='sha'||get.type(card)=='trick'&&get.color(card)=='black') return true;
return false;
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt2('rechanhui'),function(card,player,target){
if(player==target) return false;
var trigger=_status.event;
return player.canUse(trigger.card,target,false)&&trigger.targets.contains(target)==false;
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,player,player)+0.01;
}).set('targets',trigger.targets).set('card',trigger.card);
"step 1"
if(result.bool){
//game.delay(0,200);
event.target=result.targets[0];
}
else{
event.finish();
}
"step 2"
player.logSkill('rechanhui',event.target);
event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+
get.translation(trigger.card)+'的额外目标').set('ai',function(card){
return 5-get.value(card);
});
"step 3"
if(result.bool){
player.gain(result.cards,event.target,'giveAuto');
trigger.untrigger();
trigger.getParent().player=event.target;
game.log(event.target,'成为了',trigger.card,'的使用者');
}
else{
game.log(event.target,'成为了',trigger.card,'的额外目标');
trigger.getParent().targets.push(event.target);
player.addTempSkill('rechanhui2');
}
}
},
rechanhui2:{},
rejiaojin:{
audio:'jiaojin',
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.player&&event.player.sex=='male'&&player.countCards('he',function(card){
return _status.connectMode||get.type(card)=='equip';
});
},
direct:true,
content:function(){
"step 0"
var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令'+get.translation(trigger.card)+'对你无效?',function(card,player){
return get.type(card)=='equip';
});
next.set('ai',function(card){
if(_status.event.goon2){
return 3+_status.event.val-get.value(card);
}
return 0;
});
next.set('val',get.value(trigger.cards.filterInD()));
next.set('goon2',get.effect(player,trigger.card,trigger.player,player)<0)
next.logSkill='rejiaojin';
"step 1"
if(result.bool){
var cards=trigger.cards.filterInD();
if(cards.length) player.gain(cards,'gain2','log');
trigger.excluded.push(player);
}
}
},
chanhui2:{
trigger:{player:'phaseJieshuBegin'},
forced:true,
popup:false,
audio:false,
content:function(){
player.removeSkill('chanhui2');
}
},
quanji:{
audio:2,
trigger:{player:'damageEnd'},
frequent:true,
locked:false,
notemp:true,
init:function(player){
if(!player.storage.quanji) player.storage.quanji=[];
},
filter:function(event){
return event.num>0;
},
content:function(){
"step 0"
event.count=trigger.num;
"step 1"
event.count--;
player.draw();
"step 2"
if(player.countCards('he')){
player.chooseCard('将一张手牌置于武将牌上作为“权”',true);
}
else{
event.goto(4);
}
"step 3"
if(result.cards&&result.cards.length){
player.lose(result.cards,ui.special,'toStorage');
player.storage.quanji=player.storage.quanji.concat(result.cards);
player.syncStorage('quanji');
player.markSkill('quanji');
game.log(player,'将',result.cards,'置于武将牌上作为“权”');
}
"step 4"
if(event.count>0){
player.chooseBool(get.prompt2('quanji')).set('frequentSkill','quanji');
}
else event.finish();
"step 5"
if(result.bool){
player.logSkill('quanji');
event.goto(1);
}
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
},
mod:{
maxHandcard:function(player,num){
return num+player.storage.quanji.length;
}
},
ai:{
maixie:true,
maixie_hp:true,
threaten:0.8,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
if(target.hp>=4) return [0.5,get.tag(card,'damage')*2];
if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5];
if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5];
if(target.hp==2) return [1,get.tag(card,'damage')*0.5];
}
}
}
}
},
zili:{
skillAnimation:true,
animationColor:'thunder',
audio:2,
audioname:['re_zhonghui'],
unique:true,
juexingji:true,
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
return !player.hasSkill('paiyi')&&player.storage.quanji&&player.storage.quanji.length>=3;
},
content:function(){
"step 0"
player.chooseDrawRecover(2,true,function(event,player){
if(player.hp==1&&player.isDamaged()) return 'recover_hp';
return 'draw_card';
});
"step 1"
player.loseMaxHp();
player.addSkill('paiyi');
player.awakenSkill('zili');
}
},
paiyi:{
enable:'phaseUse',
usable:1,
audio:2,
audioname:['re_zhonghui'],
filter:function(event,player){
return player.storage.quanji&&player.storage.quanji.length>0;
},
chooseButton:{
dialog:function(event,player){
return ui.create.dialog('排异',player.storage.quanji,'hidden')
},
backup:function(links,player){
return {
audio:'paiyi',
audioname:['re_zhonghui'],
filterTarget:true,
filterCard:function(){return false},
selectCard:-1,
card:links[0],
delay:false,
content:lib.skill.paiyi.contentx,
ai:{
order:10,
result:{
target:function(player,target){
if(player!=target) return 0;
if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.storage.quanji.length)) return 1;
return 0;
}
},
},
}
},
prompt:function(){return '请选择〖排异〗的目标'},
},
contentx:function(){
"step 0"
var card=lib.skill.paiyi_backup.card;
game.cardsDiscard(card);
player.$throw(card);
player.storage.quanji.remove(card);
game.log(card,'进入了弃牌堆');
if(!player.storage.quanji.length){
player.unmarkSkill('quanji');
}
else{
player.markSkill('quanji');
}
player.syncStorage('quanji');
game.delayx();
"step 1"
target.draw(2);
"step 2"
if(target.countCards('h')>player.countCards('h')){
target.damage();
}
},
ai:{
order:1,
result:{
player:1,
}
}
},
xianzhou:{
skillAnimation:true,
animationColor:'gray',
audio:2,
unique:true,
limited:true,
enable:'phaseUse',
filter:function(event,player){
return !player.storage.xianzhou&&player.countCards('e')>0;
},
init:function(player){
player.storage.xianzhou=false;
},
filterTarget:function(card,player,target){
return player!=target;
},
mark:true,
content:function(){
"step 0"
player.awakenSkill('xianzhou');
var cards=player.getCards('e');
target.gain(cards,player,'give');
event.num=cards.length;
player.storage.xianzhou=true;
game.delay();
"step 1"
target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+
event.num+'点体力,或对攻击范围内的'+event.num+'名角色造成一点伤害',function(card,player,target2){
return _status.event.player.inRange(target2);
}).set('ai',function(target2){
var target=_status.event.player;
var player=_status.event.getParent().player;
if(get.attitude(target,player)>0){
if(player.hp+event.num<=player.maxHp||player.hp==1) return -1;
}
return get.damageEffect(target2,target,target);
});
"step 2"
if(result.bool){
target.line(result.targets,'green');
event.targets=result.targets;
event.num2=0;
}
else{
player.recover(event.num);
event.finish();
}
"step 3"
if(event.num22&&get.attitude(players[i],player)>2){
bool=false;break;
}
}
if(bool) return -10;
if(player.hp==1) return 1;
if(game.phaseNumber0){
return '移动装备';
}
}
else{
if(att<=0){
return '移动装备';
}
}
return 'draw_card';
}).set('sourcex',trigger.player);
}
else{
next=player.chooseControl('draw_card','cancel2',function(){
return 'draw_card';
});
}
next.set('prompt',get.prompt('qieting',trigger.player));
"step 1"
if(result.control=='移动装备'){
player.logSkill('qieting',trigger.player);
player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){
return _status.event.player.isEmpty(get.subtype(button.link));
});
}
else{
if(result.control=='draw_card'){
player.logSkill('qieting');
player.draw();
}
event.finish();
}
"step 2"
if(result&&result.links&&result.links.length){
game.delay(2);
trigger.player.$give(result.links[0],player,false);
player.equip(result.links[0]);
player.addExpose(0.2);
}
},
},
oldzhuikong:{
audio:'zhuikong',
inherit:'zhuikong',
},
zhuikong:{
audio:2,
trigger:{global:'phaseZhunbeiBegin'},
check:function(event,player){
if(get.attitude(player,event.player)<-2){
var cards=player.getCards('h');
if(cards.length>player.hp) return true;
for(var i=0;i9&&useful<7) return true;
}
}
return false;
},
logTarget:'player',
filter:function(event,player){
return player.hp=0?1:-1;
}).set('sourcex',player);
game.delay();
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.gain(result.cards,event.target,'giveAuto');
game.delay();
}
else{
trigger.getParent().targets.push(event.target);
trigger.getParent().triggeredTargets2.push(event.target);
game.log(event.target,'成为了额外目标');
}
},
ai:{
expose:0.2,
effect:{
target:function(card,player,target){
if(card.name!='sha') return;
var players=game.filterPlayer();
if(get.attitude(player,target)<=0){
for(var i=0;i0&&
get.effect(target2,{name:'shacopy',nature:card.nature,suit:card.suit},player,player)<0){
if(target.hp==target.maxHp) return 0.3;
return 0.6;
}
}
}
else{
for(var i=0;i0){
if(player.canUse(card,target2)) return;
if(target.hp==target.maxHp) return [0,1];
return [0,0];
}
}
}
}
}
}
},
gongji:{
enable:'phaseUse',
usable:1,
audio:2,
position:'he',
filterCard:true,
check:function(card){
if(get.type(card)!='equip') return 0;
var player=_status.currentPhase;
if(player.countCards('he',{subtype:get.subtype(card)})>1){
return 11-get.equipValue(card);
}
return 6-get.equipValue(card);
},
content:function(){
"step 0"
player.addTempSkill('gongji2');
"step 1"
if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){
player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){
return player!=target&&target.countCards('he')>0;
}).set('ai',function(target){
var player=_status.event.player;
if(get.attitude(player,target)<0){
return Math.max(0.5,get.effect(target,{name:'sha'},player,player));
}
return 0;
});
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.line(result.targets,'green');
event.target=result.targets[0];
player.discardPlayerCard(event.target,'he',true).ai=get.buttonValue;
}
},
ai:{
order:9,
result:{
player:1
}
}
},
gongji2:{
mod:{
attackFrom:function(){
return -Infinity;
},
},
},
zhuiyi:{
audio:2,
trigger:{player:'die'},
direct:true,
skillAnimation:true,
animationColor:'wood',
forceDie:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt2('zhuiyi'),function(card,player,target){
return player!=target&&_status.event.sourcex!=target;
}).set('forceDie',true).set('ai',function(target){
var num=get.attitude(_status.event.player,target);
if(num>0){
if(target.hp==1){
num+=2;
}
if(target.hpplayers[i].countCards('h')) return true;
}
return false;
},
selectTarget:2,
content:function(){
'step 0'
var gainner,giver;
if(targets[0].countCards('h')0) return -1;
var players=game.filterPlayer();
for(var i=0;i0) return -3;
return -1;
}
}
return 0;
}
else{
return 1;
}
},
player:1,
}
}
},
anxu:{
enable:'phaseUse',
usable:1,
multitarget:true,
audio:2,
filterTarget:function(card,player,target){
if(player==target) return false;
var num=target.countCards('h');
if(ui.selected.targets.length){
return numplayers[i].countCards('h')) return true;
}
return false;
},
selectTarget:2,
content:function(){
'step 0'
var gainner,giver;
if(targets[0].countCards('h')0) return -1;
var players=game.filterPlayer();
for(var i=0;i=0&&num20||player.countCards('he',{type:'equip'})>0;
},
check:function(card){return 8-get.value(card)},
selectTarget:2,
multitarget:true,
discard:false,
lose:false,
targetprompt:['得到牌','出杀目标'],
filterTarget:function(card,player,target){
if(ui.selected.targets.length==0){
return player!=target;
}
else{
return ui.selected.targets[0].inRange(target);
}
},
delay:false,
content:function(){
"step 0"
targets[0].gain(cards,player,'give');
"step 1"
if(!lib.filter.filterTarget({name:'sha',isCard:true},targets[0],targets[1])) event._result={control:'draw_card'};
else targets[0].chooseControl('draw_card','出杀',function(){
var player=_status.event.player;
var target=_status.event.target;
if(get.effect(_status.event.target,{name:'sha'},player,player)>0){
return 1;
}
return 0;
}).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌');
"step 2"
if(result.control=='draw_card'){
targets[0].draw();
}
else{
targets[0].useCard({name:'sha',isCard:true},targets[1]);
}
},
ai:{
result:{
player:function(player){
var players=game.filterPlayer();
for(var i=0;i1&&get.attitude(players[i],player)>1){
return 1;
}
}
return 0;
},
target:function(player,target){
if(ui.selected.targets.length){
return -0.1;
}
return 1;
}
},
order:8.5,
expose:0.2
}
},
xinxuanhuo:{
audio:2,
trigger:{player:'phaseDrawBegin1'},
direct:true,
filter:function(event,player){
return !event.numFixed;
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('xinxuanhuo'),function(card,player,target){
return player!=target;
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>0){
if(target.countCards('h')1&&check<2) return 0;
return get.unuseful(card)+9;
},
ai2:function(target){
var att=get.attitude(_status.event.player,target);
if(ui.selected.cards.length==1&&ui.selected.cards[0].name=='du') return 1-att;
return att-2;
},
prompt:'将'+get.cnNumber(event.num)+'张手牌交给一名其他角色',
}).set('check',check);
"step 2"
if(result.bool){
result.targets[0].gain(result.cards,event.player,'giveAuto');
player.line(result.targets,'green');
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 3;
if(target.hp==2) return 1.5;
return 0.5;
},
effect:{
target:function(card,player,target){
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
zhenlie:{
audio:2,
filter:function(event,player){
return event.player!=player&&event.card&&(event.card.name=='sha'||get.type(event.card)=='trick');
},
logTarget:'player',
check:function(event,player){
if(event.getParent().excluded.contains(player)) return false;
if(get.attitude(player,event.player)>0){
return false;
}
if(get.tag(event.card,'respondSha')){
if(player.countCards('h',{name:'sha'})==0){
return true;
}
}
else if(get.tag(event.card,'respondShan')){
if(player.countCards('h',{name:'shan'})==0){
return true;
}
}
else if(get.tag(event.card,'damage')){
if(player.countCards('h')<2) return true;
}
else if(event.card.name=='shunshou'&&player.hp>2){
return true;
}
return false;
},
trigger:{target:'useCardToTargeted'},
content:function(){
"step 0"
player.loseHp();
"step 1"
trigger.getParent().excluded.add(player);
"step 2"
if(trigger.player.countCards('he')){
player.discardPlayerCard(trigger.player,'he',true);
}
},
ai:{
expose:0.3
}
},
wuyan:{
audio:2,
trigger:{target:'useCardToBefore',player:'useCardToBefore'},
forced:true,
priority:15,
check:function(event,player){
return get.effect(event.target,event.card,event.player,player)<0;
},
filter:function(event,player){
if(!event.target) return false;
if(event.player==player&&event.target==player) return false;
return (get.type(event.card)=='trick');
},
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget';
},
player:function(card,player,target,current){
if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget';
}
}
}
},
xinwuyan:{
audio:2,
trigger:{source:'damageBegin2',player:'damageBegin4'},
forced:true,
//priority:15,
check:function(event,player){
if(player==event.player) return true;
return false;
},
filter:function(event,player){
return get.type(event.card,'trick')=='trick';
},
content:function(){
trigger.cancel();
},
ai:{
notrick:true,
notricksource:true,
effect:{
target:function(card,player,target,current){
if(get.type(card)=='trick'&&get.tag(card,'damage')){
return 'zeroplayertarget';
}
},
player:function(card,player,target,current){
if(get.type(card)=='trick'&&get.tag(card,'damage')){
return 'zeroplayertarget';
}
}
}
}
},
xinjujian:{
trigger:{player:'phaseJieshuBegin'},
direct:true,
audio:2,
filter:function(event,player){
return player.countCards('he')>player.countCards('he',{type:'basic'});
},
content:function(){
"step 0"
player.chooseCardTarget({
filterTarget:function(card,player,target){
return player!=target;
},
filterCard:function(card,player){
return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player);
},
ai1:function(card){
if(get.tag(card,'damage')&&get.type(card)=='trick'){
return 20;
}
return 9-get.value(card);
},
ai2:function(target){
var att=get.attitude(_status.event.player,target);
if(att>0){
if(target.isTurnedOver()) att+=3;
if(target.hp==1) att+=3;
}
return att;
},
position:'he',
prompt:get.prompt2('xinjujian')
});
"step 1"
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('xinjujian',target);
player.discard(result.cards);
if(target.hp==target.maxHp&&
!target.isTurnedOver()&&
!target.isLinked()){
target.draw(2);
event.finish();
}
else{
var controls=['draw_card'];
if(target.hp2){
return 'recover_hp';
}
else if(target.hp==2&&target.maxHp>2&&target.countCards('h')>1){
return 'recover_hp';
}
else{
return 'draw_card';
}
}
}
}
else{
event.finish();
}
"step 2"
event.control=result.control;
switch(event.control){
case 'recover_hp':event.target.recover();event.finish();break;
case 'draw_card':event.target.draw(2);event.finish();break;
case 'reset_character':if(event.target.isTurnedOver()) event.target.turnOver();break;
}
"step 3"
if(event.control=='reset_character'&&event.target.isLinked()){
event.target.link();
}
},
ai:{
expose:0.2,
threaten:1.4
}
},
jujian:{
enable:'phaseUse',
usable:1,
audio:2,
filterCard:true,
position:'he',
selectCard:[1,3],
check:function(card){
var player=get.owner(card);
if(get.type(card)=='trick') return 10;
if(player.countCards('h')-player.hp-ui.selected.cards.length>0){
return 8-get.value(card);
}
return 4-get.value(card);
},
filterTarget:function(card,player,target){
return player!=target;
},
content:function(){
target.draw(cards.length);
if(cards.length==3){
if(get.type(cards[0],'trick')==get.type(cards[1],'trick')&&
get.type(cards[0],'trick')==get.type(cards[2],'trick')){
player.recover();
}
}
},
ai:{
expose:0.2,
order:1,
result:{
target:1
}
}
},
yizhong:{
trigger:{target:'shaBefore'},
forced:true,
audio:2,
filter:function(event,player){
if(player.getEquip(2)) return false;
return (event.card.name=='sha'&&get.color(event.card)=='black')
},
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target){
if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=8) return 0;
}
if(target.getEquip(2)) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
}
}
}
},
jueqing:{
trigger:{source:'damageBefore'},
forced:true,
audio:2,
//priority:16,
check:function(){return false;},
content:function(){
trigger.cancel();
trigger.player.loseHp(trigger.num);
},
ai:{
jueqing:true
}
},
shangshi:{
audio:2,
trigger:{player:['loseAfter','changeHp']},
frequent:true,
filter:function(event,player){
return player.countCards('h')0) return 0;
if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0;
if(!player.countCards('h','sha')) return 0;
var targets=[];
var target;
var players=game.filterPlayer();
for(var i=0;inum){
target=targets[i];
num=num2;
}
}
if(num<=0) return 0;
var e2=target.getEquip(2);
if(e2){
if(e2.name=='tengjia'){
if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0;
}
if(e2.name=='renwang'){
if(!player.countCards('h',{name:'sha',color:'red'})) return 0;
}
if(e2.name=='baiyin') return 0;
}
if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1;
return target.countCards('h')>3?0:1;
}
if(player==_status.event.dying||player.isTurnedOver()) return 3;
}
},
effect:{
target:function(card,player,target){
if(card.name=='guiyoujie') return [0,0.5];
if(target.isTurnedOver()){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(target.hp==1) return;
return [1,target.countCards('h')/2];
}
}
}
}
},
},
jiushi2:{
trigger:{player:'damageBegin3'},
silent:true,
firstDo:true,
filter:function(event,player){
return player.classList.contains('turnedover');
},
content:function(){
trigger.jiushi=true;
}
},
jiushi3:{
audio:'jiushi1',
trigger:{player:'damageEnd'},
check:function(event,player){
return player.isTurnedOver();
},
prompt:'是否发动【酒诗】,将武将牌翻面?',
filter:function(event,player){
if(event.jiushi){
return true;
}
return false;
},
content:function(){
delete trigger.jiushi;
player.turnOver();
}
},
zongshi:{
audio:2,
mod:{
maxHandcard:function(player,num){
return num+game.countGroup();
}
}
},
zishou:{
audio:2,
trigger:{player:'phaseDrawBegin2'},
check:function(event,player){
return player.countCards('h')<=player.maxHp||player.skipList.contains('phaseUse');
},
filter:function(event,player){
return !event.numFixed;
},
content:function(){
trigger.num+=game.countGroup();
player.addTempSkill('zishou2');
},
ai:{
threaten:1.5
}
},
zishou2:{
mod:{
playerEnabled:function(card,player,target){
if(player!=target) return false;
}
}
},
olddanshou:{
trigger:{source:'damageSource'},
//priority:9,
check:function(event,player){
return get.attitude(player,event.player)<=0;
},
content:function(){
"step 0"
player.draw();
"step 1"
var evt=_status.event.getParent('phase');
if(evt){
game.resetSkills();
_status.event=evt;
_status.event.finish();
_status.event.untrigger(true);
}
},
ai:{
jueqing:true
}
},
danshou:{
enable:'phaseUse',
filterCard:true,
position:'he',
audio:2,
filter:function(event,player){
var num=player.getStat().skill.danshou;
if(num){
num++;
}
else{
num=1;
}
return player.countCards('he')>=num;
},
check:function(card){
if(ui.selected.cards.length>=2){
return 4-get.value(card);
}
return 6-get.value(card);
},
selectCard:function(card){
var num=_status.event.player.getStat().skill.danshou;
if(num) return num+1;
return 1;
},
filterTarget:function(card,player,target){
if(player==target) return false;
var num=player.getStat().skill.danshou;
if(num){
num++;
}
else{
num=1;
}
if(num<=2&&!target.countCards('he')) return false;
return player.inRange(target);
},
content:function(){
'step 0'
var num=player.getStat().skill.danshou;
switch(num){
case 1:player.discardPlayerCard(target,true);break;
case 2:target.chooseCard('选择一张牌交给'+get.translation(player),'he',true);break;
case 3:target.damage('nocard');break;
default:game.asyncDraw([player,target],2);
}
if(num!=2) event.finish();
'step 1'
if(result.cards){
player.gain(result.cards,target,'giveAuto');
}
},
ai:{
order:8.6,
result:{
target:function(player,target){
var num=player.getStat().skill.danshou;
if(num){
num++;
}
else{
num=1;
}
if(num>3) return 0;
if(num==3) return get.damageEffect(target,player,target);
return -1;
}
}
}
},
qice:{
enable:'phaseUse',
usable:1,
audio:'qice_backup',
filter:function(event,player){
var hs=player.getCards('h');
if(!hs.length) return false;
for(var i=0;i0&&!players[i].hasSha()){
return (button.link[2]=='juedou')?2:-1;
}
if(!players[i].isOut()){
if(players[i].hp0){
if(players[i].hp<2){
lose--;
recover+=0.5;
}
lose--;
recover++;
}
else if(get.attitude(player,players[i])<0){
if(players[i].hp<2){
lose++;
recover-=0.5;
}
lose++;
recover--;
}
}
else{
if(get.attitude(player,players[i])>0){
lose--;
}
else if(get.attitude(player,players[i])<0){
lose++;
}
}
}
}
if(lose>recover&&lose>0) return (button.link[2]=='nanman')?1:-1;
if(lose0) return (button.link[2]=='taoyuan')?1:-1;
return (button.link[2]=='wuzhong')?1:-1;
},
backup:function(links,player){
return {
filterCard:true,
selectCard:-1,
audio:2,
popname:true,
viewAs:{name:links[0][2]},
}
},
prompt:function(links,player){
return '将全部手牌当作'+get.translation(links[0][2])+'使用';
}
},
ai:{
order:1,
result:{
player:function(player){
var num=0;
var cards=player.getCards('h');
if(cards.length>=3&&player.hp>=3) return 0;
for(var i=0;i1;
}
else return event.es&&event.es.length>0;
},
content:function(){
"step 0"
event.count=2;
event.logged=false;
"step 1"
player.chooseTarget(get.prompt('xuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){
if(player==target) return false;
return target.countDiscardableCards(player,'he');
}).set('ai',function(target){
return -get.attitude(_status.event.player,target);
});
"step 2"
if(result.bool){
if(!event.logged){
player.logSkill('xuanfeng',result.targets);
event.logged=true;
}
else player.line(result.targets[0],'green');
player.discardPlayerCard(result.targets[0],'he',true);
event.count--;
}
else event.finish();
"step 3"
if(event.count) event.goto(1);
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3];
}
},
reverseEquip:true,
noe:true
}
},
jiangchi:{
audio:2,
trigger:{player:'phaseDrawBegin2'},
direct:true,
filter:function(event,player){
return !event.numFixed;
},
content:function(){
"step 0"
player.chooseControl('jiangchi_less','jiangchi_more','cancel2',function(){
var player=_status.event.player;
if(player.countCards('h')>3&&player.countCards('h','sha')>1){
return 'jiangchi_less';
}
if(player.countCards('h','sha')>2){
return 'jiangchi_less';
}
if(player.hp-player.countCards('h')>1){
return 'jiangchi_more';
}
return 'cancel2';
});
"step 1"
if(result.control=='jiangchi_less'){
trigger.num--;
player.addTempSkill('jiangchi2','phaseUseEnd');
player.logSkill('jiangchi');
}
else if(result.control=='jiangchi_more'){
trigger.num++;
player.addTempSkill('jiangchi3','phaseUseEnd');
player.logSkill('jiangchi');
}
}
},
jiangchi2:{
mod:{
targetInRange:function(card,player,target,now){
if(card.name=='sha') return true;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+1;
}
}
},
jiangchi3:{
mod:{
cardEnabled:function(card){if(card.name=='sha') return false}
}
},
xinzhan:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
return true;//player.countCards('h')>player.maxHp;
},
usable:1,
content:function(){
"step 0"
var cards=get.cards(3);
event.cards=cards;
var next=player.chooseCardButton(cards,'选择获得的红桃牌',[1,Infinity]).set('filterButton',function(button){
return get.suit(button.link)=='heart';
});
"step 1"
if(result.bool){
player.gain(result.links);
player.$draw(result.links);
game.delay(2);
}
for(var i=event.cards.length-1;i>=0;i--){
if(!result.bool||!result.links.contains(event.cards[i])){
ui.cardPile.insertBefore(event.cards[i],ui.cardPile.firstChild);
}
}
},
ai:{
order:11,
result:{
player:1
}
}
},
huilei:{
audio:2,
trigger:{player:'die'},
forced:true,
forceDie:true,
filter:function(event){
return event.source!=undefined;
},
logTarget:'source',
skillAnimation:true,
animationColor:'thunder',
content:function(){
trigger.source.discard(trigger.source.getCards('he'));
},
ai:{
threaten:0.7
}
},
xinenyuan:{
audio:true,
trigger:{player:'damageEnd'},
check:function(event,player){
var att=get.attitude(player,event.source);
var num=event.source.countCards('h');
if(att<=0) return true;
if(num>2) return true;
if(num) return att<4;
return false;
},
filter:function(event,player){
return event.source&&event.source!=player&&event.num>0&&event.source.isAlive();
},
content:function(){
"step 0"
event.num=trigger.num;
"step 1"
trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌或流失一点体力').set('ai',function(card){
if(get.attitude(_status.event.player,_status.event.getParent().player)>0){
return 11-get.value(card);
}
else{
return 7-get.value(card);
}
});
"step 2"
if(result.bool){
player.gain(result.cards,trigger.source,'giveAuto');
}
else{
trigger.source.loseHp();
}
if(event.num>1){
event.num--;
event.goto(1);
}
},
ai:{
maixie_defend:true,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5];
if(!target.hasFriend()) return;
if(get.tag(card,'damage')) return [1,0,0,-0.7];
}
}
},
group:'xinenyuan2'
},
xinenyuan2:{
audio:true,
trigger:{player:'gainEnd'},
filter:function(event,player){
return event.source&&event.source.isAlive()&&event.source!=player&&event.cards.length>=2;
},
logTarget:'source',
check:function(event,player){
return get.attitude(player,event.source)>0;
},
content:function(){
trigger.source.draw();
}
},
enyuan:{
audio:'enyuan1',
locked:true,
group:['enyuan1','enyuan2'],
ai:{
maixie_defend:true,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
if(get.tag(card,'damage')) return [1,0,0,-1];
}
}
}
},
enyuan1:{
trigger:{player:'recoverEnd'},
forced:true,
audio:2,
filter:function(event,player){
return event.source&&event.source!=player;
},
content:function(){
trigger.source.draw();
}
},
enyuan2:{
trigger:{player:'damageEnd'},
forced:true,
audio:2,
filter:function(event,player){
return event.source&&event.source!=player;
},
content:function(){
"step 0"
trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){
return get.suit(card)=='heart';
}).set('ai',function(card){
if(get.attitude(_status.event.player,_status.event.getParent().player)>0){
return 11-get.value(card);
}
else{
return 7-get.value(card);
}
});
"step 1"
if(result.bool){
player.gain(result.cards,'giveAuto',trigger.source);
}
else{
trigger.source.loseHp();
}
}
},
xuanhuo:{
audio:2,
enable:'phaseUse',
usable:1,
discard:false,
lose:false,
delay:0,
filter:function(event,player){
return player.countCards('he',{suit:'heart'});
},
filterCard:function(card){
return get.suit(card)=='heart';
},
filterTarget:function(card,player,target){
if(game.countPlayer()==2) return false;
return player!=target;
},
check:function(card){
var player=get.owner(card);
var players=game.filterPlayer();
for(var i=0;i3) break;
}
if(i==players.length) return -1;
return 5-get.value(card);
},
content:function(){
"step 0"
target.gain(cards,player,'give');
// game.delay();
"step 1"
player.gainPlayerCard(target,'he',true);
"step 2"
var source=target;
event.card=result.links[0];
player.chooseTarget('选择一个目标送出'+get.translation(event.card),function(card,player,target){
return target!=_status.event.sourcex&&target!=player;
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
}).set('sourcex',target);
"step 3"
if(result.bool){
result.targets[0].gain(card,player,'give');
game.delay();
}
},
ai:{
result:{
target:-0.5,
},
basic:{
order:9,
}
}
},
ganlu:{
enable:'phaseUse',
usable:1,
audio:2,
selectTarget:2,
filterTarget:function(card,player,target){
if(target.isMin()) return false;
if(ui.selected.targets.length==0) return true;
if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false;
return Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp;
},
multitarget:true,
content:function(){
targets[0].swapEquip(targets[1]);
},
ai:{
order:10,
threaten:function(player,target){
return 0.8*Math.max(1+target.maxHp-target.hp);
},
result:{
target:function(player,target){
var list1=[];
var list2=[];
var num=player.maxHp-player.hp;
var players=game.filterPlayer();
for(var i=0;i0) list1.push(players[i]);
else if(get.attitude(player,players[i])<0) list2.push(players[i]);
}
list1.sort(function(a,b){
return a.countCards('e')-b.countCards('e');
});
list2.sort(function(a,b){
return b.countCards('e')-a.countCards('e');
});
var delta;
for(var i=0;i0;
},
direct:true,
content:function(){
"step 0"
var check;
if(trigger.player.isUnderControl(true,player)){
check=player.hasCard(function(card){
return get.type(card)!='basic';
});
}
else{
check=(get.attitude(player,trigger.player)>0);
}
player.choosePlayerCard(trigger.player,get.prompt('buyi',trigger.player),'h').set('ai',function(button){
if(!_status.event.check) return 0;
if(_status.event.target.isUnderControl(true,_status.event.player)){
if(get.type(button.link)!='basic'){
return 10-get.value(button.link);
}
return 0;
}
else{
return Math.random();
}
}).set('check',check).set('filterButton',function(button){
if(_status.event.player==_status.event.target){
return lib.filter.cardDiscardable(button.link,_status.event.player);
}
return true;
});
"step 1"
if(result.bool){
player.logSkill('buyi',trigger.player);
event.card=result.links[0];
player.showCards([event.card],get.translation(player)+'展示的手牌');
}
else{
event.finish();
}
"step 2"
if(get.type(event.card)!='basic'){
trigger.player.recover();
trigger.player.discard(event.card);
}
},
ai:{
threaten:1.4
}
},
pojun:{
audio:2,
trigger:{source:'damageSource'},
check:function(event,player){
if(event.player.isTurnedOver()) return get.attitude(player,event.player)>0;
if(event.player.hp<3){
return get.attitude(player,event.player)<0;
}
return get.attitude(player,event.player)>0;
},
filter:function(event){
if(event._notrigger.contains(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.player.isAlive();
},
logTarget:'player',
content:function(){
"step 0"
trigger.player.draw(Math.min(5,trigger.player.hp));
"step 1"
trigger.player.turnOver();
}
},
jingce:{
trigger:{player:'phaseUseEnd'},
frequent:true,
filter:function(event,player){
return player.countUsed(null,true)>=player.hp;
},
content:function(){
player.draw(2);
},
audio:2,
},
xinjingce:{
trigger:{player:'phaseJieshuBegin'},
frequent:true,
filter:function(event,player){
return player.countUsed(null,true)>=player.hp;
},
content:function(){
player.draw(2);
},
audio:'jingce',
},
oldchengxiang:{
audio:'chengxiang',
inherit:'chengxiang',
},
chengxiang:{
trigger:{player:'damageEnd'},
//direct:true,
frequent:true,
audio:2,
content:function(){
"step 0"
event.cards=get.cards(4);
event.videoId=lib.status.videoId++;
game.broadcastAll(function(player,id,cards){
var str;
if(player==game.me&&!_status.auto){
str='称象:选择任意张点数不大于1'+(event.name=='chengxiang'?3:2)+'的牌';
}
else{
str='称象';
}
var dialog=ui.create.dialog(str,cards);
dialog.videoId=id;
},player,event.videoId,event.cards);
event.time=get.utc();
game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]);
game.addVideo('delay',null,2);
"step 1"
var next=player.chooseButton([0,4]);
next.set('dialog',event.videoId);
next.set('filterButton',function(button){
var num=0
for(var i=0;i0){
game.delay(0,time);
}
"step 3"
game.broadcastAll('closeDialog',event.videoId);
var cards2=event.cards2;
player.gain(cards2,'log','gain2');
},
ai:{
maixie:true,
maixie_hp:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
if(target.hp>=4) return [1,2];
if(target.hp==3) return [1,1.5];
if(target.hp==2) return [1,0.5];
}
}
}
}
},
oldrenxin:{
trigger:{global:'dying'},
//priority:6,
filter:function(event,player){
return event.player!=player&&event.player.hp<=0&&player.countCards('h')>0;
},
check:function(event,player){
if(get.attitude(player,event.player)<0) return false;
if(player.countCards('h',{name:['tao','jiu']})+event.player.hp<0) return false;
return true;
},
content:function(){
'step 0'
player.turnOver();
'step 1'
trigger.player.gain(player.getCards('h'),'give',player);
'step 2'
trigger.player.recover();
},
},
renxin:{
trigger:{global:'damageBegin4'},
audio:3,
//priority:6,
filter:function(event,player){
return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0;
},
direct:true,
content:function(){
"step 0"
var next=player.chooseToDiscard(get.prompt('renxin',trigger.player),'弃置一张装备牌并将武将牌翻面,然后防止'+get.translation(trigger.player)+'受到的伤害',{type:'equip'},'he');
next.logSkill=['renxin',trigger.player];
next.set('ai',function(card){
var player=_status.event.player;
if(get.attitude(player,_status.event.getTrigger().player)>3){
return 11-get.value(card);
}
return -1;
});
"step 1"
if(result.bool){
player.turnOver();
}
else{
event.finish();
}
"step 2"
trigger.cancel();
},
ai:{
expose:0.5
}
},
yuce:{
audio:2,
trigger:{player:'damageAfter'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0&&player.isDamaged();
},
content:function(){
"step 0"
var next=player.chooseCard(get.prompt2('yuce'));
next.set('ai',function(card){
if(get.type(card)=='basic') return 1;
return get.value(card);
});
"step 1"
if(result.bool){
player.logSkill('yuce');
player.showCards(result.cards);
var type=get.type(result.cards[0],'trick');
if(trigger.source){
trigger.source.chooseToDiscard('弃置一张不为'+get.translation(type)+'牌的牌或令'+get.translation(player)+'回复一点体力',function(card){
return get.type(card,'trick')!=_status.event.type;
}).set('ai',function(card){
if(get.recoverEffect(_status.event.getParent().player,_status.event.player,_status.event.player)<0){
return 7-get.value(card);
}
return 0;
}).set('type',type);
}
else{
event.recover=true;
}
}
else{
event.finish();
}
"step 2"
if(event.recover){
player.recover();
}
else if(result.bool){
//player.draw();
}
else{
player.recover();
}
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage'&&target.countCards('h'))){
return 0.8
}
}
}
}
},
xiansi:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
init:function(player){
if(!player.storage.xiansi) player.storage.xiansi=[];
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('xiansi'),[1,2],function(card,player,target){
return target.countCards('he')>0;
},function(target){
return -get.attitude(_status.event.player,target);
});
"step 1"
if(result.bool){
result.targets.sortBySeat();
player.logSkill('xiansi',result.targets);
event.targets=result.targets;
}
else{
event.finish();
}
"step 2"
if(event.targets.length){
var target=event.targets.shift();
event.current=target;
player.choosePlayerCard(target,true);
}
else{
event.finish();
}
"step 3"
if(result.bool){
player.storage.xiansi=player.storage.xiansi.concat(result.links);
player.markSkill('xiansi');
player.syncStorage('xiansi');
event.current.lose(result.links,ui.special,'toStorage');
event.current.$give(result.links,player,false);
event.goto(2);
}
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
},
ai:{
threaten:2
},
global:'xiansi2'
},
xiansi2:{
enable:'chooseToUse',
audio:2,
viewAs:{name:'sha',isCard:true},
filter:function(event,player){
return game.hasPlayer(function(current){
return current.hasSkill('xiansi')&¤t.storage.xiansi.length>1&&event.filterTarget({name:'sha'},player,current);
});
},
filterTarget:function(card,player,target){
var bool=false;
var players=ui.selected.targets.slice(0);
for(var i=0;i1) bool=true;break;
}
if(!bool&&(!target.hasSkill('xiansi')||target.storage.xiansi.length<=1)) return false;
return _status.event._backup.filterTarget.apply(this,arguments);
},
complexSelect:true,
selectCard:-1,
filterCard:function(){
return false;
},
forceaudio:true,
direct:true,
prompt:'弃置一名有【逆】的角色的两张【逆】,然后视为对包含其在内的角色使用【杀】。',
delay:false,
log:false,
precontent:function(){
"step 0"
var targets=game.filterPlayer(function(current){
if(event.result.targets.contains(current)&¤t.storage.xiansi){
return current.storage.xiansi.length>1;
}
return false;
});
if(targets.length==1){
event.target=targets[0];
event.goto(2);
}
else if(targets.length>0){
player.chooseTarget(true,'选择【陷嗣】的目标',function(card,player,target){
return _status.event.list.contains(target);
}).set('list',targets).set('ai',function(target){
var player=_status.event.player;
return get.attitude(player,target);
});
}
else{
event.finish();
}
"step 1"
if(result.bool&&result.targets.length){
event.target=result.targets[0];
}
else{
event.finish();
}
"step 2"
if(event.target){
if(event.target.storage.xiansi.length==2){
event.directresult=event.target.storage.xiansi.slice(0);
}
else{
player.chooseCardButton('移去两张“逆”',2,event.target.storage.xiansi,true);
}
}
else{
event.finish();
}
"step 3"
if(event.directresult||result.bool){
player.logSkill('xiansi2',event.target);
var links=event.directresult||result.links;
for(var i=0;i0){
player.loseHp();
}
else{
player.recover();
}
},
subSkill:{
damaged:{},
ai:{}
},
ai:{
maixie_defend:true,
threaten:0.9,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing')) return;
if(target.hujia) return;
if(player._shibei_tmp) return;
if(target.hasSkill('shibei_ai')) return;
if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return;
if(get.tag(card,'damage')){
if(target.getHistory('damage').length>0){
return [1,-2];
}
else{
if(get.attitude(player,target)>0&&target.hp>1){
return 0;
}
if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){
if(card.name=='sha') return;
var sha=false;
player._shibei_tmp=true;
var num=player.countCards('h',function(card){
if(card.name=='sha'){
if(sha){
return false;
}
else{
sha=true;
}
}
return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0;
});
delete player._shibei_tmp;
if(player.hasSkillTag('damage')){
num++;
}
if(num<2){
var enemies=player.getEnemies();
if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){
return;
}
return 0;
}
}
}
}
}
}
}
},
shibei_old:{
audio:2,
trigger:{player:'damageAfter'},
forced:true,
content:function(){
"step 0"
player.judge(function(card){
if(player.hasSkill('shibei2')){
if(get.color(card)=='black') return -1;
}
else{
if(get.color(card)=='red') return 1;
}
return 0;
})
"step 1"
if(result.judge>0){
player.recover();
}
else if(result.judge<0){
player.loseHp();
}
if(!player.hasSkill('shibei2')){
player.addTempSkill('shibei2');
}
}
},
shibei2:{},
jianying:{
audio:2,
locked:false,
mod:{
aiOrder:function(player,card,num){
if(typeof card=='object'&&player.isPhaseUsing()){
var evt=player.getLastUsed();
if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==card.number)){
return num+10;
}
}
},
},
trigger:{player:'useCard'},
frequent:true,
filter:function(event,player){
var evt=player.getLastUsed(1);
if(!evt||!evt.card) return false;
if(!player.isPhaseUsing()) return false;
var evt2=evt.getParent('phaseUse');
if(!evt2||evt2.name!='phaseUse'||evt2.player!=player) return false;
return get.suit(evt.card)&&get.suit(evt.card)==get.suit(event.card)||
evt.card.number&&evt.card.number==event.card.number;
},
content:function(){
player.draw();
},
},
zzhenggong:{
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return event.source&&event.source.countCards('e')>0;
},
content:function(){
"step 0"
var att=get.attitude(player,trigger.source);
player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){
if(att<=0){
return get.equipValue(button.link);
}
return 0;
}
"step 1"
if(result.bool){
player.logSkill('zzhenggong',trigger.source);
player.equip(result.links[0]);
trigger.source.$give(result.links[0],player,false);
}
},
ai:{
maixie_defend:true,
}
},
zquanji:{
trigger:{global:'phaseZhunbeiBefore'},
//priority:15,
check:function(event,player){
var att=get.attitude(player,event.player);
if(att<0){
var nh1=event.player.countCards('h');
var nh2=player.countCards('h');
return nh1<=2&&nh2>nh1+1;
}
if(att>0&&event.player.hasJudge('lebu')&&event.player.countCards('h')>event.player.hp+1) return true;
return false;
},
logTarget:'player',
filter:function(event,player){
return player.canCompare(event.player);
},
content:function(){
"step 0"
player.chooseToCompare(trigger.player);
"step 1"
if(result.bool){
trigger.player.skip('phaseJudge');
trigger.cancel();
}
},
ai:{
expose:0.2
}
},
zbaijiang:{
skillAnimation:true,
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
unique:true,
derivation:['zyexin','zzili'],
init:function(player){
player.storage.zbaijiang=false;
},
// intro:{
// content:'limited'
// },
filter:function(event,player){
return !player.storage.zbaijiang&&player.countCards('e')>=2;
},
content:function(){
player.storage.zbaijiang=true;
player.removeSkill('zzhenggong');
player.removeSkill('zquanji');
player.removeSkill('zbaijiang');
player.addSkill('zyexin');
player.addSkill('zzili');
player.gainMaxHp();
}
},
zyexin:{
trigger:{player:'damageEnd',source:'damageSource'},
frequent:true,
init:function(player){
if(!player.storage.zyexin) player.storage.zyexin=[];
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
},
content:function(){
var card=game.cardsGotoSpecial(get.cards()).cards[0];
player.storage.zyexin.push(card);
player.$draw(card);
player.markSkill('zyexin');
game.addVideo('storage',player,['zyexin',get.cardsInfo(player.storage.zyexin),'cards']);
},
group:'zyexin2'
},
zyexin2:{
enable:'phaseUse',
usable:1,
lose:false,
delay:false,
selectCard:[1,Infinity],
filterCard:true,
filter:function(event,player){
return player.storage.zyexin.length>0;
},
prompt:'用任意数量的手牌与等量的“权”交换',
content:function(){
"step 0"
player.lose(cards,ui.special,'toStorage');
player.storage.zyexin=player.storage.zyexin.concat(cards);
player.chooseCardButton(player.storage.zyexin,'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){
return get.value(button.link);
}
if(player==game.me&&_status.auto){
game.delay();
}
"step 1"
player.gain(result.links,'toStorage');
for(var i=0;i=4&&!player.storage.zzili;
},
forced:true,
content:function(){
player.storage.zzili=true;
player.loseMaxHp();
player.addSkill('zpaiyi');
player.removeSkill('zzili');
},
// intro:{
// content:'limited'
// }
},
zpaiyi:{
trigger:{player:'phaseJieshuBegin'},
filter:function(event,player){
for(var i=0;i