Merge branch 'PR-Branch' into testtttest

This commit is contained in:
kola-king 2023-10-13 14:22:02 -07:00 committed by GitHub
commit b1219c05d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 3885 additions and 1886 deletions

BIN
audio/die/laimin.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_zhangzhang.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_xiaoqiao.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_yl_luzhi.mp3 Normal file

Binary file not shown.

BIN
audio/die/zhangyan.mp3 Normal file

Binary file not shown.

BIN
audio/skill/laishou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/laishou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/laishou3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/luanqun1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/luanqun2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/olguzheng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olguzheng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/ollangdao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/ollangdao2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olsuji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olsuji2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzhijian1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzhijian2.mp3 Normal file

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.

View File

@ -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){

View File

@ -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;
},
});

View File

@ -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);

View File

@ -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:{

View File

@ -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,

View File

@ -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'],

View File

@ -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');
}
if(game.players[i].hasSkill('kuangfeng2')){
game.players[i].removeSkill('kuangfeng2');
}
}
player.removeSkill('dawu3');
trigger.cancel();
},
onremove:function(player){
game.countPlayer2(current=>{
if(current.getStorage('dawu2').includes(player)){
current.unmarkAuto('dawu2',player);
current.removeAdditionalSkill(`dawu_${player.playerid}`);
}
},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个标记'
content:function(storage){
return `共有${storage.length}枚标记`;
},
forced:true,
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'fireDamage')) return 1.5;
if(get.tag(card,'fireDamage')&&current<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"

View File

@ -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:'潘凤',

View File

@ -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){

View File

@ -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;

View File

@ -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:'手杀异构·其疾如风',

View File

@ -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,

View File

@ -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',

View File

@ -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&&current!=target&&current.countCards('h')<target.countCards('h');
return player!==target&&!game.hasPlayer(function(current){
return current!==player&&current!==target&&current.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));
}
return 6.3-get.value(card);
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);
},
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,
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)){
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];
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('xinguidao')) return 0;
return [0,hastarget?target.countCards('h')/4:0];
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(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)];
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:'界限突破·风',

View File

@ -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'&&current!=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:'谋攻篇·识',

View File

@ -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&&current.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&&current!==target&&current.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.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(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(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:'神话再临·火',

View File

@ -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){

File diff suppressed because it is too large Load Diff

View File

@ -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:'孟达',

View File

@ -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',

View File

@ -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;
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;
}
if(att<0&&cnt>=2||att>0&&!cnt) return true;
return false;
}
else{
if(att<0) return false;
return true;
}
},
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;
var cnt=game.countPlayer(current=>get.distance(player,current)===2);
if(att>0){
if(cnt||player.needsToDiscard(1)) return 0;
return 1;
}
if(!cnt) return 0;
if(cnt>=2||get.distance(target,player,'attack')===2||get.distance(target,player)===2) return 1;
return 0;
}
if(att<0&&cnt>=2||att>0&&!cnt) return 1;
return 0;
}
else{
if(att<0) return 0;
if(att<0||player.needsToDiscard(1)&&game.hasPlayer(function(current){
return current!==player&&current!==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:'阎象',

View File

@ -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&&current.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)&&current.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:'蒲元',

View File

@ -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:'出牌阶段限一次,你可以将一张红桃手牌交给一名其他角色,获得该角色的一张牌,然后交给除该角色外的一名其他角色',

View File

@ -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'},

View File

@ -93,7 +93,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yxs_lanlinwang:'高长恭541年―573年又名高孝瓘、高肃祖籍渤海调蓨今河北省景县神武帝高欢之孙文襄帝高澄第四子生母不详南北朝时期北齐宗室、将领封爵兰陵郡王。高长恭貌柔心壮音容兼美。为将躬勤细事每得甘美虽一瓜数果必与将士分享。累次升任至并州刺史。突厥攻入晋阳高长恭奋力将其击退。邙山之战高长恭为中军率领五百骑兵再入周军包围圈直至金墉城下因高长恭戴着头盔城中的人不确定是敌军或是我军直到高长恭把头盔脱下来城上的人才知道是高长恭派弓箭手开始放箭保护他之后高长恭成功替金墉解围高长恭在此次战中威名大振士兵们为此战而讴歌他即后来知名的《兰陵王入阵曲》。',
},
characterTitle:{
"yxs_qinqiong":"Sukincen",
yxs_qinqiong:"Sukincen",
},
skill:{
yxs_fanji:{
@ -105,9 +105,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
priority:12,
filter:function (event,player){
if(!player.countCards('h',{name:'sha'})) return false;
return event.card.name=='sha'||event.card.name=='juedou';
return event.card&&(event.card.name=='sha'||event.card.name=='juedou');
},
content:function (){
content:function(){
player.addTempSkill('yxs_fanji2','shaAfter');
player.chooseToUse({name:'sha'},trigger.source,'反击:是否对'+get.translation(trigger.source)+'使用一张杀?').logSkill='yxs_fanji';
},
@ -125,7 +125,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.directHit=true;
},
},
yxs_menshen3:{
trigger:{
player:['phaseBegin','dieBegin'],
@ -144,7 +143,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
},
yxs_menshen:{
audio:2,
trigger:{
@ -156,7 +154,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function (event,player){
return game.players.length>1;
},
content:function (){
content:function(){
"step 0"
player.chooseTarget('选择【门神】的目标',lib.translate.yxs_menshen_info,true,function(card,player,target){
return target!=player;
@ -171,7 +169,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.storage.yxs_menshen2=player;
target.addSkill('yxs_menshen2');
}
else {
else{
event.finish();
}
},
@ -179,7 +177,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
expose:0.5,
},
},
yxs_menshen2:{
audio:2,
mark:'character',
@ -204,7 +201,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.target = target;
},
},
guimian:{
trigger:{source:'damageEnd'},
forced:true,

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -5529,3 +5529,7 @@ div[data-decoration="bronze"]::after{
::-webkit-scrollbar {
display: none;
}
/* 火狐隐藏滚动条 */
* {
scrollbar-width: none;
}

View File

@ -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];
}
game.broadcastAll(function(result,result2){
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]);
var current=game.players[i],id=current.playerid;
if(result[id]&&!current.name){
current.init(result[id][0],result[id][1],false);
}
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);
if(result2[id]&&result2[id].length){
current.trueIdentity=result2[id][0][2].slice(6);
}
}
for(var j=0;j<game.players[i].hiddenSkills.length;j++){
game.players[i].name1=game.players[i].name;
game.players[i].addSkillTrigger(game.players[i].hiddenSkills[j],true);
}
}
game.broadcastAll(function(result){
for(var i in result){
if(!lib.playerOL[i].name){
lib.playerOL[i].init(result[i][0],result[i][1],false);
}
}
for(var i=0;i<game.players.length;i++){
game.players[i].classList.add('unseen');
game.players[i].classList.add('unseen2');
if(game.players[i]!=game.me){
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);
});
}
},

View File

@ -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){