noname/character/diy.js

2452 lines
76 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.

'use strict';
game.import('character',function(lib,game,ui,get,ai,_status){
return {
name:'diy',
connect:true,
connectBanned:['diy_tianyu','diy_yangyi','diy_lukang','ns_huamulan'],
character:{
// diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']],
// diy_hanlong:['male','wei',4,['siji','ciqiu']],
diy_feishi:['male','shu',3,['shuaiyan','moshou']],
diy_liuyan:['male','shu',3,['juedao','geju']],
// diy_luxun:['male','wu',3,['shaoying','zonghuo']],
diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']],
// diy_zhouyu:['male','wu',3,['jieyan','honglian']],
// diy_zhouyu:['male','wu',3,['xiongzi','yaliang']],
diy_caiwenji:['female','qun',3,['beige','guihan']],
diy_lukang:['male','wu',4,['luweiyan','qianxun']],
// diy_xuhuang:['male','wei',4,['diyduanliang']],
// diy_dianwei:['male','wei',4,['diyqiangxi']],
// diy_huangzhong:['male','shu',4,['liegong','fuli']],
// diy_weiyan:['male','shu',4,['diykuanggu']],
diy_zhenji:['female','wei',3,['diy_jiaoxia','yiesheng']],
// diy_menghuo:['male','shu',4,['huoshou','zaiqix']],
re_huangyueying:['female','shu',3,['rejizhi','qicai']],
diy_liufu:['male','wei',3,['zhucheng','duoqi']],
diy_xizhenxihong:['male','shu',4,['fuchou','jinyan']],
diy_liuzan:['male','wu',4,['kangyin']],
diy_zaozhirenjun:['male','wei',3,['liangce','jianbi','juntun']],
diy_yangyi:['male','shu',3,['choudu','liduan']],
diy_tianyu:['male','wei',4,['chezhen','youzhan']],
ns_zuoci:['male','qun',3,['nsxinsheng','nsdunxing']],
ns_lvzhi:['female','qun',3,['nsnongquan','nsdufu']],
ns_wangyun:["male","qun",4,["liangji","jugong","chengmou"]],
ns_nanhua:["male","qun",3,["nshuanxian","nstaiping","nsshoudao"]],
ns_nanhua_left:["male","qun",2,[],['unseen']],
ns_nanhua_right:["female","qun",2,[],['unseen']],
ns_huamulan:['female','qun',3,['nscongjun','xiaoji','gongji']],
ns_huangzu:['male','qun',4,['nsjihui','nsmouyun']],
ns_jinke:['male','qun',4,['nspinmin','nsshishou']],
ns_yanliang:['male','qun',4,['nsduijue','nsshuangxiong','dualside'],['dualside:ns_wenchou']],
ns_wenchou:['male','qun',2,['nsguanyong','dualside'],['unseen']],
},
characterIntro:{
diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。',
diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后[1] 南匈奴单于于夫罗之孙左贤王刘豹之子母呼延氏十六国时期前赵政权开国皇帝304年310年在位。',
diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。',
diy_liufu:'字元颖,沛国相县(今安徽濉溪县西北)人。东汉末年名守。在汉末避难于淮南,说服袁术将戚寄和秦翊率部投奔曹操,曹操大悦,使司徒辟其为掾属。',
diy_xizhenxihong:'习珍,襄阳人。三国时蜀汉将领。先主刘备时曾任零陵北部都尉,加裨将军。建安二十四年,关羽率荆州大军攻打樊城,唯有习珍据城不降。被困月余,直到箭尽粮绝,拔剑自刎而死。习宏,生卒年不详,习珍之弟。曾在东吴入侵蜀汉时建议哥哥习珍伪降,约樊胄举兵。习珍死后,弟弟习宏落在东吴,有问必不答,终身不为孙权发一言。',
diy_zaozhirenjun:'枣祗生卒年月不详东汉末年颍川阳翟今河南省禹州市人。曾任东阿令、羽林监、屯田都尉、陈留太守等职。任峻—204年字伯达河南郡中牟县人。曹操每次出征任峻通常在后方补给军队。后来发生饥荒枣祗建议实施屯田任峻被任命为典农中郎将招募百姓在许下屯田结果连年丰收积谷足以装满全部粮仓。',
diy_yangyi:'字威公襄阳今湖北襄阳三国时期蜀汉政治家。最初为荆州刺史傅群的主簿后投奔关羽任为功曹。羽遣其至成都大受刘备赞赏擢为尚书。建兴三年225年任丞相参军此后一直跟随诸葛亮战斗。亮卒他部署安全退军。亮生前定蒋琬继己任仪仅拜中军师。建兴十三年235年因多出怨言被削职流放至汉嘉郡。但杨仪仍不自省又上书诽谤言辞激烈最后下狱自杀身亡。',
diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。',
},
characterTitle:{
ns_zuoci:'#bskystarwuwei',
ns_lvzhi:'#bskystarwuwei',
ns_wangyun:'#rSukincen',
ns_nanhua:'#g戒除联盟',
ns_huamulan:'#p哎别管我是谁',
ns_jinke:'#p哎别管我是谁',
ns_huangzu:'#r小芯儿童鞋',
ns_yanliang:'#r橙续缘',
ns_wenchou:'#r橙续缘',
},
perfectPair:{
yuji:['zuoci']
},
skill:{
nspinmin:{
trigger:{player:'dieBefore'},
forced:true,
filter:function(event,player){
return player.maxHp>0;
},
content:function(){
trigger.cancel();
player.hp=1;
player.update();
if(_status.currentPhase==player){
var num=4;
// if(game.countPlayer()>=7){
// num=5;
// }
if(!player.hasSkill('nspinmin_used')&&player.maxHp<num){
player.gainMaxHp(true);
player.addTempSkill('nspinmin_used');
}
}
else{
player.loseMaxHp(true);
}
},
subSkill:{
used:{}
}
},
nsshishou:{
trigger:{player:'loseEnd'},
forced:true,
filter:function(event,player){
if(_status.currentPhase!=player) return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
return false;
},
content:function(){
'step 0'
player.loseHp();
'step 1'
player.draw();
},
group:'nsshishou_use',
subSkill:{
use:{
mod:{
cardEnabled:function(card,player){
if(_status.currentPhase!=player) return;
if(get.cardCount(true,player)>=4){
return false;
}
}
}
}
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'save')){
if(_status.currentPhase==player) return 0;
if(target.maxHp>1&&player!=target) return 0;
}
if(get.tag(card,'recover')){
if(_status.currentPhase==player) return 0;
}
}
}
}
},
nsduijue:{
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.countCards('h');
},
content:function(){
"step 0"
var color={
black:player.countCards('h',function(card){
return get.color(card)=='red'&&get.value(card)<8;
}),
red:player.countCards('h',function(card){
return get.color(card)=='black'&&get.value(card)<8;
})
};
player.chooseToDiscard(get.prompt2('nsduijue')).set('ai',function(card){
var num=_status.event.color[get.color(card)];
if(_status.event.goon&&num>=1){
return 7+num-get.value(card);
}
}).set('goon',game.hasPlayer(function(current){
return get.effect(current,{name:'juedou'},player,player)>0;
})).set('color',color).set('logSkill','nsduijue');
"step 1"
if(result.bool){
player.addTempSkill('nsduijue_use');
player.storage.nsduijue_use=get.color(result.cards[0]);
}
},
subSkill:{
use:{
enable:'phaseUse',
viewAs:{name:'juedou'},
filter:function(event,player){
return player.hasCard(function(card){
return get.color(card)!=player.storage.nsduijue_use;
});
},
filterCard:function(card,player){
return get.color(card)!=player.storage.nsduijue_use;
},
check:function(card){
return 8-get.value(card);
},
ai:{
basic:{
order:10
}
}
}
}
},
nsshuangxiong:{
trigger:{player:'juedouBegin',target:'juedouBegin'},
check:function(event,player){
return player.isTurnedOver();
},
content:function(){
player.turnOver();
}
},
nsguanyong:{
enable:'chooseToRespond',
filterCard:true,
viewAs:{name:'sha'},
viewAsFilter:function(player){
if(!player.countCards('h')) return false;
},
prompt:'将一张手牌当杀打出',
check:function(card){return 7-get.value(card)},
ai:{
respondSha:true,
skillTagFilter:function(player,tag,arg){
if(arg!='respond') return false;
if(!player.countCards('h')) return false;
},
}
},
nsjihui:{
trigger:{global:'discardAfter'},
filter:function(event,player){
return event.cards.length>=3;
},
content:function(){
player.insertPhase();
player.storage.nsjihui_use=_status.currentPhase;
player.addSkill('nsjihui_use');
},
subSkill:{
use:{
mark:'character',
intro:{
content:'使用牌只能指定自己与$为目标'
},
trigger:{player:'phaseAfter'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='nsjihui';
},
onremove:true,
content:function(){
player.removeSkill('nsjihui_use');
},
mod:{
playerEnabled:function(card,player,target){
if(player!=target&&player.storage.nsjihui_use!=target) return false;
}
}
}
}
},
nsmouyun:{
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.hp%2==1||game.roundNumber%2==1;
},
filterTarget:function(card,player,target){
return target.isMinHp()&&target!=player&&target.isDamaged();
},
content:function(){
if(target.isDamaged()){
player.discardPlayerCard(target,'hej',target.maxHp-target.hp,true);
}
},
ai:{
order:10,
result:{
target:function(player,target){
return target.hp-target.maxHp;
}
}
}
},
nscongjun:{
forbid:['guozhan'],
unique:true,
forceunique:true,
init:function(player){
if(player.storage.nscongjun_show) return false;
var change=function(target){
if(target==player){
var list;
if(_status.connectMode){
list=get.charactersOL(function(i){
return lib.character[i][0]!='male';
});
}
else{
list=get.gainableCharacters(function(info){
return info[0]=='male';
});
}
var name=list.randomGet();
target.reinit('ns_huamulan',name,'nosmooth');
target.storage.nscongjun_show=name;
target.addSkill('nscongjun_show');
player._inits.remove(change);
}
}
if(!player._inits){
player._inits=[];
}
player._inits.push(change);
},
subSkill:{
show:{
trigger:{global:'useCard'},
filter:function(event,player){
return player.getEnemies().contains(event.player)&&event.card.name=='wuxie'&&event.getRand()<0.1;
},
direct:true,
skillAnimation:true,
animationColor:'thunder',
content:function(){
'step 0'
game.delay(0.5);
'step 1'
player.reinit(player.storage.nscongjun_show,'ns_huamulan','nosmooth');
player.logSkill('nscongjun_show',trigger.player);
'step 2'
player.removeSkill('nscongjun_show');
trigger.player.damage(2);
}
}
}
},
nstaiping:{
trigger:{player:'damageEnd'},
filter:function(event,player){
return !event.nshuanxian&&player.getSubPlayers('nshuanxian').length;
},
direct:true,
priority:-0.1,
ai:{
maixie:true,
maixie_hp:true
},
content:function(){
'step 0'
event.num=trigger.num;
'step 1'
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
var list=[];
var choice=0;
var hpleft=0;
var maxleft=0;
if(left&&player.hasSkill(left)){
if(player.storage[left].hp<player.storage[left].maxHp){
list.push('令幻身·左回复一点体力');
hpleft=player.storage[left].hp;
}
list.push('令幻身·左增加一点体力上限');
maxleft=player.storage[left].hp;
}
if(left&&player.hasSkill(right)){
if(player.storage[right].hp<player.storage[right].maxHp){
list.push('令幻身·右回复一点体力');
if(!hpleft||player.storage[right].hp<hpleft||
(player.storage[right].hp==hpleft&&Math.random()<0.5)){
choice=list.length-1;
}
}
list.push('令幻身·右增加一点体力上限');
if(!hpleft&&maxleft&&choice==0){
if(player.storage[right].maxHp<maxleft||
(player.storage[right].maxHp==maxleft&&Math.random()<0.5)){
choice=list.length-1;
}
}
}
if(!list.length){
event.finish();
return;
}
event.map={};
for(var i=0;i<list.length;i++){
event.map['选项'+get.cnNumber(i+1,true)]=list[i];
}
player.chooseControlList(list,function(){
return _status.event.choice;
}).set('prompt',get.prompt('nstaiping')).set('choice',choice);
'step 2'
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
if(result.control!='cancel2'){
player.logSkill('nstaiping');
switch(event.map[result.control]){
case '令幻身·左回复一点体力':player.storage[left].hp++;break;
case '令幻身·左增加一点体力上限':player.storage[left].maxHp++;break;
case '令幻身·右回复一点体力':player.storage[right].hp++;break;
case '令幻身·右增加一点体力上限':player.storage[right].maxHp++;break;
}
game.log(player,event.map[result.control].replace(/一/,'了一'));
}
'step 3'
if(event.num>1){
event.num--;
event.goto(1);
}
}
},
nsshoudao:{
group:['nsshoudao_gain','nsshoudao_die'],
subSkill:{
gain:{
trigger:{player:'subPlayerDie'},
forced:true,
filter:function(event,player){
var left=player.storage.nshuanxian_left;
if(left&&player.hasSkill(left)) return false;
var right=player.storage.nshuanxian_right;
if(right&&player.hasSkill(right)) return false;
if(!player.storage.nshuanxian_damage) return false;
return true;
},
content:function(){
player.addSkill('releiji');
player.addSkill('guidao');
}
},
die:{
trigger:{player:'dieBegin'},
direct:true,
filter:function(event,player){
if(game.countPlayer()<=2) return false;
var left=player.storage.nshuanxian_left;
if(left&&player.hasSkill(left)) return true;
var right=player.storage.nshuanxian_right;
if(right&&player.hasSkill(right)) return true;
return false;
},
content:function(){
'step 0'
var str;
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){
str='令一名其他角色获得技能【雷击】和【鬼道】';
}
else{
str='令一名其他角色获得技能【雷击】或【鬼道】';
}
if(trigger.source){
str+=''+get.translation(trigger.source)+'除外)';
}
player.chooseTarget(function(card,player,target){
return target!=player&&target!=_status.event.source;
},get.prompt('nsshoudao')).set('ai',function(target){
if(target.hasSkill('releiji')) return 0;
return get.attitude(_status.event.player,target);
}).set('source',trigger.source).set('prompt2',str);
'step 1'
var goon=false;
if(result.bool){
var target=result.targets[0];
player.logSkill('nsshoudao',target);
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){
target.addSkillLog('releiji');
target.addSkillLog('guidao');
}
else{
event.target=target;
player.chooseControl('releiji','guidao').set('prompt','令'+get.translation(target)+'获得一项技能');
goon=true;
}
}
if(!goon){
event.finish();
}
'step 2'
event.target.addSkillLog(result.control);
}
}
}
},
nshuanxian:{
trigger:{global:'gameStart',player:'enterGame'},
forced:true,
nosub:true,
unique:true,
group:['nshuanxian_left','nshuanxian_right','nshuanxian_damage','nshuanxian_swap'],
content:function(){
player.storage.nshuanxian_right=player.addSubPlayer({
name:'ns_nanhua_right',
skills:['nshuanxian_left','nshuanxian_draw','nshuanxian_swap'],
hp:2,
maxHp:2,
hs:get.cards(2),
skill:'nshuanxian',
intro:'你的本体回合结束后,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的下家的准备阶段,切换至此随从',
intro2:'当前回合结束后切换回本体',
onremove:function(player){
delete player.storage.nshuanxian_right;
}
});
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(!target.hasFriend()) return;
if(target.hp<=2) return;
if(!target.storage.nshuanxian_damage){
if(get.attitude(player,target)<0||get.tag(card,'multineg')) return [0,1];
return [1,1];
}
}
}
}
},
// mod:{
// globalFrom:function(from,to,distance){
//
// },
// globalTo:function(from,to,distance){
//
// }
// },
// global:'nshuanxian_choose',
subSkill:{
chosen:{},
leftdist:{
mod:{
globalFrom:function(from,to,distance){
},
globalTo:function(from,to,distance){
}
}
},
rightdist:{
mod:{
globalFrom:function(from,to,distance){
},
globalTo:function(from,to,distance){
}
}
},
swap:{
trigger:{global:'phaseBegin'},
forced:true,
popup:false,
filter:function(event,player){
return event.player!=player;
},
priority:20,
content:function(){
var next=player.getNext();
var prev=player.getPrevious();
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
if(prev==next||(trigger.player!=next&&trigger.player!=prev)){
if(player.hasSkill('subplayer')){
player.exitSubPlayer();
}
}
else if(prev==trigger.player&&player.name!=left&&left){
if(!player.hasSkill('subplayer')){
player.callSubPlayer(left);
}
else{
player.toggleSubPlayer(left);
}
}
else if(next==trigger.player&&player.name!=right&&right){
if(!player.hasSkill('subplayer')){
player.callSubPlayer(right);
}
else{
player.toggleSubPlayer(right);
}
}
}
},
damage:{
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return !player.storage.nshuanxian_damage;
},
content:function(){
player.storage.nshuanxian_damage=true;
player.storage.nshuanxian_left=player.addSubPlayer({
name:'ns_nanhua_left',
skills:['nshuanxian_middle','nshuanxian_draw','nshuanxian_swap'],
hp:2,
maxHp:2,
hs:get.cards(2),
skill:'nshuanxian',
intro:'你的本体回合开始前,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的上家的准备阶段,切换至此随从',
intro2:'当前回合结束后切换回本体',
onremove:function(player){
delete player.storage.nshuanxian_left;
}
});
trigger.nshuanxian=true;
}
},
draw:{
trigger:{player:'phaseDrawBegin'},
silent:true,
filter:function(event){
return event.num>0;
},
content:function(){
trigger.num--;
}
},
left:{
trigger:{player:'phaseBefore'},
forced:true,
popup:false,
priority:40,
filter:function(event,player){
if(event.skill=='nshuanxian_middle') return false;
if(event.skill=='nshuanxian_right') return false;
var left=player.storage.nshuanxian_left;
if(player.hasSkill('subplayer')){
if(!left) return player.name==player.storage.nshuanxian_right;
return player.storage.subplayer.skills.contains(left);
}
else{
if(!left) return false;
return player.hasSkill(left);
}
},
content:function(){
if(player.hasSkill('subplayer')){
var left=player.storage.nshuanxian_left;
if(left&&player.storage.subplayer.skills.contains(left)){
player.toggleSubPlayer(player.storage.nshuanxian_left);
}
else{
player.exitSubPlayer();
}
}
else{
player.callSubPlayer(player.storage.nshuanxian_left);
}
}
},
middle:{
trigger:{player:['phaseAfter','phaseCancelled']},
forced:true,
popup:false,
priority:-40,
filter:function(event,player){
if(player.hasSkill('nshuanxian_chosen')) return false;
return true;
},
content:function(){
player.exitSubPlayer();
player.insertPhase(null,true);
}
},
right:{
trigger:{player:['phaseAfter','phaseCancelled']},
forced:true,
popup:false,
priority:-40,
filter:function(event,player){
if(player.hasSkill('nshuanxian_chosen')) return false;
if(player.hasSkill('subplayer')) return false;
var right=player.storage.nshuanxian_right;
if(!right) return false;
return player.hasSkill(right);
},
content:function(){
player.callSubPlayer(player.storage.nshuanxian_right);
player.insertPhase(null,true);
player.addTempSkill('nshuanxian_chosen',['phaseBegin','phaseCancelled']);
}
},
end:{
trigger:{player:['phaseAfter','phaseCancelled']},
forced:true,
popup:false,
priority:-40,
filter:function(event,player){
if(player.hasSkill('nshuanxian_chosen')) return false;
return true;
},
content:function(){
if(player.hasSkill('subplayer')){
player.exitSubPlayer();
}
},
content_old:function(){
'step 0'
var controls=['本体'];
var left=player.storage.nshuanxian_left;
var right=player.storage.nshuanxian_right;
if(player.hasSkill('subplayer')){
if(player.storage.subplayer.skills.contains(left)){
controls.unshift('幻身·左');
}
if(player.storage.subplayer.skills.contains(right)){
controls.push('幻身·右');
}
}
else{
if(player.hasSkill(left)){
controls.unshift('幻身·左');
}
if(player.hasSkill(right)){
controls.push('幻身·右');
}
}
if(controls.length>1){
player.chooseControl(controls,function(event,player){
return Math.floor(Math.random()*_status.event.num);
}).set('prompt','选择一个形态直到下一回合开始').set('num',controls.length);
}
else{
event.finish();
}
'step 1'
switch(result.control){
case '幻身·左':{
if(!player.hasSkill('subplayer')){
player.callSubPlayer(player.storage.nshuanxian_left);
}
else{
player.toggleSubPlayer(player.storage.nshuanxian_left);
}
break;
}
case '幻身·右':{
if(!player.hasSkill('subplayer')){
player.callSubPlayer(player.storage.nshuanxian_right);
}
break;
}
default:{
if(player.hasSkill('subplayer')){
player.exitSubPlayer();
}
break;
}
}
player.addTempSkill('nshuanxian_chosen','phaseBegin');
}
}
}
},
nsnongquan:{
enable:'phaseUse',
filter:function(event,player){
return player.countCards('h')==1&&player.canUse('wuzhong',player);
},
direct:true,
delay:0,
content:function(){
player.useCard({name:'wuzhong'},player.getCards('h'),player,'nsnongquan');
},
ai:{
order:10,
result:{
player:function(player,target){
return 10-get.value(player.getCards('h')[0]);
}
}
}
},
nsdufu:{
trigger:{source:'damageBefore'},
check:function(event,player){
return event.player.hasSkillTag('maixie');
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('nsdufu'),function(card,player,target){
return target!=player;
}).set('ai',function(target){
if(_status.event.bool){
return -get.attitude(_status.event.player,target);
}
return 0;
}).set('bool',trigger.player.hasSkillTag('maixie_defend'));
'step 1'
if(result.bool){
player.logSkill('nsdufu',result.targets);
trigger.source=result.targets[0];
trigger.untrigger();
trigger.trigger('damageBefore');
}
}
},
rejizhi:{
audio:2,
usable:3,
trigger:{player:'useCard'},
frequent:true,
filter:function(event){
var type=get.type(event.card,'trick');
return (type=='trick'||type=='equip')&&event.cards[0]&&event.cards[0]==event.card;
},
content:function(){
"step 0"
var cards=get.cards();
player.gain(cards,'gain2','log');
if(get.type(cards[0])!='basic'){
event.finish();
}
"step 1"
player.chooseToDiscard('h',true);
},
ai:{
threaten:1.4
}
},
yiesheng:{
enable:'phaseUse',
filterCard:{color:'black'},
filter:function(event,player){
return player.countCards('h',{color:'black'})>0;
},
selectCard:[1,Infinity],
prompt:'弃置任意张黑色手牌并摸等量的牌',
check:function(card){return 5-get.value(card)},
content:function(){
player.draw(cards.length);
},
ai:{
order:1,
result:{
player:1
},
},
},
jugong: {
trigger: {
global: "damageEnd",
},
usable: 1,
frequent: true,
locked: false,
notemp: true,
init: function(player) {
player.storage.jugong = [];
},
filter: function(event, player) {
return event.card && (event.card.name == 'sha' || event.card.name == 'juedou') && event.notLink() && _status.currentPhase != player;
},
content: function() {
"step 0"
player.draw();
"step 1"
if (player.countCards('h')) {
player.chooseCard('将' + get.cnNumber(1) + '张手牌置于武将牌上作为“功”', 1, true);
} else {
event.finish();
}
"step 2"
if (result.cards && result.cards.length) {
player.lose(result.cards, ui.special);
player.storage.jugong = player.storage.jugong.concat(result.cards);
player.syncStorage('jugong');
player.markSkill('jugong');
game.log(player, '将', result.cards, '置于武将牌上作为“功”');
}
},
intro: {
content: "cards",
},
group: "jugong_1",
subSkill: {
"1": {
trigger: {
player: "damageBegin",
},
filter: function(event, player) {
return player.storage.jugong.length > 1;
},
content: function() {
'step 0'
player.chooseCardButton('移去两张“功”', 2, player.storage.jugong, true);
'step 1'
if (event.directresult || result.bool) {
player.logSkill('jugong');
var links = event.directresult || result.links;
for (var i = 0; i < links.length; i++) {
player.storage.jugong.remove(links[i]);
}
player.syncStorage('jugong');
if (!player.storage.jugong.length) {
player.unmarkSkill('jugong');
} else {
player.markSkill('jugong');
}
player.$throw(links);
game.log(player, '被移去了', links);
for (var i = 0; i < links.length; i++) {
ui.discardPile.appendChild(links[i]);
}
}
'step 2'
trigger.cancel();
},
sub: true,
},
},
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];
if (target.hp == 2) return [1, get.tag(card, 'damage') * 0.5];
}
},
},
},
},
liangji:{
enable: "phaseUse",
usable: 1,
filterTarget: function(card, player, target) {
return target != player;
},
content: function() {
'step 0'
player.chooseCard('h', '连计将1张牌置于' + get.translation(target) + '的武将牌上', 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) {
player.$give(result.cards, target);
player.lose(result.cards, ui.special);
target.storage.liangji_1 = result.cards;
target.storage.liangji_1_source = target;
target.syncStorage('liangji_1');
target.addSkill('liangji_1');
}
},
ai: {
order: 1,
result: {
target:function(player, target) {
if(target.sex=='female') return 1.5;
if(target.sex=='male') return 1;
}
},
},
subSkill: {
"1": {
trigger: {
player: "phaseDrawBegin",
},
forced: true,
mark: true,
intro: {
content: "cards",
},
content: function() {
'step 0'
var cards = player.storage.liangji_1;
if (cards) {
player.gain(cards, 'gain2');
}
player.storage.liangji_1 = 0;
'step 1'
if (player.sex == 'male') player.addTempSkill('wushuang');
if (player.sex == 'female') player.addTempSkill('lijian');
player.removeSkill('liangji_1');
},
sub: true,
},
},
},
chengmou:{
trigger: {
player: "phaseDrawBegin",
},
frequent: true,
filter: function(event, player) {
return player.storage.jugong.length > 0;
},
content: function(){
'step 0'
if (player.storage.jugong.length > 2) player.loseHp();
'step 1'
var cards = player.storage.jugong;
if (cards) {
player.gain(cards, 'gain2');
}
player.storage.jugong = [];
player.unmarkSkill('jugong');
}
},
nsxinsheng:{
trigger:{source:'damageEnd'},
frequent:true,
filter:function(event,player){
return player.isHealthy();
},
content:function(){
player.gainMaxHp(trigger.num,true);
player.draw(trigger.num);
}
},
nsdunxing:{
trigger:{player:'damageBefore'},
filter:function(event,player){
return player.isDamaged();
},
content:function(){
trigger.cancel();
player.loseMaxHp(trigger.num,true);
player.draw(trigger.num);
}
},
liangce:{
enable:'phaseUse',
viewAs:{name:'wugu'},
usable:1,
filterCard:{type:'basic'},
filter:function(event,player){
return player.countCards('h',{type:'basic'})>0;
},
check:function(card){
return 6-get.value(card);
},
group:'liangce2'
},
liangce2:{
trigger:{global:'wuguRemained'},
direct:true,
filter:function(event){
return event.remained.length>0;
},
content:function(){
'step 0'
var du=0;
for(var i=0;i<trigger.remained.length;i++){
if(trigger.remained[i].name=='du') du++;
}
var dialog=ui.create.dialog(get.prompt('liangce'),trigger.remained,'hidden');
dialog.classList.add('noselect');
player.chooseTarget(dialog).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
var att=get.attitude(player,target);
if(du>=trigger.remained.length/2) return -att;
return att;
});
'step 1'
if(result.bool){
player.logSkill('liangce',result.targets);
result.targets[0].gain(trigger.remained.slice(0),'gain2','log');
trigger.remained.length=0;
}
}
},
jianbi:{
trigger:{global:'useCard'},
priority:5,
filter:function(event,player){
if(get.type(event.card)!='trick') return false;
if(get.info(event.card).multitarget) return false;
if(event.targets.length<2) return false;
if(!event.targets.contains(player)) return false;
return true;
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt('jianbi'),
[1,1],function(card,player,target){
return _status.event.getTrigger().targets.contains(target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var eff=-get.effect(target,trigger.card,trigger.player,_status.event.player);
if(trigger.card.name=='wugu'&&eff==0&&get.attitude(player,target)<0){
return 0.01;
}
return eff;
});
"step 1"
if(result.bool){
event.targets=result.targets;
if(event.isMine()){
player.logSkill('jianbi',event.targets);
event.finish();
}
for(var i=0;i<result.targets.length;i++){
trigger.targets.remove(result.targets[i]);
}
game.delay();
}
else{
event.finish();
}
"step 2"
player.logSkill('jianbi',event.targets);
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'multineg')){
return 'zerotarget';
}
if(get.tag(card,'multitarget')){
var info=get.info(card);
if(info.selectTarget==-1&&!info.multitarget){
return [1,Math.min(3,1+target.maxHp-target.hp)];
}
}
}
}
}
},
juntun:{
enable:'phaseUse',
filter:function(event,player){
return player.countCards('he',{type:'equip'})>0;
},
position:'he',
filterCard:{type:'equip'},
check:function(card){
var player=_status.event.player;
var he=player.getCards('he');
var subtype=get.subtype(card);
var value=get.equipValue(card);
for(var i=0;i<he.length;i++){
if(he[i]!=card&&get.subtype(he[i])==subtype&&get.equipValue(he[i])>=value){
return 10;
}
}
if(!player.needsToDiscard()){
return 4-get.equipValue(card);
}
return 0;
},
content:function(){
player.draw();
},
discard:false,
prompt:'将一张装备牌置入弃牌堆并摸一张牌',
delay:0.5,
prepare:function(cards,player){
player.$throw(cards,1000);
},
ai:{
basic:{
order:8.5
},
result:{
player:1,
},
}
},
choudu:{
enable:'phaseUse',
usable:1,
filterCard:true,
position:'he',
filterTarget:function(card,player,target){
return lib.filter.cardEnabled({name:'diaobingqianjiang'},target);
},
check:function(card){
return 6-get.value(card);
},
content:function(){
var list=game.filterPlayer();
list.sortBySeat(target);
target.useCard({name:'diaobingqianjiang'},list);
},
ai:{
order:1,
result:{
player:function(player,target){
if(get.attitude(player,target)<=1) return 0;
return game.countPlayer(function(current){
return get.effect(current,{name:'diaobingqianjiang'},target,player);
});
}
}
}
},
liduan:{
trigger:{global:'gainAfter'},
filter:function(event,player){
if(event.player==player) return false;
if(_status.currentPhase==event.player) return false;
if(event.cards.length!=1) return false;
return get.type(event.cards[0])=='equip'&&get.position(event.cards[0])=='h';
},
logTarget:'player',
check:function(event,player){
var att=get.attitude(player,event.player);
var subtype=get.subtype(event.cards[0]);
if(att>0){
if(event.player.countCards('h')>=player.countCards('h')+2) return true;
return event.player.countCards('e',{subtype:subtype})==0;
}
else{
return event.player.countCards('e',{subtype:subtype})>0;
}
},
content:function(){
'step 0'
var bool=false;
var subtype=get.subtype(trigger.cards[0]);
var current=trigger.player.getEquip('e',parseInt(subtype[5]));
var att=get.attitude(trigger.player,player);
if(current){
if(att>0){
bool=true;
}
else{
if(get.equipValue(current)>get.equipValue(trigger.cards[0])){
bool=true;
}
}
}
trigger.player.chooseCard('立断:将一张手牌交给'+get.translation(player)+',或取消并使用'+get.translation(trigger.cards)).ai=function(card){
if(bool){
if(att>0){
return 8-get.value(card);
}
else{
return 4-get.value(card);
}
}
else{
if(att<=0) return -get.value(card);
return 0;
}
}
'step 1'
if(result.bool){
player.gain(result.cards,trigger.player);
trigger.player.$give(1,player);
}
else{
trigger.player.useCard(trigger.cards,trigger.player);
}
}
},
jinyan:{
mod:{
cardEnabled:function(card,player){
if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false;
},
cardUsable:function(card,player){
if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false;
},
cardRespondable:function(card,player){
if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false;
},
cardSavable:function(card,player){
if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false;
},
},
enable:['chooseToUse','chooseToRespond'],
filterCard:function(card){
return get.type(card,'trick')=='trick'&&get.color(card)=='black';
},
viewAsFilter:function(player){
if(player.hp>2) return false;
if(!player.hasCard(function(card){
return get.type(card,'trick')=='trick'&&get.color(card)=='black';
})) return false;
},
viewAs:{name:'sha'},
prompt:'将一张黑色锦囊牌当作杀使用或打出',
check:function(){return 1},
ai:{
respondSha:true,
skillTagFilter:function(player){
if(player.hp>2) return false;
if(!player.hasCard(function(card){
return get.type(card,'trick')=='trick'&&get.color(card)=='black';
})) return false;
}
}
},
fuchou:{
trigger:{target:'shaBefore'},
filter:function(event,player){
return player.countCards('he')>0;
},
direct:true,
content:function(){
'step 0'
var bool=false;
if(!player.hasShan()&&get.effect(player,trigger.card,trigger.player,player)<0){
bool=true;
}
player.chooseCard('he',get.prompt('fuchou',trigger.player)).set('ai',function(card){
var player=_status.event.player;
if(bool){
if(player.hp<=1){
if(get.tag(card,'save')) return 0;
return 8-get.value(card);
}
return 6-get.value(card);
}
return -get.value(card);
});
'step 1'
if(result.bool){
trigger.cancel();
player.logSkill('fuchou',trigger.player);
trigger.player.gain(result.cards,player);
if(get.position(result.cards[0])=='h'){
player.$give(1,trigger.player);
}
else{
player.$give(result.cards,trigger.player);
}
player.storage.fuchou2.add(trigger.player);
}
},
group:'fuchou2'
},
fuchou2:{
init:function(player){
player.storage.fuchou2=[];
},
forced:true,
trigger:{global:'phaseAfter'},
filter:function(event,player){
for(var i=0;i<player.storage.fuchou2.length;i++){
if(player.storage.fuchou2[i].isAlive()) return true;
}
return false;
},
content:function(){
'step 0'
if(player.storage.fuchou2.length){
var target=player.storage.fuchou2.shift();
if(target.isAlive()){
player.draw();
if(player.canUse('sha',target,false)&&player.hasSha()){
player.chooseToUse({name:'sha'},target,-1,'对'+get.translation(target)+'使用一张杀,或失去一点体力');
}
else{
player.loseHp();
event.redo();
}
}
}
else{
event.finish();
}
'step 1'
if(!result.bool){
player.loseHp();
}
event.goto(0);
}
},
chezhen:{
mod:{
globalFrom:function(from,to,distance){
if(from.countCards('e')) return distance-1;
},
globalTo:function(from,to,distance){
if(!to.countCards('e')) return distance+1;
}
}
},
youzhan:{
trigger:{global:'shaBefore'},
direct:true,
filter:function(event,player){
return get.distance(player,event.target)<=1&&player.countCards('he',{type:'equip'});
},
content:function(){
'step 0'
var bool=(get.attitude(player,trigger.player)<0&&get.attitude(player,trigger.target)>0);
var next=player.chooseToDiscard('he',{type:'equip'},get.prompt('youzhan',trigger.target));
next.ai=function(card){
if(bool){
return 7-get.value(card);
}
return 0;
};
next.logSkill=['youzhan',trigger.target];
'step 1'
if(result.bool){
event.youdiinfo={
source:trigger.player,
evt:trigger
}
trigger.target.useCard({name:'youdishenru'});
}
}
},
kangyin:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target!=player&&target.countCards('he')>0;
},
content:function(){
'step 0'
player.loseHp();
'step 1'
player.discardPlayerCard(target,true);
'step 2'
if(player.isDamaged()&&result.links&&result.links.length){
if(get.type(result.links[0])=='basic'){
player.chooseTarget([1,player.maxHp-player.hp],
'选择至多'+get.cnNumber(player.maxHp-player.hp)+'名角色各摸一张牌').set('ai',function(target){
return get.attitude(_status.event.player,target);
});
}
else{
player.storage.kangyin2=player.maxHp-player.hp;
player.addTempSkill('kangyin2');
event.finish();
}
}
else{
event.finish();
}
'step 3'
if(result.targets&&result.targets.length){
result.targets.sort(lib.sort.seat);
player.line(result.targets,'green');
game.asyncDraw(result.targets);
}
},
ai:{
order:7,
result:{
target:function(player,target){
if(player.hp>=4) return -1;
if(player.hp==3&&!player.needsToDiscard()) return -1;
return 0;
}
}
}
},
kangyin2:{
mark:true,
intro:{
content:'到其他角色的距离-#;使用【杀】的额外目标数上限+#'
},
onremove:true,
mod:{
globalFrom:function(from,to,distance){
return distance-from.storage.kangyin2;
},
selectTarget:function(card,player,range){
if(card.name=='sha'&&range[1]!=-1) range[1]+=player.storage.kangyin2;
},
}
},
duoqi:{
trigger:{global:'discardAfter'},
filter:function(event,player){
if(_status.currentPhase==player) return false;
if(!player.storage.zhucheng||!player.storage.zhucheng.length) return false;
var evt=event.getParent('phaseUse');
if(evt&&evt.name=='phaseUse') return true;
return false;
},
direct:true,
content:function(){
'step 0'
var bool=false;
if(get.attitude(player,trigger.player)<0&&trigger.player.needsToDiscard()){
bool=true;
}
player.chooseCardButton(get.prompt('zhucheng',_status.currentPhase),player.storage.zhucheng).set('ai',function(button){
return _status.event.bool?1:0;
}).set('bool',bool);
'step 1'
if(result.bool){
player.logSkill('zhucheng',_status.currentPhase);
player.$throw(result.links[0]);
player.storage.zhucheng.remove(result.links[0]);
ui.discardPile.appendChild(result.links[0]);
player.syncStorage('zhucheng');
if(player.storage.zhucheng.length==0){
player.unmarkSkill('zhucheng');
}
else{
player.updateMarks();
}
var evt=trigger.getParent('phaseUse');
if(evt&&evt.name=='phaseUse'){
evt.skipped=true;
}
}
},
ai:{
expose:0.2
}
},
zhucheng:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
return !player.storage.zhucheng||!player.storage.zhucheng.length;
},
check:function(event,player){
if(player.storage.zhucheng&&player.storage.zhucheng.length){
if(!player.hasShan()) return false;
if(player.storage.zhucheng.length>=2) return false;
}
return true;
},
intro:{
content:'cards'
},
content:function(){
if(player.storage.zhucheng&&player.storage.zhucheng.length){
player.gain(player.storage.zhucheng,'gain2');
delete player.storage.zhucheng;
player.unmarkSkill('zhucheng');
}
else{
var cards=get.cards(Math.max(1,player.maxHp-player.hp));
player.$gain2(cards);
player.storage.zhucheng=cards;
player.markSkill('zhucheng');
}
},
ai:{
target:function(card,player,target,current){
if(card.name=='sha'&&player.storage.zhucheng&&player.storage.zhucheng.length){
if(player.storage.zhucheng.length>=2){
if(!player.hasFriend()&&player.countCards('he')-2<player.storage.zhucheng.length) return 'zeroplayertarget';
return 0.1;
}
else{
var he=player.getCards('he');
var sha=false;
for(var i=0;i<he.length;i++){
if(he[i]=='sha'&&!sha){
sha=true;
}
else{
if(get.value(he[i])<=6){
return [1,0,1,-0.5];
}
}
}
return 'zeroplayertarget';
}
}
}
},
group:'zhucheng2'
},
zhucheng2:{
trigger:{target:'shaBefore'},
check:function(event,player){
if(get.attitude(event.player,player)<=0) return true;
return get.effect(player,event.card,event.player,player)<=0;
},
filter:function(event,player){
return player.storage.zhucheng&&player.storage.zhucheng.length>0;
},
content:function(){
'step 0'
var bool=false;
if(get.effect(player,trigger.card,trigger.player,trigger.player)>=0){
bool=true;
}
var num=player.storage.zhucheng.length;
trigger.player.chooseToDiscard('弃置'+get.cnNumber(num)+'张牌,或令杀无效','he',num).set('ai',function(card){
if(_status.event.bool){
return 10-get.value(card);
}
return 0;
}).set('bool',bool);
'step 1'
if(!result.bool){
trigger.cancel();
}
}
},
diy_jiaoxia:{
audio:['jiaoxia',2],
trigger:{target:'useCardToBegin'},
filter:function(event,player){
return event.card&&get.color(event.card)=='red';
},
frequent:true,
content:function(){
player.draw();
},
ai:{
effect:function(card,player,target){
if(get.color(card)=='red') return [1,1];
},
}
},
zaiqix:{
trigger:{player:'phaseDrawBefore'},
filter:function(event,player){
return player.hp<player.maxHp;
},
check:function(event,player){
if(1+player.maxHp-player.hp<2){
return false;
}
else if(1+player.maxHp-player.hp==2){
return player.countCards('h')>=2;
}
return true;
},
content:function(){
"step 0"
trigger.cancel();
event.cards=get.cards(player.maxHp-player.hp+1);
player.showCards(event.cards);
"step 1"
var num=0;
for(var i=0;i<event.cards.length;i++){
if(get.suit(event.cards[i])=='heart'){
num++;
ui.discardPile.appendChild(event.cards[i]);
event.cards.splice(i--,1);
}
}
if(num){
player.recover(num);
}
"step 2"
if(event.cards.length){
player.gain(event.cards);
player.$gain2(event.cards);
game.delay();
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 1;
},
}
},
batu:{
trigger:{player:'phaseEnd'},
frequent:true,
filter:function(event,player){
var list=['wei','shu','wu','qun'];
var players=game.filterPlayer();
var num=0;
for(var i=0;i<players.length&&list.length;i++){
if(list.contains(players[i].group)){
list.remove(players[i].group);
num++;
}
}
return player.countCards('h')<num;
},
content:function(){
var list=['wei','shu','wu','qun'];
var players=game.filterPlayer();
var num=0;
for(var i=0;i<players.length&&list.length;i++){
if(list.contains(players[i].group)){
list.remove(players[i].group);
num++;
}
}
player.draw(num-player.countCards('h'));
},
ai:{
threaten:1.3
}
},
diyzaiqi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
trigger.num+=player.maxHp-player.hp;
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2.5;
if(target.hp==2) return 1.8;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
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];
}
}
}
},
diykuanggu:{
trigger:{source:'damageEnd'},
forced:true,
content:function(){
if(get.distance(trigger.player,player,'attack')>1){
player.draw(trigger.num);
}
else{
player.recover(trigger.num);
}
}
},
diyduanliang:{
group:['diyduanliang1','diyduanliang2'],
ai:{
threaten:1.2
}
},
diyduanliang1:{
enable:'phaseUse',
usable:1,
discard:false,
filter:function(event,player){
var cards=player.getCards('he',{color:'black'});
for(var i=0;i<cards.length;i++){
var type=get.type(cards[i]);
if(type=='basic') return true;
}
return false;
},
prepare:'throw',
position:'he',
filterCard:function(card){
if(get.color(card)!='black') return false;
var type=get.type(card);
return type=='basic';
},
filterTarget:function(card,player,target){
return lib.filter.filterTarget({name:'bingliang'},player,target);
},
check:function(card){
return 7-get.value(card);
},
content:function(){
player.useCard({name:'bingliang'},target,cards).animate=false;
player.draw();
},
ai:{
result:{
target:function(player,target){
return get.effect(target,{name:'bingliang'},player,target);
}
},
order:9,
}
},
diyduanliang2:{
mod:{
targetInRange:function(card,player,target){
if(card.name=='bingliang'){
if(get.distance(player,target)<=2) return true;
}
}
}
},
guihan:{
unique:true,
enable:'chooseToUse',
mark:true,
skillAnimation:'epic',
init:function(player){
player.storage.guihan=false;
},
filter:function(event,player){
if(event.type!='dying') return false;
if(player!=event.dying) return false;
if(player.storage.guihan) return false;
return true;
},
filterTarget:function(card,player,target){
return target.sex=='male'&&player!=target;
},
content:function(){
"step 0"
player.awakenSkill('guihan');
player.recover();
player.storage.guihan=true;
"step 1"
player.draw(2);
"step 2"
target.recover();
"step 3"
target.draw(2);
// if(lib.config.mode=='identity'){
// player.node.identity.style.backgroundColor=get.translation('weiColor');
// player.group='wei';
// }
},
ai:{
skillTagFilter:function(player){
if(player.storage.guihan) return false;
if(player.hp>0) return false;
},
save:true,
result:{
player:4,
target:function(player,target){
if(target.hp==target.maxHp) return 2;
return 4;
}
},
threaten:function(player,target){
if(!target.storage.guihan) return 0.8;
}
},
intro:{
content:'limited'
}
},
luweiyan:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
return get.type(card)!='basic';
},
position:'he',
filter:function(event,player){
return player.hasCard(function(card){
return get.type(card)!='basic';
},'he');
},
viewAs:{name:'shuiyanqijun'},
prompt:'将一张非基本牌当水淹七军使用',
check:function(card){return 8-get.value(card)},
group:'luweiyan2'
},
luweiyan2:{
trigger:{player:'useCardAfter'},
direct:true,
filter:function(event,player){
if(event.skill!='luweiyan') return false;
for(var i=0;i<event.targets.length;i++){
if(player.canUse('sha',event.targets[i],false)){
return true;
}
}
return false;
},
content:function(){
'step 0'
player.chooseTarget('是否视为使用一张杀?',function(card,player,target){
return _status.event.targets.contains(target)&&player.canUse('sha',target,false);
}).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,{name:'sha'},player,player);
}).set('targets',trigger.targets);
'step 1'
if(result.bool){
player.useCard({name:'sha'},result.targets,false);
}
}
},
yaliang:{
inherit:'wangxi'
},
xiongzi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
content:function(){
trigger.num+=1+Math.floor(player.countCards('e')/2);
}
},
honglian:{
trigger:{player:'damageEnd'},
check:function(event,player){
return get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.source&&event.source!=player&&event.source.countCards('he',{color:'red'})>0;
},
content:function(){
trigger.source.discard(trigger.source.getCards('he',{color:'red'}));
},
ai:{
expose:0.1,
result:{
threaten:0.8,
target:function(card,player,target){
if(get.tag(card,'damage')&&get.attitude(target,player)<0){
return [1,0,0,-player.countCards('he',{color:'red'})];
}
}
}
}
},
diyguhuo:{
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
return player.countCards('hej')>0;
},
content:function(){
"step 0"
player.draw(2);
"step 1"
var next=player.discardPlayerCard(player,'hej',2,true);
next.ai=function(button){
if(get.position(button.link)=='j') return 10;
return -get.value(button.link);
};
next.filterButton=function(button){
return lib.filter.cardDiscardable(button.link,player);
}
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return [0,0.5];
}
}
}
},
diychanyuan:{
trigger:{player:'dieBegin'},
forced:true,
filter:function(event){
return event.source!=undefined;
},
content:function(){
trigger.source.loseMaxHp(true);
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 0.2;
},
result:{
target:function(card,player,target,current){
if(target.hp<=1&&get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-5];
return [1,0,0,-2];
}
}
}
}
},
zonghuo:{
trigger:{source:'damageBefore'},
direct:true,
priority:10,
filter:function(event){
return event.nature!='fire';
},
content:function(){
"step 0"
player.chooseToDiscard(get.prompt('zonghuo')).ai=function(card){
var att=get.attitude(player,trigger.player);
if(trigger.player.hasSkillTag('nofire')){
if(att>0) return 8-get.value(card);
return -1;
}
if(att<0){
return 7-get.value(card);
}
return -1;
}
"step 1"
if(result.bool){
player.logSkill('zonghuo',trigger.player,'fire');
trigger.nature='fire';
}
}
},
shaoying:{
trigger:{source:'damageAfter'},
direct:true,
filter:function(event){
return event.nature=='fire';
},
content:function(){
"step 0"
player.chooseTarget(get.prompt('shaoying'),function(card,player,target){
return get.distance(trigger.player,target)<=1&&trigger.player!=target;
}).ai=function(target){
return get.damageEffect(target,player,player,'fire');
}
"step 1"
if(result.bool){
var card=get.cards()[0];
ui.discardPile.appendChild(card);
player.showCards(card);
event.bool=get.color(card)=='red';
event.target=result.targets[0];
player.logSkill('shaoying',event.target,false);
trigger.player.line(event.target,'fire');
}
else{
event.finish();
}
"step 2"
if(event.bool){
event.target.damage('fire');
}
}
},
tiangong:{
group:['tiangong2'],
trigger:{player:'damageBefore'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='tiesuo') return 0;
if(get.tag(card,'thunderDamage')) return 0;
}
},
threaten:0.5
}
},
tiangong2:{
trigger:{source:'damageAfter'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
popup:false,
priority:1,
content:function(){
player.draw();
},
},
xicai:{
inherit:'jianxiong'
},
diyjianxiong:{
mode:['identity'],
trigger:{global:'dieBefore'},
forced:true,
filter:function(event,player){
return event.player!=game.zhu&&_status.currentPhase==player;
},
content:function(){
trigger.player.identity='fan';
trigger.player.setIdentity('fan');
trigger.player.identityShown=true;
}
},
shuaiyan:{
trigger:{global:'recoverAfter'},
filter:function(event,player){
return event.player!=player&&_status.currentPhase!=player;
},
logTarget:'player',
content:function(){
"step 0"
var att=get.attitude(trigger.player,player);
var bool=0;
if(att<0){
if(trigger.player.countCards('e')==0&&trigger.player.countCards('h')>2) bool=1;
else if(trigger.player.countCards('he')==0) bool=1;
}
else if(att==0&&trigger.player.countCards('he')==0){
bool=1;
}
trigger.player.chooseControl(function(){
return _status.event.bool;
}).set('prompt','率言').set('bool',bool).set('choiceList',['令'+get.translation(player)+'摸一张牌','令'+get.translation(player)+'弃置你一张牌']);
"step 1"
if(result.control=='选项一'){
player.draw();
event.finish();
}
else if(trigger.player.countCards('he')){
player.discardPlayerCard(trigger.player,true,'he');
}
else{
event.finish();
}
},
ai:{
threaten:1.2
}
},
moshou:{
mod:{
targetEnabled:function(card,player,target,now){
if(card.name=='bingliang'||card.name=='lebu') return false;
}
},
},
siji:{
trigger:{player:'phaseDiscardEnd'},
frequent:true,
filter:function(event,player){
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='sha') return true;
}
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='sha') num++;
}
player.draw(2*num);
}
},
ciqiu:{
unique:true,
trigger:{source:'damageBegin'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&event.player.hp==event.player.maxHp&&event.notLink();
},
content:function(){
trigger.num++;
trigger._ciqiu3=true;
},
group:['ciqiu2']
},
ciqiu2:{
trigger:{global:'dying'},
priority:9,
filter:function(event,player){
return event.player!=player&&event.parent._ciqiu3&&event.parent.source==player;
},
check:function(event,player){
return get.attitude(player,event.player)<0;
},
forced:true,
logTarget:'player',
content:function(){
'step 0'
trigger.player.die();
player.removeSkill('ciqiu2');
'step 1'
if(!trigger.player.isAlive()){
trigger.cancel(true);
}
}
},
ciqiu3:{},
juedao:{
enable:'phaseUse',
filter:function(event,player){
return player.isLinked()==false;
},
filterCard:true,
check:function(card){
return 6-get.value(card);
},
content:function(){
if(player.isLinked()==false) player.link();
},
ai:{
order:2,
result:{
player:function(player){
if(player.isLinked()) return 0;
return 1;
},
},
effect:{
target:function(card,player,target){
if(card.name=='tiesuo'){
if(target.isLinked()){
return [0,-0.5];
}
else{
return [0,0.5];
}
}
}
}
},
mod:{
globalFrom:function(from,to,distance){
if(from.isLinked()) return distance+1;
},
globalTo:function(from,to,distance){
if(to.isLinked()) return distance+1;
},
}
},
geju:{
trigger:{player:'phaseBegin'},
frequent:true,
filter:function(event,player){
var list=[];
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(player!=players[i]) list.add(players[i].group);
}
list.remove('unknown');
for(var i=0;i<players.length;i++){
if(players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},players[i],player)){
list.remove(players[i].group);
}
}
}
return list.length>0;
},
content:function(){
var list=[];
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(player!=players[i]) list.add(players[i].group);
}
list.remove('unknown');
for(var i=0;i<players.length;i++){
if(players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},players[i],player)){
list.remove(players[i].group);
}
}
}
if(list.length>0) player.draw(list.length);
}
},
diyqiangxi:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
return get.subtype(card)=='equip1';
},
selectCard:[0,1],
filterTarget:function(card,player,target){
if(player==target) return false;
return get.distance(player,target,'attack')<=1;
},
content:function(){
"step 0"
if(cards.length==0){
player.loseHp();
}
"step 1"
target.damage();
"step 2"
if(target.isAlive()&&target.countCards('he')){
player.discardPlayerCard(target);
}
},
check:function(card){
return 10-get.value(card);
},
position:'he',
ai:{
order:8,
result:{
player:function(player,target){
if(ui.selected.cards.length) return 0;
if(player.hp>=target.hp) return -0.9;
if(player.hp<=2) return -10;
return -2;
},
target:function(player,target){
if(player.hp<=1) return 0;
return get.damageEffect(target,player);
}
}
},
threaten:1.3
},
},
translate:{
diy_liufu:'刘馥',
diy_xizhenxihong:'习珍习宏',
diy_liuzan:'留赞',
diy_zaozhirenjun:'枣祗任峻',
diy_yangyi:'杨仪',
diy_tianyu:'田豫',
// diy_caocao:'曹操',
diy_menghuo:'孟获',
diy_huangzhong:'黄汉升',
diy_xuhuang:'徐公明',
diy_dianwei:'新典韦',
diy_weiyan:'魏文长',
xicai:'惜才',
diyjianxiong:'奸雄',
diy_feishi:'费诗',
shuaiyan:'率言',
moshou:'墨守',
diy_hanlong:'韩龙',
diy_luxun:'陆伯言',
diy_yuji:'于吉',
diy_zhouyu:'周公瑾',
diy_lukang:'陆抗',
diy_caiwenji:'蔡昭姬',
diy_zhenji:'甄宓',
ns_zuoci:'左慈',
ns_wangyun:'王允',
ns_lvzhi:'吕后',
ns_nanhua:'南华',
ns_nanhua_left:'幻身·左',
ns_nanhua_right:'幻身·右',
ns_huamulan:'sp花木兰',
ns_huangzu:'黄祖',
ns_yanliang:'颜良',
ns_wenchou:'文丑',
ns_jinke:'荆轲',
nspinmin:'拼命',
nspinmin_info:'锁定技当你于回合内死亡时你不死亡并增加一点体力上限每回合最多增加1点且不能超过4当你于回合外死亡时你不死亡并减少一点体力上限体力上限为0会导致你死亡',
nsshishou:'失手',
nsshishou_info:'锁定技当你于回合内失去手牌时你失去一点体力并摸一张牌你回合内使用的牌数不能超过4',
nsduijue:'对决',
nsduijue_info:'出牌阶段开始时,你可以弃置一张手牌,若如此做,此阶段你可以将一张与此牌颜色不同的手牌当作[决斗]使用',
nsshuangxiong:'双雄',
nsshuangxiong_info:'当你使用[决斗]或被使用[决斗]时,你可以将武将牌翻面',
nsshuangxiong_append:'背面武将文丑2体力你可以将一张牌当[杀]打出',
nsguanyong:'冠勇',
nsguanyong_info:'你可以将一张牌当[杀]打出',
nsjihui:'急恚',
nsjihui_info:'锁定技,每当一名角色一次弃置了三张或更多的牌,你获得一个额外回合;你的额外回合内,你使用牌只能指定你与上一回合角色为目标',
nsmouyun:'谋运',
nsmouyun_info:'出牌阶段限一次若你的体力值或当前轮数为奇数你可以弃置场上体力值最少的一名其他角色区域内的X张牌。X为其损失的体力值',
nscongjun:'从军',
nscongjun_info:'锁定技游戏开始时你变身为一名随机男性角色当一名敌方角色使用无懈可击时你有小概率亮出此武将并变回花木兰然后对该角色造成2点伤害',
nshuanxian:'幻仙',
nshuanxian_info:'锁定技游戏开始时你获得随从“幻身·右”当你首次受到伤害时你获得随从“幻身·左”体力上限2初始手牌2摸牌阶段少摸一张牌在你的回合中如果有对应幻身你以【幻身·左-本体-幻身·右】的顺序进行3个连续回合',
nstaiping:'太平',
nstaiping_info:'当你受到一点伤害后(首次伤害除外),你可以选择一项: ①令一个“幻身”增加一点体力上限。②令一个“幻身”回复一点体力。',
nsshoudao:'授道',
nsshoudao_info:'当“幻身”全部死亡时,你获得技能“雷击”和“鬼道”。当你死亡时,若此时有两个“幻身”,你可以令一名其他角色获得技能“雷击”和“鬼道”。若有一个“幻身”,你可以令一名其他角色获得技能“雷击”或“鬼道”。(杀死你的角色除外)',
nsnongquan:'弄权',
nsnongquan_info:'出牌阶段不限次数,你可以将最后一张手牌当【无中生有】使用',
nsdufu:'毒妇',
nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源',
rejizhi:'集智',
rejizhi_info:'当你使用一张装备牌或锦囊牌时你可以摸一张牌并展示之若此牌是基本牌你须弃置一张手牌每回合限3次',
yiesheng:'回雪',
yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。',
liangji:'环计',
liangji_info:'出牌阶段限一次,你可以选择一名其他角色并将一张手牌置于其武将牌上。目标角色于摸牌阶段开始时,获得此牌。若其为男性角色,则获得技能【无双】,若其为女性角色,则获得技能【离间】,直到回合结束。',
jugong:'居功',
jugong_info:'回合外每名角色的回合限一次,每当场上有角色因受到【杀】或【决斗】造成的伤害,你可以摸一张牌并且将一张手牌置于你的武将牌上,称之为“功”。在你即将受到伤害时,你可以弃置两张“功”,防止此伤害。',
chengmou:'逞谋',
chengmou_info:'摸牌阶段开始时,若你有“功”牌,你获得之,若你所获得的“功”牌多于两张,你须失去一点体力。',
nsxinsheng:'新生',
nsxinsheng_info:'每当你对其他角色造成伤害后若你未受伤则你可以增加X点体力上限并摸X张牌X为伤害点数',
nsdunxing:'遁形',
nsdunxing_info:'每当你即将受到其他角色造成的伤害时若你已受伤则你可以防止此伤害改为失去X点体力上限并摸X张牌X为伤害点数',
liangce:'粮策',
liangce_info:'①出牌阶段限一次,你可以将一张基本牌当【五谷丰登】使用。②当因执行【五谷丰登】的效果而亮出的牌因效果执行完毕而置入弃牌堆后,你可以选择一名角色,令该角色获取之',
jianbi:'坚壁',
jianbi_info:'当你成为锦囊牌的目标时若此牌的目标包括其他角色你可以令此牌对1个目标无效',
juntun:'军屯',
juntun_info:'出牌阶段,你可以重铸装备牌',
choudu:'筹度',
choudu_info:'出牌阶段限一次,你可以弃置一张牌,并指定一名角色视为其使用一张调兵遣将',
liduan:'立断',
liduan_info:'当一名其他角色于其回合外获得牌后若其此次获得的牌数为1且为装备牌无论是否可见你可以令该角色选择一项1.使用此牌2.将一张手牌交给你',
fuchou:'负仇',
fuchou2:'负仇',
fuchou_info:'当你成为【杀】的目标时你可以将一张牌交给此【杀】的使用者令此【杀】对你无效且你到其的距离于当前回合内视为1若如此做此回合的结束阶段开始时其令你摸一张牌然后你需对其使用【杀】否则失去1点体力',
jinyan:'噤言',
jinyan_info:'锁定技。若你的体力值不大于2你的黑色锦囊牌视为【杀】',
chezhen:'车阵',
chezhen_info:'锁定技。若你的装备区里:没有牌,你的防御距离+1有牌你的进攻距离+1',
youzhan:'诱战',
youzhan_info:'当以你距离不大于1的角色为目标的【杀】的使用结算开始时你可以弃置一张装备牌令该角色视为使用【诱敌深入】',
kangyin:'亢音',
kangyin2:'亢音',
kangyin_info:'出牌阶段限一次你可以失去1点体力并选择一名其他角色弃置该角色的一张牌。若此牌为基本牌你可以令一至X名角色各摸一张牌不为基本牌于此回合内你的进攻距离+X且你使用杀的额外目标数上限+X。X为你已损失的体力值',
zhucheng:'筑城',
zhucheng2:'筑城',
zhucheng_info:'①结束阶段开始时若没有“筑”你可以将牌堆顶的X张牌置于你的武将牌上称为“筑”X为你已损失的体力值与1中的较大值否则你可以获取所有“筑”。②当你成为杀的目标时若有“筑”你可以令此杀的使用者弃置X张牌X为“筑”的数量否则杀对你无效',
duoqi:'夺气',
duoqi_info:'当一名角色于除你之外的角色的出牌阶段内因弃置而失去牌后,你可以移去一张“筑”,并结束此出牌阶段',
siji:'伺机',
ciqiu:'刺酋',
ciqiu2:'刺酋',
ciqiu3:'刺酋',
diy_liuyan:'刘焉',
juedao:'绝道',
geju:'割据',
shaoying:'烧营',
zonghuo:'纵火',
diychanyuan:'缠怨',
diyguhuo:'蛊惑',
jieyan:'劫焰',
honglian:'红莲',
xiongzi:'雄姿',
luweiyan:'围堰',
guihan:'归汉',
diyduanliang:'断粮',
diyduanliang1:'断粮',
diyduanliang2:'断粮',
diyqiangxi:'强袭',
diykuanggu:'狂骨',
diyzaiqi:'再起',
batu:'霸图',
zaiqix:'再起',
diy_jiaoxia:'皎霞',
yaliang:'雅量',
yaliang_info:'每当你对其他角色造成1点伤害后或受到其他角色造成的1点伤害后你可与该角色各摸一张牌。',
diy_jiaoxia_info:'每当你成为红色牌的目标,你可以摸一张牌',
zaiqix_info:'摸牌阶段若你已受伤你可以改为展示牌堆顶的X+1张牌X为你已损失的体力值其中每有一张♥牌你回复1点体力然后弃掉这些♥牌将其余的牌收入手牌。',
batu_info:'结束阶段你可以将手牌数补至XX为现存的势力数',
diyzaiqi_info:'锁定技你摸牌阶段额外摸X张牌X为你已损失的体力值',
diykuanggu_info:'锁定技,每当你造成一点伤害,你在其攻击范围内,你回复一点体力,否则你摸一张牌',
diyqiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害并弃置其一张牌,每回合限一次。',
diyduanliang_info:'出牌阶段限一次你可以将一张黑色的基本牌当兵粮寸断对一名角色使用然后摸一张牌。你的兵粮寸断可以指定距离2以内的角色作为目标',
guihan_info:'限定技,当你进入濒死状态时,可以指定一名男性角色与其各回复一点体力并摸两张牌',
luweiyan_info:'出牌阶段限一次,你可以将一张非基本牌当作水攻使用;结算后你可以视为对其中一个目标使用一张不计入出杀次数的杀',
xiongzi_info:'锁定技你于摸牌阶段额外摸X+1张牌X为你装备区牌数的一半向下取整',
honglian_info:'每当你受到来自其他角色的伤害,可以弃置伤害来源的所有红色牌',
jieyan_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害',
diyguhuo_info:'锁定技,准备阶段,你摸两张牌,然后弃置区域内的两张牌',
diychanyuan_info:'锁定技,杀死你的角色失去一点体力上限',
zonghuo_info:'你可弃置一张牌将你即将造成的伤害变为火焰伤害',
shaoying_info:'每当你造成一次火焰伤害可指定距离受伤害角色1以内的另一名角色并展示牌堆顶的一张牌若此牌为红色该角色受到一点火焰伤害',
juedao_info:'出牌阶段,你可以弃置一张手牌,横置你的武将牌;锁定技,若你处于连环状态,你进攻距离-1、防御距离+1。',
geju_info:'准备阶段开始时你可以摸X张牌X为攻击范围内不含有你的势力数。',
siji_info:'弃牌阶段结束后你可以摸2X张牌X为你于此阶段内弃置的【杀】的数量。',
ciqiu_info:'锁定技,每当你使用【杀】对目标角色造成伤害时,若该角色未受伤,你令此伤害+1若其因此进入濒死状态你令其死亡然后你失去“刺酋”。 ',
shuaiyan_info:'每当其他角色于你的回合外回复体力后你可以令该角色选择一项1.令你摸一张牌2.令你弃置其一张牌。',
moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。',
xicai_info:'你可以立即获得对你造成伤害的牌',
diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
},
};
});