rename Disabled to DisabledSlot, removed isEmpty

This commit is contained in:
Spmario233 2023-08-13 00:47:44 +08:00
parent 6919fc6a5e
commit 322b7ec991
17 changed files with 253 additions and 231 deletions

View File

@ -3447,10 +3447,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
charlotte:true, charlotte:true,
filter:function(event,player){ filter:function(event,player){
return !player.isDisabled(1); return player.hasEnabledSlot(1);
}, },
content:function(){ content:function(){
if(player.isEmpty(1)){ if(player.hasEmptySlot(1)){
var card=get.cardPile2(function(card){ var card=get.cardPile2(function(card){
return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')&&player.canUse(card,player); return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')&&player.canUse(card,player);
}); });
@ -4176,12 +4176,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterCard:function(card,player){ filterCard:function(card,player){
if(!player) player=_status.event.player; if(!player) player=_status.event.player;
return game.hasPlayer(function(current){ return game.hasPlayer(function(current){
return current!=player&&current.isEmpty(get.subtype(card,false)); return current!=player&&current.canEquip(card);
}); });
}, },
position:'e', position:'e',
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return target!=player&&target.isEmpty(get.subtype(ui.selected.cards[0],false)); return target!=player&&target.canEquip(ui.selected.cards[0]);
}, },
check:function(card){ check:function(card){
if(get.value(card)<=0) return 10; if(get.value(card)<=0) return 10;
@ -6536,7 +6536,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target) return false; if(player==target) return false;
var card=ui.selected.cards[0]; var card=ui.selected.cards[0];
if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name}); if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name});
return target.isEmpty(get.subtype(card,false)); return target.canEquip(card);
}, },
discard:false, discard:false,
lose:false, lose:false,
@ -10200,16 +10200,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0' 'step 0'
var list=['equip1','equip2','equip3','equip4','equip5']; var list=['equip1','equip2','equip3','equip4','equip5'];
for(var i=0;i<list.length;i++){ for(var i=0;i<list.length;i++){
if(player.isDisabled(list[i])||player.storage.kengo_guidui2&&player.storage.kengo_guidui2.contains(list[i])) list.splice(i--,1); if(!player.hasEnabledSlot(list[i])||player.storage.kengo_guidui2&&player.storage.kengo_guidui2.contains(list[i])) list.splice(i--,1);
} }
player.chooseControl(list).set('prompt','请选择废除一个装备栏').ai=function(){ player.chooseControl(list).set('prompt','请选择废除一个装备栏').ai=function(){
if(list.contains('equip1')&&player.isEmpty('equip1')&&player.countCards('h',function(card){ if(list.contains('equip1')&&player.hasEmptySlot('equip1')&&player.countCards('h',function(card){
return card.name=='sha'&&player.getUseValue(card)>0 return card.name=='sha'&&player.getUseValue(card)>0
})) return 'equip1'; })) return 'equip1';
if(list.contains('equip3')&&player.isEmpty('equip3')) return 'equip3'; if(list.contains('equip3')&&player.hasEmptySlot('equip3')) return 'equip3';
if(list.contains('equip4')&&player.isEmpty('equip4')) return 'equip4'; if(list.contains('equip4')&&player.hasEmptySlot('equip4')) return 'equip4';
if(list.contains('equip5')&&player.isEmpty('equip5')) return 'equip5'; if(list.contains('equip5')&&player.hasEmptySlot('equip5')) return 'equip5';
if(list.contains('equip2')&&player.isEmpty('equip2')) return 'equip2'; if(list.contains('equip2')&&player.hasEmptySlot('equip2')) return 'equip2';
return list.randomGet(); return list.randomGet();
}; };
'step 1' 'step 1'

View File

@ -3734,7 +3734,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{ else{
event.target2=result.targets[0]; event.target2=result.targets[0];
var list=['手牌区']; var list=['手牌区'];
if(lib.card[card.name].type=='equip'&&event.target2.isEmpty(lib.card[card.name].subtype)) list.push('装备区'); if(lib.card[card.name].type=='equip'&&event.target2.canEquip(card)) list.push('装备区');
if(lib.card[card.name].type=='delay'&&!event.target2.storage._disableJudge&&!event.target2.hasJudge(card.name)) list.push('判定区'); if(lib.card[card.name].type=='delay'&&!event.target2.storage._disableJudge&&!event.target2.hasJudge(card.name)) list.push('判定区');
if(list.length==1) event._result={control:list[0]}; if(list.length==1) event._result={control:list[0]};
else{ else{
@ -4011,7 +4011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
var num=event.name=='phase'?5:3; var num=event.name=='phase'?5:3;
if(num==3?event.numFixed:!game.hasPlayer(function(current){ if(num==3?event.numFixed:!game.hasPlayer(function(current){
return current.countDisabled()<5; return current.hasEnabledSlot();
})) return false; })) return false;
return game.countPlayer(function(current){ return game.countPlayer(function(current){
return current.isDamaged(); return current.isDamaged();
@ -4027,7 +4027,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
else{ else{
player.chooseTarget(get.prompt('olzhiti'),'废除一名角色的一个随机装备栏',function(card,player,target){ player.chooseTarget(get.prompt('olzhiti'),'废除一名角色的一个随机装备栏',function(card,player,target){
return target.countDisabled()<5; return target.hasEnabledSlot();
}).set('ai',function(target){ }).set('ai',function(target){
return -get.attitude(_status.event.player,target)*(target.countCards('e')+1) return -get.attitude(_status.event.player,target)*(target.countCards('e')+1)
}); });
@ -4038,13 +4038,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('olzhiti',target); player.logSkill('olzhiti',target);
var list=[]; var list=[];
for(var i=1;i<6;i++){ for(var i=1;i<6;i++){
if(!target.isDisabled(i)) list.add((i==3||i==4)?6:i); if(target.hasEnabledSlot(i)) list.add((i==3||i==4)?6:i);
} }
var num=list.randomGet(); var num=list.randomGet();
if(num!=6) target.disableEquip(num); if(num!=6) target.disableEquip(num);
else{ else{
target.disableEquip(3); target.disableEquip(3,4);
target.disableEquip(4);
} }
} }
}, },
@ -6401,7 +6400,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player!=event.player&&event.player.isIn()&&_status.currentPhase==player; return player!=event.player&&event.player.isIn()&&_status.currentPhase==player;
}, },
check:function(event,player){ check:function(event,player){
if(player.countDisabled()<5&&player.isDisabled(5)) return false; if(player.hasEnabledSlot()&&!player.hasEnabledSlot(5)) return false;
return true; return true;
}, },
bannedList:[ bannedList:[
@ -6425,7 +6424,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(func(listm[i])) list.add(listm[i]); if(func(listm[i])) list.add(listm[i]);
} }
event.skills=list; event.skills=list;
if(player.countDisabled()<5){ if(player.hasEnabledSlot()){
player.chooseToDisable().ai=function(event,player,list){ player.chooseToDisable().ai=function(event,player,list){
if(list.contains('equip5')) return 'equip5'; if(list.contains('equip5')) return 'equip5';
return list.randomGet(); return list.randomGet();

View File

@ -4704,9 +4704,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
isDisabled:function(player,pos){
return pos>0?player.isDisabled(pos):player.storage._disableJudge;
},
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏或判定区','hidden'); var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏或判定区','hidden');
@ -4714,10 +4711,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog.noforcebutton=true; dialog.noforcebutton=true;
var list1=[],list2=[]; var list1=[],list2=[];
for(var i=1;i<6;i++){ for(var i=1;i<6;i++){
(player.isDisabled(i)?list2:list1).push(i); for(var j=0;j<player.countEnabledSlot(i);j++){
list1.push(i);
} }
(player.storage._disableJudge?list2:list1).push(-1); if(player.isDisabled(i)) list2.push(i);
var addTable=function(list){ }
(player.isDisabledJudge()?list2:list1).push(-1);
var addTable=function(list,bool){
var table=document.createElement('div'); var table=document.createElement('div');
table.classList.add('add-setting'); table.classList.add('add-setting');
table.style.margin='0'; table.style.margin='0';
@ -4726,7 +4726,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){ for(var i of list){
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+(i>0?get.translation('equip'+i)+'栏':'判定区')+'</span>'; td.innerHTML='<span>'+(i>0?get.translation('equip'+i)+'栏':'判定区')+'</span>';
td.link=i; td.link=[i,bool];
td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button); td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
for(var j in lib.element.button){ for(var j in lib.element.button){
td[j]=lib.element.button[j]; td[j]=lib.element.button[j];
@ -4738,43 +4738,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
if(list1.length){ if(list1.length){
dialog.addText('未废除'); dialog.addText('未废除');
addTable(list1); addTable(list1,true);
} }
if(list2.length){ if(list2.length){
dialog.addText('已废除'); dialog.addText('已废除');
addTable(list2); addTable(list2,false);
} }
return dialog; return dialog;
}, },
filter:function(button,player){ filter:function(button,player){
if(!ui.selected.buttons.length) return true; if(!ui.selected.buttons.length) return true;
if(lib.skill.midu.isDisabled(player,ui.selected.buttons[0].link)) return false; if(!ui.selected.buttons[0].link[1]) return false;
return !player.isDisabled(button.link); return button.link[1]
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
if(lib.skill.midu.isDisabled(player,button.link)){ if(!button.link[1]){
if(button.link<=0) return -10; if(button.link[0]<=0) return -10;
if(player.hasCard(function(card){ if(player.hasCard(function(card){
return get.subtype(card)==('equip'+button.link); return get.subtype(card)==('equip'+button.link[0]);
},'hs')) return 15; },'hs')) return 15;
return 10; return 10;
} }
if(button.link<=0||player.isEmpty(button.link)&&!player.hasCard(function(card){ if(button.link[0]<=0||player.hasEmptySlot(button.link[0])&&!player.hasCard(function(card){
return get.subtype(card)==('equip'+button.link)&&player.canUse(card,player)&&get.effect(player,card,player,player)>0; return get.subtype(card)==('equip'+button.link[0])&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
},'hs')) return 5; },'hs')) return 5;
return 0; return 0;
}, },
select:[1,6], select:[1,Infinity],
backup:function(links,player){ backup:function(links,player){
if(lib.skill.midu.isDisabled(player,links[0])){ if(!links[0][1]){
return { return {
audio:'midu', audio:'midu',
selectCard:-1, selectCard:-1,
selectTarget:-1, selectTarget:-1,
filterCard:()=>false, filterCard:()=>false,
filterTarget:()=>false, filterTarget:()=>false,
equip:links[0], equip:links[0][0],
content:function(){ content:function(){
var pos=lib.skill.midu_backup.equip; var pos=lib.skill.midu_backup.equip;
if(pos<=0) player.enableJudge(); if(pos<=0) player.enableJudge();
@ -4789,15 +4789,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
selectCard:-1, selectCard:-1,
filterCard:()=>false, filterCard:()=>false,
filterTarget:true, filterTarget:true,
equip:links.sort(), equip:links.map(i=>i[0]).sort(),
content:function(){ content:function(){
var list=lib.skill.midu_backup.equip,bool=false; var list=lib.skill.midu_backup.equip,num=list.length,bool=false;
for(var i of list){ if(list.contains(-1)){
if(i<=0) bool=true; list.remove(-1);
else player.disableEquip(i); bool=true;
} }
if(list.length>0) player.disableEquip(list);
if(bool) player.disableJudge(); if(bool) player.disableJudge();
target.draw(list.length) target.draw(num)
}, },
ai:{ ai:{
tag:{ tag:{
@ -4811,7 +4812,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
prompt:function(links,player){ prompt:function(links,player){
if(lib.skill.midu.isDisabled(player,links[0])){ if(!links[0][1]){
return '恢复一个装备栏或判定区并获得〖活墨〗'; return '恢复一个装备栏或判定区并获得〖活墨〗';
} }
var numc=get.cnNumber(links.length); var numc=get.cnNumber(links.length);
@ -4828,11 +4829,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xianwang:{ xianwang:{
mod:{ mod:{
globalTo:function(source,player,distance){ globalTo:function(source,player,distance){
var num=player.countDisabled(); var num=player.countDisabledSlot();
if(num>0) return distance+(num>2?2:1); if(num>0) return distance+(num>2?2:1);
}, },
globalFrom:function(source,player,distance){ globalFrom:function(source,player,distance){
var num=source.countDisabled(); var num=source.countDisabledSlot();
if(num>0) return distance-(num>2?2:1); if(num>0) return distance-(num>2?2:1);
}, },
}, },
@ -5513,7 +5514,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var info=get.info(i); var info=get.info(i);
return info&&!get.is.locked(i)&&!info.limited&&!info.juexingji&&!info.zhuSkill&&!info.charlotte; return info&&!get.is.locked(i)&&!info.limited&&!info.juexingji&&!info.zhuSkill&&!info.charlotte;
}); });
if(!skills.length&&target.isEmpty(2)) return 1; if(!skills.length&&target.hasEmptySlot(2)) return 1;
return -0.5*skills.length; return -0.5*skills.length;
}, },
}, },
@ -6458,7 +6459,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
targetInRange:function(card,player,target){ targetInRange:function(card,player,target){
if(player.countDisabled()>=5) return true; for(var i=1;i<=5;i++){
if(!player.hasDisabledSlot(i)) return false;
}
return true;
}, },
}, },
marktext:'萍', marktext:'萍',
@ -6469,7 +6473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'useCardAfter'}, trigger:{global:'useCardAfter'},
filter:function(event,player){ filter:function(event,player){
return player!=event.player&&event.targets.contains(player)&& return player!=event.player&&event.targets.contains(player)&&
player.countDisabled()<5&&!player.getStorage('fuping').contains(event.card.name); player.hasEnabledSlot()&&!player.getStorage('fuping').contains(event.card.name);
}, },
logTarget:'player', logTarget:'player',
prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'), prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'),
@ -7273,14 +7277,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(num>=5) return false; if(num>=5) return false;
var num2=0; var num2=0;
for(var i=1;i<=5;i++){ for(var i=1;i<=5;i++){
if(event.player.isEmpty(i)) num2++; num2+=event.player.countEmptySlot(i);
} }
return num<num2; return num<num2;
}, },
content:function(){ content:function(){
var num2=0; var num2=0;
for(var i=1;i<=5;i++){ for(var i=1;i<=5;i++){
if(trigger.player.isEmpty(i)) num2++; num2+=trigger.player.countEmptySlot(i);
} }
player.drawTo(num2); player.drawTo(num2);
}, },

View File

@ -11151,7 +11151,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseTarget(2,function(card,player,target){ var next=player.chooseTarget(2,function(card,player,target){
if(ui.selected.targets.length){ if(ui.selected.targets.length){
if(!_status.event.ingame){ if(!_status.event.ingame){
return target.isEmpty(2)?true:false; var cards=ui.selected.targets[0].getEquip(2);
return target.canEquip(card)
} }
var from=ui.selected.targets[0]; var from=ui.selected.targets[0];
if(target.isMin()) return false; if(target.isMin()) return false;
@ -11159,7 +11160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue; if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue;
if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue; if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
if(target.isEmpty(get.subtype(es[i]))) return true; if(target.canEquip(es[i])) return true;
} }
return false; return false;
} }
@ -11183,7 +11184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&current.getEquip('liulongcanjia')) continue; if(['equip3','equip4'].contains(get.subtype(es[i]))&&current.getEquip('liulongcanjia')) continue;
else if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue; else if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
else if(current.isEmpty(get.subtype(es[i]))) return true; else if(current.canEquip(es[i])) return true;
} }
return false; return false;
} }
@ -11197,7 +11198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(i=0;i<es.length;i++){ for(i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue; if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue;
if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue; if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
if(target.isEmpty(get.subtype(es[i]))) break; if(target.canEquip(es[i])) break;
} }
if(i==es.length) return 0; if(i==es.length) return 0;
} }
@ -12440,7 +12441,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isMin()) return false; if(target.isMin()) return false;
var es=from.getCards('e'); var es=from.getCards('e');
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true; if(target.canEquip(es[i])) return true;
} }
return false; return false;
} }
@ -12464,7 +12465,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return 14; })) return 14;
if(target.countCards('e',function(card){ if(target.countCards('e',function(card){
return get.value(card,target)<0&&game.hasPlayer(function(current){ return get.value(card,target)<0&&game.hasPlayer(function(current){
return current!=target&&get.attitude(player,current)<0&&current.isEmpty(get.subtype(card)) return current!=target&&get.attitude(player,current)<0&&current.canEquip(card)
}); });
})>0) return 9; })>0) return 9;
} }
@ -12473,7 +12474,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current!=target&&get.attitude(player,current)>0){ if(current!=target&&get.attitude(player,current)>0){
var es=target.getCards('e'); var es=target.getCards('e');
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.value(es[i],current)>0) return true; if(get.value(es[i],target)>0&&current.canEquip(es[i])&&get.value(es[i],current)>0) return true;
} }
} }
})){ })){
@ -12489,7 +12490,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&& if(sgnatt!=0&&att2!=0&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&& get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.value(es[i],target))==sgnatt&& get.sgn(get.value(es[i],target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){ target.canEquip(es[i])){
return Math.abs(att); return Math.abs(att);
} }
} }
@ -12538,7 +12539,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link); return targets1.canAddJudge(button.link);
} }
else{ else{
return targets1.isEmpty(get.subtype(button.link)); return targets1.canEquip(button.link);
} }
}); });
} }

View File

@ -1666,7 +1666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current.isMin()) return false; if(current.isMin()) return false;
var es=target.getCards('e'); var es=target.getCards('e');
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(current.isEmpty(get.subtype(es[i]))) return true; if(current.canEquip(es[i])) return true;
} }
return false; return false;
}); });
@ -1688,7 +1688,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&& if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],from))==-att2&& get.sgn(get.value(es[i],from))==-att2&&
get.sgn(get.effect(target,es[i],player,target))==sgnatt&& get.sgn(get.effect(target,es[i],player,target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){ target.canEquip(es[i])){
return Math.abs(att); return Math.abs(att);
} }
} }
@ -1740,7 +1740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link); return targets1.canAddJudge(button.link);
} }
else{ else{
return targets1.isEmpty(get.subtype(button.link)); return targets1.canEquip(button.link);
} }
}); });
} }
@ -3181,7 +3181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
trigger:{target:'useCardToTargeted'}, trigger:{target:'useCardToTargeted'},
filter:function(event,player){ filter:function(event,player){
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
if(event.card.name!='sha') return false; if(event.card.name!='sha') return false;
return event.nature; return event.nature;
}, },
@ -8773,7 +8773,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zyshangyi:'尚义', zyshangyi:'尚义',
zyshangyi_info:'出牌阶段限一次。你可以令一名其他角色观看你的手牌,然后你观看其手牌并可以弃置其中一张牌。', zyshangyi_info:'出牌阶段限一次。你可以令一名其他角色观看你的手牌,然后你观看其手牌并可以弃置其中一张牌。',
zymingshi:'名士', zymingshi:'名士',
zymingshi_info:'锁定技。若你的防具栏为空且未废除,属性【杀】对你无效。', zymingshi_info:'锁定技。若你有空置的防具栏,属性【杀】对你无效。',
gzsuishi:'随势', gzsuishi:'随势',
gzsuishi2:'随势', gzsuishi2:'随势',
gzsuishi_info:'锁定技其他角色进入濒死状态时若伤害来源与你势力相同你摸一张牌其他角色死亡时若其与你势力相同你失去1点体力。', gzsuishi_info:'锁定技其他角色进入濒死状态时若伤害来源与你势力相同你摸一张牌其他角色死亡时若其与你势力相同你失去1点体力。',

View File

