noname/card/sp.js

679 lines
18 KiB
JavaScript
Raw Normal View History

2020-05-09 05:30:03 +00:00
'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
return {
name:'sp',
connect:true,
card:{
jinchan:{
audio:true,
fullskin:true,
wuxieable: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'){
2022-12-04 16:16:32 +00:00
evt.neutralize();
2020-05-09 05:30:03 +00:00
}
}
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==player) return false;
2023-08-14 17:33:36 +00:00
if(target.getEquips(5).length){
2020-05-09 05:30:03 +00:00
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],
2023-01-24 13:26:41 +00:00
toself:true,
2020-05-09 05:30:03 +00:00
judge:function(card){
if(get.suit(card)=='spade') return -6;
2023-02-22 05:47:10 +00:00
return 6;
},
judge2:function(result){
if(result.bool==false) return true;
return false;
2020-05-09 05:30:03 +00:00
},
2022-10-20 11:50:57 +00:00
cardPrompt:function(card){
var str='出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。';
if(card.storage&&card.storage.fulei) str+=('<br><span style="font-family:yuanli">此牌已判定命中过:'+card.storage.fulei+'次</span>');
return str;
},
2020-05-09 05:30:03 +00:00
effect:function(){
'step 0'
if(result.bool==false){
2022-10-20 11:50:57 +00:00
var card=cards[0];
if(card){
if(!card.storage.fulei){
card.storage.fulei=1;
}
else{
card.storage.fulei++;
}
player.damage(card.storage.fulei,'thunder','nosource');
2020-05-09 05:30:03 +00:00
}
}
'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);
}
},
tag:{
damage:0.25,
natureDamage:0.25,
thunderDamage:0.25,
}
2020-05-09 05:30:03 +00:00
}
},
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']
},
shengdong:{
audio:true,
fullskin:true,
enable:function(){
return game.countPlayer()>2;
},
recastable:function(){
2020-05-09 05:30:03 +00:00
return game.countPlayer()<=2;
},
singleCard:true,
type:'trick',
complexTarget:true,
multitarget:true,
targetprompt:['给一张牌','得两张牌'],
filterTarget:function(card,player,target){
2023-11-24 09:17:49 +00:00
return target!==player;
2020-05-09 05:30:03 +00:00
},
2023-11-24 09:17:49 +00:00
filterAddedTarget:function(card,player,target,preTarget){
return target!==preTarget&&target!==player;
2022-04-30 12:32:57 +00:00
},
2020-05-09 05:30:03 +00:00
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'
2023-01-24 13:26:41 +00:00
player.give(result.cards,event.target1);
2020-05-09 05:30:03 +00:00
'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;
}
2023-01-24 13:26:41 +00:00
event.target1.give(event.directresult,event.target2);
2020-05-09 05:30:03 +00:00
},
ai:{
order:2.5,
value:[4,1],
useful:1,
wuxie:function(){
return 0;
},
result:{
target:function(player,target){
2023-11-24 09:17:49 +00:00
let hs=player.getCards('h');
2023-11-24 22:21:00 +00:00
if(hs.length<=1||!hs.some(i=>{
return get.value(i)<5.5;
2023-11-24 09:17:49 +00:00
})) return 0;
let targets=get.copy(ui.selected.targets);
if(_status.event.preTarget) targets.add(_status.event.preTarget);
if(targets.length){
if(target.hasSkillTag('nogain')) return 0.01;
2020-05-09 05:30:03 +00:00
return 2;
}
2023-11-24 09:17:49 +00:00
if(!target.countCards('he')) return 0;
2020-05-09 05:30:03 +00:00
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){
2023-02-22 05:47:10 +00:00
if(get.suit(card)=='club') return 1;
2020-05-09 05:30:03 +00:00
return -3;
},
2023-02-22 05:47:10 +00:00
judge2:function(result){
if(result.bool==false) return true;
return false;
},
2020-05-09 05:30:03 +00:00
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){
2021-05-18 07:57:26 +00:00
if(!player.countCards('hs')) return false;
2020-05-09 05:30:03 +00:00
},
2021-05-18 07:57:26 +00:00
position:'hs',
2020-05-09 05:30:03 +00:00
prompt:'将一张手牌当闪使用或打出',
check:function(card){
return 6-get.value(card);
},
ai:{
respondShan:true,
skillTagFilter:function(player){
2021-05-18 07:57:26 +00:00
if(!player.countCards('hs')) return false;
2020-05-09 05:30:03 +00:00
},
effect:{
target:function(card,player,target,current){
2021-05-18 07:57:26 +00:00
if(get.tag(card,'respondShan')&&current<0&&target.countCards('hs')) return 0.59
2020-05-09 05:30:03 +00:00
}
},
order:4,
useful:-0.5,
value:-0.5
}
},
lanyinjia2:{
equipSkill:true,
trigger:{player:'damageBegin4'},
forced:true,
filter:function(event,player){
2023-08-14 17:33:36 +00:00
return event.card&&event.card.name=='sha'&&player.getEquips('lanyinjia').length>0;
2020-05-09 05:30:03 +00:00
},
content:function(){
2023-08-14 17:33:36 +00:00
var card=player.getEquips('lanyinjia');
if(card.length){
2020-05-09 05:30:03 +00:00
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',
v1.9.122.3 (#146) * change lib.init.parsex, Enable 'step' to be used through nesting * Fixed an issue where nonstandard statement 'step 0' before standard statement 'step 0' would cause an error * zhangshiping; tw_madai bug fix * modify all the skills with incorrect "locked" tag * Change the game.exit function to restart the app for WKWebview users using ios. And added the macintosh field to the judgment of lib.device * various bug fix * Revert "various bug fix" This reverts commit ca7a363172a837af9244fca300d6a008cafc03ac. * various bug fix * some sudio * unlock zhenghun, fix sbdiaochan * add and adjust some audio, fix some bugs * add trigger "useSkill" and "logSkillBegin" * brand new wuxie * Update standard.js * update 武安国 * iriya! * Add character lushi; fix clansankuang * add 魏关羽/涛神,unlock 关宁/向朗/谋孙策/谋大乔/谋刘表,add related audio * fix: adjust the edit box style to fix the text overflow problem 🐛 * fix 修文 and some other small bugs * 伊莉雅·罗日杰斯特文斯卡娅 * Fix the issue of "game.getDB" and "game. deleteDB" reporting errors without "lib.db" * Some browsers do not support "autoplay", so "onconplay" listening has been added * sunwukong * more zooms * unlock 周善, modify 卢氏/卞喜/刘虞/黄祖/李采薇/张翼/笮融/孙寒华/TW董昭, fix some bug, add omitted audio * change the number of 如意金箍棒 to 9 instead of 5; fix 夏侯尚's bug; add audio for sunwukong & donghailongwang * Add the default accept value of '*/*' to the HTML selection file label * longwang * add&modify some audio * add 族王凌/界SP黄月英/界张松/武诸葛亮,fix 晖云's bug; resolve conflicts, bring 武诸葛 up to date, fix 龙王's bug * add 阮籍, add a skillTag in "jiu2" named jiuSustain for ruanji * add some audio, sort some characters in sp * sync 界SP黄月英 * add some character intros * make 谋弈 play audio correctly * revert some skills back to new ones * v1.9.122.3 * Update update.js --------- Co-authored-by: shijian <2954700422@qq.com> Co-authored-by: copcap <copcap@outlook.com> Co-authored-by: copcap <43802486+copcap@users.noreply.github.com> Co-authored-by: PBK-B <pbk-b@PBK6.cn>
2023-06-30 15:06:19 +00:00
audio:true,
2020-05-09 05:30:03 +00:00
},
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'
2020-06-06 04:40:45 +00:00
player.chooseToUse('是否对'+get.translation(trigger.card)+'使用【金蝉脱壳】?').set('ai1',function(card){
2020-05-09 05:30:03 +00:00
return _status.event.bool;
2020-06-06 04:40:45 +00:00
}).set('bool',-get.effect(player,trigger.card,trigger.player,player)).set('respondTo',[trigger.player,trigger.card]).set('filterCard',function(card,player){
if(get.name(card)!='jinchan') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
});
2020-05-09 05:30:03 +00:00
trigger.jinchan=true;
'step 1'
delete trigger.jinchan;
}
},
g_jinchan2:{
2022-12-04 16:16:32 +00:00
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
2020-05-09 05:30:03 +00:00
forced:true,
2022-12-04 16:16:32 +00:00
cardSkill:true,
2020-05-09 05:30:03 +00:00
filter:function(event,player){
2022-12-04 16:16:32 +00:00
if(event.type!='discard') return false;
var evt=event.getl(player);
if(!evt||!evt.cards2||!evt.cards2.length) return false;
for(var i of evt.cards2){
if(i.name=='jinchan') return true;
2020-05-09 05:30:03 +00:00
}
return false;
},
content:function(){
2022-12-04 16:16:32 +00:00
var num=0,cards=trigger.getl(player).cards2;
for(var i=0;i<cards.length;i++){
if(cards[i].name=='jinchan') num++;
2020-05-09 05:30:03 +00:00
}
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();
}
}
},
caomu_skill:{
cardSkill:true,
unique:true,
trigger:{player:'phaseDrawBegin'},
2022-12-22 03:19:22 +00:00
popup:false,
charlotte:true,
forced:true,
2020-05-09 05:30:03 +00:00
content:function(){
trigger.num--;
},
group:'caomu_skill2'
},
caomu_skill2:{
2022-12-22 03:19:22 +00:00
cardSkill:true,
popup:false,
forced:true,
2020-05-09 05:30:03 +00:00
trigger:{player:'phaseDrawAfter'},
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:'金蝉脱壳',
2023-10-15 13:49:17 +00:00
g_jinchan2_info:'当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
2022-12-04 16:16:32 +00:00
jinchan_info:'其他角色使用的基本牌或普通牌对你生效时,若你的所有手牌均为【金蝉脱壳】,则你可以使用此牌。你令此牌对你无效并摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
2020-05-09 05:30:03 +00:00
fulei:'浮雷',
2022-10-20 11:50:57 +00:00
fulei_info:'出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。',
2020-05-09 05:30:03 +00:00
qibaodao:'七宝刀',
2023-10-15 13:49:17 +00:00
qibaodao_info:'攻击范围2锁定技你使用【杀】无视目标防具若目标角色未损失体力值此【杀】伤害+1。',
2020-05-09 05:30:03 +00:00
qibaodao2:'七宝刀',
zhungangshuo:'衠钢槊',
2023-10-15 13:49:17 +00:00
zhungangshuo_info:'当你使用【杀】指定一名角色为目标后,你可令该角色弃置你的一张手牌,然后你弃置其一张手牌。',
2020-05-09 05:30:03 +00:00
lanyinjia:'烂银甲',
lanyinjia_info:'你可以将一张手牌当做【闪】使用或打出。锁定技,【烂银甲】不会无效化;当你受到【杀】造成的伤害时,弃置【烂银甲】。',
yinyueqiang:'银月枪',
2023-10-23 12:25:02 +00:00
yinyueqiang_info:'你的回合外,每当你使用或打出了一张黑色手牌(若为使用则在它结算之前),你可以立即对你攻击范围内的任意一名角色使用一张【杀】。',
2020-05-09 05:30:03 +00:00
shengdong:'声东击西',
2023-10-15 13:49:17 +00:00
shengdong_info:'出牌阶段对一名其他角色使用。你交给目标角色一张手牌若如此做其将两张牌交给另一名由你选择的其他角色不足则全给存活角色不超过2时可重铸。',
2020-05-09 05:30:03 +00:00
zengbin:'增兵减灶',
2023-10-15 13:49:17 +00:00
zengbin_info:'出牌阶段对一名角色使用。目标角色摸三张牌然后选择一项1.弃置一张非基本牌2.弃置两张牌。',
2020-05-09 05:30:03 +00:00
caomu:'草木皆兵',
2023-10-15 13:49:17 +00:00
caomu_info:'出牌阶段对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里若判定结果不为梅花摸牌阶段目标角色少摸一张牌摸牌阶段结束时与其距离为1的角色各摸一张牌。',
2020-05-09 05:30:03 +00:00
},
list:[
['spade',1,'caomu'],
['club',3,'caomu'],
2020-08-11 13:05:00 +00:00
['heart',12,'shengdong'],
2020-05-09 05:30:03 +00:00
['club',9,'shengdong'],
['spade',9,'shengdong'],
['diamond',4,'zengbin'],
['heart',6,'zengbin'],
['spade',7,'zengbin'],
['diamond',12,'yinyueqiang'],
["spade",11,'jinchan'],
["club",12,'jinchan'],
["club",13,'jinchan'],
["club",12,'qijia'],
["club",13,'qijia'],
2020-08-11 13:05:00 +00:00
["spade",1,'fulei'],
2020-05-09 05:30:03 +00:00
["spade",6,'qibaodao'],
["spade",5,'zhungangshuo'],
["spade",2,'lanyinjia'],
["club",2,'lanyinjia'],
],
};
});