removed most getEquip

This commit is contained in:
Spmario233 2023-08-15 01:33:36 +08:00
parent 2bf3b11d8e
commit 4006d7d324
21 changed files with 282 additions and 195 deletions

View File

@ -399,7 +399,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
value:function(card,player,index,method){
if(player.isDisabled(2)) return 0.01;
if(card==player.getEquip(2)){
if(player.getEquips('tengjia').contains(card)){
if(player.hasSkillTag('noDirectDamage')) return 10;
if(game.hasPlayer(function(current){
return current!=player&&get.attitude(current,player)<0&&current.hasSkillTag('fireAttack',null,null,true);
@ -788,7 +788,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
//if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget';
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
if(card.name=='sha'){
var equip1=player.getEquip(1);
var equip1=player.getEquip('zhuque');
if(equip1&&equip1.name=='zhuque') return 1.9;
if(!card.nature) return 'zerotarget';
}

View File

@ -47,7 +47,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
enable:true,
filterTarget:function(card,player,target){
if(target==player) return false;
if(target.getEquip(5)){
if(target.getEquips(5).length){
return target.countCards('e')>1;
}
else{
@ -467,11 +467,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageBegin4'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&player.getEquip('lanyinjia');
return event.card&&event.card.name=='sha'&&player.getEquips('lanyinjia').length>0;
},
content:function(){
var card=player.getEquip('lanyinjia');
if(card){
var card=player.getEquips('lanyinjia');
if(card.length){
player.discard(card);
}
},

View File

@ -809,7 +809,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(event.card.name!='sha') return false;
var cards=player.getEquip('wufengjian');
var cards=player.getEquips('wufengjian');
return player.hasCard(function(card){
return !cards.contains(card);
},'he');

View File

@ -718,7 +718,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1);
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1)&&!player.getEquips('ruyijingubang').length;
},
content:function(){
var card=game.createCard2('ruyijingubang','heart',9);
@ -804,10 +804,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
var num=lib.skill.ruyijingubang_skill_backup.num;
player.storage.ruyijingubang_skill=num;
var card=player.getEquip(1);
if(card&&card.name=='ruyijingubang'){
card.storage.ruyijingubang_skill=num;
game.log(player,'将',card,'的攻击范围改为'+num)
var card=player.getEquips(1);
for(var card of cards){
if(card&&card.name=='ruyijingubang'){
card.storage.ruyijingubang_skill=num;
game.log(player,'将',card,'的攻击范围改为'+num)
}
}
player.markSkill('ruyijingubang_skill');
},

View File

@ -3405,7 +3405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
direct:true,
filter:function(event,player){
return event.source&&event.source.isIn()&&event.source.getEquip(1);
return event.source&&event.source.isIn()&&event.source.getEquips(1).length>0;
},
content:function(){
'step 0'

View File

@ -5026,11 +5026,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(button){
var player=_status.event.player;
if(typeof button.link=='number'){
var card=player.getEquip(button.link);
if(card){
var val=get.value(card);
if(val>0) return 0;
return 5-val;
if(!player.hasEmptySlot(button.link)){
var card=player.getEquip(button.link);
if(card){
var val=get.value(card);
if(val>0) return 0;
return 5-val;
}
}
switch(button.link){
case 3:return 4.5;break;

View File

@ -1323,13 +1323,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(event.responded||event.shouli||event.type=='wuxie') return false;
if(game.hasPlayer(function(current){
return current.getEquip(4);
return current.getCards('e',card=>get.subtype(card)=='equip4').length>0;
})&&event.filterCard({
name:'sha',
storage:{shouli:true},
},player,event)) return true;
if(game.hasPlayer(function(current){
return current.getEquip(3);
return current.getCards('e',card=>get.subtype(card)=='equip3').length>0;
})&&event.filterCard({
name:'shan',
storage:{shouli:true},
@ -1341,23 +1341,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterTarget:function(card,player,target){
var event=_status.event,evt=event;
if(event._backup) evt=event._backup;
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
if(equip3&&evt.filterCard(get.autoViewAs({
var equip3=target.getCards('e',card=>get.subtype(card,false)=='equip3');
var equip4=target.getCards('e',card=>get.subtype(card,false)=='equip4');
if(equip3.length&&equip3.some(card=>evt.filterCard(get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]),player,event)) return true;
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(equip4&&evt.filterCard(sha,player,event)){
if(!evt.filterTarget) return true;
return game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})
};
return false;
},[card]),player,event))) return true;
return equip4.some(card=>{
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[card]);
if(evt.filterCard(sha,player,event)){
if(!evt.filterTarget) return true;
return game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})
};
})
},
prompt:'将场上的一张坐骑牌当做【杀】或【闪】使用或打出',
content:function(){
@ -1365,32 +1366,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=event.getParent(2);
evt.set('shouli',true);
var list=[];
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
var equip3=target.getCards('e',card=>get.subtype(card,false)=='equip3');
var equip4=target.getCards('e',card=>get.subtype(card,false)=='equip4');
var backupx=_status.event;
_status.event=evt;
try{
if(equip3){
if(equip3.length&&equip3.some(card=>{
var shan=get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]);
if(evt.filterCard(shan,player,event)) list.push('shan');
},[card]);
if(evt.filterCard(shan,player,event)) return true;
return false;
})){
list.push('shan');
}
if(equip4){
if(equip4.length&&equip4.some(card=>{
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
},[card]);
if(evt.filterCard(sha,player,evt)&&(!evt.filterTarget||game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
}))) list.push('sha');
}))) return true;
return false;
})){
list.push('sha');
};
}catch(e){game.print(e)};
_status.event=backupx;
if(list.length==1) event._result={
bool:true,
links:[list[0]=='shan'?equip3:equip4],
if(list.length==1){
event.cardName=list[0];
var cards=list[0]=='shan'?equip3:equip4;
if(cards.length==1) event._result={
bool:true,
links:[cards[0]],
}
else player.choosePlayerCard(true,target,'e').set('filterButton',function(button){
return _status.event.cards.contains(button.link);
}).set('cards',cards)
}
else player.choosePlayerCard(true,target,'e').set('filterButton',function(button){
var type=get.subtype(button.link);
@ -1399,7 +1413,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
var evt=event.getParent(2);
if(result.bool&&result.links&&result.links.length){
var name=get.subtype(result.links[0])=='equip3'?'shan':'sha';
var name=(event.cardName||(get.subtype(result.links[0])=='equip4'?'sha':'shan'));
if(evt.name=='chooseToUse'){
game.broadcastAll(function(result,name){
lib.skill.shouli_backup.viewAs={
@ -1443,7 +1457,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skillTagFilter:function(player,tag){
var subtype=(tag=='respondSha'?'equip4':'equip3');
return game.hasPlayer(function(current){
return current.getEquip(subtype);
return current.hasCard(card=>get.subtype(card,false)==subtype,'e');
});
},
order:2,
@ -3392,7 +3406,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i]!=player&&players[i].getEquip('qinggang')){
if(players[i]!=player&&players[i].getEquips('qinggang').length>0){
return true;
}
}
@ -3401,10 +3415,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i]!=player){
var e=players[i].getEquip('qinggang');
if(e){
var e=players[i].getEquips('qinggang');
if(e.length>0){
player.line(players[i],'green');
players[i].give(e,player);
player.gain(e,players[i],'give','bySelf');
}
}
}

View File

@ -6485,7 +6485,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){
if(player.hasEnabledSlot(i)){
var card=player.getEquip(i);
if(!card) return true;
if(!card||player.hasEmptySlot(i)) return true;
if(get.value(card,player)<=0) return true;
}
}
@ -6499,7 +6499,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){
if(player.hasEnabledSlot(i)){
var card=player.getEquip(i);
if(!card) return 'equip'+i;
if(!card||player.hasEmptySlot(i)) return 'equip'+i;
if(get.value(card,player)<=0) return 'equip'+i;
}
}

View File

@ -6504,17 +6504,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var source=event.source;
if(!source) return false;
var card=source.getEquip(1);
return card&&get.itemtype(card)=='card'&&lib.filter.canBeGained(card,player,source);
var cards=source.getEquips(1);
return cards.length&&cards.some(card=>lib.filter.canBeGained(card,player,source));
},
prompt2:function(event){
return '获得其装备区中的'+get.translation(event.source.getEquip(1));
var source=event.source;
var cards=source.getEquips(1).filter(card=>lib.filter.canBeGained(card,player,source));
return '获得其装备区中的'+get.translation(cards);
},
check:function(event,player){
return (get.attitude(player,event.source)+0.1)*get.value(event.source.getEquip(1),event.source);
},
content:function(){
player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf');
var source=trigger.source;
var cards=source.getEquips(1).filter(card=>lib.filter.canBeGained(card,player,source));
player.gain(cards,source,'give','bySelf');
},
},
xinanjian:{
@ -9466,14 +9470,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mod:{
cardUsable:function(card,player,num){
var cardx=player.getEquip('rewrite_zhuge');
if(card.name=='sha'&&(!cardx||player.hasSkill('rw_zhuge_skill',null,false)||(!_status.rw_zhuge_temp&&!ui.selected.cards.contains(cardx)))){
return Infinity;
var cards=player.getEquips('rewrite_zhuge')
if(card.name=='sha'){
if(!cards.length||player.hasSkill('rw_zhuge_skill',null,false)||cards.some(card=>(card!=_status.rw_zhuge_temp&&!ui.selected.cards.contains(card)))){
if(get.is.versus()||get.is.changban()){
return num+3;
}
return Infinity;
}
}
},
cardEnabled2:function(card,player){
if(!_status.event.addCount_extra||player.hasSkill('rw_zhuge_skill',null,false)) return;
if(card&&card==player.getEquip('rewrite_zhuge')){
var cards=player.getEquips('rewrite_zhuge');
if(card&&cards.contains(card)){
try{
var cardz=get.card();
}
@ -9481,7 +9491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return;
}
if(!cardz||cardz.name!='sha') return;
_status.rw_zhuge_temp=true;
_status.rw_zhuge_temp=card;
var bool=lib.filter.cardUsable(get.autoViewAs({name:'sha'},ui.selected.cards.concat([card])),player);
delete _status.rw_zhuge_temp;
if(!bool) return false;
@ -11222,22 +11232,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseTarget(2,function(card,player,target){
if(ui.selected.targets.length){
if(!_status.event.ingame){
var cards=ui.selected.targets[0].getEquip(2);
return target.canEquip(card)
var cards=ui.selected.targets[0].getEquips(2);
return cards.some(card=>target.canEquip(card))
}
var from=ui.selected.targets[0];
if(target.isMin()) return false;
var es=from.getCards('e');
for(var i=0;i<es.length;i++){
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(target.canEquip(es[i])) return true;
}
return false;
}
else{
if(!event.ingame){
if(target.getEquip(2)) return true;
if(target.getEquips(2).length) return true;
return false;
}
return target.countCards('e')>0;
@ -11253,9 +11261,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.attitude(player,current)>0){
var es=target.getCards('e');
for(var i=0;i<es.length;i++){
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(current.canEquip(es[i])) return true;
if(current.canEquip(es[i])) return true;
}
return false;
}
@ -11267,8 +11273,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var es=ui.selected.targets[0].getCards('e');
var i;
for(i=0;i<es.length;i++){
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(target.canEquip(es[i])) break;
}
if(i==es.length) return 0;
@ -11289,21 +11293,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 3'
if(targets.length==2){
if(!event.ingame){
event._result={
var cards=targets[0].getEquips(2);
if(cards.length==1) event._result={
bool:true,
links:[targets[0].getEquip(2)],
};
links:cards,
}
else{
player.choosePlayerCard('e',true,function(button){
return get.equipValue(button.link);
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
if(!get.subtypes(button.link,false).contains('equip2')) return false;
var targets1=_status.event.targets1;
return targets1.canEquip(button.link);
});
}
}
else{
player.choosePlayerCard('e',true,function(button){
return get.equipValue(button.link);
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1;
if(['equip3','equip4'].contains(get.subtype(button.link))&&targets1.getEquip('liulongcanjia')) return false;
if(button.link.name=='liulongcanjia'&&targets1.countCards('e',{subtype:['equip3','equip4']})>1) return false;
return !targets1.countCards('e',{subtype:get.subtype(button.link)});
});
player.choosePlayerCard('e',true,function(button){
return get.equipValue(button.link);
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1;
return targets1.canEquip(button.link);
});
}
}
else event.finish();
@ -12405,7 +12416,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return !player.getEquip('ly_piliche');
return !player.getEquips('ly_piliche').length;
},
content:function(){
'step 0'
@ -12419,7 +12430,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
if(card) player.chooseUseTarget(card,true,'nopopup');
'step 3'
if(event.count>0&&!player.getEquip('ly_piliche')) event.goto(1);
if(event.count>0&&!player.getEquips('ly_piliche').length) event.goto(1);
},
},
},

View File

@ -381,30 +381,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
relinglong:{
audio:2,
trigger:{
player:'loseAfter',
player:['loseAfter','disableEquipAfter','enableEquipAfter'],
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','phaseBefore'],
},
forced:true,
onremove:true,
derivation:'reqicai',
filter:function(event,player){
if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){
if(event.name=='disableEquip'||event.name=='enableEquip'){
if(!event.slots.contains('equip5')) return false;
}
else if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){
var evt=event.getl(player);
if(!evt||!evt.es||!evt.es.some(i=>get.subtype(i)=='equip5')) return false;
if(!evt||!evt.es||!evt.es.some(i=>get.subtypes(i).contains('equip5'))) return false;
}
var skills=player.additionalSkills['relinglong'];
return skills&&skills.length&&player.getEquip(5)||!(skills&&skills.length)&&!player.getEquip(5);
return (skills&&skills.length>0)!=player.hasEmptySlot(5);
},
content:function(){
player.removeAdditionalSkill('relinglong');
if(!player.getEquip(5)){
if(player.hasEmptySlot(5)){
player.addAdditionalSkill('relinglong',['reqicai']);
}
},
group:['linglong_bagua','relinglong_directhit'],
mod:{
maxHandcard:function(player,num){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return;
if(!player.hasEmptySlot(3)||!player.hasEmptySlot(4)) return;
return num+2;
},
},
@ -415,8 +418,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(event.card.name!='sha'&&get.type(event.card,false)!='trick') return false;
for(var i=2;i<=6;i++){
if(player.getEquip(i)) return false;
for(var i=2;i<6;i++){
if(!player.hasEmptySlot(i)) return false;
}
return true;
},
@ -428,8 +431,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(!arg||!arg.card||!arg.target||(arg.card.name!='sha'&&get.type(arg.card,false)!='trick')) return false;
for(var i=2;i<=6;i++){
if(player.getEquip(i)) return false;
for(var i=2;i<6;i++){
if(!player.hasEmptySlot(i)) return false;
}
return true;
},
@ -969,7 +972,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&event.notLink()&&[2,3,4,6].some(i=>event.player.getEquip(i));
return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&
event.notLink()&&[2,3,4].some(i=>event.player.getEquips(i).length>0);
},
group:'remoshi_retrieve',
content:function(){
@ -983,23 +987,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
var keys=['equip2','equip3','equip4'];
return game.hasPlayer(current=>{
if(event.name=='gain'&&current==player) return false;
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=event.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtypes(i).some(slot=>keys.contains(slot)))) return true;
});
},
direct:true,
forced:true,
content:function(){
'step 0'
var keys=['equip2','equip3','equip4'];
var targets=game.filterPlayer(current=>{
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=trigger.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtypes(i).some(slot=>keys.contains(slot)))) return true;
});
event.targets=targets;
'step 1'
@ -7915,7 +7921,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
regongji:{
mod:{
attackRangeBase:function(player){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return Infinity;
if(player.getEquips(3).length>0||player.getEquips(4).length>0) return Infinity;
},
},
enable:'phaseUse',
@ -14660,7 +14666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rejiqiao:'机巧',
rejiqiao_info:'出牌阶段开始时你可以弃置任意张牌然后亮出牌堆顶X张牌X为你以此法弃置的牌数与其中装备牌数之和你获得其中所有非装备牌。',
relinglong:'玲珑',
relinglong_info:'锁定技。若你的装备区:没有防具牌,视为你装备【八卦阵】;没有坐骑牌,你的手牌上限+2没有宝物牌,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。',
relinglong_info:'锁定技。若你的装备区:有空置的防具栏,你视为拥有〖八卦阵〗;有空置的两种坐骑栏,你的手牌上限+2有空置的宝物栏,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。',
ol_zhangzhang:'界张昭张纮',
olzhijian:'直谏',
olzhijian_info:'出牌阶段,你可以将一张装备牌置于其他角色的装备区(可替换原装备),然后摸一张牌。',

View File

@ -2016,7 +2016,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card.name=='sha') return Infinity;
},
targetInRange:function(card,player,target){
if(card.name=='sha'&&player.getEquip(1)) return true;
if(card.name=='sha'&&player.getEquips(1).length>0) return true;
},
},
trigger:{player:'useCard'},
@ -4088,9 +4088,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbliegong:{
audio:2,
mod:{
cardnature:function(card,player){
if(!player.getEquip(1)&&get.name(card,player)=='sha') return false;
},
cardnature:function(card,player){
if(player.hasEmptySlot(1)&&get.name(card,player)=='sha') return false;
},
},
trigger:{player:'useCardToPlayered'},
filter:function(event,player){

View File

@ -1203,7 +1203,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
return event.card&&event.card.name=='sha'&&
event.source&&event.source.isIn()&&player!=event.source
&&event.cards.filterInD().length>0&&player.getEquip(1);
&&event.cards.filterInD().length>0&&player.getEquips(1).length>0;
},
check:function(event,player){
var card={
@ -1222,7 +1222,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return hs.contains(i);
}).length==cards.length&&player.canUse({name:'sha',cards:cards},target,false)){
var next=player.useCard({name:'sha'},cards,target,false);
if(!target.getEquip(1)) next.baseDamage=2;
if(!target.getEquips(1).length) next.baseDamage=2;
}
},
},
@ -1241,11 +1241,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card) player.gain(card,'gain2');
else{
var targets=game.filterPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length>0;
});
if(targets.length){
var target=targets.randomGet();
player.gain(target.getEquip(1),target,'give','bySelf');
player.gain(target.getEquips(1),target,'give','bySelf');
}
}
},
@ -5170,7 +5170,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chooseControl:function(event,player){
var list=[];
for(var i=1;i<6;i++){
if(player.getEquip(i)) list.push('equip'+i);
if(player.getEquips(i).length>0) list.push('equip'+i);
}
list.push('cancel2');
return list;

View File

@ -7594,7 +7594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
getNum:function(player,target){
var num=0;
if(target.isHealthy()) num++;
if(target.getEquip(2)) num++;
if(target.getEquips(2).length) num++;
var countSkill=function(player){
return player.getSkills(null,false,false).filter(function(skill){
var info=get.info(skill);
@ -7991,11 +7991,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var name='zhuangshu_'+get.type2(result.cards[0],result.cards[0].original=='h'?player:false);
if(lib.card[name]&&trigger.player.isIn&&trigger.player.hasEmptySlot(5)){
var target=game.findPlayer(function(current){
var equip=current.getEquip(5);
var equip=current.getEquip(name);
return equip&&equip.name==name;
});
if(target){
var card=target.getEquip(5);
var card=target.getEquip(name);
target.$give(card,trigger.player,false);
}
else{
@ -8045,8 +8045,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.type!='discard'||event.getlx===false) return false;
return game.hasPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
var cards=current.getEquips(5);
if(!cards.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
}
var evt=event.getl(current);
if(!evt||!evt.cards2) return false;
@ -8061,8 +8061,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=[];
game.countPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
var cards=current.getEquips(5);
if(!cards.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
}
var evt=trigger.getl(current);
for(var i of evt.cards2){
@ -10705,17 +10705,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',targets[1]).set('addCount',false);
'step 2'
var card=targets[0].getEquip(1);
if(!result.bool&&card){
event.card=card;
player.chooseTarget(true,'将'+get.translation(card)+'交给一名其他角色').set('ai',function(target){
var card=_status.event.getParent().card;
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(card));
var cards=targets[0].getEquips(1);
if(!result.bool&&cards.length){
event.cards=cards;
player.chooseTarget(true,'将'+get.translation(cards)+'交给一名其他角色').set('ai',function(target){
var card=_status.event.getParent().cards;
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(cards[0]));
});
}
else event.finish();
'step 3'
result.targets[0].gain(card,result.targets[0],'give').giver=player;
result.targets[0].gain(cards,result.targets[0],'give').giver=player;
},
ai:{
order:4,
@ -12023,7 +12023,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){
'step 0'
player.chooseTarget(get.prompt('new_mumu'),'弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌',function(card,player,target){
if(target==player) return target.getEquip(2)!=undefined;
if(target==player) return target.getEquips(2).length>0;
return target.countCards('e')>0;
}).set('ai',function(target){
var player=_status.event.player;
@ -12038,12 +12038,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.target=result.targets[0];
player.logSkill('new_mumu',event.target);
player.line(event.target,'green');
var e=event.target.getEquip(2);
var e=event.target.getEquips(2);
event.e=e;
if(target==player) event.choice='获得一张防具牌';
else if(e){
else if(e.length>0){
player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){
if(_status.event.player.getEquip(2)){
if(_status.event.player.getEquips(2).length>0){
return '弃置一张装备牌';
}
return '获得一张防具牌';
@ -12052,7 +12052,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
event.choice='弃置一张装备牌';
}
}else event.finish();
}
else event.finish();
'step 2'
var choice=event.choice||result.control;
if(choice=='弃置一张装备牌'){
@ -12826,8 +12827,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.gain(card,'gain2');
}
'step 2'
var equip1=target.getEquip(1);
if(equip1){
var equip1=target.getEquips(1);
if(equip1.length){
game.delay();
target.give(equip1,player);
target.line(player);
@ -12864,8 +12865,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.list=result.targets.slice(0);
}
'step 2'
var equip1=player.getEquip(1);
if(equip1){
var equip1=player.getEquips(1);
if(equip1.length){
for(var i=0;i<event.list.length;i++){
if(event.list[i].isDead()) event.list.splice(i--,1);
}
@ -16275,20 +16276,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'linglong_bagua',
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'&&!player.getEquip(1)) return num+1;
if(card.name=='sha'&&player.hasEmptySlot(1)) return num+1;
},
maxHandcard:function(player,num){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return;
if(!player.hasEmptySlot(3)||!player.hasEmptySlot(4)) return;
return num+1;
},
targetInRange:function(card,player,target,now){
if(player.getEquip(5)) return;
if(!player.hasEmptySlot(5)) return;
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
},
canBeDiscarded:function (card,source,player){
if(player.getEquip(5)) return;
if(get.position(card)=='e'&&['equip2','equip5'].contains(get.subtype(card))) return false;
if(!player.hasEmptySlot(5)) return;
if(get.position(card)=='e'&&get.subtypes(card).some(slot=>slot=='equip2'||slot=='equip5')) return false;
},
/*cardDiscardable:function (card,player){
if(player.getEquip(5)) return;
@ -16863,15 +16864,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
if(target==player) return false;
return target.getEquip(1)||target.getEquip(2);
return target.getEquips(1).length>0||target.getEquips(2).length>0;
},
content:function(){
'step 0'
var e1=target.getEquip(1);
var e2=target.getEquip(2);
var e1=target.getEquips(1);
var e2=target.getEquips(2);
event.e1=e1;
event.e2=e2;
if(e1&&e2){
if(e1.length&&e2.length){
player.chooseControl('武器牌','防具牌').set('ai',function(){
if(_status.event.player.getEquip(2)){
return '武器牌';
@ -16879,7 +16880,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '防具牌';
});
}
else if(e1){
else if(e1.length){
event.choice='武器牌';
}
else{
@ -18868,7 +18869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.turnOver();
"step 1"
var num=game.countPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length;
});
player.draw(2+num);
player.addSkill('kuiwei2');
@ -18887,7 +18888,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:false,
content:function(){
var num=game.countPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length;
});
if(num>=player.countCards('he')){
player.discard(player.getCards('he'));

View File

@ -5,8 +5,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
standard:{
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan","re_lidian"],
standard_2013:["huaxiong","re_yuanshu","re_xushu"],
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan"],
standard_2013:["huaxiong","re_yuanshu","re_xushu","re_lidian"],
standard_2019:["gongsunzan","xf_yiji"],
standard_2023:["std_panfeng"],
},
@ -2223,8 +2223,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
player.awakenSkill('zhanshen');
var card=player.getEquip(1);
if(card) player.discard(card);
var card=player.getEquips(1);
if(cards.length) player.discard(card);
player.loseMaxHp();
player.addSkill('mashu');
player.addSkill('shenji');

View File

@ -5960,7 +5960,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:['enterGame','phaseZhunbeiBegin']
},
filter:function(event,player){
if(player.getEquip(1)) return false;
if(player.getEquips(1).length) return false;
return event.name!='phase'||game.phaseNumber==0;
},
forced:true,
@ -6000,7 +6000,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
filter:function(event,player){
if(!player.getEquip(1)) return false;
if(!player.getEquips(1).length) return false;
return game.hasPlayer(function(current){
return player.inRange(current)&&player.canCompare(current);
});
@ -6052,8 +6052,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
else if(!result.tie){
var card=player.getEquip(1);
if(card) target.gain(card,player,'give');
var card=player.getEquips(1);
if(card.length) target.gain(card,player,'give');
}
},
mod:{
@ -6073,7 +6073,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'twjianwei',
trigger:{player:'compare',target:'compare'},
filter:function(event,player){
if(!player.getEquip(1)||player.getAttackRange()<=0) return false;
if(!player.getEquips(1).length||player.getAttackRange()<=0) return false;
if(event.player==player) return !event.iwhile;
return true;
},
@ -6112,8 +6112,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
if(!result.tie){
if(result.bool){
var card=player.getEquip(1);
if(card) trigger.player.gain(card,player,'give');
var card=player.getEquips(1);
if(card.length) trigger.player.gain(card,player,'give');
}
else {
var num=0;
@ -12160,7 +12160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else{
var card=get.cardPile(function(card){
return card.name=='meiyingqiang'&&card!=player.getEquip(1);
return card.name=='meiyingqiang'&&!player.getEquips(1).contains(card);
},'field');
if(card) player.equip(card);
}

View File

@ -2952,15 +2952,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.filter.filterTarget.apply(this,arguments);
}).set('addCount',false).set('source',player).set('prompt2','对除'+get.translation(player)+'外的一名角色使用一张【杀】,并将装备区内的武器牌交给其中一名目标角色;或点击“取消”,令'+get.translation(player)+'视为对你使用一张【杀】,并获得你装备区内的武器牌');
'step 2'
var card=targets[0].getEquip(1);
var card=targets[0].getEquips(1);
if(result.bool){
player.addSkill('dclianji_1');
if(card&&result.targets.filter(target=>target.isIn()).length>0){
if(card.length&&result.targets.filter(target=>target.isIn()).length>0){
event.card=card;
targets[0].chooseTarget(true,'将'+get.translation(card)+'交给一名目标角色',(card,player,target)=>{
return _status.event.targets.contains(target);
}).set('ai',function(target){
var card=_status.event.getParent().card;
var card=_status.event.getParent().card[0];
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(card));
}).set('targets',result.targets);
} else event.finish();
@ -2975,8 +2975,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 4'
player.useCard({name:'sha',isCard:true},targets[0],false);
'step 5'
var card=targets[0].getEquip(1);
if(card) targets[0].give(card,player,'give');
var card=targets[0].getEquips(1);
if(card.length) targets[0].give(card,player,'give');
},
ai:{
order:4,

View File

@ -6231,7 +6231,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
var num=Math.min(game.countPlayer(function(current){
return player.inRange(current);
}),player.getEquip(1)?4:2);
}),player.getEquips(1).length?4:2);
if(trigger.target.countCards('h')<num){
event.directfalse=true;
}
@ -6256,8 +6256,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
var e1=player.getEquips(1);
if(e1.length){
player.discard(e1,'notBySelf');
}
event.finish();
@ -6318,14 +6318,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.getParent().name=='sha'&&player.getEquip(1);
return event.getParent().name=='sha'&&player.getEquips(1).length>0;
},
content:function(){
'step 0'
var num=1;
var info=get.info(player.getEquip(1));
if(info&&info.distance&&info.distance.attackFrom){
num-=info.distance.attackFrom;
var num=0,cards=player.getEquips(1);
for(var card of cards){
var numz=1;
var info=get.info(card,false);
if(info&&info.distance&&info.distance.attackFrom){
numz-=info.distance.attackFrom;
}
num+=numz;
}
if(trigger.player.countCards('h')<num){
event.directfalse=true;
@ -6351,8 +6355,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
var e1=player.getEquips(1);
if(e1.length){
player.discard(e1,'notBySelf');
}
}
@ -8966,7 +8970,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var prompt='弃置一张牌'
if(trigger.source.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquip(1)));
if(trigger.source.getEquips(1).length) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquips(1)));
var next=player.chooseToDiscard('he',get.prompt('duodao',trigger.source),prompt);
next.logSkill=['duodao',trigger.source];
next.set('ai',function(card){
@ -8977,8 +8981,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 0;
});
'step 1'
if(result.bool&&trigger.source.getEquip(1)){
player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf');
if(result.bool&&trigger.source.getEquips(1).length){
player.gain(trigger.source.getEquips(1),trigger.source,'give','bySelf');
}
},
ai:{
@ -9058,27 +9062,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reduodao:{
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0);
return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquips(1).length>0:player.countCards('he')>0);
},
direct:true,
audio:2,
content:function(){
'step 0'
var prompt='弃置一张牌'
if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1)));
if(trigger.player.getEquips(1).length) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquips(1)));
var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt);
next.logSkill=['reduodao',trigger.player];
next.set('ai',function(card){
if(!_status.event.getTrigger().player.getEquip(1)) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){
if(!_status.event.getTrigger().player.getEquips(1).length) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquips(1))<=0){
return 6-get.value(card);
}
return 0;
});
'step 1'
if(result.bool&&trigger.player.getEquip(1)){
if(result.bool&&trigger.player.getEquips(1).length){
if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player);
player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf');
player.gain(trigger.player.getEquips(1),trigger.player,'give','bySelf');
}
},
},
@ -11827,7 +11831,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
audio:2,
filter:function(event,player){
if(player.getEquip(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return (event.card.name=='sha'&&get.color(event.card)=='black')
},
content:function(){
@ -11836,10 +11840,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
effect:{
target:function(card,player,target){
if(player==target&&get.subtype(card)=='equip2'){
if(player==target&&get.subtypes(card).contains('equip2')){
if(get.equipValue(card)<=8) return 0;
}
if(target.getEquip(2)) return;
if(!player.hasEmptySlot(2)) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
}
}

View File

@ -1945,7 +1945,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
derivation:['cheliji_sichengliangyu','cheliji_tiejixuanyu','cheliji_feilunzhanyu'],
filter:function(event,player){
return !player.getEquip(5)&&player.countCards('he',{color:'black'})>0;
return !player.getEquips(5).length&&player.countCards('he',{color:'black'})>0;
},
filterCard:{color:'black'},
position:'he',
@ -2011,7 +2011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiangshou:{
mod:{
globalFrom:function(player,target,distance){
if(player.getEquip(5)) return distance-1;
if(player.getEquips(5).length) return distance-1;
}
},
},

View File

@ -10703,6 +10703,7 @@
cooperation_use:'戮力',
cooperation_use_info:'双方累计使用至少4种花色的牌',
charge:'蓄力值',
expandedSlots:'扩展装备栏',
},
element:{
content:{
@ -10782,7 +10783,7 @@
if(!player.expandedSlots[slot]) player.expandedSlots[slot]=0;
player.expandedSlots[slot]+=expand;
}
player.$syncDisable();
player.$syncExpand();
},
//选择顶装备要顶的牌
replaceEquip:function(){
@ -18468,6 +18469,18 @@
isDisabledJudge:function(){
return Boolean(this.storage._disableJudge);
},
//同步显示扩展装备区状态
$syncExpand:function(map){
var player=this;
if(!map){
map=(player.expandedSlots||{});
}
game.broadcast(function(player,map){
player.expandedSlots=map;
player.$syncExpand(map);
},player,map);
player.markSkill('expandedSlots');
},
//同步装备区废除牌显示状态
$syncDisable:function(map){
var player=this;
@ -28871,6 +28884,36 @@
}
},
skill:{
expandedSlots:{
markimage:'image/card/expandedSlots.png',
intro:{
markcount:function(storage,player){
var all=0,storage=player.expandedSlots;
if(!storage) return 0;
for(var key in storage){
var num=storage[key];
if(typeof num=='number'&&num>0){
all+=num;
}
}
return all;
},
content:function(storage,player){
storage=player.expandedSlots;
if(!storage) return '当前没有扩展装备栏';
var keys=Object.keys(storage).sort();
var str='';
for(var key of keys){
var num=storage[key];
if(typeof num=='number'&&num>0){
str+='<li>'+get.translation(key)+'栏:'+num+'个<br>'
}
}
if(str.length) return str.slice(0,str.length-4);
return '当前没有扩展装备栏';
},
},
},
charge:{
markimage:'image/card/charge.png',
intro:{
@ -37586,8 +37629,9 @@
var name=arguments[arguments.length-2];
var skills=arguments[arguments.length-1];
if(skills.getSkills){
if(name!='cardname') skills=skills.getSkills();
else skills=skills.getSkills(null,false);
//if(name!='cardname') skills=skills.getSkills();
//else skills=skills.getSkills(null,false);
skills=skills.getSkills();
}
skills=skills.concat(lib.skill.global);
game.expandSkills(skills);
@ -56709,11 +56753,14 @@
}
var value1=get.equipValue(card,target);
var value2=0;
var current=target.getEquip(card);
if(current&&current!=card){
value2=get.equipValue(current,target);
if(value2>0&&!target.needsToDiscard()&&!get.tag(card,'valueswap')){
return 0;
if(!player.canEquip(card)){
if(!player.canEquip(card,true)) return 0;
var current=target.getEquip(card);
if(current&&current!=card){
value2=get.equipValue(current,target);
if(value2>0&&!target.needsToDiscard()&&!get.tag(card,'valueswap')){
return 0;
}
}
}
return Math.max(0,value1-value2)/5;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB