noname/card/hearth.js

726 lines
18 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:'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:[4,1],
},
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,
toself:true,
filterTarget:function(card,player,target){
return player==target;
},
selectTarget:-1,
modTarget:true,
content:function(){
if(_status.currentPhase==target){
target.addTempSkill('jihuocard2');
}
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('he')){
target.chooseToDiscard('he',true);
}
},
ai:{
order:9,
value:6,
useful:2,
result:{
target:function(player,target){
return Math.max(0,2-target.countCards('e'));
},
},
tag:{
norepeat:1
}
}
},
shandianjian:{
fullskin:true,
type:'trick',
enable:true,
cardnature:'thunder',
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');
}
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');
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',
toself:true,
filterTarget:function(card,player,target){
return player==target;
},
selectTarget:-1,
modTarget:true,
content:function(){
target.changeHujia();
target.draw();
},
ai:{
order:8.5,
value:8,
useful:3,
result:{
target:1
}
}
},
chuansongmen:{
fullskin:true,
type:'trick',
enable:true,
discard:false,
toself:true,
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');
}
else{
target.addTempSkill('chuansongmen2');
}
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,
toself: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'],
],
};
});