Merge pull request #7 from kuangshen04/PR-Branch

1
This commit is contained in:
狂神 2024-03-04 09:32:55 +08:00 committed by GitHub
commit e24c6aba62
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 278 additions and 243 deletions

View File

@ -101,10 +101,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter(event,player){ filter(event,player){
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; if(filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)&&player.countCards('hes',{suit:'diamond'})) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hes',{suit:'club'})) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hes',{suit:'heart'})) return true;
if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; if(filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)&&player.countCards('hes',{suit:'spade'})) return true;
return false; return false;
}, },
usable:20, usable:20,

View File

@ -2385,8 +2385,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else wuxie=true; else wuxie=true;
} }
} }
if(shan&&event.filterCard({name:'shan'},player,event)) return true; if(shan&&event.filterCard(get.autoViewAs({name:'shan'},'unsure'),player,event)) return true;
if(wuxie&&event.filterCard({name:'wuxie'},player,event)) return true; if(wuxie&&event.filterCard(get.autoViewAs({name:'wuxie'},'unsure'),player,event)) return true;
return false; return false;
}, },
hiddenCard (player,name){ hiddenCard (player,name){
@ -4815,17 +4815,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cardEnabled(card,player){ cardEnabled(card,player){
if(!player.storage['dddlianer_ceiling']) return; if(!player.storage['dddlianer_ceiling']) return;
var num=get.number(card); var num=get.number(card);
if(typeof num!='number'||player.storage['dddlianer_ceiling']<=num) return false; if(num!='unsure'&&(typeof num!='number'||player.storage['dddlianer_ceiling']<=num)) return false;
}, },
cardRespondable(card,player){ cardRespondable(card,player){
if(!player.storage['dddlianer_ceiling']) return; if(!player.storage['dddlianer_ceiling']) return;
var num=get.number(card); var num=get.number(card);
if(typeof num!='number'||player.storage['dddlianer_ceiling']<=num) return false; if(num!='unsure'&&(typeof num!='number'||player.storage['dddlianer_ceiling']<=num)) return false;
}, },
cardSavable(card,player){ cardSavable(card,player){
if(!player.storage['dddlianer_ceiling']) return; if(!player.storage['dddlianer_ceiling']) return;
var num=get.number(card); var num=get.number(card);
if(typeof num!='number'||player.storage['dddlianer_ceiling']<=num) return false; if(num!='unsure'&&(typeof num!='number'||player.storage['dddlianer_ceiling']<=num)) return false;
}, },
} }
} }

View File

@ -1909,6 +1909,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!Array.isArray(list)||typeof num!='number'||list.length<=num) return false; if(!Array.isArray(list)||typeof num!='number'||list.length<=num) return false;
var card=get.copy(list[num]); var card=get.copy(list[num]);
delete card.isCard; delete card.isCard;
card=get.autoViewAs(card,'unsure');
if(event.filterCard(card,player,event)) return true; if(event.filterCard(card,player,event)) return true;
return false; return false;
}, },
@ -2266,10 +2267,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=lib.skill.nsxingyun.getSixiang(i); var type=lib.skill.nsxingyun.getSixiang(i);
if(!type||list.includes(type)) continue; if(!type||list.includes(type)) continue;
if(event.filterCard({name:i},player,event)) return true; if(event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true; if(event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) return true;
} }
} }
} }
@ -8202,15 +8203,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
locked:false, locked:false,
mod:{ mod:{
targetInRange(card,player){ targetInRange(card,player){
var list=player.getExpansions('ao_diegui'); const cardSuit = get.suit(card,false);
for(var i=0;i<list.length;i++){ const list = player.getExpansions('ao_diegui');
if(get.suit(list[i],false)==get.suit(card,false)) return true; for(let i = 0; i < list.length; i++){
if(cardSuit==='unsure'||get.suit(list[i],false)===cardSuit) return true;
} }
}, },
cardUsable(card,player){ cardUsable(card,player){
var list=player.getExpansions('ao_diegui'); const cardSuit = get.suit(card,false);
for(var i=0;i<list.length;i++){ const list = player.getExpansions('ao_diegui');
if(get.suit(list[i],false)==get.suit(card,false)) return Infinity; for(let i = 0; i < list.length; i++){
if(cardSuit==='unsure'||get.suit(list[i],false)===cardSuit) return Infinity;
} }
}, },
maxHandcard(player,num){ maxHandcard(player,num){
@ -9508,7 +9511,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.type=='wuxie'||!player.countCards('hse',{suit:'diamond'})) return false; if(event.type=='wuxie'||!player.countCards('hse',{suit:'diamond'})) return false;
for(var i=0;i<lib.inpile.length;i++){ for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i]; var name=lib.inpile[i];
if(name!='du'&&name!='shan'&&get.type(name)=='basic'&&event.filterCard({name:name},player,event)) return true; if(name!='du'&&get.type(name)=='basic'&&event.filterCard(get.autoViewAs({name:name},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -9517,7 +9520,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[]; var list=[];
for(var i=0;i<lib.inpile.length;i++){ for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i]; var name=lib.inpile[i];
if(name=='du'||name=='shan') continue; if(name=='du') continue;
if(name=='sha'){ if(name=='sha'){
list.push(['基本','','sha']); list.push(['基本','','sha']);
for(var j of lib.inpile_nature) list.push(['基本','',name,j]); for(var j of lib.inpile_nature) list.push(['基本','',name,j]);
@ -9529,7 +9532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return ui.create.dialog('摆尾',[list,'vcard'],'hidden'); return ui.create.dialog('摆尾',[list,'vcard'],'hidden');
}, },
filter(button,player){ filter(button,player){
return _status.event.getParent().filterCard({name:button.link[2]},player,_status.event.getParent()); return _status.event.getParent().filterCard(get.autoViewAs({name:button.link[2]},'unsure'),player,_status.event.getParent());
}, },
check(button){ check(button){
if(_status.event.getParent().type=='phase'){ if(_status.event.getParent().type=='phase'){
@ -9582,27 +9585,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return tag=='fireAttack'||player.countCards('he',{suit:'diamond'})>0; return tag=='fireAttack'||player.countCards('he',{suit:'diamond'})>0;
}, },
}, },
group:['inari_baiwei_shan','inari_baiwei_draw'], group:['inari_baiwei_draw'],
},
inari_baiwei_shan:{
prompt:'将一张♦牌当做闪使用或打出',
enable:['chooseToRespond','chooseToUse'],
viewAs:{name:'shan'},
selectCard:1,
filterCard:{suit:'diamond'},
popname:true,
check(card){
return 1/Math.max(0.1,get.value(card));
},
position:'hse',
ai:{
order:10,
result:{player:1},
respondShan:true,
skillTagFilter(player){
return player.countCards('hse',{suit:'diamond'})>0;
},
},
}, },
inari_baiwei_draw:{ inari_baiwei_draw:{
trigger:{player:['useCardAfter','respondAfter']}, trigger:{player:['useCardAfter','respondAfter']},

View File

@ -1875,7 +1875,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twgongxin2:{ twgongxin2:{
mod:{ mod:{
cardEnabled2(card,player){ cardEnabled2(card,player){
if(player.getStorage('twgongxin2').includes(get.color(card))) return false; const color = get.color(card);
if(color!='unsure' && player.getStorage('twgongxin2').includes(color)) return false;
}, },
}, },
charlotte:true, charlotte:true,
@ -2266,10 +2267,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(lib.skill.xunshi.isXunshi(card)) return 'none'; if(lib.skill.xunshi.isXunshi(card)) return 'none';
}, },
targetInRange(card){ targetInRange(card){
if(get.color(card)=='none') return true; const suit = get.color(card);
if (suit=='none' || suit=='unsure') return true;
}, },
cardUsable(card){ cardUsable(card){
if(get.color(card)=='none') return Infinity; const suit = get.color(card);
if (suit=='none' || suit=='unsure') return Infinity;
}, },
}, },
isXunshi(card){ isXunshi(card){
@ -2343,10 +2346,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.suit(card)=='heart') return false; if(get.suit(card)=='heart') return false;
}, },
targetInRange(card){ targetInRange(card){
if(get.suit(card)=='heart') return true; if(card.name === 'sha'){
const suit = get.suit(card);
if (suit === 'heart' || suit === 'unsure') return true;
}
}, },
cardUsable(card){ cardUsable(card){
if(card.name=='sha'&&get.suit(card)=='heart') return Infinity; if(card.name === 'sha'){
const suit = get.suit(card);
if (suit === 'heart' || suit === 'unsure') return Infinity;
}
} }
}, },
audio:'wushen', audio:'wushen',
@ -2511,16 +2520,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.responded||event.shouli||event.type=='wuxie') return false; if(event.responded||event.shouli||event.type=='wuxie') return false;
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return current.getCards('e',card=>get.is.attackingMount(card)).length>0; return current.getCards('e',card=>get.is.attackingMount(card)).length>0;
})&&event.filterCard({ })&&event.filterCard(get.autoViewAs({
name:'sha', name:'sha',
storage:{shouli:true}, storage:{shouli:true},
},player,event)) return true; },'unsure'),player,event)) return true;
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return current.getCards('e',card=>get.is.defendingMount(card)).length>0; return current.getCards('e',card=>get.is.defendingMount(card)).length>0;
})&&event.filterCard({ })&&event.filterCard(get.autoViewAs({
name:'shan', name:'shan',
storage:{shouli:true}, storage:{shouli:true},
},player,event)) return true; },'unsure'),player,event)) return true;
return false; return false;
}, },
delay:false, delay:false,
@ -6164,10 +6173,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.suit(card)=='heart') return false; if(get.suit(card)=='heart') return false;
}, },
targetInRange(card){ targetInRange(card){
if(get.suit(card)=='heart') return true; if(card.name === 'sha'){
const suit = get.suit(card);
if (suit === 'heart' || suit === 'unsure') return true;
}
}, },
cardUsable(card){ cardUsable(card){
if(card.name=='sha'&&get.suit(card)=='heart') return Infinity; if(card.name === 'sha'){
const suit = get.suit(card);
if (suit === 'heart' || suit === 'unsure') return Infinity;
}
} }
}, },
audio:2, audio:2,
@ -6875,13 +6890,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//获取卡牌花色 //获取卡牌花色
var name=get.suit(card,player); var name=get.suit(card,player);
//如果这张牌是梅花并且当前时机能够使用/打出闪 那么这张牌可以选择 //如果这张牌是梅花并且当前时机能够使用/打出闪 那么这张牌可以选择
if(name=='club'&&filter({name:'shan'},player,event)) return true; if(name=='club'&&filter(get.autoViewAs({name:'shan'},'unsure'),player,event)) return true;
//如果这张牌是方片并且当前时机能够使用/打出火杀 那么这张牌可以选择 //如果这张牌是方片并且当前时机能够使用/打出火杀 那么这张牌可以选择
if(name=='diamond'&&filter({name:'sha',nature:'fire'},player,event)) return true; if(name=='diamond'&&filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)) return true;
//如果这张牌是黑桃并且当前时机能够使用/打出无懈 那么这张牌可以选择 //如果这张牌是黑桃并且当前时机能够使用/打出无懈 那么这张牌可以选择
if(name=='spade'&&filter({name:'wuxie'},player,event)) return true; if(name=='spade'&&filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)) return true;
//如果这张牌是红桃并且当前时机能够使用/打出桃 那么这张牌可以选择 //如果这张牌是红桃并且当前时机能够使用/打出桃 那么这张牌可以选择
if(name=='heart'&&filter({name:'tao'},player,event)) return true; if(name=='heart'&&filter(get.autoViewAs({name:'tao'},'unsure'),player,event)) return true;
//上述条件都不满足 那么就不能选择这张牌 //上述条件都不满足 那么就不能选择这张牌
return false; return false;
}, },
@ -6890,13 +6905,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//获取当前时机的卡牌选择限制 //获取当前时机的卡牌选择限制
var filter=event.filterCard; var filter=event.filterCard;
//如果当前时机能够使用/打出火杀并且角色有方片 那么可以发动技能 //如果当前时机能够使用/打出火杀并且角色有方片 那么可以发动技能
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; if(filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)&&player.countCards('hes',{suit:'diamond'})) return true;
//如果当前时机能够使用/打出闪并且角色有梅花 那么可以发动技能 //如果当前时机能够使用/打出闪并且角色有梅花 那么可以发动技能
if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hes',{suit:'club'})) return true;
//如果当前时机能够使用/打出桃并且角色有红桃 那么可以发动技能 //如果当前时机能够使用/打出桃并且角色有红桃 那么可以发动技能
if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hes',{suit:'heart'})) return true;
//如果当前时机能够使用/打出无懈可击并且角色有黑桃 那么可以发动技能 //如果当前时机能够使用/打出无懈可击并且角色有黑桃 那么可以发动技能
if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; if(filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)&&player.countCards('hes',{suit:'spade'})) return true;
return false; return false;
}, },
ai:{ ai:{
@ -7029,10 +7044,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter(event,player){ filter(event,player){
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hs',{suit:'diamond'})) return true; if(filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)&&player.countCards('hs',{suit:'diamond'})) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hs',{suit:'club'})) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hs',{suit:'club'})) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hs',{suit:'heart'})) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hs',{suit:'heart'})) return true;
if(filter({name:'wuxie'},player,event)&&player.countCards('hs',{suit:'spade'})) return true; if(filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)&&player.countCards('hs',{suit:'spade'})) return true;
return false; return false;
}, },
precontent(){ precontent(){

View File

@ -8885,7 +8885,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.hasCard((card)=>(get.type(card)!='basic'),'ehs')) return false; if(!player.hasCard((card)=>(get.type(card)!='basic'),'ehs')) return false;
for(var i of list){ for(var i of list){
var type=get.type2(i,false); var type=get.type2(i,false);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -8896,7 +8896,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list2=[]; var list2=[];
for(var i of list){ for(var i of list){
var type=get.type2(i,false); var type=get.type2(i,false);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) list2.push([type,'',i]); if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) list2.push([type,'',i]);
} }
return ui.create.dialog('浮萍',[list2,'vcard']); return ui.create.dialog('浮萍',[list2,'vcard']);
}, },
@ -8912,7 +8912,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
popname:true, popname:true,
viewAs:{ viewAs:{
name:links[0][2], name:links[0][2],
isCard:true,
}, },
check:function(card){ check:function(card){
return 8-get.value(card); return 8-get.value(card);
@ -11058,11 +11057,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
zhente2:{ zhente2:{
mod:{ mod:{
cardEnabled:function(card,player){ cardEnabled(card, player) {
if(player.getStorage('zhente2').includes(get.color(card))) return false; const color = get.color(card);
if (color != 'unsure' && player.getStorage('zhente2').includes(color)) return false;
}, },
cardSavable:function(card,player){ cardSavable(card,player) {
if(player.getStorage('zhente2').includes(get.color(card))) return false; const color = get.color(card);
if (color != 'unsure' && player.getStorage('zhente2').includes(color)) return false;
}, },
}, },
charlotte:true, charlotte:true,

View File

@ -235,7 +235,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
for(const name of ['wuxie','huogong']){ for(const name of ['wuxie','huogong']){
if(event.filterCard({name},player,event)) return true; if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -246,7 +246,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
viewAs:function(cards,player){ viewAs:function(cards,player){
const event=get.event(),filter=event._backup.filterCard; const event=get.event(),filter=event._backup.filterCard;
for(const name of ['wuxie','huogong']){ for(const name of ['wuxie','huogong']){
if(filter({name},player,event)) return {name}; if(filter(get.autoViewAs({name},'unsure'),player,event)) return {name};
} }
return null; return null;
}, },
@ -508,13 +508,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
onremove:true, onremove:true,
mod:{ mod:{
cardEnabled:function(card,player){ cardEnabled:function(card,player){
if(player.getStorage('jsrgfumou_forbid').includes(get.color(card))) return false; const color = get.color(card);
if (color != 'unsure' && player.getStorage('jsrgfumou_forbid').includes(color)) return false;
}, },
cardRespondable:function(card,player){ cardRespondable:function(card,player){
if(player.getStorage('jsrgfumou_forbid').includes(get.color(card))) return false; const color = get.color(card);
if (color != 'unsure' && player.getStorage('jsrgfumou_forbid').includes(color)) return false;
}, },
cardSavable:function(card,player){ cardSavable:function(card,player){
if(player.getStorage('jsrgfumou_forbid').includes(get.color(card))) return false; const color = get.color(card);
if (color != 'unsure' && player.getStorage('jsrgfumou_forbid').includes(color)) return false;
}, },
}, },
mark:true, mark:true,
@ -810,14 +813,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return false; })) return false;
return get.inpileVCardList(info=>{ return get.inpileVCardList(info=>{
if(info[0]!='basic') return false; if(info[0]!='basic') return false;
return event.filterCard({name:info[2],nature:info[3]},player,event); return event.filterCard(get.autoViewAs({name:info[2],nature:info[3]},'unsure'),player,event);
}).length; }).length;
}, },
chooseButton:{ chooseButton:{
dialog(event,player){ dialog(event,player){
const vcards=get.inpileVCardList(info=>{ const vcards=get.inpileVCardList(info=>{
if(info[0]!='basic') return false; if(info[0]!='basic') return false;
return event.filterCard({name:info[2],nature:info[3]},player,event); return event.filterCard(get.autoViewAs({name:info[2],nature:info[3]},'unsure'),player,event);
}); });
return ui.create.dialog('镇胆',[vcards,'vcard']); return ui.create.dialog('镇胆',[vcards,'vcard']);
}, },
@ -1277,14 +1280,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return false; })) return false;
return get.inpileVCardList(info=>{ return get.inpileVCardList(info=>{
if(info[0]!='basic') return false; if(info[0]!='basic') return false;
return event.filterCard({name:info[2],nature:info[3]},player,event); return event.filterCard(get.autoViewAs({name:info[2],nature:info[3]},'unsure'),player,event);
}).length; }).length;
}, },
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
const vcards=get.inpileVCardList(info=>{ const vcards=get.inpileVCardList(info=>{
if(info[0]!='basic') return false; if(info[0]!='basic') return false;
return event.filterCard({name:info[2],nature:info[3]},player,event); return event.filterCard(get.autoViewAs({name:info[2],nature:info[3]},'unsure'),player,event);
}); });
return ui.create.dialog('惊惧',[vcards,'vcard'],'hidden'); return ui.create.dialog('惊惧',[vcards,'vcard'],'hidden');
}, },
@ -4759,11 +4762,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type2(name)!='basic') continue; if(get.type2(name)!='basic') continue;
var card={name:name}; var card={name:name};
if(event.filterCard(card,player,event)) return true; if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) return true;
if(name=='sha'){ if(name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
card.nature=nature; card.nature=nature;
if(event.filterCard(card,player,event)) return true; if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) return true;
} }
} }
} }
@ -4775,19 +4778,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[]; var list=[];
for(var name of lib.inpile){ for(var name of lib.inpile){
if(name=='sha'){ if(name=='sha'){
if(event.filterCard({name:name},player,event)) list.push(['基本','','sha']); if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','','sha']);
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:nature},player,event)) list.push(['基本','','sha',nature]); if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',nature]);
} }
} }
else if(get.type(name)=='basic'&&event.filterCard({name:name},player,event)) list.push(['基本','',name]); else if(get.type(name)=='basic'&&event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','',name]);
} }
var dialog=ui.create.dialog('念恩',[list,'vcard']); var dialog=ui.create.dialog('念恩',[list,'vcard']);
dialog.direct=true; dialog.direct=true;
return dialog; return dialog;
}, },
filter:function(button,player){ filter:function(button,player){
return _status.event.getParent().filterCard({name:button.link[2],nature:button.link[3]},player,_status.event.getParent()); return _status.event.getParent().filterCard(get.autoViewAs({name:button.link[2],nature:button.link[3]},'unsure'),player,_status.event.getParent());
}, },
check:function(button){ check:function(button){
if(_status.event.getParent().type!='phase') return 1; if(_status.event.getParent().type!='phase') return 1;
@ -5035,7 +5038,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(player.getStorage('jsrgjixiang_used').includes(name)) continue; if(player.getStorage('jsrgjixiang_used').includes(name)) continue;
var card={name:name}; var card={name:name,isCard:true};
if(event.filterCard(card,event.player,event)) return true; if(event.filterCard(card,event.player,event)) return true;
if(name=='sha'){ if(name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){

View File

@ -3108,7 +3108,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cardEnabled:function(card,player){ cardEnabled:function(card,player){
if(!player.storage.scschihe_blocker) return; if(!player.storage.scschihe_blocker) return;
var suit=get.suit(card); var suit=get.suit(card);
if(suit=='none') return; if(suit=='none'||suit=='unsure') return;
var evt=_status.event; var evt=_status.event;
if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse'); if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse');
if(!evt||!evt.respondTo||evt.respondTo[1].name!='sha') return; if(!evt||!evt.respondTo||evt.respondTo[1].name!='sha') return;
@ -3222,10 +3222,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; if(filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)&&player.countCards('hes',{suit:'diamond'})) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hes',{suit:'club'})) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hes',{suit:'heart'})) return true;
if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; if(filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)&&player.countCards('hes',{suit:'spade'})) return true;
return false; return false;
}, },
precontent:function(){ precontent:function(){
@ -3399,10 +3399,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; if(filter(get.autoViewAs({name:'sha',nature:'fire'},'unsure'),player,event)&&player.countCards('hes',{suit:'diamond'})) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hes',{suit:'club'})) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hes',{suit:'heart'})) return true;
if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; if(filter(get.autoViewAs({name:'wuxie'},'unsure'),player,event)&&player.countCards('hes',{suit:'spade'})) return true;
return false; return false;
}, },
precontent:function(){ precontent:function(){
@ -5625,7 +5625,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=lib.skill.dcjianying.getLastUsed(player); var evt=lib.skill.dcjianying.getLastUsed(player);
if(!evt||!evt.card) return; if(!evt||!evt.card) return;
var num1=get.number(card),num2=get.number(evt.card); var num1=get.number(card),num2=get.number(evt.card);
if(typeof num1=='number'&&typeof num2=='number'&&num1%num2==0) return Infinity; if(num1==='unsure'||typeof num1=='number'&&typeof num2=='number'&&num1%num2==0) return Infinity;
} }
}, },
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
@ -5633,7 +5633,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=lib.skill.dcjianying.getLastUsed(player); var evt=lib.skill.dcjianying.getLastUsed(player);
if(!evt||!evt.card) return; if(!evt||!evt.card) return;
var num1=get.number(card),num2=num2=get.number(evt.card); var num1=get.number(card),num2=num2=get.number(evt.card);
if(typeof num1=='number'&&typeof num2=='number'&&num2%num1==0) return num+5; if(num1==='unsure'||typeof num1=='number'&&typeof num2=='number'&&num2%num1==0) return num+5;
} }
}, },
}, },
@ -6634,19 +6634,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:['chooseToUse','chooseToRespond'], enable:['chooseToUse','chooseToRespond'],
filter:function(event,player){ filter:function(event,player){
return player.getExpansions('jibing').length>0&&(event.filterCard({name:'sha'},player,event)||event.filterCard({name:'shan'},player,event)); return player.getExpansions('jibing').length>0&&(event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)||event.filterCard(get.autoViewAs({name:'shan'},'unsure'),player,event));
}, },
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
var dialog=ui.create.dialog('集兵','hidden'); var dialog=ui.create.dialog('集兵','hidden');
if(event.filterCard({name:'sha'},player,event)&&event.filterCard({name:'shan'},player,event)){ if(event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)&&event.filterCard(get.autoViewAs({name:'shan'},'unsure'),player,event)){
dialog._chooseButton=2; dialog._chooseButton=2;
var list=['sha','shan']; var list=['sha','shan'];
dialog.add([list.map(i=>{ dialog.add([list.map(i=>{
return [i,get.translation(i)]; return [i,get.translation(i)];
}),'tdnodes']); }),'tdnodes']);
} }
else dialog._cardName=event.filterCard({name:'sha'},player,event)?'sha':'shan'; else dialog._cardName=event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)?'sha':'shan';
dialog.add(player.getExpansions('jibing')); dialog.add(player.getExpansions('jibing'));
return dialog; return dialog;
}, },
@ -13279,7 +13279,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},'hs')) return false; },'hs')) return false;
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)) return true; if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -13288,7 +13288,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[]; var list=[];
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)) list.push(['基本','',name]); if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','',name]);
if(name!='sha') continue; if(name!='sha') continue;
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:name,nature:j},player,event)) list.push(['基本','','sha',j]); if(event.filterCard({name:name,nature:j},player,event)) list.push(['基本','','sha',j]);
@ -14298,10 +14298,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},'hs')) return false; },'hs')) return false;
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)) return true; if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
if(name=='sha'){ if(name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:'sha',nature:nature},player,event)) return true; if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) return true;
} }
} }
} }
@ -14312,12 +14312,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[]; var list=[];
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)){ if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)){
list.push(['基本','',name]); list.push(['基本','',name]);
} }
if(name=='sha'){ if(name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:nature},player,event)) list.push(['基本','','sha',nature]); if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',nature]);
} }
} }
} }

