Merge branch 'PR-Branch' into testtttest
This commit is contained in:
commit
b1219c05d5
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -203,7 +203,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
||||||
player.chooseToDiscard({suit:get.suit(event.card2)},function(card){
|
player.chooseToDiscard({suit:get.suit(event.card2)},function(card){
|
||||||
var evt=_status.event.getParent();
|
var evt=_status.event.getParent();
|
||||||
if(get.damageEffect(evt.target,evt.player,evt.player,'fire')>0){
|
if(get.damageEffect(evt.target,evt.player,evt.player,'fire')>0){
|
||||||
return 7-get.value(card,evt.player);
|
return 6.2+Math.min(4,evt.player.hp)-get.value(card,evt.player);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}).set('prompt',false);
|
}).set('prompt',false);
|
||||||
|
@ -225,8 +225,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
||||||
value:[3,1],
|
value:[3,1],
|
||||||
useful:1,
|
useful:1,
|
||||||
},
|
},
|
||||||
wuxie:function(target,card,player,current,state){
|
wuxie:function(target,card,player,viewer,state){
|
||||||
if(get.attitude(current,player)>=0&&state>0) return false;
|
let att=get.attitude(viewer,target), eff=get.effect(target,card,player,target);
|
||||||
|
if(status*get.attitude(viewer,player)>0&&!player.isMad() || status*eff*att>=0) return 0;
|
||||||
|
if(get.attitude(viewer,player)>=0 || _status.event.getRand('huogong_wuxie')*4>player.countCards('h')) return 0;
|
||||||
},
|
},
|
||||||
result:{
|
result:{
|
||||||
player:function(player){
|
player:function(player){
|
||||||
|
|
|
@ -561,10 +561,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
||||||
prompt:'是否发动【赠毒】?',
|
prompt:'是否发动【赠毒】?',
|
||||||
prompt2:'将本次获得的【毒】交给其他角色',
|
prompt2:'将本次获得的【毒】交给其他角色',
|
||||||
ai1:function(card){
|
ai1:function(card){
|
||||||
|
var player = _status.event.player;
|
||||||
|
if(player.hasSkillTag("usedu")||get.effect(player,{name: "losehp"}, player, player)>0) return 0;
|
||||||
if(!ui.selected.cards.length) return 1;
|
if(!ui.selected.cards.length) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
},
|
},
|
||||||
ai2:function(target){
|
ai2:function(target){
|
||||||
|
if (target.hasSkillTag("usedu")) return get.attitude(_status.event.player,target)-0.01;
|
||||||
return -get.attitude(_status.event.player,target)+0.01;
|
return -get.attitude(_status.event.player,target)+0.01;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -268,7 +268,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
||||||
return target.countCards('h')>0&&game.hasPlayer(function(current){
|
return target.countCards('h')>0&&game.hasPlayer(function(current){
|
||||||
return target.canCompare(current);
|
return target.canCompare(current);
|
||||||
});
|
});
|
||||||
return ui.selected.targets[0].canCompare(target);
|
//return ui.selected.targets[0].canCompare(target);
|
||||||
},
|
},
|
||||||
filterAddedTarget:function(card,player,target,preTarget){
|
filterAddedTarget:function(card,player,target,preTarget){
|
||||||
return target!=player&&preTarget.canCompare(target);
|
return target!=player&&preTarget.canCompare(target);
|
||||||
|
|
|
@ -188,6 +188,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
//族王浑
|
//族王浑
|
||||||
clanfuxun:{
|
clanfuxun:{
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(player.isPhaseUsing()&&get.type(card)=='equip'&&get.equipValue(card,player)>0) return num+3;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
audio:2,
|
audio:2,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
usable:1,
|
usable:1,
|
||||||
|
@ -206,6 +212,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(!ui.selected.cards.length) return target.countGainableCards(player,'h')>0;
|
if(!ui.selected.cards.length) return target.countGainableCards(player,'h')>0;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
check:function(card){
|
||||||
|
var player=_status.event.player;
|
||||||
|
var evtx=_status.event.getParent('phaseUse');
|
||||||
|
var targets=game.filterPlayer(target=>target!=player&&lib.skill.clanfuxun.ai.result.target(player,target)!=0);
|
||||||
|
targets.sort((a,b)=>Math.abs(lib.skill.clanfuxun.ai.result.target(player,b))-Math.abs(lib.skill.clanfuxun.ai.result.target(player,a)));
|
||||||
|
if(evtx&&targets.length){
|
||||||
|
var target=targets[0];
|
||||||
|
if(!target.hasHistory('lose',evt=>{
|
||||||
|
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||||||
|
})&&!target.hasHistory('gain',evt=>{
|
||||||
|
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||||||
|
})&&Math.abs(player.countCards('h')-target.countCards('h'))==2){
|
||||||
|
if(player.countCards('h')>target.countCards('h')) return 1/(get.value(card)||0.5);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(card.name=='du') return 20;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(card.name=='du') return 20;
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
if(cards.length){
|
if(cards.length){
|
||||||
|
@ -261,9 +288,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:2,
|
order:function(item,player){
|
||||||
|
var evtx=_status.event.getParent('phaseUse');
|
||||||
|
if(game.hasPlayer(current=>{
|
||||||
|
if(current==player||!evtx||get.attitude(player,current)==0) return false;
|
||||||
|
return !current.hasHistory('lose',evt=>{
|
||||||
|
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||||||
|
})&&!current.hasHistory('gain',evt=>{
|
||||||
|
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||||||
|
})&&Math.abs(player.countCards('h')-current.countCards('h'))==2;
|
||||||
|
})) return 10;
|
||||||
|
return 2;
|
||||||
|
},
|
||||||
result:{
|
result:{
|
||||||
target:-1,
|
target:function(player,target){
|
||||||
|
var evtx=_status.event.getParent('phaseUse');
|
||||||
|
var num=get.sgn(get.attitude(player,target));
|
||||||
|
var targets=game.filterPlayer(current=>{
|
||||||
|
if(current==player||!evtx||get.attitude(player,current)==0) return false;
|
||||||
|
return !current.hasHistory('lose',evt=>{
|
||||||
|
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||||||
|
})&&!current.hasHistory('gain',evt=>{
|
||||||
|
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||||||
|
})&&Math.abs(player.countCards('h')-current.countCards('h'))==2;
|
||||||
|
});
|
||||||
|
if(targets.contains(target)){
|
||||||
|
if(player.countCards('h')<target.countCards('h')) return get.sgn(num+0.5)*Math.sqrt(2-num);
|
||||||
|
else return num*(2+num);
|
||||||
|
}
|
||||||
|
return get.sgn(num+0.5)*(1-num)*0.25;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -272,9 +326,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return get.itemtype(card)=='card';
|
return get.itemtype(card)=='card';
|
||||||
},
|
},
|
||||||
position:'hes',
|
position:'hes',
|
||||||
filterTarget:lib.filter.targetEnabled,
|
filterTarget:lib.filter.filterTarget,
|
||||||
selectCard:1,
|
selectCard:1,
|
||||||
check:(card)=>6-get.value(card),
|
check:function(card){
|
||||||
|
var player=_status.event.player;
|
||||||
|
if(player.hasSkill('clanzhongliu')&&get.position(card)!='h') return 10-get.value(card);
|
||||||
|
return 5-get.value(card);
|
||||||
|
},
|
||||||
log:false,
|
log:false,
|
||||||
precontent:function(){
|
precontent:function(){
|
||||||
delete event.result.skill;
|
delete event.result.skill;
|
||||||
|
@ -2106,7 +2164,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
str+=('摸'+get.cnNumber(Math.min(8,num2-num1))+'张牌,然后手牌上限-1。');
|
str+=('摸'+get.cnNumber(Math.min(8,num2-num1))+'张牌,然后手牌上限-1。');
|
||||||
}
|
}
|
||||||
str+=('<br>※当前手牌上限:'+num2);
|
str+=('<br>※当前手牌上限:'+num2);
|
||||||
var num3=player.countMark('clanguixiang_count');
|
var num3=((_status.event.getParent().phaseIndex||0)+1);
|
||||||
if(num3>0){
|
if(num3>0){
|
||||||
str+=(';阶段数:'+num3)
|
str+=(';阶段数:'+num3)
|
||||||
}
|
}
|
||||||
|
@ -2128,7 +2186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:function(item,player){
|
order:function(item,player){
|
||||||
var num=player.getHandcardLimit(),numx=player.countMark('clanguixiang_count');
|
var num=player.getHandcardLimit(),numx=((_status.event.getParent().phaseIndex||0)+1);
|
||||||
if(num==5&&numx==4&&player.getStat('skill').clanyirong) return 0;
|
if(num==5&&numx==4&&player.getStat('skill').clanyirong) return 0;
|
||||||
if(player.countCards('h')==num+1&&num!=2&&(num<=4||num>4&&numx>4)) return 10;
|
if(player.countCards('h')==num+1&&num!=2&&(num<=4||num>4&&numx>4)) return 10;
|
||||||
return 0.5;
|
return 0.5;
|
||||||
|
@ -2139,56 +2197,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
clanguixiang:{
|
clanguixiang:{
|
||||||
audio:2,
|
audio:2,
|
||||||
init:function(player){
|
|
||||||
player.addSkill('clanguixiang_count');
|
|
||||||
},
|
|
||||||
onremove:function(player){
|
|
||||||
player.removeSkill('clanguixiang_count');
|
|
||||||
var event=_status.event.getParent('phase');
|
|
||||||
if(event) delete event._clanguixiang;
|
|
||||||
},
|
|
||||||
trigger:{
|
trigger:{
|
||||||
player:['phaseZhunbeiBefore','phaseJudgeBefore','phaseDrawBefore','phaseDiscardBefore','phaseJieshuBefore'],
|
player:'phaseChange',
|
||||||
},
|
},
|
||||||
forced:true,
|
forced:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
var evt=event.getParent('phase');
|
if(event.phaseList[event.num].startsWith('phaseUse')) return false;
|
||||||
if(!evt||!evt._clanguixiang) return false;
|
var num1=player.getHandcardLimit()-1,num2=event.num;
|
||||||
var num1=player.getHandcardLimit()-1,num2=player.countMark('clanguixiang_count');
|
|
||||||
return num1==num2;
|
return num1==num2;
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.cancel(null,null,'notrigger');
|
trigger.phaseList[trigger.num]='phaseUse|clanguixiang';
|
||||||
var next=player.phaseUse();
|
game.delayx();
|
||||||
event.next.remove(next);
|
|
||||||
trigger.getParent().next.unshift(next);
|
|
||||||
},
|
|
||||||
subSkill:{
|
|
||||||
count:{
|
|
||||||
trigger:{
|
|
||||||
player:['phaseZhunbeiBegin','phaseJudgeBegin','phaseDrawBegin','phaseDiscardBegin','phaseJieshuBegin','phaseUseBegin'],
|
|
||||||
},
|
|
||||||
forced:true,
|
|
||||||
popup:false,
|
|
||||||
lastDo:true,
|
|
||||||
priority:-Infinity,
|
|
||||||
content:function(){
|
|
||||||
player.addMark('clanguixiang_count',1,false);
|
|
||||||
},
|
|
||||||
group:'clanguixiang_clear',
|
|
||||||
},
|
|
||||||
clear:{
|
|
||||||
trigger:{player:'phaseBefore'},
|
|
||||||
forced:true,
|
|
||||||
charlotte:true,
|
|
||||||
popup:false,
|
|
||||||
firstDo:true,
|
|
||||||
priority:Infinity,
|
|
||||||
content:function(){
|
|
||||||
delete player.storage.clanguixiang_count;
|
|
||||||
trigger._clanguixiang=true;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
clanmuyin:{
|
clanmuyin:{
|
||||||
|
|
|
@ -3304,14 +3304,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
dddduanbing:{
|
dddduanbing:{
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.canAddJudge('bingliang')&&player.hasCard((card)=>lib.skill['dddduanbing'].filterCard(card,player),'h');
|
return player.canAddJudge('bingliang')&&player.hasCard((card)=>lib.skill['dddduanbing'].filterCard(card,player),'he');
|
||||||
},
|
},
|
||||||
filterCard:function(card,player){
|
filterCard:function(card,player){
|
||||||
if(get.color(card)!='black'||get.type2(card)=='trick') return false;
|
if(get.color(card)!='black'||get.type2(card)=='trick') return false;
|
||||||
return player.canAddJudge(get.autoViewAs({name:'bingliang'},[card]));
|
return player.canAddJudge(get.autoViewAs({name:'bingliang'},[card]));
|
||||||
},
|
},
|
||||||
check:function(card){
|
check:function(card){
|
||||||
return 6-get.value(card);
|
return 8.2-get.value(card);
|
||||||
},
|
},
|
||||||
discard:false,
|
discard:false,
|
||||||
lose:false,
|
lose:false,
|
||||||
|
|
126
character/diy.js
126
character/diy.js
|
@ -178,7 +178,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ns_chengpu:['male','wu',4,['decadelihuo','decadechunlao']],
|
ns_chengpu:['male','wu',4,['decadelihuo','decadechunlao']],
|
||||||
ns_sundeng:['male','wu',4,['xinkuangbi']],
|
ns_sundeng:['male','wu',4,['xinkuangbi']],
|
||||||
ns_duji:['male','wei',3,['xinfu_andong','xinyingshi']],
|
ns_duji:['male','wei',3,['xinfu_andong','xinyingshi']],
|
||||||
old_majun:["male","wei",3,["xinfu_jingxie1","xinfu_qiaosi"],[]],
|
old_majun:["male","wei",3,["xinfu_jingxie1","xinfu_qiaosi"]],
|
||||||
|
ns_mengyou:['male','qun',4,['nsmanzhi']],
|
||||||
|
|
||||||
old_jiakui:['male','wei',4,['tongqu','xinwanlan']],
|
old_jiakui:['male','wei',4,['tongqu','xinwanlan']],
|
||||||
ol_guohuai:['male','wei',3,['rejingce']],
|
ol_guohuai:['male','wei',3,['rejingce']],
|
||||||
|
@ -219,7 +220,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
|
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
|
||||||
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo','key_minagi','key_michiru'],
|
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo','key_minagi','key_michiru'],
|
||||||
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
|
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
|
||||||
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu",'ns_sundeng','ns_duji'],
|
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu",'ns_sundeng','ns_duji','ns_mengyou'],
|
||||||
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
|
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
|
||||||
diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","old_majun"],
|
diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","old_majun"],
|
||||||
diy_noname:['noname'],
|
diy_noname:['noname'],
|
||||||
|
@ -373,6 +374,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ns_zhangxiu:'#p本因坊神策',
|
ns_zhangxiu:'#p本因坊神策',
|
||||||
ns_yangyi:'#p本因坊神策',
|
ns_yangyi:'#p本因坊神策',
|
||||||
ns_liuzhang:'#r矮子剑薄荷糖',
|
ns_liuzhang:'#r矮子剑薄荷糖',
|
||||||
|
ns_mengyou:'#g残昼厄夜',
|
||||||
},
|
},
|
||||||
card:{
|
card:{
|
||||||
kano_paibingbuzhen:{
|
kano_paibingbuzhen:{
|
||||||
|
@ -678,7 +680,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(evt.gaintag_map[i].includes('fuuko_chuanyuan')) return true;
|
if(evt.gaintag_map[i].includes('fuuko_chuanyuan')) return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return false;
|
//return false;
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.addCount=false;
|
trigger.addCount=false;
|
||||||
|
@ -2599,7 +2601,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
else game.delayx();
|
else game.delayx();
|
||||||
'step 3'
|
'step 3'
|
||||||
player.addTempSkill('nstuilun_effect',{player:'phaseBegin'});
|
player.addTempSkill('nstuilun_effect',{player:'phaseBeginStart'});
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
effect:{
|
effect:{
|
||||||
|
@ -3560,7 +3562,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(player.countCards('h')>0) player.chooseToDiscard('h',true,player.countCards('h'));
|
if(player.countCards('h')>0) player.chooseToDiscard('h',true,player.countCards('h'));
|
||||||
player.recover();
|
player.recover();
|
||||||
trigger.cancel();
|
trigger.cancel();
|
||||||
player.addTempSkill('kyou_duanfa_draw',{player:'phaseBegin'});
|
player.addTempSkill('kyou_duanfa_draw',{player:'phaseBeginStart'});
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
draw:{
|
draw:{
|
||||||
|
@ -6370,9 +6372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var num=game.roundNumber;
|
var num=game.roundNumber;
|
||||||
if(num&&typeof num=='number') player.draw(Math.min(3,num));
|
if(num&&typeof num=='number') player.draw(Math.min(3,num));
|
||||||
'step 1'
|
'step 1'
|
||||||
var next=player.phaseUse();
|
trigger.phaseList.splice(trigger.num,0,'phaseUse|godan_yuanyi');
|
||||||
event.next.remove(next);
|
|
||||||
trigger.next.push(next);
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
godan_feiqu:{
|
godan_feiqu:{
|
||||||
|
@ -17953,6 +17953,96 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
nsmanzhi:{
|
||||||
|
audio:'dcmanzhi',
|
||||||
|
trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
|
||||||
|
direct:true,
|
||||||
|
filter:function(event,player){
|
||||||
|
var nums=[];
|
||||||
|
game.countPlayer(current=>{
|
||||||
|
nums.add(current.hp);
|
||||||
|
nums.add(current.maxHp);
|
||||||
|
nums.add(current.countCards('h'));
|
||||||
|
nums.add(current.countCards('e'));
|
||||||
|
nums.add(current.countCards('j'));
|
||||||
|
});
|
||||||
|
for(var a of nums){
|
||||||
|
for(var b of nums){
|
||||||
|
if((0.5*a*a)+(2.5*b)-game.roundNumber==game.countPlayer()) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
var nums=[];
|
||||||
|
game.countPlayer(current=>{
|
||||||
|
nums.add(current.hp);
|
||||||
|
nums.add(current.maxHp);
|
||||||
|
nums.add(current.countCards('h'));
|
||||||
|
nums.add(current.countCards('e'));
|
||||||
|
nums.add(current.countCards('j'));
|
||||||
|
});
|
||||||
|
nums.sort((a,b)=>a-b);
|
||||||
|
var a=null,b=null,goon=false;
|
||||||
|
for(a of nums){
|
||||||
|
for(b of nums){
|
||||||
|
if((0.5*a*a)+(2.5*b)-game.roundNumber==game.countPlayer()){
|
||||||
|
goon=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(goon) break;
|
||||||
|
}
|
||||||
|
player.chooseButton(2,[
|
||||||
|
'蛮智:请选择让下列等式成立的A与B的值',
|
||||||
|
'<div class="text center">目标等式</div>',
|
||||||
|
`0.5 × A² + 2.5 × B - ${game.roundNumber} = ${game.countPlayer()}`,
|
||||||
|
'<div class="text center">A的可选值</div>',
|
||||||
|
[nums.map(i=>{
|
||||||
|
return [
|
||||||
|
`A|${i}`,
|
||||||
|
i==a?(`<span class="yellowtext">${i}</span>`):i,
|
||||||
|
]
|
||||||
|
}),'tdnodes'],
|
||||||
|
'<div class="text center">B的可选值</div>',
|
||||||
|
[nums.map(i=>{
|
||||||
|
return [
|
||||||
|
`B|${i}`,
|
||||||
|
i==b?(`<span class="yellowtext">${i}</span>`):i,
|
||||||
|
]
|
||||||
|
}),'tdnodes'],
|
||||||
|
]).set('filterButton',function(button){
|
||||||
|
if(!ui.selected.buttons.length) return true;
|
||||||
|
return button.link[0]!=ui.selected.buttons[0].link[0];
|
||||||
|
}).set('filterOk',function(){
|
||||||
|
if(ui.selected.buttons.length!=2) return false;
|
||||||
|
var a,b;
|
||||||
|
for(var i of ui.selected.buttons){
|
||||||
|
if(i.link[0]=='A') a=parseInt(i.link.slice(2));
|
||||||
|
else b=parseInt(i.link.slice(2));
|
||||||
|
}
|
||||||
|
return (0.5*a*a)+(2.5*b)-game.roundNumber==game.countPlayer();
|
||||||
|
}).set('choice',[a,b]).set('ai',(button)=>{
|
||||||
|
var choice=_status.event.choice;
|
||||||
|
if(button.link==`A|${choice[0]}`||button.link==`B|${choice[1]}`) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
var a,b;
|
||||||
|
for(var i of result.links){
|
||||||
|
if(i[0]=='A') a=parseInt(i.slice(2));
|
||||||
|
else b=parseInt(i.slice(2));
|
||||||
|
}
|
||||||
|
equals=`0.5×${a}²+2.5×${b}-${game.roundNumber}=${game.countPlayer()}`;
|
||||||
|
player.logSkill('nsmanzhi');
|
||||||
|
player.chat(equals);
|
||||||
|
game.log(player,'的计算结果为',equals);
|
||||||
|
player.draw(game.countPlayer());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
dynamicTranslate:{
|
dynamicTranslate:{
|
||||||
nsjiquan:function(player){
|
nsjiquan:function(player){
|
||||||
|
@ -19030,6 +19120,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
junk_huangyueying_prefix:'旧界',
|
junk_huangyueying_prefix:'旧界',
|
||||||
old_majun:'骰子马钧',
|
old_majun:'骰子马钧',
|
||||||
old_majun_prefix:'骰子',
|
old_majun_prefix:'骰子',
|
||||||
|
ns_mengyou:'数学孟优',
|
||||||
|
ns_mengyou_prefix:'数学',
|
||||||
|
ns_mengyou_ab:'孟优',
|
||||||
|
nsmanzhi:'蛮智',
|
||||||
|
nsmanzhi_info:'准备阶段或结束阶段开始时,你可以将场上出现的数字代入等式中的A和B。若此等式成立,你摸Y张牌。(等式为Y=0.5A²+2.5B-X,其中X为游戏轮数,Y为存活人数)',
|
||||||
|
ns_chengpu:'铁索程普',
|
||||||
|
ns_chengpu_prefix:'铁索',
|
||||||
|
ns_chengpu_ab:'程普',
|
||||||
|
ns_sundeng:'画饼孙登',
|
||||||
|
ns_sundeng_prefix:'画饼',
|
||||||
|
ns_sundeng_ab:'孙登',
|
||||||
|
ns_duji:'画饼杜畿',
|
||||||
|
ns_duji_prefix:'画饼',
|
||||||
|
ns_duji_ab:'杜畿',
|
||||||
|
|
||||||
diy_tieba:'吧友设计',
|
diy_tieba:'吧友设计',
|
||||||
diy_xushi:'玩点论杀·虚实篇',
|
diy_xushi:'玩点论杀·虚实篇',
|
||||||
|
@ -19041,12 +19145,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
diy_yijiang3:'设计比赛2022',
|
diy_yijiang3:'设计比赛2022',
|
||||||
diy_fakenews:'杀海流言',
|
diy_fakenews:'杀海流言',
|
||||||
diy_trashbin:'垃圾桶',
|
diy_trashbin:'垃圾桶',
|
||||||
ns_chengpu:'铁索程普',
|
|
||||||
ns_chengpu_ab:'程普',
|
|
||||||
ns_sundeng:'画饼孙登',
|
|
||||||
ns_sundeng_ab:'孙登',
|
|
||||||
ns_duji:'画饼杜畿',
|
|
||||||
ns_duji_ab:'杜畿',
|
|
||||||
},
|
},
|
||||||
pinyins:{
|
pinyins:{
|
||||||
加藤うみ:['Kato','Umi'],
|
加藤うみ:['Kato','Umi'],
|
||||||
|
|
|
@ -2453,6 +2453,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(player.needsToDiscard()) return num/3;
|
if(player.needsToDiscard()) return num/3;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
targetInRange:function(card,player,target){
|
||||||
|
if(target.hasMark('yingba_mark')) return true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
|
@ -2468,15 +2471,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
locked:false,
|
locked:false,
|
||||||
//global:'yingba_mark',
|
//global:'yingba_mark',
|
||||||
mod:{
|
|
||||||
targetInRange:function(card,player,target){
|
|
||||||
if(target.hasMark('yingba_mark')) return true;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ai:{
|
ai:{
|
||||||
combo:'scfuhai',
|
combo:'scfuhai',
|
||||||
threaten:3,
|
threaten:3,
|
||||||
order:9,
|
order:11,
|
||||||
result:{
|
result:{
|
||||||
player:function(player,target){
|
player:function(player,target){
|
||||||
if(player.maxHp==1) return -2.5;
|
if(player.maxHp==1) return -2.5;
|
||||||
|
@ -2631,12 +2629,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
game.addGlobalSkill('tianzuo_global');
|
game.addGlobalSkill('tianzuo_global');
|
||||||
|
var cards=[];
|
||||||
for(var i=2;i<10;i++){
|
for(var i=2;i<10;i++){
|
||||||
var card=game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i);
|
cards.push(game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i));
|
||||||
ui.cardPile.insertBefore(card,ui.cardPile.childNodes[get.rand(0,ui.cardPile.childNodes.length)]);
|
|
||||||
}
|
}
|
||||||
game.broadcastAll(function(){lib.inpile.add('qizhengxiangsheng')});
|
game.broadcastAll(function(){lib.inpile.add('qizhengxiangsheng')});
|
||||||
game.updateRoundNumber();
|
game.cardsGotoPile(cards,()=>{
|
||||||
|
return ui.cardPile.childNodes[get.rand(0,ui.cardPile.childNodes.length-1)];
|
||||||
|
})
|
||||||
},
|
},
|
||||||
group:'tianzuo_remove',
|
group:'tianzuo_remove',
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -3588,7 +3588,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
huoxin2:{
|
huoxin2:{
|
||||||
trigger:{
|
trigger:{
|
||||||
player:['phaseAfter','dieAfter'],
|
player:['phaseAfter','dieAfter'],
|
||||||
global:'phaseBefore',
|
global:'phaseBeforeStart',
|
||||||
},
|
},
|
||||||
lastDo:true,
|
lastDo:true,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
|
@ -5414,7 +5414,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.chooseTarget(get.prompt('dawu'),'令至多'+get.cnNumber(num)+'名角色获得“大雾”标记',
|
player.chooseTarget(get.prompt('dawu'),'令至多'+get.cnNumber(num)+'名角色获得“大雾”标记',
|
||||||
[1,num]).set('ai',function(target){
|
[1,num]).set('ai',function(target){
|
||||||
if(target.isMin()) return 0;
|
if(target.isMin()) return 0;
|
||||||
if(target.hasSkill('biantian2')) return 0;
|
if(target.hasSkill('biantian2')||target.hasSkill('dawu2')) return 0;
|
||||||
var att=get.attitude(player,target);
|
var att=get.attitude(player,target);
|
||||||
if(att>=4){
|
if(att>=4){
|
||||||
if(_status.event.allUse) return att;
|
if(_status.event.allUse) return att;
|
||||||
|
@ -5428,13 +5428,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
})*2);
|
})*2);
|
||||||
"step 1"
|
"step 1"
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
player.logSkill('dawu',result.targets,'thunder');
|
var targets=result.targets.sortBySeat();
|
||||||
var length=result.targets.length;
|
player.logSkill('dawu',targets,'thunder');
|
||||||
for(var i=0;i<length;i++){
|
var length=targets.length;
|
||||||
result.targets[i].addSkill('dawu2');
|
targets.forEach(target=>{
|
||||||
}
|
target.addAdditionalSkill(`dawu_${player.playerid}`,'dawu2');
|
||||||
|
target.markAuto('dawu2',[player]);
|
||||||
|
});
|
||||||
|
player.addTempSkill('dawu3',{player:'phaseBeginStart'})
|
||||||
player.chooseCardButton('选择弃置'+get.cnNumber(length)+'张“星”',length,player.getExpansions('qixing'),true);
|
player.chooseCardButton('选择弃置'+get.cnNumber(length)+'张“星”',length,player.getExpansions('qixing'),true);
|
||||||
player.addSkill('dawu3');
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
event.finish();
|
event.finish();
|
||||||
|
@ -5445,46 +5447,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ai:{combo:'qixing'},
|
ai:{combo:'qixing'},
|
||||||
},
|
},
|
||||||
dawu2:{
|
dawu2:{
|
||||||
trigger:{player:'damageBegin4'},
|
|
||||||
filter:function(event){
|
|
||||||
if(!event.hasNature('thunder')) return true;
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
mark:true,
|
|
||||||
forced:true,
|
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
content:function(){
|
|
||||||
trigger.cancel();
|
|
||||||
},
|
|
||||||
ai:{
|
ai:{
|
||||||
nofire:true,
|
nofire:true,
|
||||||
nodamage:true,
|
nodamage:true,
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'damage')&&!get.tag(card,'thunderDamage')) return [0,0];
|
if(get.tag(card,'damage')&&!get.tag(card,'thunderDamage')) return 'zeroplayertarget';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
intro:{
|
intro:{
|
||||||
markcount:()=>1,
|
content:function(storage){
|
||||||
content:'共有1个标记',
|
return `共有${storage.length}枚标记`;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dawu3:{
|
dawu3:{
|
||||||
trigger:{player:['phaseBegin','dieBegin']},
|
trigger:{global:'damageBegin4'},
|
||||||
silent:true,
|
filter:function(event,player){
|
||||||
|
return !event.hasNature('thunder')&&event.player.getStorage('dawu2').includes(player);
|
||||||
|
},
|
||||||
|
forced:true,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
|
logTarget:'player',
|
||||||
content:function(){
|
content:function(){
|
||||||
for(var i=0;i<game.players.length;i++){
|
trigger.cancel();
|
||||||
if(game.players[i].hasSkill('dawu2')){
|
},
|
||||||
game.players[i].removeSkill('dawu2');
|
onremove:function(player){
|
||||||
}
|
game.countPlayer2(current=>{
|
||||||
if(game.players[i].hasSkill('kuangfeng2')){
|
if(current.getStorage('dawu2').includes(player)){
|
||||||
game.players[i].removeSkill('kuangfeng2');
|
current.unmarkAuto('dawu2',player);
|
||||||
}
|
current.removeAdditionalSkill(`dawu_${player.playerid}`);
|
||||||
}
|
|
||||||
player.removeSkill('dawu3');
|
|
||||||
}
|
}
|
||||||
|
},true);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
kuangfeng:{
|
kuangfeng:{
|
||||||
unique:true,
|
unique:true,
|
||||||
|
@ -5501,13 +5498,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
"step 1"
|
"step 1"
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
var length=result.targets.length;
|
var targets=result.targets.sortBySeat();
|
||||||
for(var i=0;i<length;i++){
|
player.logSkill('kuangfeng',targets,'fire');
|
||||||
result.targets[i].addSkill('kuangfeng2');
|
var length=targets.length;
|
||||||
}
|
targets.forEach(target=>{
|
||||||
player.logSkill('kuangfeng',result.targets,'fire');
|
target.addAdditionalSkill(`kuangfeng_${player.playerid}`,'kuangfeng2');
|
||||||
player.chooseCardButton('弃置'+get.cnNumber(length)+'枚星',length,player.getExpansions('qixing'),true);
|
target.markAuto('kuangfeng2',[player]);
|
||||||
player.addSkill('dawu3');
|
});
|
||||||
|
player.addTempSkill('kuangfeng3',{player:'phaseBeginStart'})
|
||||||
|
player.chooseCardButton('选择弃置'+get.cnNumber(length)+'张“星”',length,player.getExpansions('qixing'),true);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
event.finish();
|
event.finish();
|
||||||
|
@ -5518,28 +5517,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ai:{combo:'qixing'},
|
ai:{combo:'qixing'},
|
||||||
},
|
},
|
||||||
kuangfeng2:{
|
kuangfeng2:{
|
||||||
trigger:{player:'damageBegin3'},
|
charlotte:true,
|
||||||
filter:function(event){
|
|
||||||
if(event.hasNature('fire')) return true;
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
mark:true,
|
|
||||||
intro:{
|
intro:{
|
||||||
markcount:()=>1,
|
content:function(storage){
|
||||||
content:'共有1个标记'
|
return `共有${storage.length}枚标记`;
|
||||||
},
|
},
|
||||||
forced:true,
|
|
||||||
content:function(){
|
|
||||||
trigger.num++;
|
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'fireDamage')) return 1.5;
|
if(get.tag(card,'fireDamage')&¤t<0) return 1.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
kuangfeng3:{
|
||||||
|
trigger:{global:'damageBegin3'},
|
||||||
|
filter:function(event){
|
||||||
|
return event.hasNature('fire')&&event.player.getStorage('kuangfeng2').includes(player);
|
||||||
|
},
|
||||||
|
charlotte:true,
|
||||||
|
forced:true,
|
||||||
|
logTarget:'player',
|
||||||
|
content:function(){
|
||||||
|
trigger.num++;
|
||||||
|
},
|
||||||
|
onremove:function(player){
|
||||||
|
game.countPlayer2(current=>{
|
||||||
|
if(current.getStorage('kuangfeng2').includes(player)){
|
||||||
|
current.unmarkAuto('kuangfeng2',player);
|
||||||
|
current.removeAdditionalSkill(`kuangfeng_${player.playerid}`);
|
||||||
|
}
|
||||||
|
},true);
|
||||||
|
},
|
||||||
|
},
|
||||||
yeyan:{
|
yeyan:{
|
||||||
unique:true,
|
unique:true,
|
||||||
forceDie:true,
|
forceDie:true,
|
||||||
|
@ -5571,9 +5582,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
multitarget:true,
|
multitarget:true,
|
||||||
multiline:true,
|
multiline:true,
|
||||||
|
contentBefore:function(){
|
||||||
|
player.awakenSkill('yeyan');
|
||||||
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
"step 0"
|
"step 0"
|
||||||
player.awakenSkill('yeyan');
|
|
||||||
event.num=0;
|
event.num=0;
|
||||||
targets.sortBySeat();
|
targets.sortBySeat();
|
||||||
"step 1"
|
"step 1"
|
||||||
|
|
|
@ -3397,7 +3397,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
target:function(player,target){
|
target:function(player,target){
|
||||||
var val=0;
|
var val=0;
|
||||||
var bool1=!game.hasPlayer(current=>current.maxHp<target.maxHp),bool2=target.isMinHp(),bool3=target.isMinHandcard();
|
var bool1=!game.hasPlayer(current=>current.maxHp<target.maxHp),bool2=target.isMinHp(),bool3=target.isMinHandcard();
|
||||||
if(bool1) val+=5;
|
if(bool1) val+=6.5;
|
||||||
if(bool2){
|
if(bool2){
|
||||||
if(bool1) target.maxHp++;
|
if(bool1) target.maxHp++;
|
||||||
val+=Math.max(0,get.recoverEffect(target,player,player));
|
val+=Math.max(0,get.recoverEffect(target,player,player));
|
||||||
|
@ -3872,7 +3872,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
dcqizi:{
|
dcqizi:{
|
||||||
mod:{
|
mod:{
|
||||||
playerEnabled:function(card,player,target){
|
cardSavable:function(card,player,target){
|
||||||
if(get.distance(player,target)>2&&card.name=='tao'&&target==_status.event.dying) return false;
|
if(get.distance(player,target)>2&&card.name=='tao'&&target==_status.event.dying) return false;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -4997,10 +4997,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
prompt2:'检索一张【无中生有】并置于牌堆顶',
|
prompt2:'检索一张【无中生有】并置于牌堆顶',
|
||||||
check:function(event,player){
|
|
||||||
if(!_status.currentPhase) return false;
|
|
||||||
return get.attitude(player,_status.currentPhase.next)>0;
|
|
||||||
},
|
|
||||||
content:function(){
|
content:function(){
|
||||||
var card=get.cardPile(function(card){
|
var card=get.cardPile(function(card){
|
||||||
return card.name=='wuzhong'&&get.suit(card)!='diamond';
|
return card.name=='wuzhong'&&get.suit(card)!='diamond';
|
||||||
|
@ -5048,7 +5044,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(evtx3.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
|
if(evtx3.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return false;
|
//return false;
|
||||||
}
|
}
|
||||||
else if(event.name=='lose'){
|
else if(event.name=='lose'){
|
||||||
if(event.player!=current||event.position!=ui.discardPile) return false;
|
if(event.player!=current||event.position!=ui.discardPile) return false;
|
||||||
|
@ -5272,7 +5268,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(target.group!=current.group) return false;
|
if(target.group!=current.group) return false;
|
||||||
if(!ui.selected.targets.length) return true;
|
if(!ui.selected.targets.length) return true;
|
||||||
return ui.selected.targets[0]==current;
|
return ui.selected.targets[0]==current;
|
||||||
return current==target;
|
//return current==target;
|
||||||
}).set('ai',function(target){
|
}).set('ai',function(target){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
return get.effect(target,{name:'sha'},player,player);
|
return get.effect(target,{name:'sha'},player,player);
|
||||||
|
@ -6402,6 +6398,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.directHit.push(trigger.target);
|
trigger.directHit.push(trigger.target);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
effect:{
|
||||||
|
player:function(card,player,target){
|
||||||
|
if(player!==target&&get.itemtype(target)==='player'&&(card.name==='sha'||get.type(card,false)==='trick')&&
|
||||||
|
target.countCards('he')&&!target.hasSkillTag('noh')) return [1,0,1,-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -7631,9 +7635,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
list.push(suit);
|
list.push(suit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(list.length){
|
if(list.length) player.chooseControl(list,'cancel2').set('dialog',dialog).set('list',list).set('map',map).set('ai',function(){
|
||||||
player.chooseControl(list,'cancel2').set('dialog',dialog);
|
let max=0,res='cancel2';
|
||||||
|
for(let s of _status.event.list){
|
||||||
|
let temp=0;
|
||||||
|
for(let i of _status.event.map[s]){
|
||||||
|
temp+=get.value(i,_status.event.player)+get.sgn(get.attitude(_status.event.player,get.owner(i)))*(6-get.value(i,get.owner(i)));
|
||||||
}
|
}
|
||||||
|
for(let i in _status.event.map){
|
||||||
|
if(i===s) continue;
|
||||||
|
for(let j of _status.event.map[i]){
|
||||||
|
temp-=get.sgn(get.attitude(_status.event.player,get.owner(j)))*get.value(j,get.owner(j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(temp>max){
|
||||||
|
res=s;
|
||||||
|
max=temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
});
|
||||||
else event.finish();
|
else event.finish();
|
||||||
'step 3'
|
'step 3'
|
||||||
if(result.control!='cancel2'){
|
if(result.control!='cancel2'){
|
||||||
|
@ -8390,6 +8411,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
subSkill:{
|
subSkill:{
|
||||||
effect:{
|
effect:{
|
||||||
audio:'kuanshi',
|
audio:'kuanshi',
|
||||||
|
mark:true,
|
||||||
|
intro:{
|
||||||
|
content:'每回合限一次,当$于一回合内受到第2点伤害后,其回复1点体力。'
|
||||||
|
},
|
||||||
trigger:{global:'damageEnd'},
|
trigger:{global:'damageEnd'},
|
||||||
forced:true,
|
forced:true,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
|
@ -9359,6 +9384,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
dcdanying:{
|
dcdanying:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num<=0 || card.name!=='sha'&&card.name!=='shan' || !player.hasCard(i=>i.hasGaintag('dcmiyun_tag'),'h')) return;
|
||||||
|
return Math.max(0.12,num/25);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
enable:['chooseToUse','chooseToRespond'],
|
enable:['chooseToUse','chooseToRespond'],
|
||||||
usable:1,
|
usable:1,
|
||||||
hiddenCard:function(player,name){
|
hiddenCard:function(player,name){
|
||||||
|
@ -9435,11 +9467,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
target:function(card,player,target){
|
target:function(card,player,target){
|
||||||
if(_status._dcdanying_aiChecking) return;
|
if(_status._dcdanying_aiChecking) return;
|
||||||
_status._dcdanying_aiChecking=true;
|
_status._dcdanying_aiChecking=true;
|
||||||
var eff=get.effect(target,{name:'guohe_copy2'},player,player);
|
let eff=get.effect(target,{name:'guohe_copy2'},player,player);
|
||||||
delete _status._dcdanying_aiChecking;
|
delete _status._dcdanying_aiChecking;
|
||||||
if(eff>0) eff=-1;
|
return [1,get.sgn(eff)];
|
||||||
else eff=1;
|
|
||||||
return [1,eff];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10068,6 +10098,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sp_jiaxu:['sp_jiaxu','dc_sp_jiaxu','yj_jiaxu'],
|
sp_jiaxu:['sp_jiaxu','dc_sp_jiaxu','yj_jiaxu'],
|
||||||
qiaorui:['qiaorui','tw_qiaorui'],
|
qiaorui:['qiaorui','tw_qiaorui'],
|
||||||
mamidi:['mamidi','xin_mamidi'],
|
mamidi:['mamidi','xin_mamidi'],
|
||||||
|
mengyou:['mengyou','ns_mengyou'],
|
||||||
},
|
},
|
||||||
translate:{
|
translate:{
|
||||||
re_panfeng:'潘凤',
|
re_panfeng:'潘凤',
|
||||||
|
|
|
@ -201,7 +201,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
chiying:{
|
chiying:{
|
||||||
trigger:{global:'damageBegin'},
|
trigger:{global:'damageBegin2'},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
return get.attitude(player,event.player)>0;
|
return get.attitude(player,event.player)>0;
|
||||||
},
|
},
|
||||||
|
@ -209,7 +209,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(event.num<=1) return false;
|
if(event.num<=1) return false;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
priority:-11,
|
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.num=1;
|
trigger.num=1;
|
||||||
if(trigger.source){
|
if(trigger.source){
|
||||||
|
|
|
@ -227,7 +227,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
target.isOnline()){
|
target.isOnline()){
|
||||||
player.storage.jsrgbashiing=true;
|
player.storage.jsrgbashiing=true;
|
||||||
var list=['sha','shan'].filter(name=>trigger.filterCard({name:name},player,trigger));
|
var list=['sha','shan'].filter(name=>trigger.filterCard({name:name},player,trigger));
|
||||||
var names=list.map(i=>'【'+i+'】').join('或');
|
var names=list.map(i=>'【'+get.translation(i)+'】').join('或');
|
||||||
var next=target.chooseToRespond('是否替'+get.translation(player)+'打出一张'+names+'?',{name:list});
|
var next=target.chooseToRespond('是否替'+get.translation(player)+'打出一张'+names+'?',{name:list});
|
||||||
next.set('ai',function(){
|
next.set('ai',function(){
|
||||||
var event=_status.event;
|
var event=_status.event;
|
||||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
connect:true,
|
connect:true,
|
||||||
characterSort:{
|
characterSort:{
|
||||||
mobile:{
|
mobile:{
|
||||||
mobile_default:['xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
|
mobile_default:['xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
|
||||||
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan','yj_zhoubuyi'],
|
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan','yj_zhoubuyi'],
|
||||||
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
|
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
|
||||||
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
|
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
|
||||||
|
@ -26,6 +26,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
character:{
|
character:{
|
||||||
|
xin_wuban:['male','shu',4,['xinjintao'],['clan:陈留吴氏','character:wuban']],
|
||||||
|
baoxin:['male','qun',4,['mutao','yimou'],['character:tw_baoxin','die_audio:tw_baoxin']],
|
||||||
|
jiangji:['male','wei',3,['twjichou','jilun'],['character:tw_jiangji','die_audio:tw_jiangji']],
|
||||||
|
liwei:['male','shu',4,['jiaohua'],['character:tw_liwei','die:tw_liwei']],
|
||||||
|
laimin:['male','shu',3,['laishou','luanqun']],
|
||||||
yj_zhoubuyi:['male','wei',3,['mbhuiyao','mbquesong']],
|
yj_zhoubuyi:['male','wei',3,['mbhuiyao','mbquesong']],
|
||||||
xin_guozhao:['female','wei',3,['yichong','wufei']],
|
xin_guozhao:['female','wei',3,['yichong','wufei']],
|
||||||
xin_zhangyi:['male','shu',4,['xinwurong','shizhi']],
|
xin_zhangyi:['male','shu',4,['xinwurong','shizhi']],
|
||||||
|
@ -166,6 +171,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
scs_gaowang:['male','qun','',['scsmiaoyu'],['unseen','sex:male_castrated']],
|
scs_gaowang:['male','qun','',['scsmiaoyu'],['unseen','sex:male_castrated']],
|
||||||
},
|
},
|
||||||
characterIntro:{
|
characterIntro:{
|
||||||
|
laimin:'来敏(165年—261年),字敬达,义阳新野人,东汉太中大夫来歙之后,司空来艳之子,三国时期蜀汉官员。东汉末年,逢董卓之乱,来敏跟随姐夫黄琬到荆州避难,黄琬是刘璋祖母的侄子,来敏又与姐姐来氏入蜀,被刘璋引为宾客。来敏喜欢读书,尤其喜欢《左氏春秋》。刘备平定益州后,以来敏为典学校尉,后立太子,来敏为家令。刘禅继位后,任命来敏为虎贲中郎将,诸葛亮驻汉中,请来敏为军祭酒、辅军将军。却因其口出狂言而被罢官,诸葛亮死后,来敏历任大长秋、光禄大夫、执慎将军等职,期间多次因说错话而被免官,蜀汉景耀年间,来敏去世,时年九十七岁。',
|
||||||
shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。',
|
shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。',
|
||||||
sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。',
|
sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。',
|
||||||
bilan:'毕岚(?—189),东汉宦官,十常侍之一。十常侍朋比为奸,祸乱朝纲,制造出党锢之祸,后被袁绍诛杀。另外,毕岚曾制造翻车,用于取河水洒路。',
|
bilan:'毕岚(?—189),东汉宦官,十常侍之一。十常侍朋比为奸,祸乱朝纲,制造出党锢之祸,后被袁绍诛杀。另外,毕岚曾制造翻车,用于取河水洒路。',
|
||||||
|
@ -380,6 +386,422 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
|
//庞统
|
||||||
|
xinlianhuan:{
|
||||||
|
audio:2,
|
||||||
|
audioname:['ol_pangtong'],
|
||||||
|
inherit:'lianhuan',
|
||||||
|
group:'xinlianhuan_add',
|
||||||
|
subSkill:{
|
||||||
|
add:{
|
||||||
|
audio:'xinlianhuan',
|
||||||
|
audioname:['ol_pangtong'],
|
||||||
|
trigger:{player:'useCard2'},
|
||||||
|
filter:function(event,player){
|
||||||
|
if(event.card.name!='tiesuo') return false;
|
||||||
|
var info=get.info(event.card);
|
||||||
|
if(info.allowMultiple==false) return false;
|
||||||
|
if(event.targets&&!info.multitarget){
|
||||||
|
if(game.hasPlayer(current=>{
|
||||||
|
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current);
|
||||||
|
})) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
charlotte:true,
|
||||||
|
forced:true,
|
||||||
|
popup:false,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
player.chooseTarget(get.prompt('xinlianhuan'),'为'+get.translation(trigger.card)+'额外指定一个目标',(card,player,target)=>{
|
||||||
|
return !_status.event.sourcex.contains(target)&&lib.filter.targetEnabled2(_status.event.card,player,target);
|
||||||
|
}).set('sourcex',trigger.targets).set('ai',function(target){
|
||||||
|
var player=_status.event.player;
|
||||||
|
return get.effect(target,_status.event.card,player,player);
|
||||||
|
}).set('card',trigger.card);
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
if(!event.isMine()&&!event.isOnline()) game.delayex();
|
||||||
|
}
|
||||||
|
else event.finish();
|
||||||
|
'step 2'
|
||||||
|
if(result.bool){
|
||||||
|
var targets=result.targets;
|
||||||
|
player.logSkill('xinlianhuan_add',targets);
|
||||||
|
trigger.targets.addArray(targets);
|
||||||
|
game.log(targets,'也成为了',trigger.card,'的目标');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//吴班
|
||||||
|
xinjintao:{
|
||||||
|
audio:'jintao',
|
||||||
|
inherit:'jintao',
|
||||||
|
content:function(){
|
||||||
|
var evt=trigger.getParent('phaseUse');
|
||||||
|
var index=player.getHistory('useCard',function(evtx){
|
||||||
|
return evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt;
|
||||||
|
}).indexOf(trigger);
|
||||||
|
if(index==0){
|
||||||
|
game.log(trigger.card,'不可被响应');
|
||||||
|
trigger.directHit.addArray(game.players);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
game.log(trigger.card,'伤害+1');
|
||||||
|
if(typeof trigger.baseDamage!='number') trigger.baseDamage=1;
|
||||||
|
trigger.baseDamage++;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//鲍信
|
||||||
|
mutao:{
|
||||||
|
audio:'twmutao',
|
||||||
|
inherit:'twmutao',
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
event.togive=target.getNext();
|
||||||
|
var cards=target.getCards('h',{name:'sha'});
|
||||||
|
if(!cards.length){
|
||||||
|
game.log('但',target,'没有','#y杀','!');
|
||||||
|
event.finish();
|
||||||
|
}
|
||||||
|
else target.addToExpansion(cards,target,'give').gaintag.add('mutao');
|
||||||
|
'step 1'
|
||||||
|
var card=target.getExpansions('mutao').randomGet();
|
||||||
|
target.give(card,event.togive);
|
||||||
|
'step 2'
|
||||||
|
if(target.getExpansions('mutao').length){
|
||||||
|
event.togive=event.togive.getNext();
|
||||||
|
event.goto(1);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
target.line(event.togive);
|
||||||
|
event.togive.damage(Math.min(3,event.togive.countCards('h',{name:'sha'})),target);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
intro:{
|
||||||
|
content:'expansion',
|
||||||
|
markcount:'expansion',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yimou:{
|
||||||
|
audio:'twyimou',
|
||||||
|
inherit:'twyimou',
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
if(trigger.player!=player) player.addExpose(0.3);
|
||||||
|
var target=get.translation(trigger.player);
|
||||||
|
var choiceList=[
|
||||||
|
'令'+target+'获得牌堆里的一张【杀】',
|
||||||
|
'令'+target+'将一张牌交给另一名角色,然后'+target+'摸一张牌',
|
||||||
|
];
|
||||||
|
var list=['选项一'];
|
||||||
|
if(trigger.player.countCards('h')) list.push('选项二');
|
||||||
|
else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
|
||||||
|
player.chooseControl(list).set('prompt','毅谋:请选择一项').set('choiceList',choiceList).set('ai',function(){
|
||||||
|
var evt=_status.event.getTrigger(),list=_status.event.list;
|
||||||
|
var player=_status.event.player;
|
||||||
|
var target=evt.player;
|
||||||
|
if(target.countCards('h')&&list.contains('选项二')) return '选项二';
|
||||||
|
return '选项一';
|
||||||
|
}).set('list',list);
|
||||||
|
'step 1'
|
||||||
|
event.choice=result.control;
|
||||||
|
'step 2'
|
||||||
|
if(event.choice!='选项二'){
|
||||||
|
var card=get.cardPile2(function(card){
|
||||||
|
return card.name=='sha';
|
||||||
|
});
|
||||||
|
if(card) trigger.player.gain(card,'gain2');
|
||||||
|
else game.log('但牌堆里已经没有','#y杀','了!');
|
||||||
|
if(event.choice=='选项一') event.finish();
|
||||||
|
}
|
||||||
|
'step 3'
|
||||||
|
if(event.choice!='选项一'){
|
||||||
|
if(trigger.player.countCards('h')) trigger.player.chooseCardTarget({
|
||||||
|
prompt:'毅谋:将一张手牌交给另一名其他角色',
|
||||||
|
filterCard:true,
|
||||||
|
forced:true,
|
||||||
|
filterTarget:lib.filter.notMe,
|
||||||
|
ai1:function(card){
|
||||||
|
return 1/Math.max(0.1,get.value(card));
|
||||||
|
},
|
||||||
|
ai2:function(target){
|
||||||
|
var player=_status.event.player,att=get.attitude(player,target);
|
||||||
|
if(target.hasSkillTag('nogain')) att/=9;
|
||||||
|
return 4+att;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
else event.finish();
|
||||||
|
}
|
||||||
|
'step 4'
|
||||||
|
var target=result.targets[0];
|
||||||
|
trigger.player.line(target);
|
||||||
|
trigger.player.give(result.cards,target);
|
||||||
|
trigger.player.draw();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//蒋济
|
||||||
|
jilun:{
|
||||||
|
audio:'twjilun',
|
||||||
|
inherit:'twjilun',
|
||||||
|
filter:function(event,player){
|
||||||
|
return player.hasSkill('twjichou');
|
||||||
|
},
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
var num=Math.min(Math.max(1,player.getStorage('twjichou').length),5);
|
||||||
|
event.num=num;
|
||||||
|
var choices=['选项一'];
|
||||||
|
var choiceList=[
|
||||||
|
'摸'+get.cnNumber(num)+'张牌',
|
||||||
|
'获得一个“机论”标记',
|
||||||
|
];
|
||||||
|
if(!player.getStorage('twjichou').length||!player.getStorage('twjichou').filter(function(name){
|
||||||
|
return !player.getStorage('jilun').contains(name)&&player.hasUseTarget({name:name});
|
||||||
|
}).length) choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
|
||||||
|
else choices.push('选项二');
|
||||||
|
player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('jilun')).set('ai',()=>{
|
||||||
|
if(_status.event.choiceList.length==1||!player.getStorage('twjichou').length) return 0;
|
||||||
|
var val=_status.event.num>3?Math.min(1.5,1+(_status.event.num-3)*0.1):1;
|
||||||
|
for(var name of player.getStorage('twjichou')){
|
||||||
|
if(player.getStorage('jilun').contains(name)) continue;
|
||||||
|
if(player.getUseValue({name:name})>4*val) return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}).set('num',num);
|
||||||
|
'step 1'
|
||||||
|
if(result.control!='cancel2'){
|
||||||
|
player.logSkill('jilun');
|
||||||
|
if(result.control=='选项一') player.draw(num);
|
||||||
|
else player.addMark('jilun_mark',1);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
group:'jilun_effect',
|
||||||
|
subSkill:{
|
||||||
|
mark:{
|
||||||
|
intro:{content:'mark'},
|
||||||
|
},
|
||||||
|
effect:{
|
||||||
|
audio:'twjilun',
|
||||||
|
trigger:{global:'phaseJieshuBegin'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return player.hasMark('jilun_mark');
|
||||||
|
},
|
||||||
|
forced:true,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
if(!player.getStorage('twjichou').length||!player.getStorage('twjichou').filter(function(name){
|
||||||
|
return !player.getStorage('jilun').contains(name)&&player.hasUseTarget({name:name});
|
||||||
|
}).length){
|
||||||
|
if(player.hasMark('jilun_mark')) player.removeMark('jilun_mark',player.countMark('jilun_mark'));
|
||||||
|
event.finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var list=[];
|
||||||
|
for(var name of player.getStorage('twjichou')){
|
||||||
|
if(!player.getStorage('jilun').contains(name)){
|
||||||
|
list.push(['锦囊','',name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
player.chooseButton(['###机论:请选择你要执行的选项###<div class="text center"><li>失去1枚“机论”标记,视为使用一张〖急筹〗已记录但〖机论〗未记录的普通锦囊牌<br><li>失去所有“机论”标记</div>',[list,'vcard']]).set('filterButton',function(button){
|
||||||
|
return _status.event.player.hasUseTarget({name:button.link[2]});
|
||||||
|
}).set('ai',function(button){
|
||||||
|
return _status.event.getParent().player.getUseValue({name:button.link[2]},null,true);
|
||||||
|
});
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
player.removeMark('jilun_mark',1);
|
||||||
|
var card={name:result.links[0][2],isCard:true};
|
||||||
|
player.chooseUseTarget(card,true);
|
||||||
|
player.markAuto('jilun',[card.name]);
|
||||||
|
player.syncStorage('jilun');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
player.removeMark('jilun_mark',player.countMark('jilun_mark'));
|
||||||
|
event.finish();
|
||||||
|
}
|
||||||
|
'step 2'
|
||||||
|
if(player.hasMark('jilun_mark')) event.goto(0);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//李遗
|
||||||
|
jiaohua:{
|
||||||
|
onremove:true,
|
||||||
|
audio:'twjiaohua',
|
||||||
|
enable:'phaseUse',
|
||||||
|
usable:3,
|
||||||
|
chooseButton:{
|
||||||
|
dialog:function(event,player){
|
||||||
|
return ui.create.dialog('###教化###选择一种牌的类型,令一名角色从牌堆获得此类型的一张牌');
|
||||||
|
},
|
||||||
|
chooseControl:function(event,player){
|
||||||
|
var list=['basic','trick','equip'].filter(type=>!player.getStorage('jiaohua').contains(type));
|
||||||
|
list.push('cancel2');
|
||||||
|
return list;
|
||||||
|
},
|
||||||
|
check:function(event,player){
|
||||||
|
var list=['trick','equip','basic'].filter(type=>!player.getStorage('jiaohua').contains(type));
|
||||||
|
return list[0];
|
||||||
|
},
|
||||||
|
backup:function(result,player){
|
||||||
|
return{
|
||||||
|
type:result.control,
|
||||||
|
audio:'twjiaohua',
|
||||||
|
filterTarget:true,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
var type=lib.skill.jiaohua_backup.type;
|
||||||
|
var card=get.cardPile2(card=>get.type2(card)==type);
|
||||||
|
if(card) target.gain(card,'gain2');
|
||||||
|
else game.log('但牌堆里已经没有','#y'+get.translation(type)+'牌','了!');
|
||||||
|
'step 1'
|
||||||
|
player.markAuto('jiaohua',[lib.skill.jiaohua_backup.type]);
|
||||||
|
'step 2'
|
||||||
|
if(!['basic','trick','equip'].some(type=>!player.getStorage('jiaohua').contains(type))){
|
||||||
|
player.popup('教化');
|
||||||
|
player.unmarkAuto('jiaohua',player.getStorage('jiaohua'));
|
||||||
|
game.log(player,'清空了','#g【教化】','记录');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
result:{target:1},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
prompt:function(result,player){
|
||||||
|
return '令一名角色从牌堆中获得一张'+get.translation(result.control)+'牌';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
order:7,
|
||||||
|
result:{player:1},
|
||||||
|
},
|
||||||
|
intro:{content:'已记录$牌'},
|
||||||
|
},
|
||||||
|
//来敏
|
||||||
|
laishou:{
|
||||||
|
audio:3,
|
||||||
|
trigger:{player:['damageBegin4','phaseZhunbeiBegin']},
|
||||||
|
filter:function(event,player){
|
||||||
|
var num=9;
|
||||||
|
if(event.name=='damage') return event.num>=player.getHp()&&player.maxHp<num;
|
||||||
|
return player.maxHp>=num;
|
||||||
|
},
|
||||||
|
forced:true,
|
||||||
|
content:function(){
|
||||||
|
if(trigger.name=='damage'){
|
||||||
|
player.gainMaxHp(trigger.num);
|
||||||
|
trigger.cancel();
|
||||||
|
}
|
||||||
|
else player.die();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
luanqun:{
|
||||||
|
audio:2,
|
||||||
|
enable:'phaseUse',
|
||||||
|
filter:function(event,player){
|
||||||
|
return player.countCards('h');
|
||||||
|
},
|
||||||
|
usable:1,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
var targets=game.filterPlayer(current=>current.countCards('h')).sortBySeat();
|
||||||
|
event.targets=targets;
|
||||||
|
var next=player.chooseCardOL(targets,'乱群:请选择要展示的牌',true).set('ai',function(card){
|
||||||
|
return -get.value(card);
|
||||||
|
}).set('source',player);
|
||||||
|
next.aiCard=function(target){
|
||||||
|
var hs=target.getCards('h');
|
||||||
|
return {bool:true,cards:[hs.randomGet()]};
|
||||||
|
};
|
||||||
|
next._args.remove('glow_result');
|
||||||
|
'step 1'
|
||||||
|
var cards=[];
|
||||||
|
event.videoId=lib.status.videoId++;
|
||||||
|
for(var i=0;i<targets.length;i++) cards.push(result[i].cards[0]);
|
||||||
|
event.cards=cards;
|
||||||
|
game.log(player,'展示了',targets,'的',cards);
|
||||||
|
game.broadcastAll(function(targets,cards,id,player){
|
||||||
|
var dialog=ui.create.dialog(get.translation(player)+'发动了【乱群】',cards);
|
||||||
|
dialog.videoId=id;
|
||||||
|
var getName=function(target){
|
||||||
|
if(target._tempTranslate) return target._tempTranslate;
|
||||||
|
var name=target.name;
|
||||||
|
if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
|
||||||
|
return get.translation(name);
|
||||||
|
}
|
||||||
|
for(var i=0;i<targets.length;i++){
|
||||||
|
dialog.buttons[i].querySelector('.info').innerHTML=getName(targets[i])+get.translation(cards[i].suit);
|
||||||
|
}
|
||||||
|
},targets,cards,event.videoId,player);
|
||||||
|
game.delay(4);
|
||||||
|
'step 2'
|
||||||
|
game.broadcastAll('closeDialog',event.videoId);
|
||||||
|
var card=cards[targets.indexOf(player)];
|
||||||
|
var cardx=cards.filter(cardy=>cardy!=card&&get.color(cardy,targets[cards.indexOf(cardy)])==get.color(card,player));
|
||||||
|
if(cardx.length){
|
||||||
|
player.chooseButton(['乱群:是否获得其中的一张牌',cardx]).set('forceAuto',true).set('ai',function(button){
|
||||||
|
var cards=_status.event.list[0];
|
||||||
|
var targets=_status.event.list[1];
|
||||||
|
var player=_status.event.player;
|
||||||
|
if(get.attitude(player,targets[cards.indexOf(button.link)])) return 0;
|
||||||
|
return get.value(button.link,player);
|
||||||
|
}).set('list',[cards,targets]);
|
||||||
|
}
|
||||||
|
else event.goto(4);
|
||||||
|
'step 3'
|
||||||
|
if(result.bool){
|
||||||
|
var card=result.links[0];
|
||||||
|
player.gain(card,get.owner(card),'give');
|
||||||
|
}
|
||||||
|
'step 4'
|
||||||
|
var card=cards[targets.indexOf(player)];
|
||||||
|
targets=targets.filter(target=>get.color(cards[targets.indexOf(target)],target)!=get.color(card,player));
|
||||||
|
if(targets.length){
|
||||||
|
player.line(targets);
|
||||||
|
targets.forEach(target=>{
|
||||||
|
target.addTempSkill('luanqun_effect',{player:'phaseUseAfter'});
|
||||||
|
target.markAuto('luanqun_effect',[player]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
order:9,
|
||||||
|
result:{
|
||||||
|
player:function(player,target){
|
||||||
|
if(player.hasSkill('laishou')) return 1;
|
||||||
|
return player.hp>=2?1:0;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
subSkill:{
|
||||||
|
effect:{
|
||||||
|
charlotte:true,
|
||||||
|
onremove:true,
|
||||||
|
intro:{content:'出牌阶段第一张【杀】只能指定$为目标,且此牌不可被响应'},
|
||||||
|
mod:{
|
||||||
|
playerEnabled:function(card,player,target){
|
||||||
|
if(!player.isPhaseUsing()) return;
|
||||||
|
if(card.name=='sha'&&player.getStorage('luanqun_effect').contains(target)) return false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
trigger:{player:'useCard1'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return player.isPhaseUsing()&&event.card.name=='sha';
|
||||||
|
},
|
||||||
|
forced:true,
|
||||||
|
content:function(){
|
||||||
|
trigger.directHit.addArray(player.getStorage('luanqun_effect'));
|
||||||
|
player.removeSkill('luanqun_effect');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
//☆周不疑
|
//☆周不疑
|
||||||
mbhuiyao:{
|
mbhuiyao:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -497,6 +919,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
lib.translate['yichong_'+player.playerid+'_bg']='雀';
|
lib.translate['yichong_'+player.playerid+'_bg']='雀';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
getLimit:1,
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{player:'phaseZhunbeiBegin'},
|
trigger:{player:'phaseZhunbeiBegin'},
|
||||||
direct:true,
|
direct:true,
|
||||||
|
@ -541,7 +964,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.markSkill('yichong');
|
player.markSkill('yichong');
|
||||||
game.broadcastAll(function(player,suit){
|
game.broadcastAll(function(player,suit){
|
||||||
if(player.marks.yichong) player.marks.yichong.firstChild.innerHTML=get.translation(suit);
|
if(player.marks.yichong) player.marks.yichong.firstChild.innerHTML=get.translation(suit);
|
||||||
},player,suit)
|
},player,suit);
|
||||||
if(target.countCards('he',{suit:suit})) player.gain(target.getCards('he',{suit:suit}),target,'giveAuto');
|
if(target.countCards('he',{suit:suit})) player.gain(target.getCards('he',{suit:suit}),target,'giveAuto');
|
||||||
game.countPlayer(function(current){
|
game.countPlayer(function(current){
|
||||||
current.removeSkill('yichong_'+player.playerid);
|
current.removeSkill('yichong_'+player.playerid);
|
||||||
|
@ -560,7 +983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(!player.storage.yichong) return false;
|
if(!player.storage.yichong) return false;
|
||||||
return game.hasPlayer(function(current){
|
return game.hasPlayer(function(current){
|
||||||
if(!event.getg(current).length||!current.hasSkill('yichong_'+player.playerid)) return false;
|
if(!event.getg(current).length||!current.hasSkill('yichong_'+player.playerid)) return false;
|
||||||
if(current.countMark('yichong_'+player.playerid)>=5) return false;
|
if(current.countMark('yichong_'+player.playerid)>=lib.skill.yichong.getLimit) return false;
|
||||||
return event.getg(current).some(card=>get.suit(card,current)==player.storage.yichong&&lib.filter.canBeGained(card,current,player));
|
return event.getg(current).some(card=>get.suit(card,current)==player.storage.yichong&&lib.filter.canBeGained(card,current,player));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -569,14 +992,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
'step 0'
|
'step 0'
|
||||||
var target=game.findPlayer(function(current){
|
var target=game.findPlayer(function(current){
|
||||||
if(!trigger.getg(current).length||!current.hasSkill('yichong_'+player.playerid)) return false;
|
if(!trigger.getg(current).length||!current.hasSkill('yichong_'+player.playerid)) return false;
|
||||||
if(current.countMark('yichong_'+player.playerid)>=5) return false;
|
if(current.countMark('yichong_'+player.playerid)>=lib.skill.yichong.getLimit) return false;
|
||||||
return trigger.getg(current).some(card=>get.suit(card,current)==player.storage.yichong&&lib.filter.canBeGained(card,current,player));
|
return trigger.getg(current).some(card=>get.suit(card,current)==player.storage.yichong&&lib.filter.canBeGained(card,current,player));
|
||||||
});
|
});
|
||||||
event.target=target;
|
event.target=target;
|
||||||
var cards=trigger.getg(target).filter(card=>get.suit(card,target)==player.storage.yichong&&lib.filter.canBeGained(card,target,player));
|
var cards=trigger.getg(target).filter(card=>get.suit(card,target)==player.storage.yichong&&lib.filter.canBeGained(card,target,player));
|
||||||
if(cards.length<=5-target.countMark('yichong_'+player.playerid)) event._result={bool:true,links:cards};
|
if(cards.length<=lib.skill.yichong.getLimit-target.countMark('yichong_'+player.playerid)) event._result={bool:true,links:cards};
|
||||||
else{
|
else{
|
||||||
var num=(5-target.countMark('yichong_'+player.playerid));
|
var num=(lib.skill.yichong.getLimit-target.countMark('yichong_'+player.playerid));
|
||||||
player.chooseButton(['易宠:获得其中的'+get.cnNumber(num)+'张牌',cards],num,true).set('ai',function(button){
|
player.chooseButton(['易宠:获得其中的'+get.cnNumber(num)+'张牌',cards],num,true).set('ai',function(button){
|
||||||
return get.value(button.link);
|
return get.value(button.link);
|
||||||
});
|
});
|
||||||
|
@ -604,7 +1027,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
var target=game.findPlayer(current=>current.hasSkill('yichong_'+player.playerid));
|
var target=game.findPlayer(current=>current.hasSkill('yichong_'+player.playerid));
|
||||||
if(!target) return false;
|
if(!target) return false;
|
||||||
if(event.name=='damage') return target.hp>Math.max(1,player.hp);
|
if(event.name=='damage') return target.hp>3;
|
||||||
return event.isFirstTarget&&(event.card.name=='sha'||(get.type(event.card)=='trick'&&get.tag(event.card,'damage')));
|
return event.isFirstTarget&&(event.card.name=='sha'||(get.type(event.card)=='trick'&&get.tag(event.card,'damage')));
|
||||||
},
|
},
|
||||||
direct:true,
|
direct:true,
|
||||||
|
@ -613,7 +1036,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var target=game.findPlayer(current=>current.hasSkill('yichong_'+player.playerid));
|
var target=game.findPlayer(current=>current.hasSkill('yichong_'+player.playerid));
|
||||||
event.target=target;
|
event.target=target;
|
||||||
if(trigger.name=='damage'){
|
if(trigger.name=='damage'){
|
||||||
player.chooseBool(get.prompt('wufei',target),'对'+get.translation(target)+'造成1点伤害').set('choice',get.damageEffect(target,player,player)>0);
|
player.chooseBool(get.prompt('wufei',target),'令'+get.translation(target)+'受到1点无来源伤害').set('choice',get.damageEffect(target,player,player)>0);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
player.logSkill('wufei',target);
|
player.logSkill('wufei',target);
|
||||||
|
@ -625,7 +1048,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
player.logSkill('wufei',target);
|
player.logSkill('wufei',target);
|
||||||
target.damage();
|
target.damage('nosource');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -4594,7 +5017,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
viewAsFilter:function(player){
|
viewAsFilter:function(player){
|
||||||
return player.hasCard({type:'equip'},'ehs');
|
return player.hasCard({type:'equip'},'ehs');
|
||||||
},
|
},
|
||||||
check:(card)=>5-get.value(card),
|
check:function(card){
|
||||||
|
if(_status.event.type=='dying') return 1/(get.value(card)||0.5);
|
||||||
|
return 5-get.value(card);
|
||||||
|
},
|
||||||
locked:false,
|
locked:false,
|
||||||
mod:{
|
mod:{
|
||||||
maxHandcard:function(player,num){
|
maxHandcard:function(player,num){
|
||||||
|
@ -9476,10 +9902,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var att=get.attitude(player,target);
|
var att=get.attitude(player,target);
|
||||||
return -att;
|
return -att;
|
||||||
//if(cards.length==1) return -att;
|
//if(cards.length==1) return -att;
|
||||||
if(player==target) att/=2;
|
// if(player==target) att/=2;
|
||||||
if(target.hasSkill('pingkou')) att*=1.4;
|
// if(target.hasSkill('pingkou')) att*=1.4;
|
||||||
att*=(1+target.countCards('j')/2);
|
// att*=(1+target.countCards('j')/2);
|
||||||
return att;
|
// return att;
|
||||||
});
|
});
|
||||||
"step 3"
|
"step 3"
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
|
@ -12164,7 +12590,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player:"linkBefore",
|
player:"linkBefore",
|
||||||
},
|
},
|
||||||
forced:true,
|
forced:true,
|
||||||
priority:20,
|
//priority:20,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return !player.isLinked();
|
return !player.isLinked();
|
||||||
},
|
},
|
||||||
|
@ -13178,7 +13604,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
cancel:{
|
cancel:{
|
||||||
trigger:{player:'phaseUseEnd'},
|
trigger:{player:'phaseUseEnd'},
|
||||||
priority:50,
|
firstDo:true,
|
||||||
silent:true,
|
silent:true,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -14851,9 +15277,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
xin_guozhao:'手杀郭照',
|
xin_guozhao:'手杀郭照',
|
||||||
xin_guozhao_prefix:'手杀',
|
xin_guozhao_prefix:'手杀',
|
||||||
yichong:'易宠',
|
yichong:'易宠',
|
||||||
yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”得到五张牌)。',
|
yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”得到一张牌)。',
|
||||||
wufei:'诬诽',
|
wufei:'诬诽',
|
||||||
wufei_info:'若场上存在拥有“雀”标记的角色A,则:①当你使用【杀】或伤害类锦囊牌指定第一个目标后,你令A成为此牌伤害来源。②当你受到伤害后,若A的体力值大于1且A的体力值大于你,则你可以对A造成1点伤害。',
|
wufei_info:'若场上存在拥有“雀”标记的角色A,则:①当你使用【杀】或伤害类锦囊牌指定第一个目标后,你令A成为此牌伤害来源。②当你受到伤害后,若A的体力值大于3,则你可以令A受到1点无来源伤害。',
|
||||||
yj_zhoubuyi:'☆周不疑',
|
yj_zhoubuyi:'☆周不疑',
|
||||||
yj_zhoubuyi_prefix:'☆',
|
yj_zhoubuyi_prefix:'☆',
|
||||||
mbhuiyao:'慧夭',
|
mbhuiyao:'慧夭',
|
||||||
|
@ -14886,6 +15312,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
re_chenqun_prefix:'手杀界',
|
re_chenqun_prefix:'手杀界',
|
||||||
old_yuanshu:'手杀界袁术',
|
old_yuanshu:'手杀界袁术',
|
||||||
old_yuanshu_prefix:'手杀界',
|
old_yuanshu_prefix:'手杀界',
|
||||||
|
re_liru:'手杀李儒',
|
||||||
|
re_liru_prefix:'手杀',
|
||||||
|
re_chenqun:'手杀陈群',
|
||||||
|
re_chenqun_prefix:'手杀',
|
||||||
|
old_yuanshu:'手杀袁术',
|
||||||
|
old_yuanshu_prefix:'手杀',
|
||||||
|
baoxin:'鲍信',
|
||||||
|
mutao:'募讨',
|
||||||
|
mutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】置于武将牌上,然后将这些牌依次随机交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为3)。',
|
||||||
|
yimou:'毅谋',
|
||||||
|
yimou_info:'当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色,然后摸一张牌。',
|
||||||
|
jiangji:'蒋济',
|
||||||
|
jilun:'机论',
|
||||||
|
jilun_info:'①当你受到伤害后,若你拥有技能〖急筹〗,则你可以一项:1.摸X张牌(X为〖急筹①〗记录数,且X且至少为1,至多为5)。2.获得1枚“机论”标记。②一名角色的结束阶段,若你拥有“机论”,则重复选择执行以下项直到你没有“机论”标记:1.失去1枚“机论”标记,视为使用一张〖急筹①〗记录过且未被〖机论②〗记录过的普通锦囊牌并记录此牌牌名。2.失去所有“机论”标记。',
|
||||||
|
liwei:'李遗',
|
||||||
|
jiaohua:'教化',
|
||||||
|
jiaohua_backup:'教化',
|
||||||
|
jiaohua_info:'出牌阶段限三次,你可以选择一个未被〖教化〗记录过的牌的类型,令一名角色从牌堆中获得一张此类型的牌,然后记录此类型,若基本、锦囊、装备均已被你发动〖教化〗记录,则你清空〖教化〗记录。',
|
||||||
|
laimin:'来敏',
|
||||||
|
laishou:'来寿',
|
||||||
|
laishou_info:'锁定技。①当你受到伤害值大于等于你的体力值的伤害时,若你的体力上限小于9,你防止此伤害并增加等量体力上限。②准备阶段,若你的体力上限不小于9,你死亡。',
|
||||||
|
luanqun:'乱群',
|
||||||
|
luanqun_info:'出牌阶段限一次,若你有手牌,则你可以令所有有手牌的角色同时展示一张手牌,然后你可以获得其中一张与你展示的牌颜色相同的展示牌,所有本次展示牌颜色与你展示的牌颜色不同的角色的下个出牌阶段使用的第一张【杀】只能对你使用,且此【杀】不可被响应。',
|
||||||
|
xin_wuban:'吴班',
|
||||||
|
xinjintao:'进讨',
|
||||||
|
xinjintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】不可被响应,第二张【杀】伤害+1。',
|
||||||
|
xinlianhuan:'连环',
|
||||||
|
xinlianhuan_info:'你可以将一张♣手牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标后,可以给此牌增加一个目标。',
|
||||||
|
|
||||||
mobile_standard:'手杀异构·标准包',
|
mobile_standard:'手杀异构·标准包',
|
||||||
mobile_shenhua_feng:'手杀异构·其疾如风',
|
mobile_shenhua_feng:'手杀异构·其疾如风',
|
||||||
|
|
|
@ -944,6 +944,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.cancel();
|
trigger.cancel();
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
effect:{
|
||||||
|
target:function(card,player,target){
|
||||||
|
if(card.name==='sha'&&!game.hasNature(card)&&target.hasEmptySlot(2)) return 'zeroplayertarget';
|
||||||
|
if(get.subtype(card)=='equip2'&&target.isEmpty(2)) return [0.6,-0.8];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//战役篇蒋钦
|
//战役篇蒋钦
|
||||||
|
@ -983,9 +991,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
preHidden:true,
|
preHidden:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
if(get.type(event.card)!='equip') return false;
|
if(get.type(event.card)!='equip') return false;
|
||||||
var gz=get.mode()=='guozhan';
|
return player.countMark('pkwuku')<3;
|
||||||
if(gz&&event.player.isFriendOf(player)) return false;
|
|
||||||
return player.countMark('pkwuku')<(gz?2:3);
|
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
player.addMark('pkwuku',1);
|
player.addMark('pkwuku',1);
|
||||||
|
@ -1978,7 +1984,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
skip:{
|
skip:{
|
||||||
trigger:{player:'phaseBefore'},
|
trigger:{player:'phaseBeforeStart'},
|
||||||
forced:true,
|
forced:true,
|
||||||
priority:Infinity,
|
priority:Infinity,
|
||||||
popup:false,
|
popup:false,
|
||||||
|
|
|
@ -313,6 +313,7 @@ window.noname_character_rank={
|
||||||
'dc_sunquan',
|
'dc_sunquan',
|
||||||
'yuechen',
|
'yuechen',
|
||||||
'sunli',
|
'sunli',
|
||||||
|
'dc_zhangmancheng',
|
||||||
'key_misuzu',
|
'key_misuzu',
|
||||||
'key_sunohara',
|
'key_sunohara',
|
||||||
'key_umi',
|
'key_umi',
|
||||||
|
@ -960,6 +961,8 @@ window.noname_character_rank={
|
||||||
'mengyou',
|
'mengyou',
|
||||||
're_wenpin',
|
're_wenpin',
|
||||||
'yue_zhoufei',
|
'yue_zhoufei',
|
||||||
|
'ns_mengyou',
|
||||||
|
'zhangyan',
|
||||||
],
|
],
|
||||||
b:[
|
b:[
|
||||||
'diy_feishi',
|
'diy_feishi',
|
||||||
|
@ -1969,6 +1972,7 @@ window.noname_character_rank={
|
||||||
'clan_zhonghui',
|
'clan_zhonghui',
|
||||||
'zhoubuyi',
|
'zhoubuyi',
|
||||||
'dc_wangjun',
|
'dc_wangjun',
|
||||||
|
'ns_mengyou',
|
||||||
'key_kano',
|
'key_kano',
|
||||||
'key_haruko',
|
'key_haruko',
|
||||||
'key_akiko',
|
'key_akiko',
|
||||||
|
|
|
@ -167,6 +167,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
re_guohuai:['xiahouyuan','zhanghe'],
|
re_guohuai:['xiahouyuan','zhanghe'],
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
|
ollianhuan:{
|
||||||
|
audio:'xinlianhuan',
|
||||||
|
audioname:['ol_pangtong'],
|
||||||
|
hiddenCard:(player,name)=>{
|
||||||
|
return name=='tiesuo'&&player.hasCard(card=>get.suit(card)=='club','she');
|
||||||
|
},
|
||||||
|
filter:function(event,player){
|
||||||
|
if(!player.hasCard(card=>get.suit(card)=='club','she')) return false;
|
||||||
|
return (event.type=='phase'||event.filterCard({name:'tiesuo'},player,event));
|
||||||
|
},
|
||||||
|
position:'hes',
|
||||||
|
inherit:'lianhuan',
|
||||||
|
group:'ollianhuan_add',
|
||||||
|
subSkill:{
|
||||||
|
add:{
|
||||||
|
audio:'xinlianhuan',
|
||||||
|
audioname:['ol_pangtong'],
|
||||||
|
trigger:{player:'useCard2'},
|
||||||
|
filter:function(event,player){
|
||||||
|
if(event.card.name!='tiesuo') return false;
|
||||||
|
var info=get.info(event.card);
|
||||||
|
if(info.allowMultiple==false) return false;
|
||||||
|
if(event.targets&&!info.multitarget){
|
||||||
|
if(game.hasPlayer(current=>{
|
||||||
|
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current);
|
||||||
|
})) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
charlotte:true,
|
||||||
|
forced:true,
|
||||||
|
popup:false,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
player.chooseTarget(get.prompt('ollianhuan'),'为'+get.translation(trigger.card)+'额外指定一个目标',(card,player,target)=>{
|
||||||
|
return !_status.event.sourcex.contains(target)&&lib.filter.targetEnabled2(_status.event.card,player,target);
|
||||||
|
}).set('sourcex',trigger.targets).set('ai',function(target){
|
||||||
|
var player=_status.event.player;
|
||||||
|
return get.effect(target,_status.event.card,player,player);
|
||||||
|
}).set('card',trigger.card);
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
if(!event.isMine()&&!event.isOnline()) game.delayex();
|
||||||
|
}
|
||||||
|
else event.finish();
|
||||||
|
'step 2'
|
||||||
|
if(result.bool){
|
||||||
|
var targets=result.targets;
|
||||||
|
player.logSkill('ollianhuan_add',targets);
|
||||||
|
trigger.targets.addArray(targets);
|
||||||
|
game.log(targets,'也成为了',trigger.card,'的目标');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
rehuomo:{
|
rehuomo:{
|
||||||
audio:'huomo',
|
audio:'huomo',
|
||||||
audioname:['huzhao','re_zhongyao'],
|
audioname:['huzhao','re_zhongyao'],
|
||||||
|
@ -880,15 +936,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
logTarget:'player',
|
logTarget:'player',
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
if(get.attitude(player,event.player)<5) return false;
|
if(get.attitude(_status.event.player,event.player)<1) return false;
|
||||||
if(player.maxHp-player.hp>=2) return false;
|
return player.hp>1||player.hasCard(card=>(get.name(card)==='tao'||get.name(card)==='jiu')&&lib.filter.cardEnabled(card,player),'hs');
|
||||||
if(player.hp==1) return false;
|
|
||||||
if(player.hp==2&&player.countCards('h')<2) return false;
|
|
||||||
if(event.player.countCards('h')>=event.player.hp) return false;
|
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.2);
|
||||||
player.draw(2);
|
player.draw(2);
|
||||||
'step 1'
|
'step 1'
|
||||||
var cards=player.getCards('he');
|
var cards=player.getCards('he');
|
||||||
|
@ -906,7 +959,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.player.markAuto('rexiantu_check',[player]);
|
trigger.player.markAuto('rexiantu_check',[player]);
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
threaten:1.1,
|
threaten:function(player,target){
|
||||||
|
return 1+game.countPlayer((current)=>{
|
||||||
|
if(current!=target&&get.attitude(target,current)>0) return 0.5;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
},
|
||||||
expose:0.3
|
expose:0.3
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -1921,14 +1979,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
audio:2,
|
audio:2,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
var hs=player.getCards('h');
|
const hs=player.getCards('h');
|
||||||
if(!hs.length) return false;
|
if(!hs.length) return false;
|
||||||
if((player.getStat('skill').reqice||0)>=player.countMark('reqice_mark')+1) return false;
|
if((player.getStat('skill').reqice||0)>=player.countMark('reqice_mark')+1) return false;
|
||||||
for(var i=0; i<hs.length; i++){
|
if(hs.some(card=>{
|
||||||
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
|
const mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
|
||||||
if(mod2===false) return false;
|
return (mod2===false)
|
||||||
}
|
})) return false;
|
||||||
return true;
|
return lib.inpile.some(name=>{
|
||||||
|
if(get.type(name)!='trick') return false;
|
||||||
|
const card=get.autoViewAs({name},hs);
|
||||||
|
return event.filterCard(card,player,event);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
chooseButton:{
|
chooseButton:{
|
||||||
dialog:function(event,player){
|
dialog:function(event,player){
|
||||||
|
@ -1939,7 +2001,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return ui.create.dialog(get.translation('reqice'),[list,'vcard']);
|
return ui.create.dialog(get.translation('reqice'),[list,'vcard']);
|
||||||
},
|
},
|
||||||
filter:function(button,player){
|
filter:function(button,player){
|
||||||
return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
|
const event=_status.event.getParent(),card=get.autoViewAs({
|
||||||
|
name:button.link[2],
|
||||||
|
},player.getCards('h'));
|
||||||
|
return event.filterCard(card,player,event);
|
||||||
},
|
},
|
||||||
check:function(button){
|
check:function(button){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
|
@ -1981,6 +2046,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return 13-num;
|
return 13-num;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat('skill').reqice&&player.hasCard((card)=>get.name(card)!='tao','h');
|
||||||
|
},
|
||||||
threaten:1.7,
|
threaten:1.7,
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -2725,6 +2794,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
return -0.5;
|
return -0.5;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&player.countSkill('rezhanjue_draw')<3&&player.hasCard((card)=>get.name(card)!='tao'&&!card.hasGaintag('reqinwang'),'h');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -4858,8 +4931,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
||||||
return !game.hasPlayer(function(current){
|
return player!==target&&!game.hasPlayer(function(current){
|
||||||
return current!=player&¤t!=target&¤t.countCards('h')<target.countCards('h');
|
return current!==player&¤t!==target&¤t.countCards('h')<target.countCards('h');
|
||||||
})&&get.attitude(player,target)>0;
|
})&&get.attitude(player,target)>0;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -6258,20 +6331,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
selectCard:[1,Infinity],
|
selectCard:[1,Infinity],
|
||||||
position:'hs',
|
position:'hs',
|
||||||
check:function(card){
|
check:function(card){
|
||||||
var player=_status.event.player;
|
let player = _status.event.player;
|
||||||
if (ui.selected.cards.length) {
|
if (ui.selected.cards.length) {
|
||||||
var list=game.filterPlayer(function(current){
|
let list = game.filterPlayer(function (current) {
|
||||||
return current!=player&&player.canUse('sha',current,false)&&get.effect(current,{name:'sha'},player,player)>0;
|
return current !== player && player.canUse('sha', current, false) && get.effect(current, {name: 'sha'}, player, player) > 0;
|
||||||
}).sort(function (a, b) {
|
}).sort(function (a, b) {
|
||||||
return get.effect(b, {name: 'sha'}, player, player) - get.effect(a, {name: 'sha'}, player, player);
|
return get.effect(b, {name: 'sha'}, player, player) - get.effect(a, {name: 'sha'}, player, player);
|
||||||
});
|
});
|
||||||
if (!list.length) return 0;
|
if (!list.length) return 0;
|
||||||
var target=list[0];
|
let target = list[0],
|
||||||
if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
|
cards = ui.selected.cards.concat([card]),
|
||||||
|
color = [];
|
||||||
|
for (let i of cards) {
|
||||||
|
if (!color.includes(get.color(i, player))) color.add(get.color(i, player));
|
||||||
|
}
|
||||||
|
if (color.length !== 1) color[0] = 'none';
|
||||||
|
if (player.hasSkillTag(
|
||||||
|
'directHit_ai',
|
||||||
|
true,
|
||||||
|
{
|
||||||
target: target,
|
target: target,
|
||||||
card:card,
|
card: {name: 'sha', suit: 'none', color: color[0], cards: cards, isCard: true}
|
||||||
},true)) return 0;
|
},
|
||||||
return 6.5-get.value(card);
|
true
|
||||||
|
)) return 6.5 - get.value(card, player);
|
||||||
|
if (Math.random() * target.countCards('hs') < 1 || player.needsToDiscard(-ui.selected.cards.length)) return 6 - get.value(card, player);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 6.3 - get.value(card);
|
return 6.3 - get.value(card);
|
||||||
},
|
},
|
||||||
|
@ -6305,6 +6390,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return card.name!='sha'&&get.value(card,player)<6.3;
|
return card.name!='sha'&&get.value(card,player)<6.3;
|
||||||
},'hs')?1:0)>1?-1:1);
|
},'hs')?1:0)>1?-1:1);
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep'){
|
||||||
|
let num=0;
|
||||||
|
if(arg&&(!arg.card||get.name(arg.card)!=='tao')) return false;
|
||||||
|
player.getHistory('sourceDamage',function(evxt){
|
||||||
|
let evt=evxt.getParent();
|
||||||
|
if(evt&&evt.name=='sha'&&evt.skill=='changbiao') num+=evt.cards.length;
|
||||||
|
});
|
||||||
|
return player.needsToDiscard(num)>0;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
//国钟会
|
//国钟会
|
||||||
|
@ -7492,9 +7589,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
"step 0"
|
"step 0"
|
||||||
target.chooseToDiscard(cards.length,'弃置'+get.cnNumber(cards.length)+'张牌并失去1点体力,或点取消将武将牌翻面并摸'+get.cnNumber(cards.length)+'张牌','he').set('ai',function(card){
|
target.chooseToDiscard(cards.length,'弃置'+get.cnNumber(cards.length)+'张牌并失去1点体力,或点取消将武将牌翻面并摸'+get.cnNumber(cards.length)+'张牌','he').set('ai',function(card){
|
||||||
var player=_status.event.player;
|
if(cards.length>3||target.hasSkillTag('noturn')||target.isTurnedOver()||(get.name(card)=='tao'||get.name(card)=='jiu')&&lib.filter.cardSavable(card,target,target)) return -1;
|
||||||
if(player.isTurnedOver()) return -1;
|
if(target.hp<=1){
|
||||||
return (player.hp*player.hp)-get.value(card);
|
if(cards.length<target.getEnemies().length&&target.hasCard((cardx)=>{
|
||||||
|
return (get.name(cardx)=='tao'||get.name(cardx)=='jiu')&&lib.filter.cardSavable(cardx,target,target);
|
||||||
|
},'hs')) return 7-get.value(card);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 24-5*cards.length-2*Math.min(4,target.hp)-get.value(card);
|
||||||
});
|
});
|
||||||
"step 1"
|
"step 1"
|
||||||
if(!result.bool){
|
if(!result.bool){
|
||||||
|
@ -7505,7 +7607,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:2,
|
order:2,
|
||||||
expose:0.3,
|
|
||||||
threaten:1.8,
|
threaten:1.8,
|
||||||
result:{
|
result:{
|
||||||
target:function(player,target){
|
target:function(player,target){
|
||||||
|
@ -10847,34 +10948,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
useShan:true,
|
useShan:true,
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
let name='sha';
|
||||||
|
if(typeof card=='object'){
|
||||||
|
if(card.viewAs) name=card.viewAs;
|
||||||
|
else name=get.name(card);
|
||||||
|
}
|
||||||
|
if(name=='shandian'||get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||||
target: target,
|
target: target,
|
||||||
card:card,
|
card: card
|
||||||
},true)){
|
},true)){
|
||||||
var hastarget=game.hasPlayer(function(current){
|
let club=0,spade=0;
|
||||||
return get.attitude(target,current)<0;
|
if(game.hasPlayer(function(current){
|
||||||
});
|
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||||
var be=target.countCards('e',{color:'black'});
|
})){
|
||||||
if(target.countCards('h','shan')&&be){
|
club=2;
|
||||||
if(!target.hasSkill('xinguidao')) return 0;
|
spade=4;
|
||||||
return [0,hastarget?target.countCards('he')/2:0];
|
|
||||||
}
|
}
|
||||||
if(target.countCards('h','shan')&&target.countCards('h')>2){
|
if(!target.isHealthy()) club+=2;
|
||||||
if(!target.hasSkill('xinguidao')) return 0;
|
if(!club&&!spade) return 1;
|
||||||
return [0,hastarget?target.countCards('h')/4:0];
|
if(!target.mayHaveShan(player)) return 1-0.1*Math.min(5,target.countCards('hs'));
|
||||||
|
if(!target.hasSkillTag('rejudge')) return [1,(club+spade)/4];
|
||||||
|
let pos=(player==target||player.hasSkillTag('viewHandcard',null,target,true))?'hes':'e',better=club>spade?'club':'spade',max=0;
|
||||||
|
target.hasCard(function(cardx){
|
||||||
|
if(get.suit(cardx)==better){
|
||||||
|
max=2;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
|
if(spade&&get.color(cardx)=='black') max=1;
|
||||||
return [0,0];
|
},pos);
|
||||||
}
|
if(max==2) return [1,Math.max(club,spade)];
|
||||||
if(target.countCards('h')==0){
|
if(max==1) return [1,Math.min(club,spade)];
|
||||||
return [1.5,0];
|
if(pos=='e') return [1,Math.min(Math.max(1,target.countCards('hs'))*(club+spade)/4,Math.max(club,spade))];
|
||||||
}
|
return [1,(club+spade)/4];
|
||||||
if(target.countCards('h')==1&&!be){
|
|
||||||
return [1.2,0];
|
|
||||||
}
|
|
||||||
if(!target.hasSkill('xinguidao')) return [1,0.05];
|
|
||||||
return [1,Math.min(0.5,(target.countCards('h')+be)/4)];
|
|
||||||
}
|
}
|
||||||
|
if(name=='lebu'||name=='bingliang') return [target.hasSkillTag('rejudge')?0.4:1,2,target.hasSkillTag('rejudge')?0.4:1,0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10910,6 +11017,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
xinguidao:{
|
xinguidao:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black'&&get.type(card)=='equip') num*1.35;
|
||||||
|
},
|
||||||
|
aiValue:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black') return num*1.15;
|
||||||
|
},
|
||||||
|
aiUseful:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black') return num*1.35;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
trigger:{global:'judge'},
|
trigger:{global:'judge'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.countCards('hes',{color:'black'})>0;
|
return player.countCards('hes',{color:'black'})>0;
|
||||||
|
@ -11087,7 +11206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
prompt:"将一张红色牌当火攻使用",
|
prompt:"将一张红色牌当火攻使用",
|
||||||
check:function (card){
|
check:function (card){
|
||||||
var player=_status.currentPhase;
|
var player=get.player();
|
||||||
if(player.countCards('h')>player.hp){
|
if(player.countCards('h')>player.hp){
|
||||||
return 6-get.value(card);
|
return 6-get.value(card);
|
||||||
}
|
}
|
||||||
|
@ -12239,6 +12358,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
rezhiheng:{
|
rezhiheng:{
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['shen_caopi'],
|
audioname:['shen_caopi'],
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num<=0||get.itemtype(card)!=='card'||get.type(card)!=='equip') return num;
|
||||||
|
let eq=player.getEquip(get.subtype(card));
|
||||||
|
if(eq&&get.equipValue(card)-get.equipValue(eq)<Math.max(1.2,6-player.hp)) return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
usable:1,
|
usable:1,
|
||||||
position:'he',
|
position:'he',
|
||||||
|
@ -12290,10 +12417,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
delay:{}
|
delay:{}
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:1,
|
order:function(item,player){
|
||||||
|
if(player.hasCard((i)=>get.value(i)>Math.max(6,9-player.hp),'he')) return 1;
|
||||||
|
return 10;
|
||||||
|
},
|
||||||
result:{
|
result:{
|
||||||
player:1
|
player:1
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg&&arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat().skill.rezhiheng&&player.hasCard((card)=>get.name(card)!=='tao','h');
|
||||||
|
},
|
||||||
threaten:1.55
|
threaten:1.55
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -14521,7 +14655,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
reqiangxi:"强袭",
|
reqiangxi:"强袭",
|
||||||
"reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
|
"reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
|
||||||
rehuoji:"火计",
|
rehuoji:"火计",
|
||||||
rehuoji_info:"出牌阶段,你可一张红色牌当作【火攻】使用。",
|
rehuoji_info:"你可一张红色牌当作【火攻】使用。",
|
||||||
rekanpo:"看破",
|
rekanpo:"看破",
|
||||||
rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
|
rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
|
||||||
reshuangxiong:"双雄",
|
reshuangxiong:"双雄",
|
||||||
|
@ -15244,6 +15378,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
zhoutai_prefix:'界',
|
zhoutai_prefix:'界',
|
||||||
caoren:'界曹仁',
|
caoren:'界曹仁',
|
||||||
caoren_prefix:'界',
|
caoren_prefix:'界',
|
||||||
|
ollianhuan:'连环',
|
||||||
|
ollianhuan_info:'你可以将一张♣牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标后,可以给此牌增加一个目标。',
|
||||||
|
|
||||||
refresh_standard:'界限突破·标',
|
refresh_standard:'界限突破·标',
|
||||||
refresh_feng:'界限突破·风',
|
refresh_feng:'界限突破·风',
|
||||||
|
|
265
character/sb.js
265
character/sb.js
|
@ -38,6 +38,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']],
|
sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']],
|
||||||
sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']],
|
sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']],
|
||||||
sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']],
|
sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']],
|
||||||
|
sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang']],
|
||||||
|
sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan']],
|
||||||
},
|
},
|
||||||
characterSort:{
|
characterSort:{
|
||||||
sb:{
|
sb:{
|
||||||
|
@ -49,6 +51,185 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
|
//卢植
|
||||||
|
sbzhenliang:{
|
||||||
|
mark:true,
|
||||||
|
locked:false,
|
||||||
|
zhuanhuanji:true,
|
||||||
|
marktext:'☯',
|
||||||
|
intro:{
|
||||||
|
content:function(storage,player){
|
||||||
|
if(storage) return '你的回合外,一名角色使用或打出牌结算完成后,若此牌与“任”类别相同,则你可以令一名角色摸一张牌。';
|
||||||
|
return '出牌阶段限一次,你可以弃置一张与“任”颜色相同的牌并对攻击范围内的一名角色造成1点伤害。';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
audio:2,
|
||||||
|
enable:'phaseUse',
|
||||||
|
filter:function(event,player){
|
||||||
|
if(player.storage.sbzhenliang) return false;
|
||||||
|
var storage=player.getExpansions('nzry_mingren');
|
||||||
|
if(!storage.length) return false;
|
||||||
|
var color=get.color(storage[0]);
|
||||||
|
return game.hasPlayer(function(current){
|
||||||
|
return player.inRange(current)&&player.countCards('he',function(card){
|
||||||
|
return get.color(card)==color;
|
||||||
|
})>=Math.max(1,Math.abs(player.getHp()-current.getHp()));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
filterCard:function(card,player){
|
||||||
|
return get.color(card)==get.color(player.getExpansions('nzry_mingren')[0]);
|
||||||
|
},
|
||||||
|
selectCard:[1,Infinity],
|
||||||
|
complexSelect:true,
|
||||||
|
complexCard:true,
|
||||||
|
position:'he',
|
||||||
|
filterTarget:function(card,player,target){
|
||||||
|
return player.inRange(target)&&ui.selected.cards.length==Math.max(1,Math.abs(player.getHp()-target.getHp()));
|
||||||
|
},
|
||||||
|
check:function(card){
|
||||||
|
return 6.5-get.value(card);
|
||||||
|
},
|
||||||
|
prompt:'弃置与攻击范围内的一名角色体力值之差(至少为1)张与“任”颜色相同的牌,对其造成1点伤害。',
|
||||||
|
content:function(){
|
||||||
|
player.changeZhuanhuanji('sbzhenliang');
|
||||||
|
target.damage('nocard');
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
order:5,
|
||||||
|
result:{
|
||||||
|
player:function(player,target){
|
||||||
|
return get.damageEffect(target,player,player);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
group:'sbzhenliang_draw',
|
||||||
|
subSkill:{
|
||||||
|
draw:{
|
||||||
|
trigger:{global:['useCardAfter','respondAfter']},
|
||||||
|
filter:function(event,player){
|
||||||
|
if(_status.currentPhase==player||!player.storage.sbzhenliang) return false;
|
||||||
|
var card=player.getExpansions('nzry_mingren')[0];
|
||||||
|
return card&&get.type2(event.card)==get.type2(card);
|
||||||
|
},
|
||||||
|
direct:true,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
player.chooseTarget(get.prompt('sbzhenliang'),'令一名角色摸一张牌').set('ai',function(target){
|
||||||
|
if(target.hasSkillTag('nogain')) return 0.1;
|
||||||
|
var att=get.attitude(player,target);
|
||||||
|
return att*(Math.max(5-target.countCards('h'),2)+3);
|
||||||
|
});
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
var target=result.targets[0];
|
||||||
|
player.changeZhuanhuanji('sbzhenliang');
|
||||||
|
player.logSkill('sbzhenliang',target);
|
||||||
|
target.draw();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ai:{combo:'nzry_mingren'},
|
||||||
|
},
|
||||||
|
//小乔
|
||||||
|
sbtianxiang:{
|
||||||
|
audio:2,
|
||||||
|
enable:'phaseUse',
|
||||||
|
filter:function(event,player){
|
||||||
|
return player.countCards('he',card=>lib.skill.sbtianxiang.filterCard(card,player))&&game.hasPlayer(target=>lib.skill.sbtianxiang.filterTarget(null,player,target));
|
||||||
|
},
|
||||||
|
filterCard:function(card,player){
|
||||||
|
return get.color(card,player)=='red';
|
||||||
|
},
|
||||||
|
filterTarget:function(card,player,target){
|
||||||
|
return target!=player&&!target.getSkills().some(skill=>skill.indexOf('sbtianxiang_')==0);
|
||||||
|
},
|
||||||
|
discard:false,
|
||||||
|
lose:false,
|
||||||
|
delay:0,
|
||||||
|
usable:3,
|
||||||
|
prompt:'将一张红色牌交给一名角色并令其获得此花色的“天香”标记',
|
||||||
|
content:function(){
|
||||||
|
player.give(cards,target);
|
||||||
|
var suit=get.suit(cards[0],player);
|
||||||
|
target.addSkill('sbtianxiang_'+suit);
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
order:5,
|
||||||
|
result:{target:-1},
|
||||||
|
},
|
||||||
|
group:['sbtianxiang_draw','sbtianxiang_effect'],
|
||||||
|
subSkill:{
|
||||||
|
heart:{
|
||||||
|
charlotte:true,
|
||||||
|
mark:true,
|
||||||
|
marktext:'♥︎',
|
||||||
|
intro:{content:'伤害转移术'},
|
||||||
|
},
|
||||||
|
diamond:{
|
||||||
|
charlotte:true,
|
||||||
|
mark:true,
|
||||||
|
marktext:'♦︎',
|
||||||
|
intro:{content:'掳掠大法'},
|
||||||
|
},
|
||||||
|
draw:{
|
||||||
|
audio:'sbtianxiang',
|
||||||
|
trigger:{player:'phaseZhunbeiBegin'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return game.hasPlayer(target=>target.getSkills().some(skill=>skill.indexOf('sbtianxiang_')==0));
|
||||||
|
},
|
||||||
|
forced:true,
|
||||||
|
locked:false,
|
||||||
|
content:function(){
|
||||||
|
var num=0;
|
||||||
|
game.countPlayer(target=>{
|
||||||
|
var skills=target.getSkills().filter(skill=>skill.indexOf('sbtianxiang_')==0);
|
||||||
|
target.removeSkill(skills);
|
||||||
|
num+=skills.length;
|
||||||
|
});
|
||||||
|
player.draw(num);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
effect:{
|
||||||
|
trigger:{player:'damageBegin3'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return game.hasPlayer(target=>target.getSkills().some(skill=>skill.indexOf('sbtianxiang_')==0));
|
||||||
|
},
|
||||||
|
direct:true,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
player.chooseTarget(get.prompt('sbtianxiang'),'移去一名角色的“天香”标记并执行相应效果',function(card,player,target){
|
||||||
|
return target.getSkills().some(skill=>skill.indexOf('sbtianxiang_')==0);
|
||||||
|
}).set('ai',target=>{
|
||||||
|
var player=_status.event.player;
|
||||||
|
return -get.attitude(player,target)*target.getSkills().filter(skill=>skill.indexOf('sbtianxiang_')==0).length;
|
||||||
|
});
|
||||||
|
'step 1'
|
||||||
|
if(result.bool){
|
||||||
|
var target=result.targets[0];
|
||||||
|
event.target=target;
|
||||||
|
player.logSkill('sbtianxiang',target);
|
||||||
|
var skills=target.getSkills().filter(skill=>skill.indexOf('sbtianxiang_')==0);
|
||||||
|
target.removeSkill(skills);
|
||||||
|
if(skills.contains('sbtianxiang_heart')){
|
||||||
|
target.damage(trigger.source?trigger.source:'nosource');
|
||||||
|
trigger.cancel();
|
||||||
|
}
|
||||||
|
if(skills.contains('sbtianxiang_diamond')){
|
||||||
|
var cards=target.getCards('he');
|
||||||
|
if(!cards.length) event.finish();
|
||||||
|
else if(cards.length<=2) event._result={bool:true,cards:cards};
|
||||||
|
else target.chooseCard('he',2,'天香:交给'+get.translation(player)+'两张牌',true);
|
||||||
|
}
|
||||||
|
else event.finish();
|
||||||
|
}
|
||||||
|
else event.finish();
|
||||||
|
'step 2'
|
||||||
|
if(result.bool) player.gain(result.cards,target,'giveAuto');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
//张郃
|
//张郃
|
||||||
sbqiaobian:{
|
sbqiaobian:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -240,7 +421,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseTarget(get.prompt('sbzaiqi'),'选择任意名角色并消耗等量蓄力值,令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力',[1,player.countMark('charge')]).set('ai',function(target){
|
player.chooseTarget(get.prompt('sbzaiqi'),'选择任意名角色并消耗等量蓄力值,令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力',[1,player.countMark('charge')]).set('ai',function(target){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
return get.attitude(player,target)+player.getDamagedHp()*3.5;
|
var att=get.attitude(player,target);
|
||||||
|
return 3-get.sgn(att)+Math.abs(att/1000);
|
||||||
});
|
});
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
|
@ -275,19 +457,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
backflow:{
|
backflow:{
|
||||||
audio:'sbzaiqi',
|
audio:'sbzaiqi',
|
||||||
trigger:{
|
trigger:{
|
||||||
player:'enterGame',
|
//player:'enterGame',
|
||||||
source:'damageSource',
|
source:'damageSource',
|
||||||
global:'phaseBefore',
|
//global:'phaseBefore',
|
||||||
},
|
},
|
||||||
usable:1,
|
usable:1,
|
||||||
forced:true,
|
|
||||||
locked:false,
|
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
if(event.name=='damage') return true;
|
if(event.name=='damage') return true;
|
||||||
return (event.name!='phase'||game.phaseNumber==0);
|
return (event.name!='phase'||game.phaseNumber==0);
|
||||||
},
|
},
|
||||||
|
forced:true,
|
||||||
|
locked:false,
|
||||||
content:function(){
|
content:function(){
|
||||||
player.addMark('charge',1);
|
player.addMark('charge',trigger.name=='damage'?1:3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -333,7 +515,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var target=trigger.card.storage.sblieren[1];
|
var target=trigger.card.storage.sblieren[1];
|
||||||
player.chooseTarget('烈刃:是否对除'+get.translation(target)+'外的一名其他角色造成1点伤害?',(card,player,target)=>{
|
player.chooseTarget('烈刃:是否对除'+get.translation(target)+'外的一名其他角色造成1点伤害?',(card,player,target)=>{
|
||||||
return target!=_status.event.targeted&&target!=player;
|
return target!=_status.event.targeted&&target!=player;
|
||||||
}).set('targeted',target);
|
}).set('targeted',target).set('ai',targetx=>get.damageEffect(targetx,_status.event.player,_status.event.player));
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
var target=result.targets[0];
|
var target=result.targets[0];
|
||||||
|
@ -518,7 +700,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
return event.filterCard(get.autoViewAs({name:'juedou'},hs));
|
return event.filterCard(get.autoViewAs({name:'juedou'},hs));
|
||||||
},
|
},
|
||||||
ai:{order:0.001},
|
ai:{
|
||||||
|
order:0.001,
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep'){
|
||||||
|
if(arg&&(!arg.card||get.name(arg.card)!=='tao')) return false;
|
||||||
|
let limit=player.hasMark('sbjiang')?(game.countPlayer(current=>{
|
||||||
|
return current.group=='wu'&¤t!=player;
|
||||||
|
})+1):1;
|
||||||
|
return player.isPhaseUsing()&&(player.getStat('skill').sbjiang_qiben||0)<limit&&player.hasCard((card)=>get.name(card)!='tao','h');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -3551,10 +3745,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
var target=result.targets[0],card=result.cards[0];
|
var target=result.targets[0],card=result.cards[0];
|
||||||
player.logSkill('sbkurou',target);
|
player.logSkill('sbkurou',target);
|
||||||
|
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.15);
|
||||||
player.give(card,target);
|
player.give(card,target);
|
||||||
player.loseHp(['tao','jiu'].contains(get.name(card,target))?2:1);
|
player.loseHp(['tao','jiu'].contains(get.name(card,target))?2:1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.hp<=0&&player.isPhaseUsing();
|
||||||
|
}
|
||||||
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
gain:{
|
gain:{
|
||||||
audio:'sbkurou',
|
audio:'sbkurou',
|
||||||
|
@ -3626,6 +3827,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
subSkill:{
|
subSkill:{
|
||||||
draw:{
|
draw:{
|
||||||
audio:'sbzhaxiang',
|
audio:'sbzhaxiang',
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&_status.event&&_status.event.type=='phase'&&get.tag(card,'recover')) return num/5;
|
||||||
|
}
|
||||||
|
},
|
||||||
trigger:{player:'phaseDrawBegin2'},
|
trigger:{player:'phaseDrawBegin2'},
|
||||||
forced:true,
|
forced:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
|
@ -3637,7 +3843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ai:{
|
ai:{
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target){
|
target:function(card,player,target){
|
||||||
if(get.tag(card,'recover')&&target.hp>=target.maxHp-1&&target.maxHp>1) return [0,0];
|
if(get.tag(card,'recover')&&target.hp>0&&target.needsToDiscard()<1) return [0,0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3648,6 +3854,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sbzhiheng:{
|
sbzhiheng:{
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['shen_caopi'],
|
audioname:['shen_caopi'],
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num<=0||get.itemtype(card)!=='card'||get.type(card)!=='equip') return num;
|
||||||
|
let eq=player.getEquip(get.subtype(card));
|
||||||
|
if(eq&&get.equipValue(card)-get.equipValue(eq)<Math.max(1.2,6-player.hp)) return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
usable:1,
|
usable:1,
|
||||||
position:'he',
|
position:'he',
|
||||||
|
@ -3689,10 +3902,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(all) player.removeMark('sbtongye',1);
|
if(all) player.removeMark('sbtongye',1);
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:1,
|
order:function(item,player){
|
||||||
|
if(player.hasCard((i)=>get.value(i)>Math.max(6,9-player.hp),'he')) return 1;
|
||||||
|
return 10;
|
||||||
|
},
|
||||||
result:{
|
result:{
|
||||||
player:1
|
player:1
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg&&arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat().skill.sbzhiheng&&player.hasCard((card)=>get.name(card)!=='tao','h');
|
||||||
|
},
|
||||||
threaten:1.56
|
threaten:1.56
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -3703,7 +3923,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
onremove:true,
|
onremove:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>Number((game.countPlayer()<=4?Math.random():1)<0.4));
|
player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>{
|
||||||
|
let player = _status.event.player;
|
||||||
|
if(game.countPlayer() > 3) return '变化';
|
||||||
|
if(game.countPlayer(function (current){
|
||||||
|
return current.hasCard({type: 'equip'}, 'e');
|
||||||
|
}) < game.countPlayer()) return '变化';
|
||||||
|
if(game.countPlayer() == 2 && game.countPlayer(function (current){
|
||||||
|
if (current != player) return current.countCards('e', {type: 'equip'}) + current.countDisabledSlot();
|
||||||
|
}) >= 5) return '不变';
|
||||||
|
if(Math.random() < 0.3) return '变化';
|
||||||
|
return '不变';
|
||||||
|
});
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.control=='变化'){
|
if(result.control=='变化'){
|
||||||
player.addSkill('sbtongye_change',1);
|
player.addSkill('sbtongye_change',1);
|
||||||
|
@ -4242,7 +4473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
//华雄
|
//华雄
|
||||||
sbyangwei:{
|
sbyangwei:{
|
||||||
audio:2,
|
audio:3,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return !player.hasSkill('sbyangwei_counter',null,null,false);
|
return !player.hasSkill('sbyangwei_counter',null,null,false);
|
||||||
|
@ -4882,10 +5113,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sbhuoshou:'祸首',
|
sbhuoshou:'祸首',
|
||||||
sbhuoshou_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】指定第一个目标后,你代替其成为此牌的伤害来源。③出牌阶段开始时,你随机获得弃牌堆中的一张【南蛮入侵】。④出牌阶段,若你于此阶段使用过【南蛮入侵】,你不能使用【南蛮入侵】。',
|
sbhuoshou_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】指定第一个目标后,你代替其成为此牌的伤害来源。③出牌阶段开始时,你随机获得弃牌堆中的一张【南蛮入侵】。④出牌阶段,若你于此阶段使用过【南蛮入侵】,你不能使用【南蛮入侵】。',
|
||||||
sbzaiqi:'再起',
|
sbzaiqi:'再起',
|
||||||
sbzaiqi_info:'蓄力技(1/7)。①弃牌阶段结束时,你可以消耗任意点蓄力值并选择等量名角色,然后令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力。②每回合限一次。当你造成伤害后,你获得1点蓄力值。',
|
sbzaiqi_info:'蓄力技(0/7)。①弃牌阶段结束时,你可以消耗任意点蓄力值并选择等量名角色,然后令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力。②每回合限一次。当你造成伤害后,你获得1点蓄力值。',
|
||||||
sb_zhanghe:'谋张郃',
|
sb_zhanghe:'谋张郃',
|
||||||
sbqiaobian:'巧变',
|
sbqiaobian:'巧变',
|
||||||
sbqiaobian_info:'每回合限一次。①你可以失去1点体力并跳过判定阶段,将判定区的所有牌移动给一名其他角色(无法置入其判定区的牌改为弃置之)。②你可以跳过摸牌阶段,于下个准备阶段摸两张牌并回复1点体力。③你可以将手牌数弃置至六张(若手牌数少于六张则跳过之)并跳过出牌阶段和弃牌阶段,然后移动场上的一张牌。',
|
sbqiaobian_info:'每回合限一次。①你可以失去1点体力并跳过判定阶段,将判定区的所有牌移动给一名其他角色(无法置入其判定区的牌改为弃置之)。②你可以跳过摸牌阶段,于下个准备阶段摸两张牌并回复1点体力。③你可以将手牌数弃置至六张(若手牌数少于六张则跳过之)并跳过出牌阶段和弃牌阶段,然后移动场上的一张牌。',
|
||||||
|
sb_yl_luzhi:'谋卢植',
|
||||||
|
sb_yl_luzhi_prefix:'谋',
|
||||||
|
sbzhenliang:'贞良',
|
||||||
|
sbzhenliang_info:'转换技。阴:出牌阶段限一次,你可以弃置X张与“任”颜色相同的牌并对攻击范围内的一名角色造成1点伤害(X为你与其体力值值差且X至少为1)。阳:你的回合外,一名角色使用或打出牌结算完成后,若此牌与“任”类别相同,则你可以令一名角色摸一张牌。',
|
||||||
|
sb_xiaoqiao:'谋小乔',
|
||||||
|
sb_xiaoqiao_prefix:'谋',
|
||||||
|
sbtianxiang:'天香',
|
||||||
|
sbtianxiang_info:'①出牌阶段限三次,你可以交给一名没有“天香”标记的其他角色一张红色牌,然后令其获得此牌花色的“天香”标记。②当你受到伤害时,你可以移去一名角色的“天香”标记,若此“天香”标记为:红桃,你防止此伤害,其受到伤害来源对其造成的1点伤害(若没有伤害来源则改为无来源伤害);方片,其交给你两张牌。③准备阶段,你移去场上所有的“天香”标记,然后摸等量的牌。',
|
||||||
|
|
||||||
sb_zhi:'谋攻篇·知',
|
sb_zhi:'谋攻篇·知',
|
||||||
sb_shi:'谋攻篇·识',
|
sb_shi:'谋攻篇·识',
|
||||||
|
|
|
@ -141,6 +141,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
"chendao":"陈到,字叔至,生卒年不详,豫州汝南(今河南驻马店平舆县)人。三国时期蜀汉将领,刘备帐下白毦兵统领,名位常亚于赵云,以忠勇著称。蜀汉建兴年间,任征西将军、永安都督,封亭侯。在任期间去世。",
|
"chendao":"陈到,字叔至,生卒年不详,豫州汝南(今河南驻马店平舆县)人。三国时期蜀汉将领,刘备帐下白毦兵统领,名位常亚于赵云,以忠勇著称。蜀汉建兴年间,任征西将军、永安都督,封亭侯。在任期间去世。",
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
|
//庞统写法修改
|
||||||
|
lianhuan:{
|
||||||
|
audio:'lianhuan1',
|
||||||
|
hiddenCard:(player,name)=>{
|
||||||
|
return name=='tiesuo'&&player.hasCard(card=>get.suit(card)=='club','sh');
|
||||||
|
},
|
||||||
|
enable:'chooseToUse',
|
||||||
|
filter:function(event,player){
|
||||||
|
if(!player.hasCard(card=>get.suit(card)=='club','sh')) return false;
|
||||||
|
return (event.type=='phase'||event.filterCard({name:'tiesuo'},player,event));
|
||||||
|
},
|
||||||
|
position:'hs',
|
||||||
|
filterCard:function(card,player,event){
|
||||||
|
if(!event) event=_status.event;
|
||||||
|
if(get.suit(card)!='club') return false;
|
||||||
|
if(event.type=='phase'&&get.position(card)!='s'&&player.canRecast(card)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(game.checkMod(card,player,'unchanged','cardEnabled2',player)===false) return false;
|
||||||
|
const cardx=get.autoViewAs({name:'tiesuo'},[card]);
|
||||||
|
return event._backup.filterCard(cardx,player,target);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filterTarget:function(fuck,player,target){
|
||||||
|
const card=ui.selected.cards[0],event=_status.event,backup=event._backup;
|
||||||
|
if(!card||game.checkMod(card,player,'unchanged','cardEnabled2',player)===false) return false;
|
||||||
|
const cardx=get.autoViewAs({name:'tiesuo'},[card]);
|
||||||
|
return (backup.filterCard(cardx,player,event)&&backup.filterTarget(cardx,player,target));
|
||||||
|
},
|
||||||
|
selectTarget:function(){
|
||||||
|
const card=ui.selected.cards[0],event=_status.event,player=event.player,backup=event._backup;
|
||||||
|
let recast=false,use=false;
|
||||||
|
const cardx=get.autoViewAs({name:'tiesuo'},[card]);
|
||||||
|
if(event.type=='phase'&&player.canRecast(card)) recast=true;
|
||||||
|
if(game.checkMod(card,player,'unchanged','cardEnabled2',player)!==false){
|
||||||
|
if(backup.filterCard(cardx,player,event)) use=true;
|
||||||
|
}
|
||||||
|
if(!use) return [0,0];
|
||||||
|
else{
|
||||||
|
const select=backup.selectTarget(cardx,player);
|
||||||
|
if(recast&&select[0]>0) select[0]=0;
|
||||||
|
return select;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filterOk:function(){
|
||||||
|
const card=ui.selected.cards[0],event=_status.event,player=event.player,backup=event._backup;
|
||||||
|
const selected=ui.selected.targets.length;
|
||||||
|
let recast=false,use=false;
|
||||||
|
const cardx=get.autoViewAs({name:'tiesuo'},[card]);
|
||||||
|
if(event.type=='phase'&&player.canRecast(card)) recast=true;
|
||||||
|
if(game.checkMod(card,player,'unchanged','cardEnabled2',player)!==false){
|
||||||
|
if(backup.filterCard(cardx,player,event)) use=true;
|
||||||
|
}
|
||||||
|
if(recast&&selected==0){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(use){
|
||||||
|
const select=backup.selectTarget(cardx,player);
|
||||||
|
if(select[0]<=-1) return true;
|
||||||
|
return selected>=select[0]&&selected<=select[1];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
discard:false,
|
||||||
|
lose:false,
|
||||||
|
delay:false,
|
||||||
|
precontent:function(){
|
||||||
|
var result=event.result;
|
||||||
|
if(result.targets.length>0) result.card=get.autoViewAs({name:'tiesuo'},result.cards);
|
||||||
|
},
|
||||||
|
content:function(){
|
||||||
|
player.recast(cards);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lianhuan1:{audio:2},
|
||||||
|
lianhuan2:{audio:2},
|
||||||
//新杀小加强 陈到
|
//新杀小加强 陈到
|
||||||
dcwanglie:{
|
dcwanglie:{
|
||||||
audio:'drlt_wanglie',
|
audio:'drlt_wanglie',
|
||||||
|
@ -2270,6 +2346,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
nzry_mingren:{
|
nzry_mingren:{
|
||||||
audio:"nzry_mingren_1",
|
audio:"nzry_mingren_1",
|
||||||
|
audioname:['sb_yl_luzhi'],
|
||||||
marktext:"任",
|
marktext:"任",
|
||||||
intro:{
|
intro:{
|
||||||
content:'expansion',
|
content:'expansion',
|
||||||
|
@ -2283,6 +2360,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
subSkill:{
|
subSkill:{
|
||||||
1:{
|
1:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
audioname:['sb_yl_luzhi'],
|
||||||
trigger:{
|
trigger:{
|
||||||
global:'phaseBefore',
|
global:'phaseBefore',
|
||||||
player:'enterGame',
|
player:'enterGame',
|
||||||
|
@ -2307,7 +2385,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
2:{
|
2:{
|
||||||
audio:2,
|
|
||||||
trigger:{
|
trigger:{
|
||||||
player:'phaseJieshuBegin',
|
player:'phaseJieshuBegin',
|
||||||
},
|
},
|
||||||
|
@ -2317,7 +2394,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
direct:true,
|
direct:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseCard('h','是否用一张手牌替换“任”('+get.translation(player.getExpansions('nzry_mingren')[0])+')?').set('ai',function(card){
|
player.chooseCard('h',get.prompt('nzry_mingren'),'选择一张手牌替换“任”('+get.translation(player.getExpansions('nzry_mingren')[0])+')').set('ai',function(card){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
var color=get.color(card);
|
var color=get.color(card);
|
||||||
if(color==get.color(player.getExpansions('nzry_mingren')[0])) return false;
|
if(color==get.color(player.getExpansions('nzry_mingren')[0])) return false;
|
||||||
|
@ -2901,62 +2978,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ollianhuan:{
|
|
||||||
audio:'xinlianhuan',
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
group:['ollianhuan3','ollianhuan5','lianhuan4'],
|
|
||||||
},
|
|
||||||
ollianhuan5:{
|
|
||||||
inherit:'lianhuan2',
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
audio:['xinlianhuan',2],
|
|
||||||
position:'he',
|
|
||||||
filter:function(event,player){
|
|
||||||
return player.countCards('he',{suit:'club'})>0;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ollianhuan3:{
|
|
||||||
audio:['xinlianhuan',1],
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
enable:'chooseToUse',
|
|
||||||
filter:function(event,player){
|
|
||||||
return player.countCards('hes',{suit:'club'})>0;
|
|
||||||
},
|
|
||||||
filterCard:{suit:'club'},
|
|
||||||
viewAs:{name:'tiesuo'},
|
|
||||||
prompt:'将一张梅花牌当铁锁连环使用',
|
|
||||||
check:function(card){return 6-get.value(card)},
|
|
||||||
position:'hes',
|
|
||||||
},
|
|
||||||
xinlianhuan:{
|
|
||||||
audio:2,
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
group:['lianhuan3','lianhuan5','lianhuan4'],
|
|
||||||
},
|
|
||||||
lianhuan5:{
|
|
||||||
inherit:'lianhuan2',
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
audio:['xinlianhuan',2],
|
|
||||||
},
|
|
||||||
lianhuan3:{
|
|
||||||
audio:['xinlianhuan',1],
|
|
||||||
audioname:['ol_pangtong'],
|
|
||||||
enable:'chooseToUse',
|
|
||||||
filter:function(event,player){
|
|
||||||
return player.countCards('hs',{suit:'club'})>0;
|
|
||||||
},
|
|
||||||
filterCard:{suit:'club'},
|
|
||||||
viewAs:{name:'tiesuo'},
|
|
||||||
prompt:'将一张梅花牌当铁锁连环使用',
|
|
||||||
check:function(card){return 6-get.value(card)},
|
|
||||||
},
|
|
||||||
lianhuan4:{
|
|
||||||
mod:{
|
|
||||||
selectTarget:function(card,player,range){
|
|
||||||
if(card.name=='tiesuo'&&range[1]!=-1) range[1]++;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
reluanji:{
|
reluanji:{
|
||||||
audio:2,
|
audio:2,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
|
@ -3156,13 +3177,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
xinkuanggu:{
|
xinkuanggu:{
|
||||||
trigger:{source:'damageSource'},
|
|
||||||
filter:function(event,player){
|
|
||||||
return get.distance(player,event.player)<=1&&event.num>0;
|
|
||||||
},
|
|
||||||
direct:true,
|
|
||||||
audio:'kuanggu',
|
audio:'kuanggu',
|
||||||
audioname:['re_weiyan','ol_weiyan'],
|
audioname:['re_weiyan','ol_weiyan'],
|
||||||
|
trigger:{source:'damageSource'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return event.kuangguCheck&&event.num>0;
|
||||||
|
},
|
||||||
|
direct:true,
|
||||||
preHidden:true,
|
preHidden:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
@ -3177,7 +3198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
else{
|
else{
|
||||||
choice='draw_card';
|
choice='draw_card';
|
||||||
}
|
}
|
||||||
var next=player.chooseDrawRecover(get.prompt(event.name)).set('logSkill',event.name).set('prompt2','摸一张牌或回复1点体力');
|
var next=player.chooseDrawRecover('###'+get.prompt(event.name)+'###摸一张牌或回复1点体力').set('logSkill',event.name);
|
||||||
next.set('choice',choice);
|
next.set('choice',choice);
|
||||||
next.set('ai',function(){
|
next.set('ai',function(){
|
||||||
return _status.event.getParent().choice;
|
return _status.event.getParent().choice;
|
||||||
|
@ -3190,7 +3211,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
event.goto(1);
|
event.goto(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
group:'kuanggu_check',
|
||||||
},
|
},
|
||||||
xinliegong:{
|
xinliegong:{
|
||||||
shaRelated:true,
|
shaRelated:true,
|
||||||
|
@ -3803,6 +3825,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
audio:2,
|
audio:2,
|
||||||
preHidden:true,
|
preHidden:true,
|
||||||
audioname:['sp_lvmeng','re_sunben','re_sunce'],
|
audioname:['sp_lvmeng','re_sunben','re_sunce'],
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(get.color(card)==='red'&&get.name(card)==='sha') return get.order({name: 'sha'})+0.15;
|
||||||
|
}
|
||||||
|
},
|
||||||
trigger:{
|
trigger:{
|
||||||
player:'useCardToPlayered',
|
player:'useCardToPlayered',
|
||||||
target:'useCardToTargeted',
|
target:'useCardToTargeted',
|
||||||
|
@ -3811,6 +3838,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false;
|
if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false;
|
||||||
return player==event.target||event.getParent().triggeredTargets3.length==1;
|
return player==event.target||event.getParent().triggeredTargets3.length==1;
|
||||||
},
|
},
|
||||||
|
locked:false,
|
||||||
frequent:true,
|
frequent:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
player.draw();
|
player.draw();
|
||||||
|
@ -4871,9 +4899,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
preHidden:true,
|
preHidden:true,
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
if(player.countCards('h')<=1) return true;
|
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
||||||
return game.hasPlayer(function(current){
|
return player!==target&&!game.hasPlayer(function(current){
|
||||||
return current!=player&¤t.isMinHandcard()&&get.attitude(player,current)>0;
|
return current!==player&¤t!==target&¤t.countCards('h')<target.countCards('h');
|
||||||
|
})&&get.attitude(player,target)>0;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -5030,6 +5059,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
re_sunyi:'gzyinghun_re_sunyi',
|
re_sunyi:'gzyinghun_re_sunyi',
|
||||||
tw_ol_sunjian:'yinghun_ol_sunjian',
|
tw_ol_sunjian:'yinghun_ol_sunjian',
|
||||||
},
|
},
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&_status.event&&_status.event.type=='phase'&&get.tag(card,'recover')){
|
||||||
|
if(player.needsToDiscard()) return num/3;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
trigger:{player:'phaseZhunbeiBegin'},
|
trigger:{player:'phaseZhunbeiBegin'},
|
||||||
direct:true,
|
direct:true,
|
||||||
preHidden:true,
|
preHidden:true,
|
||||||
|
@ -5081,6 +5119,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(event.num>0) event.target.chooseToDiscard(event.num,true,'he');
|
if(event.num>0) event.target.chooseToDiscard(event.num,true,'he');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
effect:{
|
||||||
|
target:function(card,player,target){
|
||||||
|
if(get.tag(card,'damage')&&get.itemtype(player)==='player'&&target.hp>(player.hasSkillTag('damageBonus',true,{
|
||||||
|
target:target,
|
||||||
|
card:card
|
||||||
|
})?2:1)) return [1,1];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
threaten:function(player,target){
|
||||||
|
return Math.max(0.5,target.getDamagedHp()/2);
|
||||||
|
},
|
||||||
|
maixie:true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
gzyinghun:{
|
gzyinghun:{
|
||||||
audio:'yinghun',
|
audio:'yinghun',
|
||||||
|
@ -5089,6 +5141,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
re_sunyi:'gzyinghun_re_sunyi',
|
re_sunyi:'gzyinghun_re_sunyi',
|
||||||
tw_ol_sunjian:'yinghun_ol_sunjian',
|
tw_ol_sunjian:'yinghun_ol_sunjian',
|
||||||
},
|
},
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&_status.event&&_status.event.type=='phase'&&get.tag(card,'recover')){
|
||||||
|
if(player.needsToDiscard()) return num/3;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
trigger:{player:'phaseZhunbeiBegin'},
|
trigger:{player:'phaseZhunbeiBegin'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.getDamagedHp()>0;
|
return player.getDamagedHp()>0;
|
||||||
|
@ -5143,13 +5204,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
threaten:function(player,target){
|
effect:{
|
||||||
if(target.hp==target.maxHp) return 0.5;
|
target:function(card,player,target){
|
||||||
if(target.hp==1) return 2;
|
if(get.tag(card,'damage')&&get.itemtype(player)==='player'&&target.hp>(player.hasSkillTag('damageBonus',true,{
|
||||||
if(target.hp==2) return 1.5;
|
target:target,
|
||||||
return 0.5;
|
card:card
|
||||||
|
})?2:1)) return [1,1];
|
||||||
|
}
|
||||||
},
|
},
|
||||||
maixie:true,
|
threaten:function(player,target){
|
||||||
|
return Math.max(0.5,target.getDamagedHp()/2);
|
||||||
|
},
|
||||||
|
maixie:true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
yinghun_ol_sunjian:{audio:2},
|
yinghun_ol_sunjian:{audio:2},
|
||||||
|
@ -5405,7 +5471,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
huoji:{
|
huoji:{
|
||||||
audio:2,
|
audio:2,
|
||||||
enable:'phaseUse',
|
enable:'chooseToUse',
|
||||||
filterCard:function(card){
|
filterCard:function(card){
|
||||||
return get.color(card)=='red';
|
return get.color(card)=='red';
|
||||||
},
|
},
|
||||||
|
@ -5416,7 +5482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
position:'hs',
|
position:'hs',
|
||||||
prompt:'将一张红色牌当火攻使用',
|
prompt:'将一张红色牌当火攻使用',
|
||||||
check:function(card){
|
check:function(card){
|
||||||
var player=_status.currentPhase;
|
var player=get.player();
|
||||||
if(player.countCards('h')>player.hp){
|
if(player.countCards('h')>player.hp){
|
||||||
return 6-get.value(card);
|
return 6-get.value(card);
|
||||||
}
|
}
|
||||||
|
@ -5498,50 +5564,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
threaten:1.2
|
threaten:1.2
|
||||||
},
|
},
|
||||||
lianhuan:{
|
|
||||||
audio:'lianhuan1',
|
|
||||||
group:['lianhuan1','lianhuan2']
|
|
||||||
},
|
|
||||||
lianhuan1:{
|
|
||||||
audio:2,
|
|
||||||
audioname:['re_pangtong'],
|
|
||||||
enable:'chooseToUse',
|
|
||||||
filter:function(event,player){
|
|
||||||
return player.countCards('hs',{suit:'club'})>0;
|
|
||||||
},
|
|
||||||
position:'hs',
|
|
||||||
filterCard:function(card){
|
|
||||||
return get.suit(card)=='club';
|
|
||||||
},
|
|
||||||
viewAs:{name:'tiesuo'},
|
|
||||||
prompt:'将一张梅花牌当铁锁连环使用',
|
|
||||||
check:function(card){return 4.5-get.value(card)}
|
|
||||||
},
|
|
||||||
lianhuan2:{
|
|
||||||
audio:2,
|
|
||||||
popup:'lianhuan',
|
|
||||||
enable:'phaseUse',
|
|
||||||
filter:(event,player)=>player.hasCard(card=>lib.skill.lianhuan2.filterCard(card,player),'h'),
|
|
||||||
filterCard:(card,player)=>get.suit(card)=='club'&&player.canRecast(card),
|
|
||||||
check:function(card){
|
|
||||||
return 5-get.useful(card);
|
|
||||||
},
|
|
||||||
content:function(){
|
|
||||||
player.recast(cards);
|
|
||||||
},
|
|
||||||
discard:false,
|
|
||||||
lose:false,
|
|
||||||
delay:false,
|
|
||||||
prompt:'将一张梅花牌置入弃牌堆并摸一张牌',
|
|
||||||
ai:{
|
|
||||||
basic:{
|
|
||||||
order:1
|
|
||||||
},
|
|
||||||
result:{
|
|
||||||
player:1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
niepan:{
|
niepan:{
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['re_pangtong'],
|
audioname:['re_pangtong'],
|
||||||
|
@ -6238,30 +6260,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
useShan:true,
|
useShan:true,
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'respondShan')){
|
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||||
var hastarget=game.hasPlayer(function(current){
|
target: target,
|
||||||
return get.attitude(target,current)<0;
|
card: card
|
||||||
});
|
},true)){
|
||||||
var be=target.countCards('e',{color:'black'});
|
let club=0,spade=0;
|
||||||
if(target.countCards('h','shan')&&be){
|
if(game.hasPlayer(function(current){
|
||||||
if(!target.hasSkill('guidao')) return 0;
|
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||||
return [0,hastarget?target.countCards('he')/2:0];
|
})){
|
||||||
|
club=2;
|
||||||
|
spade=4;
|
||||||
}
|
}
|
||||||
if(target.countCards('h','shan')&&target.countCards('h')>2){
|
if(!target.isHealthy()) club+=2;
|
||||||
if(!target.hasSkill('guidao')) return 0;
|
if(!club&&!spade) return 1;
|
||||||
return [0,hastarget?target.countCards('h')/4:0];
|
if(!target.mayHaveShan(player)) return 1-0.1*Math.min(5,target.countCards('hs'));
|
||||||
|
if(!target.hasSkillTag('rejudge')) return [1,(club+spade)/4];
|
||||||
|
let pos=player.hasSkillTag('viewHandcard',null,target,true)?'hes':'e',better=club>spade?'club':'spade',max=0;
|
||||||
|
target.hasCard(function(cardx){
|
||||||
|
if(get.suit(cardx)===better){
|
||||||
|
max=2;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
|
if(spade&&get.color(cardx)==='black') max=1;
|
||||||
return [0,0];
|
},pos);
|
||||||
}
|
if(max===2) return [1,Math.max(club,spade)];
|
||||||
if(target.countCards('h')==0){
|
if(max===1) return [1,Math.min(club,spade)];
|
||||||
return [1.5,0];
|
if(pos==='e') return [1,Math.min(Math.max(1,target.countCards('hs'))*(club+spade)/4,Math.max(club,spade))];
|
||||||
}
|
return [1,(club+spade)/4];
|
||||||
if(target.countCards('h')==1&&!be){
|
|
||||||
return [1.2,0];
|
|
||||||
}
|
|
||||||
if(!target.hasSkill('guidao')) return [1,0.05];
|
|
||||||
return [1,Math.min(0.5,(target.countCards('h')+be)/4)];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6458,11 +6483,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger:{source:'damageSource'},
|
trigger:{source:'damageSource'},
|
||||||
forced:true,
|
forced:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return get.distance(player,event.player)<=1&&player.isDamaged();
|
return event.kuangguCheck&&player.isDamaged();
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
player.recover(trigger.num);
|
player.recover(trigger.num);
|
||||||
}
|
},
|
||||||
|
group:'kuanggu_check',
|
||||||
|
subSkill:{
|
||||||
|
check:{
|
||||||
|
charlotte:true,
|
||||||
|
trigger:{source:'damage'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return get.distance(player,event.player)<=1;
|
||||||
|
},
|
||||||
|
firstDo:true,
|
||||||
|
silent:true,
|
||||||
|
content:function(){
|
||||||
|
trigger.kuangguCheck=true;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
tianxiang:{
|
tianxiang:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -6859,6 +6899,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
xinhongyan:{
|
xinhongyan:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
audioname:['sb_xiaoqiao'],
|
||||||
mod:{
|
mod:{
|
||||||
suit:function(card,suit){
|
suit:function(card,suit){
|
||||||
if(suit=='spade') return 'heart';
|
if(suit=='spade') return 'heart';
|
||||||
|
@ -7206,17 +7247,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
useShan:true,
|
useShan:true,
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'respondShan')){
|
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||||
var hastarget=game.hasPlayer(function(current){
|
target: target,
|
||||||
return get.attitude(target,current)<0;
|
card: card
|
||||||
});
|
},true)&&game.hasPlayer(function(current){
|
||||||
if(target.countCards('h','shan')&&target.countCards('e',{suit:'spade'})){
|
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||||
return [0,hastarget?target.countCards('he')/2:0];
|
})){
|
||||||
}
|
if(!target.mayHaveShan(player)) return 1-0.1*Math.min(5,target.countCards('hs'));
|
||||||
if(target.countCards('h','shan')){
|
if(!target.hasSkillTag('rejudge')) return [1,1];
|
||||||
return [1,hastarget?target.countCards('he')/2:0];
|
let pos=player.hasSkillTag('viewHandcard',null,target,true)?'hes':'e';
|
||||||
}
|
if(target.hasCard(function(cardx){
|
||||||
return [1,target.countCards('h')/4];
|
return get.suit(cardx)==='spade';
|
||||||
|
},pos)) return [1,4];
|
||||||
|
if(pos==='e') return [1,Math.min(4,1+0.75*Math.max(1,target.countCards('hs')))];
|
||||||
|
return [1,1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8013,14 +8057,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
huoji:'火计',
|
huoji:'火计',
|
||||||
bazhen:'八阵',
|
bazhen:'八阵',
|
||||||
kanpo:'看破',
|
kanpo:'看破',
|
||||||
xinlianhuan:'连环',
|
|
||||||
ollianhuan:'连环',
|
|
||||||
lianhuan:'连环',
|
|
||||||
lianhuan1:'连环',
|
|
||||||
lianhuan3:'连环',
|
|
||||||
lianhuan2:'连铸',
|
|
||||||
lianhuan5:'连铸',
|
|
||||||
ollianhuan3:'连环',
|
|
||||||
niepan:'涅槃',
|
niepan:'涅槃',
|
||||||
oldniepan:'涅槃',
|
oldniepan:'涅槃',
|
||||||
quhu:'驱虎',
|
quhu:'驱虎',
|
||||||
|
@ -8033,12 +8069,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
luanji:'乱击',
|
luanji:'乱击',
|
||||||
xueyi:'血裔',
|
xueyi:'血裔',
|
||||||
mengjin:'猛进',
|
mengjin:'猛进',
|
||||||
xinlianhuan_info:' 你可以将一张♣手牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标的上限数+1。',
|
huoji_info:'你可以将一张红色手牌当作【火攻】使用。',
|
||||||
ollianhuan_info:' 你可以将一张♣牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标的上限数+1。',
|
|
||||||
huoji_info:'出牌阶段,你可以将你的任意一张红色手牌当作【火攻】使用。',
|
|
||||||
bazhen_info:'锁定技,若你的防具栏内没有牌且没有被废除,则你视为装备着【八卦阵】。',
|
bazhen_info:'锁定技,若你的防具栏内没有牌且没有被废除,则你视为装备着【八卦阵】。',
|
||||||
kanpo_info:'你可以将你的任意一张黑色手牌当做【无懈可击】使用。',
|
kanpo_info:'你可以将你的任意一张黑色手牌当做【无懈可击】使用。',
|
||||||
lianhuan_info:'出牌阶段,你可以将一张♣手牌当做【铁索连环】使用或重铸。',
|
|
||||||
niepan_info:'限定技,出牌阶段或当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
niepan_info:'限定技,出牌阶段或当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
||||||
oldniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
oldniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
||||||
quhu_info:'出牌阶段限一次,你可以与一名体力值大于你的角色拼点,若你赢,则该角色对其攻击范围内另一名由你指定的角色造成1点伤害。若你没赢,该角色对你造成一点伤害。',
|
quhu_info:'出牌阶段限一次,你可以与一名体力值大于你的角色拼点,若你赢,则该角色对其攻击范围内另一名由你指定的角色造成1点伤害。若你没赢,该角色对你造成一点伤害。',
|
||||||
|
@ -8106,7 +8139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
xinkuanggu:'狂骨',
|
xinkuanggu:'狂骨',
|
||||||
gzbuqu:'不屈',
|
gzbuqu:'不屈',
|
||||||
gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,你可以将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死流程。',
|
gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,你可以将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死流程。',
|
||||||
xinkuanggu_info:'当你对距离1以内的一名角色造成1点伤害后,你可以回复1点体力或摸一张牌。',
|
xinkuanggu_info:'当你造成1点伤害后,若受伤角色受到此伤害时你与其的距离不大于1,则你可以回复1点体力或摸一张牌。',
|
||||||
xinliegong_info:'①你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标。②当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。',
|
xinliegong_info:'①你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标。②当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。',
|
||||||
jiewei_info:'当你的武将牌翻面后,你可以摸一张牌。然后你可以使用一张锦囊牌或装备牌,并可以在此牌结算后弃置场上一张同类型的牌',
|
jiewei_info:'当你的武将牌翻面后,你可以摸一张牌。然后你可以使用一张锦囊牌或装备牌,并可以在此牌结算后弃置场上一张同类型的牌',
|
||||||
releiji_info:'当你使用或打出一张【闪】时,你可令一名其他角色进行一次判定:若结果为梅花,其受到一点雷电伤害,然后你回复一点体力;若结果为黑桃,其受到两点雷电伤害。',
|
releiji_info:'当你使用或打出一张【闪】时,你可令一名其他角色进行一次判定:若结果为梅花,其受到一点雷电伤害,然后你回复一点体力;若结果为黑桃,其受到两点雷电伤害。',
|
||||||
|
@ -8115,7 +8148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
jushou_info:'结束阶段,你可以摸3张牌,并将武将牌翻面。',
|
jushou_info:'结束阶段,你可以摸3张牌,并将武将牌翻面。',
|
||||||
moon_jushou_info:'结束阶段,你可以摸一张牌,并将武将牌翻面。',
|
moon_jushou_info:'结束阶段,你可以摸一张牌,并将武将牌翻面。',
|
||||||
liegong_info:'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能被响应。',
|
liegong_info:'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能被响应。',
|
||||||
kuanggu_info:'锁定技,当你造成伤害后,若受伤角色与你的距离不大于1,你回复X点体力(X为伤害值)。',
|
kuanggu_info:'锁定技,当你造成伤害后,若受伤角色受到此伤害时你与其的距离不大于1,你回复X点体力(X为伤害值)。',
|
||||||
tianxiang_info:'当你即将受到伤害时,你可以弃置一张♥手牌,将伤害转移给一名其他角色,然后该角色摸X张牌(X为其已损失的体力值)。',
|
tianxiang_info:'当你即将受到伤害时,你可以弃置一张♥手牌,将伤害转移给一名其他角色,然后该角色摸X张牌(X为其已损失的体力值)。',
|
||||||
hongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。',
|
hongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。',
|
||||||
buqu_info:'锁定技,当你处于濒死状态时,你亮出牌堆顶的一张牌并置于你的武将牌上,称之为“创”。若此牌的点数与你武将牌上已有的“创”点数均不同,则你回复至1体力。若点数相同,则将此牌置入弃牌堆。只要你的武将牌上有“创”,你的手牌上限便与“创”的数量相等。',
|
buqu_info:'锁定技,当你处于濒死状态时,你亮出牌堆顶的一张牌并置于你的武将牌上,称之为“创”。若此牌的点数与你武将牌上已有的“创”点数均不同,则你回复至1体力。若点数相同,则将此牌置入弃牌堆。只要你的武将牌上有“创”,你的手牌上限便与“创”的数量相等。',
|
||||||
|
@ -8152,6 +8185,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
dcwanglie_info:"①出牌阶段,你对其他角色使用的前两张牌无距离限制。②当你于出牌阶段内使用牌时,你可以令此牌不能被响应,然后你于本阶段内不能使用牌指定其他角色为目标。",
|
dcwanglie_info:"①出牌阶段,你对其他角色使用的前两张牌无距离限制。②当你于出牌阶段内使用牌时,你可以令此牌不能被响应,然后你于本阶段内不能使用牌指定其他角色为目标。",
|
||||||
nzry_shicai:"恃才",
|
nzry_shicai:"恃才",
|
||||||
nzry_shicai_info:"当你使用非装备牌结算结束后,或成为自己使用装备牌的目标后,若此牌与你本回合使用的牌类型均不同,则你可以将此牌置于牌堆顶,然后摸一张牌。",
|
nzry_shicai_info:"当你使用非装备牌结算结束后,或成为自己使用装备牌的目标后,若此牌与你本回合使用的牌类型均不同,则你可以将此牌置于牌堆顶,然后摸一张牌。",
|
||||||
|
lianhuan:'连环',
|
||||||
|
lianhuan_info:'你可以将♣手牌当作【铁索连环】使用或重铸。',
|
||||||
|
|
||||||
shenhua_feng:'神话再临·风',
|
shenhua_feng:'神话再临·风',
|
||||||
shenhua_huo:'神话再临·火',
|
shenhua_huo:'神话再临·火',
|
||||||
|
|
|
@ -4715,7 +4715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var player=_status.event.player,evt=_status.event.getParent();
|
var player=_status.event.player,evt=_status.event.getParent();
|
||||||
if(get.value(evt.card,evt.player)*get.attitude(player,evt.player)>0) return 0;
|
if(get.value(evt.card,evt.player)*get.attitude(player,evt.player)>0) return 0;
|
||||||
return Math.random()>(get.value(evt.card,evt.player)/6)?1:0;
|
return Math.random()>(get.value(evt.card,evt.player)/6)?1:0;
|
||||||
return 1;
|
//return 1;
|
||||||
});
|
});
|
||||||
'step 2'
|
'step 2'
|
||||||
if(result.index+event.addIndex==0){
|
if(result.index+event.addIndex==0){
|
||||||
|
|
1056
character/sp.js
1056
character/sp.js
File diff suppressed because it is too large
Load Diff
|
@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
dc_jikang:['male','wei',3,['new_qingxian','dcjuexiang']],
|
dc_jikang:['male','wei',3,['new_qingxian','dcjuexiang']],
|
||||||
dc_jsp_guanyu:['male','wei',4,['new_rewusheng','dcdanji']],
|
dc_jsp_guanyu:['male','wei',4,['new_rewusheng','dcdanji']],
|
||||||
dc_mengda:['male','wei',4,['dclibang','dcwujie']],
|
dc_mengda:['male','wei',4,['dclibang','dcwujie']],
|
||||||
dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji'],['unseen']],
|
dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']],
|
||||||
//dc_fuwan:['male','qun',4,['dcmoukui']],
|
//dc_fuwan:['male','qun',4,['dcmoukui']],
|
||||||
guānning:['male','shu',3,['dcxiuwen','dclongsong']],
|
guānning:['male','shu',3,['dcxiuwen','dclongsong']],
|
||||||
sunhuan:['male','wu',4,['dcniji'],['unseen']],
|
sunhuan:['male','wu',4,['dcniji'],['unseen']],
|
||||||
|
@ -41,7 +41,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
qiuliju:['male','qun','4/6',['koulve','qljsuiren']],
|
qiuliju:['male','qun','4/6',['koulve','qljsuiren']],
|
||||||
re_hucheer:['male','qun',4,['redaoji','fuzhong']],
|
re_hucheer:['male','qun',4,['redaoji','fuzhong']],
|
||||||
re_dongcheng:['male','qun',4,['xuezhao']],
|
re_dongcheng:['male','qun',4,['xuezhao']],
|
||||||
tangji:['female','qun',3,['jielie','kangge']],
|
tangji:['female','qun',3,['kangge','jielie']],
|
||||||
zhangheng:['male','qun',8,['dangzai','liangjue']],
|
zhangheng:['male','qun',8,['dangzai','liangjue']],
|
||||||
duanwei:['male','qun',4,['langmie']],
|
duanwei:['male','qun',4,['langmie']],
|
||||||
re_niujin:['male','wei',4,['recuorui','reliewei']],
|
re_niujin:['male','wei',4,['recuorui','reliewei']],
|
||||||
|
@ -608,10 +608,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
player.addTempSkill('dclvecheng_xiongluan');
|
player.addTempSkill('dclvecheng_xiongluan');
|
||||||
player.markAuto('dclvecheng_xiongluan',[target]);
|
player.markAuto('dclvecheng_xiongluan',[target]);
|
||||||
|
var cards=player.getCards('h','sha');
|
||||||
|
if(cards.length) player.addGaintag(cards,'dclvecheng_xiongluan');
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
threaten:2.1,
|
threaten:3.1,
|
||||||
order:9,
|
order:3.5,
|
||||||
expose:0.2,
|
expose:0.2,
|
||||||
result:{
|
result:{
|
||||||
target:function(player,target){
|
target:function(player,target){
|
||||||
|
@ -632,7 +634,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
forced:true,
|
forced:true,
|
||||||
popup:false,
|
popup:false,
|
||||||
onremove:true,
|
onremove:function(player,skill){
|
||||||
|
player.removeGaintag('dclvecheng_xiongluan');
|
||||||
|
delete player.storage[skill];
|
||||||
|
},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn());
|
return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn());
|
||||||
},
|
},
|
||||||
|
@ -673,11 +678,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
event.goto(1);
|
event.goto(1);
|
||||||
},
|
},
|
||||||
intro:{
|
intro:{
|
||||||
content:'可以对$随意大喊大叫'
|
content:'对$使用“掠城”【杀】无任何次数限制',
|
||||||
},
|
},
|
||||||
mod:{
|
mod:{
|
||||||
cardUsableTarget:function(card,player,target){
|
cardUsableTarget:function(card,player,target){
|
||||||
if(card.name=='sha'&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true;
|
if(!card.cards||card.cards.length!=1) return;
|
||||||
|
if(card.name=='sha'&&card.cards[0].hasGaintag('dclvecheng_xiongluan')&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -687,6 +693,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{player:'useCard'},
|
trigger:{player:'useCard'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
|
if(player.countCards('h')>=player.maxHp) return false;
|
||||||
var suit=get.suit(event.card);
|
var suit=get.suit(event.card);
|
||||||
return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit});
|
return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit});
|
||||||
},
|
},
|
||||||
|
@ -2814,9 +2821,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
filterCard:true,
|
filterCard:true,
|
||||||
selectCard:[1,Infinity],
|
selectCard:[1,Infinity],
|
||||||
check:function(card){
|
check:function(card){
|
||||||
var player=_status.event.player;
|
let player=_status.event.player,num=player.hasSkill('nifu')?15:8;
|
||||||
if(ui.selected.cards.length<=Math.max(1,player.needsToDiscard(),player.countCards('h')-4)) return 6-get.value(card);
|
if(ui.selected.cards.length<=Math.max(1,player.needsToDiscard(),player.countCards('h')-4)) return num-get.value(card);
|
||||||
return 4-get.value(card);
|
return num/2-get.value(card);
|
||||||
},
|
},
|
||||||
position:'h',
|
position:'h',
|
||||||
discard:false,
|
discard:false,
|
||||||
|
@ -2870,7 +2877,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
viewAs:{name:'juedou'},
|
viewAs:{name:'juedou'},
|
||||||
position:'h',
|
position:'h',
|
||||||
filterTarget:lib.filter.targetEnabled,
|
filterTarget:lib.filter.targetEnabled,
|
||||||
check:(card)=>get.name(card)=='sha'?7:5.5-get.value(card),
|
check:(card)=>get.name(card)=='sha'?0:5.5-get.value(card),
|
||||||
log:false,
|
log:false,
|
||||||
precontent:function(){
|
precontent:function(){
|
||||||
delete event.result.skill;
|
delete event.result.skill;
|
||||||
|
@ -4545,12 +4552,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
//唐姬
|
//唐姬
|
||||||
jielie:{
|
kangge:{
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{player:'phaseBegin'},
|
trigger:{player:'phaseBegin'},
|
||||||
direct:true,
|
direct:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.phaseNumber==1&&!player.storage.jielie&&game.hasPlayer(current=>current!=player);
|
return player.phaseNumber==1&&!player.storage.kangge&&game.hasPlayer(current=>current!=player);
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
@ -4560,31 +4567,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
var target=result.targets[0];
|
var target=result.targets[0];
|
||||||
player.logSkill('jielie',target);
|
player.logSkill('kangge',target);
|
||||||
player.addSkill('jielie_clear');
|
player.addSkill('kangge_clear');
|
||||||
player.storage.jielie=target;
|
player.storage.kangge=target;
|
||||||
player.markSkill('jielie');
|
player.markSkill('kangge');
|
||||||
game.delayx();
|
game.delayx();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
intro:{content:'已指定$为目标'},
|
intro:{content:'已指定$为目标'},
|
||||||
group:['jielie_draw','jielie_dying','jielie_die'],
|
group:['kangge_draw','kangge_dying','kangge_die'],
|
||||||
subSkill:{
|
subSkill:{
|
||||||
draw:{
|
draw:{
|
||||||
audio:'jielie',
|
audio:'kangge',
|
||||||
trigger:{
|
trigger:{
|
||||||
global:['gainAfter','loseAsyncAfter'],
|
global:['gainAfter','loseAsyncAfter'],
|
||||||
},
|
},
|
||||||
forced:true,
|
forced:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
if(player.countMark('jielie_draw')>=3) return false;
|
if(player.countMark('kangge_draw')>=3) return false;
|
||||||
var target=player.storage.jielie;
|
var target=player.storage.kangge;
|
||||||
return target&&target!=_status.currentPhase&&event.getg(target).length>0;
|
return target&&target!=_status.currentPhase&&event.getg(target).length>0;
|
||||||
},
|
},
|
||||||
logTarget:'player',
|
logTarget:'player',
|
||||||
content:function(){
|
content:function(){
|
||||||
var num=Math.min(3-player.countMark('jielie_draw'),trigger.getg(player.storage.jielie).length);
|
var num=Math.min(3-player.countMark('kangge_draw'),trigger.getg(player.storage.kangge).length);
|
||||||
player.addMark('jielie_draw',num,false);
|
player.addMark('kangge_draw',num,false);
|
||||||
player.draw(num);
|
player.draw(num);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -4595,18 +4602,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
popup:false,
|
popup:false,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.countMark('jielie_draw')>0;
|
return player.countMark('kangge_draw')>0;
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
player.removeMark('jielie_draw',player.countMark('jielie_draw'),false);
|
player.removeMark('kangge_draw',player.countMark('kangge_draw'),false);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
dying:{
|
dying:{
|
||||||
audio:'jielie',
|
audio:'kangge',
|
||||||
trigger:{global:'dying'},
|
trigger:{global:'dying'},
|
||||||
logTarget:'player',
|
logTarget:'player',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return event.player==player.storage.jielie&&event.player.hp<1&&!player.hasSkill('jielie_temp');
|
return event.player==player.storage.kangge&&event.player.hp<1&&!player.hasSkill('kangge_temp');
|
||||||
},
|
},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
return get.attitude(player,event.player)>0;
|
return get.attitude(player,event.player)>0;
|
||||||
|
@ -4614,15 +4621,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
prompt2:'令其将体力值回复至1点',
|
prompt2:'令其将体力值回复至1点',
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.player.recover(1-trigger.player.hp);
|
trigger.player.recover(1-trigger.player.hp);
|
||||||
player.addTempSkill('jielie_temp','roundStart');
|
player.addTempSkill('kangge_temp','roundStart');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
temp:{},
|
temp:{},
|
||||||
die:{
|
die:{
|
||||||
audio:'jielie',
|
audio:'kangge',
|
||||||
trigger:{global:'dieAfter'},
|
trigger:{global:'dieAfter'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return event.player==player.storage.jielie;
|
return event.player==player.storage.kangge;
|
||||||
},
|
},
|
||||||
forced:true,
|
forced:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -4636,24 +4643,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
threaten:2,
|
threaten:2,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
kangge:{
|
jielie:{
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{player:'damageBegin4'},
|
trigger:{player:'damageBegin4'},
|
||||||
direct:true,
|
direct:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return ((!event.source)||(event.source!=player&&event.source!=player.storage.jielie))&&player.storage.jielie&&player.storage.jielie.isIn();
|
return ((!event.source)||(event.source!=player&&event.source!=player.storage.kangge))&&player.storage.kangge&&player.storage.kangge.isIn();
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseControl(lib.suit.slice(0),'cancel2').set('prompt',get.prompt('kangge')).set('prompt2','防止伤害并改为失去等量体力,且令'+get.translation(player.storage.jielie)+'从弃牌堆中获得等量的花色牌').set('ai',function(){
|
player.chooseControl(lib.suit.slice(0),'cancel2').set('prompt',get.prompt('jielie')).set('prompt2','防止伤害并改为失去等量体力,且令'+get.translation(player.storage.kangge)+'从弃牌堆中获得等量的花色牌').set('ai',function(){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
if(get.attitude(player,player.storage.jielie)<=0) return 'cancel2';
|
if(get.attitude(player,player.storage.kangge)<=0) return 'cancel2';
|
||||||
return lib.suit.randomGet();
|
return lib.suit.randomGet();
|
||||||
});
|
});
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.control!='cancel2'){
|
if(result.control!='cancel2'){
|
||||||
event.suit=result.control;
|
event.suit=result.control;
|
||||||
player.logSkill('kangge',player.storage.jielie);
|
player.logSkill('jielie',player.storage.kangge);
|
||||||
trigger.cancel();
|
trigger.cancel();
|
||||||
player.loseHp(trigger.num);
|
player.loseHp(trigger.num);
|
||||||
}
|
}
|
||||||
|
@ -4667,7 +4674,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(card) cards.push(card);
|
if(card) cards.push(card);
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
if(cards.length) player.storage.jielie.gain(cards,'gain2');
|
if(cards.length) player.storage.kangge.gain(cards,'gain2');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
//张横
|
//张横
|
||||||
|
@ -8836,7 +8843,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
zongkui:{
|
zongkui:{
|
||||||
trigger:{player:'phaseBefore',global:'roundStart'},
|
trigger:{
|
||||||
|
player:'phaseBeforeEnd',
|
||||||
|
global:'roundStart',
|
||||||
|
},
|
||||||
direct:true,
|
direct:true,
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['tw_beimihu'],
|
audioname:['tw_beimihu'],
|
||||||
|
@ -10127,6 +10137,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
mushun:['mushun','sp_mushun'],
|
mushun:['mushun','sp_mushun'],
|
||||||
wangjun:['dc_wangjun','wangjun'],
|
wangjun:['dc_wangjun','wangjun'],
|
||||||
zoushi:['re_zoushi','jsrg_zoushi'],
|
zoushi:['re_zoushi','jsrg_zoushi'],
|
||||||
|
zhangmancheng:['dc_zhangmancheng','tw_zhangmancheng'],
|
||||||
},
|
},
|
||||||
translate:{
|
translate:{
|
||||||
lijue:"李傕",
|
lijue:"李傕",
|
||||||
|
@ -10208,7 +10219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
zongkui:'纵傀',
|
zongkui:'纵傀',
|
||||||
zongkui_mark:'纵傀',
|
zongkui_mark:'纵傀',
|
||||||
zongkui_mark_bg:'傀',
|
zongkui_mark_bg:'傀',
|
||||||
zongkui_info:'回合开始时,你可以指定一名未拥有“傀”标记的其他角色,令其获得一枚“傀”标记。每轮游戏开始时,你指定一名体力值最少且没有“傀”标记的其他角色,令其获得一枚“傀”标记。',
|
zongkui_info:'回合开始前,你可以指定一名未拥有“傀”标记的其他角色,令其获得一枚“傀”标记。一轮游戏开始时,你指定一名体力值最少且没有“傀”标记的其他角色,令其获得一枚“傀”标记。',
|
||||||
guju:'骨疽',
|
guju:'骨疽',
|
||||||
guju_info:'锁定技,拥有“傀”标记的角色受到伤害后,你摸一张牌。',
|
guju_info:'锁定技,拥有“傀”标记的角色受到伤害后,你摸一张牌。',
|
||||||
baijia:'拜假',
|
baijia:'拜假',
|
||||||
|
@ -10450,10 +10461,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
liangjue:'粮绝',
|
liangjue:'粮绝',
|
||||||
liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸两张牌。',
|
liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸两张牌。',
|
||||||
tangji:'唐姬',
|
tangji:'唐姬',
|
||||||
jielie:'抗歌',
|
kangge:'抗歌',
|
||||||
jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外得到牌后,你摸等量的牌(每回合至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。',
|
kangge_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外得到牌后,你摸等量的牌(每回合至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。',
|
||||||
kangge:'节烈',
|
jielie:'节烈',
|
||||||
kangge_info:'当你受到除自己和“抗歌”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“抗歌”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。',
|
jielie_info:'当你受到除自己和“抗歌”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“抗歌”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。',
|
||||||
re_dongcheng:'董承',
|
re_dongcheng:'董承',
|
||||||
xuezhao:'血诏',
|
xuezhao:'血诏',
|
||||||
xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力上限)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。',
|
xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力上限)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。',
|
||||||
|
@ -10632,7 +10643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
dclongsong_info:'出牌阶段开始时,你可以将一张红色牌交给一名其他角色。然后其须选择其所有的发动时机包含“出牌阶段”的技能,其于此阶段这些技能失效,你获得这些技能且至多可以发动一次。',
|
dclongsong_info:'出牌阶段开始时,你可以将一张红色牌交给一名其他角色。然后其须选择其所有的发动时机包含“出牌阶段”的技能,其于此阶段这些技能失效,你获得这些技能且至多可以发动一次。',
|
||||||
dc_zhangmancheng:'张曼成',
|
dc_zhangmancheng:'张曼成',
|
||||||
dclvecheng:'掠城',
|
dclvecheng:'掠城',
|
||||||
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用【杀】无次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
|
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
|
||||||
dczhongji:'螽集',
|
dczhongji:'螽集',
|
||||||
dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。',
|
dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。',
|
||||||
dc_mengda:'孟达',
|
dc_mengda:'孟达',
|
||||||
|
|
|
@ -1459,6 +1459,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
xinzhiheng:{
|
xinzhiheng:{
|
||||||
audio:'zhiheng',
|
audio:'zhiheng',
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num<=0||get.itemtype(card)!=='card'||get.type(card)!=='equip') return num;
|
||||||
|
let eq=player.getEquip(get.subtype(card));
|
||||||
|
if(eq&&get.equipValue(card)-get.equipValue(eq)<Math.max(1.2,6-player.hp)) return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
// alter:true,
|
// alter:true,
|
||||||
usable:1,
|
usable:1,
|
||||||
|
@ -1503,16 +1511,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
delay:{}
|
delay:{}
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:1,
|
order:function(item,player){
|
||||||
|
if(player.hasCard((i)=>get.value(i)>Math.max(6,9-player.hp),'he')) return 1;
|
||||||
|
return 10;
|
||||||
|
},
|
||||||
result:{
|
result:{
|
||||||
player:1
|
player:1
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg&&arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat().skill.xinzhiheng&&player.hasCard((card)=>get.name(card)!=='tao','h');
|
||||||
|
},
|
||||||
threaten:1.55
|
threaten:1.55
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
zhiheng:{
|
zhiheng:{
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['gz_jun_sunquan'],
|
audioname:['gz_jun_sunquan'],
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num<=0||get.itemtype(card)!=='card'||get.type(card)!=='equip') return num;
|
||||||
|
let eq=player.getEquip(get.subtype(card));
|
||||||
|
if(eq&&get.equipValue(card)-get.equipValue(eq)<Math.max(1.2,6-player.hp)) return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
locked:false,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
usable:1,
|
usable:1,
|
||||||
position:'he',
|
position:'he',
|
||||||
|
|
|
@ -1100,20 +1100,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
logTarget:'player',
|
logTarget:'player',
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
var att=get.attitude(event.player,player);
|
let att=get.attitude(player,event.player);
|
||||||
if(player.hasSkill('twzhiqu')){
|
if(att>0) return true;
|
||||||
var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
|
if(!player.hasSkill('twzhiqu')) return false;
|
||||||
if(cnt>=2){
|
let cnt=game.countPlayer(current=>get.distance(player,current)===2);
|
||||||
if(att<0) return true;
|
if(cnt>2||cnt===2&&Math.abs(att)<2||cnt&&Math.abs(att)<1) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
if(att<0&&cnt>=2||att>0&&!cnt) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(att<0) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
@ -1126,20 +1118,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return _status.event.choice;
|
return _status.event.choice;
|
||||||
}).set('choice',function(){
|
}).set('choice',function(){
|
||||||
var att=get.attitude(target,player);
|
var att=get.attitude(target,player);
|
||||||
if(att==0) return 0;
|
if(att===0) return 0;
|
||||||
if(player.hasSkill('twzhiqu')){
|
if(player.hasSkill('twzhiqu')){
|
||||||
var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
|
var cnt=game.countPlayer(current=>get.distance(player,current)===2);
|
||||||
if(cnt>=2){
|
if(att>0){
|
||||||
if(att<0) return 1;
|
if(cnt||player.needsToDiscard(1)) return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(!cnt) return 0;
|
||||||
|
if(cnt>=2||get.distance(target,player,'attack')===2||get.distance(target,player)===2) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(att<0&&cnt>=2||att>0&&!cnt) return 1;
|
if(att<0||player.needsToDiscard(1)&&game.hasPlayer(function(current){
|
||||||
return 0;
|
return current!==player&¤t!==target&&!player.inRange(current);
|
||||||
}
|
})) return 0;
|
||||||
else{
|
|
||||||
if(att<0) return 0;
|
|
||||||
return [0,1].randomGet();
|
return [0,1].randomGet();
|
||||||
}
|
|
||||||
}());
|
}());
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.index==0){
|
if(result.index==0){
|
||||||
|
@ -1360,6 +1353,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
locked:false,
|
locked:false,
|
||||||
direct:true,
|
direct:true,
|
||||||
onremove:true,
|
onremove:true,
|
||||||
|
intro:{
|
||||||
|
content:'players'
|
||||||
|
},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
|
return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
|
||||||
},
|
},
|
||||||
|
@ -4570,6 +4566,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
forced:true,
|
forced:true,
|
||||||
logTarget:'target',
|
logTarget:'target',
|
||||||
init:function(player){
|
init:function(player){
|
||||||
|
var target=_status.currentPhase;
|
||||||
|
if(!target||!target!=player) return;
|
||||||
if(!player.getStorage('twxiangyu_range').length){
|
if(!player.getStorage('twxiangyu_range').length){
|
||||||
var targets=game.filterPlayer(current=>{
|
var targets=game.filterPlayer(current=>{
|
||||||
return current.getHistory('lose').length;
|
return current.getHistory('lose').length;
|
||||||
|
@ -4591,7 +4589,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
mod:{
|
mod:{
|
||||||
attackRange:function(player,num){
|
attackRange:function(player,num){
|
||||||
return num+player.getStorage('twxiangyu_range').length;
|
return num+Math.min(5,player.getStorage('twxiangyu_range').length);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -4622,7 +4620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
marktext:'羽',
|
marktext:'羽',
|
||||||
intro:{
|
intro:{
|
||||||
content:function(storage,player){
|
content:function(storage,player){
|
||||||
var num=storage?storage.length:0;
|
var num=Math.min(5,storage?storage.length:0);
|
||||||
return '攻击范围+'+num;
|
return '攻击范围+'+num;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -8220,7 +8218,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return names.length>0&&player.hasCard(function(card){
|
return names.length>0&&player.hasCard(function(card){
|
||||||
return names.includes(get.name(card));
|
return names.includes(get.name(card));
|
||||||
},'hs');
|
},'hs');
|
||||||
return false;
|
//return false;
|
||||||
},
|
},
|
||||||
group:'twchaofeng_compare',
|
group:'twchaofeng_compare',
|
||||||
chooseButton:{
|
chooseButton:{
|
||||||
|
@ -11389,6 +11387,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
twzhian:{
|
twzhian:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
init:function(player){
|
||||||
|
game.addGlobalSkill('twzhian_ai');
|
||||||
|
},
|
||||||
|
onremove:function(player){
|
||||||
|
game.removeGlobalSkill('twzhian_ai');
|
||||||
|
},
|
||||||
usable:1,
|
usable:1,
|
||||||
trigger:{global:'useCardAfter'},
|
trigger:{global:'useCardAfter'},
|
||||||
direct:true,
|
direct:true,
|
||||||
|
@ -11468,6 +11472,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
'step 2'
|
'step 2'
|
||||||
if(result.bool&&target.getCards('ej').contains(trigger.cards[0])) player.gain(trigger.cards,target,'give','bySelf');
|
if(result.bool&&target.getCards('ej').contains(trigger.cards[0])) player.gain(trigger.cards,target,'give','bySelf');
|
||||||
},
|
},
|
||||||
|
subSkill:{
|
||||||
|
ai:{
|
||||||
|
trigger:{player:'dieAfter'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return !game.hasPlayer((current)=>current.hasSkill('twzhian'),true);
|
||||||
|
},
|
||||||
|
silent:true,
|
||||||
|
forceDie:true,
|
||||||
|
content:function(){
|
||||||
|
game.removeGlobalSkill('twzhian_ai');
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
effect:{
|
||||||
|
player:function(card,player,target){
|
||||||
|
if(get.type(card)!=='delay'&&get.type(card)!=='equip') return 1;
|
||||||
|
let za=game.findPlayer((cur)=>cur.hasSkill('twzhian')&&(!cur.storage.counttrigger||!cur.storage.counttrigger.twzhian)&&get.attitude(player,cur)<=0);
|
||||||
|
if(za) return [0.5,-0.8];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
twyujue:{
|
twyujue:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -14119,7 +14145,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
equan_info:'锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有技能失效直到回合结束。',
|
equan_info:'锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有技能失效直到回合结束。',
|
||||||
manji:'蛮汲',
|
manji:'蛮汲',
|
||||||
manji_info:'锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。',
|
manji_info:'锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。',
|
||||||
wuban:'吴班',
|
wuban:'TW吴班',
|
||||||
|
wuban_prefix:'TW',
|
||||||
jintao:'进讨',
|
jintao:'进讨',
|
||||||
jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。',
|
jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。',
|
||||||
yuejiu:'TW乐就',
|
yuejiu:'TW乐就',
|
||||||
|
@ -14275,7 +14302,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。',
|
twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。',
|
||||||
twqingtao:'清滔',
|
twqingtao:'清滔',
|
||||||
twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
|
twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
|
||||||
tw_jiangji:'蒋济',
|
tw_jiangji:'TW蒋济',
|
||||||
|
tw_jiangji_prefix:'TW',
|
||||||
twjichou:'急筹',
|
twjichou:'急筹',
|
||||||
twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
|
twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
|
||||||
twjilun:'机论',
|
twjilun:'机论',
|
||||||
|
@ -14308,7 +14336,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
twxiongzheng_info:'一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。',
|
twxiongzheng_info:'一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。',
|
||||||
twluannian:'乱年',
|
twluannian:'乱年',
|
||||||
twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。',
|
twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。',
|
||||||
tw_baoxin:'鲍信',
|
tw_baoxin:'TW鲍信',
|
||||||
|
tw_baoxin_prefix:'TW',
|
||||||
twmutao:'募讨',
|
twmutao:'募讨',
|
||||||
twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。',
|
twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。',
|
||||||
twyimou:'毅谋',
|
twyimou:'毅谋',
|
||||||
|
@ -14473,7 +14502,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
tw_liuzhang_prefix:'TW',
|
tw_liuzhang_prefix:'TW',
|
||||||
twyaohu:'邀虎',
|
twyaohu:'邀虎',
|
||||||
twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。',
|
twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。',
|
||||||
tw_liwei:'李遗',
|
tw_liwei:'TW李遗',
|
||||||
|
tw_liwei_prefix:'TW',
|
||||||
twjiaohua:'教化',
|
twjiaohua:'教化',
|
||||||
twjiaohua_info:'当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。',
|
twjiaohua_info:'当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。',
|
||||||
tw_yanxiang:'阎象',
|
tw_yanxiang:'阎象',
|
||||||
|
|
|
@ -94,8 +94,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'],
|
sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'],
|
||||||
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi'],
|
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi'],
|
||||||
sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'],
|
sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'],
|
||||||
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun','zhoubuyi'],
|
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun','zhoubuyi','dc_xujing'],
|
||||||
sp2_qifu:['ol_guansuo','dc_zhaoxiang','dc_xujing'],
|
sp2_qifu:['ol_guansuo','dc_zhaoxiang'],
|
||||||
sp2_gaoshan:['wanglang','liuhui'],
|
sp2_gaoshan:['wanglang','liuhui'],
|
||||||
sp2_wumiao:['wu_zhugeliang','wu_luxun'],
|
sp2_wumiao:['wu_zhugeliang','wu_luxun'],
|
||||||
}
|
}
|
||||||
|
@ -2358,22 +2358,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}).set('choice',(()=>{
|
}).set('choice',(()=>{
|
||||||
var choicesx=choices.slice();
|
var choicesx=choices.slice();
|
||||||
var cards=player.getCards('hs');
|
var cards=player.getCards('hs');
|
||||||
var bool1=get.tag(trigger.card,'damage')&&choicesx.contains('选项一')&&trigger.targets.some(current=>{
|
var bool1=get.tag(trigger.card,'damage')&&choicesx.includes('选项一')&&trigger.targets.some(current=>{
|
||||||
return get.attitude(player,current)<0;
|
return get.attitude(player,current)<0;
|
||||||
}),bool2=choicesx.contains('选项二')&&game.countPlayer(current=>get.attitude(player,current)>0)>=1;
|
}),bool2=choicesx.includes('选项二');
|
||||||
if(!bool1&&!bool2){
|
if(bool2) bool2=game.countPlayer(function(current){
|
||||||
|
return player!=current&&get.attitude(player,current)>0;
|
||||||
|
});
|
||||||
|
else bool2=0;
|
||||||
|
if(bool1||bool2){
|
||||||
for(var i=0;i<cards.length;i++){
|
for(var i=0;i<cards.length;i++){
|
||||||
var name=get.name(cards[i]);
|
var name=get.name(cards[i]);
|
||||||
if(player.getStorage('dcqingshi_clear').contains(name)) continue;
|
if(player.getStorage('dcqingshi_clear').includes(name)) continue;
|
||||||
for(var j=i+1;j<cards.length;j++){
|
for(var j=i+1;j<cards.length;j++){
|
||||||
if(name==get.name(cards[j])&&get.position(cards[i])+get.position(cards[j])!='ss'&&player.hasValueTarget(cards[i])){
|
if(name===get.name(cards[j])&&get.position(cards[i])+get.position(cards[j])!=='ss'&&player.hasValueTarget(cards[i])){
|
||||||
choicesx.remove('选项三');
|
choicesx.remove('选项三');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(choicesx.contains('选项三')) return '选项三';
|
if(bool2>2) return '选项二';
|
||||||
|
if(choicesx.includes('选项三')) return '选项三';
|
||||||
|
if(bool2===2) return '选项二';
|
||||||
if(bool1) return '选项一';
|
if(bool1) return '选项一';
|
||||||
if(bool2) return '选项二';
|
if(bool2) return '选项二';
|
||||||
return 'cancel2';
|
return 'cancel2';
|
||||||
|
@ -2486,6 +2492,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
effect:{
|
effect:{
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)==='card'&&card.hasGaintag('dczhizhe')) return num+0.16;
|
||||||
|
},
|
||||||
|
aiValue:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)==='card'&&card.hasGaintag('dczhizhe')) return 2*num;
|
||||||
|
},
|
||||||
|
aiUseful:function(player,card,num){
|
||||||
|
if(num>0&&!player._dczhizhe_mod&&get.itemtype(card)==='card'&&card.hasGaintag('dczhizhe')){
|
||||||
|
if(player.canIgnoreHandcard(card)) return Infinity;
|
||||||
|
player._dczhizhe_mod=true;
|
||||||
|
if(player.hp<3&&player.needsToDiscard(player.countCards('h',(cardx)=>{
|
||||||
|
if(player.canIgnoreHandcard(cardx)||get.useful(cardx)>6) return true;
|
||||||
|
return false;
|
||||||
|
}))) return num*1.5;
|
||||||
|
return num*10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
trigger:{player:['useCardAfter','respondAfter']},
|
trigger:{player:['useCardAfter','respondAfter']},
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
forced:true,
|
forced:true,
|
||||||
|
@ -2778,7 +2803,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
order:1,
|
order:1,
|
||||||
result:{
|
result:{
|
||||||
target:function(player,target){
|
target:function(player,target){
|
||||||
if(game.roundNumber==1&&ui.cardPile.childNodes.length>game.countPlayer()*5&&!game.hasPlayer(current=>current.hp<=2)&&!player.hasSkill('dcjijiao_risutoa')) return 0;
|
if(ui.cardPile.childNodes.length>game.players.length*5&&!player.hasSkill('dcjijiao_risutoa')&&
|
||||||
|
!game.hasPlayer(current=>current.hp<=1)&&game.countPlayer(current=>current.hp===2&¤t.countCards('hes')<3)<=1) return 0;
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3028,8 +3054,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},true);
|
},true);
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:5.5,
|
order:function(){
|
||||||
result:{player:1}
|
return 0.9*get.order({name:'juedou'});
|
||||||
|
},
|
||||||
|
tag:{
|
||||||
|
respond:2,
|
||||||
|
respondSha:2,
|
||||||
|
damage:1,
|
||||||
|
},
|
||||||
|
result:{
|
||||||
|
player:function(player){
|
||||||
|
let target=null, maxval=0;
|
||||||
|
for(let i of game.players){
|
||||||
|
let jdeff=get.effect(i,{
|
||||||
|
name:'juedou',
|
||||||
|
isCard:true,
|
||||||
|
cards:ui.selected.cards,
|
||||||
|
storage:{dcctjiuxian:true}
|
||||||
|
},player,player);
|
||||||
|
if(i===player||!player.canUse({
|
||||||
|
name:'juedou',
|
||||||
|
isCard:true,
|
||||||
|
cards:ui.selected.cards,
|
||||||
|
storage:{dcctjiuxian:true}
|
||||||
|
},i)||jdeff<0) continue;
|
||||||
|
let receff=0;
|
||||||
|
game.filterPlayer(function(current){
|
||||||
|
if(player!=current&&i.inRange(current)&¤t.isDamaged()) receff=Math.max(receff,get.recoverEffect(current,i,i));
|
||||||
|
});
|
||||||
|
if(jdeff+receff/5>maxval){
|
||||||
|
target=i;
|
||||||
|
maxval=jdeff+receff/5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(target) return maxval/80;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
help:{
|
help:{
|
||||||
|
@ -3609,6 +3670,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.logSkill('dcyuandi',target);
|
player.logSkill('dcyuandi',target);
|
||||||
if(result.control=='选项一'){
|
if(result.control=='选项一'){
|
||||||
player.discardPlayerCard(target,'h',true);
|
player.discardPlayerCard(target,'h',true);
|
||||||
|
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.15);
|
||||||
}
|
}
|
||||||
else game.asyncDraw([target,player]);
|
else game.asyncDraw([target,player]);
|
||||||
}
|
}
|
||||||
|
@ -3863,6 +3925,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
dcaichen:{
|
dcaichen:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
init:function(player){
|
||||||
|
game.addGlobalSkill('dcaichen_hit');
|
||||||
|
},
|
||||||
|
onremove:function(player){
|
||||||
|
game.removeGlobalSkill('dcaichen_hit');
|
||||||
|
},
|
||||||
trigger:{
|
trigger:{
|
||||||
player:['loseAfter','phaseDiscardBefore'],
|
player:['loseAfter','phaseDiscardBefore'],
|
||||||
global:'loseAsyncAfter',
|
global:'loseAsyncAfter',
|
||||||
|
@ -3886,6 +3954,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.directHit.add(player);
|
trigger.directHit.add(player);
|
||||||
game.log(player,'不可响应',trigger.card);
|
game.log(player,'不可响应',trigger.card);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
subSkill:{
|
||||||
|
hit:{
|
||||||
|
trigger:{player:'dieAfter'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return !game.hasPlayer(current=>current.hasSkill('dcaichen'));
|
||||||
|
},
|
||||||
|
silent:true,
|
||||||
|
forceDie:true,
|
||||||
|
content:function(){
|
||||||
|
game.removeGlobalSkill('dcaichen_hit');
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
directHit_ai:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
return arg&&arg.card&&arg.target&&arg.target.hasSkill('dcaichen')&&ui.cardPile.childNodes.length<40&&get.suit(arg.card)==='spade';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//杨彪
|
//杨彪
|
||||||
|
@ -4348,7 +4435,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(cards.length){
|
if(cards.length){
|
||||||
player.chooseButton(['暗织:选择令'+get.translation(target)+'获得的牌',cards],true,Math.min(cards.length,2)).set('ai',button=>{
|
player.chooseButton(['暗织:选择令'+get.translation(target)+'获得的牌',cards],true,Math.min(cards.length,2)).set('ai',button=>{
|
||||||
var player=_status.event.player,target=_status.event.getParent().target;
|
var player=_status.event.player,target=_status.event.getParent().target;
|
||||||
return get.sgnAttitude(player,target)*get.buttonValue(button);
|
return get.sgnAttitude(player,target)*get.value(button.link,target);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}else event.finish();
|
}else event.finish();
|
||||||
|
@ -4498,11 +4585,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
//周宣
|
//周宣
|
||||||
dcwumei:{
|
dcwumei:{
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{player:'phaseBegin'},
|
trigger:{player:'phaseBeginStart'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return !player.hasSkill('dcwumei_used');
|
return !player.hasSkill('dcwumei_used');
|
||||||
},
|
},
|
||||||
priority:10,//离谱的优先机制
|
|
||||||
direct:true,
|
direct:true,
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
@ -4529,17 +4615,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger._triggered=5;
|
trigger._triggered=5;
|
||||||
var evt=player.insertPhase();
|
var evt=player.insertPhase();
|
||||||
delete evt.skill;
|
delete evt.skill;
|
||||||
|
game.broadcastAll(function(player){
|
||||||
|
player.classList.remove('glow_phase');
|
||||||
|
delete _status.currentPhase;
|
||||||
|
},player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
used:{charlotte:true},
|
used:{charlotte:true},
|
||||||
wake:{
|
wake:{
|
||||||
|
init:function(player){
|
||||||
|
game.addGlobalSkill('dcwumei_all');
|
||||||
|
},
|
||||||
|
onremove:function(player){
|
||||||
|
game.removeGlobalSkill('dcwumei_all');
|
||||||
|
delete player.storage.dcwumei_wake;
|
||||||
|
},
|
||||||
trigger:{player:'phaseJieshuBegin'},
|
trigger:{player:'phaseJieshuBegin'},
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
popup:false,
|
popup:false,
|
||||||
forced:true,
|
forced:true,
|
||||||
onremove:true,
|
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.storage.dcwumei_wake&&player.storage.dcwumei_wake.length;
|
return player.storage.dcwumei_wake&&player.storage.dcwumei_wake.length;
|
||||||
},
|
},
|
||||||
|
@ -4572,17 +4668,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
all:{
|
||||||
|
trigger:{player:'dieAfter'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return !game.hasPlayer(current=>current.hasSkill('dcwumei_wake'));
|
||||||
|
},
|
||||||
|
silent:true,
|
||||||
|
forceDie:true,
|
||||||
|
content:function(){
|
||||||
|
game.removeGlobalSkill('dcwumei_all');
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
effect:{
|
effect:{
|
||||||
player_use:function(card,player,target){
|
player_use:function(card,player,target){
|
||||||
|
if(get.tag(card,'recover')&&target.hp>0) return 0;
|
||||||
if(get.tag(card,'damage')) return 0.5;
|
if(get.tag(card,'damage')) return 0.5;
|
||||||
},
|
|
||||||
target:function(card,player,target){
|
|
||||||
if(_status.event.type!='phase') return;
|
|
||||||
if (get.tag(card,'recover')){
|
|
||||||
return [1,1-target.hp];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7722,6 +7824,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
onremove:true,
|
onremove:true,
|
||||||
subSkill:{
|
subSkill:{
|
||||||
insert:{
|
insert:{
|
||||||
|
mark:true,
|
||||||
|
intro:{
|
||||||
|
content:'players'
|
||||||
|
},
|
||||||
trigger:{global:'phaseAfter'},
|
trigger:{global:'phaseAfter'},
|
||||||
forced:true,
|
forced:true,
|
||||||
charlotte:true,
|
charlotte:true,
|
||||||
|
@ -10447,6 +10553,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
player.draw(2+get.sgn(trigger.player.hp-player.hp));
|
player.draw(2+get.sgn(trigger.player.hp-player.hp));
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
effect:{
|
||||||
|
target:function(card,player,target){
|
||||||
|
if(get.itemtype(player)!=='player'||player===target) return 1;
|
||||||
|
let num=1,ds=2+get.sgn(player.hp-target.hp);
|
||||||
|
if(player===_status.currentPhase&&_status.currentPhase.group==='qun'&&target.hasZhuSkill('yuwei',player)) num=2;
|
||||||
|
if(target.getHistory('gain',function(evt){
|
||||||
|
return evt.getParent(2).name==='shiyuan'&&evt.cards.length===ds;
|
||||||
|
}).length>=num) return 1;
|
||||||
|
let name=get.name(card);
|
||||||
|
if(get.tag(card,'lose')||name==='huogong'||name==='juedou'||name==='tiesuo') return [1,ds];
|
||||||
|
if(!target.hasFriend()) return 1;
|
||||||
|
return [1,0.8*ds];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
dushi:{
|
dushi:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -10483,8 +10605,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
yuwei:{
|
yuwei:{
|
||||||
|
audio:2,
|
||||||
|
trigger:{player:'shiyuanBegin'},
|
||||||
|
filter:function(event,player){
|
||||||
|
return _status.currentPhase.group=='qun';
|
||||||
|
},
|
||||||
zhuSkill:true,
|
zhuSkill:true,
|
||||||
locked:true,
|
forced:true,
|
||||||
|
content:function(){},
|
||||||
ai:{combo:'shiyuan'},
|
ai:{combo:'shiyuan'},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -10903,11 +11031,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.judge(function(card){
|
player.judge(function(card){
|
||||||
var type=get.subtype(card);
|
var type=get.subtype(card);
|
||||||
return ['equip1','equip4','equip3','equip6'].contains(type)?6:-6;
|
return ['equip1','equip4','equip3','equip6'].contains(type)?6:-6;
|
||||||
switch(type){
|
// switch(type){
|
||||||
case 'equip':return 4;
|
// case 'equip':return 4;
|
||||||
case 'trick':return -4;
|
// case 'trick':return -4;
|
||||||
default:return 0;
|
// default:return 0;
|
||||||
}
|
// }
|
||||||
}).judge2=function(result){
|
}).judge2=function(result){
|
||||||
return result.bool;
|
return result.bool;
|
||||||
};
|
};
|
||||||
|
@ -10986,7 +11114,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
viewAs:{name:'nanman'},
|
viewAs:{name:'nanman'},
|
||||||
ai:{order:0.1},
|
ai:{
|
||||||
|
order:0.1,
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat('skill').mansi_viewas&&player.hasCard((card)=>get.name(card)!=='tao','h');
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
souying:{
|
souying:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -12235,6 +12369,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
luotong:['dc_luotong','luotong'],
|
luotong:['dc_luotong','luotong'],
|
||||||
dc_wangchang:['dc_wangchang','tw_wangchang'],
|
dc_wangchang:['dc_wangchang','tw_wangchang'],
|
||||||
guozhao:['guozhao','xin_guozhao'],
|
guozhao:['guozhao','xin_guozhao'],
|
||||||
|
dingshangwan:['dingshangwan','ol_dingshangwan'],
|
||||||
},
|
},
|
||||||
translate:{
|
translate:{
|
||||||
puyuan:'蒲元',
|
puyuan:'蒲元',
|
||||||
|
|
|
@ -2420,13 +2420,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
var target=_status.event.target;
|
var target=_status.event.target;
|
||||||
var controls=_status.event.controls.slice();
|
var controls=_status.event.controls.slice();
|
||||||
controls.sort(function(a,b){
|
var map={
|
||||||
return [
|
'摸牌':get.effect(target,{name:'wuzhong'},player,player)/2,
|
||||||
get.effect(target,{name:'wuzhong'},player,player)/2,
|
'弃牌':get.effect(target,{name:'guohe_copy2'},player,player),
|
||||||
get.effect(target,{name:'guohe_copy2'},player,player),
|
'制衡':get.effect(target,{name:'kaihua'},player,player),
|
||||||
get.effect(target,{name:'kaihua'},player,player),
|
};
|
||||||
][['摸牌','弃牌','制衡'].indexOf(b)-['摸牌','弃牌','制衡'].indexOf(a)];
|
controls.sort((a,b)=>map[b]-map[a]);
|
||||||
});
|
|
||||||
return controls[0];
|
return controls[0];
|
||||||
}).set('target',target);
|
}).set('target',target);
|
||||||
}
|
}
|
||||||
|
@ -2509,10 +2508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ol_guansuo:'dangxian_guansuo',
|
ol_guansuo:'dangxian_guansuo',
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
var next=player.phaseUse();
|
trigger.phaseList.splice(trigger.num,0,'phaseUse|xindangxian');
|
||||||
next.xindangxian=true;
|
|
||||||
event.next.remove(next);
|
|
||||||
trigger.next.push(next);
|
|
||||||
},
|
},
|
||||||
group:'xindangxian_rewrite',
|
group:'xindangxian_rewrite',
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -2521,7 +2517,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
forced:true,
|
forced:true,
|
||||||
popup:false,
|
popup:false,
|
||||||
filter:function(kagari){
|
filter:function(kagari){
|
||||||
return kagari.xindangxian==true;
|
return kagari._extraPhaseReason=='xindangxian';
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
@ -7665,9 +7661,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['guansuo'],
|
audioname:['guansuo'],
|
||||||
content:function(){
|
content:function(){
|
||||||
var next=player.phaseUse();
|
trigger.phaseList.splice(trigger.num,0,'phaseUse|dangxian');
|
||||||
event.next.remove(next);
|
|
||||||
trigger.next.push(next);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
longyin:{
|
longyin:{
|
||||||
|
@ -8484,6 +8478,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(target.countCards('h','sha')>1) return 'zeroplayertarget';
|
if(target.countCards('h','sha')>1) return 'zeroplayertarget';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&player.countSkill('zhanjue_draw')<2&&player.hasCard((card)=>get.name(card)!='tao','h');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -10585,6 +10583,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
"step 0"
|
"step 0"
|
||||||
|
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.2);
|
||||||
player.draw(2);
|
player.draw(2);
|
||||||
"step 1"
|
"step 1"
|
||||||
player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){
|
player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){
|
||||||
|
@ -10599,8 +10598,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.player.storage.xiantu4.push(player);
|
trigger.player.storage.xiantu4.push(player);
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
threaten:1.1,
|
threaten:1.1
|
||||||
expose:0.3
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
xiantu1:{audio:true},
|
xiantu1:{audio:true},
|
||||||
|
@ -12567,13 +12565,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
usable:1,
|
usable:1,
|
||||||
audio:'qice_backup',
|
audio:'qice_backup',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
var hs=player.getCards('h');
|
const hs=player.getCards('h');
|
||||||
if(!hs.length) return false;
|
if(!hs.length) return false;
|
||||||
for(var i=0;i<hs.length;i++){
|
if(hs.some(card=>{
|
||||||
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
|
const mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
|
||||||
if(mod2===false) return false;
|
return (mod2===false)
|
||||||
}
|
})) return false;
|
||||||
return true;
|
return lib.inpile.some(name=>{
|
||||||
|
if(get.type(name)!='trick') return false;
|
||||||
|
const card=get.autoViewAs({name},hs);
|
||||||
|
return event.filterCard(card,player,event);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
chooseButton:{
|
chooseButton:{
|
||||||
dialog:function(player){
|
dialog:function(player){
|
||||||
|
@ -12584,7 +12586,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return ui.create.dialog(get.translation('qice'),[list,'vcard']);
|
return ui.create.dialog(get.translation('qice'),[list,'vcard']);
|
||||||
},
|
},
|
||||||
filter:function(button,player){
|
filter:function(button,player){
|
||||||
return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
|
const event=_status.event.getParent(),card=get.autoViewAs({
|
||||||
|
name:button.link[2],
|
||||||
|
},player.getCards('h'));
|
||||||
|
return event.filterCard(card,player,event);
|
||||||
},
|
},
|
||||||
check:function(button){
|
check:function(button){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
|
@ -12655,6 +12660,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return 12-num;
|
return 12-num;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep') return (!arg||arg.card&&get.name(arg.card)==='tao')&&player.isPhaseUsing()&&!player.getStat('skill').qice&&player.hasCard((card)=>get.name(card)!='tao','h');
|
||||||
|
},
|
||||||
threaten:1.6,
|
threaten:1.6,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -12793,7 +12802,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
audio:2,
|
audio:2,
|
||||||
enable:'phaseUse',
|
enable:'phaseUse',
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return true;//player.countCards('h')>player.maxHp;
|
return player.countCards('h')>player.maxHp;
|
||||||
},
|
},
|
||||||
usable:1,
|
usable:1,
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -14499,7 +14508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
olddanshou_info:'当你造成伤害后,你可以摸一张牌。若如此做,终止一切结算,当前回合结束。',
|
olddanshou_info:'当你造成伤害后,你可以摸一张牌。若如此做,终止一切结算,当前回合结束。',
|
||||||
xindanshou_info:'①每回合限一次,当你成为基本牌或锦囊牌的目标后,你可以摸X张牌(X为你本回合内成为过基本牌或锦囊牌的目标的次数)。②一名其他角色的结束阶段,若你本回合内没有发动过〖胆守①〗,则你可以弃置X张牌并对其造成1点伤害(X为其手牌数,无牌则不弃)。',
|
xindanshou_info:'①每回合限一次,当你成为基本牌或锦囊牌的目标后,你可以摸X张牌(X为你本回合内成为过基本牌或锦囊牌的目标的次数)。②一名其他角色的结束阶段,若你本回合内没有发动过〖胆守①〗,则你可以弃置X张牌并对其造成1点伤害(X为其手牌数,无牌则不弃)。',
|
||||||
yizhong_info:'锁定技,当你的防具栏为空时,黑色的【杀】对你无效',
|
yizhong_info:'锁定技,当你的防具栏为空时,黑色的【杀】对你无效',
|
||||||
xinzhan_info:'出牌阶段限一次,你可以观看牌堆顶的3张牌,然后展示其中任意数量♥的牌并获得之。',
|
xinzhan_info:'出牌阶段限一次,若你的手牌数大于你的体力上限,你可以观看牌堆顶的三张牌,然后展示其中任意红桃牌并获得之。',
|
||||||
huilei_info:'锁定技,当你死亡时,杀死你的角色弃置所有的牌。',
|
huilei_info:'锁定技,当你死亡时,杀死你的角色弃置所有的牌。',
|
||||||
enyuan_info:'锁定技。①当其他角色令你回复1点体力后,该角色摸一张牌。②当其他角色对你造成伤害后,其须交给你一张♥手牌,否则失去1点体力。',
|
enyuan_info:'锁定技。①当其他角色令你回复1点体力后,该角色摸一张牌。②当其他角色对你造成伤害后,其须交给你一张♥手牌,否则失去1点体力。',
|
||||||
xuanhuo_info:'出牌阶段限一次,你可以将一张红桃手牌交给一名其他角色,获得该角色的一张牌,然后交给除该角色外的一名其他角色',
|
xuanhuo_info:'出牌阶段限一次,你可以将一张红桃手牌交给一名其他角色,获得该角色的一张牌,然后交给除该角色外的一名其他角色',
|
||||||
|
|
|
@ -2592,10 +2592,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return player!=event.player&&event.num<event.player.hp;
|
return player!=event.player&&event.num<event.player.hp;
|
||||||
},
|
},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
if(get.attitude(player,event.player)>-2) return false;
|
if(event.player.hasSkillTag('nodamage')) return false;
|
||||||
if(player.hp>2) return true;
|
let tj = player.countCards('hs', function (card) {
|
||||||
if(player.hp==2&&event.player.hp<3) return false;
|
return get.name(card) === 'tao' || get.name(card) === 'jiu';
|
||||||
return player.hp>1;
|
}),
|
||||||
|
att = get.attitude(_status.event.player, event.player),
|
||||||
|
eff = get.damageEffect(event.player, player, _status.event.player, event.nature),
|
||||||
|
fd = event.player.hasSkillTag('filterDamage', null, {
|
||||||
|
player: player,
|
||||||
|
card: event.card
|
||||||
|
}),
|
||||||
|
hp = player.hp + tj;
|
||||||
|
if(player.storage.tairan2) hp -= player.storage.tairan2;
|
||||||
|
if(eff <= 0 || fd || att >= -2 || Math.abs(hp) <= 1) return false;
|
||||||
|
if(hp > 2 || event.player.isLinked() && event.nature && eff > 0) return true;
|
||||||
|
return !event.player.countCards('hs') || event.player.hp > 2 * event.num && !event.player.hasSkillTag('maixie');
|
||||||
},
|
},
|
||||||
logTarget:'player',
|
logTarget:'player',
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -2604,6 +2615,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.yimie_num=trigger.player.hp-trigger.num;
|
trigger.yimie_num=trigger.player.hp-trigger.num;
|
||||||
trigger.num=trigger.player.hp;
|
trigger.num=trigger.player.hp;
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
damageBonus:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
return arg && arg.target && arg.target.hp > 1 && player.hp > 1 && get.attitude(player, arg.target) < -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
yimie2:{
|
yimie2:{
|
||||||
trigger:{player:'damageEnd'},
|
trigger:{player:'damageEnd'},
|
||||||
|
|
|
@ -93,7 +93,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
yxs_lanlinwang:'高长恭(541年―573年),又名高孝瓘、高肃,祖籍渤海调蓨(今河北省景县),神武帝高欢之孙,文襄帝高澄第四子,生母不详,南北朝时期北齐宗室、将领,封爵兰陵郡王。高长恭貌柔心壮,音容兼美。为将躬勤细事,每得甘美,虽一瓜数果,必与将士分享。累次升任至并州刺史。突厥攻入晋阳,高长恭奋力将其击退。邙山之战,高长恭为中军,率领五百骑兵再入周军包围圈,直至金墉城下,因高长恭戴着头盔,城中的人不确定是敌军或是我军,直到高长恭把头盔脱下来城上的人才知道是高长恭,派弓箭手开始放箭保护他,之后高长恭成功替金墉解围,高长恭在此次战中威名大振,士兵们为此战而讴歌他,即后来知名的《兰陵王入阵曲》。',
|
yxs_lanlinwang:'高长恭(541年―573年),又名高孝瓘、高肃,祖籍渤海调蓨(今河北省景县),神武帝高欢之孙,文襄帝高澄第四子,生母不详,南北朝时期北齐宗室、将领,封爵兰陵郡王。高长恭貌柔心壮,音容兼美。为将躬勤细事,每得甘美,虽一瓜数果,必与将士分享。累次升任至并州刺史。突厥攻入晋阳,高长恭奋力将其击退。邙山之战,高长恭为中军,率领五百骑兵再入周军包围圈,直至金墉城下,因高长恭戴着头盔,城中的人不确定是敌军或是我军,直到高长恭把头盔脱下来城上的人才知道是高长恭,派弓箭手开始放箭保护他,之后高长恭成功替金墉解围,高长恭在此次战中威名大振,士兵们为此战而讴歌他,即后来知名的《兰陵王入阵曲》。',
|
||||||
},
|
},
|
||||||
characterTitle:{
|
characterTitle:{
|
||||||
"yxs_qinqiong":"Sukincen",
|
yxs_qinqiong:"Sukincen",
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
yxs_fanji:{
|
yxs_fanji:{
|
||||||
|
@ -105,7 +105,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
priority:12,
|
priority:12,
|
||||||
filter:function (event,player){
|
filter:function (event,player){
|
||||||
if(!player.countCards('h',{name:'sha'})) return false;
|
if(!player.countCards('h',{name:'sha'})) return false;
|
||||||
return event.card.name=='sha'||event.card.name=='juedou';
|
return event.card&&(event.card.name=='sha'||event.card.name=='juedou');
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
player.addTempSkill('yxs_fanji2','shaAfter');
|
player.addTempSkill('yxs_fanji2','shaAfter');
|
||||||
|
@ -125,7 +125,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.directHit=true;
|
trigger.directHit=true;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
yxs_menshen3:{
|
yxs_menshen3:{
|
||||||
trigger:{
|
trigger:{
|
||||||
player:['phaseBegin','dieBegin'],
|
player:['phaseBegin','dieBegin'],
|
||||||
|
@ -144,7 +143,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
yxs_menshen:{
|
yxs_menshen:{
|
||||||
audio:2,
|
audio:2,
|
||||||
trigger:{
|
trigger:{
|
||||||
|
@ -179,7 +177,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
expose:0.5,
|
expose:0.5,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
yxs_menshen2:{
|
yxs_menshen2:{
|
||||||
audio:2,
|
audio:2,
|
||||||
mark:'character',
|
mark:'character',
|
||||||
|
@ -204,7 +201,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
trigger.target = target;
|
trigger.target = target;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
guimian:{
|
guimian:{
|
||||||
trigger:{source:'damageEnd'},
|
trigger:{source:'damageEnd'},
|
||||||
forced:true,
|
forced:true,
|
||||||
|
|
1728
game/game.js
1728
game/game.js
File diff suppressed because it is too large
Load Diff
|
@ -41586,7 +41586,7 @@ var pinyin_dict_withtone = "yī,dīng zhēng,kǎo qiǎo yú,qī,shàng,xià,hǎn
|
||||||
temp = '';
|
temp = '';
|
||||||
for (var j = 0; j < max && (i + j) < chinese.length; j++) {
|
for (var j = 0; j < max && (i + j) < chinese.length; j++) {
|
||||||
if (!dict.withtone[chinese[i]]) {
|
if (!dict.withtone[chinese[i]]) {
|
||||||
i+=(result[i].length-1);
|
i+=(result[m].length-1);
|
||||||
break;
|
break;
|
||||||
} // 如果碰到非汉字直接停止本次查找
|
} // 如果碰到非汉字直接停止本次查找
|
||||||
temp += chinese[i + j];
|
temp += chinese[i + j];
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
Binary file not shown.
After Width: | Height: | Size: 91 KiB |
|
@ -5529,3 +5529,7 @@ div[data-decoration="bronze"]::after{
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
/* 火狐隐藏滚动条 */
|
||||||
|
* {
|
||||||
|
scrollbar-width: none;
|
||||||
|
}
|
|
@ -12950,7 +12950,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
_mingzhi1:{
|
_mingzhi1:{
|
||||||
trigger:{player:'phaseBeginStart'},
|
trigger:{player:'phaseBeginStart'},
|
||||||
priority:19,
|
//priority:19,
|
||||||
|
ruleSkill:true,
|
||||||
forced:true,
|
forced:true,
|
||||||
popup:false,
|
popup:false,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
|
@ -14036,6 +14037,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
'step 0'
|
'step 0'
|
||||||
game.broadcastAll(function(){
|
game.broadcastAll(function(){
|
||||||
ui.arena.classList.add('choose-character');
|
ui.arena.classList.add('choose-character');
|
||||||
|
for(var i=0;i<game.players.length;i++){
|
||||||
|
game.players[i].classList.add('unseen');
|
||||||
|
game.players[i].classList.add('unseen2');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
var list=[];
|
var list=[];
|
||||||
for(var i in lib.characterPack.mode_guozhan){
|
for(var i in lib.characterPack.mode_guozhan){
|
||||||
|
@ -14207,59 +14212,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
'step 2'
|
'step 2'
|
||||||
if(!result) result={};
|
if(!result) result={};
|
||||||
var result2=event.result2;
|
var result2=event.result2;
|
||||||
for(var i in result){
|
game.broadcastAll(function(result,result2){
|
||||||
if(result[i]&&result[i].links) result[i]=result[i].links[0][2].slice(6);
|
|
||||||
else if(result[i]=='ai') result[i]=function(){
|
|
||||||
var player=lib.playerOL[i];
|
|
||||||
var name1=result2[i][0],name2=result2[i][1];
|
|
||||||
if(get.is.double(name1,true)) return get.is.double(name2,true).filter(group=>get.is.double(name1,true).contains(group)).randomGet();
|
|
||||||
if(lib.character[name1][1]=='ye') return get.is.double(name2,true).randomGet();
|
|
||||||
}();
|
|
||||||
}
|
|
||||||
game.broadcast(function(result,result2){
|
|
||||||
for(var i in result){
|
|
||||||
if(!lib.playerOL[i].name){
|
|
||||||
lib.playerOL[i].init(result[i][0],result[i][1],false);
|
|
||||||
}
|
|
||||||
if(result2[i]&&result2[i].length) lib.playerOL[i].trueIdentity=result2[i];
|
|
||||||
}
|
|
||||||
setTimeout(function(){
|
|
||||||
ui.arena.classList.remove('choose-character');
|
|
||||||
},500);
|
|
||||||
},result2,result);
|
|
||||||
for(var i in result2){
|
|
||||||
if(!lib.playerOL[i].name){
|
|
||||||
lib.playerOL[i].init(result2[i][0],result2[i][1],false);
|
|
||||||
}
|
|
||||||
if(result[i]&&result[i].length) lib.playerOL[i].trueIdentity=result[i];
|
|
||||||
}
|
|
||||||
for(var i=0;i<game.players.length;i++){
|
for(var i=0;i<game.players.length;i++){
|
||||||
_status.characterlist.remove(game.players[i].name);
|
var current=game.players[i],id=current.playerid;
|
||||||
_status.characterlist.remove(game.players[i].name2);
|
if(result[id]&&!current.name){
|
||||||
game.players[i].hiddenSkills=lib.character[game.players[i].name1][3].slice(0);
|
current.init(result[id][0],result[id][1],false);
|
||||||
var hiddenSkills2=lib.character[game.players[i].name2][3];
|
|
||||||
for(var j=0;j<hiddenSkills2.length;j++){
|
|
||||||
game.players[i].hiddenSkills.add(hiddenSkills2[j]);
|
|
||||||
}
|
}
|
||||||
for(var j=0;j<game.players[i].hiddenSkills.length;j++){
|
if(result2[id]&&result2[id].length){
|
||||||
if(!lib.skill[game.players[i].hiddenSkills[j]]){
|
current.trueIdentity=result2[id][0][2].slice(6);
|
||||||
game.players[i].hiddenSkills.splice(j--,1);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for(var j=0;j<game.players[i].hiddenSkills.length;j++){
|
|
||||||
game.players[i].name1=game.players[i].name;
|
|
||||||
game.players[i].addSkillTrigger(game.players[i].hiddenSkills[j],true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
game.broadcastAll(function(result){
|
|
||||||
for(var i in result){
|
|
||||||
if(!lib.playerOL[i].name){
|
|
||||||
lib.playerOL[i].init(result[i][0],result[i][1],false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(var i=0;i<game.players.length;i++){
|
|
||||||
game.players[i].classList.add('unseen');
|
|
||||||
game.players[i].classList.add('unseen2');
|
|
||||||
if(game.players[i]!=game.me){
|
if(game.players[i]!=game.me){
|
||||||
game.players[i].node.identity.firstChild.innerHTML='猜';
|
game.players[i].node.identity.firstChild.innerHTML='猜';
|
||||||
game.players[i].node.identity.dataset.color='unknown';
|
game.players[i].node.identity.dataset.color='unknown';
|
||||||
|
@ -14286,7 +14247,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
ui.arena.classList.remove('choose-character');
|
ui.arena.classList.remove('choose-character');
|
||||||
},500);
|
},500);
|
||||||
},result2);
|
},result2,result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -753,7 +753,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
player.init(result.links[0]);
|
player.init(result.links[0]);
|
||||||
player.hp++;
|
player.hp++;
|
||||||
player.maxHp++;
|
player.maxHp++;
|
||||||
player.update();
|
player.$update();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
"step 5"
|
"step 5"
|
||||||
|
@ -1441,7 +1441,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
return list2.randomGets(num).sort(lib.sort.character);
|
return list2.randomGets(num).sort(lib.sort.character);
|
||||||
}
|
}
|
||||||
var getGroup=function(name){
|
var getGroup=function(name){
|
||||||
if(lib.characterReplace[name]) return lib.character[lib.characterReplace[name][0]][1];
|
var characterReplace = lib.characterReplace[name];
|
||||||
|
if(characterReplace && characterReplace[0] && lib.character[characterReplace[0]]) return lib.character[characterReplace[0]][1];
|
||||||
return lib.character[name][1];
|
return lib.character[name][1];
|
||||||
}
|
}
|
||||||
var list2x=list2.slice(0);
|
var list2x=list2.slice(0);
|
||||||
|
@ -1852,6 +1853,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
zhu.identityShown=true;
|
zhu.identityShown=true;
|
||||||
zhu.identity=zhuid;
|
zhu.identity=zhuid;
|
||||||
|
if(zhuid=='zhu') zhu.isZhu=true;
|
||||||
zhu.setIdentity();
|
zhu.setIdentity();
|
||||||
zhu.node.identity.classList.remove('guessing');
|
zhu.node.identity.classList.remove('guessing');
|
||||||
me.setIdentity(identity);
|
me.setIdentity(identity);
|
||||||
|
@ -1950,14 +1952,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
var next=game.zhu.chooseButton(true);
|
var next=game.zhu.chooseButton(true);
|
||||||
next.set('selectButton',(lib.configOL.double_character?2:1));
|
next.set('selectButton',(lib.configOL.double_character?2:1));
|
||||||
next.set('createDialog',['选择角色',[list,'characterx']]);
|
next.set('createDialog',['选择角色',[list,'characterx']]);
|
||||||
next.set('callback',function(player,result){
|
|
||||||
player.init(result.links[0],result.links[1]);
|
|
||||||
});
|
|
||||||
next.set('ai',function(button){
|
next.set('ai',function(button){
|
||||||
return Math.random();
|
return Math.random();
|
||||||
});
|
});
|
||||||
"step 1"
|
"step 1"
|
||||||
if(game.me!=game.zhu){
|
if(!game.zhu.name){
|
||||||
game.zhu.init(result.links[0],result.links[1])
|
game.zhu.init(result.links[0],result.links[1])
|
||||||
}
|
}
|
||||||
event.list.remove(get.sourceCharacter(game.zhu.name1));
|
event.list.remove(get.sourceCharacter(game.zhu.name1));
|
||||||
|
@ -1971,7 +1970,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
||||||
game.zhu.update();
|
game.zhu.update();
|
||||||
}
|
}
|
||||||
game.broadcast(function(zhu,name,name2,addMaxHp){
|
game.broadcast(function(zhu,name,name2,addMaxHp){
|
||||||
if(game.zhu!=game.me){
|
if(!zhu.name){
|
||||||
zhu.init(name,name2);
|
zhu.init(name,name2);
|
||||||
}
|
}
|
||||||
if(addMaxHp){
|
if(addMaxHp){
|
||||||
|
|
Loading…
Reference in New Issue