noname/card/standard.js

2990 lines
88 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('card',function(lib,game,ui,get,ai,_status){
return {
name:'standard',
connect:true,
card:{
damage:{
ai:{
result:{
target:-1.5
},
tag:{
damage:1
}
}
},
losehp:{
ai:{
result:{
target:-1.5
},
tag:{
loseHp:1
}
}
},
recover:{
ai:{
result:{
target:1.5
},
tag:{
recover:1
}
}
},
firedamage:{
ai:{
result:{
target:-1.5
},
tag:{
damage:1,
fireDamage:1,
natureDamage:1,
}
}
},
thunderdamage:{
ai:{
result:{
target:-1.5
},
tag:{
damage:1,
thunderDamage:1,
natureDamage:1,
}
}
},
icedamage:{
ai:{
result:{
target:-1.5
},
tag:{
damage:1,
iceDamage:1,
natureDamage:1,
}
}
},
respondShan:{
ai:{
result:{
target:-1.5,
},
tag:{
respond:1,
respondShan:1,
damage:1
}
}
},
sha:{
audio:true,
fullskin:true,
nature:['thunder','fire','kami','ice'],
type:'basic',
enable:true,
usable:1,
updateUsable:'phaseUse',
global:'icesha_skill',
range:function(card,player,target){
return player.inRange(target);
},
selectTarget:1,
cardPrompt:function(card){
if(card.nature=='stab') return '出牌阶段对你攻击范围内的一名角色使用。其须使用一张【闪】且在此之后需弃置一张手牌没有则不弃。否则你对其造成1点伤害。';
if(lib.linked.contains(card.nature)) return '出牌阶段对你攻击范围内的一名角色使用。其须使用一张【闪】否则你对其造成1点'+get.translation(card.nature)+'属性伤害。';
return '出牌阶段对你攻击范围内的一名角色使用。其须使用一张【闪】否则你对其造成1点伤害。';
},
yingbian_prompt:function(card){
var str='';
if(get.cardtag(card,'yingbian_hit')){
str+='此牌不可被响应';
}
if(get.cardtag(card,'yingbian_damage')){
if(str.length) str+='';
str+='此牌的伤害值基数+1';
}
if(!str.length||get.cardtag(card,'yingbian_add')){
if(str.length) str+='';
str+='当你使用此牌选择目标后,你可为此牌增加一个目标';
}
return str;
},
yingbian:function(event){
var card=event.card,bool=false;
if(get.cardtag(card,'yingbian_hit')){
bool=true;
event.directHit.addArray(game.players);
game.log(card,'不可被响应');
}
if(get.cardtag(card,'yingbian_damage')){
bool=true;
if(typeof event.baseDamage!='number') event.baseDamage=1;
event.baseDamage++;
game.log(event.card,'的伤害值基数+1');
}
if(!bool||get.cardtag(card,'yingbian_add')){
event.yingbian_addTarget=true;
}
},
yingbian_tags:['hit','damage','add'],
filterTarget:function(card,player,target){return player!=target},
content:function(){
"step 0"
if(typeof event.shanRequired!='number'||!event.shanRequired||event.shanRequired<0){
event.shanRequired=1;
}
if(typeof event.baseDamage!='number') event.baseDamage=1;
if(typeof event.extraDamage!='number') event.extraDamage=0;
"step 1"
if(event.directHit||event.directHit2||(!_status.connectMode&&lib.config.skip_shan&&!target.hasShan())){
event._result={bool:false};
}
else if(event.skipShan){
event._result={bool:true,result:'shaned'};
}
else{
var next=target.chooseToUse('请使用一张闪响应杀');
next.set('type','respondShan');
next.set('filterCard',function(card,player){
if(get.name(card)!='shan') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
});
if(event.shanRequired>1){
next.set('prompt2','(共需使用'+event.shanRequired+'张闪)');
}
else if(event.card.nature=='stab'){
next.set('prompt2','(在此之后仍需弃置一张手牌)');
}
next.set('ai1',function(card){
var target=_status.event.player;
var evt=_status.event.getParent();
var bool=true;
if(_status.event.shanRequired>1&&!get.is.object(card)&&target.countCards('h','shan')<_status.event.shanRequired){
bool=false;
}
else if(target.hasSkillTag('useShan')){
bool=true;
}
else if(target.hasSkillTag('noShan')){
bool=false;
}
else if(get.damageEffect(target,evt.player,target,evt.card.nature)>=0) bool=false;
if(bool){
return get.order(card);
}
return 0;
}).set('shanRequired',event.shanRequired);
next.set('respondTo',[player,card]);
//next.autochoose=lib.filter.autoRespondShan;
}
"step 2"
if(!result||!result.bool||!result.result||result.result!='shaned'){
event.trigger('shaHit');
}
else{
event.shanRequired--;
if(event.shanRequired>0){
event.goto(1);
}
else if(event.card.nature=='stab'&&target.countCards('h')>0){
event.responded=result;
event.goto(4);
}
else{
event.trigger('shaMiss');
event.responded=result;
}
}
"step 3"
if((!result||!result.bool||!result.result||result.result!='shaned')&&!event.unhurt){
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
event.result={bool:true}
event.trigger('shaDamage');
}
else{
event.result={bool:false}
event.trigger('shaUnhirt');
}
event.finish();
"step 4"
target.chooseToDiscard('刺杀:请弃置一张牌,否则此【杀】依然造成伤害').set('ai',function(card){
var target=_status.event.player;
var evt=_status.event.getParent();
var bool=true;
if(get.damageEffect(target,evt.player,target,evt.card.nature)>=0) bool=false;
if(bool){
return 8-get.useful(card);
}
return 0;
});
"step 5"
if((!result||!result.bool)&&!event.unhurt){
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
event.result={bool:true}
event.trigger('shaDamage');
event.finish();
}
else{
event.trigger('shaMiss');
}
"step 6"
if((!result||!result.bool)&&!event.unhurt){
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
event.result={bool:true}
event.trigger('shaDamage');
event.finish();
}
else{
event.result={bool:false}
event.trigger('shaUnhirt');
}
},
ai:{
yingbian:function(card,player,targets,viewer){
if(get.attitude(viewer,player)<=0) return 0;
var base=0,hit=false;
if(get.cardtag(card,'yingbian_hit')){
hit=true;
if(targets.filter(function(target){
return target.hasShan()&&get.attitude(viewer,target)<0&&get.damageEffect(target,player,viewer,get.nature(card))>0;
})) base+=5;
}
if(get.cardtag(card,'yingbian_all')){
if(game.hasPlayer(function(current){
return !targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0;
})) base+=5;
}
if(get.cardtag(card,'yingbian_damage')){
if(targets.filter(function(target){
return get.attitude(player,target)<0&&(hit||!target.mayHaveShan()||player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true))&&!target.hasSkillTag('filterDamage',null,{
player:player,
card:card,
jiu:true,
})
})) base+=5;
}
return base;
},
canLink:function(player,target,card){
if(!target.isLinked()&&!player.hasSkill('wutiesuolian_skill')) return false;
if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)) return false;
if(player.hasSkill('jueqing')||player.hasSkill('gangzhi')||target.hasSkill('gangzhi')) return false;
return true;
},
basic:{
useful:[5,3,1],
value:[5,3,1],
},
order:function(item,player){
if(player.hasSkillTag('presha',true,null,true)) return 10;
if(lib.linked.contains(get.nature(item))){
if(game.hasPlayer(function(current){
return current!=player&&current.isLinked()&&player.canUse(item,current,null,true)&&get.effect(current,item,player,player)>0&&lib.card.sha.ai.canLink(player,current,item);
})&&game.countPlayer(function(current){
return current.isLinked()&&get.damageEffect(current,player,player,get.nature(item))>0;
})>1) return 3.1;
return 3;
}
return 3.05;
},
result:{
target:function(player,target,card,isLink){
var eff=function(){
if(!isLink&&player.hasSkill('jiu')){
if(!target.hasSkillTag('filterDamage',null,{
player:player,
card:card,
jiu:true,
})){
if(get.attitude(player,target)>0){
return -7;
}
else{
return -4;
}
}
return -0.5;
}
return -1.5;
}();
if(!isLink&&target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)) return eff/1.2;
return eff;
},
},
tag:{
respond:1,
respondShan:1,
damage:function(card){
if(card.nature=='poison') return;
return 1;
},
natureDamage:function(card){
if(card.nature) return 1;
},
fireDamage:function(card,nature){
if(card.nature=='fire') return 1;
},
thunderDamage:function(card,nature){
if(card.nature=='thunder') return 1;
},
poisonDamage:function(card,nature){
if(card.nature=='poison') return 1;
}
}
}
},
shacopy:{
ai:{
basic:{
useful:[5,3,1],
value:[5,3,1],
},
order:3,
result:{
target:-1.5,
},
tag:{
respond:1,
respondShan:1,
damage:function(card){
if(card.nature=='poison') return;
return 1;
},
natureDamage:function(card){
if(card.nature) return 1;
},
fireDamage:function(card,nature){
if(card.nature=='fire') return 1;
},
thunderDamage:function(card,nature){
if(card.nature=='thunder') return 1;
},
poisonDamage:function(card,nature){
if(card.nature=='poison') return 1;
}
}
}
},
shan:{
audio:true,
fullskin:true,
type:'basic',
cardcolor:'red',
notarget:true,
nodelay:true,
yingbian_prompt:function(card){
var str='';
if(get.cardtag(card,'yingbian_gain')){
str+='当你声明使用此牌时,你获得此牌响应的目标牌';
}
if(!str.length||get.cardtag(card,'yingbian_draw')){
if(str.length) str+='';
str+='当你声明使用此牌时,你摸一张牌';
}
return str;
},
yingbian_tags:['gain','draw'],
yingbian:function(event){
var bool=false;
if(get.cardtag(event.card,'yingbian_gain')){
bool=true;
var cardx=event.respondTo;
if(cardx&&cardx[1]&&cardx[1].cards&&cardx[1].cards.filterInD('od').length) event.player.gain(cardx[1].cards.filterInD('od'),'gain2','log');
}
if(!bool||get.cardtag(event.card,'yingbian_draw')) event.player.draw();
},
content:function(){
event.result='shaned';
event.getParent().delayx=false;
game.delay(0.5);
},
ai:{
order:3,
basic:{
useful:[7,5.1,2],
value:[7,5.1,2],
},
result:{player:1},
//expose:0.2
}
},
tao:{
fullskin:true,
type:'basic',
cardcolor:'red',
toself:true,
enable:function(card,player){
return player.hp<player.maxHp;
},
savable:true,
selectTarget:-1,
filterTarget:function(card,player,target){
return target==player&&target.hp<target.maxHp;
},
modTarget:function(card,player,target){
return target.hp<target.maxHp;
},
content:function(){
target.recover(event.baseDamage||1);
},
ai:{
basic:{
order:function(card,player){
if(player.hasSkillTag('pretao')) return 5;
return 2;
},
useful:[6.5,4,3,2],
value:[6.5,4,3,2],
},
result:{
target:2,
target_use:function(player,target){
// if(player==target&&player.hp<=0) return 2;
if(player.hasSkillTag('nokeep',true,null,true)) return 2;
var nd=player.needsToDiscard();
var keep=false;
if(nd<=0){
keep=true;
}
else if(nd==1&&target.hp>=2&&target.countCards('h','tao')<=1){
keep=true;
}
var mode=get.mode();
if(target.hp>=2&&keep&&target.hasFriend()){
if(target.hp>2||nd==0) return 0;
if(target.hp==2){
if(game.hasPlayer(function(current){
if(target!=current&&get.attitude(target,current)>=3){
if(current.hp<=1) return true;
if((mode=='identity'||mode=='versus'||mode=='chess')&&current.identity=='zhu'&&current.hp<=2) return true;
}
})){
return 0;
}
}
}
if(target.hp<0&&target!=player&&target.identity!='zhu') return 0;
var att=get.attitude(player,target);
if(att<3&&att>=0&&player!=target) return 0;
var tri=_status.event.getTrigger();
if(mode=='identity'&&player.identity=='fan'&&target.identity=='fan'){
if(tri&&tri.name=='dying'&&tri.source&&tri.source.identity=='fan'&&tri.source!=target){
var num=game.countPlayer(function(current){
if(current.identity=='fan'){
return current.countCards('h','tao');
}
});
if(num>1&&player==target) return 2;
return 0;
}
}
if(mode=='identity'&&player.identity=='zhu'&&target.identity=='nei'){
if(tri&&tri.name=='dying'&&tri.source&&tri.source.identity=='zhong'){
return 0;
}
}
if(mode=='stone'&&target.isMin()&&
player!=target&&tri&&tri.name=='dying'&&player.side==target.side&&
tri.source!=target.getEnemy()){
return 0;
}
return 2;
},
},
tag:{
recover:1,
save:1,
}
}
},
bagua:{
fullskin:true,
type:'equip',
subtype:'equip2',
ai:{
basic:{
equipValue:7.5
}
},
skills:['bagua_skill']
},
jueying:{
fullskin:true,
type:'equip',
subtype:'equip3',
distance:{globalTo:1},
},
dilu:{
fullskin:true,
type:'equip',
subtype:'equip3',
distance:{globalTo:1},
},
zhuahuang:{
fullskin:true,
type:'equip',
subtype:'equip3',
distance:{globalTo:1},
},
chitu:{
fullskin:true,
type:'equip',
subtype:'equip4',
distance:{globalFrom:-1},
},
dawan:{
fullskin:true,
type:'equip',
subtype:'equip4',
distance:{globalFrom:-1},
},
zixin:{
fullskin:true,
type:'equip',
subtype:'equip4',
distance:{globalFrom:-1},
},
zhuge:{
fullskin:true,
type:'equip',
subtype:'equip1',
ai:{
order:function(){
return get.order({name:'sha'})-0.1;
},
equipValue:function(card,player){
if(player._zhuge_temp) return 1;
player._zhuge_temp=true;
var result=function(){
if(!game.hasPlayer(function(current){
return get.distance(player,current)<=1&&player.canUse('sha',current)&&get.effect(current,{name:'sha'},player,player)>0;
})){
return 1;
}
if(player.hasSha()&&_status.currentPhase==player){
if(player.getEquip('zhuge')&&player.countUsed('sha')||player.getCardUsable('sha')==0){
return 10;
}
}
var num=player.countCards('h','sha');
if(num>1) return 6+num;
return 3+num;
}();
delete player._zhuge_temp;
return result;
},
basic:{
equipValue:5
},
tag:{
valueswap:1
}
},
skills:['zhuge_skill']
},
cixiong:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-1},
ai:{
basic:{
equipValue:2
}
},
skills:['cixiong_skill']
},
qinggang:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-1},
ai:{
basic:{
equipValue:2
}
},
skills:['qinggang_skill']
},
qinglong:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-2},
ai:{
equipValue:function(card,player){
return Math.min(2.5+player.countCards('h','sha'),4);
},
basic:{
equipValue:3.5
}
},
skills:['qinglong_skill','qinglong_guozhan']
},
zhangba:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-2},
ai:{
equipValue:function(card,player){
var num=2.5+player.countCards('h')/3;
return Math.min(num,4);
},
basic:{
equipValue:3.5
}
},
skills:['zhangba_skill']
},
guanshi:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-2},
ai:{
equipValue:function(card,player){
var num=2.5+(player.countCards('h')+player.countCards('e'))/2.5;
return Math.min(num,5);
},
basic:{
equipValue:4.5,
}
},
skills:['guanshi_skill']
},
fangtian:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-3},
ai:{
basic:{
equipValue:2.5
}
},
skills:['fangtian_skill','fangtian_guozhan']
},
qilin:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-4},
ai:{
basic:{
equipValue:3
}
},
skills:['qilin_skill']
},
wugu:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
cardcolor:'red',
selectTarget:-1,
filterTarget:true,
contentBefore:function(){
"step 0"
if(!targets.length){
event.finish();
return;
}
if(get.is.versus()){
player.chooseControl('顺时针','逆时针',function(event,player){
if(player.next.side==player.side) return '逆时针';
return '顺时针';
}).set('prompt','选择'+get.translation(card)+'的结算方向');
}
else{
event.goto(2);
}
"step 1"
if(result&&result.control=='顺时针'){
var evt=event.getParent(),sorter=(_status.currentPhase||player);
evt.fixedSeat=true;
evt.targets.sortBySeat(sorter);
evt.targets.reverse();
if(evt.targets[evt.targets.length-1]==sorter){
evt.targets.unshift(evt.targets.pop());
}
}
"step 2"
ui.clear();
var num;
if(event.targets){
num=event.targets.length;
}
else{
num=game.countPlayer();
}
var cards=get.cards(num);
game.cardsGotoOrdering(cards).relatedEvent=event.getParent();
var dialog=ui.create.dialog('五谷丰登',cards,true);
_status.dieClose.push(dialog);
dialog.videoId=lib.status.videoId++;
game.addVideo('cardDialog',null,['五谷丰登',get.cardsInfo(cards),dialog.videoId]);
event.getParent().preResult=dialog.videoId;
game.broadcast(function(cards,id){
var dialog=ui.create.dialog('五谷丰登',cards,true);
_status.dieClose.push(dialog);
dialog.videoId=id;
},cards,dialog.videoId);
game.log(event.card,'亮出了',cards);
},
content:function(){
"step 0"
for(var i=0;i<ui.dialogs.length;i++){
if(ui.dialogs[i].videoId==event.preResult){
event.dialog=ui.dialogs[i];break;
}
}
if(!event.dialog){
event.finish();
return;
}
if(event.dialog.buttons.length>1){
var next=target.chooseButton(true,function(button){
return get.value(button.link,_status.event.player);
});
next.set('dialog',event.preResult);
next.set('closeDialog',false);
next.set('dialogdisplay',true);
}
else{
event.directButton=event.dialog.buttons[0];
}
"step 1"
var dialog=event.dialog;
var card;
if(event.directButton){
card=event.directButton.link;
}
else{
for(var i of dialog.buttons){
if(i.link==result.links[0]){
card=i.link;
break;
}
}
if(!card) card=event.dialog.buttons[0].link;
}
var button;
for(var i=0;i<dialog.buttons.length;i++){
if(dialog.buttons[i].link==card){
button=dialog.buttons[i];
button.querySelector('.info').innerHTML=function(target){
if(target._tempTranslate) return target._tempTranslate;
var name=target.name;
if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
return get.translation(name);
}(target);
dialog.buttons.remove(button);
break;
}
}
var capt=get.translation(target)+'选择了'+get.translation(button.link);
if(card){
target.gain(card,'visible');
target.$gain2(card);
game.broadcast(function(card,id,name,capt){
var dialog=get.idDialog(id);
if(dialog){
dialog.content.firstChild.innerHTML=capt;
for(var i=0;i<dialog.buttons.length;i++){
if(dialog.buttons[i].link==card){
dialog.buttons[i].querySelector('.info').innerHTML=name;
dialog.buttons.splice(i--,1);
break;
}
}
}
},card,dialog.videoId,function(target){
if(target._tempTranslate) return target._tempTranslate;
var name=target.name;
if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
return get.translation(name);
}(target),capt);
}
dialog.content.firstChild.innerHTML=capt;
game.addVideo('dialogCapt',null,[dialog.videoId,dialog.content.firstChild.innerHTML]);
game.log(target,'选择了',button.link);
game.delay();
},
contentAfter:function(){
for(var i=0;i<ui.dialogs.length;i++){
if(ui.dialogs[i].videoId==event.preResult){
var dialog=ui.dialogs[i];
dialog.close();
_status.dieClose.remove(dialog);
if(dialog.buttons.length){
event.remained=[];
for(var i=0;i<dialog.buttons.length;i++){
event.remained.push(dialog.buttons[i].link);
}
event.trigger('wuguRemained');
}
break;
}
}
game.broadcast(function(id){
var dialog=get.idDialog(id);
if(dialog){
dialog.close();
_status.dieClose.remove(dialog);
}
},event.preResult);
game.addVideo('cardDialog',null,event.preResult);
},
ai:{
wuxie:function(){
if(Math.random()<0.5) return 0;
},
basic:{
order:3,
useful:0.5,
},
result:{
target:function(player,target){
var sorter=(_status.currentPhase||player);
if(get.is.versus()){
if(target==sorter) return 1.5;
return 1;
}
if(player.hasUnknown(2)){
return 0;
}
return (1-get.distance(sorter,target,'absolute')/game.countPlayer())*get.attitude(player,target)>0?0.5:0.7;
}
},
tag:{
draw:1,
multitarget:1
}
}
},
taoyuan:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
selectTarget:-1,
cardcolor:'red',
reverseOrder:true,
yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标',
yingbian_tags:['remove'],
yingbian:function(event){
event.yingbian_removeTarget=true;
},
filterTarget:function(card,player,target){
//return target.hp<target.maxHp;
return true;
},
ignoreTarget:function(card,player,target){
return target.isHealthy();
},
content:function(){
target.recover();
},
ai:{
basic:{
order:function(){
return 11;
},
useful:[3,1],
value:0,
},
result:{
target:function(player,target){
return (target.hp<target.maxHp)?2:0;
}
},
tag:{
recover:0.5,
multitarget:1
}
}
},
nanman:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
selectTarget:-1,
yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标',
yingbian_tags:['remove'],
yingbian:function(event){
event.yingbian_removeTarget=true;
},
filterTarget:function(card,player,target){
return target!=player;
},
reverseOrder:true,
content:function(){
"step 0"
if(typeof event.baseDamage!='number') event.baseDamage=1;
if(event.directHit) event._result={bool:false};
else{
var next=target.chooseToRespond({name:'sha'});
next.set('ai',function(card){
var evt=_status.event.getParent();
if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0;
if(evt.player.hasSkillTag('notricksource')) return 0;
if(evt.target.hasSkillTag('notrick')) return 0;
return get.order(card);
});
next.autochoose=lib.filter.autoRespondSha;
}
"step 1"
if(result.bool==false){
target.damage(event.baseDamage,event.customSource||player);
}
},
ai:{
wuxie:function(target,card,player,viewer){
if(get.attitude(viewer,target)>0&&target.countCards('h','sha')){
if(!target.countCards('h')||target.hp==1||Math.random()<0.7) return 0;
}
},
basic:{
order:9,
useful:[5,1],
value:5
},
result:{
target_use:function(player,target){
if(player.hasUnknown(2)&&get.mode()!='guozhan') return 0;
var nh=target.countCards('h');
if(get.mode()=='identity'){
if(target.isZhu&&nh<=2&&target.hp<=1) return -100;
}
if(nh==0) return -2;
if(nh==1) return -1.7
return -1.5;
},
target:function(player,target){
var nh=target.countCards('h');
if(get.mode()=='identity'){
if(target.isZhu&&nh<=2&&target.hp<=1) return -100;
}
if(nh==0) return -2;
if(nh==1) return -1.7
return -1.5;
},
},
tag:{
respond:1,
respondSha:1,
damage:1,
multitarget:1,
multineg:1,
}
}
},
wanjian:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
selectTarget:-1,
reverseOrder:true,
yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标',
yingbian_tags:['remove'],
yingbian:function(event){
event.yingbian_removeTarget=true;
},
filterTarget:function(card,player,target){
return target!=player;
},
content:function(){
"step 0"
if(typeof event.baseDamage!='number') event.baseDamage=1;
if(event.directHit) event._result={bool:false};
else{
var next=target.chooseToRespond({name:'shan'});
next.set('ai',function(card){
var evt=_status.event.getParent();
if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0;
if(evt.player.hasSkillTag('notricksource')) return 0;
if(evt.target.hasSkillTag('notrick')) return 0;
if(evt.target.hasSkillTag('noShan')){
return -1;
}
return get.order(card);
});
next.autochoose=lib.filter.autoRespondShan;
}
"step 1"
if(result.bool==false){
target.damage(event.baseDamage);
}
},
ai:{
wuxie:function(target,card,player,viewer){
if(get.attitude(viewer,target)>0&&target.countCards('h','shan')){
if(!target.countCards('h')||target.hp==1||Math.random()<0.7) return 0;
}
},
basic:{
order:9,
useful:1,
value:5
},
result:{
target_use:function(player,target){
if(player.hasUnknown(2)&&get.mode()!='guozhan') return 0;
var nh=target.countCards('h');
if(get.mode()=='identity'){
if(target.isZhu&&nh<=2&&target.hp<=1) return -100;
}
if(nh==0) return -2;
if(nh==1) return -1.7
return -1.5;
},
target:function(player,target){
var nh=target.countCards('h');
if(get.mode()=='identity'){
if(target.isZhu&&nh<=2&&target.hp<=1) return -100;
}
if(nh==0) return -2;
if(nh==1) return -1.7
return -1.5;
},
},
tag:{
respond:1,
respondShan:1,
damage:1,
multitarget:1,
multineg:1,
}
}
},
wuzhong:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
selectTarget:-1,
cardcolor:'red',
toself:true,
filterTarget:function(card,player,target){
return target==player;
},
modTarget:true,
content:function(){
if(get.is.versus()){
if(game.friend.contains(target)){
if(game.friend.length<game.enemy.length){
target.draw(3);return;
}
}
else{
if(game.friend.length>game.enemy.length){
target.draw(3);return;
}
}
}
target.draw(2);
},
ai:{
basic:{
order:7.2,
useful:4.5,
value:9.2
},
result:{
target:2,
},
tag:{
draw:2
}
}
},
juedou:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
yingbian_prompt:'你令此牌不可被响应',
yingbian_tags:['hit'],
yingbian:function(event){
event.directHit.addArray(game.players);
},
filterTarget:function(card,player,target){
return target!=player;
},
content:function(){
"step 0"
if(event.turn==undefined) event.turn=target;
if(typeof event.baseDamage!='number') event.baseDamage=1;
if(typeof event.extraDamage!='number'){
event.extraDamage=0;
}
if(!event.shaReq) event.shaReq={};
if(typeof event.shaReq[player.playerid]!='number') event.shaReq[player.playerid]=1;
if(typeof event.shaReq[target.playerid]!='number') event.shaReq[target.playerid]=1;
event.playerCards=[];
event.targetCards=[];
"step 1"
event.trigger('juedou');
event.shaRequired=event.shaReq[event.turn.playerid];
"step 2"
if(event.directHit){
event._result={bool:false};
}
else{
var next=event.turn.chooseToRespond({name:'sha'});
if(event.shaRequired>1){
next.set('prompt2','共需打出'+event.shaRequired+'张杀')
}
next.set('ai',function(card){
var event=_status.event;
var player=event.splayer;
var target=event.starget;
if(player.hasSkillTag('notricksource')) return 0;
if(target.hasSkillTag('notrick')) return 0;
if(event.shaRequired>1&&player.countCards('h','sha')<event.shaRequired) return 0;
if(event.player==target){
if(player.hasSkill('naman')) return -1;
if(get.attitude(target,player)<0||event.player.hp<=1){
return get.order(card);
}
return -1;
}
else{
if(target.hasSkill('naman')) return -1;
if(get.attitude(player,target)<0||event.player.hp<=1){
return get.order(card);
}
return -1;
}
});
next.set('splayer',player);
next.set('starget',target);
next.set('shaRequired',event.shaRequired);
next.autochoose=lib.filter.autoRespondSha;
if(event.turn==target){
next.source=player;
}
else{
next.source=target;
}
}
"step 3"
if(event.target.isDead()||event.player.isDead()){
event.finish();
}
else{
if(result.bool){
event.shaRequired--;
if(event.turn==target){
if(result.cards) event.targetCards.addArray(result.cards);
if(event.shaRequired>0) event.goto(2);
else{
event.turn=player;
event.goto(1);
}
}
else{
if(result.cards) event.playerCards.addArray(result.cards);
if(event.shaRequired>0) event.goto(2);
else{
event.turn=target;
event.goto(1);
}
}
}
else{
if(event.turn==target){
target.damage(event.baseDamage+event.extraDamage);
}
else{
player.damage(target,event.baseDamage+event.extraDamage);
}
}
}
},
ai:{
wuxie:function(target,card,player,viewer){
if(player==game.me&&get.attitude(viewer,player)>0){
return 0;
}
},
basic:{
order:5,
useful:1,
value:5.5
},
result:{
target:-1.5,
player:function(player,target,card){
if(player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)){
return 0;
}
if(get.damageEffect(target,player,target)>0&&get.attitude(player,target)>0&&get.attitude(target,player)>0){
return 0;
}
var hs1=target.getCards('h','sha');
var hs2=player.getCards('h','sha');
if(hs1.length>hs2.length+1){
return -2;
}
var hsx=target.getCards('h');
if(hsx.length>2&&hs2.length==0&&hsx[0].number<6){
return -2;
}
if(hsx.length>3&&hs2.length==0){
return -2;
}
if(hs1.length>hs2.length&&(!hs2.length||hs1[0].number>hs2[0].number)){
return -2;
}
return -0.5;
}
},
tag:{
respond:2,
respondSha:2,
damage:1,
}
}
},
shunshou:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
range:{global:1},
selectTarget:1,
postAi:function(targets){
return targets.length==1&&targets[0].countCards('j');
},
filterTarget:function(card,player,target){
if(player==target) return false;
return target.countGainableCards(player,get.is.single()?'he':'hej')>0;
},
content:function(){
var position=get.is.single()?'he':'hej';
if(target.countGainableCards(player,position)){
player.gainPlayerCard(position,target,true);
}
},
ai:{
wuxie:function(target,card,player,viewer){
if(get.attitude(viewer,player)>0&&get.attitude(viewer,target)>0){
return 0;
}
},
basic:{
order:7.5,
useful:4,
value:9
},
result:{
target:function(player,target){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})){
return 0;
}
if(get.attitude(player,target)>1){
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
tag:{
loseCard:1,
gain:1,
}
}
},
shunshou_copy:{
ai:{
basic:{
order:7.5,
useful:4,
value:9
},
result:{
target:function(player,target){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})){
return 0;
}
if(get.attitude(player,target)>1){
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
tag:{
loseCard:1,
gain:1,
}
}
},
shunshou_copy2:{
ai:{
basic:{
order:7.5,
useful:4,
value:9
},
result:{
target:function(player,target){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
return (target.countCards('e',function(card){
return get.value(card,target)<=0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})){
return 0;
}
if(get.attitude(player,target)>1){
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
tag:{
loseCard:1,
gain:1,
}
}
},
guohe:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
selectTarget:1,
postAi:function(targets){
return targets.length==1&&targets[0].countCards('j');
},
filterTarget:function(card,player,target){
if(player==target) return false;
return target.countDiscardableCards(player,get.is.single()?'he':'hej');
},
yingbian_prompt:'当你使用此牌选择目标后,你可为此牌增加一个目标',
yingbian_tags:['add'],
yingbian:function(event){
event.yingbian_addTarget=true;
},
content:function(){
'step 0'
if(!get.is.single()&&target.countDiscardableCards(player,'hej')){
player.discardPlayerCard('hej',target,true);
event.finish();
}
else{
var bool1=target.countDiscardableCards(player,'h');
var bool2=target.countDiscardableCards(player,'e');
if(bool1&&bool2){
player.chooseControl('手牌区','装备区').set('ai',function(){
return Math.random()<0.5?1:0;
}).set('prompt','弃置'+(get.translation(target))+'装备区的一张牌,或观看其手牌并弃置其中的一张牌。');
}
else event._result={control:bool1?'手牌区':'装备区'};
}
'step 1'
var pos=result.control=='手牌区'?'h':'e';
player.discardPlayerCard(target,pos,true,'visible');
},
ai:{
basic:{
order:9,
useful:5,
value:5,
},
yingbian:function(card,player,targets,viewer){
if(get.attitude(viewer,player)<=0) return 0;
if(game.hasPlayer(function(current){
return !targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0;
})) return 6;
return 0;
},
result:{
target:function(player,target){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.countCards('j',function(card){
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5;
return -1.5;
},
},
tag:{
loseCard:1,
discard:1
}
}
},
guohe_copy:{
ai:{
basic:{
order:9,
useful:5,
value:5,
},
result:{
target:function(player,target){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.countCards('j',function(card){
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5;
return -1.5;
},
},
tag:{
loseCard:1,
discard:1
}
}
},
guohe_copy2:{
ai:{
basic:{
order:9,
useful:5,
value:5,
},
result:{
target:function(player,target){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5;
return -1.5;
},
},
tag:{
loseCard:1,
discard:1
}
}
},
jiedao:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
singleCard:true,
targetprompt:['被借刀','出杀目标'],
complexSelect:true,
complexTarget:true,
multicheck:function(){
var card={name:'sha',isCard:true};
return game.hasPlayer(function(current){
if(current.getEquip(1)){
return game.hasPlayer(function(current2){
return current.inRange(current2)&&lib.filter.targetEnabled(card,current,current2);
})
}
});
},
filterTarget:function(card,player,target){
var card={name:'sha',isCard:true};
return player!=target&&target.getEquip(1)&&game.hasPlayer(function(current){
return target!=current&&target.inRange(current)&&lib.filter.targetEnabled(card,target,current);
});
},
filterAddedTarget:function(card,player,target,preTarget){
var card={name:'sha',isCard:true};
return target!=preTarget&&preTarget.inRange(target)&&lib.filter.targetEnabled(card,preTarget,target);
},
content:function(){
"step 0"
if(event.directHit||!event.addedTarget||(!_status.connectMode&&lib.config.skip_shan&&!target.hasSha())){
event.directfalse=true;
}
else{
target.chooseToUse('对'+get.translation(event.addedTarget)+'使用一张杀,或令'+get.translation(player)+'获得你的武器牌',function(card,player){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
}).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',event.addedTarget).set('addCount',false).set('respondTo',[player,card]);
}
"step 1"
if(event.directfalse||result.bool==false){
var cards=target.getCards('e',{subtype:'equip1'});
if(cards.length) player.gain(cards,target,'give','bySelf');
}
},
ai:{
wuxie:function(target,card,player,viewer){
if(player==game.me&&get.attitude(viewer,player)>0){
return 0;
}
},
basic:{
order:8,
value:2,
useful:1,
},
result:{
target:-1.5,
player:function(player){
if(player.getCards('he',{subtype:'equip1'}).length) return 0;
return 1.5;
},
},
tag:{
gain:1,
use:1,
useSha:1,
loseCard:1,
}
}
},
wuxie:{
audio:true,
fullskin:true,
type:'trick',
ai:{
basic:{
useful:[6,4,3],
value:[6,4,3],
},
result:{player:1},
expose:0.2
},
notarget:true,
yingbian_tags:['gain','draw'],
yingbian_prompt:function(card){
if(!get.cardtag(card,'yingbian_gain')) return '当你声明使用此牌时,你摸一张牌';
return '当此牌生效后,你获得此牌响应的目标牌';
},
yingbian:function(event){
if(!get.cardtag(event.card,'yingbian_gain')||get.cardtag(event.card,'yingbian_draw')) event.player.draw();
},
contentBefore:function(){
'step 0'
if(get.mode()=='guozhan'&&get.cardtag(card,'guo')){
var trigger=event.getParent(2);
if(trigger.triggername!='phaseJudge'&&!trigger.statecard&&trigger.target.identity!='ye'&&trigger.target.identity!='unknown'){
player.chooseControl('对单体使用','对势力使用').set('prompt','请选择'+get.translation(card)+'的使用方式').set('ai',function(){
return '对势力使用'
});
}
else event.finish();
}
else event.finish();
'step 1'
if(result.control=='对势力使用'){
player.chat('对势力使用');
event.getParent(2).guowuxie=true;
}
},
content:function(){
var evt=event.getParent();
event.result={
wuxied:true,
directHit:evt.directHit||[],
nowuxie:evt.nowuxie,
};
if(player.isOnline()){
player.send(function(player){
if(ui.tempnowuxie&&!player.hasWuxie()){
ui.tempnowuxie.close();
delete ui.tempnowuxie;
}
},player);
}
else if(player==game.me){
if(ui.tempnowuxie&&!player.hasWuxie()){
ui.tempnowuxie.close();
delete ui.tempnowuxie;
}
}
if(event.card.yingbian&&get.cardtag(event.card,'yingbian_gain')){
var cardx=event.getParent().respondTo;
if(cardx&&cardx[1]&&cardx[1].cards&&cardx[1].cards.filterInD('od').length) player.gain(cardx[1].cards.filterInD('od'),'gain2','log');
}
},
},
lebu:{
audio:true,
fullskin:true,
type:'delay',
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player!=target);
},
judge:function(card){
if(get.suit(card)=='heart') return 1;
return -2;
},
judge2:function(result){
if(result.bool==false) return true;
return false;
},
effect:function(){
if(result.bool==false){
player.skip('phaseUse');
}
},
ai:{
basic:{
order:1,
useful:1,
value:8,
},
result:{
ignoreStatus:true,
target:function(player,target){
var num=target.hp-target.countCards('h')-2;
if(num>-1) return -0.01;
if(target.hp<3) num--;
if(target.isTurnedOver()) num/=2;
var dist=get.distance(player,target,'absolute');
if(dist<1) dist=1;
return num/Math.sqrt(dist)*get.threaten(target,player);
}
},
tag:{
skip:'phaseUse'
}
}
},
shandian:{
audio:true,
fullskin:true,
type:'delay',
cardnature:'thunder',
modTarget:function(card,player,target){
return lib.filter.judge(card,player,target);
},
enable:function(card,player){
return player.canAddJudge(card);
},
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player==target);
},
selectTarget:[-1,-1],
toself:true,
judge:function(card){
if(get.suit(card)=='spade'&&get.number(card)>1&&get.number(card)<10) return -5;
return 1;
},
judge2:function(result){
if(result.bool==false) return true;
return false;
},
effect:function(){
if(result.bool==false){
player.damage(3,'thunder','nosource');
}
else{
player.addJudgeNext(card);
}
},
cancel:function(){
player.addJudgeNext(card);
},
ai:{
basic:{
order:1,
useful:0,
value:0,
},
result:{
target:function(player,target){
var num=game.countPlayer(function(current){
var skills=current.getSkills();
for(var j=0;j<current.skills.length;j++){
var rejudge=get.tag(current.skills[j],'rejudge',current);
if(rejudge!=undefined){
if(get.attitude(target,current)>0&&
get.attitude(current,target)>0){
return rejudge;
}
else{
return -rejudge;
}
}
}
});
if(num>0) return num;
if(num==0){
var mode=get.mode();
if(mode=='identity'){
if(target.identity=='nei') return 1;
var situ=get.situation();
if(target.identity=='fan'){
if(situ>1) return 1;
}
else{
if(situ<-1) return 1;
}
}
else if(mode=='guozhan'){
if(target.identity=='ye') return 1;
if(game.hasPlayer(function(current){
return current.identity=='unknown';
})){
return -1;
}
if(get.population(target.identity)==1){
if(target.maxHp>2&&target.hp<2) return 1;
if(game.countPlayer()<3) return -1;
if(target.hp<=2&&target.countCards('he')<=3) return 1;
}
}
}
return -1;
}
},
tag:{
// damage:1,
// natureDamage:1,
// thunderDamage:1,
}
}
},
hanbing:{
fullskin:true,
type:"equip",
subtype:"equip1",
distance:{attackFrom:-1},
skills:['hanbing_skill'],
ai:{
basic:{
equipValue:2
}
},
},
renwang:{
fullskin:true,
type:"equip",
subtype:"equip2",
skills:['renwang_skill'],
ai:{
basic:{
equipValue:7.5
},
},
},
},
skill:{
qinglong_guozhan:{
equipSkill:true,
trigger:{player:'useCard'},
forced:true,
audio:'qinglong_skill',
filter:function(event,player){
return get.mode()=='guozhan'&&event.card.name=='sha';
},
content:function(){
if(!_status.qinglong_guozhan) _status.qinglong_guozhan=[];
_status.qinglong_guozhan.add(trigger);
game.countPlayer2(function(current){
current.addTempSkill('qinglong_guozhan_mingzhi');
});
game.broadcast(function(list){
_status.qinglong_guozhan=list;
},_status.qinglong_guozhan.map(function(i){
return {targets:i.targets};
}))
var next=game.createEvent('qinglong_guozhan');
event.next.remove(next);
trigger.after.add(next);
next.setContent(function(){
_status.qinglong_guozhan.remove(event.parent);
game.broadcast(function(list){
_status.qinglong_guozhan=list;
},_status.qinglong_guozhan.map(function(i){
return {targets:i.targets};
}));
});
}
},
qinglong_guozhan_mingzhi:{
ai:{
nomingzhi:true,
skillTagFilter:function(player){
if(_status.qinglong_guozhan){
for(var i=0;i<_status.qinglong_guozhan.length;i++){
if(_status.qinglong_guozhan[i].targets.contains(player)) return true;
}
}
return false;
},
}
},
hanbing_skill:{
equipSkill:true,
trigger:{source:'damageBegin2'},
//direct:true,
audio:true,
filter:function(event){
return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.getCards('he').length>0;
},
//priority:1,
check:function(event,player){
var target=event.player;
var eff=get.damageEffect(target,player,player,event.nature);
if(get.attitude(player,target)>0){
if(eff>=0) return false;
return true;
}
if(eff<=0) return true;
if(target.hp==1) return false;
if(event.num>1||player.hasSkill('tianxianjiu')||
player.hasSkill('luoyi2')||player.hasSkill('reluoyi2')) return false;
if(target.countCards('he')<2) return false;
var num=0;
var cards=target.getCards('he');
for(var i=0;i<cards.length;i++){
if(get.value(cards[i])>6) num++;
}
if(num>=2) return true;
return false;
},
logTarget:"player",
content:function(){
"step 0"
trigger.cancel();
"step 1"
if(trigger.player.countDiscardableCards(player,'he')){
player.line(trigger.player);
player.discardPlayerCard('he',trigger.player,true);
}
"step 2"
if(trigger.player.countDiscardableCards(player,'he')){
player.line(trigger.player);
player.discardPlayerCard('he',trigger.player,true);
}
}
},
icesha_skill:{
inherit:'hanbing_skill',
trigger:{source:'damageBegin2'},
equipSkill:false,
ruleSkill:true,
filter:function(event){
return event.nature=='ice'&&event.notLink()&&event.player.getCards('he').length>0;
},
},
renwang_skill:{
equipSkill:true,
trigger:{target:'shaBegin'},
forced:true,
priority:6,
audio:true,
filter:function(event,player){
if(player.hasSkillTag('unequip2')) return false;
if(event.player.hasSkillTag('unequip',false,{
name:event.card?event.card.name:null,
target:player,
card:event.card
})) return false;
return (event.card.name=='sha'&&get.color(event.card)=='black')
},
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target){
if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{
name:card?card.name:null,
target:target,
card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:target,
card:card
})) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
}
}
}
},
zhuge_skill:{
equipSkill:true,
audio:true,
firstDo:true,
trigger:{player:'useCard1'},
forced:true,
filter:function(event,player){
return !event.audioed&&event.card.name=='sha'&&player.countUsed('sha',true)>1&&event.getParent().type=='phase';
},
content:function(){
trigger.audioed=true;
},
mod:{
cardUsable:function(card,player,num){
var cardx=player.getEquip('zhuge');
if(card.name=='sha'&&(!cardx||player.hasSkill('zhuge_skill',null,false)||(!_status.zhuge_temp&&!ui.selected.cards.contains(cardx)))){
if(get.is.versus()||get.is.changban()){
return num+3;
}
return Infinity;
}
},
cardEnabled2:function(card,player){
if(!_status.event.addCount_extra||player.hasSkill('zhuge_skill',null,false)) return;
if(card&&card==player.getEquip('zhuge')){
try{
var cardz=get.card();
}
catch(e){
return;
}
if(!cardz||cardz.name!='sha') return;
_status.zhuge_temp=true;
var bool=lib.filter.cardUsable(get.autoViewAs({name:'sha'},ui.selected.cards.concat([card])),player);
delete _status.zhuge_temp;
if(!bool) return false;
}
},
},
},
cixiong_skill:{
equipSkill:true,
trigger:{player:'useCardToPlayered'},
audio:true,
logTarget:'target',
check:function(event,player){
if(get.attitude(player,event.target)>0) return true;
var target=event.target;
return target.countCards('h')==0||!target.hasSkillTag('noh');
},
filter:function(event,player){
if(event.card.name!='sha') return false;
return player.differentSexFrom(event.target);
},
content:function(){
"step 0"
trigger.target.chooseToDiscard('弃置一张手牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){
var trigger=_status.event.getTrigger();
return -get.attitude(trigger.target,trigger.player)-get.value(card);
});
"step 1"
if(result.bool==false) player.draw();
}
},
qinggang_skill:{
equipSkill:true,
audio:true,
trigger:{
player:'useCardToPlayered',
},
filter:function(event){
return event.card.name=='sha';
},
forced:true,
logTarget:'target',
content:function(){
trigger.target.addTempSkill('qinggang2');
trigger.target.storage.qinggang2.add(trigger.card);
trigger.target.markSkill('qinggang2');
},
ai:{
unequip_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.name=='sha') return true;
return false;
}
}
},
qinggang2:{
firstDo:true,
ai:{unequip2:true},
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[];
},
onremove:true,
trigger:{
player:['damage','damageCancelled','damageZero'],
source:['damage','damageCancelled','damageZero'],
target:['shaMiss','useCardToExcluded','useCardToEnd','eventNeutralized'],
global:['useCardEnd'],
},
charlotte:true,
filter:function(event,player){
return player.storage.qinggang2&&event.card&&player.storage.qinggang2.contains(event.card)&&(event.name!='damage'||event.notLink());
},
silent:true,
forced:true,
popup:false,
priority:12,
content:function(){
player.storage.qinggang2.remove(trigger.card);
if(!player.storage.qinggang2.length) player.removeSkill('qinggang2');
},
marktext:'※',
intro:{content:'当前防具技能已失效'},
},
qinglong_skill:{
equipSkill:true,
trigger:{player:['shaMiss','eventNeutralized']},
direct:true,
filter:function(event,player){
if(get.mode()=='guozhan'||!event.card||event.card.name!='sha') return false;
return event.target.isIn()&&player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h'));
},
content:function(){
"step 0"
player.chooseToUse(get.prompt('qinglong',trigger.target),function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},trigger.target,-1).set('addCount',false).logSkill='qinglong_skill';
}
},
zhangba_skill:{
equipSkill:true,
enable:['chooseToUse','chooseToRespond'],
filterCard:true,
selectCard:2,
position:'hs',
viewAs:{name:'sha'},
complexCard:true,
filter:function(event,player){
return player.countCards('hs')>=2;
},
audio:true,
prompt:'将两张手牌当杀使用或打出',
check:function(card){
if(card.name=='sha') return 0;
return 5-get.value(card)
},
ai:{
respondSha:true,
skillTagFilter:function(player){
return player.countCards('hs')>=2;
},
}
},
guanshi_skill:{
equipSkill:true,
trigger:{
player:['shaMiss','eventNeutralized'],
},
direct:true,
audio:true,
filter:function(event,player){
if(event.type!='card'||event.card.name!='sha') return false;
return player.countCards('he',function(card){
return card!=player.getEquip('guanshi');
})>=2&&event.target.isAlive();
},
content:function(){
"step 0"
var next=player.chooseToDiscard(get.prompt('guanshi'),2,'he',function(card){
return _status.event.player.getEquip('guanshi')!=card;
});
next.logSkill='guanshi_skill';
next.set('ai',function(card){
var evt=_status.event.getTrigger();
if(get.attitude(evt.player,evt.target)<0){
if(evt.baseDamage+evt.extraDamage>=Math.min(2,evt.target.hp)){
return 8-get.value(card)
}
return 5-get.value(card)
}
return -1;
});
"step 1"
if(result.bool){
if(event.triggername=='shaMiss'){
trigger.untrigger();
trigger.trigger('shaHit');
trigger._result.bool=false;
trigger._result.result=null;
}
else{
trigger.unneutralize();
}
}
},
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(player._guanshi_temp) return;
player._guanshi_temp=true;
var bool=(get.attitude(player,arg.target)<0&&arg.card.name=='sha'&&player.countCards('he',function(card){
return card!=player.getEquip('guanshi')&&card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<5;
})>1);
delete player._guanshi_temp;
return bool;
},
},
},
fangtian_skill:{
equipSkill:true,
audio:true,
trigger:{player:'useCard1'},
forced:true,
firstDo:true,
filter:function(event,player){
if(event.card.name!='sha'||get.mode()=='guozhan') return false;
var card=event.card;
var range;
var select=get.copy(get.info(card).selectTarget);
if(select==undefined){
if(get.info(card).filterTarget==undefined) return false;
range=[1,1];
}
else if(typeof select=='number') range=[select,select];
else if(get.itemtype(select)=='select') range=select;
else if(typeof select=='function') range=select(card,player);
game.checkMod(card,player,range,'selectTarget',player);
return range[1]!=-1&&event.targets.length>range[1];
},
content:function(){},
mod:{
selectTarget:function(card,player,range){
if(card.name!='sha') return;
if(get.mode()=='guozhan') return;
if(range[1]==-1) return;
var cards=player.getCards('h');
if(!cards.length) return;
for(var i=0;i<cards.length;i++){
if(cards[i].classList.contains('selected')==false)
return;
}
range[1]+=2;
}
}
},
fangtian_guozhan:{
equipSkill:true,
trigger:{player:'useCard2'},
filter:function(event,player){
if(get.mode()!='guozhan') return false;
if(event.card.name!='sha') return false;
return game.hasPlayer(function(target){
if(event.targets.contains(target)) return false;
if(!lib.filter.filterTarget(event.card,player,target)) return false;
if(target.identity=='ye'||target.identity=='unknown') return true;
for(var i=0;i<event.targets.length;i++){
if(target.identity==event.targets[i].identity) return false;
}
return true;
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('fangtian'),[1,Infinity],function(card,player,target){
var cardx=_status.event.cardx;
if(!lib.filter.filterTarget(cardx,player,target)) return false;
var targets=_status.event.targets.slice(0).concat(ui.selected.targets);
if(targets.contains(target)) return false;
if(target.identity=='ye'||target.identity=='unknown') return true;
for(var i=0;i<targets.length;i++){
if(target.identity==targets[i].identity) return false;
}
return true;
}).set('promptbar','none').set('cardx',trigger.card).set('targets',trigger.targets).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,_status.event.cardx,player,player)
});
'step 1'
if(result.bool){
player.logSkill('fangtian_skill',result.targets);
if(!player.storage.fangtian_guozhan_trigger) player.storage.fangtian_guozhan_trigger=[];
player.storage.fangtian_guozhan_trigger.add(trigger.card);
trigger.targets.addArray(result.targets);
player.addTempSkill('fangtian_guozhan_trigger');
}
},
},
fangtian_guozhan_trigger:{
trigger:{player:'shaMiss'},
silent:true,
onremove:true,
content:function(){
if(player.storage[event.name].contains(trigger.card)) trigger.getParent().excluded.addArray(trigger.getParent().targets);
},
group:'fangtian_guozhan_remove',
},
fangtian_guozhan_remove:{
trigger:{player:['useCardAfter','useCardCancelled']},
silent:true,
filter:function(event,player){
return player.storage.fangtian_guozhan_trigger&&player.storage.fangtian_guozhan_trigger.contains(event.card);
},
content:function(){
player.storage.fangtian_guozhan_trigger.remove(trigger.card);
}
},
qilin_skill:{
equipSkill:true,
trigger:{source:'damageBegin2'},
filter:function(event,player){
return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.getCards('e',{subtype:['equip3','equip4','equip6']}).length>0
},
direct:true,
audio:true,
content:function(){
"step 0"
var att=(get.attitude(player,trigger.player)<=0);
var next=player.chooseButton();
next.set('att',att);
next.set('createDialog',['是否发动【麒麟弓】,弃置'+get.translation(trigger.player)+'的一张坐骑牌?',trigger.player.getCards('e',{subtype:['equip3','equip4','equip6']})]);
next.set('ai',function(button){
if(_status.event.att) return get.buttonValue(button);
return 0;
});
"step 1"
if(result.bool){
player.logSkill('qilin_skill',trigger.player);
trigger.player.discard(result.links[0]);
}
}
},
bagua_skill:{
equipSkill:true,
trigger:{player:['chooseToRespondBegin','chooseToUseBegin']},
filter:function(event,player){
if(event.responded) return false;
if(event.bagua_skill) return false;
if(!event.filterCard||!event.filterCard({name:'shan'},player,event)) return false;
if(event.name=='chooseToRespond'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false;
if(player.hasSkillTag('unequip2')) return false;
var evt=event.getParent();
if(evt.player&&evt.player.hasSkillTag('unequip',false,{
name:evt.card?evt.card.name:null,
target:player,
card:evt.card
})) return false;
return true;
},
audio:true,
check:function(event,player){
if(event&&(event.ai||event.ai1)){
var ai=event.ai||event.ai1;
var tmp=_status.event;
_status.event=event;
var result=ai({name:'shan'},_status.event.player,event);
_status.event=tmp;
return result>0;
}
return true;
},
content:function(){
"step 0"
trigger.bagua_skill=true;
player.judge('bagua',function(card){return (get.color(card)=='red')?1.5:-0.5}).judge2=function(result){
return result.bool;
};
"step 1"
if(result.judge>0){
trigger.untrigger();
trigger.set('responded',true);
trigger.result={bool:true,card:{name:'shan',isCard:true}}
}
},
ai:{
respondShan:true,
effect:{
target:function(card,player,target,effect){
if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{
name:card?card.name:null,
target:target,
card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:target,
card:card
})) return;
if(get.tag(card,'respondShan')) return 0.5;
}
}
}
},
_wuxie:{
trigger:{player:['useCardToBegin','phaseJudge']},
priority:5,
popup:false,
forced:true,
filter:function(event,player){
if(event.card.storage&&event.card.storage.nowuxie) return false;
var card=event.card;
if(event.name=='phaseJudge'&&card.viewAs) card={name:card.viewAs};
var info=get.info(card);
if(info.wuxieable===false) return false;
if(event.name!='phaseJudge'){
if(event.getParent().nowuxie) return false;
if(!event.target){
if(info.wuxieable) return true;
return false;
}
if(event.player.hasSkillTag('playernowuxie',false,event.card)) return false;
if(get.type(event.card)!='trick'&&!info.wuxieable) return false;
}
return true;
},
forceLoad:true,
content:function(){
'step 0'
delete event.wuxieresult;
delete event.wuxieresult2;
if(trigger.multitarget){
event.targets=trigger.targets;
}
event.target=trigger.target;
if(event.triggername=='phaseJudge'){
event.target=trigger.player;
}
event.sourcex=event.targets||event.target;
if(!event.targets&&trigger.targets&&trigger.targets.length==1){
event.sourcex2=trigger.player;
}
event.source=trigger.player;
if(event.state==undefined) event.state=true;
event.card=trigger.card;
event._global_waiting=true;
event.tempnowuxie=(trigger.targets&&trigger.targets.length>1&&!trigger.multitarget);
event.filterCard=function(card,player){
if(get.name(card)!='wuxie') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
};
event.send=function(player,state,isJudge,card,source,target,targets,id,id2,tempnowuxie,skillState){
if(skillState){
player.applySkills(skillState);
}
state=state?1:-1;
var str='';
if(isJudge){
str+=get.translation(source)+'的';
}
if(isJudge){
str+=get.translation(card,'viewAs');
}
else{
str+=get.translation(card);
}
if((targets||target)&&!isJudge){
str+='对'+get.translation(targets||target);
}
str+='将'+(state>0?'生效':'失效')+',是否无懈?';
if(player.isUnderControl(true)&&!_status.auto&&!ui.tempnowuxie&&tempnowuxie){
var translation=get.translation(card.name);
if(translation.length>=4){
translation=lib.translate[card.name+'_ab']||translation.slice(0,2);
}
ui.tempnowuxie=ui.create.control('不无懈'+translation,ui.click.tempnowuxie,'stayleft');
ui.tempnowuxie._origin=id2;
}
var next=player.chooseToUse({
filterCard:function(card,player){
if(get.name(card)!='wuxie') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
},
prompt:str,
type:'wuxie',
state:state,
_global_waiting:true,
ai1:function(){
if(isJudge){
var name=card.viewAs||card.name;
var info=lib.card[name];
if(info&&info.ai&&info.ai.wuxie){
var aiii=info.ai.wuxie(source,card,source,_status.event.player,state);
if(typeof aiii=='number') return aiii;
}
if(Math.abs(get.attitude(_status.event.player,source))<3) return 0;
if(source.hasSkillTag('nowuxie_judge')||source.hasSkillTag('guanxing')&&(source!=player||!source.hasSkill('guanxing_fail'))) return 0;
if(name!='lebu'&&name!='bingliang'){
if(source!=_status.event.player){
return 0;
}
}
var card2;
if(name!=card.name){
card2={name:name};
}
else{
card2=card;
}
var eff=get.effect(source,card2,source,source);
if(eff>=0) return 0;
return state*get.attitude(_status.event.player,source);
}
else if(target){
var triggerevent=_status.event.getTrigger();
if(triggerevent&&triggerevent.parent&&
triggerevent.parent.postAi&&
triggerevent.player.isUnknown(_status.event.player)){
return 0;
}
var info=get.info(card);
if(info.ai&&info.ai.wuxie){
var aiii=info.ai.wuxie(target,card,source,_status.event.player,state);
if(typeof aiii=='number') return aiii;
}
if(info.multitarget&&targets){
var eff=0;
for(var i=0;i<targets.length;i++){
eff+=get.effect(targets[i],card,source,_status.event.player)
}
return -eff*state;
}
if(Math.abs(get.attitude(_status.event.player,target))<3) return 0;
return -get.effect(target,card,source,_status.event.player)*state;
}
else{
var triggerevent=_status.event.getTrigger();
if(triggerevent&&triggerevent.parent&&
triggerevent.parent.postAi&&
triggerevent.player.isUnknown(_status.event.player)){
return 0;
}
var info=get.info(card);
if(info.ai&&info.ai.wuxie){
var aiii=info.ai.wuxie(target,card,source,_status.event.player,state);
if(typeof aiii=='number') return aiii;
}
if(Math.abs(get.attitude(_status.event.player,source))<3) return 0;
return -get.attitude(_status.event.player,source)*state;
}
},
source:target,
source2:targets,
id:id,
id2:id2
});
if(event.stateplayer&&event.statecard) next.set('respondTo',[event.stateplayer,event.statecard]);
else if(!isJudge){
next.set('respondTo',[source,card]);
}
if(game.online){
_status.event._resultid=id;
game.resume();
}
else{
next.nouse=true;
}
};
event.settle=function(){
if(!event.state){
if(event.triggername=='phaseJudge'){
trigger.untrigger();
trigger.cancelled=true;
}
else{
trigger.neutralize();
if(event.guowuxie==true){
trigger.getParent().excluded.addArray(game.filterPlayer(function(current){
return current.isFriendOf(trigger.target);
}));
}
}
}
event.finish();
};
'step 1'
var list=game.filterPlayer(function(current){
if(event.nowuxie) return false;
if(event.directHit&&event.directHit.contains(current)) return false;
if(event.triggername=='phaseJudge'){
if(game.checkMod(trigger.card,player,current,'unchanged','wuxieJudgeEnabled',current)==false) return false;
if(game.checkMod(trigger.card,player,current,'unchanged','wuxieJudgeRespondable',player)==false) return false;
if(event.stateplayer&&event.statecard&&(game.checkMod(event.statecard,event.stateplayer,player,current,'unchanged','wuxieRespondable',event.stateplayer)==false)) return false;
}
else{
if(!event.statecard&&trigger.getParent().directHit.contains(current)) return false;
if(game.checkMod(trigger.card,player,trigger.target,current,'unchanged','wuxieEnabled',current)==false) return false;
if(game.checkMod(trigger.card,player,trigger.target,current,'unchanged','wuxieRespondable',player)==false) return false;
if(event.stateplayer&&event.statecard&&(game.checkMod(event.statecard,event.stateplayer,trigger.player,current,'unchanged','wuxieRespondable',event.stateplayer)==false)) return false;
}
return current.hasWuxie();
});
event.list=list;
event.id=get.id();
list.sort(function(a,b){
return get.distance(event.source,a,'absolute')-get.distance(event.source,b,'absolute');
});
'step 2'
if(event.list.length==0){
event.settle();
}
else if(_status.connectMode&&(event.list[0].isOnline()||event.list[0]==game.me)){
event.goto(4);
}
else{
event.current=event.list.shift();
event.send(event.current,event.state,event.triggername=='phaseJudge',
event.card,event.source,event.target,event.targets,event.id,trigger.parent.id,event.tempnowuxie);
}
'step 3'
if(result.bool){
event.wuxieresult=event.current;
event.wuxieresult2=result;
event.goto(8);
}
else{
event.goto(2);
}
'step 4'
var id=event.id;
var sendback=function(result,player){
if(result&&result.id==id&&!event.wuxieresult&&result.bool){
event.wuxieresult=player;
event.wuxieresult2=result;
game.broadcast('cancel',id);
if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
return (function(){
event.resultOL=_status.event.resultOL;
ui.click.cancel();
if(ui.confirm) ui.confirm.close();
});
}
}
else{
if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
return (function(){
event.resultOL=_status.event.resultOL;
});
}
}
};
var withme=false;
var withol=false;
var list=event.list;
for(var i=0;i<list.length;i++){
if(list[i].isOnline()){
withol=true;
list[i].wait(sendback);
list[i].send(event.send,list[i],event.state,event.triggername=='phaseJudge',
event.card,event.source,event.target,event.targets,event.id,trigger.parent.id,event.tempnowuxie,get.skillState(list[i]));
list.splice(i--,1);
}
else if(list[i]==game.me){
withme=true;
event.send(list[i],event.state,event.triggername=='phaseJudge',
event.card,event.source,event.target,event.targets,event.id,trigger.parent.id,event.tempnowuxie);
list.splice(i--,1);
}
}
if(!withme){
event.goto(6);
}
if(_status.connectMode){
if(withme||withol){
for(var i=0;i<game.players.length;i++){
game.players[i].showTimer();
}
}
}
event.withol=withol;
'step 5'
if(result&&result.bool&&!event.wuxieresult){
game.broadcast('cancel',event.id);
event.wuxieresult=game.me;
event.wuxieresult2=result;
}
'step 6'
if(event.withol&&!event.resultOL){
game.pause();
}
'step 7'
for(var i=0;i<game.players.length;i++){
game.players[i].hideTimer();
}
'step 8'
if(event.wuxieresult&&event.wuxieresult2&&event.wuxieresult2.skill){
var info=get.info(event.wuxieresult2.skill);
if(info&&info.precontent&&!game.online){
var next=game.createEvent('pre_'+event.wuxieresult2);
next.setContent(info.precontent);
next.set('result',event.wuxieresult2);
next.set('player',event.wuxieresult);
}
}
'step 9'
if(event.wuxieresult){
var next=event.wuxieresult.useResult(event.wuxieresult2);
if(event.stateplayer&&event.statecard) next.respondTo=[event.stateplayer,event.statecard];
else if(event.triggername!='phaseJudge'){
next.respondTo=[trigger.player,trigger.card];
}
}
'step 10'
if(event.wuxieresult){
if(result.wuxied){
event.nowuxie=result.nowuxie;
event.directHit=result.directHit;
event.stateplayer=event.wuxieresult;
if(event.wuxieresult2&&event.wuxieresult2.used){
event.statecard=event.wuxieresult2.used;
}
else{
event.statecard=true;
}
event.state=!event.state;
event.goto(1);
}
else event.settle();
}
else if(event.list.length){
event.goto(2);
}
else{
event.settle();
}
delete event.resultOL;
delete event.wuxieresult;
delete event.wuxieresult2;
}
},
},
translate:{
sha:'杀',
huosha:'火杀',
leisha:'雷杀',
icesha:'冰杀',
kamisha:'神杀',
cisha:'刺杀',
shan:'闪',
tao:'桃',
bagua:'八卦阵',
bagua_bg:'卦',
bagua_skill:'八卦阵',
jueying:'绝影',
dilu:'的卢',
zhuahuang:'爪黄飞电',
jueying_bg:'+马',
dilu_bg:'+马',
zhuahuang_bg:'+马',
chitu:'赤兔',
chitu_bg:'-马',
dawan:'大宛',
dawan_bg:'-马',
zixin:'紫骍',
zixin_bg:'-马',
zhuge:'诸葛连弩',
cixiong:'雌雄双股剑',
zhuge_bg:'弩',
cixiong_bg:'双',
qinggang:'青釭剑',
qinglong:'青龙偃月刀',
zhangba:'丈八蛇矛',
qinglong_bg:'偃',
zhangba_bg:'蛇',
guanshi:'贯石斧',
fangtian:'方天画戟',
qilin:'麒麟弓',
qilin_bg:'弓',
zhuge_skill:'诸葛连弩',
cixiong_skill:'雌雄双股剑',
qinggang_skill:'青釭剑',
qinglong_skill:'青龙偃月刀',
qinglong_guozhan:'青龙偃月刀',
zhangba_skill:'丈八蛇矛',
guanshi_skill:'贯石斧',
fangtian_skill:'方天画戟',
qilin_skill:'麒麟弓',
wugu:'五谷丰登',
taoyuan:'桃园结义',
nanman:'南蛮入侵',
wanjian:'万箭齐发',
wuzhong:'无中生有',
juedou:'决斗',
wugu_bg:'谷',
taoyuan_bg:'园',
nanman_bg:'蛮',
wanjian_bg:'箭',
wuzhong_bg:'生',
juedou_bg:'斗',
shunshou:'顺手牵羊',
guohe:'过河拆桥',
guohe_bg:'拆',
jiedao:'借刀杀人',
wuxie:'无懈可击',
wuxie_bg:'懈',
lebu:'乐不思蜀',
shandian:'闪电',
shandian_bg:'电',
hanbing:'寒冰剑',
renwang:'仁王盾',
hanbing_bg:'冰',
renwang_bg:'盾',
hanbing_skill:'寒冰剑',
renwang_skill:'仁王盾',
hanbing_info:'当你因执行【杀】的效果而造成伤害时,若目标角色有能被弃置的牌,则你可以防止此伤害,然后依次弃置目标角色的两张牌。',
hanbing_skill_info:'当你因执行【杀】的效果而造成伤害时,若目标角色有能被弃置的牌,则你可以防止此伤害,然后依次弃置目标角色的两张牌。',
renwang_info:'锁定技,黑色【杀】对你无效',
renwang_skill_info:'锁定技,黑色【杀】对你无效',
sha_info:'出牌阶段对你攻击范围内的一名角色使用。其须使用一张【闪】否则你对其造成1点伤害。',
shan_info:'抵消一张【杀】',
tao_info:'①出牌阶段对自己使用目标角色一点体力。②当有角色处于濒死状态时对该角色使用。目标角色回复1点体力。',
bagua_info:'当你需要使用或打出一张【闪】时,你可以进行判定。若结果为红色,则你视为使用或打出一张【闪】。',
bagua_skill_info:'当你需要使用或打出一张【闪】时,你可以进行判定。若结果为红色,则你视为使用或打出一张【闪】。',
jueying_info:'锁定技,其他角色计算与你的距离+1。',
dilu_info:'锁定技,其他角色计算与你的距离+1。',
zhuahuang_info:'锁定技,其他角色计算与你的距离+1。',
chitu_info:'锁定技,你计算与其他角色的距离-1。',
dawan_info:'锁定技,你计算与其他角色的距离-1。',
zixin_info:'锁定技,你计算与其他角色的距离-1。',
zhuge_skill_info:'锁定技,你于出牌阶段内使用【杀】无次数限制。',
zhuge_info:'锁定技,你于出牌阶段内使用【杀】无次数限制。',
cixiong_skill_info:'当你使用【杀】指定一名异性的目标角色后你可以令其选择一项1.弃置一张手牌2.令你摸一张牌。',
cixiong_info:'当你使用【杀】指定一名异性的目标角色后你可以令其选择一项1.弃置一张手牌2.令你摸一张牌。',
qinggang_skill_info:'锁定技,当你使用【杀】指定一名目标角色后,你令其防具技能无效直到此【杀】被抵消或造成伤害。',
qinggang_info:'锁定技,当你使用【杀】指定一名目标角色后,你令其防具技能无效直到此【杀】被抵消或造成伤害。',
qinglong_skill_info:'当你使用的【杀】被目标角色使用的【闪】抵消时,你可以对其使用一张【杀】(无距离限制)。',
qinglong_guozhan_info:'锁定技,当你使用【杀】指定目标后,所有目标角色不能明置武将牌直到此【杀】结算完毕为止。',
qinglong_info:'当你使用的【杀】被目标角色使用的【闪】抵消时,你可以对其使用一张【杀】(无距离限制)。',
qinglong_info_guozhan:'锁定技,当你使用【杀】指定目标后,所有目标角色不能明置武将牌直到此【杀】结算完毕为止。',
zhangba_skill_info:'你可以将两张手牌当【杀】使用或打出。',
zhangba_info:'你可以将两张手牌当【杀】使用或打出。',
guanshi_skill_info:'当你使用的【杀】被目标角色使用的【闪】抵消时,你可以弃置两张牌,令此【杀】依然对其造成伤害。',
guanshi_info:'当你使用的【杀】被目标角色使用的【闪】抵消时,你可以弃置两张牌,令此【杀】依然对其造成伤害。',
fangtian_skill_info:'你使用的【杀】若是你最后的手牌,你可以额外选择至多两个目标。',
fangtian_info:'你使用的【杀】若是你最后的手牌,你可以额外选择至多两个目标。',
fangtian_info_guozhan:'你使用【杀】可以指定任意名角色为目标(不能包含势力相同的角色),若任意一名目标角色使用【闪】抵消了此【杀】,则此【杀】对剩余的目标角色无效。',
qilin_skill_info:'当你使用【杀】对目标角色造成伤害时,你可以弃置其装备区里的一张坐骑牌。',
qilin_info:'当你使用【杀】对目标角色造成伤害时,你可以弃置其装备区里的一张坐骑牌。',
wugu_info:'出牌阶段,对所有角色使用。(选择目标后)你从牌堆顶亮出等同于目标数量的牌,每名目标角色获得这些牌中(剩余的)的任意一张。',
taoyuan_info:'出牌阶段对所有角色使用。每名目标角色回复1点体力。',
nanman_info:'出牌阶段对所有其他角色使用。每名目标角色需打出一张【杀】否则受到1点伤害。',
wanjian_info:'出牌阶段对所有其他角色使用。每名目标角色需打出一张【闪】否则受到1点伤害。',
wuzhong_info:'出牌阶段,对你使用。你摸两张牌。',
juedou_info:'出牌阶段对一名其他角色使用。由其开始其与你轮流打出一张【杀】直到其中一方未打出【杀】为止。未打出【杀】的一方受到另一方对其造成的1点伤害。',
shunshou_info:'出牌阶段对距离为1且区域里有牌的一名其他角色使用。你获得其区域里的一张牌。',
guohe_info:'出牌阶段,对区域里有牌的一名其他角色使用。你弃置其区域里的一张牌。',
jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。',
jiedao_append:'<span class="text" style="font-family: yuanli">这是一种十分含蓄的计谋。</span>',
wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。',
lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。',
shandian_info:'出牌阶段对自己使用。若判定结果为黑桃2~9则目标角色受到3点雷电伤害。若判定不为黑桃2~9将之移动到下家的判定区里。',
icesha_skill:'冰杀',
icesha_skill_info:'防止即将造成的伤害,改为依次弃置其两张牌。',
qinggang2:'破防',
},
list:[
["spade",7,"sha"],
["spade",8,"sha"],
["spade",8,"sha"],
["spade",9,"sha"],
["spade",9,"sha"],
["spade",10,"sha"],
["spade",10,"sha"],
["club",2,"sha"],
["club",3,"sha"],
["club",4,"sha"],
["club",5,"sha"],
["club",6,"sha"],
["club",7,"sha"],
["club",8,"sha"],
["club",8,"sha"],
["club",9,"sha"],
["club",9,"sha"],
["club",10,"sha"],
["club",10,"sha"],
["club",11,"sha"],
["club",11,"sha"],
["heart",10,"sha"],
["heart",10,"sha"],
["heart",11,"sha"],
["diamond",6,"sha"],
["diamond",7,"sha"],
["diamond",8,"sha"],
["diamond",9,"sha"],
["diamond",10,"sha"],
["diamond",13,"sha"],
["heart",2,"shan"],
["heart",2,"shan"],
["heart",13,"shan"],
["diamond",2,"shan"],
["diamond",2,"shan"],
["diamond",3,"shan"],
["diamond",4,"shan"],
["diamond",5,"shan"],
["diamond",6,"shan"],
["diamond",7,"shan"],
["diamond",8,"shan"],
["diamond",9,"shan"],
["diamond",10,"shan"],
["diamond",11,"shan"],
["diamond",11,"shan"],
["heart",3,"tao"],
["heart",4,"tao"],
["heart",6,"tao"],
["heart",7,"tao"],
["heart",8,"tao"],
["heart",9,"tao"],
["heart",12,"tao"],
["diamond",12,"tao"],
["spade",2,"bagua"],
["club",2,"bagua"],
["spade",5,"jueying"],
["club",5,"dilu"],
["heart",13,"zhuahuang"],
["heart",5,"chitu"],
["spade",13,"dawan"],
["diamond",13,"zixin"],
["club",1,"zhuge"],
["diamond",1,"zhuge"],
["spade",2,"cixiong"],
["spade",6,"qinggang"],
["spade",5,"qinglong"],
["spade",12,"zhangba"],
["diamond",5,"guanshi"],
["diamond",12,"fangtian"],
["heart",5,"qilin"],
["heart",3,"wugu"],
["heart",4,"wugu"],
["heart",1,"taoyuan"],
["spade",7,"nanman"],
["spade",13,"nanman"],
["club",7,"nanman"],
["heart",1,"wanjian"],
["spade",1,"juedou"],
["club",1,"juedou"],
["diamond",1,"juedou"],
["heart",7,"wuzhong"],
["heart",8,"wuzhong"],
["heart",9,"wuzhong"],
["heart",11,"wuzhong"],
["spade",3,'shunshou'],
["spade",4,'shunshou'],
["spade",11,'shunshou'],
["diamond",3,'shunshou'],
["diamond",4,'shunshou'],
["spade",3,'guohe'],
["spade",4,'guohe'],
["spade",12,'guohe'],
["club",3,'guohe'],
["club",4,'guohe'],
["heart",12,'guohe'],
["club",12,'jiedao'],
["club",13,'jiedao'],
["spade",11,'wuxie'],
["club",12,'wuxie'],
["club",13,'wuxie'],
["spade",6,'lebu'],
["club",6,'lebu'],
["heart",6,'lebu'],
["spade",1,'shandian'],
["spade",2,'hanbing'],
["club",2,'renwang'],
["heart",12,'shandian'],
["diamond",12,'wuxie'],
],
};
});