View File

@ -597,16 +597,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.responded||event.psshouli||event.type=='wuxie') return false; if(event.responded||event.psshouli||event.type=='wuxie') return false;
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return current.getEquips(4).length>0; return current.getEquips(4).length>0;
})&&event.filterCard({ })&&event.filterCard(get.autoViewAs({
name:'sha', name:'sha',
storage:{psshouli:true}, storage:{psshouli:true},
},player,event)) return true; },'unsure'),player,event)) return true;
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return current.getEquips(3).length>0; return current.getEquips(3).length>0;
})&&event.filterCard({ })&&event.filterCard(get.autoViewAs({
name:'shan', name:'shan',
storage:{psshouli:true}, storage:{psshouli:true},
},player,event)) return true; },'unsure'),player,event)) return true;
return false; return false;
}, },
delay:false, delay:false,
@ -1088,7 +1088,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countMark('pkwuku')||player.hasSkill('pkmiewu2')) return false; if(!player.countMark('pkwuku')||player.hasSkill('pkmiewu2')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -1098,19 +1098,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.inpile.length;i++){ for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i]; var name=lib.inpile[i];
if(name=='sha'){ if(name=='sha'){
if(event.filterCard({name:name},player,event)) list.push(['基本','','sha']); if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','','sha']);
for(var j of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:j},player,event)) list.push(['基本','','sha',j]); if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',j]);
} }
} }
else if(get.type(name)=='trick'&&event.filterCard({name:name},player,event)) list.push(['锦囊','',name]); else if(get.type(name)=='trick'&&event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['锦囊','',name]);
else if(get.type(name)=='basic'&&event.filterCard({name:name},player,event)) list.push(['基本','',name]); else if(get.type(name)=='basic'&&event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','',name]);
} }
return ui.create.dialog('灭吴',[list,'vcard']); return ui.create.dialog('灭吴',[list,'vcard']);
}, },
filter:function(button,player){ //これ 要らない(そよりん声线)
return _status.event.getParent().filterCard({name:button.link[2]},player,_status.event.getParent()); //filter:function(button,player){
}, // return _status.event.getParent().filterCard({name:button.link[2]},player,_status.event.getParent());
//},
check:function(button){ check:function(button){
if(_status.event.getParent().type!='phase') return 1; if(_status.event.getParent().type!='phase') return 1;
var player=_status.event.player; var player=_status.event.player;
@ -2173,7 +2174,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countCards('hse')||player.hasSkill('pslongyin_used')) return false; if(!player.countCards('hse')||player.hasSkill('pslongyin_used')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -4158,24 +4159,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.storage.jsprende+=cards.length; player.storage.jsprende+=cards.length;
if(player.storage.jsprende>=2){ if(player.storage.jsprende>=2){
var list=[]; var list=[];
if(lib.filter.cardUsable({name:'sha'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ if(lib.filter.cardUsable({name:'sha',isCard:true},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('sha',current); return player.canUse('sha',current);
})){ })){
list.push(['基本','','sha']); list.push(['基本','','sha']);
} }
for(var i of lib.inpile_nature){ for(var i of lib.inpile_nature){
if(lib.filter.cardUsable({name:'sha',nature:i},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ if(lib.filter.cardUsable({name:'sha',nature:i,isCard:true},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse({name:'sha',nature:i},current); return player.canUse({name:'sha',nature:i,isCard:true},current);
})){ })){
list.push(['基本','','sha',i]); list.push(['基本','','sha',i]);
} }
} }
if(lib.filter.cardUsable({name:'tao'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ if(lib.filter.cardUsable({name:'tao',isCard:true},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('tao',current); return player.canUse('tao',current);
})){ })){
list.push(['基本','','tao']); list.push(['基本','','tao']);
} }
if(lib.filter.cardUsable({name:'jiu'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ if(lib.filter.cardUsable({name:'jiu',isCard:true},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('jiu',current); return player.canUse('jiu',current);
})){ })){
list.push(['基本','','jiu']); list.push(['基本','','jiu']);
@ -4183,7 +4184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(list.length){ if(list.length){
player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){ player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){
var player=_status.event.player; var player=_status.event.player;
var card={name:button.link[2],nature:button.link[3]}; var card={name:button.link[2],nature:button.link[3],isCard:true};
if(card.name=='tao'){ if(card.name=='tao'){
if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){ if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){
return 5; return 5;
@ -4220,7 +4221,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
'step 1' 'step 1'
if(result&&result.bool&&result.links[0]){ if(result&&result.bool&&result.links[0]){
var card={name:result.links[0][2],nature:result.links[0][3]}; var card={name:result.links[0][2],nature:result.links[0][3],isCard:true};
player.chooseUseTarget(card,true); player.chooseUseTarget(card,true);
} }
}, },
@ -6094,10 +6095,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
cardRespondable:function(card,player){ cardRespondable:function(card,player){
if(card.name=='shan'&&get.suit(card)!='heart') return false; if(card.name=='shan'){
const suit=get.suit(card);
if(suit!='heart'&&suit!='unsure') return false;
}
}, },
cardEnabled:function(card,player){ cardEnabled:function(card,player){
if(card.name=='shan'&&get.suit(card)!='heart') return false; if(card.name=='shan'){
const suit=get.suit(card);
if(suit!='heart'&&suit!='unsure') return false;
}
}, },
} }
}, },

