noname/card/hearth.js

742 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){
if(get.attitude(player,target)>0){
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;
}
}
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;
return 0.1;
}
}
}
},
shijieshu:{
fullskin:true,
enable:true,
type:'trick',
filterTarget:function(card,player,target){
return !target.isMin();
},
content:function(){
'step 0'
var cards=[];
var subtype=null;
for(var i=0;i<2;i++){
var card=get.cardPile(function(card){
if(get.type(card)=='equip'){
if(subtype){
if(get.subtype(card)==subtype){
return false;
}
}
else{
subtype=get.subtype(card);
}
return true;
}
return false;
});
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(){
'step 0'
target.changeHujia();
target.draw();
'step 1'
if(target.countCards('he')){
target.chooseToDiscard('he',true);
}
},
ai:{
order:8.5,
value:7,
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]){
// cards[0].discard();
// }
event.finish();
}
'step 1'
if(result.bool&&!target.hasSkill('chuansongmen3')){
if(target.hasSkill('chuansongmen2')){
target.addTempSkill('chuansongmen3');
}
else{
target.addTempSkill('chuansongmen2');
}
cards[0].fix();
target.gain(cards,'gain2');
}
else{
cards[0].discard();
}
},
ai:{
order:9.5,
value:7,
useful:3,
result:{
target:1
},
tag:{
norepeat:1
}
}
},
tanshezhiren:{
fullskin:true,
type:'trick',
enable:true,
// recastable: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();
enemies.remove(player);
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:8.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,
type:'trick',
selectTarget:-1,
filterTarget:function(card,player,target){
return target==player;
},
modTarget:true,
content:function(){
'step 0'
var cards=target.getCards('h');
if(cards.length){
target.lose(cards)._triggered=null;
}
event.num=1+cards.length;
'step 1'
var cards=[];
var list=get.typeCard('basic');
list.remove('du');
if(list.length){
for(var i=0;i<event.num;i++){
cards.push(game.createCard(list.randomGet()));
}
target.directgain(cards);
}
},
ai:{
order:1,
result:{
target:function(player,target){
var hs=target.getCards('h');
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'&&get.useful(hs[i])>=6){
return 0;
}
}
return 1;
}
}
}
},
zhiliaobo:{
fullskin:true,
enable:true,
filterTarget:function(card,player,target){
return target.hp<target.maxHp;
},
type:'trick',
content:function(){
'step 0'
target.judge(function(card){
return get.color(card)=='red'?1:0;
});
'step 1'
if(result.bool){
target.recover();
}
else{
target.changeHujia();
}
},
ai:{
order:4,
value:[7,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:'出牌阶段对自己使用,将所有手牌(含此张)替换为基本牌',
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'],
],
};
});