Merge branch 'libccy:PR-Branch' into PR-Branch

This commit is contained in:
nonameShijian 2023-11-14 14:58:53 +08:00 committed by GitHub
commit bf48a05fb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
93 changed files with 1613 additions and 417 deletions

BIN
audio/die/jsp_caoren.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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/lizhan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/lizhan2.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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/weikui1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/weikui2.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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -718,11 +718,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
event.finish(); event.finish();
return; return;
} }
if(get.is.versus()){ if(card.storage&&card.storage.chooseDirection||get.is.versus()){
player.chooseControl('顺时针','逆时针',function(event,player){ player.chooseControl('顺时针','逆时针',function(event,player){
if(player.next.side==player.side) return '逆时针'; if(get.event('isVersus')&&player.next.side==player.side||get.attitude(player,player.next)>get.attitude(player,player.previous)) return '逆时针';
return '顺时针'; return '顺时针';
}).set('prompt','选择'+get.translation(card)+'的结算方向'); }).set('prompt','选择'+get.translation(card)+'的结算方向').set('isVersus',get.is.versus());
} }
else{ else{
event.goto(2); event.goto(2);
@ -1168,26 +1168,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){
} }
else{ else{
var next=event.turn.chooseToRespond({name:'sha'}); var next=event.turn.chooseToRespond({name:'sha'});
if(event.shaRequired>1){ if(event.shaRequired>1) next.set('prompt2','共需打出'+event.shaRequired+'张杀');
next.set('prompt2','共需打出'+event.shaRequired+'张杀')
}
next.set('ai',function(card){ next.set('ai',function(card){
var event=_status.event; let event=_status.event,player=event.splayer,target=event.starget;
var player=event.splayer; if(player.hasSkillTag('notricksource')||target.hasSkillTag('notrick')) return 0;
var target=event.starget;
if(player.hasSkillTag('notricksource')) return 0;
if(target.hasSkillTag('notrick')) return 0;
if(event.shaRequired>1&&player.countCards('h','sha')<event.shaRequired) return 0; if(event.shaRequired>1&&player.countCards('h','sha')<event.shaRequired) return 0;
if(event.player==target){ if(event.player===target){
if(player.hasSkill('naman')) return -1; if(_status.event.tdamage>=0||player.hasSkill('naman')) return -1;
if(get.attitude(target,player)<0||event.player.hp<=1&&get.damageEffect(target,player,event.player)<get.damageEffect(player,target,event.player)){ if(get.attitude(target,player)<=0||event.player.hp<=1&&_status.event.tdamage<_status.event.pdamage){
return get.order(card); return get.order(card);
} }
return -1; return -1;
} }
else{ else{
if(target.hasSkill('naman')) return -1; if(_status.event.pdamage>=0||target.hasSkill('naman')) return -1;
if(get.attitude(player,target)<0||event.player.hp<=1&&get.damageEffect(target,player,event.player)>get.damageEffect(player,target,event.player)){ if(get.attitude(player,target)<=0||event.player.hp<=1&&_status.event.tdamage>_status.event.pdamage){
return get.order(card); return get.order(card);
} }
return -1; return -1;
@ -1195,6 +1190,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}); });
next.set('splayer',player); next.set('splayer',player);
next.set('starget',target); next.set('starget',target);
next.set('pdamage',get.damageEffect(player,target,event.turn));
next.set('tdamage',get.damageEffect(target,player,event.turn));
next.set('shaRequired',event.shaRequired); next.set('shaRequired',event.shaRequired);
next.autochoose=lib.filter.autoRespondSha; next.autochoose=lib.filter.autoRespondSha;
if(event.turn==target){ if(event.turn==target){

File diff suppressed because it is too large Load Diff

View File

@ -6379,7 +6379,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:["nzry_jieying_1","nzry_jieying_2"], group:["nzry_jieying_1","nzry_jieying_2"],
subSkill:{ subSkill:{
'1':{ '1':{
audio:2, audio:'nzry_jieying',
trigger:{ trigger:{
player:['linkBefore','enterGame'], player:['linkBefore','enterGame'],
global:'phaseBefore', global:'phaseBefore',
@ -6395,7 +6395,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
'2':{ '2':{
audio:2, audio:'nzry_jieying',
trigger:{ trigger:{
player:'phaseJieshuBegin', player:'phaseJieshuBegin',
}, },

View File

@ -5407,6 +5407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
subSkill:{ subSkill:{
gain:{ gain:{
audio:'dcliuzhuan',
trigger:{global:['loseAfter','loseAsyncAfter','cardsDiscardAfter']}, trigger:{global:['loseAfter','loseAsyncAfter','cardsDiscardAfter']},
forced:true, forced:true,
logTarget:()=>_status.currentPhase, logTarget:()=>_status.currentPhase,

View File

@ -972,32 +972,95 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
filterTarget:lib.filter.notMe, // filterTarget:lib.filter.notMe,
content:function(){ content:function(){
'step 0'
player.damage('nosource'); player.damage('nosource');
target.damage('unreal'); 'step 1'
if(game.countPlayer()<2) event.finish();
if(game.countPlayer()==2) event._result={bool:true,targets:[game.findPlayer(i=>i!=player),player]};
else player.chooseTarget(`慧夭:请选择两名角色`,`令不为你的第一名角色视为对第二名角色造成过1点伤害。`,(card,player,target)=>{
if(!ui.selected.targets.length) return player!=target;
return true;
},2,true).set('multitarget',true).set('targetprompt',['伤害来源','受伤角色']).set('ai',target=>{
return target==get.event('aiTargets')[ui.selected.targets.length]?10:0;
}).set('aiTargets',lib.skill.mbhuiyao.getUnrealDamageTargets(player,[game.filterPlayer(i=>i!=player),game.filterPlayer()],true));
'step 2'
if(result.bool){
var targets=result.targets;
player.line2(targets,'green');
game.delaye();
targets[1].damage(targets[0],'unreal');
}
},
getUnrealDamageTargets:(player,lists,forced)=>{
const targets=[null,null];
let sourceList,targetList;
if(lists.length==2&&lists.every(l=>Array.isArray(l))){
sourceList=lists[0]; targetList=lists[1];
}
else{
sourceList=lists.slice(); targetList=lists.slice();
}
const list=targetList.map(current=>{
const _hp=current.hp,_maxhp=current.maxHp;
current.hp=100; current.maxHp=100;
const att=-get.sgnAttitude(player,current);
let val=get.damageEffect(current,player,current)*att;
current.getSkills(null,false,false).forEach(skill=>{
const info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
const eff=100/val+15;
current.hp=_hp; current.maxHp=_maxhp;
return [current,eff];
}).sort((a,b)=>b[1]-a[1])[0];
if(list[1]<0&&!forced) return targets;
const targetx=list[0];
targets[1]=targetx;
const list2=sourceList.filter(i=>i!=targetx).map(current=>{
const _hp=targetx.hp,_maxhp=targetx.maxHp;
targetx.hp=100; targetx.maxHp=100;
const att=-get.sgnAttitude(player,current);
const eff=get.damageEffect(targetx,current,current)*att;
targetx.hp=_hp; targetx.maxHp=_maxhp;
return [current,eff];
}).sort((a,b)=>b[1]-a[1])[0];
if(!list2) return targets;
targets[0]=list2[0];
return targets;
}, },
ai:{ ai:{
order:6, order:6,
result:{ result:{
target:function(player,target){ player:function(player){
if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<1) return 0; if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=1) return 0;
var _hp=target.hp,_maxhp=target.maxHp; var limit=25;
target.hp=10; target.maxHp=10; var quesong=player.hasSkill('mbquesong')&&!player.getStat().damaged;
var att=-get.sgnAttitude(player,target); if(quesong){
var val=get.damageEffect(target,player,target)*att; limit-=7.5;
target.getSkills(null,false,false).forEach(skill=>{
var info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
var eff=100/val;
target.hp=_hp; target.maxHp=_maxhp;
var limit=17.5;
if(player.hasSkill('mbquesong')){
if(!player.getStat().damaged) limit+=7.5;
} }
if(eff<limit) return 0; if(quesong&&game.hasPlayer(target=>{
return eff/30; var att=get.attitude(player,target);
if(att<0) return false;
return att*Math.sqrt(Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)))>=10||target.getHp()<=2;
})) return 1;
if(!quesong&&game.hasPlayer(target=>{
if(target==player) return false;
var _hp=target.hp,_maxhp=target.maxHp;
target.hp=100; target.maxHp=100;
var att=-get.sgnAttitude(player,target);
var val=get.damageEffect(target,player,target)*att;
target.getSkills(null,false,false).forEach(skill=>{
var info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
var eff=100/val;
target.hp=_hp; target.maxHp=_maxhp;
if(eff<limit) return false;
return true;
})) return 1;
return 0;
} }
} }
}, },
@ -1014,7 +1077,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseTarget(get.prompt2('mbquesong')).set('ai',target=>{ player.chooseTarget(get.prompt2('mbquesong')).set('ai',target=>{
var player=_status.event.player; var player=_status.event.player;
if(get.attitude(player,target)<=0) return 0; if(get.attitude(player,target)<=0) return 0;
var len=[1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0);hp=target.getHp(); var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp();
return len+target.isTurnedOver()*2+1.5*Math.min(4,target.getDamagedHp())/(hp+1); return len+target.isTurnedOver()*2+1.5*Math.min(4,target.getDamagedHp())/(hp+1);
}); });
'step 1' 'step 1'
@ -1022,22 +1085,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target=result.targets[0]; var target=result.targets[0];
event.target=target; event.target=target;
player.logSkill('mbquesong',target); player.logSkill('mbquesong',target);
var len=[1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0);hp=target.getHp(); var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp();
var forced=false; if(hp==0||target.countCards('h')<hp) event._result={bool:false};
if(len==0) forced=true;
if(hp==0||target.countCards('h')<hp){
if(forced) event.finish();
else event._result={bool:false};
}
else{ else{
var str=`${forced?'请':'是否'}弃置${get.cnNumber(hp)}张手牌并回复1点体力${forced?'':'?或点击“取消”摸'+get.cnNumber(len)+'张牌并复原武将牌'}`; var str=`是否弃置${get.cnNumber(hp)}张手牌并回复1点体力或点击“取消”摸${get.cnNumber(len)}张牌并复原武将牌。`;
target.chooseToDiscard(get.translation(player)+'对你发动了【雀颂】',str,forced,'h',hp).set('ai',card=>{ target.chooseToDiscard(get.translation(player)+'对你发动了【雀颂】',str,'h',hp).set('ai',card=>{
if(!_status.event.goon) return 0; if(!get.event('goon')) return 0;
return 6-get.value(card); return 6-get.value(card);
}).set('goon',function(){ }).set('goon',function(){
var _hp=hp+target.isTurnedOver()*1.5; var _hp=hp+target.isTurnedOver()*1.5;
if(forced||_hp+player.countCards('hs',card=>get.tag(card,'recover'))<=2-len/4) return true; if(_hp+player.countCards('hs',card=>get.tag(card,'recover'))<=2-len/4) return true;
return len>_hp; return len<=_hp;
}()); }());
} }
} }
@ -1048,12 +1106,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish(); event.finish();
} }
else{ else{
target.draw([1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0)); target.draw(Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)));
} }
'step 3' 'step 3'
player.link(false); target.link(false);
'step 4' 'step 4'
player.turnOver(false); target.turnOver(false);
}, },
ai:{ ai:{
expose:0.2, expose:0.2,
@ -11305,10 +11363,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseTarget(get.prompt('zhongzuo'),'令一名角色摸两张牌。若其已受伤,则你摸一张牌。').set('ai',function(target){ player.chooseTarget(get.prompt('zhongzuo'),'令一名角色摸两张牌。若其已受伤,则你摸一张牌。').set('ai',function(target){
if(target.hasSkillTag('nogain')&&target!=_status.currentPhase) return target.isDamaged()?0:1; if(target.hasSkillTag('nogain')) return target.isDamaged()?0:1;
var att=get.attitude(_status.event.player,target); let att=get.attitude(_status.event.player,target);
if(target.isDamaged()) att=att*1.2; if(att<=0) return 0;
return att; if(target.isDamaged()) return 1+att/5;
return att/5;
}); });
'step 1' 'step 1'
if(result.bool){ if(result.bool){
@ -12622,7 +12681,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 3' 'step 3'
if(result.bool){ if(result.bool){
trigger.player.gain(event.card,'give',player,'bySelf'); trigger.player.gain(event.card,'give',player,'bySelf');
player.chooseBool('是否对'+get.translation(trigger.player)+'造成点伤害?').ai=function(){ player.chooseBool('是否对'+get.translation(trigger.player)+'造成1点伤害?').ai=function(){
return get.damageEffect(trigger.player,player,player)>0 return get.damageEffect(trigger.player,player,player)>0
}; };
} }
@ -12968,7 +13027,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.ingame=game.hasPlayer(function(current){ event.ingame=game.hasPlayer(function(current){
return ['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name2); return ['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name2);
})?true:false; })?true:false;
var prompt='请选择一名角色,令其回复点体力并摸一张牌'; var prompt='请选择一名角色,令其回复1点体力并摸一张牌';
prompt+=event.ingame?',然后你摸一张牌。':'。'; prompt+=event.ingame?',然后你摸一张牌。':'。';
player.chooseTarget(prompt).set('ai',function(target){ player.chooseTarget(prompt).set('ai',function(target){
var player=_status.event.player; var player=_status.event.player;
@ -14646,6 +14705,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
gnjinfan_gain:{ gnjinfan_gain:{
audio:'gnjinfan',
trigger:{player:'loseAfter'}, trigger:{player:'loseAfter'},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
@ -15534,9 +15594,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yj_zhoubuyi:'☆周不疑', yj_zhoubuyi:'☆周不疑',
yj_zhoubuyi_prefix:'☆', yj_zhoubuyi_prefix:'☆',
mbhuiyao:'慧夭', mbhuiyao:'慧夭',
mbhuiyao_info:'出牌阶段限一次。你可以受到1点无来源伤害视为对一名其他角色造成过1点伤害。', mbhuiyao_info:'出牌阶段限一次。你可以受到1点无来源伤害然后你选择一名其他角色,令其视为对一名角色造成过1点伤害。',
mbquesong:'雀颂', mbquesong:'雀颂',
mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸等同于其装备区中空栏的数量的牌并复原武将牌2.弃置等同于其体力值的手牌并回复1点体力。', mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸等同于其装备区中非宝物栏中空栏的数量的牌并复原武将牌(至少摸一张牌)2.弃置等同于其体力值的手牌并回复1点体力。',
xin_yuanshao:'手杀界袁绍', xin_yuanshao:'手杀界袁绍',
xin_yuanshao_prefix:'手杀界', xin_yuanshao_prefix:'手杀界',
re_baosanniang:'手杀鲍三娘', re_baosanniang:'手杀鲍三娘',

View File

@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_guanyu:['male','shu',4,['wusheng','yijue']], old_guanyu:['male','shu',4,['wusheng','yijue']],
old_caochun:['male','wei',4,['shanjia']], old_caochun:['male','wei',4,['shanjia']],
masu:['male','shu',3,['xinzhan','huilei']], masu:['male','shu',3,['xinzhan','huilei']],
xushu:['male','shu',3,['wuyan','jujian'],['border:wei']], xushu:['male','shu',3,['xswuyan','jujian'],['border:wei']],
liru:['male','qun',3,['juece','mieji','fencheng']], liru:['male','qun',3,['juece','mieji','fencheng']],
xin_yujin:['male','wei',4,['jieyue']], xin_yujin:['male','wei',4,['jieyue']],
//lusu:['male','wu',3,['haoshi','dimeng']], //lusu:['male','wu',3,['haoshi','dimeng']],

View File

@ -1035,7 +1035,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
let hs=player.getCards('h',i=>i!==card&&(!card.cards||!card.cards.contains(i))),num=player.getCardUsable('sha'); let hs=player.getCards('h',i=>i!==card&&(!card.cards||!card.cards.includes(i))),num=player.getCardUsable('sha');
if(card.name!=='sha'&&card.name!=='juedou'||hs.length<target.countCards('h')) return 1; if(card.name!=='sha'&&card.name!=='juedou'||hs.length<target.countCards('h')) return 1;
if(game.hasPlayer2(function(current){ if(game.hasPlayer2(function(current){
return current.getHistory('useCard',function(evt){ return current.getHistory('useCard',function(evt){
@ -1044,6 +1044,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return 1; })) return 1;
if(card.name==='sha') num--; if(card.name==='sha') num--;
hs=hs.filter(i=>{ hs=hs.filter(i=>{
if(!player.canUse(i,target)) return false;
if(i.name==='juedou') return true; if(i.name==='juedou') return true;
if(num&&i.name==='sha'){ if(num&&i.name==='sha'){
num--; num--;
@ -1727,7 +1728,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
'2':{ '2':{
audio:2, audio:"nzry_juzhan_1",
trigger:{ trigger:{
player:'useCardToPlayered' player:'useCardToPlayered'
}, },
@ -2486,7 +2487,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
2:{ 2:{
audio:2,
trigger:{ trigger:{
player:['useCardAfter','respondAfter'], player:['useCardAfter','respondAfter'],
}, },
@ -2607,7 +2607,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
'2':{ '2':{
audio:2, audio:'nzry_shenshi_1',
trigger:{ trigger:{
player:'damageEnd', player:'damageEnd',
}, },
@ -3494,167 +3494,99 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
qiaobian:{ qiaobian:{
audio:2, audio:2,
group:['qiaobian1','qiaobian2','qiaobian3','qiaobian4'], trigger:{player:['phaseJudgeBefore','phaseDrawBefore','phaseUseBefore','phaseDiscardBefore']},
filter:function(event,player){
return player.countCards('h')>0;
},
direct:true,
preHidden:true, preHidden:true,
ai:{
threaten:3
}
},
qiaobian1:{
audio:2,
trigger:{player:'phaseJudgeBefore'},
filter:function(event,player){
return player.countCards('h')>0;
},
direct:true,
frequent:true,
content:function(){ content:function(){
"step 0" 'step 0'
if(player.countCards('j')==0&&!event.isOnline()&&(!event.isMine()||!lib.config.autoskilllist.contains('qiaobian1'))){ var check,str='弃置一张手牌并跳过';
event.finish(); str+=['判定','摸牌','出牌','弃牌'][lib.skill.qiaobian.trigger.player.indexOf(event.triggername)];
} str+='阶段';
else{ if(trigger.name=='phaseDraw') str+=',然后可以获得至多两名角色各一张手牌';
var next=player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过判定阶段'); if(trigger.name=='phaseUse') str+=',然后可以移动场上的一张牌';
next.set('ai',get.unuseful2); switch(trigger.name){
next.set('logSkill','qiaobian1'); case 'phaseJudge':
next.setHiddenSkill('qiaobian'); check=player.countCards('j');
} break;
"step 1" case 'phaseDraw':
if(result.bool){ var i,num=0,num2=0,players=game.filterPlayer();
trigger.cancel(); for(i=0;i<players.length;i++){
} if(player!=players[i]&&players[i].countCards('h')){
} var att=get.attitude(player,players[i]);
}, if(att<=0){
qiaobian2:{ num++;
audio:2, }
trigger:{player:'phaseDrawBefore'}, if(att<0){
filter:function(event,player){ num2++;
return player.countCards('h')>0; }
}, }
direct:true,
content:function(){
"step 0"
var check,i,num=0,num2=0,players=game.filterPlayer();
for(i=0;i<players.length;i++){
if(player!=players[i]&&players[i].countCards('h')){
var att=get.attitude(player,players[i]);
if(att<=0){
num++;
} }
if(att<0){ check=(num>=2&&num2>0);
num2++; break;
case 'phaseUse':
if(!player.canMoveCard(true)){
check=false;
} }
} else{
check=game.hasPlayer(function(current){
return get.attitude(player,current)>0&&current.countCards('j');
});
if(!check){
if(player.countCards('h')>player.hp+1){
check=false;
}
else if(player.countCards('h',{name:['wuzhong']})){
check=false;
}
else{
check=true;
}
}
}
break;
case 'phaseDiscard':
check=player.needsToDiscard();
break;
} }
check=(num>=2&&num2>0); player.chooseToDiscard(get.prompt('qiaobian'),str,lib.filter.cardDiscardable).set('ai',card=>{
if(!_status.event.check) return -1;
player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过摸牌阶段,然后可以获得至多两名角色各一张手牌',lib.filter.cardDiscardable).set('ai',function(card){
if(!_status.event.check) return 0;
return 7-get.value(card); return 7-get.value(card);
}).set('check',check).set('logSkill','qiaobian2').setHiddenSkill('qiaobian'); }).set('check',check).set('logSkill','qiaobian').setHiddenSkill('qiaobian');
"step 1" 'step 1'
if(result.bool){ if(result.bool){
trigger.cancel(); trigger.cancel();
player.chooseTarget([1,2],'获得至多两名角色各一张手牌',function(card,player,target){ game.log(player,'跳过了','#y'+['判定','摸牌','出牌','弃牌'][lib.skill.qiaobian.trigger.player.indexOf(event.triggername)]+'阶段');
return target!=player&&target.countCards('h'); if(trigger.name=='phaseUse'){
}).set('ai',function(target){ if(player.canMoveCard()) player.moveCard();
return 1-get.attitude(_status.event.player,target); event.finish();
}) }
else if(trigger.name=='phaseDraw'){
player.chooseTarget([1,2],'获得至多两名角色各一张手牌',function(card,player,target){
return target!=player&&target.countCards('h');
}).set('ai',function(target){
return 1-get.attitude(_status.event.player,target);
});
}
else event.finish();
} }
else{ else event.finish();
event.finish(); 'step 2'
}
"step 2"
if(result.bool){ if(result.bool){
result.targets.sortBySeat(); result.targets.sortBySeat();
player.line(result.targets,'green'); player.line(result.targets,'green');
event.targets=result.targets; event.targets=result.targets;
if(!event.targets.length) event.finish(); if(!event.targets.length) event.finish();
} }
else{ else event.finish();
event.finish(); 'step 3'
}
"step 3"
player.gainMultiple(event.targets); player.gainMultiple(event.targets);
"step 4" 'step 4'
game.delay(); game.delay();
}, },
ai:{ ai:{threaten:3},
expose:0.2
}
},
qiaobian3:{
audio:2,
trigger:{player:'phaseUseBefore'},
filter:function(event,player){
return player.countCards('h')>0;
},
direct:true,
content:function(){
"step 0"
var check;
if(!player.canMoveCard(true)){
check=false;
}
else{
check=game.hasPlayer(function(current){
return get.attitude(player,current)>0&&current.countCards('j');
});
if(!check){
if(player.countCards('h')>player.hp+1){
check=false;
}
else if(player.countCards('h',{name:['wuzhong']})){
check=false;
}
else{
check=true;
}
}
}
player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过出牌阶段,然后可以移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){
if(!_status.event.check) return 0;
return 7-get.value(card);
}).set('check',check).set('logSkill','qiaobian3').setHiddenSkill('qiaobian');
"step 1"
if(result.bool){
trigger.cancel();
player.moveCard();
}
else{
event.finish();
}
},
ai:{
expose:0.2
}
},
qiaobian4:{
audio:2,
trigger:{player:'phaseDiscardBefore'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
"step 0"
var discard=player.countCards('h')>player.hp;
var next=player.chooseToDiscard(get.prompt('qiaobian4'),'弃置一张手牌并跳过弃牌阶段');
next.setHiddenSkill('qiaobian');
next.logSkill='qiaobian';
next.ai=function(card){
if(discard){
return 100-get.useful(card);
}
else{
return -1;
}
};
"step 1"
if(result.bool){
trigger.cancel();
}
}
}, },
tuntian:{ tuntian:{
audio:2, audio:2,
@ -7953,10 +7885,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fangquan:'放权', fangquan:'放权',
ruoyu:'若愚', ruoyu:'若愚',
qiaobian:'巧变', qiaobian:'巧变',
qiaobian1:'巧变·判定',
qiaobian2:'巧变·摸牌',
qiaobian3:'巧变·出牌',
qiaobian4:'巧变·弃牌',
tuntian:'屯田', tuntian:'屯田',
tuntian_bg:'田', tuntian_bg:'田',
zaoxian:'凿险', zaoxian:'凿险',
@ -7990,7 +7918,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiangle_info:'锁定技,当其他角色使用【杀】指定你为目标时,其需弃置一张基本牌,否则此【杀】对你无效。', xiangle_info:'锁定技,当其他角色使用【杀】指定你为目标时,其需弃置一张基本牌,否则此【杀】对你无效。',
fangquan_info:'你可跳过你的出牌阶段,若如此做,回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。', fangquan_info:'你可跳过你的出牌阶段,若如此做,回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。',
ruoyu_info:'主公技,觉醒技,准备阶段,若你的体力是全场最少的(或之一)你须增加1点体力上限并回复1点体力然后获得技能〖激将〗。', ruoyu_info:'主公技,觉醒技,准备阶段,若你的体力是全场最少的(或之一)你须增加1点体力上限并回复1点体力然后获得技能〖激将〗。',
qiaobian_info:'你可以弃置一张手牌并跳过自己的一个阶段(准备阶段和结束阶段除外)若你以此法跳过了摸牌阶段,则你可以获得至多两名其他角色的各一张手牌;若你以此法跳过了出牌阶段,则你可以移动场上的一张牌。', qiaobian_info:'你可以弃置一张手牌并跳过自己的一个阶段(准备阶段和结束阶段除外)。若你以此法跳过了摸牌阶段,则你可以获得至多两名其他角色的各一张手牌;若你以此法跳过了出牌阶段,则你可以移动场上的一张牌。',
tuntian_info:'①当你于回合外失去牌后,你可以判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-XX为你武将牌上“田”的数目。', tuntian_info:'①当你于回合外失去牌后,你可以判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-XX为你武将牌上“田”的数目。',
zaoxian_info:'觉醒技准备阶段若你武将牌上“田”的数量达到3张或更多则你减1点体力上限并获得技能〖急袭〗。', zaoxian_info:'觉醒技准备阶段若你武将牌上“田”的数量达到3张或更多则你减1点体力上限并获得技能〖急袭〗。',
jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。', jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。',

View File

@ -15689,7 +15689,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
jingong3:{charlotte:true}, jingong3:{charlotte:true},
weikui:{ weikui:{
audio:'kuiwei', audio:2,
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
@ -15735,7 +15735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
lizhan:{ lizhan:{
audio:'yanzheng', audio:2,
trigger:{player:'phaseJieshuBegin'}, trigger:{player:'phaseJieshuBegin'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){

View File

@ -1537,6 +1537,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
player.draw(trigger.getl(player).cards2.length); player.draw(trigger.getl(player).cards2.length);
},
ai:{
effect:{
target:(card,player,target)=>{
if((get.tag(card,'lose')||get.tag(card,'discard'))&&target.getHistory('damage').length&&!target.hasHistory('useSkill',evt=>evt.skill=='dczhengxu_lose')) return [1,1];
}
}
} }
}, },
damage:{ damage:{
@ -1555,10 +1562,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:(card,player,target)=>{
if(player.hasSkillTag('jueqing',false,target)) return; if(player.hasSkillTag('jueqing',false,target)||!get.tag(card,'damage')) return;
if(target.hasHistory('useSkill',evt=>evt.skill=='dczhengxu_damage')) return; if(target.hasHistory('useSkill',evt=>evt.skill=='dczhengxu_damage')||!target.hasHistory('lose',evt=>evt.cards2&&evt.cards2.length)) return;
if(get.tag(card,'damage')) return 0.6; if(get.attitude(player,target)>=0) return 'zeroplayertarget';
let num=0,shas=player.getCardUsable('sha'),hs=player.getCards('hs',i=>{
if(i===card||card.cards&&card.cards.includes(i)||!get.tag(i,'damage')||!player.canUse(i,target)) return false;
if(get.name(i)==='sha'){
num++;
return false;
}
return true;
});
if(card.name==='sha') shas--;
num=Math.min(num,shas);
num+=hs.length;
if(!num) return 'zeroplayertarget';
num=1-2/3/num;
return [num,0,num,0];
} }
} }
} }

View File

@ -5146,11 +5146,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:(card,player,target)=>{
if(player==target) return; if(player===target) return;
if(game.hasPlayer2(current=>{ if(game.hasPlayer2(current=>{
return current.hasHistory('useCard',evt=>evt.card.name==card.name&&evt.targets&&evt.targets.contains(player)); return current.hasHistory('useCard',evt=>evt.card.name==card.name&&evt.targets&&evt.targets.contains(player));
})) return 'zerotarget'; })) return 'zeroplayertarget';
} }
} }
} }

View File

@ -12010,8 +12010,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
expose:0.3 expose:0.3
} }
}, },
wuyan:{ //吾彦...
audio:2, wuyan:{audio:2},
xswuyan:{
audio:'wuyan',
trigger:{target:'useCardToBefore',player:'useCardToBefore'}, trigger:{target:'useCardToBefore',player:'useCardToBefore'},
forced:true, forced:true,
check:function(event,player){ check:function(event,player){
@ -14461,7 +14463,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinjunxing:'峻刑', xinjunxing:'峻刑',
xinjunxing_info:'出牌阶段限一次,你可以弃置至少一张手牌并选择一名其他角色,该角色需弃置一张与你弃置的牌类别均不同的手牌,否则其先将其武将牌翻面,然后将手牌摸至四张。', xinjunxing_info:'出牌阶段限一次,你可以弃置至少一张手牌并选择一名其他角色,该角色需弃置一张与你弃置的牌类别均不同的手牌,否则其先将其武将牌翻面,然后将手牌摸至四张。',
wuyan:'无言', xswuyan:'无言',
xinwuyan:'无言', xinwuyan:'无言',
jujian:'举荐', jujian:'举荐',
xinjujian:'举荐', xinjujian:'举荐',
@ -14578,7 +14580,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
oldrenxin_info:'其他角色进入濒死状态时你可以将所有手牌交给该角色并翻面然后该角色回复1点体力。', oldrenxin_info:'其他角色进入濒死状态时你可以将所有手牌交给该角色并翻面然后该角色回复1点体力。',
jingce_info:'出牌阶段结束时,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。', jingce_info:'出牌阶段结束时,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。',
xinjingce_info:'结束阶段,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。', xinjingce_info:'结束阶段,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。',
wuyan_info:'锁定技,你使用的普通锦囊牌对其他角色无效;其他角色使用的普通锦囊牌对你无效。', xswuyan_info:'锁定技,你使用的普通锦囊牌对其他角色无效;其他角色使用的普通锦囊牌对你无效。',
xinwuyan_info:'锁定技,当你使用锦囊牌造成伤害时,你防止此伤害;锁定技,当你受到锦囊牌对你造成的伤害时,你防止此伤害。', xinwuyan_info:'锁定技,当你使用锦囊牌造成伤害时,你防止此伤害;锁定技,当你受到锦囊牌对你造成的伤害时,你防止此伤害。',
jujian_info:'出牌阶段限一次你可以弃至多三张牌然后令一名其他角色摸等量的牌。若你以此法弃牌不少于三张且均为同一类别你回复1点体力。', jujian_info:'出牌阶段限一次你可以弃至多三张牌然后令一名其他角色摸等量的牌。若你以此法弃牌不少于三张且均为同一类别你回复1点体力。',
xinjujian_info:'结束阶段开始时你可以弃置一张非基本牌并选择一名其他角色令其选择一项1.摸两张牌2.回复1点体力3.将其武将牌翻转至正面朝上并重置之。', xinjujian_info:'结束阶段开始时你可以弃置一张非基本牌并选择一名其他角色令其选择一项1.摸两张牌2.回复1点体力3.将其武将牌翻转至正面朝上并重置之。',

View File

@ -18230,29 +18230,32 @@
}, },
moveCard:function(){ moveCard:function(){
'step 0' 'step 0'
if(!player.canMoveCard(null,event.nojudge)){ if(!player.canMoveCard(null,event.nojudge,event.sourceTargets,event.aimTargets,event.filter)){
event.finish(); event.finish();
return; return;
} }
var next=player.chooseTarget(2,function(card,player,target){ var next=player.chooseTarget(2,function(card,player,target){
var filterCard=get.event('filter');
if(ui.selected.targets.length){ if(ui.selected.targets.length){
if(!get.event('aimTargets').includes(target)) return false;
var from=ui.selected.targets[0]; var from=ui.selected.targets[0];
var js=from.getCards('j'); var js=from.getCards('j',filterCard);
for(var i=0;i<js.length;i++){ for(var i=0;i<js.length;i++){
if(_status.event.nojudge) break; if(_status.event.nojudge) break;
if(target.canAddJudge(js[i])) return true; if(target.canAddJudge(js[i])) return true;
} }
if(target.isMin()) return false; if(target.isMin()) return false;
var es=from.getCards('e'); var es=from.getCards('e',filterCard);
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(target.canEquip(es[i])) return true; if(target.canEquip(es[i])) return true;
} }
return false; return false;
} }
else{ else{
if(!get.event('sourceTargets').includes(target)) return false;
var range='ej'; var range='ej';
if(_status.event.nojudge) range='e'; if(_status.event.nojudge) range='e';
return target.countCards(range)>0; return target.countCards(range,filterCard)>0;
} }
}); });
next.set('nojudge',event.nojudge||false); next.set('nojudge',event.nojudge||false);
@ -18308,6 +18311,9 @@
next.set('multitarget',true); next.set('multitarget',true);
next.set('targetprompt',_status.event.targetprompt||['被移走','移动目标']); next.set('targetprompt',_status.event.targetprompt||['被移走','移动目标']);
next.set('prompt',event.prompt||'移动场上的一张牌'); next.set('prompt',event.prompt||'移动场上的一张牌');
next.set('filter',event.filter);
next.set('sourceTargets',event.sourceTargets||game.filterPlayer());
next.set('aimTargets',event.aimTargets||game.filterPlayer());
if(event.prompt2) next.set('prompt2',event.prompt2); if(event.prompt2) next.set('prompt2',event.prompt2);
if(event.forced) next.set('forced',true); if(event.forced) next.set('forced',true);
'step 1' 'step 1'
@ -18338,6 +18344,7 @@
} }
},targets[0]).set('nojudge',event.nojudge||false).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){ },targets[0]).set('nojudge',event.nojudge||false).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1; var targets1=_status.event.targets1;
if(!get.event('filter')(button.link)) return false;
if(get.position(button.link)=='j'){ if(get.position(button.link)=='j'){
if(_status.event.nojudge) return false; if(_status.event.nojudge) return false;
return targets1.canAddJudge(button.link); return targets1.canAddJudge(button.link);
@ -18345,7 +18352,7 @@
else{ else{
return targets1.canEquip(button.link); return targets1.canEquip(button.link);
} }
}); }).set('filter',event.filter);
} }
else{ else{
event.finish(); event.finish();
@ -24875,13 +24882,33 @@
} }
} }
canMoveCard(withatt,nojudge){ canMoveCard(withatt,nojudge){
var player=this; const player=this;
return game.hasPlayer(function(current){ const args=Array.from(arguments).slice(2);
var att=get.sgn(get.attitude(player,current)); let sourceTargets,aimTargets,filterCard;
args.forEach(arg=>{
if(get.itemtype(arg)=='players'){
if(!sourceTargets) sourceTargets=arg;
else if(!aimTargets) aimTargets=arg;
}
else if(get.itemtype(arg)=='player'){
if(!sourceTargets) sourceTargets=[arg];
else if(!aimTargets) aimTargets=[arg];
}
else if(typeof arg=='function'){
filterCard=arg;
}
else if(typeof arg=='object'&&arg){
filterCard=get.filter(arg);
}
});
if(!sourceTargets) sourceTargets=game.filterPlayer();
if(!aimTargets) aimTargets=game.filterPlayer();
return sourceTargets.some(current=>{
const att=get.sgn(get.attitude(player,current));
if(!withatt||att!=0){ if(!withatt||att!=0){
var es=current.getCards('e'); var es=current.getCards('e',filterCard);
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(game.hasPlayer(function(current2){ if(aimTargets.some(current2=>{
if(withatt){ if(withatt){
if(get.sgn(get.value(es[i],current))!=-att) return false; if(get.sgn(get.value(es[i],current))!=-att) return false;
var att2=get.sgn(get.attitude(player,current2)); var att2=get.sgn(get.attitude(player,current2));
@ -24894,7 +24921,7 @@
} }
} }
if(!nojudge&&(!withatt||att>0)){ if(!nojudge&&(!withatt||att>0)){
var js=current.getCards('j'); var js=current.getCards('j',filterCard);
for(var i=0;i<js.length;i++){ for(var i=0;i<js.length;i++){
if(game.hasPlayer(function(current2){ if(game.hasPlayer(function(current2){
if(withatt){ if(withatt){
@ -24916,6 +24943,14 @@
if(typeof arguments[i]=='boolean'){ if(typeof arguments[i]=='boolean'){
next.forced=arguments[i]; next.forced=arguments[i];
} }
else if(get.itemtype(arguments[i])=='players'){
if(!next.sourceTargets) next.sourceTargets=arguments[i];
else if(!next.aimTargets) next.aimTargets=arguments[i];
}
else if(get.itemtype(arguments[i])=='player'){
if(!next.sourceTargets) next.sourceTargets=[arguments[i]];
else if(!next.aimTargets) next.aimTargets=[arguments[i]];
}
else if(typeof arguments[i]=='string'){ else if(typeof arguments[i]=='string'){
get.evtprompt(next,arguments[i]); get.evtprompt(next,arguments[i]);
} }
@ -24927,7 +24962,16 @@
next.targetprompt=arguments[i]; next.targetprompt=arguments[i];
} }
} }
else if(typeof arguments[i]=='function'){
next.filter=arguments[i];
}
else if(typeof arguments[i]=='object'&&arguments[i]){
next.filter=get.filter(arguments[i]);
}
} }
if(!next.sourceTargets) next.sourceTargets=game.filterPlayer();
if(!next.aimTargets) next.aimTargets=game.filterPlayer();
if(next.filter==undefined) next.filter=lib.filter.all;
next.setContent('moveCard'); next.setContent('moveCard');
next._args=Array.from(arguments); next._args=Array.from(arguments);
return next; return next;

View File

@ -1137,7 +1137,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }
@ -1239,7 +1239,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }
@ -1363,7 +1363,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }
@ -1507,7 +1507,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }
@ -1675,7 +1675,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }

View File

@ -13662,8 +13662,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i of map[sides[0]]){ for(var i of map[sides[0]]){
if(isYe(i)) return; if(isYe(i)) return;
} }
for(var i of hiddens){ for(var ind=0;ind<hiddens.length;ind++){
if(isYe(i)||i.getGuozhanGroup(2)!=identity||!i.wontYe()) return; var current=hiddens[ind];
if(isYe(current)||current.getGuozhanGroup(2)!=identity||!current.wontYe(null,ind+1)) return;
} }
game.broadcastAll(function(id){ game.broadcastAll(function(id){
game.winner_id=id; game.winner_id=id;
@ -16032,14 +16033,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
} }
game.tryResult(); game.tryResult();
}, },
wontYe:function(group){ wontYe:function(group,numOfReadyToShow){
if(!group){ if(!group){
if(this.trueIdentity) group=this.trueIdentity; if(this.trueIdentity) group=this.trueIdentity;
else group=lib.character[this.name1][1]; else group=lib.character[this.name1][1];
} }
if(_status.yeidentity&&_status.yeidentity.contains(group)) return false; if(_status.yeidentity&&_status.yeidentity.contains(group)) return false;
if(get.zhu(this,null,group)) return true; if(get.zhu(this,null,group)) return true;
return get.totalPopulation(group)+1<=_status.separatism?Math.max(get.population()/2-1,1):get.population()/2; if(!numOfReadyToShow) numOfReadyToShow=1;
return get.totalPopulation(group)+numOfReadyToShow<=(_status.separatism?Math.max(get.population()/2-1,1):get.population()/2);
}, },
perfectPair:function(choosing){ perfectPair:function(choosing){
if(_status.connectMode){ if(_status.connectMode){

View File

@ -840,7 +840,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }
@ -2246,7 +2246,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.configOL.characterPack.length;i++){ for(var i=0;i<lib.configOL.characterPack.length;i++){
var pack=lib.characterPack[lib.configOL.characterPack[i]]; var pack=lib.characterPack[lib.configOL.characterPack[i]];
for(var j in pack){ for(var j in pack){
if(j=='zuoci') continue; // if(j=='zuoci') continue;
if(lib.character[j]) libCharacter[j]=pack[j]; if(lib.character[j]) libCharacter[j]=pack[j];
} }
} }

View File

@ -2797,7 +2797,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},_status.firstAct); },_status.firstAct);
var filterChoice=function(name){ var filterChoice=function(name){
if(name=='zuoci'||name=='miheng') return true; // if(name=='zuoci'||name=='miheng') return true;
if(!lib.choiceFour.contains(name)){ if(!lib.choiceFour.contains(name)){
return true; return true;
} }