View File

@ -528,10 +528,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countCards('hs')) return false; if(!player.countCards('hs')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true; if(event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) return true;
} }
} }
} }
@ -541,20 +541,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog:function(event,player){ dialog:function(event,player){
var list=[]; var list=[];
for(var i of lib.inpile){ for(var i of lib.inpile){
if(event.type!='phase') if(!event.filterCard({name:i},player,event)) continue; if(event.type!='phase') if(!event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) continue;
var type=get.type(i); var type=get.type(i);
if(type=='basic'||type=='trick') list.push([type,'',i]); if(type=='basic'||type=='trick') list.push([type,'',i]);
if(i=='sha'){ if(i=='sha'){
if(event.type!='phase') if(!event.filterCard({name:i,nature:j},player,event)) continue; if(event.type!='phase') if(!event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) continue;
for(var j of lib.inpile_nature) list.push(['基本','','sha',j]); for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
} }
} }
return ui.create.dialog('蛊惑',[list,'vcard']); return ui.create.dialog('蛊惑',[list,'vcard']);
}, },
filter:function(button,player){
var evt=_status.event.getParent();
return evt.filterCard({name:button.link[2],nature:button.link[3]},player,evt);
},
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
var order=Math.max(0,get.order(card)+1); var order=Math.max(0,get.order(card)+1);

View File