@ -740,7 +740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_fuyin:{ old_fuyin:{
mod:{ mod:{
targetEnabled:function(card,player,target){ targetEnabled:function(card,player,target){
if((card.name=='juedou'||card.name=='sha'||card.name=='huogong')&&player!=target&&player.countCards('h')>=target.countCards('h')&&target.isEmpty(2)) return false; if((card.name=='juedou'||card.name=='sha'||card.name=='huogong')&&player!=target&&player.countCards('h')>=target.countCards('h')&&target.hasEmptySlot(2)) return false;
}, },
}, },
}, },

View File

@ -3057,7 +3057,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.sgn(get.value(es[i],current))!=-att||get.value(es[i],current)<5) return false; if(get.sgn(get.value(es[i],current))!=-att||get.value(es[i],current)<5) return false;
var att2=get.sgn(get.attitude(player,current2)); var att2=get.sgn(get.attitude(player,current2));
if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false; if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false;
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i])); return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){ })){
return true; return true;
} }
@ -5083,7 +5083,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.getHistory('sourceDamage').length){ if(!target.getHistory('sourceDamage').length){
var cards=target.getCards('e'); var cards=target.getCards('e');
for(var i of cards){ for(var i of cards){
if(player.isEmpty(get.subtype(i))) return true; if(player.canEquip(i)) return true;
} }
} }
return target.getHistory('useCard',function(evt){ return target.getHistory('useCard',function(evt){
@ -5102,7 +5102,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.getHistory('sourceDamage').length){ if(!target.getHistory('sourceDamage').length){
var cards=target.getCards('e'); var cards=target.getCards('e');
for(var i of cards){ for(var i of cards){
if(player.isEmpty(get.subtype(i))) list.push(i); if(player.canEquip(i)) list.push(i);
} }
} }
if(list.length){ if(list.length){
@ -6735,7 +6735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}); });
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(game.hasPlayer(function(current2){ if(game.hasPlayer(function(current2){
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i])); return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){ })){
return true; return true;
} }
@ -6761,7 +6761,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !_status.event.cards.contains(card); return !_status.event.cards.contains(card);
}); });
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true; if(target.canEquip(es[i])) return true;
} }
return false; return false;
} }
@ -6779,7 +6779,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target==player&&player.hasSkill('decadexuanfeng')){ if(target==player&&player.hasSkill('decadexuanfeng')){
if(player.countCards('e',function(card){ if(player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&game.hasPlayer(function(current){ return !_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0; return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)<0;
}); });
})>0) return 18; })>0) return 18;
return 7; return 7;
@ -6787,7 +6787,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else if(att>0){ else if(att>0){
if(target.countCards('e',function(card){ if(target.countCards('e',function(card){
return get.value(card,target)<0&&!_status.event.cards.contains(card)&&game.hasPlayer(function(current){ return get.value(card,target)<0&&!_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0; return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)<0;
}); });
})>0) return 9; })>0) return 9;
} }
@ -6798,7 +6798,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !_status.event.cards.contains(card); return !_status.event.cards.contains(card);
}); });
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,current)>0) return true; if(get.value(es[i],target)>0&&current.canEquip(card)&&get.effect(current,es[i],player,current)>0) return true;
} }
} }
})){ })){
@ -6818,7 +6818,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0; return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0;
}); });
if(bool&&player.countCards('e',function(card){ if(bool&&player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&target.isEmpty(get.subtype(card))&&get.effect(target,card,player,player)>0; return !_status.event.cards.contains(card)&&target.canEquip(card)&&get.effect(target,card,player,player)>0;
})) return 2.5*Math.abs(att); })) return 2.5*Math.abs(att);
else if(bool) return 1/Math.max(1,Math.abs(att)); else if(bool) return 1/Math.max(1,Math.abs(att));
else return get.damageEffect(target,player,player); else return get.damageEffect(target,player,player);
@ -6826,7 +6826,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&& if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&& get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.effect(target,es[i],player,target))==sgnatt&& get.sgn(get.effect(target,es[i],player,target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){ target.canEquip(es[i])){
return Math.abs(att); return Math.abs(att);
} }
} }
@ -6865,7 +6865,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},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){
if(_status.event.cards.contains(button.link)) return false; if(_status.event.cards.contains(button.link)) return false;
var targets1=_status.event.targets1; var targets1=_status.event.targets1;
return targets1.isEmpty(get.subtype(button.link)); return targets1.canEquip(button.link);
}).set('cards',cards); }).set('cards',cards);
} }
else{ else{
@ -6900,7 +6900,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}; };
for(var i=0;i<friends.length;i++){ for(var i=0;i<friends.length;i++){
for(var j=1;j<=5;j++){ for(var j=1;j<=5;j++){
if(friends[i].isEmpty(j)){ if(friends[i].hasEmptySlot(j)){
vacancies['equip'+j]++; vacancies['equip'+j]++;
} }
} }
@ -7566,7 +7566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{ else{
var filterTarget=function(card,player,target){ var filterTarget=function(card,player,target){
return target!=player&&target.countCards('e',function(card){ return target!=player&&target.countCards('e',function(card){
return player.isEmpty(get.subtype(card)); return player.canEquip(card);
}); });
} }
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
@ -7577,7 +7577,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0&&!target.hasSkillTag('noe')) return 0; if(att>0&&!target.hasSkillTag('noe')) return 0;
var num=0; var num=0;
target.countCards('e',function(card){ target.countCards('e',function(card){
if(player.isEmpty(get.subtype(card))){ if(player.canEquip(card)){
var eff=get.effect(player,card,player,player); var eff=get.effect(player,card,player,player);
if(eff>num) num=eff; if(eff>num) num=eff;
} }
@ -7594,7 +7594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.target=target; event.target=target;
player.logSkill('rezishou',target); player.logSkill('rezishou',target);
player.choosePlayerCard(target,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){ player.choosePlayerCard(target,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){
return _status.event.player.isEmpty(get.subtype(button.link)); return _status.event.player.canEquip(button.link);
}); });
} }
else event.finish(); else event.finish();
@ -8325,7 +8325,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isMin()) return false; if(target.isMin()) return false;
var es=from.getCards('e'); var es=from.getCards('e');
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true; if(target.canEquip(es[i])) return true;
} }
return false; return false;
} }
@ -8341,7 +8341,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0){ if(att>0){
if(target.countCards('e',function(card){ if(target.countCards('e',function(card){
return get.value(card,target)<0&&game.hasPlayer(function(current){ return get.value(card,target)<0&&game.hasPlayer(function(current){
return current!=player&&current!=target&&get.attitude(player,current)<0&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)>0; return current!=player&&current!=target&&get.attitude(player,current)<0&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
}); });
})>0) return 9; })>0) return 9;
} }
@ -8350,7 +8350,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current!=target&&current!=player&&get.attitude(player,current)>0){ if(current!=target&&current!=player&&get.attitude(player,current)>0){
var es=target.getCards('e'); var es=target.getCards('e');
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,player)>0) return true; if(get.value(es[i],target)>0&&current.canEquip(es[i])&&get.effect(current,es[i],player,player)>0) return true;
} }
} }
})){ })){
@ -8366,7 +8366,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&& if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&& get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.value(es[i],target))==sgnatt&& get.sgn(get.value(es[i],target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){ target.canEquip(es[i])){
return Math.abs(att); return Math.abs(att);
} }
} }
@ -8404,7 +8404,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){ },targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1; var targets1=_status.event.targets1;
return targets1.isEmpty(get.subtype(button.link)); return targets1.canEquip(button.link);
}); });
} }
else{ else{
@ -8433,7 +8433,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att2=get.sgn(get.attitude(player,current2)); var att2=get.sgn(get.attitude(player,current2));
if(att==att2||att2!=get.sgn(get.value(es[i],current2))) return false; if(att==att2||att2!=get.sgn(get.value(es[i],current2))) return false;
} }
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i])); return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){ })){
return true; return true;
} }
@ -11709,7 +11709,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.hasSex('male')) return false; if(!target.hasSex('male')) return false;
var card=ui.selected.cards[0]; var card=ui.selected.cards[0];
if(!card) return false; if(!card) return false;
if(get.position(card)=='e'&&!target.isEmpty(get.subtype(card))) return false; if(get.position(card)=='e'&&!target.canEquip(card)) return false;
return true; return true;
}, },
discard:false, discard:false,
@ -11718,7 +11718,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
if(get.position(cards[0])=='e') event._result={index:0}; if(get.position(cards[0])=='e') event._result={index:0};
else if(get.type(cards[0])!='equip'||!target.isEmpty(get.subtype(cards[0]))) event._result={index:1}; else if(get.type(cards[0])!='equip'||!target.canEquip(cards[0])) event._result={index:1};
else player.chooseControl().set('choiceList',[ else player.chooseControl().set('choiceList',[
'将'+get.translation(cards[0])+'置入'+get.translation(target)+'的装备区', '将'+get.translation(cards[0])+'置入'+get.translation(target)+'的装备区',
'弃置'+get.translation(cards[0]), '弃置'+get.translation(cards[0]),

View File

@ -3976,8 +3976,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
if(target.isMin()) return false; if(target.isMin()) return false;
var type=get.subtype(card); return player!=target&&target.canEquip(card);
return player!=target&&target.isEmpty(type);
}, },
content:function(){ content:function(){
target.equip(cards[0]); target.equip(cards[0]);
@ -5418,7 +5417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
inherit:'bagua_skill', inherit:'bagua_skill',
filter:function(event,player){ filter:function(event,player){
if(!lib.skill.bagua_skill.filter(event,player)) return false; if(!lib.skill.bagua_skill.filter(event,player)) return false;
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
return true; return true;
}, },
ai:{ ai:{
@ -5428,7 +5427,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target&&get.subtype(card)=='equip2'){ if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=7.5) return 0; if(get.equipValue(card)<=7.5) return 0;
} }
if(!target.isEmpty(2)) return; if(!target.hasEmptySlot(2)) return;
return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments); return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments);
} }
} }

