1089 lines
32 KiB
JavaScript
1089 lines
32 KiB
JavaScript
'use strict';
|
||
game.import('card',function(lib,game,ui,get,ai,_status){
|
||
return {
|
||
name:'extra',
|
||
connect:true,
|
||
card:{
|
||
muniu:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip5',
|
||
nomod:true,
|
||
onEquip:function(){
|
||
if(card&&card.cards&&card.cards.length){
|
||
player.directgains(card.cards,null,'muniu');
|
||
}
|
||
player.markSkill('muniu_skill');
|
||
},
|
||
forceDie:true,
|
||
onLose:function(){
|
||
delete player.getStat('skill').muniu_skill;
|
||
player.unmarkSkill('muniu_skill');
|
||
if(!card||!card.cards||!card.cards.length) return;
|
||
if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
|
||
player.lose(card.cards,ui.discardPile);
|
||
player.$throw(card.cards,1000);
|
||
player.popup('muniu');
|
||
game.log(card,'掉落了',card.cards);
|
||
card.cards.length=0;
|
||
}
|
||
else{
|
||
player.lose(card.cards,ui.special);
|
||
}
|
||
},
|
||
clearLose:true,
|
||
equipDelay:false,
|
||
loseDelay:false,
|
||
skills:['muniu_skill','muniu_skill7'],
|
||
ai:{
|
||
equipValue:function(card){
|
||
if(card.card) return 7+card.card.length;
|
||
return 7;
|
||
},
|
||
basic:{
|
||
equipValue:7
|
||
}
|
||
}
|
||
},
|
||
jiu:{
|
||
audio:true,
|
||
fullskin:true,
|
||
type:"basic",
|
||
toself:true,
|
||
enable:function(event,player){
|
||
//return !player.hasSkill('jiu');
|
||
return true;
|
||
},
|
||
lianheng:true,
|
||
logv:false,
|
||
savable:function(card,player,dying){
|
||
return dying==player||player.hasSkillTag('jiuOther',null,dying,true);
|
||
},
|
||
usable:1,
|
||
selectTarget:-1,
|
||
modTarget:true,
|
||
filterTarget:function(card,player,target){
|
||
return target==player;
|
||
},
|
||
content:function(){
|
||
if(typeof event.baseDamage!='number') event.baseDamage=1;
|
||
if(target.isDying()||event.getParent(2).type=='dying'){
|
||
target.recover();
|
||
if(_status.currentPhase==target){
|
||
target.getStat().card.jiu--;
|
||
}
|
||
}
|
||
else{
|
||
game.addVideo('jiuNode',target,true);
|
||
if(cards&&cards.length){
|
||
card=cards[0];
|
||
}
|
||
if(!target.storage.jiu) target.storage.jiu=0;
|
||
target.storage.jiu+=event.baseDamage;
|
||
game.broadcastAll(function(target,card,gain2){
|
||
target.addSkill('jiu');
|
||
if(!target.node.jiu&&lib.config.jiu_effect){
|
||
target.node.jiu=ui.create.div('.playerjiu',target.node.avatar);
|
||
target.node.jiu2=ui.create.div('.playerjiu',target.node.avatar2);
|
||
}
|
||
if(gain2&&card.clone&&(card.clone.parentNode==target.parentNode||card.clone.parentNode==ui.arena)){
|
||
card.clone.moveDelete(target);
|
||
}
|
||
},target,card,target==targets[0]&&cards.length==1);
|
||
if(target==targets[0]&&cards.length==1){
|
||
if(card.clone&&(card.clone.parentNode==target.parentNode||card.clone.parentNode==ui.arena)){
|
||
game.addVideo('gain2',target,get.cardsInfo([card]));
|
||
}
|
||
}
|
||
}
|
||
},
|
||
ai:{
|
||
basic:{
|
||
useful:(card,i)=>{
|
||
if(_status.event.player.hp>1){
|
||
if(i===0) return 4;
|
||
return 1;
|
||
}
|
||
if(i===0) return 7.3;
|
||
return 3;
|
||
},
|
||
value:(card,player,i)=>{
|
||
if(player.hp>1){
|
||
if(i===0) return 5;
|
||
return 1;
|
||
}
|
||
if(i===0) return 7.3;
|
||
return 3;
|
||
}
|
||
},
|
||
order:()=>{
|
||
if(_status.event.dying) return 9;
|
||
let sha=get.order({name:'sha'});
|
||
if(sha>0) return sha+0.2;
|
||
return 0;
|
||
},
|
||
result:{
|
||
target:(player,target,card)=>{
|
||
if(target&&target.isDying()) return 2;
|
||
if(!target || target._jiu_temp || !target.isPhaseUsing()) return 0;
|
||
let usable=target.getCardUsable('sha');
|
||
if(!usable || lib.config.mode==='stone'&&!player.isMin()&&player.getActCount()+1>=player.actcount || !target.mayHaveSha(player,'use',card)) return 0;
|
||
let effs={order:0},temp;
|
||
target.getCards('hs',i=>{
|
||
if(get.name(i)!=='sha' || ui.selected.cards.includes(i)) return false;
|
||
temp=get.order(i,target);
|
||
if(temp<effs.order) return false;
|
||
if(temp>effs.order) effs={order:temp};
|
||
effs[i.cardid]={
|
||
card:i,
|
||
target:null,
|
||
eff:0
|
||
};
|
||
});
|
||
delete effs.order;
|
||
for(let i in effs){
|
||
if(!lib.filter.filterCard(effs[i].card,target)) continue;
|
||
game.filterPlayer(current=>{
|
||
if(get.attitude(target,current)>=0 || !target.canUse(effs[i].card,current,null,true) || current.hasSkillTag('filterDamage',null,{
|
||
player:target,
|
||
card:effs[i].card,
|
||
jiu:true
|
||
})) return false;
|
||
temp=get.effect(current,effs[i].card,target,player);
|
||
if(temp<=effs[i].eff) return false;
|
||
effs[i].target=current;
|
||
effs[i].eff=temp;
|
||
return false;
|
||
});
|
||
if(!effs[i].target) continue;
|
||
if(target.hasSkillTag('directHit_ai',true,{
|
||
target:effs[i].target,
|
||
card:i
|
||
},true) || usable===1&&(target.needsToDiscard()>Math.max(0,3-target.hp) || !effs[i].target.mayHaveShan(player,'use',effs[i].target.getCards(i=>{
|
||
return i.hasGaintag('sha_notshan');
|
||
})))){
|
||
delete target._jiu_temp;
|
||
return 1;
|
||
}
|
||
}
|
||
delete target._jiu_temp;
|
||
return 0;
|
||
}
|
||
},
|
||
tag:{
|
||
save:1,
|
||
recover:0.1,
|
||
}
|
||
}
|
||
},
|
||
huogong:{
|
||
audio:true,
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
//cardnature:'fire',
|
||
filterTarget:function(card,player,target){
|
||
//if(player!=game.me&&player.countCards('h')<2) return false;
|
||
return target.countCards('h')>0;
|
||
},
|
||
content:function(){
|
||
"step 0"
|
||
if(target.countCards('h')==0){
|
||
event.finish();
|
||
return;
|
||
}
|
||
else if(target.countCards('h')==1) event._result={cards:target.getCards('h')};
|
||
else target.chooseCard(true).ai=function(card){
|
||
if(_status.event.getRand()<0.5) return Math.random();
|
||
return get.value(card);
|
||
};
|
||
"step 1"
|
||
target.showCards(result.cards).setContent(function(){});
|
||
event.dialog=ui.create.dialog(get.translation(target)+'展示的手牌',result.cards);
|
||
event.videoId=lib.status.videoId++;
|
||
|
||
game.broadcast('createDialog',event.videoId,get.translation(target)+'展示的手牌',result.cards);
|
||
game.addVideo('cardDialog',null,[get.translation(target)+'展示的手牌',get.cardsInfo(result.cards),event.videoId]);
|
||
event.card2=result.cards[0];
|
||
game.log(target,'展示了',event.card2);
|
||
game.addCardKnower(result.cards, 'everyone');
|
||
event._result={};
|
||
player.chooseToDiscard({suit:get.suit(event.card2)},function(card){
|
||
var evt=_status.event.getParent();
|
||
if(get.damageEffect(evt.target,evt.player,evt.player,'fire')>0){
|
||
return 6.2+Math.min(4,evt.player.hp)-get.value(card,evt.player);
|
||
}
|
||
return -1;
|
||
}).set('prompt',false);
|
||
game.delay(2);
|
||
"step 2"
|
||
if(result.bool){
|
||
target.damage('fire');
|
||
}
|
||
else{
|
||
target.addTempSkill('huogong2');
|
||
}
|
||
event.dialog.close();
|
||
game.addVideo('cardDialog',null,event.videoId);
|
||
game.broadcast('closeDialog',event.videoId);
|
||
},
|
||
ai:{
|
||
basic:{
|
||
order:4,
|
||
value:[3,1],
|
||
useful:1,
|
||
},
|
||
wuxie:function(target,card,player,viewer,status){
|
||
if(get.attitude(viewer,player._trueMe||player)>0) return 0;
|
||
if(status*get.attitude(viewer,target)*get.effect(target,card,player,target)>=0) return 0;
|
||
if(_status.event.getRand('huogong_wuxie')*4>player.countCards('h')) return 0;
|
||
},
|
||
result:{
|
||
player:function(player){
|
||
var nh=player.countCards('h');
|
||
if(nh<=player.hp&&nh<=4&&_status.event.name=='chooseToUse'){
|
||
if(typeof _status.event.filterCard=='function'&&
|
||
_status.event.filterCard(new lib.element.VCard({name:'huogong'}),player,_status.event)){
|
||
return -10;
|
||
}
|
||
if(_status.event.skill){
|
||
var viewAs=get.info(_status.event.skill).viewAs;
|
||
if(viewAs=='huogong') return -10;
|
||
if(viewAs&&viewAs.name=='huogong') return -10;
|
||
}
|
||
}
|
||
return 0;
|
||
},
|
||
target:function(player,target){
|
||
if(target.hasSkill('huogong2')||target.countCards('h')==0) return 0;
|
||
if(player.countCards('h')<=1) return 0;
|
||
if(_status.event.player == player){
|
||
if(target.isAllCardsKnown(player)){
|
||
if(!target.countCards('h',card=>{
|
||
return player.countCards('h',card2=>{
|
||
return get.suit(card2) == get.suit(card);
|
||
});
|
||
})){
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
if(target==player){
|
||
if(typeof _status.event.filterCard=='function'&&
|
||
_status.event.filterCard(new lib.element.VCard({name:'huogong'}),player,_status.event)){
|
||
return -1.15;
|
||
}
|
||
if(_status.event.skill){
|
||
var viewAs=get.info(_status.event.skill).viewAs;
|
||
if(viewAs=='huogong') return -1.15;
|
||
if(viewAs&&viewAs.name=='huogong') return -1.15;
|
||
}
|
||
return 0;
|
||
}
|
||
return -1.15;
|
||
}
|
||
},
|
||
tag:{
|
||
damage:1,
|
||
fireDamage:1,
|
||
natureDamage:1,
|
||
norepeat:1
|
||
}
|
||
}
|
||
},
|
||
tiesuo:{
|
||
audio:true,
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
filterTarget:true,
|
||
selectTarget:[1,2],
|
||
complexTarget:true,
|
||
content:function(){
|
||
target.link();
|
||
},
|
||
recastable:true,
|
||
ai:{
|
||
wuxie:(target,card,player,viewer, status)=>{
|
||
if(status*get.attitude(viewer,player._trueMe||player)>0 || target.hasSkillTag('nodamage') || target.hasSkillTag('nofire') || target.hasSkillTag('nothunder') || get.attitude(viewer,player)>0 || (1+target.countCards('hs'))*_status.event.getRand()>1.57) return 0;
|
||
},
|
||
basic:{
|
||
order:7.3,
|
||
useful:1.2,
|
||
value:4
|
||
},
|
||
result:{
|
||
target:(player,target)=>{
|
||
if(target.hasSkillTag('link')) return 0;
|
||
let curs = game.filterPlayer(current=>{
|
||
if(current.hasSkillTag('nodamage')) return false;
|
||
return !current.hasSkillTag('nofire') || !current.hasSkillTag('nothunder');
|
||
});
|
||
if(curs.length<2) return 0;
|
||
let f = target.hasSkillTag('nofire'),
|
||
t = target.hasSkillTag('nothunder'),
|
||
res = 0.9;
|
||
if(f&&t || target.hasSkillTag('nodamage')) return 0;
|
||
if(f || t) res = 0.45;
|
||
if(!f&&target.getEquip('tengjia')) res *= 2;
|
||
if(!target.isLinked()) res = -res;
|
||
if(ui.selected.targets.length) return res;
|
||
let fs = 0,
|
||
es = 0,
|
||
att = get.attitude(player,target),
|
||
linkf = false,
|
||
alink = true;
|
||
curs.forEach(i=>{
|
||
let atti = get.attitude(player,i);
|
||
if(atti>0){
|
||
fs++;
|
||
if(i.isLinked()) linkf = true;
|
||
}
|
||
else if(atti<0){
|
||
es++;
|
||
if(!i.isLinked()) alink = false;
|
||
}
|
||
});
|
||
if(es<2&&!alink) {
|
||
if(att<=0 || att>0 && linkf && fs<2) return 0;
|
||
}
|
||
return res;
|
||
}
|
||
},
|
||
tag:{
|
||
multitarget:1,
|
||
multineg:1,
|
||
norepeat:1
|
||
}
|
||
}
|
||
},
|
||
bingliang:{
|
||
audio:true,
|
||
fullskin:true,
|
||
type:'delay',
|
||
range:{global:1},
|
||
filterTarget:function(card,player,target){
|
||
return (lib.filter.judge(card,player,target)&&player!=target);
|
||
},
|
||
judge:function(card){
|
||
if(get.suit(card)=='club') return 1;
|
||
return -2;
|
||
},
|
||
judge2:function(result){
|
||
if(result.bool==false) return true;
|
||
return false;
|
||
},
|
||
effect:function(){
|
||
if(result.bool==false){
|
||
if(get.is.changban()) player.addTempSkill('bingliang_changban');
|
||
else player.skip('phaseDraw');
|
||
}
|
||
},
|
||
ai:{
|
||
basic:{
|
||
order:1,
|
||
useful:1,
|
||
value:4,
|
||
},
|
||
result:{
|
||
target:function(player,target){
|
||
if(target.hasJudge('caomu')) return 0;
|
||
return -2.7/Math.sqrt(target.countCards('h')+1);
|
||
}
|
||
},
|
||
tag:{
|
||
skip:'phaseDraw'
|
||
}
|
||
}
|
||
},
|
||
hualiu:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip3',
|
||
distance:{globalTo:1},
|
||
},
|
||
zhuque:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip1',
|
||
//cardnature:'fire',
|
||
distance:{attackFrom:-3},
|
||
ai:{
|
||
basic:{
|
||
equipValue:2
|
||
}
|
||
},
|
||
skills:['zhuque_skill']
|
||
},
|
||
guding:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip1',
|
||
distance:{attackFrom:-1},
|
||
ai:{
|
||
basic:{
|
||
equipValue:2
|
||
}
|
||
},
|
||
skills:['guding_skill']
|
||
},
|
||
tengjia:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip2',
|
||
//cardnature:'fire',
|
||
ai:{
|
||
value:function(card,player,index,method){
|
||
if(player.isDisabled(2)) return 0.01;
|
||
if(player.getEquips('tengjia').includes(card)){
|
||
if(player.hasSkillTag('noDirectDamage')) return 10;
|
||
if(game.hasPlayer(function(current){
|
||
return current!=player&&get.attitude(current,player)<0&¤t.hasSkillTag('fireAttack',null,null,true);
|
||
})) return 0;
|
||
return 6;
|
||
}
|
||
var value=0;
|
||
var info=get.info(card);
|
||
var current=player.getEquip(info.subtype);
|
||
if(current&&card!=current){
|
||
value=get.value(current,player);
|
||
}
|
||
var equipValue=info.ai.equipValue;
|
||
if(equipValue==undefined){
|
||
equipValue=info.ai.basic.equipValue;
|
||
}
|
||
if(typeof equipValue=='function'){
|
||
if(method=='raw') return equipValue(card,player);
|
||
if(method=='raw2') return equipValue(card,player)-value;
|
||
return Math.max(0.1,equipValue(card,player)-value);
|
||
}
|
||
if(typeof equipValue!='number') equipValue=0;
|
||
if(method=='raw') return equipValue;
|
||
if(method=='raw2') return equipValue-value;
|
||
return Math.max(0.1,equipValue-value);
|
||
},
|
||
equipValue:function(card,player){
|
||
if(player._tengjiaEv_temp) return Math.max(1,6-player.hp);
|
||
if(player.hasSkillTag('maixie')&&player.hp>1) return 0;
|
||
if(player.hasSkillTag('noDirectDamage')) return 10;
|
||
player._tengjiaEv_temp=true;
|
||
let eff=get.damageEffect(player,player,player,'fire');
|
||
delete player._tengjiaEv_temp;
|
||
if(eff>=0) return 10;
|
||
let num=4-game.countPlayer(function(current){
|
||
if(get.attitude(current,player)<0){
|
||
if(current.hasSkillTag('fireAttack',null,null,true)) return 3;
|
||
return 1;
|
||
}
|
||
return false;
|
||
});
|
||
if(player.hp==1) num+=3;
|
||
if(player.hp==2) num+=1;
|
||
return num;
|
||
},
|
||
basic:{
|
||
equipValue:3
|
||
},
|
||
},
|
||
skills:['tengjia1','tengjia2','tengjia3']
|
||
},
|
||
baiyin:{
|
||
fullskin:true,
|
||
type:'equip',
|
||
subtype:'equip2',
|
||
loseDelay:false,
|
||
onLose:function(){
|
||
player.addTempSkill('baiyin_skill_lose')
|
||
},
|
||
skills:['baiyin_skill'],
|
||
tag:{
|
||
recover:1,
|
||
},
|
||
ai:{
|
||
order:9.5,
|
||
equipValue:function(card,player){
|
||
if(player.hp==player.maxHp) return 5;
|
||
if(player.countCards('h','baiyin')) return 6;
|
||
return 0;
|
||
},
|
||
basic:{
|
||
equipValue:5
|
||
}
|
||
}
|
||
},
|
||
},
|
||
skill:{
|
||
bingliang_changban:{
|
||
cardSkill:true,
|
||
unique:true,
|
||
trigger:{player:'phaseDrawBegin'},
|
||
silent:true,
|
||
content:function(){
|
||
trigger.num--;
|
||
},
|
||
group:'bingliang_changban2'
|
||
},
|
||
bingliang_changban2:{
|
||
cardSkill:true,
|
||
trigger:{player:'phaseDrawAfter'},
|
||
silent:true,
|
||
content:function(){
|
||
if(player.enemy) player.enemy.draw();
|
||
}
|
||
},
|
||
muniu_skill:{
|
||
equipSkill:true,
|
||
enable:'phaseUse',
|
||
usable:1,
|
||
filterCard:true,
|
||
check:function(card){
|
||
if(card.name=='du') return 20;
|
||
var player=_status.event.player;
|
||
var nh=player.countCards('h');
|
||
if(!player.needsToDiscard()){
|
||
if(nh<3) return 0;
|
||
if(nh==3) return 5-get.value(card);
|
||
return 7-get.value(card);
|
||
}
|
||
return 10-get.useful(card);
|
||
},
|
||
discard:false,
|
||
lose:false,
|
||
delay:false,
|
||
sync:function(muniu){
|
||
if(game.online){
|
||
return;
|
||
}
|
||
if(!muniu.cards){
|
||
muniu.cards=[];
|
||
}
|
||
for(var i=0;i<muniu.cards.length;i++){
|
||
if(get.position(muniu.cards[i])!='s'){
|
||
muniu.cards.splice(i--,1);
|
||
}
|
||
}
|
||
game.broadcast(function(muniu,cards){
|
||
muniu.cards=cards;
|
||
},muniu,muniu.cards);
|
||
},
|
||
filter:function(event,player){
|
||
return player.countCards('h')>0;
|
||
},
|
||
prepare:function(cards,player){
|
||
player.$give(1,player,false);
|
||
},
|
||
content:function(){
|
||
"step 0"
|
||
player.loseToSpecial(cards,'muniu');
|
||
"step 1"
|
||
for(var i=0;i<cards.length;i++){
|
||
if(cards[i].destroyed||!cards[i].hasGaintag('muniu')||get.position(cards[i])!='s'){
|
||
cards[i].remove();
|
||
cards.splice(i--,1);
|
||
}
|
||
}
|
||
var muniu=player.getEquip('muniu');
|
||
if(!muniu||!cards.length){
|
||
for(var i=0;i<cards.length;i++){
|
||
cards[i].discard();
|
||
}
|
||
event.finish();
|
||
return;
|
||
}
|
||
if(muniu.cards==undefined) muniu.cards=[];
|
||
muniu.cards.push(cards[0]);
|
||
game.broadcast(function(muniu,cards){
|
||
muniu.cards=cards;
|
||
},muniu,muniu.cards);
|
||
game.delayx();
|
||
"step 2"
|
||
var muniu=player.getEquip('muniu');
|
||
var players=game.filterPlayer(function(current){
|
||
if(current.canEquip(muniu)&¤t!=player&&!current.isTurnedOver()&&
|
||
get.attitude(player,current)>=3&&get.attitude(current,player)>=3){
|
||
return true;
|
||
}
|
||
});
|
||
players.sort(lib.sort.seat);
|
||
var choice=players[0];
|
||
var next=player.chooseTarget('是否移动木牛流马?',function(card,player,target){
|
||
return !target.isMin()&&player!=target&&target.canEquip(_status.event.muniu);
|
||
}).set('muniu',muniu)
|
||
next.set('ai',function(target){
|
||
return target==_status.event.choice?1:-1;
|
||
});
|
||
next.set('choice',choice);
|
||
"step 3"
|
||
if(result.bool){
|
||
var card=player.getEquip('muniu');
|
||
result.targets[0].equip(card);
|
||
player.$give(card,result.targets[0]);
|
||
player.line(result.targets,'green');
|
||
game.delay();
|
||
}
|
||
else{
|
||
player.updateMarks();
|
||
}
|
||
},
|
||
ai:{
|
||
order:1,
|
||
expose:0.1,
|
||
result:{
|
||
player:1
|
||
}
|
||
},
|
||
mod:{
|
||
cardEnabled2:function(card,player){
|
||
if(!ui.selected.cards.length) return;
|
||
var muniu=player.getEquip('muniu');
|
||
if(!muniu||!muniu.cards||!muniu.cards.length) return;
|
||
for(var i of ui.selected.cards){
|
||
if(i==muniu&&muniu.cards.includes(card)) return false;
|
||
if(muniu.cards.includes(i)&&card==muniu) return false;
|
||
}
|
||
},
|
||
},
|
||
mark:true,
|
||
markimage2:'image/card/muniu_small.png',
|
||
intro:{
|
||
content:function(storage,player){
|
||
var muniu=player.getEquip('muniu');
|
||
if(!muniu||!muniu.cards||!muniu.cards.length) return '共有〇张牌';
|
||
if(player.isUnderControl(true)){
|
||
return get.translation(muniu.cards);
|
||
}
|
||
else{
|
||
return '共有'+get.cnNumber(muniu.cards.length)+'张牌';
|
||
}
|
||
},
|
||
mark:function(dialog,storage,player){
|
||
var muniu=player.getEquip('muniu');
|
||
if(!muniu||!muniu.cards||!muniu.cards.length) return '共有〇张牌';
|
||
if(player.isUnderControl(true)){
|
||
dialog.addAuto(muniu.cards);
|
||
}
|
||
else{
|
||
return '共有'+get.cnNumber(muniu.cards.length)+'张牌';
|
||
}
|
||
},
|
||
markcount:function(storage,player){
|
||
var muniu=player.getEquip('muniu');
|
||
if(muniu&&muniu.cards) return muniu.cards.length;
|
||
return 0;
|
||
}
|
||
}
|
||
},
|
||
muniu_skill7:{
|
||
trigger:{player:'loseEnd'},
|
||
firstDo:true,
|
||
forced:true,
|
||
//silent:true,
|
||
filter:function(event,player){
|
||
if(!event.ss||!event.ss.length||event.parent.name=='lose_muniu') return false;
|
||
var muniu=player.getEquip('muniu');
|
||
if(!muniu||!muniu.cards) return false;
|
||
return event.ss.filter(function(card){
|
||
return muniu.cards.includes(card);
|
||
}).length>0;
|
||
},
|
||
content:function(){
|
||
var muniu=player.getEquip('muniu');
|
||
if(muniu&&muniu.cards){
|
||
muniu.cards.removeArray(trigger.ss);
|
||
lib.skill.muniu_skill.sync(muniu);
|
||
}
|
||
player.updateMarks();
|
||
},
|
||
},
|
||
huogong2:{charlotte:true},
|
||
jiu:{
|
||
trigger:{player:'useCard1'},
|
||
filter:function(event){
|
||
return event.card&&event.card.name=='sha';
|
||
},
|
||
forced:true,
|
||
charlotte:true,
|
||
firstDo:true,
|
||
content:function(){
|
||
if(!trigger.baseDamage) trigger.baseDamage=1;
|
||
trigger.baseDamage+=player.storage.jiu;
|
||
trigger.jiu=true;
|
||
trigger.jiu_add=player.storage.jiu;
|
||
game.addVideo('jiuNode',player,false);
|
||
game.broadcastAll(function(player){
|
||
player.removeSkill('jiu');
|
||
},player);
|
||
},
|
||
temp:true,
|
||
vanish:true,
|
||
silent:true,
|
||
popup:false,
|
||
nopop:true,
|
||
onremove:function(player){
|
||
if(player.node.jiu){
|
||
player.node.jiu.delete();
|
||
player.node.jiu2.delete();
|
||
delete player.node.jiu;
|
||
delete player.node.jiu2;
|
||
}
|
||
delete player.storage.jiu;
|
||
},
|
||
ai:{
|
||
damageBonus:true,
|
||
skillTagFilter:function(player,tag,arg){
|
||
if(tag==='damageBonus') return arg&&arg.card&&arg.card.name==='sha';
|
||
}
|
||
},
|
||
group:'jiu2'
|
||
},
|
||
jiu2:{
|
||
trigger:{player:'useCardAfter',global:'phaseAfter'},
|
||
priority:2,
|
||
firstDo:true,
|
||
charlotte:true,
|
||
filter:function(event,player){
|
||
if(player.hasSkillTag('jiuSustain',null,event.name)) return false;
|
||
if(event.name=='useCard') return (event.card&&(event.card.name=='sha'));
|
||
return true;
|
||
},
|
||
forced:true,
|
||
popup:false,
|
||
audio:false,
|
||
content:function(){
|
||
game.broadcastAll(function(player){
|
||
player.removeSkill('jiu');
|
||
},player);
|
||
game.addVideo('jiuNode',player,false);
|
||
},
|
||
},
|
||
guding_skill:{
|
||
equipSkill:true,
|
||
audio:true,
|
||
trigger:{source:'damageBegin1'},
|
||
filter:function(event){
|
||
if(event.parent.name=='_lianhuan'||event.parent.name=='_lianhuan2') return false;
|
||
if(event.card&&event.card.name=='sha'){
|
||
if(event.player.countCards('h')==0) return true;
|
||
}
|
||
return false;
|
||
},
|
||
forced:true,
|
||
content:function(){
|
||
trigger.num++;
|
||
},
|
||
ai:{
|
||
effect:{
|
||
player:function(card,player,target,current,isLink){
|
||
if(card.name=='sha'&&!isLink&&target.countCards('h')==0&&!target.hasSkillTag('filterDamage',null,{
|
||
player:player,
|
||
card:card,
|
||
})) return [1,0,1,-3];
|
||
}
|
||
}
|
||
}
|
||
},
|
||
tengjia1:{
|
||
equipSkill:true,
|
||
trigger:{target:['useCardToBefore']},
|
||
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;
|
||
if(event.card.name=='nanman') return true;
|
||
if(event.card.name=='wanjian') return true;
|
||
//if(event.card.name=='chuqibuyi') return true;
|
||
return false;
|
||
},
|
||
content:function(){
|
||
trigger.cancel();
|
||
},
|
||
ai:{
|
||
effect:{
|
||
target:function(card,player,target,current){
|
||
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=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget';
|
||
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
|
||
if(card.name=='sha'){
|
||
var equip1=player.getEquip('zhuque');
|
||
if(equip1&&equip1.name=='zhuque') return 1.9;
|
||
if(!game.hasNature(card)) return 'zerotarget';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
tengjia2:{
|
||
equipSkill:true,
|
||
trigger:{player:'damageBegin3'},
|
||
filter:function(event,player){
|
||
if(!event.hasNature('fire')) return false;
|
||
if(player.hasSkillTag('unequip2')) return false;
|
||
if(event.source&&event.source.hasSkillTag('unequip',false,{
|
||
name:event.card?event.card.name:null,
|
||
target:player,
|
||
card:event.card
|
||
})) return false;
|
||
return true;
|
||
},
|
||
audio:true,
|
||
forced:true,
|
||
content:function(){
|
||
trigger.num++;
|
||
},
|
||
ai:{
|
||
fireAttack:true,
|
||
effect:{
|
||
target:function(card,player,target,current){
|
||
if(card.name=='sha'){
|
||
if(game.hasNature(card,'fire')) return 2;
|
||
if(player.hasSkill('zhuque_skill')) return 1.9;
|
||
}
|
||
if(get.tag(card,'fireDamage')&¤t<0) return 2;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
tengjia3:{
|
||
equipSkill:true,
|
||
audio:'tengjia1',
|
||
trigger:{target:'shaBefore'},
|
||
forced: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;
|
||
if(event.card.name=='sha'&&!game.hasNature(event.card)) return true;
|
||
return false;
|
||
},
|
||
content:function(){
|
||
trigger.cancel();
|
||
},
|
||
},
|
||
baiyin_skill:{
|
||
equipSkill:true,
|
||
trigger:{player:'damageBegin4'},
|
||
forced:true,
|
||
audio:true,
|
||
filter:function(event,player){
|
||
if(event.num<=1) return false;
|
||
if(player.hasSkillTag('unequip2')) return false;
|
||
if(event.source&&event.source.hasSkillTag('unequip',false,{
|
||
name:event.card?event.card.name:null,
|
||
target:player,
|
||
card:event.card
|
||
})) return false;
|
||
return true;
|
||
},
|
||
//priority:-10,
|
||
content:function(){
|
||
trigger.num=1;
|
||
},
|
||
subSkill:{
|
||
lose:{
|
||
audio:'baiyin_skill',
|
||
forced:true,
|
||
charlotte:true,
|
||
equipSkill:true,
|
||
trigger:{
|
||
player:'loseAfter',
|
||
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
|
||
},
|
||
filter:(event,player)=>{
|
||
if(player.isHealthy()||player.hasSkillTag('unequip2')) return false;
|
||
var evt=event.getl(player);
|
||
return evt&&evt.es.some(card=>card.name=='baiyin')
|
||
},
|
||
content:function(){
|
||
var evt=trigger.getl(player);
|
||
evt.es.forEach(card=>{
|
||
if(card.name=='baiyin'){
|
||
player.recover();
|
||
}
|
||
})
|
||
},
|
||
},
|
||
},
|
||
ai:{
|
||
filterDamage:true,
|
||
skillTagFilter:function(player,tag,arg){
|
||
if(player.hasSkillTag('unequip2')) return false;
|
||
if(arg&&arg.player){
|
||
if(arg.player.hasSkillTag('unequip',false,{
|
||
name:arg.card?arg.card.name:null,
|
||
target:player,
|
||
card:arg.card,
|
||
})) return false;
|
||
if(arg.player.hasSkillTag('unequip_ai',false,{
|
||
name:arg.card?arg.card.name:null,
|
||
target:player,
|
||
card:arg.card,
|
||
})) return false;
|
||
if(arg.player.hasSkillTag('jueqing',false,player)) return false;
|
||
}
|
||
},
|
||
},
|
||
},
|
||
zhuque_skill:{
|
||
equipSkill:true,
|
||
trigger:{player:'useCard1'},
|
||
//priority:7,
|
||
filter:function(event,player){
|
||
if(event.card.name=='sha'&&!game.hasNature(event.card)) return true;
|
||
},
|
||
audio:true,
|
||
check:function(event,player){
|
||
var eff=0;
|
||
for(var i=0;i<event.targets.length;i++){
|
||
var target=event.targets[i];
|
||
var eff1=get.damageEffect(target,player,player);
|
||
var eff2=get.damageEffect(target,player,player,'fire');
|
||
eff+=eff2;
|
||
eff-=eff1;
|
||
}
|
||
return eff>=0;
|
||
},
|
||
prompt2:function(event,player){
|
||
return '将'+get.translation(event.card)+'改为火属性';
|
||
},
|
||
content:function(){
|
||
game.setNature(trigger.card,'fire');
|
||
if(get.itemtype(trigger.card)=='card'){
|
||
var next=game.createEvent('zhuque_clear');
|
||
next.card=trigger.card;
|
||
event.next.remove(next);
|
||
trigger.after.push(next);
|
||
next.setContent(function(){
|
||
game.setNature(trigger.card,[]);
|
||
});
|
||
}
|
||
}
|
||
},
|
||
zhuque_skill2:{
|
||
trigger:{player:'useCardAfter'},
|
||
forced:true,
|
||
popup:false,
|
||
content:function(){
|
||
delete player.storage.zhuque_skill.nature;
|
||
}
|
||
},
|
||
huogon2:{},
|
||
},
|
||
translate:{
|
||
jiu:'酒',
|
||
jiu_info:'①每回合限一次。出牌阶段,对你自己使用。本回合目标角色使用的下一张【杀】的伤害值基数+1。②当你处于濒死状态时,对你自己使用。目标角色回复1点体力。',
|
||
huogong:'火攻',
|
||
tiesuo:'铁索连环',
|
||
tiesuo_info:'此牌可被重铸。出牌阶段,对至多两名角色使用。目标角色横置。',
|
||
huogong_bg:'攻',
|
||
huogong_info:'出牌阶段,对一名有手牌的角色使用。目标角色展示一张手牌A,然后你可以弃置一张与A花色相同的手牌,对目标造成1点火属性伤害。',
|
||
tiesuo_bg:'索',
|
||
bingliang:'兵粮寸断',
|
||
hualiu:'骅骝',
|
||
zhuque:'朱雀羽扇',
|
||
bingliang_bg:'粮',
|
||
bingliang_info:'出牌阶段,对一名距离为1的其他角色使用。目标角色于其判定阶段进行判定:若判定结果不为梅花,则其跳过下一个摸牌阶段。',
|
||
hualiu_bg:'+马',
|
||
hualiu_info:'锁定技,其他角色计算与你的距离+1。',
|
||
zhuque_bg:'扇',
|
||
zhuque_skill:'朱雀羽扇',
|
||
zhuque_info:'当你声明使用普【杀】后,你可以为此【杀】赋予火属性。',
|
||
guding:'古锭刀',
|
||
guding_info:'锁定技,当你因执行【杀】的效果而对目标角色造成伤害时,若其没有手牌,则此伤害+1。',
|
||
guding_skill:'古锭刀',
|
||
tengjia:'藤甲',
|
||
//tengjia_info:'锁定技,【南蛮入侵】、【万箭齐发】、【出其不意】和普通【杀】对你无效。当你受到火焰伤害时,该伤害+1。',
|
||
tengjia_info:'锁定技。①【南蛮入侵】、【万箭齐发】和普【杀】对你无效。②当你受到火属性伤害时,此伤害+1。',
|
||
tengjia1:'藤甲',
|
||
tengjia2:'藤甲',
|
||
tengjia3:'藤甲',
|
||
baiyin:'白银狮子',
|
||
baiyin_info:'锁定技。①当你受到伤害时,若此伤害大于1,则你将伤害值扣减至1点。②当你失去装备区内的【白银狮子】后,你回复1点体力。',
|
||
baiyin_skill:'白银狮子',
|
||
|
||
muniu:'木牛流马',
|
||
muniu_bg:'牛',
|
||
muniu_skill:'木牛',
|
||
muniu_skill7:'木牛流马',
|
||
muniu_skill_bg:'辎',
|
||
muniu_info:'①出牌阶段限一次,你可以将一张手牌扣置于你装备区里的【木牛流马】下,然后你可以将【木牛流马】移动到一名其他角色的装备区里。②你可以将【木牛流马】下的牌如手牌般使用或打出。③当你失去装备区的【木牛流马】后,你刷新〖木牛流马①〗的使用次数限制。若此牌不是因置入其他角色的装备区而失去的,则你将【木牛流马】下的所有牌置入弃牌堆。',
|
||
muniu_skill_info:'将一张手牌扣置于你装备区里的【木牛流马】下,然后可以将此装备移动到一名其他角色的装备区里。',
|
||
},
|
||
list:[
|
||
["heart",4,"sha","fire"],
|
||
["heart",7,"sha","fire"],
|
||
["heart",10,"sha","fire"],
|
||
["diamond",4,"sha","fire"],
|
||
["diamond",5,"sha","fire"],
|
||
["spade",4,"sha","thunder"],
|
||
["spade",5,"sha","thunder"],
|
||
["spade",6,"sha","thunder"],
|
||
["spade",7,"sha","thunder"],
|
||
["spade",8,"sha","thunder"],
|
||
["club",5,"sha","thunder"],
|
||
["club",6,"sha","thunder"],
|
||
["club",7,"sha","thunder"],
|
||
["club",8,"sha","thunder"],
|
||
["heart",8,"shan"],
|
||
["heart",9,"shan"],
|
||
["heart",11,"shan"],
|
||
["heart",12,"shan"],
|
||
["diamond",6,"shan"],
|
||
["diamond",7,"shan"],
|
||
["diamond",8,"shan"],
|
||
["diamond",10,"shan"],
|
||
["diamond",11,"shan"],
|
||
["heart",5,"tao"],
|
||
["heart",6,"tao"],
|
||
["diamond",2,"tao"],
|
||
["diamond",3,"tao"],
|
||
["diamond",9,"jiu"],
|
||
["spade",3,"jiu"],
|
||
["spade",9,"jiu"],
|
||
["club",3,"jiu"],
|
||
["club",9,"jiu"],
|
||
|
||
["diamond",13,"hualiu"],
|
||
["club",1,"baiyin"],
|
||
["spade",2,"tengjia"],
|
||
["club",2,"tengjia"],
|
||
["spade",1,"guding"],
|
||
["diamond",1,"zhuque"],
|
||
|
||
["heart",2,"huogong"],
|
||
["heart",3,"huogong"],
|
||
["diamond",12,"huogong"],
|
||
["spade",11,"tiesuo"],
|
||
["spade",12,"tiesuo"],
|
||
["club",10,"tiesuo"],
|
||
["club",11,"tiesuo"],
|
||
["club",12,"tiesuo"],
|
||
["club",13,"tiesuo"],
|
||
["heart",1,"wuxie"],
|
||
["heart",13,"wuxie"],
|
||
["spade",13,"wuxie"],
|
||
["spade",10,"bingliang"],
|
||
["club",4,"bingliang"],
|
||
|
||
['diamond',5,'muniu'],
|
||
],
|
||
}
|
||
});
|