@ -205,8 +205,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
let evt=_status.event; let evt=_status.event;
if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse'); if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse');
if(!evt||!evt.respondTo||!storage.includes(evt.respondTo[1])) return; if(!evt||!evt.respondTo||!storage.includes(evt.respondTo[1])) return;
const num=get.number(card,player); const num = get.number(card);
if(!(typeof num!='number'||num>=get.number(evt.respondTo[1]))) return false; if(num!='unsure' && (typeof num!='number' || num<=get.number(evt.respondTo[1]))) return false;
}, },
}, },
onremove(player){ onremove(player){

View File

@ -6758,7 +6758,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return Infinity; return Infinity;
}, },
cardUsable:function(card,player){ cardUsable:function(card,player){
if(card.name=='sha'&&player.storage.xingongji2.includes(get.suit(card))) return Infinity; if(card.name=='sha'){
const suit = get.suit(card);
return suit === 'unsure' || player.storage.xingongji2.includes(suit);
}
}, },
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(get.name(card)=='sha'&&!player.storage.xingongji2.includes(get.suit(card))) return num+1; if(get.name(card)=='sha'&&!player.storage.xingongji2.includes(get.suit(card))) return num+1;
@ -8739,10 +8742,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha'},player,event)&&player.countCards('hs','shan')) return true; if(filter(get.autoViewAs({name:'sha'},'unsure'),player,event)&&player.countCards('hs','shan')) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hs','sha')) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hs','sha')) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hs','jiu')) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player,event)&&player.countCards('hs','jiu')) return true;
if(filter({name:'jiu'},player,event)&&player.countCards('hs','tao')) return true; if(filter(get.autoViewAs({name:'jiu'},'unsure'),player,event)&&player.countCards('hs','tao')) return true;
return false; return false;
}, },
ai:{ ai:{
@ -10822,10 +10825,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countCards('hs')||player.hasSkill('reguhuo_phase')) return false; if(!player.countCards('hs')||player.hasSkill('reguhuo_phase')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true; if(event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) return true;
} }
} }
} }
@ -10845,7 +10848,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(button,player){ filter:function(button,player){
var evt=_status.event.getParent(); var evt=_status.event.getParent();
return evt.filterCard({name:button.link[2],nature:button.link[3]},player,evt); return evt.filterCard(get.autoViewAs({name:button.link[2],nature:button.link[3]},'unsure'),player,evt);
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;

View File

@ -828,7 +828,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return name=='sha'&&player.countCards('hs'); return name=='sha'&&player.countCards('hs');
}, },
filter:function(event,player){ filter:function(event,player){
return event.filterCard({name:'sha'},player,event)||lib.inpile_nature.some(nature=>event.filterCard({name:'sha',nature:nature},player,event)); return event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)||lib.inpile_nature.some(nature=>event.filterCard(get.autoViewAs({name:'sha',nature},'unsure'),player,event));
}, },
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
@ -3763,10 +3763,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!marked&&name!='sha'&&name!='shan') continue; if(!marked&&name!='sha'&&name!='shan') continue;
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){ if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){
if(event.filterCard({name:name},player,event)) return true; if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
if(marked&&name=='sha'){ if(marked&&name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:nature},player,event)) return true; if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) return true;
} }
} }
} }
@ -3781,10 +3781,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!marked&&name!='sha'&&name!='shan') continue; if(!marked&&name!='sha'&&name!='shan') continue;
if(get.type(name)!='basic') continue; if(get.type(name)!='basic') continue;
if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){ if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){
if(event.filterCard({name:name},player,event)) list.push(['基本','',name]); if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','',name]);
if(marked&&name=='sha'){ if(marked&&name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:nature},player,event)) list.push(['基本','',name,nature]) if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','',name,nature])
} }
} }
} }

View File