View File

@ -1,4 +1,5 @@
'use strict'; 'use strict';
game.import('character',function(lib,game,ui,get,ai,_status){ game.import('character',function(lib,game,ui,get,ai,_status){
return { return {
name:'shiji', name:'shiji',
@ -402,21 +403,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0){ if(att>0){
if(target.hasCard(function(card){ if(target.hasCard(function(card){
if(get.value(card,target)<=0&&game.hasPlayer(function(current){ if(get.value(card,target)<=0&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; return current!=target&&current.canEquip(card,false)&&get.effect(current,card,player,player)>0;
})) return true; })) return true;
return false; return false;
},'e')) return 2*att; },'e')) return 2*att;
if(!target.hasCard(function(card){ if(!target.hasCard(function(card){
var sub=get.subtype(card,false);
return game.hasPlayer(function(current){ return game.hasPlayer(function(current){
return current!=target&&current.isEmpty(sub); return current!=target&&current.canEquip(card);
}) })
},'e')) return 1; },'e')) return 1;
} }
else if(att<0){ else if(att<0){
if(target.hasCard(function(card){ if(target.hasCard(function(card){
if(get.value(card,target)>=4.5&&game.hasPlayer(function(current){ if(get.value(card,target)>=4.5&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
})) return true; })) return true;
return false; return false;
},'e')) return -att; },'e')) return -att;
@ -433,9 +433,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish(); else event.finish();
'step 2' 'step 2'
var es=target.getCards('e',function(card){ var es=target.getCards('e',function(card){
var sub=get.subtype(card,false);
return game.hasPlayer(function(current){ return game.hasPlayer(function(current){
return current!=target&&current.isEmpty(sub); return current!=target&&current.canEquip(card);
}) })
}); });
if(es.length){ if(es.length){
@ -443,7 +442,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else player.chooseButton(['移动'+get.translation(target)+'的一张装备牌',es],true).set('ai',function(button){ else player.chooseButton(['移动'+get.translation(target)+'的一张装备牌',es],true).set('ai',function(button){
var player=_status.event.player,target=_status.event.getParent().target,card=button.link; var player=_status.event.player,target=_status.event.getParent().target,card=button.link;
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
})) return -get.value(card,target)*get.attitude(player,target); })) return -get.value(card,target)*get.attitude(player,target);
return 0; return 0;
}); });
@ -453,8 +452,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
event.card=result.links[0]; event.card=result.links[0];
player.chooseTarget(true,'选择'+get.translation(event.card)+'的移动目标',function(card,player,target){ player.chooseTarget(true,'选择'+get.translation(event.card)+'的移动目标',function(card,player,target){
return target.isEmpty(_status.event.subtype); return target.canEquip(_status.event.card);
}).set('subtype',get.subtype(event.card)).set('ai',function(target){ }).set('card',event.card).set('ai',function(target){
var evt=_status.event; var evt=_status.event;
return get.effect(target,evt.getParent().card,evt.player,evt.player); return get.effect(target,evt.getParent().card,evt.player,evt.player);
}); });
@ -1999,15 +1998,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.player!=player.storage.chuhai2) return false; if(event.player!=player.storage.chuhai2) return false;
for(var i=1;i<6;i++){ for(var i=1;i<6;i++){
if(player.isEmpty(i)) return true; if(player.hasEmptySlot(i)) return true;
} }
return false; return false;
}, },
content:function(){ content:function(){
for(var i=1;i<7;i++){ for(var i=1;i<7;i++){
if(player.isEmpty(i)){ if(player.hasEmptySlot(i)){
var sub='equip'+i,card=get.cardPile(function(card){ var sub='equip'+i,card=get.cardPile(function(card){
return get.subtype(card,false)==sub&&!get.cardtag(card,'gifts'); return get.subtype(card,false)==sub&&!get.cardtag(card,'gifts')&&player.canEquip(card);
}); });
if(card){ if(card){
player.$gain2(card); player.$gain2(card);
@ -2994,16 +2993,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
for(var i=1;i<6;i++){ for(var i=1;i<6;i++){
if(target.isEmpty(i)) return true; if(target.hasEmptySlot(i)) return true;
} }
return false; return false;
}, },
content:function(){ content:function(){
'step 0' 'step 0'
event.num=0; event.num=1;
player.awakenSkill('rongbei'); player.awakenSkill('rongbei');
'step 1' 'step 1'
while(!target.isEmpty(event.num)){ while(!target.hasEmptySlot(event.num)){
event.num++; event.num++;
if(event.num>5){ if(event.num>5){
event.finish(); event.finish();
@ -4602,7 +4601,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'muzhen', audio:'muzhen',
filterTarget:[ filterTarget:[
function(card,player,target){ function(card,player,target){
return target.countCards('h')>0&&target.isEmpty(ui.selected.cards[0]); return target.countCards('h')>0&&target.canEquip(ui.selected.cards[0]);
}, },
function(card,player,target){ function(card,player,target){
return target.countCards('e')>0; return target.countCards('e')>0;
@ -4610,9 +4609,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
][links[0]], ][links[0]],
filterCard:[ filterCard:[
function(card,player){ function(card,player){
if(ui.selected.targets.length) return ui.selected.targets[0].isEmpty(card); if(ui.selected.targets.length) return ui.selected.targets[0].canEquip(card);
return game.hasPlayer(function(current){ return game.hasPlayer(function(current){
return current.countCards('h')>0&&current.isEmpty(card); return current.countCards('h')>0&&current.canEquip(card);
}) })
}, },
true, true,

View File

@ -5901,16 +5901,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !event.numFixed&&event.num>0; return !event.numFixed&&event.num>0;
}, },
check:function(event,player){ check:function(event,player){
if(player.isEmpty(2)||player.isEmpty(5)||player.isEmpty(1)) return true; if(player.hasEmptySlot(2)||player.hasEmptySlot(5)||player.hasEmptySlot(1)) return true;
return false; return false;
}, },
prompt2:'摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。', prompt2:'摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){ player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){
if(player.isEmpty(2)) return 'equip2'; if(player.hasEmptySlot(2)) return 'equip2';
if(player.isEmpty(5)) return 'equip5'; if(player.hasEmptySlot(5)) return 'equip5';
if(player.isEmpty(1)) return 'equip1'; if(player.hasEmptySlot(1)) return 'equip1';
return 'equip6'; return 'equip6';
}); });
'step 1' 'step 1'
@ -7818,7 +7818,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'phaseBegin'}, trigger:{global:'phaseBegin'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
return event.player.isIn()&&event.player.isEmpty(5)&&player.hasCard(lib.skill.zhuangshu.filterCard,'he'); return event.player.isIn()&&event.player.hasEmptySlot(5)&&player.hasCard(lib.skill.zhuangshu.filterCard,'he');
}, },
filterCard:function(card){ filterCard:function(card){
if(_status.connectMode) return true; if(_status.connectMode) return true;
@ -7842,7 +7842,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(result.bool){ if(result.bool){
var name='zhuangshu_'+get.type2(result.cards[0],result.cards[0].original=='h'?player:false); var name='zhuangshu_'+get.type2(result.cards[0],result.cards[0].original=='h'?player:false);
if(lib.card[name]&&trigger.player.isIn&&trigger.player.isEmpty(5)){ if(lib.card[name]&&trigger.player.isIn&&trigger.player.hasEmptySlot(5)){
var target=game.findPlayer(function(current){ var target=game.findPlayer(function(current){
var equip=current.getEquip(5); var equip=current.getEquip(5);
return equip&&equip.name==name; return equip&&equip.name==name;
@ -11880,7 +11880,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).set('ai',function(target){ }).set('ai',function(target){
var player=_status.event.player; var player=_status.event.player;
var att=get.attitude(player,target) var att=get.attitude(player,target)
if(target.getEquip(2)&&player.isEmpty(2)){ if(target.getEquip(2)&&player.hasEmptySlot(2)){
return -2*att; return -2*att;
} }
return -att; return -att;
@ -16154,7 +16154,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
inherit:'bagua_skill', inherit:'bagua_skill',
filter:function(event,player){ filter:function(event,player){
if(!lib.skill.bagua_skill.filter(event,player)) return false; if(!lib.skill.bagua_skill.filter(event,player)) return false;
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
return true; return true;
}, },
ai:{ ai:{
@ -20901,7 +20901,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
position:'he', position:'he',
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return target.isEmpty(get.subtype(card)); return target.canEquip(card);
}, },
ai1:function(card){ ai1:function(card){
return 6-get.value(card); return 6-get.value(card);
@ -21160,7 +21160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 1" "step 1"
if(result.bool){ if(result.bool){
event.card=result.links[0]; event.card=result.links[0];
if(player.isEmpty(get.subtype(event.card))){ if(player.canEquip(event.card)){
player.chooseBool('是否将'+get.translation(event.card)+'置入自己的装备区?').ai=function(){ player.chooseBool('是否将'+get.translation(event.card)+'置入自己的装备区?').ai=function(){
return true; return true;
}; };
@ -21870,7 +21870,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//priority:15, //priority:15,
filter:function (event,player){ filter:function (event,player){
if(player.hasSkill('smh_huoji')||player.hasSkill('smh_lianhuan')) return false; if(player.hasSkill('smh_huoji')||player.hasSkill('smh_lianhuan')) return false;
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
if(event.nature) return true; if(event.nature) return true;
return get.type(event.card,'trick')=='trick'; return get.type(event.card,'trick')=='trick';
}, },
@ -21887,7 +21887,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target&&get.subtype(card)=='equip2'){ if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=8) return 0; if(get.equipValue(card)<=8) return 0;
} }
if(!target.isEmpty(2)) return; if(!target.hasEmptySlot(2)) return;
if(get.tag(card,'natureDamage')) return 'zerotarget'; if(get.tag(card,'natureDamage')) return 'zerotarget';
if(get.type(card)=='trick'&&get.tag(card,'damage')){ if(get.type(card)=='trick'&&get.tag(card,'damage')){
return 'zeroplayertarget'; return 'zeroplayertarget';

View File

@ -1139,7 +1139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.num=target.countCards('e'); event.num=target.countCards('e');
var subtypes=[]; var subtypes=[];
for(var i=1;i<7;i++){ for(var i=1;i<7;i++){
if(target.isEmpty(i)) subtypes.push('equip'+i); if(target.hasEmptySlot(i)) subtypes.push('equip'+i);
} }
if(subtypes.length){ if(subtypes.length){
subtypes.randomSort(); subtypes.randomSort();
@ -5890,7 +5890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
check:function(event,player){ check:function(event,player){
for(var i=5;i>0;i--){ for(var i=5;i>0;i--){
if(player.isEmpty(i)) return ('equip'+i); if(player.hasEmptySlot(i)) return ('equip'+i);
} }
return 'cancel2'; return 'cancel2';
}, },
@ -8986,7 +8986,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<event.toequip.length;i++){ for(var i=0;i<event.toequip.length;i++){
if(get.type(card)=='equip'&&get.subtype(card)==get.subtype(event.toequip[i])) bool1=false; if(get.type(card)=='equip'&&get.subtype(card)==get.subtype(event.toequip[i])) bool1=false;
} }
return (get.type(card)=='equip'&&!event.toequip.contains(card)&&target.isEmpty(get.subtype(card))&&bool1); return (get.type(card)=='equip'&&!event.toequip.contains(card)&&target.hasEmptySlot(card)&&bool1);
}); });
if(equip) event.toequip.push(equip); if(equip) event.toequip.push(equip);
else event.num=0; else event.num=0;

View File

@ -8483,7 +8483,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
usable:1, usable:1,
content:function(){ content:function(){
var card=get.cardPile(function(card){ var card=get.cardPile(function(card){
return get.type(card)=='equip'&&player.isEmpty(get.subtype(card)); return get.type(card)=='equip'&&player.canEquip(card);
}); });
if(card){ if(card){
player.$gain2(card); player.$gain2(card);
@ -9013,12 +9013,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var val=get.value(i); var val=get.value(i);
if(att>0){ if(att>0){
if(val<=Math.min(0,equip)&&game.hasPlayer(function(current){ if(val<=Math.min(0,equip)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(i))&&get.effect(current,i,player,player)>0; return current!=target&&current.canEquip(i)&&get.effect(current,i,player,player)>0;
})) equip=val; })) equip=val;
} }
else{ else{
if(val>Math.max(0,equip)&&game.hasPlayer(function(current){ if(val>Math.max(0,equip)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(i))&&get.effect(current,i,player,player)>0; return current!=target&&current.canEquip(i)&&get.effect(current,i,player,player)>0;
})) equip=val; })) equip=val;
} }
} }
@ -9121,7 +9121,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link); return targets1.canAddJudge(button.link);
} }
else{ else{
return targets1.isEmpty(get.subtype(button.link)); return targets1.canEquip(button.link);
} }
}).set('ai',function(button){ }).set('ai',function(button){
var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets0; var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets0;
@ -11538,7 +11538,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterCard:{type:'equip'}, filterCard:{type:'equip'},
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
var card=ui.selected.cards[0]; var card=ui.selected.cards[0];
return target.isEmpty(get.subtype(card)); return target.canEquip(card);
}, },
discard:false, discard:false,
lose:false, lose:false,

View File

@ -8645,7 +8645,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.num=1; event.num=1;
'step 1' 'step 1'
var type='equip'+num; var type='equip'+num;
if(!player.isEmpty(type)) return; if(!player.hasEmptySlot(type)) return;
var card=get.cardPile2(function(card){ var card=get.cardPile2(function(card){
return get.subtype(card,false)==type&&player.canUse(card,player); return get.subtype(card,false)==type&&player.canUse(card,player);
}); });

View File

@ -10835,7 +10835,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0" "step 0"
var next; var next;
if(trigger.player.hasCard(function(card){ if(trigger.player.hasCard(function(card){
return player.isEmpty(get.subtype(card)); return player.canEquip(card);
},'e')){ },'e')){
next=player.chooseControl('移动装备','draw_card','cancel2',function(event,player){ next=player.chooseControl('移动装备','draw_card','cancel2',function(event,player){
var source=_status.event.sourcex; var source=_status.event.sourcex;
@ -10865,7 +10865,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.control=='移动装备'){ if(result.control=='移动装备'){
player.logSkill('qieting',trigger.player); player.logSkill('qieting',trigger.player);
player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区',true).set('filterButton',function(button){ player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区',true).set('filterButton',function(button){
return _status.event.player.isEmpty(get.subtype(button.link)); return _status.event.player.canEquip(button.link);
}).set('ai',function(button){ }).set('ai',function(button){
return get.effect(player,button.link,player,player); return get.effect(player,button.link,player,player);
}); });

View File

@ -10761,7 +10761,7 @@
if(!event.slots.length) return; if(!event.slots.length) return;
var slotsx=[...new Set(event.slots)].sort(); var slotsx=[...new Set(event.slots)].sort();
for(var slot of slotsx){ for(var slot of slotsx){
var lost=player.countDisabled(slot),gain=Math.min(lost,get.numOf(event.slots,slot)); var lost=player.countDisabledSlot(slot),gain=Math.min(lost,get.numOf(event.slots,slot));
if(lost<=0) continue; if(lost<=0) continue;
else{ else{
game.log(player,'恢复了'+get.cnNumber(gain)+'个','#g'+get.translation(slot)+'栏'); game.log(player,'恢复了'+get.cnNumber(gain)+'个','#g'+get.translation(slot)+'栏');
@ -11827,7 +11827,7 @@
'step 0' 'step 0'
var list=[]; var list=[];
for(var i=1;i<=5;i++){ for(var i=1;i<=5;i++){
if(player.hasDisabled(i)) list.push('equip'+i); if(player.hasDisabledSlot(i)) list.push('equip'+i);
} }
if(!list.length) event.finish(); if(!list.length) event.finish();
else if(list.length==1){ else if(list.length==1){
@ -18133,20 +18133,20 @@
//装备栏相关 //装备栏相关
//判断一名角色的某个区域是否被废除 //判断一名角色的某个区域是否被废除
//type为要判断的区域 若为空 则判断玩家是否有任意一个被废除的区域 //type为要判断的区域 若为空 则判断玩家是否有任意一个被废除的区域
hasDisabled:function(type){ hasDisabledSlot:function(type){
var player=this; var player=this;
if(type=='horse') return player.hasDisabled(3)&&player.hasDisabled(4); if(type=='horse') return player.hasDisabledSlot(3)&&player.hasDisabledSlot(4);
return player.countDisabled(type)>0; return player.countDisabledSlot(type)>0;
}, },
//判断一名角色的某个区域被废除的数量 //判断一名角色的某个区域被废除的数量
//用法同上 //用法同上
countDisabled:function(type){ countDisabledSlot:function(type){
var player=this; var player=this;
var map=(player.disabledSlots||{}); var map=(player.disabledSlots||{});
if(type==undefined){ if(type==undefined){
num=0; num=0;
for(var i=1;i<=5;i++){ for(var i=1;i<=5;i++){
num+=player.countDisabled(i); num+=player.countDisabledSlot(i);
} }
return num; return num;
} }
@ -18157,11 +18157,28 @@
return 0; return 0;
} }
}, },
//判断一名角色是否有某个装备栏空着
hasEmptySlot:function(type){
var player=this;
if(type=='horse') return player.hasEmptySlot(3)&&player.hasEmptySlot(4);
return player.countEmptySlot(type)>0;
},
//判断一名角色的某个装备栏空位的数量
countEmptySlot:function(type){
if(!type) return 0;
var player=this;
if(typeof type=='number') type=('equip'+type);
return Math.max(0,player.countEnabledSlot(type)-player.getEquips(type).reduce(function(num,card){
var types=get.subtypes(card,false);
return num+get.numOf(types,type);
},0))
},
//判断一名角色是否有可以用于装备牌的区域(考虑金箍棒等“不可被替换装备”) //判断一名角色是否有可以用于装备牌的区域(考虑金箍棒等“不可被替换装备”)
//用法同下 //用法同下
countEquipableSlot:function(type){ countEquipableSlot:function(type){
if(!type) return false; if(!type) return 0;
var player=this; var player=this;
if(typeof type=='number') type=('equip'+type);
return Math.max(0,player.countEnabledSlot(type)-player.getEquips(type).reduce(function(num,card){ return Math.max(0,player.countEnabledSlot(type)-player.getEquips(type).reduce(function(num,card){
var types=get.subtypes(card,false); var types=get.subtypes(card,false);
if(!lib.filter.canBeReplaced(card,player)) num+=get.numOf(types,type); if(!lib.filter.canBeReplaced(card,player)) num+=get.numOf(types,type);
@ -18192,7 +18209,7 @@
var slots=1; var slots=1;
var num=map[type]; var num=map[type];
if(typeof num=='number'&&num>0) slots+=num; if(typeof num=='number'&&num>0) slots+=num;
slots-=player.countDisabled(type); slots-=player.countDisabledSlot(type);
return slots; return slots;
} }
}, },
@ -18396,8 +18413,11 @@
return true; return true;
}, },
//以下函数将不再进行后续维护 //以下函数将不再进行后续维护
countDisabled:function(){
return this.countDisabledSlot.apply(this,arguments)
},
isDisabled:function(arg){ isDisabled:function(arg){
return this.hasDisabled(arg)&&!this.hasEnabledSlot(arg); return this.hasDisabledSlot(arg)&&!this.hasEnabledSlot(arg);
}, },
isEmpty:function(num){ isEmpty:function(num){
return this.countEnabledSlot(num)>this.getEquips(num); return this.countEnabledSlot(num)>this.getEquips(num);

View File

@ -1890,7 +1890,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.num=1.5; event.num=1.5;
'step 1' 'step 1'
var card=cards.shift(); var card=cards.shift();
if(player.isEmpty(get.subtype(card))&&Math.random()<event.num){ if(player.canEquip(card)&&Math.random()<event.num){
player.equip(card); player.equip(card);
event.num=0.5; event.num=0.5;
} }
@ -2494,7 +2494,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
priority:-0.3, priority:-0.3,
equipSkill:false, equipSkill:false,
filter:function(event,player){ filter:function(event,player){
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
return lib.skill.renwang_skill.filter.apply(this,arguments); return lib.skill.renwang_skill.filter.apply(this,arguments);
}, },
}, },
@ -2615,7 +2615,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
priority:6, priority:6,
audio:true, audio:true,
filter:function(event,player){ filter:function(event,player){
if(!player.isEmpty('equip2')) return false; if(!player.hasEmptySlot('equip2')) return false;
if(event.card.name=='nanman') return true; if(event.card.name=='nanman') return true;
if(event.card.name=='wanjian') return true; if(event.card.name=='wanjian') return true;
return event.card.name=='sha'&&!get.nature(event.card); return event.card.name=='sha'&&!get.nature(event.card);
@ -2626,7 +2626,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(!target.isEmpty('equip2')) return; if(!target.hasEmptySlot('equip2')) return;
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget'; if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
if(card.name=='sha'){ if(card.name=='sha'){
var equip1=player.getEquip(1); var equip1=player.getEquip(1);

View File

@ -966,7 +966,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
equipSkill:true, equipSkill:true,
mod:{ mod:{
maxHandcard:function(player,num){ maxHandcard:function(player,num){
if(!player.isEmpty(2)) return; if(!player.hasEmptySlot(2)) return;
if(player.hasSkill('huangjintianbingfu')){ if(player.hasSkill('huangjintianbingfu')){
num+=player.getExpansions('huangjintianbingfu').length; num+=player.getExpansions('huangjintianbingfu').length;
} }
@ -978,14 +978,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
audio:'tianshu', audio:'tianshu',
inherit:'taipingyaoshu', inherit:'taipingyaoshu',
filter:function(event,player){ filter:function(event,player){
if(!player.isEmpty(2)) return false; if(!player.hasEmptySlot(2)) return false;
return lib.skill.taipingyaoshu.filter(event,player); return lib.skill.taipingyaoshu.filter(event,player);
}, },
noHidden:true, noHidden:true,
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(!target.isEmpty(2)) return; if(!target.hasEmptySlot(2)) return;
if(player==target&&get.subtype(card)=='equip2'){ if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=7.5) return 0; if(get.equipValue(card)<=7.5) return 0;
} }
@ -11987,7 +11987,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(player==target) return false; if(player==target) return false;
var card=ui.selected.cards[0]; var card=ui.selected.cards[0];
if(get.type(card)!='equip') return true; if(get.type(card)!='equip') return true;
return target.isEmpty(get.subtype(card)); return target.canEquip(card);
}, },
prompt:get.prompt2('gzhuyuan'), prompt:get.prompt2('gzhuyuan'),
complexSelect:true, complexSelect:true,
@ -12053,7 +12053,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
position:'he', position:'he',
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return target.isEmpty(get.subtype(card)); return target.canEquip(card);
}, },
ai1:function(card){ ai1:function(card){
return 6-get.value(card); return 6-get.value(card);