noname/character/gujian.js

2765 lines
83 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
return {
name:'gujian',
character:{
gjqt_bailitusu:['male','shu',4,['xuelu','fanshi','shahun']],
gjqt_fengqingxue:['female','wu',3,['qinglan','yuehua','swd_wuxie']],
gjqt_xiangling:['female','wu',3,['xlqianhuan','meihu','xidie']],
gjqt_fanglansheng:['male','wu',3,['fanyin','mingkong','fumo']],
gjqt_yinqianshang:['male','qun',4,['zuiji','zuizhan']],
gjqt_hongyu:['female','shu',4,['jianwu','meiying']],
gjqt_yuewuyi:['male','wei',4,['yanjia','xiuhua','liuying']],
gjqt_wenrenyu:['female','shu',4,['chizhen','dangping']],
gjqt_xiayize:['male','qun',3,['xuanning','liuguang','yangming']],
gjqt_aruan:['female','wu',3,['zhaolu','jiehuo','yuling']],
gjqt_xunfang:['female','shu',3,['manwu','xfanghua']],
gjqt_ouyangshaogong:['male','shu',3,['yunyin','shishui','duhun']],
gjqt_xieyi:['male','qun',3,['lingyan','xunjian','humeng']],
gjqt_yanjiaxieyi:['male','qun',2,['xianju'],['unseen']],
gjqt_chuqi:['male','qun',2,['xuanci'],['unseen']],
// gjqt_xuange:['male','qun',4,['zhenlu','zhuixing']],
gjqt_beiluo:['male','qun',4,['lingnu','zhenying','cihong']],
gjqt_yunwuyue:['female','wei',3,['yange','woxue','lianjing']],
gjqt_cenying:['female','shu',3,['yunyou','xuanzhen','qingshu']],
// gjqt_changliu:['male','qun',4,['xiange']],
// gjqt_fenglishuang:['female','wei',3,[]],
// gjqt_nishang:[],
},
characterIntro:{
gjqt_bailitusu:'原名韩云溪,太子长琴半身。幼时经历灭族之灾,本来已死去,但因体内被封进了太子长琴一半魂魄而得以死而复生。身怀凶剑焚寂的煞气,在某次煞气发作中被紫胤真人所救,后拜入昆仑山天墉城,以“屠绝鬼气,苏醒人魂”之意更名为“百里屠苏”。',
gjqt_fengqingxue:'来自幽暗无边的地界大哥为幽都娲皇神殿十巫之一的巫咸风广陌奉命寻兄而来到人间邂逅百里屠苏陷入了焚寂的宿命纠葛后与百里屠苏相知相爱终局百里屠苏化为永世无法轮回的荒魂她为寻找重生之法放弃自己的轮回换取下长久的寿命在人间执着不悔地寻觅了九百年最后与重生后的屠苏回到桃花谷相守',
gjqt_xiangling:'青丘之国国主九尾天狐与人界女子所生半人半妖由南疆紫榕林榕爷爷抚养在山林间无拘无束长大娇俏可爱后来下江南寻找生母却被抓进翻云寨偶然被百里屠苏相救为报答救命之恩便一直跟随百里屠苏在漫漫征途中成长起来变得成熟懂事得知方兰生对自己的感情十分矛盾后来终于错过最后结局启程前往青丘之国',
gjqt_fanglansheng:'家住琴川的一介书生家境殷实母亲在家常住庵堂吃斋念佛父亲虽是琴川附近某间寺庙的住持但却比商人还会敛财跟随父亲学过降妖除鬼的佛家法术并以此自傲梦想能找一个娇小可爱温柔美丽的女子共渡此生对襄铃一见钟情',
gjqt_yinqianshang:'原名风广陌是幽都十巫之一的巫咸奉女娲之命前往乌蒙灵谷增强焚寂封印但因为欧阳少恭与雷严的争夺关系他受到焚寂之力力量冲击失去记忆后为欧阳少恭所救尹千觞为了报恩跟随在百里屠苏等人身边监视在这个过程中他慢慢恢复过往的记忆后为阻止欧阳少恭随众人前往蓬莱决战最后对曾给予他一次重生的欧阳少恭以死相陪一起归于火海',
gjqt_hongyu:'上古庆枫族族人紫胤真人的剑灵宿体为古剑·红玉在百里屠苏离开昆仑山天墉城后奉命随行保护终局之后她依然回到了天墉城陪伴在紫胤真人身边',
gjqt_yuewuyi:'成长于长安富商家庭其养父曾是战功显赫的将军退隐后从商很快就富甲一方其养母是精擅偃术的南疆天玄教偃女族传人待无异一如己出般疼爱有加无异的生父是捐毒大将兀火罗亡母是一名中原女子因此他具有一半胡人的血统',
gjqt_wenrenyu:'出身于百草谷天罡部队从小在军中生活的她见惯生死拥有超越其年龄的沉着果敢头脑冷静严谨洞察力敏锐性格大方爽快',
gjqt_xiayize:'本为当朝圣元帝三子李焱天资聪颖勤奋好学于道术一途颇具天赋幼时体弱因身世原因被太华山的诀微长老清和真人带走从此过上了道家清修的生活',
gjqt_aruan:'千年前昭明崩裂损毁剑心为神农所得其将剑心植入用辟邪之骨所造之人是为巫山神女神女爱慕司幽却始终得不到司幽回应心绪起伏加速灵力散逸不久后死去司幽自责不已失去踪迹神女死后剑心碎片落地生根吸纳灵气变为露草露草渐渐化为人形形貌与巫山神女一样而且保留了她零散的记忆阿阮正是这些露草中的一个当阿阮灵气耗尽就会重新变为露草并失去人时的记忆直到重新吸纳足够的灵力才能恢复人形',
gjqt_xunfang:'蓬莱国公主美丽善良为欧阳少恭前世妻子太子长琴转世后巽芳为寻找丈夫来到中原蓬莱人寿命虽长却终有极限终究躲不过容颜老去当巽芳找到分离多年后的少恭时自惭形秽不愿相认她希望少恭心中的自己永远都是青春貌美于是化名寂桐守护在其身旁',
gjqt_ouyangshaogong:'前身为太子长琴今生只有一半仙灵另一半仙灵被铸进焚寂之中成为焚寂剑灵他在漫长时光中经历太多悲欢离合渐渐迷失自我后与蓬莱国公主巽芳相爱度过一段美好时光之后蓬莱毁于天灾他误以为巽芳已死便不再压抑内心的疯狂与憎恨为逆天改命不惜一切',
gjqt_xieyi:'偃术大师流月城大祭司沈夜之徒于偃术一途冠绝古今其制造的偃甲精妙绝伦为世人所称颂男主角乐无异对其十分崇拜曾任流月城破军祭司精通偃术和法术在一百年前寻找神剑昭明的西域之行中被沈夜捉拿回流月城毁去记忆仅靠偃甲和蛊虫心脏跳动并更名为初七最终在巫山为抢救昭明剑心保护乐无异被埋在坍塌的神女墓下他以自己为原型制作并放入自己部分记忆的偃甲人谢衣曾收乐无异为徒',
gjqt_beiluo:'身负辟邪王族之血的大妖辟邪先王玄戈的孪生兄弟北洛幼时流落人界从此便在那里长大他对自己的血脉并无认同之感常年抑制妖力希望以的身份留在人间后因先王玄戈的逝世即位为辟邪王',
gjqt_yunwuyue:'本体是一只魇兽该族喜独居以人的梦境为食以精神力为长被称为最接近魔的妖族云无月幼时居住在有熊城旁的白梦泽自幼便与轩辕黄帝的大将缙云结识对缙云有着一种依赖和仰慕深受缙云的影响对人族以及其他生灵有感情不忍看到眼前的生灵遭到痛苦会加以援手',
gjqt_cenying:'出身于一个颇有底蕴的大家族性格开朗随和温柔坚韧心如琉璃岑缨受到开明长辈的影响自小多思善学年纪不大却已经加入了博物学会有时跟随师长在外游历探寻更广阔的天地',
},
card:{
yanjiadan_heart:{
type:'jiguan',
cardcolor:'heart',
fullskin:true,
derivation:'gjqt_xieyi',
enable:true,
notarget:true,
content(){
'step 0'
var choice=null;
var targets=game.filterPlayer(function(current){
return get.attitude(player,current)>0;
});
for(var i=0;i<targets.length;i++){
if(targets[i].hp==1){
if(targets[i].hasSkill('yunvyuanshen_skill')){
choice='ziyangdan';
}
else{
choice='yunvyuanshen';
break;
}
}
}
if(!choice&&game.hasPlayer(function(current){
return current.hp==1&&get.attitude(player,current)<0&&get.damageEffect(current,player,player,'fire')>0;
})){
choice='shatang';
}
if(!choice){
for(var i=0;i<targets.length;i++){
if(!targets[i].hasSkill('yunvyuanshen_skill')){
choice='yunvyuanshen';
break;
}
}
}
if(!choice){
choice='ziyangdan';
}
player.chooseVCardButton('选择一张牌视为使用之',['yunvyuanshen','ziyangdan','shatang']).set('ai',function(button){
if(button.link[2]==_status.event.choice) return 2;
return Math.random();
}).set('choice',choice).set('filterButton',function(button){
return _status.event.player.hasUseTarget(button.link[2]);
});
'step 1'
player.chooseUseTarget(true,result.links[0][2]);
},
ai:{
order:5,
result:{
player:1
}
}
},
yanjiadan_diamond:{
type:'jiguan',
cardcolor:'diamond',
fullskin:true,
derivation:'gjqt_xieyi',
enable:true,
notarget:true,
content(){
'step 0'
var choice='liufengsan';
if(game.hasPlayer(function(current){
var eff=get.effect(current,{name:'shenhuofeiya'},player,player);
if(eff>=0) return false;
if(current.hp==1&&eff<0) return true;
if(get.attitude(player,current)<0&&get.attitude(player,current.getNext()<0)&&get.attitude(player,current.getPrevious())<0){
return true;
}
return false;
})){
choice='shenhuofeiya';
}
player.chooseVCardButton('选择一张牌视为使用之',['liufengsan','shujinsan','shenhuofeiya']).set('ai',function(button){
if(button.link[2]==_status.event.choice) return 2;
return Math.random();
}).set('choice',choice).set('filterButton',function(button){
return _status.event.player.hasUseTarget(button.link[2]);
});
'step 1'
player.chooseUseTarget(true,result.links[0][2]);
},
ai:{
order:5,
result:{
player:1
}
}
},
yanjiadan_club:{
type:'jiguan',
cardcolor:'club',
fullskin:true,
derivation:'gjqt_xieyi',
enable:true,
notarget:true,
content(){
'step 0'
var choice='liutouge';
player.chooseVCardButton('选择一张牌视为使用之',['bingpotong','liutouge','mianlijinzhen']).set('ai',function(button){
if(button.link[2]==_status.event.choice) return 2;
return Math.random();
}).set('choice',choice).set('filterButton',function(button){
return _status.event.player.hasUseTarget(button.link[2]);
});
'step 1'
player.chooseUseTarget(true,result.links[0][2]);
},
ai:{
order:5,
result:{
player:1
}
}
},
yanjiadan_spade:{
type:'jiguan',
cardcolor:'spade',
fullskin:true,
derivation:'gjqt_xieyi',
enable:true,
notarget:true,
content(){
'step 0'
var choice=null;
if(player.getUseValue('longxugou')>0){
choice='longxugou';
}
else if(player.getUseValue('qiankunbiao')>0){
choice='qiankunbiao';
}
else if(player.getUseValue('feibiao')>0){
choice='qiankunbiao';
}
player.chooseVCardButton('选择一张牌视为使用之',['feibiao','qiankunbiao','longxugou']).set('ai',function(button){
if(button.link[2]==_status.event.choice) return 2;
return Math.random();
}).set('choice',choice).set('filterButton',function(button){
return _status.event.player.hasUseTarget(button.link[2]);
});
'step 1'
player.chooseUseTarget(true,result.links[0][2]);
},
ai:{
order:5,
result:{
player(player){
if(player.getUseValue('feibiao')>0) return 1;
if(player.getUseValue('qiankunbiao')>0) return 1;
if(player.getUseValue('longxugou')>0) return 1;
return 0;
}
}
}
}
},
/** @type { importCharacterConfig['skill'] } */
skill:{
qingshu:{
ai:{
threaten:1.4
},
trigger:{player:'phaseEnd'},
direct:true,
filter(event,player){
for(var i=0;i<player.storage.qingshu.length;i++){
if(ui.land&&ui.land.name==player.storage.qingshu[i]) continue;
return true;
}
return false;
},
init(player){
player.storage.qingshu=[];
player.storage.qingshu_all=[];
},
content(){
'step 0'
player.chooseVCardButton(player.storage.qingshu.slice(0),get.prompt('qingshu')).set('ai',function(button){
var skill=button.link[2]+'_skill';
if(lib.skill[skill].ai&&lib.skill[skill].ai.mapValue){
return Math.abs(lib.skill[skill].ai.mapValue);
}
return 0;
}).set('filterButton',function(button){
if(ui.land&&ui.land.name==button.link[2]) return false;
return true;
});
'step 1'
if(result.bool){
var skill=result.links[0][2];
event.mapSkill=skill;
var value=0;
if(lib.skill[skill]&&lib.skill[skill].ai&&lib.skill[skill].ai.mapValue){
value=lib.skill[skill].ai.mapValue;
}
player.chooseTarget(function(card,player,target){
return !target.hasSkill(skill+'_skill');
},'选择一个目标获得技能'+get.translation(skill)).set('ai',function(target){
var result=get.sgnAttitude(player,target)*value;
var num=target.storage.qingshu_gained||0;
return result/(num+1);
}).set('prompt2',lib.translate[skill+'_skill_info']);
}
else{
event.finish();
}
'step 2'
if(result.bool){
var target=result.targets[0];
var skill=event.mapSkill+'_skill';
player.logSkill('qingshu',target);
target.addSkill(skill);
target.popup(skill);
game.log(target,'获得了技能',''+get.translation(skill)+'');
if(!target.storage.qingshu_gained){
target.storage.qingshu_gained=0;
}
target.storage.qingshu_gained++;
player.storage.qingshu.remove(event.mapSkill);
}
},
subSkill:{
count:{
trigger:{player:'useCard'},
silent:true,
filter(event,player){
return get.type(event.card)=='land'&&!player.storage.qingshu_all.includes(event.card.name);
},
content(){
player.storage.qingshu.push(trigger.card.name);
player.storage.qingshu_all.push(trigger.card.name);
}
}
},
group:'qingshu_count'
},
yunyou:{
enable:'phaseUse',
round:2,
init(player){
player.storage.yunyou=[];
},
filter(event,player){
return !player.hasSkill('land_used')&&get.inpile('land').length>player.storage.yunyou.length;
},
delay:0,
content(){
var list=get.inpile('land');
for(var i=0;i<player.storage.yunyou.length;i++){
list.remove(player.storage.yunyou[i]);
}
player.discoverCard(list,'use');
},
ai:{
order:6,
threaten:1.2,
result:{
player:1
}
},
group:'yunyou_count',
subSkill:{
count:{
trigger:{player:'useCard'},
silent:true,
filter(event,player){
return get.type(event.card)=='land';
},
content(){
player.storage.yunyou.add(trigger.card.name);
}
}
}
},
xuanzhen:{
trigger:{global:'useCard1'},
round:1,
filter(event,player){
if(event.targets.length!=1) return false;
if(event.player==player) return false;
if(player!=event.targets[0]) return false;
for(var i=0;i<lib.inpile.length;i++){
var info=lib.card[lib.inpile[i]];
if(info.multitarget) continue;
if(lib.filter.targetEnabled2({name:lib.inpile[i]},event.player,player)){
return true;
}
}
return false;
},
check(event,player){
return get.effect(player,event.card,event.player,player)<0;
},
prompt2(event,player){
return '发现一张牌代替'+get.translation(event.player)+'对你使用的'+get.translation(event.card);
},
autodelay:true,
content(){
'step 0'
var list=[],list1=[],list2=[];
for(var i=0;i<lib.inpile.length;i++){
var info=lib.card[lib.inpile[i]];
if(info.multitarget) continue;
if(lib.filter.targetEnabled2({name:lib.inpile[i]},trigger.player,trigger.targets[0])){
var cardinfo=[trigger.card.suit||'',trigger.card.number||'',lib.inpile[i]];
list1.push(cardinfo);
if(info.type!='equip'){
list2.push(cardinfo);
}
}
}
var equipped=false;
for(var i=0;i<3;i++){
if(equipped&&list2.length){
list.push(list2.randomRemove());
}
else{
equipped=true;
list.push(list1.randomRemove());
}
}
player.chooseButton(true,['玄阵',[list,'vcard']]).ai=function(button){
var card={suit:trigger.card.suit,number:trigger.card.number,name:button.link[2]};
return get.effect(trigger.targets[0],card,trigger.player,player);
};
'step 1'
if(result.bool){
var card=game.createCard({
suit:trigger.card.suit||lib.suit.randomGet(),
number:trigger.card.number||Math.ceil(Math.random()*13),
name:result.links[0][2]}
);
event.card=card;
game.log(player,'',trigger.card,'变为',card);
// if(!event.isMine()) game.delayx();
trigger.card=get.autoViewAs(card);
trigger.cards=[card];
game.cardsGotoOrdering(card).relatedEvent=trigger;
}
else{
event.finish();
}
'step 2'
player.$throw(event.card,null,null,true);
if(player==trigger.player){
player.line(trigger.targets[0],'green');
}
else{
player.line(trigger.player,'green');
}
game.delayx(0.5);
},
ai:{
threaten(player,target){
if(game.roundNumber-target.storage.xuanzhen_roundcount<1) return 2.2;
return 0.6;
},
}
},
xuanci:{
locked:false,
mod:{
targetInRange(card){
if(card.name=='feibiao') return true;
}
},
enable:'phaseUse',
usable:1,
viewAs:{name:'feibiao'},
filterCard:{suit:'club'},
position:'he',
filter(event,player){
return player.countCards('he',{suit:'club'})>0;
},
check(card){
return 7-get.value(card);
},
group:'xuanci_sha',
subSkill:{
sha:{
trigger:{player:'useCardToAfter'},
forced:true,
filter(event,player){
if(event.card.name=='feibiao'){
return event.target.isIn()&&player.canUse('sha',event.target,false);
}
return false;
},
logTarget:'target',
autodelay:0.5,
content(){
player.useCard(trigger.target,{name:'sha'},false).line=false;
}
}
}
},
xianju:{
trigger:{global:'roundStart'},
forced:true,
init(player){
if(game.roundNumber%2==1){
player.addTempSkill('qianxing','roundStart');
}
},
filter(event,player){
return game.roundNumber%2==1;
},
content(){
if(game.roundNumber%2==1){
player.addTempSkill('qianxing','roundStart');
}
else {
var list=get.typeCard('jiguan');
for(var i=0;i<list.length;i++){
if(lib.card[list[i]].derivation){
list.splice(i--,1);
}
}
if(list.length){
player.gain(game.createCard(list.randomGet()),'draw');
}
}
},
subSkill:{
gain:{
trigger:{player:'phaseEnd'},
forced:true,
filter(event,player){
return game.roundNumber%2==0;
},
content(){
var list=get.typeCard('jiguan');
for(var i=0;i<list.length;i++){
if(lib.card[list[i]].derivation){
list.splice(i--,1);
}
}
if(list.length){
player.gain(game.createCard(list.randomGet()),'draw');
}
}
}
}
},
humeng:{
init(player){
player.storage.humeng=[];
},
locked:true,
group:['humeng_count','humeng_call','humeng_dying'],
unique:true,
threaten(player,target){
if(target.hasSkill('humeng_sub')) return 1.6;
return 1;
},
subSkill:{
call:{
trigger:{player:'humeng_yanjia'},
forced:true,
skillAnimation:true,
animationColor:'water',
content(){
player.addSkill('humeng_sub');
}
},
sub:{
init(player){
player.markSkillCharacter('humeng_sub','gjqt_yanjiaxieyi','偃甲谢衣','当你进入濒死状态时激活此替身');
}
},
dying:{
unique:true,
skillAnimation:true,
animationColor:'water',
trigger:{player:'dying'},
priority:10,
forced:true,
content(){
'step 0'
player.discard(player.getCards('hej'));
if(player.hasSkill('humeng_sub')){
event.yanjia=true;
player.removeSkill('humeng_sub');
}
'step 1'
player.link(false);
'step 2'
player.turnOver(false);
'step 3'
player.draw(4);
player.reinit('gjqt_xieyi','gjqt_chuqi');
player.hp=player.maxHp;
'step 4'
if(event.yanjia){
var tag=player.addSubPlayer({
name:'gjqt_yanjiaxieyi',
skills:['xianju'],
hs:get.cards(2),
hp:2,
maxHp:2
});
player.callSubPlayer(tag);
}
},
},
count:{
trigger:{player:'useCardAfter'},
silent:true,
filter(event,player){
if(player.storage.humeng_yanjia) return false;
return event.card.name.indexOf('yanjiadan_')==0;
},
content(){
player.storage.humeng.add(trigger.card.name.slice(10));
if(player.storage.humeng.length==4&&!player.hasSkill('humeng_sub')){
event.trigger('humeng_yanjia');
}
}
}
}
},
xunjian_old:{
trigger:{player:'phaseEnd'},
filter(event,player){
return player.storage.lingyan&&player.storage.lingyan.length==13;
},
forced:true,
unique:true,
skillAnimation:true,
content(){
player.awakenSkill('xunjian');
player.removeSkill('lingyan');
player.addSkill('tongtian');
}
},
xunjian:{
trigger:{player:['useCard','respond']},
forced:true,
filter(event,player){
if(!player.storage.lingyan) return false;
if(event.getRand()>player.storage.lingyan.length/13) return false;
return get.cardPile2(event.card.name)?true:false;
},
content(){
var card=get.cardPile2(trigger.card.name);
if(card){
player.gain(card,'gain2');
}
}
},
tongtian:{
trigger:{player:['useCardAfter','respondAfter']},
forced:true,
filter(event,player){
var name=event.card.name;
var enemies=player.getEnemies();
for(var i=0;i<enemies.length;i++){
if(enemies[i].countCards('h',name)){
return true;
}
}
},
content(){
var list=[];
var name=trigger.card.name;
var enemies=player.getEnemies();
for(var i=0;i<enemies.length;i++){
list.addArray(enemies[i].getCards('h',name));
}
if(list.length){
var card=list.randomGet();
var owner=get.owner(card);
player.line(owner,'green');
owner.give(card,player,true);
}
}
},
lingyan:{
enable:'phaseUse',
usable:1,
filter(event,player){
var nums=[];
for(var i=0;i<player.storage.lingyan.length;i++){
nums.add(player.storage.lingyan[i].number);
}
return player.hasCard(function(card){
return !nums.includes(card.number);
},'h');
},
init(player){
player.storage.lingyan=[];
},
intro:{
mark(dialog,storage,player){
if(Array.isArray(player.storage.humeng)&&player.storage.humeng.length){
dialog.addText('武将牌');
dialog.addSmall(storage);
dialog.addText('偃甲蛋');
var cards=[];
for(var i=0;i<player.storage.humeng.length;i++){
var suit=player.storage.humeng[i];
cards.push(game.createCard('yanjiadan_'+suit,suit,''));
}
dialog.addSmall(cards);
}
else{
dialog.addAuto(storage);
}
}
},
filterCard(card,player){
var nums=[];
for(var i=0;i<player.storage.lingyan.length;i++){
nums.add(player.storage.lingyan[i].number);
}
return !nums.includes(card);
},
check(card){
return 8-get.value(card);
},
discard:false,
prepare(cards,player){
player.$give(cards,player,false);
},
content(){
player.storage.lingyan.add(cards[0]);
player.syncStorage('lingyan');
player.markSkill('lingyan');
player.updateMarks();
var name='yanjiadan_'+get.suit(cards[0]);
if(lib.card[name]){
player.gain(game.createCard(name),'gain2');
}
},
ai:{
threaten:1.4,
order:4,
result:{
player:1
}
}
},
woxue:{
trigger:{player:['useCardAfter','respondAfter']},
filter(event,player){
if(_status.currentPhase!=player&&!_status.currentPhase.hasSkill('gw_ciguhanshuang')){
return true;
}
return false;
},
check(event,player){
return get.attitude(player,_status.currentPhase)<0;
},
logTarget(){
return _status.currentPhase;
},
content(){
player.useCard({name:'gw_baishuang'},_status.currentPhase).animate=false;
},
ai:{
threaten:0.9
}
},
yange:{
trigger:{player:'phaseBeginStart'},
direct:true,
init(player){
if(player.storage.yange>0) {
player.markSkill('yange');
}
},
filter(event,player){
return player.storage.yange>0;
},
content(){
'step 0'
player.chooseTarget(function(card,player,target){
return player!=target;
},get.prompt2('yange')).set('pskill',trigger.skill).set('ai',function(target){
if(_status.event.pskill) return 0;
var player=_status.event.player;
var nh=player.countCards('h');
var nh2=target.countCards('h');
var num=nh2-nh;
if(player.hp==1){
return num;
}
if(get.threaten(target)>=1.5){
if(num<2) return 0;
}
else{
if(num<3) return 0;
}
return num+Math.sqrt(get.threaten(target));
});
'step 1'
if(result.bool){
player.storage.yange--;
if(player.storage.yange<=0){
player.unmarkSkill('yange');
}
else{
player.updateMarks();
}
var target=result.targets[0];
player.logSkill('yange',target);
var clone=function(pos){
var cloned=[];
var cards=target.getCards(pos);
for(var i=0;i<cards.length;i++){
cloned.push(game.createCard(cards[i]));
}
return cloned;
}
var tag=player.addSubPlayer({
name:target.name,
skills:target.getStockSkills().concat('yange_exit'),
hs:clone('h'),
es:clone('e'),
hp:target.hp,
maxHp:target.maxHp,
intro:'回合结束后切换回主武将'
});
player.callSubPlayer(tag);
}
},
intro:{
content:'mark'
},
group:'yange_init',
subSkill:{
init:{
trigger:{global:'gameStart',player:'enterGame'},
forced:true,
popup:false,
content(){
player.storage.yange=game.countPlayer(function(current){
return current.isEnemiesOf(player);
});
player.markSkill('yange');
}
},
exit:{
trigger:{player:'phaseAfter'},
silent:true,
content(){
player.exitSubPlayer(true);
if(lib.filter.filterTrigger(trigger,player,'phaseAfter','lianjing')) game.createTrigger('phaseAfter','lianjing',player,trigger);
}
}
},
ai:{
threaten:1.5
}
},
lianjing:{
unique:true,
trigger:{player:'phaseAfter'},
direct:true,
round:2,
filter(event,player){
if(event.skill) return false;
return true;
},
content(){
'step 0'
player.chooseTarget([1,2],get.prompt2('lianjing'),function(card,player,target){
return player!=target;
}).set('ai',function(target){
var player=_status.event.player;
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att<0){
for(var i=0;i<ui.selected.targets.length;i++){
if(get.attitude(player,ui.selected.targets[i])<0) return 0;
}
if(target.hp==1){
if(nh==0) return 2;
if(nh==1) return 1;
}
}
else if(att>0){
if(target.isTurnedOver()) return 2.5;
if(target.hp==1){
if(nh==0) return 2;
if(nh==1) return 0.9;
if(ui.selected.targets.length) return 0.3;
}
else if(target.hp==2){
if(nh==0) return 1.5;
if(nh==1) return 0.5;
if(ui.selected.targets.length) return 0.2;
}
else if(target.hp==3){
if(nh==0) return 0.4;
if(nh==1) return 0.35;
if(ui.selected.targets.length) return 0.1;
}
if(!target.needsToDiscard(2)) return 0.2;
if(ui.selected.targets.length||!player.needsToDiscard(2)) return 0.05;
}
return 0;
});
'step 1'
if(result.bool){
player.logSkill('lianjing',result.targets);
player.insertEvent('lianjing',lib.skill.lianjing.content_phase);
player.storage.lianjing_targets=result.targets.slice(0);
// player.storage.lianjing--;
// if(player.storage.lianjing<=0){
// player.unmarkSkill('lianjing');
// }
game.delay();
}
},
content_phase(){
'step 0'
event.forceDie=true;
event.list=[player].concat(player.storage.lianjing_targets);
event.exlist=[];
event.list.sortBySeat();
delete player.storage.lianjing_targets;
for(var i=0;i<game.players.length;i++){
if(!event.list.includes(game.players[i])){
game.players[i].out('lianjing');
event.exlist.push(game.players[i]);
}
}
'step 1'
if(event.list.length){
event.list.shift().phase('lianjing');
event.redo();
}
'step 2'
for(var i=0;i<event.exlist.length;i++){
event.exlist[i].in('lianjing');
}
},
ai:{
threaten:1.5
}
},
cihong:{
round:3,
trigger:{player:'phaseEnd'},
direct:true,
content(){
'step 0'
var goon=false;
if(player.countCards('he',function(card){
return get.value(card)<8&&get.color(card)=='red';
})){
goon=true;
}
else if(game.hasPlayer(function(current){
return current.hp==1&&player.canUse('sha',current,false)&&get.attitude(player,current)<0&&get.effect(current,{name:'sha'},player,player)>0;
})){
if(player.hp>1||!player.isTurnedOver()){
goon=true;
}
}
player.chooseTarget(get.prompt('cihong'),function(card,playe,target){
return player.canUse('sha',target,false);
}).set('ai',function(target){
if(!_status.event.goon) return false;
var player=_status.event.player;
if(get.attitude(player,target)>=0) return false;
if(target.hp>3) return false;
return get.effect(target,{name:'sha'},player,player);
}).set('goon',goon);
'step 1'
if(result.bool){
event.target=result.targets[0];
player.logSkill('cihong',event.target);
}
else{
event.finish();
}
'step 2'
if(event.target.isAlive()&&player.countCards('he',{color:'red'})){
player.chooseToDiscard('he',{color:'red'},'是否弃置一张红色牌视为对'+get.translation(event.target)+'使用一张杀').set('ai',function(card){
return 8-get.value(card);
})
}
else{
event.goto(4);
}
'step 3'
if(result.bool){
player.useCard({name:'sha'},event.target);
}
'step 4'
if(event.target.isAlive()){
player.chooseBool('是否失去1点体力并视为对'+get.translation(event.target)+'使用一张杀').set('choice',
player.hp>event.target.hp&&player.hp>1&&event.target.hp>0
);
}
else{
event.finish();
}
'step 5'
if(result.bool){
player.loseHp();
player.useCard({name:'sha'},event.target);
}
'step 6'
if(event.target.isAlive()&&!player.isTurnedOver()){
player.chooseBool('是将武将牌翻至背面并视为对'+get.translation(event.target)+'使用一张杀').set('choice',
event.target.hp==1
);
}
else{
event.finish();
}
'step 7'
if(result.bool){
player.turnOver(true);
player.useCard({name:'sha'},event.target);
}
},
ai:{
threaten:1.5
}
},
zhenying:{
trigger:{player:['useCard','respond']},
forced:true,
filter(event,player){
if(!event.card.isCard) return false;
if(event.cards[0]&&event.cards[0].zhenying_link) return false;
if(get.color(event.card)!='black') return false;
if(['delay','equip'].includes(get.type(event.card))) return false;
return true;
},
content(){
var fake=game.createCard(trigger.card);
fake.zhenying_link=true;
player.gain(fake,'draw')._triggered=null;
fake.classList.add('glow');
fake._destroy='zhenying';
fake._modUseful=function(){return 0.1};
fake._modValue=function(){return 0.1};
},
group:['zhenying_discard','zhenying_lose'],
subSkill:{
discard:{
trigger:{player:['useCardAfter','respondAfter']},
forced:true,
filter(event,player){
if(get.is.converted(event)) return false;
if(!player.countCards('he')) return false;
if(event.cards[0]&&event.cards[0].zhenying_link) return true;
return false;
},
popup:false,
content(){
player.chooseToDiscard('he',true);
}
},
lose:{
trigger:{global:'phaseAfter'},
silent:true,
content(){
var hs=player.getCards('h',function(card){
return card.zhenying_link?true:false;
});
if(hs.length){
player.lose(hs)._triggered=null;
}
}
}
}
},
lingnu:{
trigger:{source:'damageEnd'},
forced:true,
init(player){
player.storage.lingnu={};
},
ai:{
threaten:1.3
},
filter(event,player){
var num=0;
for(var i in player.storage.lingnu){
num++;
if(num>=3) return false;
}
return event.num>0;
},
content(){
var check=function(list){
for(var i=0;i<list.length;i++){
var info=lib.skill[list[i]];
if(!info) continue;
if(info.shaRelated) return true;
if(info.trigger){
for(var j in info.trigger){
if(j=='player'||j=='global'){
var cond=info.trigger[j];
if(typeof cond=='string'){
cond=[cond];
}
if(cond.indexOf('shaBefore')!=-1) return true;
if(cond.indexOf('shaBegin')!=-1) return true;
if(cond.indexOf('shaEnd')!=-1) return true;
if(cond.indexOf('shaAfter')!=-1) return true;
}
}
}
}
return false;
};
var list = get.gainableSkills(function(info,skill){
if(player.storage.lingnu[list]) return false;
var list=[skill];
game.expandSkills(list);
return check(list);
},player);
var num=0;
for(var i in player.storage.lingnu){
num++;
}
for(var i=0;i<trigger.num;i++){
if(num>=3) break;
if(list.length){
var skill=list.randomGet();
player.addAdditionalSkill('lingnu',skill,true);
player.storage.lingnu[skill]=3;
player.popup(skill);
game.log(player,'获得了技能',''+get.translation(skill)+'');
player.markSkill('lingnu');
num++;
}
}
},
intro:{
content(storage){
var str='<ul style="padding-top:0;margin-top:0">';
for(var i in storage){
str+='<li>'+get.translation(i)+'剩余'+storage[i]+'回合';
}
str+='</ul>'
return str;
},
markcount(storage){
var num=0;
for(var i in storage){
num++;
}
return num;
}
},
group:'lingnu_remove',
subSkill:{
remove:{
trigger:{player:'phaseAfter'},
silent:true,
content(){
var clear=true;
for(var i in player.storage.lingnu){
player.storage.lingnu[i]--;
if(player.storage.lingnu[i]<=0){
delete player.storage.lingnu[i];
player.removeAdditionalSkill('lingnu',i);
}
else{
clear=false;
}
}
if(clear){
player.unmarkSkill('lingnu');
}
else{
player.updateMarks();
}
}
}
}
},
zuiji:{
enable:'phaseUse',
filterCard:true,
position:'he',
viewAs:{name:'jiu'},
viewAsFilter(player){
if(!player.countCards('he')) return false;
},
prompt:'将一张手牌或装备牌当酒使用',
check(card){
return 5-get.value(card);
},
ai:{
threaten:1.2
}
},
manwu:{
trigger:{global:'phaseEnd'},
check(event,player){
return get.attitude(player,event.player)>0;
},
filter(event,player){
return event.player.isMinHandcard();
},
logTarget:'player',
content(){
trigger.player.draw();
},
ai:{
expose:0.1
}
},
xfanghua:{
trigger:{target:'useCardToBegin'},
priority:-1,
filter(event,player){
return get.color(event.card)=='red'&&player.isDamaged();
},
frequent:true,
content(){
player.recover();
},
ai:{
effect:{
target(card,player,target,current){
if(get.color(card)=='red'&&target.isDamaged()) return [1,1];
}
}
}
},
duhun:{
enable:'chooseToUse',
filter(event,player){
if(event.type!='dying') return false;
if(player!=event.dying) return false;
if(player.maxHp<=1) return false;
if(player.countCards('h')==0) return false;
return true;
},
// alter:true,
filterTarget(card,player,target){
return target!=player&&target.countCards('h')>0&&target.hp>0&&target.hp<=player.maxHp;
},
content(){
'step 0'
player.chooseToCompare(target);
'step 1'
if(!result.bool){
player.die();
event.finish();
}
else{
event.num=target.hp-player.hp;
player.loseMaxHp();
}
'step 2'
player.changeHp(event.num);
if(get.is.altered('duhun')){
event.finish();
}
'step 3'
event.target.changeHp(-event.num);
'step 4'
if(event.target.hp<=0){
event.target.dying({source:player});
}
},
ai:{
order:1,
skillTagFilter(player){
if(player.maxHp<=1) return false;
if(player.hp>0) return false;
if(player.countCards('h')==0) return false;
},
save:true,
result:{
target:-1,
player:1
},
threaten:2
},
},
yunyin:{
trigger:{player:'phaseEnd'},
direct:true,
subSkill:{
count:{
trigger:{player:'useCard'},
silent:true,
filter(event,player){
return _status.currentPhase==player;
},
content(){
if(!player.storage.yunyin){
player.storage.yunyin=[];
}
var suit=get.suit(trigger.card);
if(suit){
player.storage.yunyin.add(suit);
}
}
},
set:{
trigger:{player:'phaseAfter'},
silent:true,
content(){
delete player.storage.yunyin;
}
}
},
filter(event,player){
if(!player.storage.yunyin) return true;
var hs=player.getCards('h');
for(var i=0;i<hs.length;i++){
if(!player.storage.yunyin.includes(get.suit(hs[i]))) return true;
}
return false;
},
group:['yunyin_count','yunyin_set'],
content(){
'step 0'
player.chooseToDiscard(get.prompt('yunyin'),function(card){
if(!player.storage.yunyin) return true;
return !player.storage.yunyin.includes(get.suit(card));
}).set('logSkill','yunyin').ai=function(card){
return 9-get.value(card);
}
'step 1'
if(!result.bool){
event.finish();
return;
}
var list=[];
for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i];
var type=get.type(name);
if(type=='trick'||type=='basic'){
if(lib.filter.cardEnabled({name:name},player)){
list.push([get.translation(type),'',name]);
}
}
}
var dialog=ui.create.dialog('云音',[list,'vcard']);
var taoyuan=0,nanman=0;
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
var eff1=get.effect(players[i],{name:'taoyuan'},player,player);
var eff2=get.effect(players[i],{name:'nanman'},player,player);
if(eff1>0){
taoyuan++;
}
else if(eff1<0){
taoyuan--;
}
if(eff2>0){
nanman++;
}
else if(eff2<0){
nanman--;
}
}
player.chooseButton(dialog).ai=function(button){
var name=button.link[2];
if(Math.max(taoyuan,nanman)>1){
if(taoyuan>nanman) return name=='taoyuan'?1:0;
return name=='nanman'?1:0;
}
if(player.countCards('h')<player.hp&&player.hp>=2){
return name=='wuzhong'?1:0;
}
if(player.hp<player.maxHp&&player.hp<3){
return name=='tao'?1:0;
}
return name=='zengbin'?1:0;
}
'step 2'
if(result.bool){
player.chooseUseTarget(true,result.links[0][2]);
}
},
ai:{
threaten:1.5,
}
},
shishui:{
trigger:{player:'useCardToBegin'},
filter(event,player){
return event.target&&get.color(event.card)=='red';
},
forced:true,
check(event,player){
return get.attitude(player,event.player)<0;
},
content(){
'step 0'
if(get.info(trigger.card).multitarget){
event.list=trigger.targets.slice(0);
}
else{
trigger.target.loseHp();
event.finish();
}
'step 1'
if(event.list.length){
event.list.shift().loseHp();
event.redo();
}
},
ai:{
halfneg:true,
effect:{
player(card,player,target,current){
if(get.color(card)=='red') return [1,0,1,-2];
}
}
}
},
chizhen:{
trigger:{player:'phaseUseBegin'},
frequent:true,
content(){
'step 0'
event.num=Math.max(1,player.maxHp-player.hp);
player.draw(event.num);
'step 1'
player.chooseToDiscard('he',event.num,true);
'step 2'
var useCard=false;
if(result.bool&&result.cards){
for(var i=0;i<result.cards.length;i++){
if(result.cards[i].name=='sha'){
useCard=true;break;
}
}
}
if(useCard){
player.chooseTarget('是否视为使用一张决斗?',function(card,player,target){
return lib.filter.targetEnabled({name:'juedou'},player,target);
}).set('ai',function(target){
return get.effect(target,{name:'juedou'},_status.event.player);
});
}
else{
event.finish();
}
'step 3'
if(result.bool){
player.useCard({name:'juedou'},result.targets);
}
},
ai:{
threaten(player,target){
return Math.sqrt(Math.max(1,target.maxHp-target.hp));
}
}
},
xiuhua:{
trigger:{global:['loseEnd','discardAfter']},
filter(event,player){
if(event.player==player) return false;
if(event.name=='lose'&&event.parent.name!='equip') return false;
for(var i=0;i<event.cards.length;i++){
if(get.type(event.cards[i])=='equip'&&get.position(event.cards[i])=='d'){
return true;
}
}
},
frequent:true,
content(){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
var cards=[];
for(var i=0;i<trigger.cards.length;i++){
if(get.type(trigger.cards[i])=='equip'&&get.position(trigger.cards[i])=='d'){
cards.push(trigger.cards[i]);
}
}
if(cards.length){
player.gain(cards,'gain2','log');
}
}
},
liuying:{
trigger:{player:'useCardAfter'},
filter(event,player){
if(!player.storage.liuying) player.storage.liuying=[];
return event.card&&event.card.name=='sha'&&game.hasPlayer(function(current){
return !player.storage.liuying.includes(current)&&player.canUse('sha',current,false);
});
},
direct:true,
content(){
'step 0'
player.chooseTarget(get.prompt('liuying'),function(card,player,target){
return !player.storage.liuying.includes(target)&&player.canUse('sha',target,false);
}).ai=function(target){
return get.effect(target,{name:'sha'},player,player);
};
'step 1'
if(result.bool){
player.logSkill('liuying',result.targets);
event.target=result.targets[0];
var cards=get.cards();
player.showCards(cards,get.translation(player)+'对'+get.translation(result.targets)+'发动了【流影】');
event.bool=(get.color(cards[0])=='black');
}
else{
event.finish();
}
'step 2'
if(event.bool){
player.useCard({name:'sha'},event.target,false).animate=false;
}
},
group:['liuying_count1','liuying_count2'],
subSkill:{
count1:{
trigger:{player:'shaAfter'},
silent:true,
content(){
if(!player.storage.liuying) player.storage.liuying=[];
player.storage.liuying.add(trigger.target);
}
},
count2:{
trigger:{player:'phaseAfter'},
silent:true,
content(){
delete player.storage.liuying;
}
}
}
},
yanjia:{
enable:'phaseUse',
filter(event,player){
var he=player.getCards('he');
var num=0;
for(var i=0;i<he.length;i++){
var info=lib.card[he[i].name];
if(info.type=='equip'&&!info.nomod&&!info.unique&&lib.inpile.includes(he[i].name)){
num++;
if(num>=2) return true;
}
}
},
filterCard(card){
if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return false;
var info=get.info(card);
return info.type=='equip'&&!info.nomod&&!info.unique&&lib.inpile.includes(card.name);
},
selectCard:2,
position:'he',
check(card){
return get.value(card);
},
content(){
var name=cards[0].name+'_'+cards[1].name;
var info1=get.info(cards[0]),info2=get.info(cards[1]);
if(!lib.card[name]){
var info={
enable:true,
type:'equip',
subtype:get.subtype(cards[0]),
vanish:true,
cardimage:info1.cardimage||cards[0].name,
filterTarget(card,player,target){
return target==player;
},
selectTarget:-1,
modTarget:true,
content:lib.element.content.equipCard,
legend:true,
source:[cards[0].name,cards[1].name],
onEquip:[],
onLose:[],
skills:[],
distance:{},
ai:{
order:8.9,
equipValue:10,
useful:2.5,
value(card,player){
var value=0;
var info=get.info(card);
var current=player.getEquip(info.subtype);
if(current&&card!=current){
value=get.value(current,player);
}
var equipValue=info.ai.equipValue||info.ai.basic.equipValue;
if(typeof equipValue=='function') return equipValue(card,player)-value;
return equipValue-value;
},
result:{
target(player,target){
return get.equipResult(player,target,name);
}
}
}
}
for(var i in info1.distance){
info.distance[i]=info1.distance[i];
}
for(var i in info2.distance){
if(typeof info.distance[i]=='number'){
info.distance[i]+=info2.distance[i];
}
else{
info.distance[i]=info2.distance[i];
}
}
if(info1.skills){
info.skills=info.skills.concat(info1.skills);
}
if(info2.skills){
info.skills=info.skills.concat(info2.skills);
}
if(info1.onEquip){
if(Array.isArray(info1.onEquip)){
info.onEquip=info.onEquip.concat(info1.onEquip);
}
else{
info.onEquip.push(info1.onEquip);
}
}
if(info2.onEquip){
if(Array.isArray(info2.onEquip)){
info.onEquip=info.onEquip.concat(info2.onEquip);
}
else{
info.onEquip.push(info2.onEquip);
}
}
if(info1.onLose){
if(Array.isArray(info1.onLose)){
info.onLose=info.onLose.concat(info1.onLose);
}
else{
info.onLose.push(info1.onLose);
}
}
if(info2.onLose){
if(Array.isArray(info2.onLose)){
info.onLose=info.onLose.concat(info2.onLose);
}
else{
info.onLose.push(info2.onLose);
}
}
if(info.onEquip.length==0) delete info.onEquip;
if(info.onLose.length==0) delete info.onLose;
lib.card[name]=info;
lib.translate[name]=get.translation(cards[0].name,'skill')+get.translation(cards[1].name,'skill');
var str=lib.translate[cards[0].name+'_info'];
if(str[str.length-1]=='.'||str[str.length-1]=='。'){
str=str.slice(0,str.length-1);
}
lib.translate[name+'_info']=str+''+lib.translate[cards[1].name+'_info'];
try{
game.addVideo('newcard',null,{
name:name,
translate:lib.translate[name],
info:lib.translate[name+'_info'],
card:cards[0].name,
legend:true,
});
}
catch(e){
console.log(e);
}
}
player.gain(game.createCard({name:name,suit:cards[0].suit,number:cards[0].number}),'gain2');
},
ai:{
order:9.5,
result:{
player:1
}
}
},
meiying:{
globalSilent:true,
trigger:{global:'phaseEnd'},
filter(event,player){
return event.player!=player&&event.player.isAlive()&&player.countCards('he',{color:'red'})>0&&event.player.getHistory('useCard',evt=>{
return evt.targets&&evt.targets.some(i=>i!==event.player);
}).length===0;
},
direct:true,
content(){
"step 0"
var next=player.chooseToDiscard('he','魅影:是否弃置一张红色牌视为对'+get.translation(trigger.player)+'使用一张杀?');
next.logSkill=['meiying',trigger.player];
var eff=get.effect(trigger.player,{name:'sha'},player,player);
next.ai=function(card){
if(eff>0){
return 7-get.value(card);
}
return 0;
}
"step 1"
if(result.bool){
player.useCard({name:'sha'},trigger.player).animate=false;
}
},
ai:{
expose:0.1
}
},
jianwu:{
trigger:{player:'shaBegin'},
forced:true,
filter(event,player){
return get.distance(event.target,player,'attack')>1;
},
content(){
trigger.directHit=true;
}
},
zuizhan:{
trigger:{player:'useCard'},
popup:false,
filter(event,player){
if(event.card.name!='sha') return false;
return game.hasPlayer(function(current){
return (event.targets.includes(current)==false&&current!=player&&
lib.filter.targetEnabled(event.card,player,current))
});
},
content(){
var list=game.filterPlayer(function(current){
return (trigger.targets.includes(current)==false&&current!=player&&
lib.filter.targetEnabled(trigger.card,player,current))
});
if(list.length){
event.target=list.randomGet();
player.line(event.target,'green');
game.log(event.target,'被追加为额外目标');
trigger.targets.push(event.target);
player.draw();
}
}
},
xidie:{
trigger:{player:'phaseBegin'},
direct:true,
filter(event,player){
return player.countCards('h')>player.hp;
},
content(){
"step 0"
var next=player.chooseToDiscard(get.prompt('xidie'),[1,Math.min(3,player.countCards('h')-player.hp)]);
next.ai=function(card){
return 6-get.value(card);
}
next.logSkill='xidie';
"step 1"
if(result.bool){
player.storage.xidie=result.cards.length;
}
},
group:'xidie2'
},
xidie2:{
trigger:{player:'phaseEnd'},
forced:true,
filter(event,player){
return player.storage.xidie>0;
},
content(){
player.draw(player.storage.xidie);
player.storage.xidie=0;
}
},
meihu:{
trigger:{player:'damageEnd'},
check(event,player){
return get.attitude(player,event.source)<4;
},
filter(event,player){
return event.source&&event.source!=player&&event.source.countCards('h')>0;
},
logTarget:'source',
content(){
"step 0"
trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌',true).ai=function(card){
return -get.value(card);
};
"step 1"
if(result.bool){
player.gain(result.cards[0],trigger.source);
trigger.source.$give(1,player);
}
},
ai:{
maixie_defend:true,
effect:{
target(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5];
return [1,0,0,-0.5];
}
}
}
}
},
xlqianhuan:{
trigger:{player:'phaseAfter'},
check(event,player){
return player.hp==1||player.isTurnedOver();
},
filter(event,player){
return player.hp<player.maxHp;
},
content(){
"step 0"
player.recover();
"step 1"
player.turnOver();
},
mod:{
targetEnabled(card,player,target){
if(target.isTurnedOver()) return false;
},
cardEnabled(card,player){
if(player.isTurnedOver()) return false;
}
}
},
fumo:{
trigger:{player:'damageAfter'},
filter(event,player){
return event.source&&event.source.isAlive()&&player.countCards('h',{color:'red'})>1||player.countCards('h',{color:'black'})>1;
},
direct:true,
content(){
"step 0"
var next=player.chooseToDiscard(get.prompt('fumo',trigger.source),2,function(card){
if(get.damageEffect(trigger.source,player,player,'thunder')<=0) return 0;
if(ui.selected.cards.length){
return get.color(card)==get.color(ui.selected.cards[0]);
}
return player.countCards('h',{color:get.color(card)})>1;
}).set('complexCard',true);
next.ai=function(card){
if(get.damageEffect(trigger.source,player,player,'thunder')>0){
return 8-get.value(card);
}
return 0;
};
next.logSkill=['fumo',trigger.source,'thunder'];
"step 1"
if(result.bool){
trigger.source.damage('thunder');
}
},
ai:{
maixie_defend:true,
threaten:0.8
}
},
fanyin:{
trigger:{player:'phaseEnd'},
direct:true,
content(){
"step 0"
player.chooseTarget(get.prompt('fanyin'),function(card,player,target){
// if(player==target) return false;
if(target.isLinked()) return true;
if(target.isTurnedOver()) return true;
if(target.countCards('j')) return true;
if(target.isMinHp()&&target.isDamaged()) return true;
return false;
}).ai=function(target){
var num=0;
var att=get.attitude(player,target);
if(att>0){
if(target.isMinHp()){
num+=5;
}
if(target.isTurnedOver()){
num+=5;
}
if(target.countCards('j')){
num+=2;
}
if(target.isLinked()){
num++;
}
if(num>0){
return num+att;
}
}
return num;
}
"step 1"
if(result.bool){
event.target=result.targets[0];
player.logSkill('fanyin',event.target);
}
else{
event.finish();
}
"step 2"
if(event.target.isLinked()){
event.target.link();
}
"step 3"
if(event.target.isTurnedOver()){
event.target.turnOver();
}
"step 4"
var cards=event.target.getCards('j');
if(cards.length){
event.target.discard(cards);
}
"step 5"
if(event.target.isMinHp()){
event.target.recover();
}
},
ai:{
expose:0.2,
threaten:1.3
}
},
mingkong:{
trigger:{player:'damageBegin'},
forced:true,
filter(event,player){
return player.countCards('h')==0&&event.num>=1;
},
content(){
if(trigger.num>=1){
trigger.num--;
}
if(trigger.source){
trigger.source.storage.mingkong=true;
trigger.source.addTempSkill('mingkong2');
}
},
ai:{
effect:{
target(card,player,target){
if(get.tag(card,'damage')&&target.countCards('h')==0){
if(player.hasSkillTag('jueqing',false,target)) return;
return 0.1;
}
}
}
},
},
mingkong2:{
trigger:{source:['damageEnd','damageZero']},
forced:true,
popup:false,
audio:false,
vanish:true,
filter(event,player){
return player.storage.mingkong?true:false;
},
content(){
player.draw();
player.storage.mingkong=false;
player.removeSkill('mingkong2');
}
},
yuehua:{
trigger:{player:['useCardAfter','respondAfter','discardAfter']},
frequent:true,
filter(event,player){
if(player==_status.currentPhase) return false;
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(get.color(event.cards[i])=='red'&&
event.cards[i].original!='j') return true;
}
}
return false;
},
content(){
player.draw();
},
ai:{
threaten:0.7
}
},
qinglan:{
trigger:{global:'damageBefore'},
filter(event,player){
return Boolean(event.nature)&&player.countCards('he')>0;
},
direct:true,
priority:-5,
content(){
"step 0"
var next=player.chooseToDiscard(get.prompt('qinglan',trigger.player),'he');
next.logSkill=['qinglan',trigger.player];
next.ai=function(card){
if(trigger.num>1||!trigger.source){
if(get.attitude(player,trigger.player)>0){
return 9-get.value(card);
}
return -1;
}
else if(get.attitude(player,trigger.player)>0){
if(trigger.player.hp==1){
return 8-get.value(card);
}
if(trigger.source.hp==trigger.source.maxHp){
return 6-get.value(card);
}
}
else if(get.attitude(player,trigger.source)>0&&
trigger.source.hp<trigger.source.maxHp&&trigger.num<=1&&trigger.player.hp>1){
if(get.color(card)=='red') return 5-get.value(card);
}
return -1;
}
"step 1"
if(result.bool){
trigger.cancel();
if(trigger.source){
trigger.source.recover();
}
}
else{
event.finish();
}
"step 2"
if(trigger.source){
trigger.source.draw();
}
},
ai:{
expose:0.1
}
},
fanshi:{
trigger:{player:'phaseDiscardAfter'},
forced:true,
filter(event,player){
return player.getStat('damage')>0;
},
check(event,player){
return player.hp==player.maxHp;
},
content(){
"step 0"
player.loseHp();
"step 1"
player.draw();
}
},
xuelu:{
unique:true,
trigger:{player:'phaseEnd'},
direct:true,
filter(event,player){
return player.maxHp>player.hp&&player.countCards('he',{color:'red'})>0;
},
// alter:true,
content(){
"step 0"
player.chooseCardTarget({
position:'he',
filterTarget(card,player,target){
return player!=target;
},
filterCard(card,player){
return get.color(card)=='red'&&lib.filter.cardDiscardable(card,player);
},
ai1(card){
return 9-get.value(card);
},
ai2(target){
return get.damageEffect(target,player,player,'fire');
},
prompt:get.prompt('xuelu')
});
"step 1"
if(result.bool){
event.target=result.targets[0];
player.logSkill('xuelu',event.target,'fire');
if(get.is.altered('xuelu')){
event.num=1;
}
else{
event.num=Math.min(2,Math.ceil((player.maxHp-player.hp)/2));
}
player.discard(result.cards);
}
else{
event.finish();
}
"step 2"
if(event.target){
event.target.damage(event.num,'fire');
}
},
ai:{
maixie:true,
expose:0.2,
threaten(player,target){
if(target.hp==1) return 3;
if(target.hp==2) return 1.5;
return 0.5;
},
effect:{
target(card,player,target){
if(!target.hasFriend()) return;
if(get.tag(card,'damage')){
if(target.hp==target.maxHp) return [0,1];
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
xiuhua_old:{
changeSeat:true,
trigger:{player:'shaHit'},
filter(event,player){
return event.target!=player.previous;
},
content(){
game.swapSeat(trigger.target,player,true,true);
}
},
shahun:{
enable:'chooseToUse',
skillAnimation:true,
animationColor:'fire',
derivation:'juejing',
// alter:true,
filter(event,player){
return !player.storage.shahun&&player.hp<=0;
},
content(){
"step 0"
var cards=player.getCards('hej');
player.discard(cards);
"step 1"
if(player.isLinked()) player.link();
"step 2"
if(player.isTurnedOver()) player.turnOver();
"step 3"
player.draw(3);
"step 4"
player.recover(1-player.hp);
player.removeSkill('fanshi');
player.addSkill('juejing');
player.storage.shahun=2;
player.markSkill('shahun');
game.addVideo('storage',player,['shahun',player.storage.shahun]);
},
group:'shahun2',
intro:{
content:'turn'
},
ai:{
save:true,
skillTagFilter(player){
if(player.storage.shahun) return false;
if(player.hp>0) return false;
},
result:{
player:3
}
}
},
shahun2:{
trigger:{player:'phaseAfter'},
forced:true,
filter(event,player){
return player.storage.shahun?true:false;
},
content(){
if(player.storage.shahun>1){
player.storage.shahun--;
game.addVideo('storage',player,['shahun',player.storage.shahun]);
}
else{
player.die();
}
}
},
yanjia_old:{
enable:'chooseToUse',
filter(event,player){
return player.countCards('he',{type:'equip'})>0;
},
filterCard(card){
return get.type(card)=='equip';
},
position:'he',
viewAs:{name:'wuzhong'},
prompt:'将一张装备牌当无中生有使用',
check(card){
var player=_status.currentPhase;
if(player.countCards('he',{subtype:get.subtype(card)})>1){
return 11-get.equipValue(card);
}
if(player.countCards('h')<player.hp){
return 6-get.value(card);
}
return 2-get.equipValue(card);
},
ai:{
order:9,
threaten:1.1
}
},
jizhan:{
enable:'phaseUse',
usable:1,
changeSeat:true,
filterTarget(card,player,target){
return player!=target&&player.next!=target&&player.canUse('sha',target,false);
},
filter(event,player){
var min=Math.max(1,player.maxHp-player.hp);
return lib.filter.filterCard({name:'sha'},player);
},
content(){
game.swapSeat(player,target,true,true);
player.useCard({name:'sha'},target,false);
},
ai:{
result:{
target(player,target){
return get.effect(target,{name:'sha'},player,target);
},
},
order:4,
}
},
qianjun:{
trigger:{player:'useCard'},
direct:true,
filter(event,player){
if(event.card.name!='sha') return false;
if(event.targets.length!=1) return false;
if(!player.countCards('he')) return false;
var target=event.targets[0];
return game.hasPlayer(function(current){
return player!=current&&target!=current&&get.distance(target,current)<=1;
});
},
content(){
"step 0"
event.targets=game.filterPlayer(function(current){
var target=trigger.targets[0];
return player!=current&&target!=current&&get.distance(target,current)<=1;
});
var num=0;
for(var i=0;i<event.targets.length;i++){
num+=get.effect(event.targets[i],{name:'sha'},player,player);
}
var next=player.chooseToDiscard(get.prompt('qianjun',event.targets),'he');
next.logSkill=['qianjun',event.targets];
next.ai=function(card){
if(num<=0) return -1;
return 7-get.value(card);
}
"step 1"
if(result.bool){
for(var i=0;i<targets.length;i++){
trigger.targets.add(targets[i]);
// targets[i].classList.add('selected');
}
}
}
},
xuanning:{
group:['xuanning1','xuanning2'],
intro:{
content:'mark'
},
ai:{
threaten:0.9
}
},
xuanning1:{
enable:'phaseUse',
usable:1,
filter(event,player){
return player.countCards('h',{type:'basic'})>0&&player.storage.xuanning!=3;
},
filterCard(card){
return get.type(card)=='basic';
},
check(card){
return 7-get.useful(card);
},
content(){
player.storage.xuanning=3;
player.markSkill('xuanning');
game.addVideo('storage',player,['xuanning',player.storage.xuanning]);
},
ai:{
result:{
player(player){
var num=player.countCards('h');
if(num>player.hp+1) return 1;
if(player.storage.xuanning>=2) return 0;
if(num>player.hp) return 1
if(player.storage.xuanning>=1) return 0;
return 1;
},
},
order:5
}
},
xuanning2:{
trigger:{player:'damageEnd'},
forced:true,
filter(event,player){
if(player.storage.xuanning){
return (event.source&&event.source.countCards('he')>0);
}
return false;
},
logTarget:'source',
content(){
var he=trigger.source.getCards('he');
if(he.length){
trigger.source.discard(he.randomGet());
}
player.storage.xuanning--;
if(!player.storage.xuanning){
player.unmarkSkill('xuanning');
}
game.addVideo('storage',player,['xuanning',player.storage.xuanning]);
},
ai:{
maixie_defend:true,
}
},
liuguang:{
trigger:{player:'phaseBegin'},
direct:true,
filter(event,player){
if(player.storage.xuanning) return true;
return false;
},
content(){
"step 0"
player.chooseTarget(function(card,player,target){
return player!=target;
},get.prompt('liuguang'),[1,3]).ai=function(target){
return get.damageEffect(target,player,player);
}
"step 1"
if(result.bool){
player.storage.xuanning--;
if(!player.storage.xuanning){
player.unmarkSkill('xuanning');
}
event.targets=result.targets.slice(0);
event.targets.sort(lib.sort.seat);
player.logSkill('liuguang',result.targets);
game.addVideo('storage',player,['xuanning',player.storage.xuanning]);
}
else{
event.finish();
}
"step 2"
if(event.targets.length){
var target=event.targets.shift();
var next=target.chooseToDiscard('流光弃置一张牌或受到1点伤害','he');
next.ai=function(card){
if(get.damageEffect(_status.event.player,player,_status.event.player)>=0) return -1;
if(_status.event.player.hp==1) return 9-get.value(card);
return 8-get.value(card);
};
next.autochoose=function(){
return this.player.countCards('he')==0;
};
event.current=target;
}
else{
event.finish();
}
"step 3"
if(result.bool&&result.cards&&result.cards.length){
event.goto(2);
}
else{
event.current.damage();
}
},
ai:{
expose:0.2,
threaten:1.3
}
},
yangming:{
enable:'phaseUse',
filter(event,player){
if(player.storage.yangming2>0) return false;
return player.countCards('h',{color:'red'})>0;
},
filterCard(card){
return get.color(card)=='red';
},
content(){
player.storage.yangming2=2;
player.addSkill('yangming2');
game.addVideo('storage',player,['yangming2',player.storage.yangming2]);
},
check(card){
return 6-get.value(card);
},
ai:{
result:{
player(player){
if(player.countCards('h')<=player.hp&&player.hp==player.maxHp){
return 0;
}
return 1;
}
},
order:6,
threaten:1.3
}
},
yangming2:{
trigger:{player:'phaseUseEnd'},
direct:true,
mark:true,
content(){
"step 0"
player.storage.yangming2--;
game.addVideo('storage',player,['yangming2',player.storage.yangming2]);
if(player.storage.yangming2>0){
event.finish();
}
else{
player.removeSkill('yangming2');
var num=game.countPlayer(function(current){
return get.distance(player,current)<=1&&current.isDamaged();
});
if(num==0){
event.finish();
}
else{
player.chooseTarget(function(card,player,target){
return get.distance(player,target)<=1&&target.hp<target.maxHp;
},'请选择目标回复体力',[1,num]);
}
}
"step 1"
if(result.bool){
player.logSkill('yangming',result.targets);
for(var i=0;i<result.targets.length;i++){
result.targets[i].recover();
}
}
},
intro:{
content:'turn'
},
},
zhaolu:{
unique:true,
mark:true,
check(){
return false;
},
init(player){
player.storage.zhaolu=Math.min(5,game.players.length);
game.addVideo('storage',player,['zhaolu',player.storage.zhaolu]);
},
trigger:{player:['phaseEnd','damageEnd'],global:'dieAfter'},
forced:true,
content(){
var num=2;
if(typeof trigger.num=='number') num=2*trigger.num;
if(trigger.name=='phase') num=1;
if(trigger.name=='die') num=2;
player.storage.zhaolu-=num;
if(player.storage.zhaolu<=0){
player.loseMaxHp(true);
player.storage.zhaolu=Math.min(5,game.players.length);
}
game.addVideo('storage',player,['zhaolu',player.storage.zhaolu]);
},
intro:{
content:'turn'
},
ai:{
neg:true,
mingzhi:false,
threaten:0.8
},
},
jiehuo:{
unique:true,
skillAnimation:true,
animationColor:'fire',
enable:'phaseUse',
line:'fire',
filterTarget(card,player,target){
return player!=target;
},
content(){
'step 0'
target.damage(2,'fire');
player.awakenSkill('jiehuo');
'step 1'
player.die();
},
ai:{
order:1,
result:{
player(player,target){
if(player.hp>1) return false;
if(target.hp>2) return false;
if(get.attitude(player,target)>=0) return false;
return get.damageEffect(target,player,player,'fire');
}
}
}
},
jiehuo_old:{
unique:true,
forbid:['infinity'],
skillAnimation:true,
animationColor:'fire',
init(player){
player.storage.jiehuo=false;
},
enable:'phaseUse',
filter(event,player){
//if(player.maxHp<=1) return false;
return !player.storage.jiehuo
},
intro:{
content:'limited'
},
// mark:true,
line:'fire',
filterTarget(card,player,target){
return player!=target;
},
selectTarget:-1,
content(){
if(!player.storage.jiehuo2){
player.storage.jiehuo2=player.maxHp;
player.addSkill('jiehuo2');
}
player.storage.jiehuo=true;
target.damage(Math.min(target.hp,player.storage.jiehuo2),'fire');
}
},
jiehuo2:{
trigger:{player:'phaseUseEnd'},
forced:true,
popup:false,
content(){
player.die();
}
},
yuling:{
unique:true,
locked:true,
group:['yuling1','yuling2','yuling3','yuling4','yuling5','yuling6'],
intro:{
content:'time'
},
// alter:true,
ai:{
noh:true,
threaten:0.8,
effect:{
target(card,player,target){
if(card.name=='bingliang') return 0;
if(card.name=='lebu') return 1.5;
if(card.name=='guohe'){
if(!target.countCards('e')) return 0;
return 0.5;
}
if(card.name=='liuxinghuoyu') return 0;
}
}
}
},
yuling1:{
trigger:{player:['phaseDrawBefore','phaseDiscardBefore']},
priority:10,
forced:true,
popup:false,
check(){
return false;
},
content(){
trigger.cancel();
}
},
yuling2:{
trigger:{player:['loseEnd','drawEnd'],global:'gameDrawAfter'},
check(event,player){
return player.countCards('h')<2;
},
priority:10,
forced:true,
filter(event,player){
return player.countCards('h')<5;
},
content(){
player.draw(5-player.countCards('h'));
}
},
yuling3:{
trigger:{player:'gainEnd'},
priority:10,
forced:true,
filter(event,player){
return player.countCards('h')>5;
},
check(event,player){
return player.countCards('h')<2;
},
content(){
player.chooseToDiscard(true,player.countCards('h')-5);
}
},
yuling4:{
mod:{
cardEnabled(card,player){
if(_status.currentPhase!=player) return;
var num=2;
if(get.is.altered('yuling')) num=1;
if(player.countUsed()>=player.maxHp+num) return false;
}
}
},
yuling5:{
trigger:{player:['useCardAfter','phaseBegin']},
silent:true,
content(){
player.storage.yuling=player.maxHp+2-player.countUsed();
}
},
yuling6:{
trigger:{player:'phaseAfter'},
silent:true,
content(){
delete player.storage.yuling;
}
},
},
translate:{
gjqt_bailitusu:'百里屠苏',
gjqt_fengqingxue:'风晴雪',
gjqt_fanglansheng:'方兰生',
gjqt_xiangling:'襄铃',
gjqt_yinqianshang:'尹千觞',
gjqt_hongyu:'红玉',
gjqt_ouyangshaogong:'欧阳少恭',
gjqt_xunfang:'巽芳',
gjqt_yuewuyi:'乐无异',
gjqt_wenrenyu:'闻人羽',
gjqt_xiayize:'夏夷则',
gjqt_aruan:'阿阮',
gjqt_xieyi:'谢衣',
gjqt_yanjiaxieyi:'偃甲谢衣',
gjqt_chuqi:'初七',
gjqt_beiluo:'北洛',
gjqt_yunwuyue:'云无月',
gjqt_cenying:'岑缨',
yunyou:'云游',
yunyou_info:'每两轮限一次,出牌阶段,你可以发现一张地图牌本局未使用过的地图牌并使用之。',
xuanzhen:'玄阵',
// xuanzhen_bg:'阵',
xuanzhen_info:'每轮限一次,当你成为一名其他角色的卡牌惟一目标时,你可以发现一张牌代替此牌。',
qingshu:'青书',
qingshu_info:'结束阶段,你可以令一名角色永久获得一个你使用过且不是当前地图的地图牌效果(每个地图最多发动一次)。',
yanjiadan_heart:'偃甲蛋',
yanjiadan_heart_info:'可以当作紫阳丹、玉女元参或沙棠使用。',
yanjiadan_diamond:'偃甲蛋',
yanjiadan_diamond_info:'可以当作流风散、舒筋散或神火飞鸦使用。',
yanjiadan_club:'偃甲蛋',
yanjiadan_club_info:'可以当作天女散花、六骰格或锦里针使用。',
yanjiadan_spade:'偃甲蛋',
yanjiadan_spade_info:'可以当作飞镖、乾坤镖或龙须钩使用。',
lingyan:'灵偃',
lingyan_bg:'偃',
lingyan_info:'出牌阶段限一次,你可以将一张点数与武将牌上的牌均不同的手牌置于武将牌上,然后获得与其花色对应的一枚偃甲蛋。',
xunjian:'寻剑',
xunjian_info:'锁定技每当你使用或打出一张牌若牌堆中有同名牌你有X的机率获得之X为你的“灵偃”牌数/13。',
xunjian_old_info:'觉醒技,结束阶段,若你武将牌上有十三张牌,你失去技能灵偃并获得技能通天。',
tongtian:'通天',
tongtian_info:'锁定技,在你使用或打出一张牌后,若敌方角色手中有同名牌,你随机获得其中一张。',
xianju:'仙居',
xianju_info:'锁定技,奇数游戏轮次开始时,你获得潜行直到下一轮开始;偶数游戏轮次开始时,你随机获得一张机关牌。',
xuanci:'旋刺',
xuanci_info:'出牌阶段限一次,你可以将一张梅花牌当作飞镖使用;锁定技,你使用飞镖无距离限制,你使用飞镖后对目标结算后视为对目标使用一张杀。',
humeng:'湖梦',
humeng_sub:'偃甲谢衣',
humeng_info:'觉醒技当你使用过4种不同的偃甲蛋后你获得替身偃甲谢衣觉醒技当你进入濒死状态时你弃置所有牌摸四张牌变身为初七并激活偃甲谢衣。',
yange:'魇歌',
yange_info:'游戏开始时,你获得数量等于敌方角色数的“魇”标记;准备阶段开始时,你可以移去一枚“魇”标记并变为一名其他存活角色的复制,此回合结束后你变回原角色。',
woxue:'卧雪',
woxue_info:'每当你于回合外使用或打出一张牌,你可以视为对当前回合角色使用【白霜】。',
lingnu:'灵怒',
lingnu_info:'锁定技每当你造成1点伤害你随机获得一个与杀相关的技能技能在你行动3回合后消失同一时间最多拥有3个以此法获得的技能。',
zhenying:'振影',
zhenying_info:'每当你使用或打出一张非转化的黑色牌(装备或延时锦囊牌除外),你可以获得一张此牌的“替身”;你使用或打出“替身”牌后需弃置一张牌(没有则不弃);当前回合结束后,“替身”牌消失。',
cihong:'刺鸿',
cihong_bg:'鸿',
cihong_info:'每三轮限一次结束阶段你可以指定一名其他角色并可以依次选择1. 弃置一张红色牌2. 失去1点体力3. 将武将牌翻至背面;每选择一项,视为对目标使用一张杀。',
lianjing:'莲境',
lianjing_info:'每两轮限一次回合结束后你可以选择至多2名其他角色将其他角色移出游戏然后你与所选的角色依次进行一个回合。',
zuiji:'醉饮',
zuiji_info:'出牌阶段,你可以将一张手牌或装备牌当作酒使用。',
manwu:'曼舞',
manwu_info:'在一名角色的结束阶段,若其手牌数为全场最少或之一,你可以令其摸一张牌。',
xfanghua:'芳华',
xfanghua_info:'在你成为红色牌的目标后你可以回复1点体力。',
yunyin:'云音',
yunyin_info:'结束阶段,你可以弃置一张与本回合使用过的卡牌花色均不相同的手牌,视为使用一张基本牌或普通锦囊牌。',
shishui:'逝水',
shishui_info:'锁定技每当你使用一张红色牌你令目标失去1点体力。',
duhun:'渡魂',
duhun_info:'濒死阶段你可以与一名体力值不超过你的体力上限的角色拼点若你赢你失去1点体力上限并与该角色交换体力值若你没赢你立即死亡。',
duhun_info_alter:'濒死阶段你可以与一名体力值不超过你的体力上限的角色拼点若你赢你失去1点体力上限并将体力值回复至与该角色相同若你没赢你立即死亡。',
chizhen:'驰阵',
chizhen_info:'出牌阶段开始时你可以摸X张牌并弃置X张牌若你弃置了杀可以视为使用一张决斗X为你已损失的体力值且至少为1。',
xidie:'戏蝶',
xidie2:'戏蝶',
xidie_info:'准备阶段若你的手牌数大于体力值可以弃置至多X张牌并于结束阶段摸等量的牌X为你的体力值与手牌数之差且不超过3。',
meihu:'魅狐',
meihu2:'魅狐',
meihu_info:'当你受到伤害后,可令伤害来源交给你一张手牌。',
jianwu:'剑舞',
jianwu_info:'锁定技,攻击范围不含你的角色无法闪避你的杀。',
meiying:'魅影',
meiying_info:'一名其他角色的回合结束时,若其未于此回合内使用过指定另一名角色为目标的牌,你可以弃置一张红色牌视为对其使用一张杀。',
zuizhan:'乱斩',
zuizhan_info:'每当你使用一张杀,可以摸一张牌,然后此杀随机增加一个额外目标。',
xlqianhuan:'千幻',
xlqianhuan_info:'回合结束后若你已受伤你可以回复1点体力并将武将牌翻面。若你的武将牌背面朝上你不能使用卡牌也不能成为卡牌的目标。',
fumo:'伏魔',
fumo_info:'每当你受到一次伤害可以弃置两张颜色相同的手牌并对伤害来源造成1点雷电伤害。',
fanyin:'梵音',
fanyin_info:'结束阶段你可以令一名角色复原武将牌并移除判定区内的牌若其体力值是全场最少的之一其回复1点体力。',
mingkong:'明空',
mingkong_info:'锁定技,若你没有手牌,你受到的伤害-1然后伤害来源摸一张牌。',
qinglan:'晴岚',
qinglan_info:'每当有一名角色即将受到属性伤害你可以弃置一张牌令其防止此伤害然后伤害来源摸一张牌并回复1点体力。',
yuehua:'月华',
yuehua_info:'每当你于回合外使用、打出或弃置红色牌,你可以摸一张牌。',
xuelu:'血戮',
xuelu_info:'结束阶段若你已受伤你可以弃置一张红色牌并对一名其他角色造成1点火焰伤害若你已损失体力值不少于3改为造成2点火焰伤害。',
xuelu_info_alter:'结束阶段若你已受伤你可以弃置一张红色牌并对一名其他角色造成1点火焰伤害。',
fanshi:'反噬',
fanshi_info:'锁定技弃牌阶段结束时若你本回合内造成过伤害你失去1点体力并摸一张牌。',
shahun:'煞魂',
shahun2:'煞魂',
shahun_info:'限定技濒死阶段你可以复原武将牌弃置所有牌并摸三张牌然后将体力回复至1若如此做你失去技能〖反噬〗获得技能〖绝境〗并于两回合后立即死亡。',
shahun_info_alter:'限定技濒死阶段你可以复原武将牌弃置所有牌并摸三张牌然后将体力回复至1若如此做你失去技能〖反噬〗获得技能〖绝境〗并于两回合后立即死亡。',
yanjia:'偃甲',
yanjia_info:'出牌阶段,你可以将两张非特殊装备牌合成为一张强化装备。',
xiuhua:'袖花',
xiuhua_info:'每当一件其他角色的装备因被替换或弃置进入弃牌堆,你可以获得之。',
liuying:'流影',
liuying_info:'每当你使用一张杀结算完毕后,你可以指定一名本回合未成为过你的杀的目标的角色,并亮出牌堆顶的一张牌,若为黑色,你对该角色使用一张杀。',
boyun:'拨云',
boyun1:'拨云',
boyun2:'拨云',
boyun_info:'在你的回合内你可以弃置一张装备牌并展示牌堆顶的一张牌若其为装备牌你须将其交给任意一张角色并对其造成1点伤害否则你摸一张牌。',
jizhan:'疾战',
jizhan_info:'出牌阶段限一次,你可以将移动到任意一名角色的前一位,视为对其使用了一张不计入出杀次数的杀。',
qianjun:'千军',
qianjun_info:'每当你使用一张杀你可以弃置一张牌令距离目标1以内的所有角色成为额外目标。',
xuanning:'玄凝',
xuanning1:'玄凝',
xuanning2:'玄凝',
liuguang:'流光',
yangming:'养命',
yangming2:'养命',
xuanning_info:'出牌阶段你可以弃置一基本牌获得至多3个玄凝标记。当你受到伤害时你失去一枚玄凝标记伤害来源随机弃置一张牌。',
liuguang_info:'准备阶段若你有玄凝标记你可以弃置一枚玄凝标记选择至多三名角色依次令其选择一项弃置一张牌或受到1点伤害并终止流光结算。',
yangming_info:'出牌阶段你可以弃置一张红色牌并在下个出牌阶段结束时令距离1以内的任意名角色回复1点体力在此之前不可再次发动。',
zhaolu:'朝露',
jiehuo:'劫火',
yuling:'御灵',
yuling1:'御灵',
yuling2:'御灵',
yuling3:'御灵',
yuling4:'御灵',
zhaolu_info:'锁定技每隔X回合你失去1点体力上限每当你受到1点伤害或有人死亡视为减少两个回合X为现存角色数且至多为5。',
jiehuo_info:'限定技出牌阶段你可以对一名其他角色造成2点火焰伤害然后死亡。',
yuling_info:'锁定技你没有摸牌和弃牌阶段你的手牌数始终为5你在一个出牌阶段最多使用X+2张牌X为你的体力上限。',
yuling_info_alter:'锁定技你没有摸牌和弃牌阶段你的手牌数始终为5你在一个出牌阶段最多使用X+1张牌X为你的体力上限。',
},
};
});