@ -150,7 +150,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
if(!player.hasCard(card=>get.suit(card)=='club','sh')) return false; if(!player.hasCard(card=>get.suit(card)=='club','sh')) return false;
return (event.type=='phase'||event.filterCard({name:'tiesuo'},player,event)); return (event.type=='phase'||event.filterCard(get.autoViewAs({name:'tiesuo'},'unsure'),player,event));
}, },
position:'hs', position:'hs',
filterCard:function(card,player,event){ filterCard:function(card,player,event){
@ -2259,16 +2259,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"nzry_chenglve1":{ "nzry_chenglve1":{
mod:{ mod:{
cardUsable:function(card,player){ cardUsable:function(card,player){
var cards=player.storage.nzry_chenglve1; const suit = get.suit(card);
for(var i=0;i<cards.length;i++){ if (suit == 'unsure' || player.getStorage('nzry_chenglve1').includes(suit)) return Infinity;
if(cards[i]==get.suit(card)) return Infinity;
}
}, },
targetInRange:function(card,player){ targetInRange:function(card,player){
var cards=player.storage.nzry_chenglve1; const suit = get.suit(card);
for(var i=0;i<cards.length;i++){ if (suit == 'unsure' || player.getStorage('nzry_chenglve1').includes(suit)) return true;
if(cards[i]==get.suit(card)) return true;
}
} }
}, },
onremove:true, onremove:true,
@ -7429,10 +7425,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countCards('hs')) return false; if(!player.countCards('hs')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true; if(event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) return true;
} }
} }
} }
@ -7442,11 +7438,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog:function(event,player){ dialog:function(event,player){
var list=[]; var list=[];
for(var i of lib.inpile){ for(var i of lib.inpile){
if(event.type!='phase') if(!event.filterCard({name:i},player,event)) continue; if(event.type!='phase') if(!event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) continue;
var type=get.type(i); var type=get.type(i);
if(type=='basic'||type=='trick') list.push([type,'',i]); if(type=='basic'||type=='trick') list.push([type,'',i]);
if(i=='sha'){ if(i=='sha'){
if(event.type!='phase') if(!event.filterCard({name:i,nature:j},player,event)) continue; if(event.type!='phase') if(!event.filterCard(get.autoViewAs({name:i,nature:j},'unsure'),player,event)) continue;
for(var j of lib.inpile_nature) list.push(['基本','','sha',j]); for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
} }
} }

View File

@ -5780,7 +5780,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.countMark('spwuku')||!player.countCards('hse')||player.hasSkill('spmiewu2')) return false; if(!player.countMark('spwuku')||!player.countCards('hse')||player.hasSkill('spmiewu2')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
var type=get.type2(i); var type=get.type2(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -5790,19 +5790,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<lib.inpile.length;i++){ for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i]; var name=lib.inpile[i];
if(name=='sha'){ if(name=='sha'){
if(event.filterCard({name:name},player,event)) list.push(['基本','','sha']); if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','','sha']);
for(var j of lib.inpile_nature){ for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:j},player,event)) list.push(['基本','','sha',j]); if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',j]);
} }
} }
else if(get.type2(name)=='trick'&&event.filterCard({name:name},player,event)) list.push(['锦囊','',name]); else if(get.type2(name)=='trick'&&event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['锦囊','',name]);
else if(get.type(name)=='basic'&&event.filterCard({name:name},player,event)) list.push(['基本','',name]); else if(get.type(name)=='basic'&&event.filterCard(get.autoViewAs({name},'unsure'),player,event)) list.push(['基本','',name]);
} }
return ui.create.dialog('灭吴',[list,'vcard']); return ui.create.dialog('灭吴',[list,'vcard']);
}, },
filter:function(button,player){
return _status.event.getParent().filterCard({name:button.link[2]},player,_status.event.getParent());
},
check:function(button){ check:function(button){
if(_status.event.getParent().type!='phase') return 1; if(_status.event.getParent().type!='phase') return 1;
var player=_status.event.player; var player=_status.event.player;

View File

@ -797,28 +797,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.inpileVCardList(info=>{ return get.inpileVCardList(info=>{
const name=info[2]; const name=info[2];
return get.type(name)=='basic'; return get.type(name)=='basic';
}).some(card=>event.filterCard({name:card[2],nature:card[3]},player,event)); }).some(card=>event.filterCard({name:card[2],nature:card[3],isCard:true},player,event));
}, },
chooseButton:{ chooseButton:{
dialog(event,player){ dialog(event,player){
const list=get.inpileVCardList(info=>{ const list=get.inpileVCardList(info=>{
const name=info[2]; const name=info[2];
return get.type(name)=='basic'; return get.type(name)=='basic';
}).filter(card=>event.filterCard({name:card[2],nature:card[3]},player,event)); }).filter(card=>event.filterCard({name:card[2],nature:card[3],isCard:true},player,event));
return ui.create.dialog('诿解',[list,'vcard']); return ui.create.dialog('诿解',[list,'vcard']);
}, },
filter(button,player){ filter(button,player){
return get.event().getParent().filterCard({name:button.link[2],nature:button.link[3]},player,_status.event.getParent()); return get.event().getParent().filterCard({name:button.link[2],nature:button.link[3],isCard:true},player,_status.event.getParent());
}, },
check(button){ check(button){
if(get.event().getParent().type!='phase') return 1; if(get.event().getParent().type!='phase') return 1;
return get.event('player').getUseValue({name:button.link[2],nature:button.link[3]}); return get.event('player').getUseValue({name:button.link[2],nature:button.link[3],isCard:true});
}, },
backup(links,player){ backup(links,player){
return { return {
viewAs:{ viewAs:{
name:links[0][2], name:links[0][2],
nature:links[0][3], nature:links[0][3],
isCard:true,
}, },
filterCard:()=>false, filterCard:()=>false,
selectCard:-1, selectCard:-1,
@ -2955,7 +2956,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.responded||event.type=='wuxie'||event.olqifan||!lib.skill.olqifan.getNum()) return false; if(event.responded||event.type=='wuxie'||event.olqifan||!lib.skill.olqifan.getNum()) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
if(i!='wuxie'&&event.filterCard({name:i},player,event)) return true; if(i!='wuxie'&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -8455,13 +8456,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
if(event.type=='wuxie') return false; if(event.type=='wuxie') return false;
if(!player.hasSkill('liangyuan_tao',null,null,false)&&event.filterCard({name:'tao'},player,event)&&game.hasPlayer(function(current){ if(!player.hasSkill('liangyuan_tao',null,null,false)&&event.filterCard(get.autoViewAs({name:'tao'},'unsure'),player,event)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu'); var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){ return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='red'; return get.color(i,false)=='red';
}).length>0; }).length>0;
})) return true; })) return true;
if(!player.hasSkill('liangyuan_jiu',null,null,false)&&event.filterCard({name:'jiu'},player,event)&&game.hasPlayer(function(current){ if(!player.hasSkill('liangyuan_jiu',null,null,false)&&event.filterCard(get.autoViewAs({name:'jiu'},'unsure'),player,event)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu'); var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){ return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='black'; return get.color(i,false)=='black';
@ -8887,12 +8888,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!bool) return false; if(!bool) return false;
for(var name of lib.inpile){ for(var name of lib.inpile){
if(get.type(name)!='basic'||list.includes(name)) continue; if(get.type(name)!='basic'||list.includes(name)) continue;
var card={name:name}; var card={name};
if(event.filterCard(card,player,event)) return true; if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) return true;
if(name=='sha'){ if(name=='sha'){
for(var nature of lib.inpile_nature){ for(var nature of lib.inpile_nature){
card.nature=nature; card.nature=nature;
if(event.filterCard(card,player,event)) return true; if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) return true;
} }
} }
} }
@ -8904,12 +8905,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var storage=player.getStorage('yilie_count'); var storage=player.getStorage('yilie_count');
for(var i of lib.inpile){ for(var i of lib.inpile){
if(get.type(i)!='basic'||storage.includes(i)) continue; if(get.type(i)!='basic'||storage.includes(i)) continue;
var card={name:i,isCard:true}; var card={name:i};
if(event.filterCard(card,player,event)) list.push(['基本','',i]); if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) list.push(['基本','',i]);
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
card.nature=j; card.nature=j;
if(event.filterCard(card,player,event)) list.push(['基本','',i,j]); if(event.filterCard(get.autoViewAs(card,'unsure'),player,event)) list.push(['基本','',i,j]);
} }
} }
} }
@ -13058,7 +13059,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.responded||event.jinzhi||player.countMark('jinzhi2')>=player.countCards('he')) return false; if(event.responded||event.jinzhi||player.countMark('jinzhi2')>=player.countCards('he')) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)) return true; if(get.type(i)=='basic'&&event.filterCard({name:i,isCard:true},player,event)) return true;
} }
return false; return false;
}, },
@ -13066,7 +13067,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog:function(event,player){ dialog:function(event,player){
var list=[]; var list=[];
for(var i of lib.inpile){ for(var i of lib.inpile){
if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)){ if(get.type(i)=='basic'&&event.filterCard({name:i,isCard:true},player,event)){
list.push(['基本','',i]); list.push(['基本','',i]);
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature) list.push(['基本','','sha',j]); for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
@ -17961,10 +17962,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(!player.storage.fanghun||player.storage.fanghun<=0) return false; if(!player.storage.fanghun||player.storage.fanghun<=0) return false;
var filter=event.filterCard; var filter=event.filterCard;
if(filter({name:'sha'},player,event)&&player.countCards('hs','shan')) return true; if(filter(get.autoViewAs({name:'sha'},'unsure'),player,event)&&player.countCards('hs','shan')) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hs','sha')) return true; if(filter(get.autoViewAs({name:'shan'},'unsure'),player,event)&&player.countCards('hs','sha')) return true;
if(filter({name:'tao'},player,event)&&player.countCards('hs','jiu')) return true; if(filter(get.autoViewAs({name:'jiu'},'unsure'),player,event)&&player.countCards('hs','jiu')) return true;
if(filter({name:'jiu'},player, event)&&player.countCards('hs','tao')) return true; if(filter(get.autoViewAs({name:'tao'},'unsure'),player, event)&&player.countCards('hs','tao')) return true;
return false; return false;
}, },
onrespond:function(){return this.onuse.apply(this,arguments)}, onrespond:function(){return this.onuse.apply(this,arguments)},
@ -22864,10 +22865,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiangwu3:{ qiangwu3:{
mod:{ mod:{
targetInRange:function(card,player){ targetInRange:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&get.number(card)<player.storage.qiangwu) return true; if (card.name == 'sha') {
const num = get.number(card);
if (num == 'unsure' || num < player.storage.qiangwu) return true;
}
}, },
cardUsable:function(card,player){ cardUsable:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&get.number(card)>player.storage.qiangwu) return Infinity; if (card.name == 'sha') {
const num = get.number(card);
if (num == 'unsure' || num > player.storage.qiangwu) return true;
}
} }
}, },
trigger:{player:'useCard1'}, trigger:{player:'useCard1'},
@ -23889,7 +23896,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.responded||player==_status.currentPhase||event.aocai) return false; if(event.responded||player==_status.currentPhase||event.aocai) return false;
for(var i of lib.inpile){ for(var i of lib.inpile){
if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)) return true; if(get.type(i)=='basic'&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },

View File

@ -874,16 +874,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
if(!event.filterCard({name:'sha'},player,event)&&!event.filterCard({name:'wuxie'},player,event)) return false; if(!event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)&&!event.filterCard(get.autoViewAs({name:'wuxie'},'unsure'),player,event)) return false;
return player.countCards('hs',card=>{ return player.hasCard(card=>{
return !player.getStorage('starlifeng_count').includes(get.color(card,player))||_status.connectMode; return !player.getStorage('starlifeng_count').includes(get.color(card,player));
}); },'hs');
}, },
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
var list=[]; var list=[];
if(event.filterCard({name:'sha'},player,event)) list.push(['基本','','sha']); if(event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)) list.push(['基本','','sha']);
if(event.filterCard({name:'wuxie'},player,event)) list.push(['锦囊','','wuxie']); if(event.filterCard(get.autoViewAs({name:'wuxie'},'unsure'),player,event)) list.push(['锦囊','','wuxie']);
return ui.create.dialog('砺锋',[list,'vcard']); return ui.create.dialog('砺锋',[list,'vcard']);
}, },
check:function(button){ check:function(button){
@ -1566,10 +1566,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
targetInRange:function(card,player){ targetInRange:function(card,player){
if(get.color(card)=='none') return true; const color = get.color(card);
if (color === 'none' || color === 'unsure') return true;
}, },
cardUsable:function(card){ cardUsable:function(card){
if(get.color(card)=='none') return Infinity; const color = get.color(card);
if (color === 'none' || color === 'unsure') return Infinity;
}, },
} }
}, },
@ -6400,10 +6402,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
targetInRange:function(card){ targetInRange:function(card){
if(get.color(card)=='black') return true; const color = get.color(card);
if (color === 'black' || color === 'unsure') return true;
}, },
cardUsable:function(card){ cardUsable:function(card){
if(get.color(card)=='black') return Infinity; const color = get.color(card);
if (color === 'black' || color === 'unsure') return Infinity;
}, },
}, },
}, },

