727 lines
18 KiB
JavaScript
727 lines
18 KiB
JavaScript
'use strict';
|
||
game.import('card',function(){
|
||
var game=window.game;
|
||
var ui=window.ui;
|
||
var get=window.get;
|
||
var ai=window.ai;
|
||
var lib=window.lib;
|
||
var _status=window._status;
|
||
return {
|
||
name:'hearth',
|
||
card:{
|
||
linghunzhihuo:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
filterTarget:true,
|
||
content:function(){
|
||
'step 0'
|
||
target.damage('fire');
|
||
'step 1'
|
||
var hs=player.getCards('h');
|
||
if(hs.length){
|
||
player.discard(hs.randomGet());
|
||
}
|
||
},
|
||
ai:{
|
||
basic:{
|
||
order:1.8,
|
||
value:[6,1],
|
||
useful:2,
|
||
},
|
||
result:{
|
||
player:function(player,target){
|
||
if(player==target) return -1;
|
||
if(player.countCards('h')>=player.hp) return -0.1;
|
||
if(player.countCards('h')>1) return -0.5;
|
||
return 0;
|
||
},
|
||
target:-1
|
||
},
|
||
tag:{
|
||
damage:1,
|
||
fireDamage:1,
|
||
natureDamage:1,
|
||
}
|
||
}
|
||
},
|
||
jihuocard:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
filterTarget:function(card,player,target){
|
||
return player==target;
|
||
},
|
||
selectTarget:-1,
|
||
modTarget:true,
|
||
content:function(){
|
||
if(_status.currentPhase==target){
|
||
target.addTempSkill('jihuocard2','phaseAfter');
|
||
}
|
||
target.draw();
|
||
},
|
||
ai:{
|
||
order:10,
|
||
result:{
|
||
target:1
|
||
}
|
||
}
|
||
},
|
||
zhaomingdan:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
filterTarget:function(card,player,target){
|
||
return player!=target&&target.countCards('hej')>0;
|
||
},
|
||
content:function(){
|
||
'step 0'
|
||
if(target.countCards('hej')){
|
||
var next=player.discardPlayerCard('hej',target,true);
|
||
next.visible=true;
|
||
next.delay=false;
|
||
}
|
||
else{
|
||
event.goto(2);
|
||
}
|
||
'step 1'
|
||
if(result.bool){
|
||
game.delay(0.5);
|
||
}
|
||
'step 2'
|
||
target.draw(false);
|
||
target.$draw();
|
||
game.delay(0.5);
|
||
'step 3'
|
||
player.draw();
|
||
},
|
||
ai:{
|
||
order:9.5,
|
||
value:6,
|
||
useful:3,
|
||
result:{
|
||
target:function(player,target){
|
||
var es=target.getCards('e');
|
||
var nh=target.countCards('h');
|
||
var noe=(es.length==0||target.hasSkillTag('noe'));
|
||
var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp<target.maxHp);
|
||
var noh=(nh==0||target.hasSkillTag('noh'));
|
||
if(noh&&noe) return 0;
|
||
if(noh&&noe2) return 0.01;
|
||
if(get.attitude(player,target)<=0) return (target.countCards('he'))?-1.5:1.5;
|
||
var js=target.getCards('j');
|
||
if(js.length){
|
||
var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
|
||
if(jj.name=='zhaomingdan') return 3;
|
||
if(js.length==1&&get.effect(target,jj,target,player)>=0){
|
||
return 0;
|
||
}
|
||
return 3;
|
||
}
|
||
return 0.1;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
shijieshu:{
|
||
fullskin:true,
|
||
enable:true,
|
||
type:'trick',
|
||
filterTarget:function(card,player,target){
|
||
return !target.isMin();
|
||
},
|
||
content:function(){
|
||
'step 0'
|
||
var cards=[];
|
||
for(var i=0;i<2;i++){
|
||
var card=get.cardPile(function(card){
|
||
return get.type(card)=='equip';
|
||
});
|
||
if(card){
|
||
ui.special.appendChild(card);
|
||
cards.push(card);
|
||
}
|
||
}
|
||
switch(cards.length){
|
||
case 1:{
|
||
target.$gain(cards[0]);
|
||
game.delay();
|
||
break;
|
||
}
|
||
case 2:{
|
||
target.$gain(cards[0]);
|
||
setTimeout(function(){
|
||
target.$gain(cards[1]);
|
||
},250);
|
||
game.delay();
|
||
break;
|
||
}
|
||
}
|
||
event.cards=cards;
|
||
'step 1'
|
||
if(event.cards.length){
|
||
target.equip(event.cards.shift());
|
||
game.delay(0.5);
|
||
if(event.cards.length){
|
||
event.redo();
|
||
}
|
||
}
|
||
'step 2'
|
||
game.delay(0.5);
|
||
'step 3'
|
||
if(target.countCards('h')){
|
||
target.chooseToDiscard('h',true);
|
||
}
|
||
},
|
||
ai:{
|
||
order:9,
|
||
value:6,
|
||
useful:2,
|
||
result:{
|
||
target:function(player,target){
|
||
return Math.max(0,2-target.countCards('e'))+(target.countCards('h')?0:0.5);
|
||
},
|
||
},
|
||
tag:{
|
||
norepeat:1
|
||
}
|
||
}
|
||
},
|
||
shandianjian:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
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;
|
||
}
|
||
var rand=Math.random()<0.5;
|
||
target.chooseCard(true).ai=function(card){
|
||
if(rand) return Math.random();
|
||
return get.value(card);
|
||
};
|
||
"step 1"
|
||
event.dialog=ui.create.dialog(get.translation(target.name)+'展示的手牌',result.cards);
|
||
event.card2=result.cards[0];
|
||
event.videoId=lib.status.videoId++;
|
||
game.addVideo('cardDialog',null,[get.translation(target.name)+'展示的手牌',get.cardsInfo(result.cards),event.videoId]);
|
||
game.log(target,'展示了',event.card2);
|
||
player.chooseToDiscard(function(card){
|
||
return get.suit(card)==get.suit(_status.event.parent.card2);
|
||
},function(card){
|
||
if(get.damageEffect(target,player,player,'thunder')>0){
|
||
return 6-get.value(card,_status.event.player);
|
||
}
|
||
return -1;
|
||
}).prompt=false;
|
||
game.delay(2);
|
||
"step 2"
|
||
if(result.bool){
|
||
target.damage('thunder');
|
||
}
|
||
else{
|
||
target.addTempSkill('huogong2','phaseBegin');
|
||
}
|
||
game.addVideo('cardDialog',null,event.videoId);
|
||
event.dialog.close();
|
||
},
|
||
ai:{
|
||
basic:{
|
||
order:4,
|
||
value:[3,1],
|
||
useful:1,
|
||
},
|
||
wuxie:function(target,card,player,current,state){
|
||
if(get.attitude(current,player)>=0&&state>0) return false;
|
||
},
|
||
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({name:'shandianjian'})){
|
||
return -10;
|
||
}
|
||
if(_status.event.skill){
|
||
var viewAs=get.info(_status.event.skill).viewAs;
|
||
if(viewAs=='shandianjian') return -10;
|
||
if(viewAs&&viewAs.name=='shandianjian') 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(target==player){
|
||
if(typeof _status.event.filterCard=='function'&&
|
||
_status.event.filterCard({name:'shandianjian'})){
|
||
return -1.5;
|
||
}
|
||
if(_status.event.skill){
|
||
var viewAs=get.info(_status.event.skill).viewAs;
|
||
if(viewAs=='shandianjian') return -1.5;
|
||
if(viewAs&&viewAs.name=='shandianjian') return -1.5;
|
||
}
|
||
return 0;
|
||
}
|
||
return -1.5;
|
||
}
|
||
},
|
||
tag:{
|
||
damage:1,
|
||
thunderDamage:1,
|
||
natureDamage:1,
|
||
norepeat:1
|
||
}
|
||
}
|
||
},
|
||
shihuawuqi:{
|
||
fullskin:true,
|
||
type:'basic',
|
||
enable:true,
|
||
usable:1,
|
||
filterTarget:function(card,player,target){
|
||
return player==target;
|
||
},
|
||
selectTarget:-1,
|
||
content:function(){
|
||
player.addTempSkill('shihuawuqi','phaseAfter');
|
||
if(!player.countCards('h','sha')){
|
||
var card=get.cardPile('sha');
|
||
if(card){
|
||
player.gain(card,'gain2');
|
||
}
|
||
}
|
||
},
|
||
ai:{
|
||
value:4,
|
||
useful:2,
|
||
order:8,
|
||
result:{
|
||
target:function(player,target){
|
||
return target.countCards('h','sha')?0:1;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
siwangchanrao:{
|
||
enable:true,
|
||
type:'trick',
|
||
filterTarget:function(card,player,target){
|
||
return player!=target&&target.countCards('h')>0;
|
||
},
|
||
selectTarget:1,
|
||
content:function(){
|
||
'step 0'
|
||
var hs=target.getCards('h');
|
||
if(hs.length){
|
||
target.discard(hs.randomGet());
|
||
}
|
||
'step 1'
|
||
if(!target.countCards('h')){
|
||
player.draw();
|
||
}
|
||
},
|
||
ai:{
|
||
order:9,
|
||
value:4,
|
||
useful:1,
|
||
result:{
|
||
target:-1,
|
||
player:function(player,target){
|
||
if(target.countCards('h')==1) return 1;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
dunpaigedang:{
|
||
fullskin:true,
|
||
enable:true,
|
||
type:'trick',
|
||
filterTarget:function(card,player,target){
|
||
return player==target;
|
||
},
|
||
selectTarget:-1,
|
||
modTarget:true,
|
||
content:function(){
|
||
target.changeHujia();
|
||
target.draw();
|
||
},
|
||
ai:{
|
||
order:8.5,
|
||
value:7,
|
||
useful:3,
|
||
result:{
|
||
target:1
|
||
}
|
||
}
|
||
},
|
||
chuansongmen:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
discard:false,
|
||
selectTarget:-1,
|
||
filterTarget:function(card,player,target){
|
||
return target==player;
|
||
},
|
||
modTarget:true,
|
||
// usable:3,
|
||
// forceUsable:true,
|
||
content:function(){
|
||
'step 0'
|
||
var gained=get.cards()[0];
|
||
target.gain(gained,'gain2');
|
||
if(event.getParent(3).name=='phaseUse'&&_status.currentPhase==target&&
|
||
lib.filter.filterCard(gained,target,event.getParent(2))){
|
||
var next=target.chooseToUse();
|
||
next.filterCard=function(card){
|
||
return card==gained;
|
||
};
|
||
next.prompt='是否使用'+get.translation(gained)+'?';
|
||
if(cards[0]){
|
||
ui.special.appendChild(cards[0]);
|
||
}
|
||
else{
|
||
event.finish();
|
||
}
|
||
}
|
||
else{
|
||
if(cards[0]){
|
||
ui.discardPile.appendChild(cards[0]);
|
||
}
|
||
event.finish();
|
||
}
|
||
'step 1'
|
||
if(result.bool&&!target.hasSkill('chuansongmen3')){
|
||
if(target.hasSkill('chuansongmen2')){
|
||
target.addTempSkill('chuansongmen3','phaseAfter');
|
||
}
|
||
else{
|
||
target.addTempSkill('chuansongmen2','phaseAfter');
|
||
}
|
||
target.gain(cards,'gain2');
|
||
}
|
||
else{
|
||
ui.discardPile.appendChild(cards[0]);
|
||
}
|
||
},
|
||
ai:{
|
||
order:9.5,
|
||
value:7,
|
||
useful:3,
|
||
result:{
|
||
target:1
|
||
},
|
||
tag:{
|
||
norepeat:1
|
||
}
|
||
}
|
||
},
|
||
tanshezhiren:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
// chongzhu:true,
|
||
filterTarget:function(card,player,target){
|
||
return target==player;
|
||
},
|
||
selectTarget:-1,
|
||
modTarget:true,
|
||
content:function(){
|
||
'step 0'
|
||
event.current=target;
|
||
event.num=game.countPlayer();
|
||
if(event.num%2==0){
|
||
event.num--;
|
||
}
|
||
'step 1'
|
||
if(event.num){
|
||
var enemies=event.current.getEnemies();
|
||
for(var i=0;i<enemies.length;i++){
|
||
if(!enemies[i].countCards('h')){
|
||
enemies.splice(i--,1);
|
||
}
|
||
}
|
||
if(enemies.length){
|
||
var enemy=enemies.randomGet();
|
||
event.current.line(enemy);
|
||
enemy.discard(enemy.getCards('h').randomGet());
|
||
event.current=enemy;
|
||
event.num--;
|
||
event.redo();
|
||
}
|
||
}
|
||
},
|
||
ai:{
|
||
order:1.5,
|
||
wuxie:function(){
|
||
return 0;
|
||
},
|
||
result:{
|
||
player:1
|
||
},
|
||
tag:{
|
||
multineg:1,
|
||
multitarget:1
|
||
}
|
||
}
|
||
},
|
||
xingjiegoutong:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
selectTarget:-1,
|
||
modTarget:true,
|
||
filterTarget:function(card,player,target){return player==target},
|
||
content:function(){
|
||
target.gainMaxHp();
|
||
target.recover();
|
||
target.discard(target.getCards('h'));
|
||
},
|
||
ai:{
|
||
basic:{
|
||
useful:[1,1],
|
||
value:[1,1],
|
||
},
|
||
order:1,
|
||
result:{
|
||
target:function(player,target){
|
||
if(target.countCards('h','tao')) return 0;
|
||
var nh=target.countCards('h');
|
||
if(nh<=2) return 1;
|
||
if(target.hp==1&&target.maxHp>2) return 1;
|
||
return 0;
|
||
},
|
||
},
|
||
tag:{
|
||
recover:1
|
||
}
|
||
}
|
||
},
|
||
shenenshu:{
|
||
fullskin:true,
|
||
enable:true,
|
||
filterTarget:function(card,player,target){
|
||
return target!=player;
|
||
},
|
||
type:'trick',
|
||
content:function(){
|
||
var num=player.countCards('h')-target.countCards('h');
|
||
if(num<-3) num=-3;
|
||
if(num>3) num=3;
|
||
if(num>0){
|
||
target.draw(num);
|
||
}
|
||
else if(num<0){
|
||
player.draw(-num);
|
||
}
|
||
else{
|
||
game.asyncDraw([target,player]);
|
||
}
|
||
},
|
||
ai:{
|
||
order:10,
|
||
value:7,
|
||
useful:2,
|
||
result:{
|
||
target:function(player,target){
|
||
var nh=player.countCards('h')-target.countCards('h');
|
||
if(!player.hasSkill('jizhi')){
|
||
nh--;
|
||
}
|
||
if(nh>0) return nh;
|
||
if(nh==0) return 1;
|
||
return 0;
|
||
},
|
||
player:function(player,target){
|
||
var nh=target.countCards('h')-player.countCards('h');
|
||
if(!player.hasSkill('jizhi')){
|
||
nh++;
|
||
}
|
||
if(nh>0) return nh;
|
||
if(nh==0) return 1;
|
||
return 0;
|
||
}
|
||
},
|
||
expose:0.2
|
||
}
|
||
},
|
||
zhiliaobo:{
|
||
fullskin:true,
|
||
enable:true,
|
||
filterTarget:function(card,player,target){
|
||
return target.hp<target.maxHp;
|
||
},
|
||
type:'trick',
|
||
content:function(){
|
||
'step 0'
|
||
target.recover();
|
||
'step 1'
|
||
target.judge(function(card){
|
||
return get.color(card)=='red'?1:0;
|
||
});
|
||
'step 2'
|
||
if(result.bool){
|
||
target.draw();
|
||
}
|
||
},
|
||
ai:{
|
||
order:4,
|
||
value:[8,3],
|
||
useful:[6,3],
|
||
result:{
|
||
target:function(player,target){
|
||
var eff=get.recoverEffect(target,player,target);
|
||
if(eff<=0) return 0;
|
||
var num=target.maxHp-target.hp;
|
||
if(num<1) return 0;
|
||
if(num==1) return 1;
|
||
if(target.hp==1) return 2.5;
|
||
return 2;
|
||
}
|
||
},
|
||
tag:{
|
||
recover:1
|
||
}
|
||
}
|
||
},
|
||
yuansuhuimie:{
|
||
fullskin:true,
|
||
type:'trick',
|
||
enable:true,
|
||
selectTarget:-1,
|
||
filterTarget:true,
|
||
reverseOrder:true,
|
||
content:function(){
|
||
"step 0"
|
||
target.chooseToDiscard([1,2],'he').ai=function(card){
|
||
if(get.damageEffect(target,player,target,'thunder')>=0){
|
||
if(target.hasSkillTag('maixie')){
|
||
if(ui.selected.cards.length) return 0;
|
||
}
|
||
else{
|
||
return 0;
|
||
}
|
||
}
|
||
if(player.hasSkillTag('notricksource')) return 0;
|
||
if(target.hasSkillTag('notrick')) return 0;
|
||
if(card.name=='tao') return 0;
|
||
if(target.hp==1&&card.name=='jiu') return 0;
|
||
if(get.type(card)!='basic'){
|
||
return 10-get.value(card);
|
||
}
|
||
return 8-get.value(card);
|
||
};
|
||
"step 1"
|
||
if(!result.bool||result.cards.length<2){
|
||
if(result.bool) target.damage(2-result.cards.length,'thunder');
|
||
else target.damage(2,'thunder');
|
||
}
|
||
},
|
||
ai:{
|
||
basic:{
|
||
order:7,
|
||
useful:[5,1]
|
||
},
|
||
result:{
|
||
target:function(player,target){
|
||
if(target.hasSkillTag('nothunder')) return 0;
|
||
if(player.hasUnknown(2)) return 0;
|
||
var nh=target.countCards('he');
|
||
if(target==player) nh--;
|
||
if(nh==2) return -2.5;
|
||
if(nh==1) return -3;
|
||
if(nh==0) return -4;
|
||
return -2;
|
||
},
|
||
},
|
||
tag:{
|
||
damage:1,
|
||
natureDamage:1,
|
||
thunderDamage:1,
|
||
multitarget:1,
|
||
multineg:1,
|
||
discard:2,
|
||
loseCard:2,
|
||
}
|
||
}
|
||
}
|
||
},
|
||
skill:{
|
||
chuansongmen2:{},
|
||
chuansongmen3:{},
|
||
shihuawuqi:{
|
||
mod:{
|
||
attackFrom:function(from,to,distance){
|
||
return distance-1;
|
||
}
|
||
}
|
||
},
|
||
jihuocard2:{
|
||
mod:{
|
||
maxHandcard:function(player,num){
|
||
return num+2;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
translate:{
|
||
linghunzhihuo:'灵魂之火',
|
||
linghunzhihuo_info:'对一名角色造成一点火焰伤害,然后随机弃置一张手牌',
|
||
shenenshu:'神恩术',
|
||
shenenshu_info:'对一名其他角色使用,令你与目标中手牌数较少的摸若干张牌,直到手牌数相等(X不大于3),若手牌数已相等,改为你与目标各摸一张牌',
|
||
zhiliaobo:'治疗波',
|
||
zhiliaobo_info:'对一名受伤角色使用,令其回复一点体力,并进行一次判定,若结果为红色则目标摸一张牌',
|
||
yuansuhuimie:'元素毁灭',
|
||
yuansuhuimie_info:'对所有角色使用,令目标弃置0~2张牌,并受到2-X点雷电伤害,X为其弃置的手牌数',
|
||
xingjiegoutong:'星界沟通',
|
||
xingjiegoutong_info:'增加一点体力上限并回复一点体力,弃置你的所有手牌',
|
||
tanshezhiren:'弹射之刃',
|
||
tanshezhiren_info:'出牌阶段对自己使用,依次按敌方-友方-敌方-的顺序随机弃置阵营内一名随机角色的一张牌,共结算X次,X为存活角色数,若X为偶数,改为X-1',
|
||
chuansongmen:'传送门',
|
||
chuansongmen_info:'摸一张牌并展示,若发生在出牌阶段,你可以立即使用摸到的牌,若如此做,你将传送门收回手牌(每阶段最多收回2张传送门)',
|
||
dunpaigedang:'盾牌格挡',
|
||
dunpaigedang_info:'获得一点护甲值,摸一张牌',
|
||
siwangchanrao:'死亡缠绕',
|
||
siwangchanrao_infox:'弃置一名其他角色的一张手牌,若其此时没有手牌,则你摸一张牌',
|
||
shihuawuqi:'石化武器',
|
||
shihuawuqi_infox:'本回合内攻击范围+1;若你手牌中没有杀,则从牌堆中获得一张杀',
|
||
shandianjian:'闪电箭',
|
||
shandianjian_info:'目标角色展示一张手牌,然后若你能弃掉一张与所展示牌相同花色的手牌,则对该角色造成1点雷电伤害。',
|
||
shijieshu:'视界术',
|
||
shijieshu_info:'目标随机装备两张装备牌,然后弃置一张手牌',
|
||
zhaomingdan:'照明弹',
|
||
zhaomingdan_info:'观看一名其他角色的手牌,并弃置其区域内的一张牌,然后其与你各摸一张牌',
|
||
jihuocard:'激活',
|
||
jihuocard_info:'摸一张牌,本回合手牌上限+2',
|
||
},
|
||
list:[
|
||
// ['heart',2,'shenenshu'],
|
||
// ['diamond',12,'shenenshu'],
|
||
['club',7,'zhiliaobo'],
|
||
['spade',1,'zhiliaobo'],
|
||
['spade',13,'yuansuhuimie'],
|
||
['spade',13,'xingjiegoutong'],
|
||
['diamond',2,'tanshezhiren'],
|
||
['diamond',2,'chuansongmen'],
|
||
['heart',2,'chuansongmen'],
|
||
['club',3,'dunpaigedang'],
|
||
['club',3,'shandianjian','thunder'],
|
||
['spade',1,'shandianjian','thunder'],
|
||
['spade',7,'shijieshu'],
|
||
['diamond',5,'zhaomingdan'],
|
||
['heart',10,'zhaomingdan'],
|
||
['diamond',2,'jihuocard'],
|
||
['diamond',1,'linghunzhihuo'],
|
||
],
|
||
};
|
||
});
|