From 4006d7d324f30bb10e36c4230b42bd61485b68e7 Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Tue, 15 Aug 2023 01:33:36 +0800 Subject: [PATCH] removed most getEquip --- card/extra.js | 4 +- card/sp.js | 8 ++-- card/zhulu.js | 2 +- character/collab.js | 12 ++--- character/ddd.js | 2 +- character/diy.js | 12 ++--- character/extra.js | 82 ++++++++++++++++++++--------------- character/huicui.js | 4 +- character/mobile.js | 77 ++++++++++++++++++-------------- character/refresh.js | 36 ++++++++------- character/sb.js | 8 ++-- character/shiji.js | 10 ++--- character/sp.js | 71 +++++++++++++++--------------- character/standard.js | 8 ++-- character/tw.js | 16 +++---- character/xianding.js | 10 ++--- character/yijiang.js | 48 ++++++++++---------- character/yingbian.js | 4 +- game/game.js | 63 +++++++++++++++++++++++---- image/card/charge.png | Bin 9076 -> 9216 bytes image/card/expandedSlots.png | Bin 0 -> 8140 bytes 21 files changed, 282 insertions(+), 195 deletions(-) create mode 100644 image/card/expandedSlots.png diff --git a/card/extra.js b/card/extra.js index 6c7e1736e..12f570962 100644 --- a/card/extra.js +++ b/card/extra.js @@ -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&¤t.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'; } diff --git a/card/sp.js b/card/sp.js index ee72624c6..7aa5a6957 100644 --- a/card/sp.js +++ b/card/sp.js @@ -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); } }, diff --git a/card/zhulu.js b/card/zhulu.js index 13e145a5e..886d7ee99 100644 --- a/card/zhulu.js +++ b/card/zhulu.js @@ -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'); diff --git a/character/collab.js b/character/collab.js index 73a1793d0..22921c374 100644 --- a/character/collab.js +++ b/character/collab.js @@ -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'); }, diff --git a/character/ddd.js b/character/ddd.js index 695d62523..fccf1d110 100644 --- a/character/ddd.js +++ b/character/ddd.js @@ -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' diff --git a/character/diy.js b/character/diy.js index ad14b71fe..e4634ab4b 100755 --- a/character/diy.js +++ b/character/diy.js @@ -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; diff --git a/character/extra.js b/character/extra.js index 1d620f44a..3c6c2d952 100755 --- a/character/extra.js +++ b/character/extra.js @@ -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;i0){ return true; } } @@ -3401,10 +3415,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var players=game.filterPlayer(); for(var i=0;i0){ player.line(players[i],'green'); - players[i].give(e,player); + player.gain(e,players[i],'give','bySelf'); } } } diff --git a/character/huicui.js b/character/huicui.js index 7a47de378..349e1911d 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -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; } } diff --git a/character/mobile.js b/character/mobile.js index 03a9bc044..ac7fb1e5d 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -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;i1) 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;i1) 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;i1) 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); }, }, }, diff --git a/character/refresh.js b/character/refresh.js index 20b1607fa..1ebd790bb 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -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'&¤t==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:'出牌阶段,你可以将一张装备牌置于其他角色的装备区(可替换原装备),然后摸一张牌。', diff --git a/character/sb.js b/character/sb.js index 580b1e303..c6b4800d6 100644 --- a/character/sb.js +++ b/character/sb.js @@ -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){ diff --git a/character/shiji.js b/character/shiji.js index be75dc3bd..e2c7872aa 100644 --- a/character/shiji.js +++ b/character/shiji.js @@ -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; diff --git a/character/sp.js b/character/sp.js index 448d70f9a..0ea91615f 100755 --- a/character/sp.js +++ b/character/sp.js @@ -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;islot=='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')); diff --git a/character/standard.js b/character/standard.js index f73668cd2..073d1a8e4 100755 --- a/character/standard.js +++ b/character/standard.js @@ -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'); diff --git a/character/tw.js b/character/tw.js index 0ce4f6e41..195afd8ca 100644 --- a/character/tw.js +++ b/character/tw.js @@ -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); } diff --git a/character/xianding.js b/character/xianding.js index 6a666c81f..7e890995a 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -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, diff --git a/character/yijiang.js b/character/yijiang.js index b876f2ed2..039f82605 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -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')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')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'; } } diff --git a/character/yingbian.js b/character/yingbian.js index 5dae2f95e..62ad0489b 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -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; } }, }, diff --git a/game/game.js b/game/game.js index 27be2fed2..9b243cd33 100644 --- a/game/game.js +++ b/game/game.js @@ -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+='
  • '+get.translation(key)+'栏:'+num+'个
    ' + } + } + 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&¤t!=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&¤t!=card){ + value2=get.equipValue(current,target); + if(value2>0&&!target.needsToDiscard()&&!get.tag(card,'valueswap')){ + return 0; + } } } return Math.max(0,value1-value2)/5; diff --git a/image/card/charge.png b/image/card/charge.png index 1e4e44f8b54372f0013c0e1787009c9d5f347fb1..5f85f33ab2dcba58c3d70c12a9ed977c3a0cd4df 100644 GIT binary patch delta 7625 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 delta 7570 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 O*HYJ0D^qz8^nU=;7pY?a literal 0 HcmV?d00001