View File

@ -224,7 +224,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.responded) return false; if(event.responded) return false;
if(player.storage.hujiaing) return false; if(player.storage.hujiaing) return false;
if(!player.hasZhuSkill('hujia')) return false; if(!player.hasZhuSkill('hujia')) return false;
if(!event.filterCard({name:'shan'},player,event)) return false; if(!event.filterCard({name:'shan',isCard:true},player,event)) return false;
return game.hasPlayer(current=>current!=player&&current.group=='wei'); return game.hasPlayer(current=>current!=player&&current.group=='wei');
}, },
check(event,player){ check(event,player){

View File

@ -6258,7 +6258,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
cardUsable:function(card,player){ cardUsable:function(card,player){
if(card.name=='sha'&&player.getStorage('twgongji2').includes(get.suit(card))) return Infinity; if(card.name=='sha'){
const suit = get.suit(card);
return suit === 'unsure' || player.getStorage('twgongji2').includes(suit);
}
}, },
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(get.name(card)=='sha'&&!player.getStorage('twgongji2').includes(get.suit(card))) return num+1; if(get.name(card)=='sha'&&!player.getStorage('twgongji2').includes(get.suit(card))) return num+1;
@ -9548,8 +9551,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
const names=[]; const names=[];
if(event.filterCard({name:'sha'},player,event)) names.push('shan'); if(event.filterCard(get.autoViewAs({name:'sha'},'unsure'),player,event)) names.push('shan');
if(event.filterCard({name:'shan'},player,event)) names.push('sha'); if(event.filterCard(get.autoViewAs({name:'shan'},'unsure'),player,event)) names.push('sha');
return names.length>0&&player.hasCard(function(card){ return names.length>0&&player.hasCard(function(card){
return names.includes(get.name(card)); return names.includes(get.name(card));
},'hs'); },'hs');
@ -11293,10 +11296,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of lib.inpile){ for(var i of lib.inpile){
if(i=='wuxie') continue; if(i=='wuxie') continue;
var type=get.type(i); var type=get.type(i);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; if((type=='basic'||type=='trick')&&event.filterCard({name:i,isCard:true},player,event)) return true;
if(i=='sha'){ if(i=='sha'){
for(var j of lib.inpile_nature){ for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true; if(event.filterCard({name:i,nature:j,isCard:true},player,event)) return true;
} }
} }
} }

View File

