noname/card/sp.js

701 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:'sp',
connect:true,
card:{
jinchan:{
audio:true,
fullskin:true,
type:'trick',
notarget:true,
global:['g_jinchan','g_jinchan2'],
content:function(){
var evt=event.getParent(3)._trigger;
if(evt.jinchan){
var type=get.type(evt.card,'trick');
if(type=='basic'||type=='trick'){
evt.cancel();
}
}
player.draw(2);
},
ai:{
useful:function(){
var player=_status.event.player;
var nj=player.countCards('h','jinchan');
var num=player.getHandcardLimit();
if(nj>=num){
return 10;
}
if(nj==num-1){
return 6;
}
return 1;
},
result:{
player:1
},
value:5
}
},
qijia:{
audio:true,
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
if(target.getEquip(5)){
return target.countCards('e')>1;
}
else{
return target.countCards('e')>0;
}
},
content:function(){
'step 0'
var e1=[],e2=[];
var he=target.getCards('he');
for(var i=0;i<he.length;i++){
if(get.type(he[i])=='equip'){
var subtype=get.subtype(he[i]);
if(subtype=='equip1'||subtype=='equip4'){
e1.push(he[i]);
}
else if(subtype=='equip2'||subtype=='equip3'){
e2.push(he[i]);
}
}
}
if(e1.length&&e2.length){
var choice=0;
if(e1.length>e2.length||(target.hp>=3&&Math.random()<0.3)){
choice=1;
}
event.e1=e1;
event.e2=e2;
target.chooseControl(choice).set('choiceList',['弃置'+get.translation(e1),'弃置'+get.translation(e2)]);
}
else{
if(e1.length){
target.discard(e1);
}
else if(e2.length){
target.discard(e2);
}
event.finish();
}
'step 1'
if(result.index==0){
target.discard(event.e1);
}
else{
target.discard(event.e2);
}
},
ai:{
order:9.01,
useful:1,
value:5,
result:{
target:function(player,target){
var num1=0,num2=0;
for(var i=1;i<=4;i++){
var card=target.getEquip(i);
if(card){
if(i==1||i==4){
num1+=get.equipValue(card);
}
else{
num2+=get.equipValue(card);
}
}
}
var num;
if(num1==0){
num=num2;
}
else if(num2==0){
num=num1;
}
else{
num=Math.min(num1,num2);
}
if(num>0){
return -0.8-num/10;
}
else{
return 0;
}
}
},
tag:{
loseCard:1,
discard:1
}
}
},
fulei:{
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],
judge:function(card){
if(get.suit(card)=='spade') return -6;
return 0;
},
effect:function(){
'step 0'
if(result.bool==false){
if(!card.storage.fulei){
card.storage.fulei=1;
}
else{
card.storage.fulei++;
}
player.damage(card.storage.fulei,'thunder','nosource');
}
'step 1'
player.addJudgeNext(card);
},
cancel:function(){
player.addJudgeNext(card);
},
ai:{
basic:{
order:1,
useful:0,
value:0,
},
result:{
target:function(player,target){
return lib.card.shandian.ai.result.target(player,target);
}
},
}
},
qibaodao:{
audio:true,
fullskin:true,
type:'equip',
subtype:'equip1',
skills:['qibaodao','qibaodao2'],
distance:{attackFrom:-1},
ai:{
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return player.canUse('sha',current)&&current.isHealthy()&&get.attitude(player,current)<0;
})){
return 5;
}
return 3;
},
basic:{
equipValue:5
}
},
},
zhungangshuo:{
audio:true,
fullskin:true,
type:'equip',
subtype:'equip1',
skills:['zhungangshuo'],
distance:{attackFrom:-2},
ai:{
equipValue:4
},
},
lanyinjia:{
fullskin:true,
type:'equip',
subtype:'equip2',
skills:['lanyinjia','lanyinjia2'],
ai:{
equipValue:6
}
},
yinyueqiang:{
audio:true,
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-2},
ai:{
basic:{
equipValue:4
}
},
skills:['yinyueqiang']
},
du:{
type:'basic',
fullskin:true,
toself:true,
ai:{
value:-5,
useful:6,
result:{
player:function(player,target){
if(player.hasSkillTag('usedu')) return 5;
return -1;
}
},
order:7.5
},
enable:true,
modTarget:true,
global:'g_du',
filterTarget:function(card,player,target){
return target==player;
},
delay:false,
content:function(){},
selectTarget:-1
},
shengdong:{
audio:true,
fullskin:true,
enable:function(){
return game.countPlayer()>2;
},
chongzhu:function(){
return game.countPlayer()<=2;
},
singleCard:true,
type:'trick',
selectTarget:2,
complexTarget:true,
multitarget:true,
targetprompt:['给一张牌','得两张牌'],
filterTarget:function(card,player,target){
return target!=player;
},
content:function(){
'step 0'
if(!player.countCards('h')){
event.finish();
}
else{
event.target1=target;
event.target2=event.addedTarget;
player.chooseCard('h','将一张手牌交给'+get.translation(event.target1),true);
}
'step 1'
player.$giveAuto(result.cards,event.target1);
event.target1.gain(result.cards,player);
'step 2'
if(!event.target1.countCards('h')){
event.finish();
}
else{
var he=event.target1.getCards('he');
if(he.length<=2){
event.directresult=he;
}
else{
event.target1.chooseCard('he','将两张牌交给'+get.translation(event.target2),2,true);
}
}
'step 3'
if(!event.directresult){
event.directresult=result.cards;
}
event.target1.$giveAuto(event.directresult,event.target2);
event.target2.gain(event.directresult,event.target1);
},
ai:{
order:2.5,
value:[4,1],
useful:1,
wuxie:function(){
return 0;
},
result:{
target:function(player,target){
var ok=false;
var hs=player.getCards('h');
if(hs.length<=1) return 0;
for(var i=0;i<hs.length;i++){
if(get.value(hs[i])<=5){
ok=true;
break;
}
}
if(!ok) return 0;
if(ui.selected.targets.length==1){
if(target.hasSkillTag('nogain')) return 0;
return 2;
}
if(target.countCards('he')==0) return 0;
if(player.hasFriend()) return -1;
return 0;
}
}
}
},
zengbin:{
audio:true,
fullskin:true,
enable:true,
type:'trick',
filterTarget:true,
content:function(){
'step 0'
target.draw(3);
'step 1'
if(target.countCards('he',{type:'basic'})<target.countCards('he')){
target.chooseToDiscard('增兵减灶','he',function(card){
return get.type(card)!='basic';
}).set('ai',function(card){
if(_status.event.goon) return 8-get.value(card);
return 11-get.value(card);
}).set('goon',target.countCards('h',function(card){
return get.value(card,target,'raw')<8;
})>1).set('prompt2','弃置一张非基本牌,或取消并弃置两张牌');
event.more=true;
}
else{
target.chooseToDiscard('he',2,true).set('ai',get.disvalue2);
}
'step 2'
if(event.more&&!result.bool){
target.chooseToDiscard('he',2,true).set('ai',get.disvalue2);
}
},
ai:{
order:7,
useful:4,
value:10,
tag:{
draw:2
},
result:{
target:function(player,target){
if(target.hasJudge('lebu')) return 0;
return Math.max(1,2-target.countCards('h')/10);
}
}
}
},
caomu:{
audio:true,
fullskin:true,
enable:true,
type:'delay',
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player!=target);
},
judge:function(card){
if(get.suit(card)=='club') return 0;
return -3;
},
effect:function(){
if(result.bool==false){
player.addTempSkill('caomu_skill');
}
},
ai:{
basic:{
order:1,
useful:1,
value:4.5,
},
result:{
player:function(player,target){
return game.countPlayer(function(current){
if(get.distance(target,current)<=1&&current!=target){
var att=get.attitude(player,current);
if(att>3){
return 1.1;
}
else if(att>0){
return 1;
}
else if(att<-3){
return -1.1;
}
else if(att<0){
return -1;
}
}
});
},
target:function(player,target){
if(target.hasJudge('bingliang')) return 0;
return -1.5/Math.sqrt(target.countCards('h')+1);
}
},
}
}
},
skill:{
lanyinjia:{
equipSkill:true,
enable:['chooseToUse','chooseToRespond'],
filterCard:true,
viewAs:{name:'shan'},
viewAsFilter:function(player){
if(!player.countCards('h')) return false;
},
prompt:'将一张手牌当闪打出',
check:function(card){
return 6-get.value(card);
},
ai:{
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('h')) return false;
},
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')&&current<0&&target.countCards('h')) return 0.59
}
},
order:4,
useful:-0.5,
value:-0.5
}
},
lanyinjia2:{
equipSkill:true,
trigger:{player:'damageBegin4'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&player.getEquip('lanyinjia');
},
content:function(){
var card=player.getEquip('lanyinjia');
if(card){
player.discard(card);
}
},
},
zhungangshuo:{
equipSkill:true,
trigger:{player:'useCardToPlayered'},
logTarget:'target',
filter:function(event,player){
return event.card.name=='sha'&&(event.player.countCards('h')||player.countCards('h'));
},
check:function(event,player){
var target=event.target;
if(get.attitude(player,target)>=0) return false;
if(player.hasCard(function(card){
return get.value(card)>=8;
})){
return false;
}
var n1=event.target.countCards('h');
return n1>0&&n1<=player.countCards('h');
},
content:function(){
'step 0'
game.delayx();
'step 1'
trigger.target.discardPlayerCard('h',player,true);
'step 2'
player.discardPlayerCard('h',trigger.target,true);
}
},
qibaodao:{
equipSkill:true,
trigger:{source:'damageBegin1'},
forced:true,
filter:function(event){
return event.card&&event.card.name=='sha'&&event.player.isHealthy();
},
content:function(){
trigger.num++;
},
ai:{
effect:{
player:function(card,player,target){
if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){
return [1,-2];
}
}
}
}
},
qibaodao2:{
inherit:'qinggang_skill',
},
g_jinchan:{
cardSkill:true,
trigger:{target:'useCardToBefore'},
forced:true,
popup:false,
filter:function(event,player){
if(event.player==player) return false;
if(event.getParent().directHit.contains(player)) return false;
var num=player.countCards('h','jinchan');
return num&&num==player.countCards('h');
},
content:function(){
'step 0'
player.chooseToUse({name:'jinchan'},'是否对'+get.translation(trigger.card)+'使用【金蝉脱壳】?').set('ai1',function(card){
return _status.event.bool;
}).set('bool',-get.effect(player,trigger.card,trigger.player,player)).set('respondTo',[trigger.player,trigger.card]);
trigger.jinchan=true;
'step 1'
delete trigger.jinchan;
}
},
g_jinchan2:{
trigger:{player:'discardAfter'},
forced:true,
filter:function(event,player){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='jinchan') return true;
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='jinchan') num++;
}
if(num){
player.draw(num);
}
}
},
yinyueqiang:{
equipSkill:true,
trigger:{player:['useCard','respondAfter']},
direct:true,
filter:function(event,player){
if(_status.currentPhase==player) return false;
if(!event.cards) return false;
if(event.cards.length!=1) return false;
if(lib.filter.autoRespondSha.call({player:player})) return false;
return get.color(event.cards[0])=='black';
},
content:function(){
'step 0'
var next=player.chooseToUse(get.prompt('yinyueqiang'),{name:'sha'});
next.aidelay=true;
next.logSkill='yinyueqiang';
next.noButton=true;
'step 1'
if(result.bool){
game.delay();
}
}
},
g_du:{
cardSkill:true,
trigger:{player:'loseEnd'},
popup:false,
forced:true,
filter:function(event,player){
if(!event.visible) return false;
if(player.hasSkillTag('nodu')) return false;
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='du'&&event.cards[i].original=='h') return true;
}
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='du'&&trigger.cards[i].original=='h') num++;
}
if(trigger.getParent().name!='useCard'||trigger.getParent().card.name!='du') player.popup('毒','wood');
player.loseHp(num).type='du';
},
},
caomu_skill:{
cardSkill:true,
unique:true,
trigger:{player:'phaseDrawBegin'},
silent:true,
content:function(){
trigger.num--;
},
group:'caomu_skill2'
},
caomu_skill2:{
trigger:{player:'phaseDrawAfter'},
silent:true,
content:function(){
var targets=game.filterPlayer(function(current){
return get.distance(player,current)<=1&&player!=current;
});
if(targets.length){
game.asyncDraw(targets);
}
}
}
},
translate:{
qijia:'弃甲曳兵',
qijia_info:'出牌阶段对一名装备区里有牌的其他角色使用。该角色选择一项1.弃置手牌区和装备区里所有的武器和-1坐骑2.弃置手牌区和装备区里所有的防具和+1坐骑。',
jinchan:'金蝉脱壳',
g_jinchan2:'金蝉脱壳',
g_jinchan2_info:'当你因弃置而失去【金蝉脱壳】时,你摸一张牌',
jinchan_info:'当你成为其他角色使用牌的目标时,若你的手牌里只有【金蝉脱壳】,使目标锦囊牌或基本牌对你无效,你摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
fulei:'浮雷',
fulei_info:'出牌阶段对你使用。将【浮雷】放置于你的判定区里若判定结果为黑桃则目标角色受到X点雷电伤害X为此锦囊判定结果为黑桃的次数。判定完成后将此牌移动到下家的判定区里。',
qibaodao:'七宝刀',
qibaodao_info:'攻击范围2锁定技你使用【杀】无视目标防具若目标角色未损失体力值此【杀】伤害+1',
qibaodao2:'七宝刀',
zhungangshuo:'衠钢槊',
zhungangshuo_info:'当你使用【杀】指定一名角色为目标后,你可令该角色弃置你的一张手牌,然后你弃置其一张手牌',
lanyinjia:'烂银甲',
lanyinjia_info:'你可以将一张手牌当做【闪】使用或打出。锁定技,【烂银甲】不会无效化;当你受到【杀】造成的伤害时,弃置【烂银甲】。',
yinyueqiang:'银月枪',
yinyueqiang_info:'你的回合外,每当你使用或打出了一张黑色手牌(若为使用则在它结算之前),你可以立即对你攻击范围内的任意一名角色使用一张【杀】',
du:'毒',
du_info:'当此牌正面朝上离开你的手牌区时,你失去一点体力',
shengdong:'声东击西',
shengdong_info:'出牌阶段对一名其他角色使用。你交给目标角色一张手牌若如此做其将两张牌交给另一名由你选择的其他角色不足则全给存活角色不超过2时可重铸',
zengbin:'增兵减灶',
zengbin_info:'出牌阶段对一名角色使用。目标角色摸三张牌然后选择一项1.弃置一张非基本牌2.弃置两张牌',
caomu:'草木皆兵',
caomu_info:'出牌阶段对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里若判定结果不为梅花摸牌阶段目标角色少摸一张牌摸牌阶段结束时与其距离为1的角色各摸一张牌',
},
list:[
['spade',1,'caomu'],
['club',3,'caomu'],
['heart',12,'shengdong',],
['club',9,'shengdong'],
['spade',9,'shengdong'],
['diamond',4,'zengbin'],
['heart',6,'zengbin'],
['spade',7,'zengbin'],
['spade',3,'du'],
['spade',9,'du'],
['club',3,'du'],
['club',9,'du'],
['diamond',5,'du'],
['diamond',9,'du'],
['diamond',12,'yinyueqiang'],
["spade",11,'jinchan'],
["club",12,'jinchan'],
["club",13,'jinchan'],
["club",12,'qijia'],
["club",13,'qijia'],
["spade",1,'fulei','thunder'],
["spade",6,'qibaodao'],
["spade",5,'zhungangshuo'],
["spade",2,'lanyinjia'],
["club",2,'lanyinjia'],
],
};
});