Merge branch 'PR-Branch' into testtttest
This commit is contained in:
commit
b1219c05d5
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"extends": "chrome 46",
|
||||
"extends": "chrome 46",
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true,
|
||||
|
|
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){
|
||||
var evt=_status.event.getParent();
|
||||
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;
|
||||
}).set('prompt',false);
|
||||
|
@ -225,8 +225,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
value:[3,1],
|
||||
useful:1,
|
||||
},
|
||||
wuxie:function(target,card,player,current,state){
|
||||
if(get.attitude(current,player)>=0&&state>0) return false;
|
||||
wuxie:function(target,card,player,viewer,state){
|
||||
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:{
|
||||
player:function(player){
|
||||
|
|
|
@ -187,40 +187,40 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
equipSkill:true,
|
||||
direct:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){
|
||||
var names=[];
|
||||
if(target.name&&!target.isUnseen(0)) names.add(target.name);
|
||||
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
|
||||
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
|
||||
var pss=player.getSkills();
|
||||
for(var i=0;i<names.length;i++){
|
||||
var info=lib.character[names[i]];
|
||||
if(info){
|
||||
var skills=info[3];
|
||||
for(var j=0;j<skills.length;j++){
|
||||
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
|
||||
!lib.skill[skills[j]].unique&&!pss.contains(skills[j])){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).set('ai',function(target){
|
||||
return Math.random();
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
event.target=result.targets[0];
|
||||
player.logSkill('xuelunyang',event.target);
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
}
|
||||
'step 2'
|
||||
var names=[];
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){
|
||||
var names=[];
|
||||
if(target.name&&!target.isUnseen(0)) names.add(target.name);
|
||||
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
|
||||
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
|
||||
var pss=player.getSkills();
|
||||
for(var i=0;i<names.length;i++){
|
||||
var info=lib.character[names[i]];
|
||||
if(info){
|
||||
var skills=info[3];
|
||||
for(var j=0;j<skills.length;j++){
|
||||
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
|
||||
!lib.skill[skills[j]].unique&&!pss.contains(skills[j])){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).set('ai',function(target){
|
||||
return Math.random();
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
event.target=result.targets[0];
|
||||
player.logSkill('xuelunyang',event.target);
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
}
|
||||
'step 2'
|
||||
var names=[];
|
||||
var list=[];
|
||||
if(target.name&&!target.isUnseen(0)) names.add(target.name);
|
||||
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
|
||||
|
@ -240,12 +240,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
}
|
||||
player.chooseControl(list).set('prompt','选择获得一个技能').set('choice',get.max(list,get.skillRank,'item')).set('ai',function(){return _status.event.choice})
|
||||
'step 3'
|
||||
player.addTempSkill(result.control);
|
||||
player.popup(result.control);
|
||||
game.log(player,'获得了','#g【'+get.translation(result.control)+'】');
|
||||
},
|
||||
},
|
||||
'step 3'
|
||||
player.addTempSkill(result.control);
|
||||
player.popup(result.control);
|
||||
game.log(player,'获得了','#g【'+get.translation(result.control)+'】');
|
||||
},
|
||||
},
|
||||
|
||||
"jiuwei":{
|
||||
trigger:{
|
||||
|
|
|
@ -561,10 +561,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
prompt:'是否发动【赠毒】?',
|
||||
prompt2:'将本次获得的【毒】交给其他角色',
|
||||
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;
|
||||
return 0;
|
||||
},
|
||||
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;
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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.canCompare(current);
|
||||
});
|
||||
return ui.selected.targets[0].canCompare(target);
|
||||
//return ui.selected.targets[0].canCompare(target);
|
||||
},
|
||||
filterAddedTarget:function(card,player,target,preTarget){
|
||||
return target!=player&&preTarget.canCompare(target);
|
||||
|
|
|
@ -188,6 +188,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
//族王浑
|
||||
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,
|
||||
enable:'phaseUse',
|
||||
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;
|
||||
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(){
|
||||
'step 0'
|
||||
if(cards.length){
|
||||
|
@ -261,9 +288,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
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:{
|
||||
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:{
|
||||
|
@ -272,9 +326,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return get.itemtype(card)=='card';
|
||||
},
|
||||
position:'hes',
|
||||
filterTarget:lib.filter.targetEnabled,
|
||||
filterTarget:lib.filter.filterTarget,
|
||||
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,
|
||||
precontent:function(){
|
||||
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+=('<br>※当前手牌上限:'+num2);
|
||||
var num3=player.countMark('clanguixiang_count');
|
||||
var num3=((_status.event.getParent().phaseIndex||0)+1);
|
||||
if(num3>0){
|
||||
str+=(';阶段数:'+num3)
|
||||
}
|
||||
|
@ -2128,7 +2186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
ai:{
|
||||
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(player.countCards('h')==num+1&&num!=2&&(num<=4||num>4&&numx>4)) return 10;
|
||||
return 0.5;
|
||||
|
@ -2139,56 +2197,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
clanguixiang:{
|
||||
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:{
|
||||
player:['phaseZhunbeiBefore','phaseJudgeBefore','phaseDrawBefore','phaseDiscardBefore','phaseJieshuBefore'],
|
||||
player:'phaseChange',
|
||||
},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
var evt=event.getParent('phase');
|
||||
if(!evt||!evt._clanguixiang) return false;
|
||||
var num1=player.getHandcardLimit()-1,num2=player.countMark('clanguixiang_count');
|
||||
if(event.phaseList[event.num].startsWith('phaseUse')) return false;
|
||||
var num1=player.getHandcardLimit()-1,num2=event.num;
|
||||
return num1==num2;
|
||||
},
|
||||
content:function(){
|
||||
trigger.cancel(null,null,'notrigger');
|
||||
var next=player.phaseUse();
|
||||
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;
|
||||
},
|
||||
},
|
||||
trigger.phaseList[trigger.num]='phaseUse|clanguixiang';
|
||||
game.delayx();
|
||||
},
|
||||
},
|
||||
clanmuyin:{
|
||||
|
|
|
@ -3304,14 +3304,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dddduanbing:{
|
||||
enable:'phaseUse',
|
||||
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){
|
||||
if(get.color(card)!='black'||get.type2(card)=='trick') return false;
|
||||
return player.canAddJudge(get.autoViewAs({name:'bingliang'},[card]));
|
||||
},
|
||||
check:function(card){
|
||||
return 6-get.value(card);
|
||||
return 8.2-get.value(card);
|
||||
},
|
||||
discard: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_sundeng:['male','wu',4,['xinkuangbi']],
|
||||
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']],
|
||||
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"],
|
||||
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_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_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","old_majun"],
|
||||
diy_noname:['noname'],
|
||||
|
@ -373,6 +374,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ns_zhangxiu:'#p本因坊神策',
|
||||
ns_yangyi:'#p本因坊神策',
|
||||
ns_liuzhang:'#r矮子剑薄荷糖',
|
||||
ns_mengyou:'#g残昼厄夜',
|
||||
},
|
||||
card:{
|
||||
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;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
//return false;
|
||||
},
|
||||
content:function(){
|
||||
trigger.addCount=false;
|
||||
|
@ -2599,7 +2601,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
else game.delayx();
|
||||
'step 3'
|
||||
player.addTempSkill('nstuilun_effect',{player:'phaseBegin'});
|
||||
player.addTempSkill('nstuilun_effect',{player:'phaseBeginStart'});
|
||||
},
|
||||
subSkill:{
|
||||
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'));
|
||||
player.recover();
|
||||
trigger.cancel();
|
||||
player.addTempSkill('kyou_duanfa_draw',{player:'phaseBegin'});
|
||||
player.addTempSkill('kyou_duanfa_draw',{player:'phaseBeginStart'});
|
||||
},
|
||||
subSkill:{
|
||||
draw:{
|
||||
|
@ -6370,9 +6372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var num=game.roundNumber;
|
||||
if(num&&typeof num=='number') player.draw(Math.min(3,num));
|
||||
'step 1'
|
||||
var next=player.phaseUse();
|
||||
event.next.remove(next);
|
||||
trigger.next.push(next);
|
||||
trigger.phaseList.splice(trigger.num,0,'phaseUse|godan_yuanyi');
|
||||
},
|
||||
},
|
||||
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:{
|
||||
nsjiquan:function(player){
|
||||
|
@ -19030,6 +19120,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
junk_huangyueying_prefix:'旧界',
|
||||
old_majun:'骰子马钧',
|
||||
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_xushi:'玩点论杀·虚实篇',
|
||||
|
@ -19041,12 +19145,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
diy_yijiang3:'设计比赛2022',
|
||||
diy_fakenews:'杀海流言',
|
||||
diy_trashbin:'垃圾桶',
|
||||
ns_chengpu:'铁索程普',
|
||||
ns_chengpu_ab:'程普',
|
||||
ns_sundeng:'画饼孙登',
|
||||
ns_sundeng_ab:'孙登',
|
||||
ns_duji:'画饼杜畿',
|
||||
ns_duji_ab:'杜畿',
|
||||
},
|
||||
pinyins:{
|
||||
加藤うみ:['Kato','Umi'],
|
||||
|
|
|
@ -2453,6 +2453,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(player.needsToDiscard()) return num/3;
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
targetInRange:function(card,player,target){
|
||||
if(target.hasMark('yingba_mark')) return true;
|
||||
}
|
||||
},
|
||||
enable:'phaseUse',
|
||||
|
@ -2468,15 +2471,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
locked:false,
|
||||
//global:'yingba_mark',
|
||||
mod:{
|
||||
targetInRange:function(card,player,target){
|
||||
if(target.hasMark('yingba_mark')) return true;
|
||||
},
|
||||
},
|
||||
ai:{
|
||||
combo:'scfuhai',
|
||||
threaten:3,
|
||||
order:9,
|
||||
order:11,
|
||||
result:{
|
||||
player:function(player,target){
|
||||
if(player.maxHp==1) return -2.5;
|
||||
|
@ -2631,12 +2629,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
content:function(){
|
||||
game.addGlobalSkill('tianzuo_global');
|
||||
var cards=[];
|
||||
for(var i=2;i<10;i++){
|
||||
var card=game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i);
|
||||
ui.cardPile.insertBefore(card,ui.cardPile.childNodes[get.rand(0,ui.cardPile.childNodes.length)]);
|
||||
cards.push(game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i));
|
||||
}
|
||||
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',
|
||||
subSkill:{
|
||||
|
@ -3588,7 +3588,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
huoxin2:{
|
||||
trigger:{
|
||||
player:['phaseAfter','dieAfter'],
|
||||
global:'phaseBefore',
|
||||
global:'phaseBeforeStart',
|
||||
},
|
||||
lastDo: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)+'名角色获得“大雾”标记',
|
||||
[1,num]).set('ai',function(target){
|
||||
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);
|
||||
if(att>=4){
|
||||
if(_status.event.allUse) return att;
|
||||
|
@ -5428,13 +5428,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
})*2);
|
||||
"step 1"
|
||||
if(result.bool){
|
||||
player.logSkill('dawu',result.targets,'thunder');
|
||||
var length=result.targets.length;
|
||||
for(var i=0;i<length;i++){
|
||||
result.targets[i].addSkill('dawu2');
|
||||
}
|
||||
var targets=result.targets.sortBySeat();
|
||||
player.logSkill('dawu',targets,'thunder');
|
||||
var length=targets.length;
|
||||
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.addSkill('dawu3');
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
|
@ -5445,46 +5447,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{combo:'qixing'},
|
||||
},
|
||||
dawu2:{
|
||||
trigger:{player:'damageBegin4'},
|
||||
filter:function(event){
|
||||
if(!event.hasNature('thunder')) return true;
|
||||
return false;
|
||||
},
|
||||
mark:true,
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
content:function(){
|
||||
trigger.cancel();
|
||||
},
|
||||
ai:{
|
||||
nofire:true,
|
||||
nodamage:true,
|
||||
effect:{
|
||||
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:{
|
||||
markcount:()=>1,
|
||||
content:'共有1个标记',
|
||||
content:function(storage){
|
||||
return `共有${storage.length}枚标记`;
|
||||
},
|
||||
}
|
||||
},
|
||||
dawu3:{
|
||||
trigger:{player:['phaseBegin','dieBegin']},
|
||||
silent:true,
|
||||
trigger:{global:'damageBegin4'},
|
||||
filter:function(event,player){
|
||||
return !event.hasNature('thunder')&&event.player.getStorage('dawu2').includes(player);
|
||||
},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
logTarget:'player',
|
||||
content:function(){
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].hasSkill('dawu2')){
|
||||
game.players[i].removeSkill('dawu2');
|
||||
trigger.cancel();
|
||||
},
|
||||
onremove:function(player){
|
||||
game.countPlayer2(current=>{
|
||||
if(current.getStorage('dawu2').includes(player)){
|
||||
current.unmarkAuto('dawu2',player);
|
||||
current.removeAdditionalSkill(`dawu_${player.playerid}`);
|
||||
}
|
||||
if(game.players[i].hasSkill('kuangfeng2')){
|
||||
game.players[i].removeSkill('kuangfeng2');
|
||||
}
|
||||
}
|
||||
player.removeSkill('dawu3');
|
||||
}
|
||||
},true);
|
||||
},
|
||||
},
|
||||
kuangfeng:{
|
||||
unique:true,
|
||||
|
@ -5501,13 +5498,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
"step 1"
|
||||
if(result.bool){
|
||||
var length=result.targets.length;
|
||||
for(var i=0;i<length;i++){
|
||||
result.targets[i].addSkill('kuangfeng2');
|
||||
}
|
||||
player.logSkill('kuangfeng',result.targets,'fire');
|
||||
player.chooseCardButton('弃置'+get.cnNumber(length)+'枚星',length,player.getExpansions('qixing'),true);
|
||||
player.addSkill('dawu3');
|
||||
var targets=result.targets.sortBySeat();
|
||||
player.logSkill('kuangfeng',targets,'fire');
|
||||
var length=targets.length;
|
||||
targets.forEach(target=>{
|
||||
target.addAdditionalSkill(`kuangfeng_${player.playerid}`,'kuangfeng2');
|
||||
target.markAuto('kuangfeng2',[player]);
|
||||
});
|
||||
player.addTempSkill('kuangfeng3',{player:'phaseBeginStart'})
|
||||
player.chooseCardButton('选择弃置'+get.cnNumber(length)+'张“星”',length,player.getExpansions('qixing'),true);
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
|
@ -5518,28 +5517,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{combo:'qixing'},
|
||||
},
|
||||
kuangfeng2:{
|
||||
trigger:{player:'damageBegin3'},
|
||||
filter:function(event){
|
||||
if(event.hasNature('fire')) return true;
|
||||
return false;
|
||||
},
|
||||
mark:true,
|
||||
charlotte:true,
|
||||
intro:{
|
||||
markcount:()=>1,
|
||||
content:'共有1个标记'
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
trigger.num++;
|
||||
content:function(storage){
|
||||
return `共有${storage.length}枚标记`;
|
||||
},
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
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:{
|
||||
unique:true,
|
||||
forceDie:true,
|
||||
|
@ -5563,7 +5574,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
selectCard:[0,4],
|
||||
line:'fire',
|
||||
check:function (){return -1},
|
||||
selectTarget:function (){
|
||||
selectTarget:function(){
|
||||
if(ui.selected.cards.length==4) return [1,2];
|
||||
if(ui.selected.cards.length==0) return [1,3];
|
||||
game.uncheck('target');
|
||||
|
@ -5571,9 +5582,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
multitarget:true,
|
||||
multiline:true,
|
||||
content:function (){
|
||||
"step 0"
|
||||
contentBefore:function(){
|
||||
player.awakenSkill('yeyan');
|
||||
},
|
||||
content:function(){
|
||||
"step 0"
|
||||
event.num=0;
|
||||
targets.sortBySeat();
|
||||
"step 1"
|
||||
|
|
|
@ -3397,7 +3397,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
target:function(player,target){
|
||||
var val=0;
|
||||
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(bool1) target.maxHp++;
|
||||
val+=Math.max(0,get.recoverEffect(target,player,player));
|
||||
|
@ -3872,7 +3872,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
dcqizi:{
|
||||
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;
|
||||
},
|
||||
}
|
||||
|
@ -4997,10 +4997,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return false;
|
||||
},
|
||||
prompt2:'检索一张【无中生有】并置于牌堆顶',
|
||||
check:function(event,player){
|
||||
if(!_status.currentPhase) return false;
|
||||
return get.attitude(player,_status.currentPhase.next)>0;
|
||||
},
|
||||
content:function(){
|
||||
var card=get.cardPile(function(card){
|
||||
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;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
//return false;
|
||||
}
|
||||
else if(event.name=='lose'){
|
||||
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(!ui.selected.targets.length) return true;
|
||||
return ui.selected.targets[0]==current;
|
||||
return current==target;
|
||||
//return current==target;
|
||||
}).set('ai',function(target){
|
||||
var player=_status.event.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);
|
||||
}
|
||||
},
|
||||
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);
|
||||
}
|
||||
}
|
||||
if(list.length){
|
||||
player.chooseControl(list,'cancel2').set('dialog',dialog);
|
||||
}
|
||||
if(list.length) player.chooseControl(list,'cancel2').set('dialog',dialog).set('list',list).set('map',map).set('ai',function(){
|
||||
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();
|
||||
'step 3'
|
||||
if(result.control!='cancel2'){
|
||||
|
@ -8390,6 +8411,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
subSkill:{
|
||||
effect:{
|
||||
audio:'kuanshi',
|
||||
mark:true,
|
||||
intro:{
|
||||
content:'每回合限一次,当$于一回合内受到第2点伤害后,其回复1点体力。'
|
||||
},
|
||||
trigger:{global:'damageEnd'},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
|
@ -9359,6 +9384,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
dcdanying:{
|
||||
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'],
|
||||
usable:1,
|
||||
hiddenCard:function(player,name){
|
||||
|
@ -9435,11 +9467,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
target:function(card,player,target){
|
||||
if(_status._dcdanying_aiChecking) return;
|
||||
_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;
|
||||
if(eff>0) eff=-1;
|
||||
else eff=1;
|
||||
return [1,eff];
|
||||
return [1,get.sgn(eff)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10068,6 +10098,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_jiaxu:['sp_jiaxu','dc_sp_jiaxu','yj_jiaxu'],
|
||||
qiaorui:['qiaorui','tw_qiaorui'],
|
||||
mamidi:['mamidi','xin_mamidi'],
|
||||
mengyou:['mengyou','ns_mengyou'],
|
||||
},
|
||||
translate:{
|
||||
re_panfeng:'潘凤',
|
||||
|
|
|
@ -201,7 +201,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
chiying:{
|
||||
trigger:{global:'damageBegin'},
|
||||
trigger:{global:'damageBegin2'},
|
||||
check:function(event,player){
|
||||
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;
|
||||
return true;
|
||||
},
|
||||
priority:-11,
|
||||
content:function(){
|
||||
trigger.num=1;
|
||||
if(trigger.source){
|
||||
|
|
|
@ -227,7 +227,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
target.isOnline()){
|
||||
player.storage.jsrgbashiing=true;
|
||||
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});
|
||||
next.set('ai',function(){
|
||||
var event=_status.event;
|
||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
connect:true,
|
||||
characterSort:{
|
||||
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_standard:["xin_xiahoudun","xin_zhangfei"],
|
||||
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
|
||||
|
@ -26,6 +26,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
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']],
|
||||
xin_guozhao:['female','wei',3,['yichong','wufei']],
|
||||
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']],
|
||||
},
|
||||
characterIntro:{
|
||||
laimin:'来敏(165年—261年),字敬达,义阳新野人,东汉太中大夫来歙之后,司空来艳之子,三国时期蜀汉官员。东汉末年,逢董卓之乱,来敏跟随姐夫黄琬到荆州避难,黄琬是刘璋祖母的侄子,来敏又与姐姐来氏入蜀,被刘璋引为宾客。来敏喜欢读书,尤其喜欢《左氏春秋》。刘备平定益州后,以来敏为典学校尉,后立太子,来敏为家令。刘禅继位后,任命来敏为虎贲中郎将,诸葛亮驻汉中,请来敏为军祭酒、辅军将军。却因其口出狂言而被罢官,诸葛亮死后,来敏历任大长秋、光禄大夫、执慎将军等职,期间多次因说错话而被免官,蜀汉景耀年间,来敏去世,时年九十七岁。',
|
||||
shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。',
|
||||
sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。',
|
||||
bilan:'毕岚(?—189),东汉宦官,十常侍之一。十常侍朋比为奸,祸乱朝纲,制造出党锢之祸,后被袁绍诛杀。另外,毕岚曾制造翻车,用于取河水洒路。',
|
||||
|
@ -380,6 +386,422 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -497,6 +919,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
lib.translate['yichong_'+player.playerid+'_bg']='雀';
|
||||
}
|
||||
},
|
||||
getLimit:1,
|
||||
audio:2,
|
||||
trigger:{player:'phaseZhunbeiBegin'},
|
||||
direct:true,
|
||||
|
@ -541,7 +964,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.markSkill('yichong');
|
||||
game.broadcastAll(function(player,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');
|
||||
game.countPlayer(function(current){
|
||||
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;
|
||||
return game.hasPlayer(function(current){
|
||||
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));
|
||||
});
|
||||
},
|
||||
|
@ -569,14 +992,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 0'
|
||||
var target=game.findPlayer(function(current){
|
||||
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));
|
||||
});
|
||||
event.target=target;
|
||||
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{
|
||||
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){
|
||||
return get.value(button.link);
|
||||
});
|
||||
|
@ -604,7 +1027,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filter:function(event,player){
|
||||
var target=game.findPlayer(current=>current.hasSkill('yichong_'+player.playerid));
|
||||
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')));
|
||||
},
|
||||
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));
|
||||
event.target=target;
|
||||
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{
|
||||
player.logSkill('wufei',target);
|
||||
|
@ -625,7 +1048,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(result.bool){
|
||||
player.logSkill('wufei',target);
|
||||
target.damage();
|
||||
target.damage('nosource');
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
|
@ -4594,7 +5017,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
viewAsFilter:function(player){
|
||||
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,
|
||||
mod:{
|
||||
maxHandcard:function(player,num){
|
||||
|
@ -9476,10 +9902,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var att=get.attitude(player,target);
|
||||
return -att;
|
||||
//if(cards.length==1) return -att;
|
||||
if(player==target) att/=2;
|
||||
if(target.hasSkill('pingkou')) att*=1.4;
|
||||
att*=(1+target.countCards('j')/2);
|
||||
return att;
|
||||
// if(player==target) att/=2;
|
||||
// if(target.hasSkill('pingkou')) att*=1.4;
|
||||
// att*=(1+target.countCards('j')/2);
|
||||
// return att;
|
||||
});
|
||||
"step 3"
|
||||
if(result.bool){
|
||||
|
@ -12164,7 +12590,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player:"linkBefore",
|
||||
},
|
||||
forced:true,
|
||||
priority:20,
|
||||
//priority:20,
|
||||
filter:function(event,player){
|
||||
return !player.isLinked();
|
||||
},
|
||||
|
@ -13178,7 +13604,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
cancel:{
|
||||
trigger:{player:'phaseUseEnd'},
|
||||
priority:50,
|
||||
firstDo:true,
|
||||
silent:true,
|
||||
charlotte:true,
|
||||
content:function(){
|
||||
|
@ -14851,9 +15277,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xin_guozhao:'手杀郭照',
|
||||
xin_guozhao_prefix:'手杀',
|
||||
yichong:'易宠',
|
||||
yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”得到五张牌)。',
|
||||
yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”得到一张牌)。',
|
||||
wufei:'诬诽',
|
||||
wufei_info:'若场上存在拥有“雀”标记的角色A,则:①当你使用【杀】或伤害类锦囊牌指定第一个目标后,你令A成为此牌伤害来源。②当你受到伤害后,若A的体力值大于1且A的体力值大于你,则你可以对A造成1点伤害。',
|
||||
wufei_info:'若场上存在拥有“雀”标记的角色A,则:①当你使用【杀】或伤害类锦囊牌指定第一个目标后,你令A成为此牌伤害来源。②当你受到伤害后,若A的体力值大于3,则你可以令A受到1点无来源伤害。',
|
||||
yj_zhoubuyi:'☆周不疑',
|
||||
yj_zhoubuyi_prefix:'☆',
|
||||
mbhuiyao:'慧夭',
|
||||
|
@ -14886,6 +15312,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_chenqun_prefix:'手杀界',
|
||||
old_yuanshu:'手杀界袁术',
|
||||
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_shenhua_feng:'手杀异构·其疾如风',
|
||||
|
|
|
@ -944,6 +944,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
content:function(){
|
||||
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,
|
||||
filter:function(event,player){
|
||||
if(get.type(event.card)!='equip') return false;
|
||||
var gz=get.mode()=='guozhan';
|
||||
if(gz&&event.player.isFriendOf(player)) return false;
|
||||
return player.countMark('pkwuku')<(gz?2:3);
|
||||
return player.countMark('pkwuku')<3;
|
||||
},
|
||||
content:function(){
|
||||
player.addMark('pkwuku',1);
|
||||
|
@ -1978,7 +1984,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
subSkill:{
|
||||
skip:{
|
||||
trigger:{player:'phaseBefore'},
|
||||
trigger:{player:'phaseBeforeStart'},
|
||||
forced:true,
|
||||
priority:Infinity,
|
||||
popup:false,
|
||||
|
|
|
@ -313,6 +313,7 @@ window.noname_character_rank={
|
|||
'dc_sunquan',
|
||||
'yuechen',
|
||||
'sunli',
|
||||
'dc_zhangmancheng',
|
||||
'key_misuzu',
|
||||
'key_sunohara',
|
||||
'key_umi',
|
||||
|
@ -960,6 +961,8 @@ window.noname_character_rank={
|
|||
'mengyou',
|
||||
're_wenpin',
|
||||
'yue_zhoufei',
|
||||
'ns_mengyou',
|
||||
'zhangyan',
|
||||
],
|
||||
b:[
|
||||
'diy_feishi',
|
||||
|
@ -1969,6 +1972,7 @@ window.noname_character_rank={
|
|||
'clan_zhonghui',
|
||||
'zhoubuyi',
|
||||
'dc_wangjun',
|
||||
'ns_mengyou',
|
||||
'key_kano',
|
||||
'key_haruko',
|
||||
'key_akiko',
|
||||
|
|
|
@ -167,6 +167,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_guohuai:['xiahouyuan','zhanghe'],
|
||||
},
|
||||
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:{
|
||||
audio:'huomo',
|
||||
audioname:['huzhao','re_zhongyao'],
|
||||
|
@ -880,15 +936,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
logTarget:'player',
|
||||
check:function(event,player){
|
||||
if(get.attitude(player,event.player)<5) return false;
|
||||
if(player.maxHp-player.hp>=2) return false;
|
||||
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;
|
||||
if(get.attitude(_status.event.player,event.player)<1) return false;
|
||||
return player.hp>1||player.hasCard(card=>(get.name(card)==='tao'||get.name(card)==='jiu')&&lib.filter.cardEnabled(card,player),'hs');
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.2);
|
||||
player.draw(2);
|
||||
'step 1'
|
||||
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]);
|
||||
},
|
||||
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
|
||||
},
|
||||
subSkill:{
|
||||
|
@ -1921,14 +1979,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
var hs=player.getCards('h');
|
||||
const hs=player.getCards('h');
|
||||
if(!hs.length) return false;
|
||||
if((player.getStat('skill').reqice||0)>=player.countMark('reqice_mark')+1) return false;
|
||||
for(var i=0; i<hs.length; i++){
|
||||
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
|
||||
if(mod2===false) return false;
|
||||
}
|
||||
return true;
|
||||
if(hs.some(card=>{
|
||||
const mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
|
||||
return (mod2===false)
|
||||
})) return false;
|
||||
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:{
|
||||
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']);
|
||||
},
|
||||
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){
|
||||
var player=_status.event.player;
|
||||
|
@ -1981,6 +2046,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
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,
|
||||
},
|
||||
subSkill:{
|
||||
|
@ -2725,6 +2794,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
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){
|
||||
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
||||
return !game.hasPlayer(function(current){
|
||||
return current!=player&¤t!=target&¤t.countCards('h')<target.countCards('h');
|
||||
return player!==target&&!game.hasPlayer(function(current){
|
||||
return current!==player&¤t!==target&¤t.countCards('h')<target.countCards('h');
|
||||
})&&get.attitude(player,target)>0;
|
||||
});
|
||||
},
|
||||
|
@ -6258,22 +6331,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
selectCard:[1,Infinity],
|
||||
position:'hs',
|
||||
check:function(card){
|
||||
var player=_status.event.player;
|
||||
if(ui.selected.cards.length){
|
||||
var list=game.filterPlayer(function(current){
|
||||
return current!=player&&player.canUse('sha',current,false)&&get.effect(current,{name:'sha'},player,player)>0;
|
||||
}).sort(function(a,b){
|
||||
return get.effect(b,{name:'sha'},player,player)-get.effect(a,{name:'sha'},player,player);
|
||||
let player = _status.event.player;
|
||||
if (ui.selected.cards.length) {
|
||||
let list = game.filterPlayer(function (current) {
|
||||
return current !== player && player.canUse('sha', current, false) && get.effect(current, {name: 'sha'}, player, player) > 0;
|
||||
}).sort(function (a, b) {
|
||||
return get.effect(b, {name: 'sha'}, player, player) - get.effect(a, {name: 'sha'}, player, player);
|
||||
});
|
||||
if(!list.length) return 0;
|
||||
var target=list[0];
|
||||
if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
|
||||
target:target,
|
||||
card:card,
|
||||
},true)) return 0;
|
||||
return 6.5-get.value(card);
|
||||
if (!list.length) return 0;
|
||||
let target = list[0],
|
||||
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,
|
||||
card: {name: 'sha', suit: 'none', color: color[0], cards: cards, isCard: true}
|
||||
},
|
||||
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);
|
||||
},
|
||||
onuse:function(result,player){
|
||||
player.addTempSkill('changbiao_draw');
|
||||
|
@ -6305,6 +6390,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return card.name!='sha'&&get.value(card,player)<6.3;
|
||||
},'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(){
|
||||
"step 0"
|
||||
target.chooseToDiscard(cards.length,'弃置'+get.cnNumber(cards.length)+'张牌并失去1点体力,或点取消将武将牌翻面并摸'+get.cnNumber(cards.length)+'张牌','he').set('ai',function(card){
|
||||
var player=_status.event.player;
|
||||
if(player.isTurnedOver()) return -1;
|
||||
return (player.hp*player.hp)-get.value(card);
|
||||
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(target.hp<=1){
|
||||
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"
|
||||
if(!result.bool){
|
||||
|
@ -7505,7 +7607,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
ai:{
|
||||
order:2,
|
||||
expose:0.3,
|
||||
threaten:1.8,
|
||||
result:{
|
||||
target:function(player,target){
|
||||
|
@ -10847,34 +10948,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
useShan:true,
|
||||
effect:{
|
||||
target:function(card,player,target,current){
|
||||
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||
target:target,
|
||||
card:card,
|
||||
},true)){
|
||||
var hastarget=game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0;
|
||||
});
|
||||
var be=target.countCards('e',{color:'black'});
|
||||
if(target.countCards('h','shan')&&be){
|
||||
if(!target.hasSkill('xinguidao')) return 0;
|
||||
return [0,hastarget?target.countCards('he')/2:0];
|
||||
}
|
||||
if(target.countCards('h','shan')&&target.countCards('h')>2){
|
||||
if(!target.hasSkill('xinguidao')) return 0;
|
||||
return [0,hastarget?target.countCards('h')/4:0];
|
||||
}
|
||||
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
|
||||
return [0,0];
|
||||
}
|
||||
if(target.countCards('h')==0){
|
||||
return [1.5,0];
|
||||
}
|
||||
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)];
|
||||
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,
|
||||
card: card
|
||||
},true)){
|
||||
let club=0,spade=0;
|
||||
if(game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||
})){
|
||||
club=2;
|
||||
spade=4;
|
||||
}
|
||||
if(!target.isHealthy()) club+=2;
|
||||
if(!club&&!spade) return 1;
|
||||
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(spade&&get.color(cardx)=='black') max=1;
|
||||
},pos);
|
||||
if(max==2) return [1,Math.max(club,spade)];
|
||||
if(max==1) return [1,Math.min(club,spade)];
|
||||
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(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:{
|
||||
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'},
|
||||
filter:function(event,player){
|
||||
return player.countCards('hes',{color:'black'})>0;
|
||||
|
@ -11087,7 +11206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
prompt:"将一张红色牌当火攻使用",
|
||||
check:function (card){
|
||||
var player=_status.currentPhase;
|
||||
var player=get.player();
|
||||
if(player.countCards('h')>player.hp){
|
||||
return 6-get.value(card);
|
||||
}
|
||||
|
@ -12239,6 +12358,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
rezhiheng:{
|
||||
audio:2,
|
||||
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',
|
||||
usable:1,
|
||||
position:'he',
|
||||
|
@ -12290,10 +12417,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
delay:{}
|
||||
},
|
||||
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:{
|
||||
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
|
||||
},
|
||||
},
|
||||
|
@ -14521,7 +14655,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
reqiangxi:"强袭",
|
||||
"reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
|
||||
rehuoji:"火计",
|
||||
rehuoji_info:"出牌阶段,你可一张红色牌当作【火攻】使用。",
|
||||
rehuoji_info:"你可一张红色牌当作【火攻】使用。",
|
||||
rekanpo:"看破",
|
||||
rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
|
||||
reshuangxiong:"双雄",
|
||||
|
@ -15244,6 +15378,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhoutai_prefix:'界',
|
||||
caoren:'界曹仁',
|
||||
caoren_prefix:'界',
|
||||
ollianhuan:'连环',
|
||||
ollianhuan_info:'你可以将一张♣牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标后,可以给此牌增加一个目标。',
|
||||
|
||||
refresh_standard:'界限突破·标',
|
||||
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_zhurong:['female','shu',4,['sblieren','sbjuxiang']],
|
||||
sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']],
|
||||
sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang']],
|
||||
sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan']],
|
||||
},
|
||||
characterSort:{
|
||||
sb:{
|
||||
|
@ -49,6 +51,185 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -240,7 +421,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 0'
|
||||
player.chooseTarget(get.prompt('sbzaiqi'),'选择任意名角色并消耗等量蓄力值,令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力',[1,player.countMark('charge')]).set('ai',function(target){
|
||||
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'
|
||||
if(result.bool){
|
||||
|
@ -275,19 +457,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
backflow:{
|
||||
audio:'sbzaiqi',
|
||||
trigger:{
|
||||
player:'enterGame',
|
||||
//player:'enterGame',
|
||||
source:'damageSource',
|
||||
global:'phaseBefore',
|
||||
//global:'phaseBefore',
|
||||
},
|
||||
usable:1,
|
||||
forced:true,
|
||||
locked:false,
|
||||
filter:function(event,player){
|
||||
if(event.name=='damage') return true;
|
||||
return (event.name!='phase'||game.phaseNumber==0);
|
||||
},
|
||||
forced:true,
|
||||
locked:false,
|
||||
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];
|
||||
player.chooseTarget('烈刃:是否对除'+get.translation(target)+'外的一名其他角色造成1点伤害?',(card,player,target)=>{
|
||||
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'
|
||||
if(result.bool){
|
||||
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));
|
||||
},
|
||||
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){
|
||||
var target=result.targets[0],card=result.cards[0];
|
||||
player.logSkill('sbkurou',target);
|
||||
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.15);
|
||||
player.give(card,target);
|
||||
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:{
|
||||
gain:{
|
||||
audio:'sbkurou',
|
||||
|
@ -3626,6 +3827,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
subSkill:{
|
||||
draw:{
|
||||
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'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
|
@ -3637,7 +3843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{
|
||||
effect:{
|
||||
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:{
|
||||
audio:2,
|
||||
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',
|
||||
usable:1,
|
||||
position:'he',
|
||||
|
@ -3689,10 +3902,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(all) player.removeMark('sbtongye',1);
|
||||
},
|
||||
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:{
|
||||
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
|
||||
},
|
||||
},
|
||||
|
@ -3703,7 +3923,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
onremove:true,
|
||||
content:function(){
|
||||
'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'
|
||||
if(result.control=='变化'){
|
||||
player.addSkill('sbtongye_change',1);
|
||||
|
@ -4242,7 +4473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
//华雄
|
||||
sbyangwei:{
|
||||
audio:2,
|
||||
audio:3,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return !player.hasSkill('sbyangwei_counter',null,null,false);
|
||||
|
@ -4882,10 +5113,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbhuoshou:'祸首',
|
||||
sbhuoshou_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】指定第一个目标后,你代替其成为此牌的伤害来源。③出牌阶段开始时,你随机获得弃牌堆中的一张【南蛮入侵】。④出牌阶段,若你于此阶段使用过【南蛮入侵】,你不能使用【南蛮入侵】。',
|
||||
sbzaiqi:'再起',
|
||||
sbzaiqi_info:'蓄力技(1/7)。①弃牌阶段结束时,你可以消耗任意点蓄力值并选择等量名角色,然后令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力。②每回合限一次。当你造成伤害后,你获得1点蓄力值。',
|
||||
sbzaiqi_info:'蓄力技(0/7)。①弃牌阶段结束时,你可以消耗任意点蓄力值并选择等量名角色,然后令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力。②每回合限一次。当你造成伤害后,你获得1点蓄力值。',
|
||||
sb_zhanghe:'谋张郃',
|
||||
sbqiaobian:'巧变',
|
||||
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_shi:'谋攻篇·识',
|
||||
|
|
|
@ -141,6 +141,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
"chendao":"陈到,字叔至,生卒年不详,豫州汝南(今河南驻马店平舆县)人。三国时期蜀汉将领,刘备帐下白毦兵统领,名位常亚于赵云,以忠勇著称。蜀汉建兴年间,任征西将军、永安都督,封亭侯。在任期间去世。",
|
||||
},
|
||||
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:{
|
||||
audio:'drlt_wanglie',
|
||||
|
@ -2270,6 +2346,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
nzry_mingren:{
|
||||
audio:"nzry_mingren_1",
|
||||
audioname:['sb_yl_luzhi'],
|
||||
marktext:"任",
|
||||
intro:{
|
||||
content:'expansion',
|
||||
|
@ -2283,6 +2360,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
subSkill:{
|
||||
1:{
|
||||
audio:2,
|
||||
audioname:['sb_yl_luzhi'],
|
||||
trigger:{
|
||||
global:'phaseBefore',
|
||||
player:'enterGame',
|
||||
|
@ -2307,7 +2385,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
2:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:'phaseJieshuBegin',
|
||||
},
|
||||
|
@ -2317,7 +2394,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
direct:true,
|
||||
content:function(){
|
||||
'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 color=get.color(card);
|
||||
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:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
|
@ -3156,13 +3177,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
xinkuanggu:{
|
||||
trigger:{source:'damageSource'},
|
||||
filter:function(event,player){
|
||||
return get.distance(player,event.player)<=1&&event.num>0;
|
||||
},
|
||||
direct:true,
|
||||
audio:'kuanggu',
|
||||
audioname:['re_weiyan','ol_weiyan'],
|
||||
trigger:{source:'damageSource'},
|
||||
filter:function(event,player){
|
||||
return event.kuangguCheck&&event.num>0;
|
||||
},
|
||||
direct:true,
|
||||
preHidden:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -3177,7 +3198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
else{
|
||||
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('ai',function(){
|
||||
return _status.event.getParent().choice;
|
||||
|
@ -3190,7 +3211,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
event.goto(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
group:'kuanggu_check',
|
||||
},
|
||||
xinliegong:{
|
||||
shaRelated:true,
|
||||
|
@ -3803,6 +3825,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
preHidden:true,
|
||||
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:{
|
||||
player:'useCardToPlayered',
|
||||
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;
|
||||
return player==event.target||event.getParent().triggeredTargets3.length==1;
|
||||
},
|
||||
locked:false,
|
||||
frequent:true,
|
||||
content:function(){
|
||||
player.draw();
|
||||
|
@ -4871,9 +4899,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
preHidden:true,
|
||||
check:function(event,player){
|
||||
if(player.countCards('h')<=1) return true;
|
||||
return game.hasPlayer(function(current){
|
||||
return current!=player&¤t.isMinHandcard()&&get.attitude(player,current)>0;
|
||||
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
||||
return player!==target&&!game.hasPlayer(function(current){
|
||||
return current!==player&¤t!==target&¤t.countCards('h')<target.countCards('h');
|
||||
})&&get.attitude(player,target)>0;
|
||||
});
|
||||
},
|
||||
content:function(){
|
||||
|
@ -5030,6 +5059,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_sunyi:'gzyinghun_re_sunyi',
|
||||
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'},
|
||||
direct: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');
|
||||
}
|
||||
},
|
||||
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:{
|
||||
audio:'yinghun',
|
||||
|
@ -5089,6 +5141,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_sunyi:'gzyinghun_re_sunyi',
|
||||
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'},
|
||||
filter:function(event,player){
|
||||
return player.getDamagedHp()>0;
|
||||
|
@ -5143,13 +5204,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
ai:{
|
||||
threaten:function(player,target){
|
||||
if(target.hp==target.maxHp) return 0.5;
|
||||
if(target.hp==1) return 2;
|
||||
if(target.hp==2) return 1.5;
|
||||
return 0.5;
|
||||
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];
|
||||
}
|
||||
},
|
||||
maixie:true,
|
||||
threaten:function(player,target){
|
||||
return Math.max(0.5,target.getDamagedHp()/2);
|
||||
},
|
||||
maixie:true
|
||||
}
|
||||
},
|
||||
yinghun_ol_sunjian:{audio:2},
|
||||
|
@ -5405,7 +5471,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
huoji:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
enable:'chooseToUse',
|
||||
filterCard:function(card){
|
||||
return get.color(card)=='red';
|
||||
},
|
||||
|
@ -5416,7 +5482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
position:'hs',
|
||||
prompt:'将一张红色牌当火攻使用',
|
||||
check:function(card){
|
||||
var player=_status.currentPhase;
|
||||
var player=get.player();
|
||||
if(player.countCards('h')>player.hp){
|
||||
return 6-get.value(card);
|
||||
}
|
||||
|
@ -5498,50 +5564,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
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:{
|
||||
audio:2,
|
||||
audioname:['re_pangtong'],
|
||||
|
@ -6238,30 +6260,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
useShan:true,
|
||||
effect:{
|
||||
target:function(card,player,target,current){
|
||||
if(get.tag(card,'respondShan')){
|
||||
var hastarget=game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0;
|
||||
});
|
||||
var be=target.countCards('e',{color:'black'});
|
||||
if(target.countCards('h','shan')&&be){
|
||||
if(!target.hasSkill('guidao')) return 0;
|
||||
return [0,hastarget?target.countCards('he')/2:0];
|
||||
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||
target: target,
|
||||
card: card
|
||||
},true)){
|
||||
let club=0,spade=0;
|
||||
if(game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||
})){
|
||||
club=2;
|
||||
spade=4;
|
||||
}
|
||||
if(target.countCards('h','shan')&&target.countCards('h')>2){
|
||||
if(!target.hasSkill('guidao')) return 0;
|
||||
return [0,hastarget?target.countCards('h')/4:0];
|
||||
}
|
||||
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
|
||||
return [0,0];
|
||||
}
|
||||
if(target.countCards('h')==0){
|
||||
return [1.5,0];
|
||||
}
|
||||
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)];
|
||||
if(!target.isHealthy()) club+=2;
|
||||
if(!club&&!spade) return 1;
|
||||
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(spade&&get.color(cardx)==='black') max=1;
|
||||
},pos);
|
||||
if(max===2) return [1,Math.max(club,spade)];
|
||||
if(max===1) return [1,Math.min(club,spade)];
|
||||
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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6458,11 +6483,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger:{source:'damageSource'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
return get.distance(player,event.player)<=1&&player.isDamaged();
|
||||
return event.kuangguCheck&&player.isDamaged();
|
||||
},
|
||||
content:function(){
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -6859,6 +6899,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
xinhongyan:{
|
||||
audio:2,
|
||||
audioname:['sb_xiaoqiao'],
|
||||
mod:{
|
||||
suit:function(card,suit){
|
||||
if(suit=='spade') return 'heart';
|
||||
|
@ -7206,17 +7247,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
useShan:true,
|
||||
effect:{
|
||||
target:function(card,player,target,current){
|
||||
if(get.tag(card,'respondShan')){
|
||||
var hastarget=game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0;
|
||||
});
|
||||
if(target.countCards('h','shan')&&target.countCards('e',{suit:'spade'})){
|
||||
return [0,hastarget?target.countCards('he')/2:0];
|
||||
}
|
||||
if(target.countCards('h','shan')){
|
||||
return [1,hastarget?target.countCards('he')/2:0];
|
||||
}
|
||||
return [1,target.countCards('h')/4];
|
||||
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||
target: target,
|
||||
card: card
|
||||
},true)&&game.hasPlayer(function(current){
|
||||
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||
})){
|
||||
if(!target.mayHaveShan(player)) return 1-0.1*Math.min(5,target.countCards('hs'));
|
||||
if(!target.hasSkillTag('rejudge')) return [1,1];
|
||||
let pos=player.hasSkillTag('viewHandcard',null,target,true)?'hes':'e';
|
||||
if(target.hasCard(function(cardx){
|
||||
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:'火计',
|
||||
bazhen:'八阵',
|
||||
kanpo:'看破',
|
||||
xinlianhuan:'连环',
|
||||
ollianhuan:'连环',
|
||||
lianhuan:'连环',
|
||||
lianhuan1:'连环',
|
||||
lianhuan3:'连环',
|
||||
lianhuan2:'连铸',
|
||||
lianhuan5:'连铸',
|
||||
ollianhuan3:'连环',
|
||||
niepan:'涅槃',
|
||||
oldniepan:'涅槃',
|
||||
quhu:'驱虎',
|
||||
|
@ -8033,12 +8069,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
luanji:'乱击',
|
||||
xueyi:'血裔',
|
||||
mengjin:'猛进',
|
||||
xinlianhuan_info:' 你可以将一张♣手牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标的上限数+1。',
|
||||
ollianhuan_info:' 你可以将一张♣牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标的上限数+1。',
|
||||
huoji_info:'出牌阶段,你可以将你的任意一张红色手牌当作【火攻】使用。',
|
||||
huoji_info:'你可以将一张红色手牌当作【火攻】使用。',
|
||||
bazhen_info:'锁定技,若你的防具栏内没有牌且没有被废除,则你视为装备着【八卦阵】。',
|
||||
kanpo_info:'你可以将你的任意一张黑色手牌当做【无懈可击】使用。',
|
||||
lianhuan_info:'出牌阶段,你可以将一张♣手牌当做【铁索连环】使用或重铸。',
|
||||
niepan_info:'限定技,出牌阶段或当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
||||
oldniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。',
|
||||
quhu_info:'出牌阶段限一次,你可以与一名体力值大于你的角色拼点,若你赢,则该角色对其攻击范围内另一名由你指定的角色造成1点伤害。若你没赢,该角色对你造成一点伤害。',
|
||||
|
@ -8106,7 +8139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xinkuanggu:'狂骨',
|
||||
gzbuqu:'不屈',
|
||||
gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,你可以将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死流程。',
|
||||
xinkuanggu_info:'当你对距离1以内的一名角色造成1点伤害后,你可以回复1点体力或摸一张牌。',
|
||||
xinkuanggu_info:'当你造成1点伤害后,若受伤角色受到此伤害时你与其的距离不大于1,则你可以回复1点体力或摸一张牌。',
|
||||
xinliegong_info:'①你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标。②当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。',
|
||||
jiewei_info:'当你的武将牌翻面后,你可以摸一张牌。然后你可以使用一张锦囊牌或装备牌,并可以在此牌结算后弃置场上一张同类型的牌',
|
||||
releiji_info:'当你使用或打出一张【闪】时,你可令一名其他角色进行一次判定:若结果为梅花,其受到一点雷电伤害,然后你回复一点体力;若结果为黑桃,其受到两点雷电伤害。',
|
||||
|
@ -8115,7 +8148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jushou_info:'结束阶段,你可以摸3张牌,并将武将牌翻面。',
|
||||
moon_jushou_info:'结束阶段,你可以摸一张牌,并将武将牌翻面。',
|
||||
liegong_info:'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能被响应。',
|
||||
kuanggu_info:'锁定技,当你造成伤害后,若受伤角色与你的距离不大于1,你回复X点体力(X为伤害值)。',
|
||||
kuanggu_info:'锁定技,当你造成伤害后,若受伤角色受到此伤害时你与其的距离不大于1,你回复X点体力(X为伤害值)。',
|
||||
tianxiang_info:'当你即将受到伤害时,你可以弃置一张♥手牌,将伤害转移给一名其他角色,然后该角色摸X张牌(X为其已损失的体力值)。',
|
||||
hongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。',
|
||||
buqu_info:'锁定技,当你处于濒死状态时,你亮出牌堆顶的一张牌并置于你的武将牌上,称之为“创”。若此牌的点数与你武将牌上已有的“创”点数均不同,则你回复至1体力。若点数相同,则将此牌置入弃牌堆。只要你的武将牌上有“创”,你的手牌上限便与“创”的数量相等。',
|
||||
|
@ -8152,6 +8185,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcwanglie_info:"①出牌阶段,你对其他角色使用的前两张牌无距离限制。②当你于出牌阶段内使用牌时,你可以令此牌不能被响应,然后你于本阶段内不能使用牌指定其他角色为目标。",
|
||||
nzry_shicai:"恃才",
|
||||
nzry_shicai_info:"当你使用非装备牌结算结束后,或成为自己使用装备牌的目标后,若此牌与你本回合使用的牌类型均不同,则你可以将此牌置于牌堆顶,然后摸一张牌。",
|
||||
lianhuan:'连环',
|
||||
lianhuan_info:'你可以将♣手牌当作【铁索连环】使用或重铸。',
|
||||
|
||||
shenhua_feng:'神话再临·风',
|
||||
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();
|
||||
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 1;
|
||||
//return 1;
|
||||
});
|
||||
'step 2'
|
||||
if(result.index+event.addIndex==0){
|
||||
|
|
1196
character/sp.js
1196
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_jsp_guanyu:['male','wei',4,['new_rewusheng','dcdanji']],
|
||||
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']],
|
||||
guānning:['male','shu',3,['dcxiuwen','dclongsong']],
|
||||
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']],
|
||||
re_hucheer:['male','qun',4,['redaoji','fuzhong']],
|
||||
re_dongcheng:['male','qun',4,['xuezhao']],
|
||||
tangji:['female','qun',3,['jielie','kangge']],
|
||||
tangji:['female','qun',3,['kangge','jielie']],
|
||||
zhangheng:['male','qun',8,['dangzai','liangjue']],
|
||||
duanwei:['male','qun',4,['langmie']],
|
||||
re_niujin:['male','wei',4,['recuorui','reliewei']],
|
||||
|
@ -608,10 +608,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
player.addTempSkill('dclvecheng_xiongluan');
|
||||
player.markAuto('dclvecheng_xiongluan',[target]);
|
||||
var cards=player.getCards('h','sha');
|
||||
if(cards.length) player.addGaintag(cards,'dclvecheng_xiongluan');
|
||||
},
|
||||
ai:{
|
||||
threaten:2.1,
|
||||
order:9,
|
||||
threaten:3.1,
|
||||
order:3.5,
|
||||
expose:0.2,
|
||||
result:{
|
||||
target:function(player,target){
|
||||
|
@ -632,7 +634,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
charlotte:true,
|
||||
forced:true,
|
||||
popup:false,
|
||||
onremove:true,
|
||||
onremove:function(player,skill){
|
||||
player.removeGaintag('dclvecheng_xiongluan');
|
||||
delete player.storage[skill];
|
||||
},
|
||||
filter:function(event,player){
|
||||
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);
|
||||
},
|
||||
intro:{
|
||||
content:'可以对$随意大喊大叫'
|
||||
content:'对$使用“掠城”【杀】无任何次数限制',
|
||||
},
|
||||
mod:{
|
||||
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,
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event,player){
|
||||
if(player.countCards('h')>=player.maxHp) return false;
|
||||
var suit=get.suit(event.card);
|
||||
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,
|
||||
selectCard:[1,Infinity],
|
||||
check:function(card){
|
||||
var player=_status.event.player;
|
||||
if(ui.selected.cards.length<=Math.max(1,player.needsToDiscard(),player.countCards('h')-4)) return 6-get.value(card);
|
||||
return 4-get.value(card);
|
||||
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 num-get.value(card);
|
||||
return num/2-get.value(card);
|
||||
},
|
||||
position:'h',
|
||||
discard:false,
|
||||
|
@ -2870,7 +2877,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
viewAs:{name:'juedou'},
|
||||
position:'h',
|
||||
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,
|
||||
precontent:function(){
|
||||
delete event.result.skill;
|
||||
|
@ -4545,12 +4552,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
//唐姬
|
||||
jielie:{
|
||||
kangge:{
|
||||
audio:2,
|
||||
trigger:{player:'phaseBegin'},
|
||||
direct:true,
|
||||
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(){
|
||||
'step 0'
|
||||
|
@ -4560,31 +4567,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
player.logSkill('jielie',target);
|
||||
player.addSkill('jielie_clear');
|
||||
player.storage.jielie=target;
|
||||
player.markSkill('jielie');
|
||||
player.logSkill('kangge',target);
|
||||
player.addSkill('kangge_clear');
|
||||
player.storage.kangge=target;
|
||||
player.markSkill('kangge');
|
||||
game.delayx();
|
||||
}
|
||||
},
|
||||
intro:{content:'已指定$为目标'},
|
||||
group:['jielie_draw','jielie_dying','jielie_die'],
|
||||
group:['kangge_draw','kangge_dying','kangge_die'],
|
||||
subSkill:{
|
||||
draw:{
|
||||
audio:'jielie',
|
||||
audio:'kangge',
|
||||
trigger:{
|
||||
global:['gainAfter','loseAsyncAfter'],
|
||||
},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
if(player.countMark('jielie_draw')>=3) return false;
|
||||
var target=player.storage.jielie;
|
||||
if(player.countMark('kangge_draw')>=3) return false;
|
||||
var target=player.storage.kangge;
|
||||
return target&&target!=_status.currentPhase&&event.getg(target).length>0;
|
||||
},
|
||||
logTarget:'player',
|
||||
content:function(){
|
||||
var num=Math.min(3-player.countMark('jielie_draw'),trigger.getg(player.storage.jielie).length);
|
||||
player.addMark('jielie_draw',num,false);
|
||||
var num=Math.min(3-player.countMark('kangge_draw'),trigger.getg(player.storage.kangge).length);
|
||||
player.addMark('kangge_draw',num,false);
|
||||
player.draw(num);
|
||||
},
|
||||
},
|
||||
|
@ -4595,18 +4602,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
popup:false,
|
||||
charlotte:true,
|
||||
filter:function(event,player){
|
||||
return player.countMark('jielie_draw')>0;
|
||||
return player.countMark('kangge_draw')>0;
|
||||
},
|
||||
content:function(){
|
||||
player.removeMark('jielie_draw',player.countMark('jielie_draw'),false);
|
||||
player.removeMark('kangge_draw',player.countMark('kangge_draw'),false);
|
||||
},
|
||||
},
|
||||
dying:{
|
||||
audio:'jielie',
|
||||
audio:'kangge',
|
||||
trigger:{global:'dying'},
|
||||
logTarget:'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){
|
||||
return get.attitude(player,event.player)>0;
|
||||
|
@ -4614,15 +4621,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
prompt2:'令其将体力值回复至1点',
|
||||
content:function(){
|
||||
trigger.player.recover(1-trigger.player.hp);
|
||||
player.addTempSkill('jielie_temp','roundStart');
|
||||
player.addTempSkill('kangge_temp','roundStart');
|
||||
},
|
||||
},
|
||||
temp:{},
|
||||
die:{
|
||||
audio:'jielie',
|
||||
audio:'kangge',
|
||||
trigger:{global:'dieAfter'},
|
||||
filter:function(event,player){
|
||||
return event.player==player.storage.jielie;
|
||||
return event.player==player.storage.kangge;
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
|
@ -4636,24 +4643,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
threaten:2,
|
||||
},
|
||||
},
|
||||
kangge:{
|
||||
jielie:{
|
||||
audio:2,
|
||||
trigger:{player:'damageBegin4'},
|
||||
direct:true,
|
||||
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(){
|
||||
'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;
|
||||
if(get.attitude(player,player.storage.jielie)<=0) return 'cancel2';
|
||||
if(get.attitude(player,player.storage.kangge)<=0) return 'cancel2';
|
||||
return lib.suit.randomGet();
|
||||
});
|
||||
'step 1'
|
||||
if(result.control!='cancel2'){
|
||||
event.suit=result.control;
|
||||
player.logSkill('kangge',player.storage.jielie);
|
||||
player.logSkill('jielie',player.storage.kangge);
|
||||
trigger.cancel();
|
||||
player.loseHp(trigger.num);
|
||||
}
|
||||
|
@ -4667,7 +4674,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(card) cards.push(card);
|
||||
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:{
|
||||
trigger:{player:'phaseBefore',global:'roundStart'},
|
||||
trigger:{
|
||||
player:'phaseBeforeEnd',
|
||||
global:'roundStart',
|
||||
},
|
||||
direct:true,
|
||||
audio:2,
|
||||
audioname:['tw_beimihu'],
|
||||
|
@ -10127,6 +10137,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
mushun:['mushun','sp_mushun'],
|
||||
wangjun:['dc_wangjun','wangjun'],
|
||||
zoushi:['re_zoushi','jsrg_zoushi'],
|
||||
zhangmancheng:['dc_zhangmancheng','tw_zhangmancheng'],
|
||||
},
|
||||
translate:{
|
||||
lijue:"李傕",
|
||||
|
@ -10208,7 +10219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zongkui:'纵傀',
|
||||
zongkui_mark:'纵傀',
|
||||
zongkui_mark_bg:'傀',
|
||||
zongkui_info:'回合开始时,你可以指定一名未拥有“傀”标记的其他角色,令其获得一枚“傀”标记。每轮游戏开始时,你指定一名体力值最少且没有“傀”标记的其他角色,令其获得一枚“傀”标记。',
|
||||
zongkui_info:'回合开始前,你可以指定一名未拥有“傀”标记的其他角色,令其获得一枚“傀”标记。一轮游戏开始时,你指定一名体力值最少且没有“傀”标记的其他角色,令其获得一枚“傀”标记。',
|
||||
guju:'骨疽',
|
||||
guju_info:'锁定技,拥有“傀”标记的角色受到伤害后,你摸一张牌。',
|
||||
baijia:'拜假',
|
||||
|
@ -10450,10 +10461,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
liangjue:'粮绝',
|
||||
liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸两张牌。',
|
||||
tangji:'唐姬',
|
||||
jielie:'抗歌',
|
||||
jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外得到牌后,你摸等量的牌(每回合至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。',
|
||||
kangge:'节烈',
|
||||
kangge_info:'当你受到除自己和“抗歌”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“抗歌”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。',
|
||||
kangge:'抗歌',
|
||||
kangge_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外得到牌后,你摸等量的牌(每回合至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。',
|
||||
jielie:'节烈',
|
||||
jielie_info:'当你受到除自己和“抗歌”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“抗歌”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。',
|
||||
re_dongcheng:'董承',
|
||||
xuezhao:'血诏',
|
||||
xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力上限)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。',
|
||||
|
@ -10632,7 +10643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dclongsong_info:'出牌阶段开始时,你可以将一张红色牌交给一名其他角色。然后其须选择其所有的发动时机包含“出牌阶段”的技能,其于此阶段这些技能失效,你获得这些技能且至多可以发动一次。',
|
||||
dc_zhangmancheng:'张曼成',
|
||||
dclvecheng:'掠城',
|
||||
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用【杀】无次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
|
||||
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
|
||||
dczhongji:'螽集',
|
||||
dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。',
|
||||
dc_mengda:'孟达',
|
||||
|
|
|
@ -1459,6 +1459,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
xinzhiheng:{
|
||||
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',
|
||||
// alter:true,
|
||||
usable:1,
|
||||
|
@ -1503,16 +1511,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
delay:{}
|
||||
},
|
||||
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:{
|
||||
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
|
||||
},
|
||||
},
|
||||
zhiheng:{
|
||||
audio:2,
|
||||
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',
|
||||
usable:1,
|
||||
position:'he',
|
||||
|
|
|
@ -1100,20 +1100,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
logTarget:'player',
|
||||
check:function(event,player){
|
||||
var att=get.attitude(event.player,player);
|
||||
if(player.hasSkill('twzhiqu')){
|
||||
var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
|
||||
if(cnt>=2){
|
||||
if(att<0) return true;
|
||||
return false;
|
||||
}
|
||||
if(att<0&&cnt>=2||att>0&&!cnt) return true;
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
if(att<0) return false;
|
||||
return true;
|
||||
}
|
||||
let att=get.attitude(player,event.player);
|
||||
if(att>0) return true;
|
||||
if(!player.hasSkill('twzhiqu')) return false;
|
||||
let cnt=game.countPlayer(current=>get.distance(player,current)===2);
|
||||
if(cnt>2||cnt===2&&Math.abs(att)<2||cnt&&Math.abs(att)<1) return true;
|
||||
return false;
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -1126,20 +1118,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return _status.event.choice;
|
||||
}).set('choice',function(){
|
||||
var att=get.attitude(target,player);
|
||||
if(att==0) return 0;
|
||||
if(att===0) return 0;
|
||||
if(player.hasSkill('twzhiqu')){
|
||||
var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
|
||||
if(cnt>=2){
|
||||
if(att<0) return 1;
|
||||
return 0;
|
||||
var cnt=game.countPlayer(current=>get.distance(player,current)===2);
|
||||
if(att>0){
|
||||
if(cnt||player.needsToDiscard(1)) return 0;
|
||||
return 1;
|
||||
}
|
||||
if(att<0&&cnt>=2||att>0&&!cnt) return 1;
|
||||
if(!cnt) return 0;
|
||||
if(cnt>=2||get.distance(target,player,'attack')===2||get.distance(target,player)===2) return 1;
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
if(att<0) return 0;
|
||||
return [0,1].randomGet();
|
||||
}
|
||||
if(att<0||player.needsToDiscard(1)&&game.hasPlayer(function(current){
|
||||
return current!==player&¤t!==target&&!player.inRange(current);
|
||||
})) return 0;
|
||||
return [0,1].randomGet();
|
||||
}());
|
||||
'step 1'
|
||||
if(result.index==0){
|
||||
|
@ -1360,6 +1353,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
locked:false,
|
||||
direct:true,
|
||||
onremove:true,
|
||||
intro:{
|
||||
content:'players'
|
||||
},
|
||||
filter:function(event,player){
|
||||
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,
|
||||
logTarget:'target',
|
||||
init:function(player){
|
||||
var target=_status.currentPhase;
|
||||
if(!target||!target!=player) return;
|
||||
if(!player.getStorage('twxiangyu_range').length){
|
||||
var targets=game.filterPlayer(current=>{
|
||||
return current.getHistory('lose').length;
|
||||
|
@ -4591,7 +4589,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
mod:{
|
||||
attackRange:function(player,num){
|
||||
return num+player.getStorage('twxiangyu_range').length;
|
||||
return num+Math.min(5,player.getStorage('twxiangyu_range').length);
|
||||
},
|
||||
},
|
||||
subSkill:{
|
||||
|
@ -4622,7 +4620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
marktext:'羽',
|
||||
intro:{
|
||||
content:function(storage,player){
|
||||
var num=storage?storage.length:0;
|
||||
var num=Math.min(5,storage?storage.length:0);
|
||||
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.includes(get.name(card));
|
||||
},'hs');
|
||||
return false;
|
||||
//return false;
|
||||
},
|
||||
group:'twchaofeng_compare',
|
||||
chooseButton:{
|
||||
|
@ -11389,6 +11387,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
twzhian:{
|
||||
audio:2,
|
||||
init:function(player){
|
||||
game.addGlobalSkill('twzhian_ai');
|
||||
},
|
||||
onremove:function(player){
|
||||
game.removeGlobalSkill('twzhian_ai');
|
||||
},
|
||||
usable:1,
|
||||
trigger:{global:'useCardAfter'},
|
||||
direct:true,
|
||||
|
@ -11468,6 +11472,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 2'
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -14119,7 +14145,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
equan_info:'锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有技能失效直到回合结束。',
|
||||
manji:'蛮汲',
|
||||
manji_info:'锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。',
|
||||
wuban:'吴班',
|
||||
wuban:'TW吴班',
|
||||
wuban_prefix:'TW',
|
||||
jintao:'进讨',
|
||||
jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。',
|
||||
yuejiu:'TW乐就',
|
||||
|
@ -14275,7 +14302,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。',
|
||||
twqingtao:'清滔',
|
||||
twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
|
||||
tw_jiangji:'蒋济',
|
||||
tw_jiangji:'TW蒋济',
|
||||
tw_jiangji_prefix:'TW',
|
||||
twjichou:'急筹',
|
||||
twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
|
||||
twjilun:'机论',
|
||||
|
@ -14308,7 +14336,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twxiongzheng_info:'一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。',
|
||||
twluannian:'乱年',
|
||||
twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。',
|
||||
tw_baoxin:'鲍信',
|
||||
tw_baoxin:'TW鲍信',
|
||||
tw_baoxin_prefix:'TW',
|
||||
twmutao:'募讨',
|
||||
twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。',
|
||||
twyimou:'毅谋',
|
||||
|
@ -14473,7 +14502,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
tw_liuzhang_prefix:'TW',
|
||||
twyaohu:'邀虎',
|
||||
twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。',
|
||||
tw_liwei:'李遗',
|
||||
tw_liwei:'TW李遗',
|
||||
tw_liwei_prefix:'TW',
|
||||
twjiaohua:'教化',
|
||||
twjiaohua_info:'当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。',
|
||||
tw_yanxiang:'阎象',
|
||||
|
|
|
@ -94,8 +94,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'],
|
||||
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi'],
|
||||
sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'],
|
||||
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun','zhoubuyi'],
|
||||
sp2_qifu:['ol_guansuo','dc_zhaoxiang','dc_xujing'],
|
||||
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun','zhoubuyi','dc_xujing'],
|
||||
sp2_qifu:['ol_guansuo','dc_zhaoxiang'],
|
||||
sp2_gaoshan:['wanglang','liuhui'],
|
||||
sp2_wumiao:['wu_zhugeliang','wu_luxun'],
|
||||
}
|
||||
|
@ -2358,22 +2358,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}).set('choice',(()=>{
|
||||
var choicesx=choices.slice();
|
||||
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;
|
||||
}),bool2=choicesx.contains('选项二')&&game.countPlayer(current=>get.attitude(player,current)>0)>=1;
|
||||
if(!bool1&&!bool2){
|
||||
}),bool2=choicesx.includes('选项二');
|
||||
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++){
|
||||
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++){
|
||||
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('选项三');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(choicesx.contains('选项三')) return '选项三';
|
||||
if(bool2>2) return '选项二';
|
||||
if(choicesx.includes('选项三')) return '选项三';
|
||||
if(bool2===2) return '选项二';
|
||||
if(bool1) return '选项一';
|
||||
if(bool2) return '选项二';
|
||||
return 'cancel2';
|
||||
|
@ -2486,6 +2492,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
subSkill:{
|
||||
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']},
|
||||
charlotte:true,
|
||||
forced:true,
|
||||
|
@ -2778,7 +2803,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
order:1,
|
||||
result:{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -3028,8 +3054,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},true);
|
||||
},
|
||||
ai:{
|
||||
order:5.5,
|
||||
result:{player:1}
|
||||
order:function(){
|
||||
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:{
|
||||
help:{
|
||||
|
@ -3609,6 +3670,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.logSkill('dcyuandi',target);
|
||||
if(result.control=='选项一'){
|
||||
player.discardPlayerCard(target,'h',true);
|
||||
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.15);
|
||||
}
|
||||
else game.asyncDraw([target,player]);
|
||||
}
|
||||
|
@ -3863,6 +3925,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
dcaichen:{
|
||||
audio:2,
|
||||
init:function(player){
|
||||
game.addGlobalSkill('dcaichen_hit');
|
||||
},
|
||||
onremove:function(player){
|
||||
game.removeGlobalSkill('dcaichen_hit');
|
||||
},
|
||||
trigger:{
|
||||
player:['loseAfter','phaseDiscardBefore'],
|
||||
global:'loseAsyncAfter',
|
||||
|
@ -3886,6 +3954,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger.directHit.add(player);
|
||||
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){
|
||||
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;
|
||||
return get.sgnAttitude(player,target)*get.buttonValue(button);
|
||||
return get.sgnAttitude(player,target)*get.value(button.link,target);
|
||||
});
|
||||
}
|
||||
}else event.finish();
|
||||
|
@ -4498,11 +4585,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
//周宣
|
||||
dcwumei:{
|
||||
audio:2,
|
||||
trigger:{player:'phaseBegin'},
|
||||
trigger:{player:'phaseBeginStart'},
|
||||
filter:function(event,player){
|
||||
return !player.hasSkill('dcwumei_used');
|
||||
},
|
||||
priority:10,//离谱的优先机制
|
||||
direct:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -4529,17 +4615,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger._triggered=5;
|
||||
var evt=player.insertPhase();
|
||||
delete evt.skill;
|
||||
game.broadcastAll(function(player){
|
||||
player.classList.remove('glow_phase');
|
||||
delete _status.currentPhase;
|
||||
},player);
|
||||
}
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
used:{charlotte:true},
|
||||
wake:{
|
||||
init:function(player){
|
||||
game.addGlobalSkill('dcwumei_all');
|
||||
},
|
||||
onremove:function(player){
|
||||
game.removeGlobalSkill('dcwumei_all');
|
||||
delete player.storage.dcwumei_wake;
|
||||
},
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
charlotte:true,
|
||||
popup:false,
|
||||
forced:true,
|
||||
onremove:true,
|
||||
filter:function(event,player){
|
||||
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;
|
||||
}
|
||||
}
|
||||
},
|
||||
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:{
|
||||
effect:{
|
||||
player_use:function(card,player,target){
|
||||
if(get.tag(card,'recover')&&target.hp>0) return 0;
|
||||
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,
|
||||
subSkill:{
|
||||
insert:{
|
||||
mark:true,
|
||||
intro:{
|
||||
content:'players'
|
||||
},
|
||||
trigger:{global:'phaseAfter'},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
|
@ -10447,6 +10553,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -10483,8 +10605,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
yuwei:{
|
||||
audio:2,
|
||||
trigger:{player:'shiyuanBegin'},
|
||||
filter:function(event,player){
|
||||
return _status.currentPhase.group=='qun';
|
||||
},
|
||||
zhuSkill:true,
|
||||
locked:true,
|
||||
forced:true,
|
||||
content:function(){},
|
||||
ai:{combo:'shiyuan'},
|
||||
},
|
||||
|
||||
|
@ -10903,11 +11031,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.judge(function(card){
|
||||
var type=get.subtype(card);
|
||||
return ['equip1','equip4','equip3','equip6'].contains(type)?6:-6;
|
||||
switch(type){
|
||||
case 'equip':return 4;
|
||||
case 'trick':return -4;
|
||||
default:return 0;
|
||||
}
|
||||
// switch(type){
|
||||
// case 'equip':return 4;
|
||||
// case 'trick':return -4;
|
||||
// default:return 0;
|
||||
// }
|
||||
}).judge2=function(result){
|
||||
return result.bool;
|
||||
};
|
||||
|
@ -10986,7 +11114,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return true;
|
||||
},
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -12235,6 +12369,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
luotong:['dc_luotong','luotong'],
|
||||
dc_wangchang:['dc_wangchang','tw_wangchang'],
|
||||
guozhao:['guozhao','xin_guozhao'],
|
||||
dingshangwan:['dingshangwan','ol_dingshangwan'],
|
||||
},
|
||||
translate:{
|
||||
puyuan:'蒲元',
|
||||
|
|
|
@ -2420,13 +2420,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var player=_status.event.player;
|
||||
var target=_status.event.target;
|
||||
var controls=_status.event.controls.slice();
|
||||
controls.sort(function(a,b){
|
||||
return [
|
||||
get.effect(target,{name:'wuzhong'},player,player)/2,
|
||||
get.effect(target,{name:'guohe_copy2'},player,player),
|
||||
get.effect(target,{name:'kaihua'},player,player),
|
||||
][['摸牌','弃牌','制衡'].indexOf(b)-['摸牌','弃牌','制衡'].indexOf(a)];
|
||||
});
|
||||
var map={
|
||||
'摸牌':get.effect(target,{name:'wuzhong'},player,player)/2,
|
||||
'弃牌':get.effect(target,{name:'guohe_copy2'},player,player),
|
||||
'制衡':get.effect(target,{name:'kaihua'},player,player),
|
||||
};
|
||||
controls.sort((a,b)=>map[b]-map[a]);
|
||||
return controls[0];
|
||||
}).set('target',target);
|
||||
}
|
||||
|
@ -2509,10 +2508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ol_guansuo:'dangxian_guansuo',
|
||||
},
|
||||
content:function(){
|
||||
var next=player.phaseUse();
|
||||
next.xindangxian=true;
|
||||
event.next.remove(next);
|
||||
trigger.next.push(next);
|
||||
trigger.phaseList.splice(trigger.num,0,'phaseUse|xindangxian');
|
||||
},
|
||||
group:'xindangxian_rewrite',
|
||||
subSkill:{
|
||||
|
@ -2521,7 +2517,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
forced:true,
|
||||
popup:false,
|
||||
filter:function(kagari){
|
||||
return kagari.xindangxian==true;
|
||||
return kagari._extraPhaseReason=='xindangxian';
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -7665,9 +7661,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
audioname:['guansuo'],
|
||||
content:function(){
|
||||
var next=player.phaseUse();
|
||||
event.next.remove(next);
|
||||
trigger.next.push(next);
|
||||
trigger.phaseList.splice(trigger.num,0,'phaseUse|dangxian');
|
||||
}
|
||||
},
|
||||
longyin:{
|
||||
|
@ -8484,6 +8478,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
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(){
|
||||
"step 0"
|
||||
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.2);
|
||||
player.draw(2);
|
||||
"step 1"
|
||||
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);
|
||||
},
|
||||
ai:{
|
||||
threaten:1.1,
|
||||
expose:0.3
|
||||
threaten:1.1
|
||||
}
|
||||
},
|
||||
xiantu1:{audio:true},
|
||||
|
@ -12567,13 +12565,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
usable:1,
|
||||
audio:'qice_backup',
|
||||
filter:function(event,player){
|
||||
var hs=player.getCards('h');
|
||||
const hs=player.getCards('h');
|
||||
if(!hs.length) return false;
|
||||
for(var i=0;i<hs.length;i++){
|
||||
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
|
||||
if(mod2===false) return false;
|
||||
}
|
||||
return true;
|
||||
if(hs.some(card=>{
|
||||
const mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
|
||||
return (mod2===false)
|
||||
})) return false;
|
||||
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:{
|
||||
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']);
|
||||
},
|
||||
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){
|
||||
var player=_status.event.player;
|
||||
|
@ -12655,6 +12660,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
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,
|
||||
}
|
||||
},
|
||||
|
@ -12793,7 +12802,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return true;//player.countCards('h')>player.maxHp;
|
||||
return player.countCards('h')>player.maxHp;
|
||||
},
|
||||
usable:1,
|
||||
content:function(){
|
||||
|
@ -14499,7 +14508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olddanshou_info:'当你造成伤害后,你可以摸一张牌。若如此做,终止一切结算,当前回合结束。',
|
||||
xindanshou_info:'①每回合限一次,当你成为基本牌或锦囊牌的目标后,你可以摸X张牌(X为你本回合内成为过基本牌或锦囊牌的目标的次数)。②一名其他角色的结束阶段,若你本回合内没有发动过〖胆守①〗,则你可以弃置X张牌并对其造成1点伤害(X为其手牌数,无牌则不弃)。',
|
||||
yizhong_info:'锁定技,当你的防具栏为空时,黑色的【杀】对你无效',
|
||||
xinzhan_info:'出牌阶段限一次,你可以观看牌堆顶的3张牌,然后展示其中任意数量♥的牌并获得之。',
|
||||
xinzhan_info:'出牌阶段限一次,若你的手牌数大于你的体力上限,你可以观看牌堆顶的三张牌,然后展示其中任意红桃牌并获得之。',
|
||||
huilei_info:'锁定技,当你死亡时,杀死你的角色弃置所有的牌。',
|
||||
enyuan_info:'锁定技。①当其他角色令你回复1点体力后,该角色摸一张牌。②当其他角色对你造成伤害后,其须交给你一张♥手牌,否则失去1点体力。',
|
||||
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;
|
||||
},
|
||||
check:function(event,player){
|
||||
if(get.attitude(player,event.player)>-2) return false;
|
||||
if(player.hp>2) return true;
|
||||
if(player.hp==2&&event.player.hp<3) return false;
|
||||
return player.hp>1;
|
||||
if(event.player.hasSkillTag('nodamage')) return false;
|
||||
let tj = player.countCards('hs', function (card) {
|
||||
return get.name(card) === 'tao' || get.name(card) === 'jiu';
|
||||
}),
|
||||
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',
|
||||
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.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:{
|
||||
trigger:{player:'damageEnd'},
|
||||
|
|
178
character/yxs.js
178
character/yxs.js
|
@ -93,39 +93,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
yxs_lanlinwang:'高长恭(541年―573年),又名高孝瓘、高肃,祖籍渤海调蓨(今河北省景县),神武帝高欢之孙,文襄帝高澄第四子,生母不详,南北朝时期北齐宗室、将领,封爵兰陵郡王。高长恭貌柔心壮,音容兼美。为将躬勤细事,每得甘美,虽一瓜数果,必与将士分享。累次升任至并州刺史。突厥攻入晋阳,高长恭奋力将其击退。邙山之战,高长恭为中军,率领五百骑兵再入周军包围圈,直至金墉城下,因高长恭戴着头盔,城中的人不确定是敌军或是我军,直到高长恭把头盔脱下来城上的人才知道是高长恭,派弓箭手开始放箭保护他,之后高长恭成功替金墉解围,高长恭在此次战中威名大振,士兵们为此战而讴歌他,即后来知名的《兰陵王入阵曲》。',
|
||||
},
|
||||
characterTitle:{
|
||||
"yxs_qinqiong":"Sukincen",
|
||||
},
|
||||
yxs_qinqiong:"Sukincen",
|
||||
},
|
||||
skill:{
|
||||
yxs_fanji:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"damageEnd",
|
||||
},
|
||||
direct:true,
|
||||
priority:12,
|
||||
filter:function (event,player){
|
||||
if(!player.countCards('h',{name:'sha'})) return false;
|
||||
return event.card.name=='sha'||event.card.name=='juedou';
|
||||
},
|
||||
content:function (){
|
||||
player.addTempSkill('yxs_fanji2','shaAfter');
|
||||
player.chooseToUse({name:'sha'},trigger.source,'反击:是否对'+get.translation(trigger.source)+'使用一张杀?').logSkill='yxs_fanji';
|
||||
},
|
||||
},
|
||||
yxs_fanji2:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"shaBegin",
|
||||
},
|
||||
direct:true,
|
||||
filter:function (event,player){
|
||||
return event.card&&event.card.name=='sha'&&get.color(event.card)=='red';
|
||||
},
|
||||
content:function (){
|
||||
trigger.directHit=true;
|
||||
},
|
||||
},
|
||||
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"damageEnd",
|
||||
},
|
||||
direct:true,
|
||||
priority:12,
|
||||
filter:function (event,player){
|
||||
if(!player.countCards('h',{name:'sha'})) return false;
|
||||
return event.card&&(event.card.name=='sha'||event.card.name=='juedou');
|
||||
},
|
||||
content:function(){
|
||||
player.addTempSkill('yxs_fanji2','shaAfter');
|
||||
player.chooseToUse({name:'sha'},trigger.source,'反击:是否对'+get.translation(trigger.source)+'使用一张杀?').logSkill='yxs_fanji';
|
||||
},
|
||||
},
|
||||
yxs_fanji2:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"shaBegin",
|
||||
},
|
||||
direct:true,
|
||||
filter:function (event,player){
|
||||
return event.card&&event.card.name=='sha'&&get.color(event.card)=='red';
|
||||
},
|
||||
content:function (){
|
||||
trigger.directHit=true;
|
||||
},
|
||||
},
|
||||
yxs_menshen3:{
|
||||
trigger:{
|
||||
player:['phaseBegin','dieBegin'],
|
||||
|
@ -133,78 +132,75 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
silent:true,
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(function(current){
|
||||
return current.hasSkill('yxs_menshen2');
|
||||
});
|
||||
return current.hasSkill('yxs_menshen2');
|
||||
});
|
||||
},
|
||||
content:function(){
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].hasSkill('yxs_menshen2')){
|
||||
game.players[i].removeSkill('yxs_menshen2');
|
||||
}
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].hasSkill('yxs_menshen2')){
|
||||
game.players[i].removeSkill('yxs_menshen2');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
yxs_menshen:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"phaseEnd",
|
||||
},
|
||||
priority:15,
|
||||
group:'yxs_menshen3',
|
||||
onremove:true,
|
||||
filter:function (event,player){
|
||||
return game.players.length>1;
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
player.chooseTarget('选择【门神】的目标',lib.translate.yxs_menshen_info,true,function(card,player,target){
|
||||
return target!=player;
|
||||
}).set('ai',function(target){
|
||||
return get.attitude(player,target);
|
||||
});
|
||||
"step 1"
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
yxs_menshen:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:"phaseEnd",
|
||||
},
|
||||
priority:15,
|
||||
group:'yxs_menshen3',
|
||||
onremove:true,
|
||||
filter:function (event,player){
|
||||
return game.players.length>1;
|
||||
},
|
||||
content:function(){
|
||||
"step 0"
|
||||
player.chooseTarget('选择【门神】的目标',lib.translate.yxs_menshen_info,true,function(card,player,target){
|
||||
return target!=player;
|
||||
}).set('ai',function(target){
|
||||
return get.attitude(player,target);
|
||||
});
|
||||
"step 1"
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
player.line(target,'green');
|
||||
game.log(target,'成为了','【门神】','的目标');
|
||||
target.storage.yxs_menshen2=player;
|
||||
target.addSkill('yxs_menshen2');
|
||||
}
|
||||
else {
|
||||
event.finish();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
expose:0.5,
|
||||
},
|
||||
},
|
||||
|
||||
yxs_menshen2:{
|
||||
audio:2,
|
||||
mark:'character',
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
expose:0.5,
|
||||
},
|
||||
},
|
||||
yxs_menshen2:{
|
||||
audio:2,
|
||||
mark:'character',
|
||||
intro:{
|
||||
content:'当你成为【杀】或【决斗】的目标后,改为$成为目标'
|
||||
},
|
||||
nopop:true,
|
||||
priority:15,
|
||||
trigger:{
|
||||
target:["shaBegin","juedouBegin"],
|
||||
},
|
||||
forced:true,
|
||||
trigger:{
|
||||
target:["shaBegin","juedouBegin"],
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
filter:function(event,player){
|
||||
return player.isAlive();
|
||||
},
|
||||
content:function (){
|
||||
var target=player.storage.yxs_menshen2;
|
||||
trigger.player.line(target,'green');
|
||||
trigger.targets.remove(player);
|
||||
trigger.targets.push(target);
|
||||
trigger.target = target;
|
||||
},
|
||||
},
|
||||
|
||||
content:function (){
|
||||
var target=player.storage.yxs_menshen2;
|
||||
trigger.player.line(target,'green');
|
||||
trigger.targets.remove(player);
|
||||
trigger.targets.push(target);
|
||||
trigger.target = target;
|
||||
},
|
||||
},
|
||||
guimian:{
|
||||
trigger:{source:'damageEnd'},
|
||||
forced:true,
|
||||
|
@ -2938,12 +2934,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
yxs_qinqiong:"秦琼",
|
||||
|
||||
yxs_fanji:"反击",
|
||||
yxs_fanji2:"反击",
|
||||
yxs_fanji_info:"当你受到【杀】或【决斗】造成的伤害后,你可以对伤害来源使用一张【杀】。若此【杀】为红色,其不可闪避",
|
||||
yxs_menshen:"门神",
|
||||
yxs_menshen2:"门神",
|
||||
yxs_menshen3:"门神",
|
||||
yxs_menshen_info:"回合结束阶段,你可选择一名其他角色,若如此做,直到你的下回合开始,所有角色对该角色使用的【杀】或【决斗】均视为对你使用",
|
||||
yxs_fanji2:"反击",
|
||||
yxs_fanji_info:"当你受到【杀】或【决斗】造成的伤害后,你可以对伤害来源使用一张【杀】。若此【杀】为红色,其不可闪避",
|
||||
yxs_menshen:"门神",
|
||||
yxs_menshen2:"门神",
|
||||
yxs_menshen3:"门神",
|
||||
yxs_menshen_info:"回合结束阶段,你可选择一名其他角色,若如此做,直到你的下回合开始,所有角色对该角色使用的【杀】或【决斗】均视为对你使用",
|
||||
zhuxin:'诛心',
|
||||
zhuxin_info:'出牌阶段限一次,你可以与一名其他角色拼点,若你赢,你对其造成一点伤害',
|
||||
wlianhuan:'连环',
|
||||
|
|
1848
game/game.js
1848
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 = '';
|
||||
for (var j = 0; j < max && (i + j) < chinese.length; j++) {
|
||||
if (!dict.withtone[chinese[i]]) {
|
||||
i+=(result[i].length-1);
|
||||
i+=(result[m].length-1);
|
||||
break;
|
||||
} // 如果碰到非汉字直接停止本次查找
|
||||
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 {
|
||||
display: none;
|
||||
}
|
||||
/* 火狐隐藏滚动条 */
|
||||
* {
|
||||
scrollbar-width: none;
|
||||
}
|
|
@ -12950,7 +12950,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
_mingzhi1:{
|
||||
trigger:{player:'phaseBeginStart'},
|
||||
priority:19,
|
||||
//priority:19,
|
||||
ruleSkill:true,
|
||||
forced:true,
|
||||
popup:false,
|
||||
filter:function(event,player){
|
||||
|
@ -14036,6 +14037,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
'step 0'
|
||||
game.broadcastAll(function(){
|
||||
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=[];
|
||||
for(var i in lib.characterPack.mode_guozhan){
|
||||
|
@ -14207,59 +14212,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
'step 2'
|
||||
if(!result) result={};
|
||||
var result2=event.result2;
|
||||
for(var i in result){
|
||||
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++){
|
||||
_status.characterlist.remove(game.players[i].name);
|
||||
_status.characterlist.remove(game.players[i].name2);
|
||||
game.players[i].hiddenSkills=lib.character[game.players[i].name1][3].slice(0);
|
||||
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(!lib.skill[game.players[i].hiddenSkills[j]]){
|
||||
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);
|
||||
}
|
||||
}
|
||||
game.broadcastAll(function(result,result2){
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
game.players[i].classList.add('unseen');
|
||||
game.players[i].classList.add('unseen2');
|
||||
var current=game.players[i],id=current.playerid;
|
||||
if(result[id]&&!current.name){
|
||||
current.init(result[id][0],result[id][1],false);
|
||||
}
|
||||
if(result2[id]&&result2[id].length){
|
||||
current.trueIdentity=result2[id][0][2].slice(6);
|
||||
}
|
||||
if(game.players[i]!=game.me){
|
||||
game.players[i].node.identity.firstChild.innerHTML='猜';
|
||||
game.players[i].node.identity.dataset.color='unknown';
|
||||
|
@ -14286,7 +14247,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
setTimeout(function(){
|
||||
ui.arena.classList.remove('choose-character');
|
||||
},500);
|
||||
},result2);
|
||||
},result2,result);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
|
|
@ -753,7 +753,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
player.init(result.links[0]);
|
||||
player.hp++;
|
||||
player.maxHp++;
|
||||
player.update();
|
||||
player.$update();
|
||||
}
|
||||
});
|
||||
"step 5"
|
||||
|
@ -1441,7 +1441,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
return list2.randomGets(num).sort(lib.sort.character);
|
||||
}
|
||||
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];
|
||||
}
|
||||
var list2x=list2.slice(0);
|
||||
|
@ -1852,6 +1853,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
zhu.identityShown=true;
|
||||
zhu.identity=zhuid;
|
||||
if(zhuid=='zhu') zhu.isZhu=true;
|
||||
zhu.setIdentity();
|
||||
zhu.node.identity.classList.remove('guessing');
|
||||
me.setIdentity(identity);
|
||||
|
@ -1950,14 +1952,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
var next=game.zhu.chooseButton(true);
|
||||
next.set('selectButton',(lib.configOL.double_character?2:1));
|
||||
next.set('createDialog',['选择角色',[list,'characterx']]);
|
||||
next.set('callback',function(player,result){
|
||||
player.init(result.links[0],result.links[1]);
|
||||
});
|
||||
next.set('ai',function(button){
|
||||
return Math.random();
|
||||
});
|
||||
"step 1"
|
||||
if(game.me!=game.zhu){
|
||||
if(!game.zhu.name){
|
||||
game.zhu.init(result.links[0],result.links[1])
|
||||
}
|
||||
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.broadcast(function(zhu,name,name2,addMaxHp){
|
||||
if(game.zhu!=game.me){
|
||||
if(!zhu.name){
|
||||
zhu.init(name,name2);
|
||||
}
|
||||
if(addMaxHp){
|
||||
|
|
Loading…
Reference in New Issue