@ -281,11 +281,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for (let target of targets) { for (let target of targets) {
if (target.isIn() && player.inRange(target)) { if (target.isIn() && player.inRange(target)) {
const result = await target.chooseToRespond(prompt, (card,player)=>{ const result = await target.chooseToRespond(prompt, (card,player)=>{
return get.type(card) == 'basic' && get.color(card) != 'black'; if (get.type(card) !== 'basic') return false;
}).set('filterOk', ()=>{ const color = get.color(card);
const card = get.card(); return (color == 'red' || color == 'unsure');
if (card && get.color(card)!='red') return false;
return true;
}).set('ai',card => { }).set('ai',card => {
const player = get.player(), event = get.event(); const player = get.player(), event = get.event();
const source = event.getParent().player; const source = event.getParent().player;
@ -3917,7 +3915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return false; })) return false;
var storage=player.getStorage('dczhaowen_viewed'); var storage=player.getStorage('dczhaowen_viewed');
for(var i of lib.inpile){ for(var i of lib.inpile){
if(!storage.includes(i)&&get.type(i)=='trick'&&event.filterCard({name:i},player,event)) return true; if(!storage.includes(i)&&get.type(i)=='trick'&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)) return true;
} }
return false; return false;
}, },
@ -3929,7 +3927,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var storage=player.getStorage('dczhaowen_viewed'); var storage=player.getStorage('dczhaowen_viewed');
var list=[]; var list=[];
for(var i of lib.inpile){ for(var i of lib.inpile){
if(!storage.includes(i)&&get.type(i)=='trick'&&event.filterCard({name:i},player,event)){ if(!storage.includes(i)&&get.type(i)=='trick'&&event.filterCard(get.autoViewAs({name:i},'unsure'),player,event)){
list.push(['锦囊','',i]); list.push(['锦囊','',i]);
} }
} }
@ -6964,7 +6962,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!storage.length) return false; if(!storage.length) return false;
var storage2=player.getStorage('dcfengying_used') var storage2=player.getStorage('dcfengying_used')
return storage.some(name=>{ return storage.some(name=>{
return !storage2.includes(name)&&event.filterCard({name:name},player,event); return !storage2.includes(name)&&event.filterCard(get.autoViewAs({name},'unsure'),player,event);
}); });
}, },
hiddenCard:function(player,name){ hiddenCard:function(player,name){
@ -6984,7 +6982,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(button,player){ filter:function(button,player){
var card={name:button.link[2],storage:{dcfengying:true}}; var card={name:button.link[2],storage:{dcfengying:true}};
if(player.getStorage('dcfengying_used').includes(card.name)) return false; if(player.getStorage('dcfengying_used').includes(card.name)) return false;
return _status.event.getParent().filterCard(card,player,_status.event.getParent()); return _status.event.getParent().filterCard(get.autoViewAs(card,'unsure'),player,_status.event.getParent());
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
@ -12704,13 +12702,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(button,player){ filter:function(button,player){
var evt=_status.event.getParent(); var evt=_status.event.getParent();
if(evt&&typeof evt.filterCard=='function') return evt.filterCard({name:button.link[2]},player,evt); if(evt&&typeof evt.filterCard=='function') return evt.filterCard({name:button.link[2]},player,evt);
return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent()); return lib.filter.filterCard({name:button.link[2],isCard:true},player,_status.event.getParent());
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
if(player.countCards('h',button.link[2])) return 0; if(player.countCards('h',button.link[2])) return 0;
if(_status.event.getParent().type!='phase'&&!_status.event.getParent().lvli6) return 1; if(_status.event.getParent().type!='phase'&&!_status.event.getParent().lvli6) return 1;
return player.getUseValue({name:button.link[2]}); return player.getUseValue({name:button.link[2],isCard:true});
}, },
backup:function(links,player){ backup:function(links,player){
return { return {

View File

@ -1505,8 +1505,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
unlimit:{ unlimit:{
mod:{ mod:{
cardUsable:function(card,player){ cardUsable:function(card,player){
var list=lib.skill.lkbushi.getBushi(player); const list = lib.skill.lkbushi.getBushi(player), suit = get.suit(card);
if(list[0]==get.suit(card)) return Infinity; if (suit === 'unsure' || list[0] === suit) return Infinity;
}, },
}, },
trigger:{player:'useCard1'}, trigger:{player:'useCard1'},
@ -2673,7 +2673,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'taoluan', audio:'taoluan',
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
return !player.hasSkill('xintaoluan3')&&player.countCards('hes',card=>lib.inpile.some(name=>{ return !player.hasSkill('xintaoluan3')&&player.hasCard(card=>lib.inpile.some(name=>{
if(player.getStorage('xintaoluan').includes(name)) return false; if(player.getStorage('xintaoluan').includes(name)) return false;
if(get.type(name)!='basic'&&get.type(name)!='trick') return false; if(get.type(name)!='basic'&&get.type(name)!='trick') return false;
if(event.filterCard({name:name,isCard:true,cards:[card]},player,event)) return true; if(event.filterCard({name:name,isCard:true,cards:[card]},player,event)) return true;
@ -2683,7 +2683,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
} }
return false; return false;
}))>0&&!_status.dying.length; },'hes'))>0&&!_status.dying.length;
}, },
chooseButton:{ chooseButton:{
dialog:function(event,player){ dialog:function(event,player){
@ -5255,7 +5255,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
return !player.hasSkill('taoluan3')&&player.countCards('hes',card=>lib.inpile.some(name=>{ return !player.hasSkill('taoluan3')&&player.hasCard(card=>lib.inpile.some(name=>{
if(player.getStorage('taoluan').includes(name)) return false; if(player.getStorage('taoluan').includes(name)) return false;
if(get.type(name)!='basic'&&get.type(name)!='trick') return false; if(get.type(name)!='basic'&&get.type(name)!='trick') return false;
if(event.filterCard({name:name,isCard:true,cards:[card]},player,event)) return true; if(event.filterCard({name:name,isCard:true,cards:[card]},player,event)) return true;
@ -5265,7 +5265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
} }
return false; return false;
}))>0; },'hes'))>0;
}, },
onremove:true, onremove:true,
chooseButton:{ chooseButton:{

View File

@ -6141,7 +6141,7 @@ export class Game extends Uninstantable {
if (enable) { if (enable) {
if (!game.expandSkills(player.getSkills(false).concat(lib.skill.global)).includes(skills2[i]) && (info.noHidden || get.mode() != 'guozhan' || player.hasSkillTag('nomingzhi', false, null, true))) enable = false; if (!game.expandSkills(player.getSkills(false).concat(lib.skill.global)).includes(skills2[i]) && (info.noHidden || get.mode() != 'guozhan' || player.hasSkillTag('nomingzhi', false, null, true))) enable = false;
if (info.filter && !info.filter(event, player)) enable = false; if (info.filter && !info.filter(event, player)) enable = false;
if (info.viewAs && typeof info.viewAs != 'function' && event.filterCard && !event.filterCard(info.viewAs, player, event)) enable = false; if (info.viewAs && typeof info.viewAs != 'function' && event.filterCard && !event.filterCard(get.autoViewAs(info.viewAs, 'unsure'), player, event)) enable = false;
if (info.viewAs && typeof info.viewAs != 'function' && info.viewAsFilter && info.viewAsFilter(player) == false) enable = false; if (info.viewAs && typeof info.viewAs != 'function' && info.viewAsFilter && info.viewAsFilter(player) == false) enable = false;
if (info.usable && get.skillCount(skills2[i]) >= info.usable) enable = false; if (info.usable && get.skillCount(skills2[i]) >= info.usable) enable = false;
if (info.chooseButton && _status.event.noButton) enable = false; if (info.chooseButton && _status.event.noButton) enable = false;

View File

@ -1791,7 +1791,7 @@ export class Get extends Uninstantable {
return game.checkMod(card, owner, game.checkMod(card, card.suit, 'suit', owner), 'cardsuit', owner); return game.checkMod(card, owner, game.checkMod(card, card.suit, 'suit', owner), 'cardsuit', owner);
} }
} }
if (lib.suits.includes(card.suit)) return card.suit; if (card.suit === 'unsure' || lib.suits.includes(card.suit)) return card.suit;
return 'none'; return 'none';
} }
} }
@ -1810,7 +1810,7 @@ export class Get extends Uninstantable {
} }
return color; return color;
} }
else if (Object.keys(lib.color).includes(card.color)) { else if (card.color === 'unsure' || Object.keys(lib.color).includes(card.color)) {
return card.color; return card.color;
} }
else if (Array.isArray(card.cards) && !lib.suit.includes(card.suit)) { else if (Array.isArray(card.cards) && !lib.suit.includes(card.suit)) {
@ -1835,7 +1835,8 @@ export class Get extends Uninstantable {
var number = null; var number = null;
if ('number' in card) { if ('number' in card) {
number = card.number; number = card.number;
if (typeof number != 'number') number = null; if (number === 'unsure') return number;
else if (typeof number != 'number') number = null;
} }
else { else {
if (card.cards && card.cards.length == 1) number = get.number(card.cards[0], false); if (card.cards && card.cards.length == 1) number = get.number(card.cards[0], false);

View File

@ -97,7 +97,7 @@ export const Content = {
event.addSkill.removeArray(duplicatedSkills); event.addSkill.removeArray(duplicatedSkills);
event.removeSkill.removeArray(duplicatedSkills); event.removeSkill.removeArray(duplicatedSkills);
} }
if (!event.addSkill.length&&!event.removeSkill.length) return; //if (!event.addSkill.length&&!event.removeSkill.length) return;
//手动触发时机 //手动触发时机
await event.trigger('changeSkillsBefore'); await event.trigger('changeSkillsBefore');
await event.trigger('changeSkillsBegin'); await event.trigger('changeSkillsBegin');

View File

@ -310,7 +310,7 @@ export const Contents = {
event.addSkill.removeArray(duplicatedSkills); event.addSkill.removeArray(duplicatedSkills);
event.removeSkill.removeArray(duplicatedSkills); event.removeSkill.removeArray(duplicatedSkills);
} }
if (!event.addSkill.length&&!event.removeSkill.length) return; //if (!event.addSkill.length&&!event.removeSkill.length) return;
//手动触发时机 //手动触发时机
await event.trigger('changeSkillsBefore'); await event.trigger('changeSkillsBefore');
}, },

View File

@ -7465,6 +7465,22 @@ export class Player extends HTMLDivElement {
_status.event.clearStepCache(); _status.event.clearStepCache();
return this; return this;
} }
$removeAdditionalSkills(skill, target){
const additionalSkills = this.additionalSkills[skill];
if (Array.isArray(additionalSkills)) {
if (typeof target === 'string') {
if (additionalSkills.includes(target)) {
additionalSkills.remove(target);
if (!additionalSkills.length) {
delete this.additionalSkills[skill];
}
}
}
else {
delete this.additionalSkills[skill];
}
}
}
getRemovableAdditionalSkills(skill, target){ getRemovableAdditionalSkills(skill, target){
const player = this, removableSkills = []; const player = this, removableSkills = [];
if (this.additionalSkills[skill]) { if (this.additionalSkills[skill]) {
@ -7493,22 +7509,22 @@ export class Player extends HTMLDivElement {
const player = this, skills = this.getRemovableAdditionalSkills(skill, target); const player = this, skills = this.getRemovableAdditionalSkills(skill, target);
if(skills.length){ if(skills.length){
player.removeSkill(skills); player.removeSkill(skills);
if (player.additionalSkills[skill]&&!player.additionalSkills[skill].length) delete player.additionalSkills[skill];
} }
player.$removeAdditionalSkills(skill, target);
_status.event.clearStepCache(); _status.event.clearStepCache();
return this; return this;
} }
removeAdditionalSkills(skill, target) { removeAdditionalSkills(skill, target) {
const player = this, skills = this.getRemovableAdditionalSkills(skill, target); const player = this, skills = this.getRemovableAdditionalSkills(skill, target);
if(skills.length){
return player.changeSkills([], skills).set('$handle', function(player, addSkills, removeSkills){ return player.changeSkills([], skills).set('$handle', function(player, addSkills, removeSkills){
if(removeSkills.length>0){
game.log(player, '失去了技能', ...removeSkills.map(i => { game.log(player, '失去了技能', ...removeSkills.map(i => {
return '#g【' + get.translation(i) + '】'; return '#g【' + get.translation(i) + '】';
})); }));
player.removeSkill(skills); player.removeSkill(removeSkills);
if (player.additionalSkills[skill]&&!player.additionalSkills[skill].length) delete player.additionalSkills[skill];
});
} }
player.$removeAdditionalSkills(skill, target);
});
} }
awakenSkill(skill, nounmark) { awakenSkill(skill, nounmark) {
if (!nounmark) this.unmarkSkill(skill); if (!nounmark) this.unmarkSkill(skill);

View File

@ -79,6 +79,11 @@ export class VCard {
if (!this.nature) this.nature = get.nature(this); if (!this.nature) this.nature = get.nature(this);
} }
} }
else if(numberOrCards === 'unsure' && !this.isCard) {
if(!this.suit) this.suit = 'unsure';
if(!this.color) this.color = 'unsure';
if(!this.number) this.number = 'unsure';
}
const info = get.info(this, false); const info = get.info(this, false);
if (info) { if (info) {
const autoViewAs = info.autoViewAs; const autoViewAs = info.autoViewAs;