From ad8dc4b54be03e80d330ed8b345b39bd74f86367 Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Mon, 14 Aug 2023 11:08:25 -0700 Subject: [PATCH 1/7] Add the ability to get raw HP, change equal to only, and fix kotori_skill_qun. --- character/diy.js | 6 +- game/game.js | 150 ++++++++++++++++------------------------------- 2 files changed, 54 insertions(+), 102 deletions(-) diff --git a/character/diy.js b/character/diy.js index cff3aa50d..c38772be2 100755 --- a/character/diy.js +++ b/character/diy.js @@ -6035,12 +6035,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseDiscardBegin'}, forced:true, filter:function(event,player){ - return (player.isDamaged()||player.countCards('h')-player.hp>1); + return (player.getDamagedHp()>1||player.countCards('h')-player.getHp()>1); }, content:function(){ var num=0; - if(player.isDamaged()) num++; - if(player.countCards('h')-player.hp>1) num++; + if(player.getDamagedHp()>1) num++; + if(player.countCards('h')-player.getHp()>1) num++; player.addMark('kotori_qunxin_temp',num,false); player.addTempSkill('kotori_qunxin_temp','phaseDiscardEnd'); }, diff --git a/game/game.js b/game/game.js index 2580fa534..e488152aa 100644 --- a/game/game.js +++ b/game/game.js @@ -19047,11 +19047,11 @@ inRangeOf:function(source){ return source.inRange(this); }, - getHp:function(){ - return Math.max(0,this.hp); + getHp:function(raw){ + return raw?this.hp:Math.max(0,this.hp); }, - getDamagedHp:function(){ - return this.maxHp-this.getHp(); + getDamagedHp:function(raw){ + return this.maxHp-this.getHp(raw); }, changeGroup:function(group,log,broadcast){ var next=game.createEvent('changeGroup'); @@ -24832,109 +24832,61 @@ return this.hp=this.maxHp||this.storage.nohp; }, - isMaxHp:function(equal){ - for(var i=0;i=this.hp) return false; - } - else{ - if(game.players[i].hp>this.hp) return false; - } - } - return true; + isMaxHp:function(only,raw){ + return game.players.every(value=>{ + if(value.isOut()||value==this) return true; + return only?value.getHp(raw){ + if(value.isOut()||value==this) return true; + return only?value.getHp(raw)>this.getHp(raw):value.getHp(raw)>=this.getHp(raw); + }); }, - isMaxCard:function(equal){ - var nh=this.countCards('he'); - for(var i=0;i=nh) return false; - } - else{ - if(game.players[i].countCards('he')>nh) return false; - } - } - return true; + isMaxCard:function(only){ + const numberOfCards=this.countCards('he'); + return game.players.every(value=>{ + if(value.isOut()||value==this) return true; + return only?value.countCards('he'){ + if(value.isOut()||value==this) return true; + return only?value.countCards('he')>numberOfCards:value.countCards('he')>=numberOfCards; + }); }, - isMaxHandcard:function(equal){ - var nh=this.countCards('h'); - for(var i=0;i=nh) return false; - } - else{ - if(game.players[i].countCards('h')>nh) return false; - } - } - return true; + isMaxHandcard:function(only){ + const numberOfHandCards=this.countCards('h'); + return game.players.every(value=>{ + if(value.isOut()||value==this) return true; + return only?value.countCards('h'){ + if(value.isOut()||value==this) return true; + return only?value.countCards('h')>numberOfHandCards:value.countCards('h')>=numberOfHandCards; + }); }, - isMaxEquip:function(equal){ - var nh=this.countCards('e'); - for(var i=0;i=nh) return false; - } - else{ - if(game.players[i].countCards('e')>nh) return false; - } - } - return true; + isMaxEquip:function(only){ + const numberOfEquipAreaCards=this.countCards('e'); + return game.players.every(value=>{ + if(value.isOut()||value==this) return true; + return only?value.countCards('e'){ + if(value.isOut()||value==this) return true; + return only?value.countCards('e')>numberOfEquipAreaCards:value.countCards('e')>=numberOfEquipAreaCards; + }); }, isLinked:function(){ if(get.is.linked2(this)){ From 9a668b017375024220a2a3c3f878af9e5e1be9fa Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Sat, 19 Aug 2023 09:40:34 -0700 Subject: [PATCH 2/7] Recast. --- card/mtg.js | 31 +++---- card/yingbian.js | 2 +- character/clan.js | 60 +++----------- character/ddd.js | 3 +- character/diy.js | 45 ++++------ character/gwent.js | 27 ++---- character/hearth.js | 36 ++++---- character/huicui.js | 33 ++------ character/mobile.js | 47 ++++------- character/refresh.js | 28 ++----- character/sb.js | 5 +- character/shenhua.js | 50 ++++------- character/shiji.js | 11 ++- character/sp.js | 66 +++++---------- character/sp2.js | 10 +-- character/tw.js | 12 ++- character/xiake.js | 17 ++-- character/xianding.js | 18 ++-- character/yijiang.js | 19 ++--- character/yingbian.js | 8 +- game/game.js | 182 ++++++++++++++++++++--------------------- mode/guozhan.js | 2 +- theme/simple/style.css | 2 + 23 files changed, 257 insertions(+), 457 deletions(-) diff --git a/card/mtg.js b/card/mtg.js index d5b1f22f5..ff249560c 100644 --- a/card/mtg.js +++ b/card/mtg.js @@ -484,36 +484,31 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, mtg_yixialan_skill:{ enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h',{type:'basic'})>0; - }, - filterCard:{type:'basic'}, - prepare:function(cards,player){ - player.$throw(cards,1000); - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.mtg_yixialan_skill.filterCard(card,player),'h'), + filterCard:(card,player)=>get.type(card)=='basic'&&player.canRecast(card), discard:false, - delay:0.5, + lose:false, check:function(card){ return 7-get.value(card); }, usable:1, content:function(){ - var card=get.cardPile(function(card){ - return get.type(card,'trick')=='trick' + player.recast(cards,null,(player,cards)=>{ + const cardsToGain=[]; + for(let repetition=0;repetitionget.type(card,'trick')=='trick'); + if(card) cardsToGain.push(card); + } + if(cardsToGain.length) player.gain(cardsToGain,'draw'); + if(cards.length-cardsToGain.length) player.draw(cards.length-cardsToGain.length).log=false; }); - if(card){ - player.gain(card,'draw'); - } - else{ - player.draw(); - } }, ai:{ mapValue:2, order:1, result:{ - player:1, - }, + player:1 + } } }, mtg_shuimomuxue_skill:{ diff --git a/card/yingbian.js b/card/yingbian.js index cf75083d8..0b3f0f55c 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -450,7 +450,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseCard('h','是否发动【太公阴符】重铸一张手牌?').set('ai',function(card){ + player.chooseCard('h','是否发动【太公阴符】重铸一张手牌?',lib.filter.cardRecastable).set('ai',function(card){ return 5-get.value(card); }); 'step 1' diff --git a/character/clan.js b/character/clan.js index 120e927f4..001543789 100644 --- a/character/clan.js +++ b/character/clan.js @@ -244,22 +244,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var num=trigger.player.countCards('h'); - trigger.player.chooseCard('是否重铸任意张牌名字数为'+num+'的牌?',[1,Infinity],'he',(card,player,target)=>{ - if(!_status.event.cards.contains(card)) return false; - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - return mod=='unchanged'; - }).set('ai',card=>{ + trigger.player.chooseCard('是否重铸任意张牌名字数为'+num+'的牌?',[1,Infinity],'he',(card,player)=>_status.event.cards.contains(card)&&player.canRecast(card)).set('ai',card=>{ var val=get.value(card); return 6-val; }).set('cards',trigger.player.getCards('he',card=>{ return lib.skill.dcweidang.getLength(card)==num; })); 'step 1' - if(result.bool){ - var cards=result.cards; - trigger.player.loseToDiscardpile(cards); - trigger.player.draw(cards.length); - } + if(result.bool) trigger.player.recast(result.cards); } }, //族王允 @@ -910,18 +902,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ global:{ enable:'phaseUse', - filter:function(event,player){ - return game.hasPlayer(current=>lib.skill.clanlianzhu_global.filterTarget(null,player,current)); - }, - filterCard:function(card,player){ - if(!game.hasPlayer(current=>{ - if(!current.hasSkill('clanlianzhu')||current.hasSkill('clanlianzhu_targeted')) return false; - return !current.storage.clanlianzhu; - })) return false; - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; - }, + filter:(event,player)=>game.hasPlayer(current=>lib.skill.clanlianzhu_global.filterTarget(null,player,current)), + filterCard:(card,player)=>game.hasPlayer(current=>current.hasSkill('clanlianzhu')&&!current.hasSkill('clanlianzhu_targeted')&&!current.storage.clanlianzhu)&&player.canRecast(card), selectCard:[0,1], check:function(card){ return 5-get.value(card); @@ -968,10 +950,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bocchi.sortBySeat(); kita.sortBySeat(); var str=''; - var getn=function(target){ - if(player==target) return '自己'; - return get.translation(target); - } if(bocchi.length){ str+='重铸一张牌,然后令'; bocchi.forEach((current,i)=>{ @@ -998,19 +976,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target.storage.clanlianzhu) event.goto(4); target.changeZhuanhuanji('clanlianzhu'); 'step 1' - player.loseToDiscardpile(cards); - player.draw(cards.length); + player.recast(cards); 'step 2' if(!target.countCards('he')&&!_status.connectMode) event._result={bool:false}; - else target.chooseCard('he','联诛:是否重铸一张牌?',(card,player)=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; - }); + else target.chooseCard('he','联诛:是否重铸一张牌?',lib.filter.cardRecastable); 'step 3' if(result.bool){ - target.loseToDiscardpile(result.cards); - target.draw(result.cards.length); + target.recast(result.cards); if(get.color(cards[0])!=get.color(result.cards[0])) lib.skill.chenliuwushi.change(target,-1); } event.finish(); @@ -1955,25 +1927,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(player.actionHistory[i].isRound) break; } - return event.targets&&event.targets.length==1&&(!event.targets[0].isLinked()|| - player.getCards('h',card=>get.suit(card)==get.suit(event.card)).filter(card=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return true; - return false; - }).length==0); + return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()|| + player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h'); }, content:function(){ - 'step 0' if(trigger.targets&&trigger.targets.length==1){ trigger.targets[0].link(true); } - var cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card)); - if(cards.length>0){ - player.loseToDiscardpile(cards); - player.draw(cards.length); - } - 'step 1' - player.draw(); + var cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card)&&player.canRecast(card)); + if(cards.length>0) player.recast(cards); } }, clanhuanyin:{ diff --git a/character/ddd.js b/character/ddd.js index fccf1d110..75637ccb1 100644 --- a/character/ddd.js +++ b/character/ddd.js @@ -117,8 +117,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.useCard(result.targets,card,event.links); } else{ - game.cardsDiscard(event.links); - target.draw(event.links.length); + target.recast(event.links,(player,cards)=>game.cardsDiscard(cards)); } 'step 4' for(var card of cards){ diff --git a/character/diy.js b/character/diy.js index c38772be2..cc31e6c90 100755 --- a/character/diy.js +++ b/character/diy.js @@ -4919,34 +4919,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", position:'he', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.chihaya_huairou.filterCard(card,player),lib.skill.chihaya_huairou.position), + filterCard:(card,player)=>get.type(card)=='equip'&&player.canRecast(card), check:function(card){ if(!_status.event.player.hasEquipableSlot(get.subtype(card))) return 5; return 3-get.value(card); }, content:function(){ - player.draw(); + player.recast(cards); }, discard:false, - visible:true, - loseTo:'discardPile', + lose:false, + delay:false, prompt:"将一张装备牌置入弃牌堆并摸一张牌", - delay:0.5, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, ai:{ order:10, result:{ - player:1, - }, - }, + player:1 + } + } }, chihaya_youfeng:{ enable:'chooseToUse', @@ -16588,11 +16579,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, diyjuntun:{ enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.diyjuntun.filterCard(card,player),'he'), position:'he', - filterCard:{type:'equip'}, + filterCard:(card,player)=>get.type(card)=='equip'&&player.canRecast(card), check:function(card){ var player=_status.event.player; var he=player.getCards('he'); @@ -16609,23 +16598,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 0; }, content:function(){ - player.draw(); + player.recast(cards); }, discard:false, + lose:false, + delay:false, prompt:'将一张装备牌置入弃牌堆并摸一张牌', - delay:0.5, - loseTo:'discardPile', - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, ai:{ basic:{ order:8.5 }, result:{ - player:1, - }, + player:1 + } } }, choudu:{ diff --git a/character/gwent.js b/character/gwent.js index 9c065f3bc..6dfd606f3 100644 --- a/character/gwent.js +++ b/character/gwent.js @@ -484,12 +484,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var hs=player.getCards('h'); - event.num=hs.length; - player.lose(hs,ui.discardPile); + player.recast(player.getCards('h',lib.filter.cardRecastable)); 'step 1' - player.draw(event.num,'nodelay'); - 'step 2' var targets=player.getEnemies(); if(targets.length){ player.useCard({name:'sha'},targets.randomGet(),false); @@ -1376,29 +1372,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangfan:{ trigger:{player:'useCard'}, forced:true, - filter:function(event,player){ - return get.type(event.card)!='equip'&&player.countCards('h',{color:get.color(event.card)})>0; - }, + filter:(event,player)=>get.type(event.card)!='equip'&&player.hasCard(card=>get.color(card)==get.color(trigger.card)&&player.canRecast(card),'h'), content:function(){ 'step 0' - var cards=player.getCards('h',{suit:get.suit(trigger.card)}); - if(!cards.length){ - cards=player.getCards('h',{color:get.color(trigger.card)}); - } + let cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card)&&player.canRecast(card)); + if(!cards.length) cards=player.getCards('h',card=>get.color(card)==get.color(trigger.card)&&player.canRecast(card)); if(!cards.length){ event.finish(); return; } - event.chosen=cards.randomGet(); - game.delay(0.5) - 'step 1' - var card=event.chosen; - player.lose(card,ui.discardPile); - player.$throw(card,1000); - game.delay(0.5); - game.log(player,'重铸了',card); - 'step 2' - player.draw().log=false; + player.recast(cards.randomGet()); }, ai:{ pretao:true diff --git a/character/hearth.js b/character/hearth.js index 50f565e06..dc6a64cac 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -8466,27 +8466,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:true, content:function(){ 'step 0' - target.chooseCard('h',true,'重铸一张手牌'); + target.chooseCard('h',true,'重铸一张手牌',lib.filter.cardRecastable); 'step 1' if(result.bool&&result.cards.length){ - target.$throw(result.cards); - target.lose(result.cards,ui.discardPile); - var type=get.type(result.cards[0],'trick'); - var name=result.cards[0].name; - var card2=get.cardPile(function(card){ - return get.type(card,'trick')==type&&card.name!=name; - }); - if(!card2){ - card2=get.cardPile(function(card){ - return get.type(card,'trick')==type; + target.recast(result.cards,null,(player,cards)=>{ + var type=get.type(result.cards[0],'trick'); + var name=result.cards[0].name; + var card2=get.cardPile(function(card){ + return get.type(card,'trick')==type&&card.name!=name; }); - } - if(card2){ - target.gain(card2,'draw'); - } - else{ - target.draw(); - } + if(!card2){ + card2=get.cardPile(function(card){ + return get.type(card,'trick')==type; + }); + } + if(card2){ + target.gain(card2,'draw'); + } + else{ + target.draw().log=false; + } + }); var clone=game.createCard(card); player.gain(clone,'gain2'); clone.classList.add('glow'); diff --git a/character/huicui.js b/character/huicui.js index cb64cdc46..db80db52f 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -571,10 +571,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseCard(get.prompt2('dcjini'),[1,player.maxHp-player.countMark('dcjini_counted')],(card,player,target)=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - return mod=='unchanged'; - }).set('ai',card=>{ + player.chooseCard(get.prompt2('dcjini'),[1,player.maxHp-player.countMark('dcjini_counted')],lib.filter.cardRecastable).set('ai',card=>{ return 6-get.value(card); }); 'step 1' @@ -583,8 +580,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('dcjini'); player.addTempSkill('dcjini_counted'); player.addMark('dcjini_counted',cards.length,false); - player.loseToDiscardpile(cards); - player.draw(cards.length); + player.recast(cards); } else event.finish(); 'step 2' @@ -2557,10 +2553,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var str=',若重铸的牌中没有'+get.translation(get.type2(trigger.card))+'牌,你于'+get.translation(trigger.cards)+'进入弃牌堆后获得之'; - player.chooseCard(get.prompt('dcqianzheng'),'重铸两张牌'+(trigger.cards.length?str:'')+'。',2,'he',(card,player,target)=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - return mod=='unchanged'; - }).set('ai',card=>{ + player.chooseCard(get.prompt('dcqianzheng'),'重铸两张牌'+(trigger.cards.length?str:'')+'。',2,'he',lib.filter.cardRecastable).set('ai',card=>{ var val=get.value(card); if(get.type2(card)==_status.event.type) val+=0.5; return 6-val; @@ -2569,8 +2562,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var cards=result.cards; player.logSkill('dcqianzheng'); - player.loseToDiscardpile(cards); - player.draw(cards.length); + player.recast(cards); if(cards.every(card=>get.type2(card)!=get.type2(trigger.card))){ trigger.getParent().dcqianzheng=true; player.addTempSkill('dcqianzheng_gain'); @@ -3809,21 +3801,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.choosePlayerCard(target,'he',true).set('filterButton',function(button){ - var player=_status.event.player,card=button.link; - if(get.owner(card)==player){ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - } - return true; + var card=button.link,owner=get.owner(card); + return !owner||owner.canRecast(card,_status.event.player); }).set('ai',function(card){ if(get.attitude(_status.event.player,_status.event.getParent().target)>=0) return -get.buttonValue(card); return get.buttonValue(card); }); 'step 1' - if(result.bool){ - target.loseToDiscardpile(result.links); - target.draw(); - } + if(result.bool) target.recast(result.links); }, ai:{ expose:0.1, @@ -6874,9 +6859,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 6' if(event.goon1&&event.goon2){ if(player.countMark('chenjian')<2) player.addMark('chenjian',1,false); - var cards=player.getCards('h'); - player.loseToDiscardpile(cards); - player.draw(cards.length); + player.recast(player.getCards('h',lib.filter.cardRecastable)); } }, marktext:'见', diff --git a/character/mobile.js b/character/mobile.js index 002545b4a..1cc0a0ca7 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -8759,7 +8759,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseCard('he',get.prompt2('duoduan')).set('ai',function(card){ + player.chooseCard('he',get.prompt2('duoduan'),lib.filter.cardRecastable).set('ai',function(card){ if(_status.event.goon) return 8-get.value(card); return 0; }).set('goon',function(){ @@ -8771,12 +8771,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ player.addTempSkill('duoduan_im'); - var card=result.cards[0]; player.logSkill('duoduan',trigger.player); - player.lose(card,ui.discardPile,'visible'); - player.$throw(card,1000); - game.log(player,'将',card,'置入弃牌堆'); - player.draw(); + player.recast(result.cards); } else event.finish(); 'step 2' @@ -11854,31 +11850,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ prompt:"重铸一张防具牌,然后将体力回复至1点。", audio:'xinfu_jingxie', enable:"chooseToUse", - filterCard:function(card){ - return get.subtype(card)=='equip2'; - }, - filter:function(event,player){ - if(event.type=='dying'){ - if(player!=event.dying) return false; - return player.countCards('he',function(card){ - return get.subtype(card)=='equip2'; - })>0; - } - return false; - }, - check:function(){ - return 1; + filterCard:(card,player)=>get.subtype(card)=='equip2'&&player.canRecast(card), + filter:(event,player)=>{ + if(event.type!='dying') return false; + if(player!=event.dying) return false; + return player.hasCard(card=>lib.skill.xinfu_jingxie2.filterCard(card,player),lib.skill.xinfu_jingxie2.position); }, position:"he", discard:false, - loseTo:'discardPile', - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆') - }, + lose:false, + delay:false, content:function(){ 'step 0' - player.draw(); + player.recast(cards); 'step 1' var num=1-player.hp; if(num) player.recover(num); @@ -11887,18 +11871,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:0.5, skillTagFilter:function(player,arg,target){ if(player!=target) return false; - return player.countCards('he',function(card){ - if(_status.connectMode&&get.position(card)=='h') return true; - return get.subtype(card)=='equip2'; - })>0; + return player.hasCard(card=>_status.connectMode&&get.position(card)=='h'||get.subtype(card)=='equip2'&&player.canRecast(card),'he'); }, save:true, result:{ player:function(player){ return 10; - }, - }, - }, + } + } + } }, "xinfu_qiaosi":{ enable:"phaseUse", diff --git a/character/refresh.js b/character/refresh.js index 3a6e80df1..b86d7341d 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -574,19 +574,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 6' if(event.h&&event.hp&&event.e){ - player.chooseCard('安国:是否重铸任意张牌?',[1,Infinity],(card,player)=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; - },'he').set('ai',card=>{ + player.chooseCard('安国:是否重铸任意张牌?',[1,Infinity],lib.filter.cardRecastable,'he').set('ai',card=>{ return 6-get.value(card); }); } else event.finish(); 'step 7' if(result.bool){ - player.loseToDiscardpile(result.cards); - player.draw(result.cards.length); + player.recast(result.cards); } }, ai:{ @@ -4042,27 +4037,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', filter:function(event,player){ - return player.countCards('h','sha')>0; - }, - filterCard:{name:'sha'}, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); + return player.hasCard(card=>lib.skill.reyanyu.filterCard(card,player),'h'); }, + filterCard:(card,player)=>get.name(card)=='sha'&&player.canRecast(card), discard:false, - loseTo:'discardPile', - visible:true, - delay:0.5, + lose:false, + delay:false, content:function(){ - player.draw(); + player.recast(cards); }, ai:{ basic:{ order:1 }, result:{ - player:1, - }, + player:1 + } }, group:'reyanyu2' }, diff --git a/character/sb.js b/character/sb.js index d2207cd1d..6b859974e 100644 --- a/character/sb.js +++ b/character/sb.js @@ -932,15 +932,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', filterCard:{suit:'club'}, - filter:function(event,player){ - return player.countCards('hes',{suit:'club'}); - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.sblianhuan.filterCard(card,player),lib.skill.sblianhuan.position), filterTarget:function(card,player,target){ if(player.hasSkill('sblianhuan_blocker')) return false; if(!ui.selected.cards.length) return false; card=get.autoViewAs({name:'tiesuo'},[ui.selected.cards[0]]); return player.canUse(card,target); }, + filterCard:(card,player)=>get.suit(card)=='club'&&(!player.hasSkill('sblianhuan_blocker')||player.canRecast(card)), selectCard:1, position:'hs', derivation:'sblianhuan_lv2', diff --git a/character/shenhua.js b/character/shenhua.js index 4e1552b73..88719fce4 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -1103,34 +1103,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:"phaseUse", position:'he', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.drlt_huairou.filterCard(card,player),lib.skill.drlt_huairou.position), + filterCard:(card,player)=>get.type(card)=='equip'&&player.canRecast(card), check:function(card){ if(!_status.event.player.canEquip(card)) return 5; return 3-get.value(card); }, content:function(){ - player.draw(); + player.recast(cards); }, discard:false, - visible:true, - loseTo:'discardPile', + lose:false, + delay:false, prompt:"将一张装备牌置入弃牌堆并摸一张牌", - delay:0.5, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, ai:{ order:10, result:{ - player:1, - }, - }, + player:1 + } + } }, "drlt_yongsi":{ audio:2, @@ -5495,34 +5486,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, popup:'lianhuan', enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h',{suit:'club'})>0; - }, - filterCard:function(card){ - return get.suit(card)=='club'; - }, + filter:(event,player)=>player.hasCard(card=>lib.skill.lianhuan2.filterCard(card,player),'h'), + filterCard:(card,player)=>get.suit(card)=='club'&&player.canRecast(card), check:function(card){ return 5-get.useful(card); }, content:function(){ - player.draw(); + player.recast(cards); }, discard:false, - visible:true, - loseTo:'discardPile', + lose:false, + delay:false, prompt:'将一张梅花牌置入弃牌堆并摸一张牌', - delay:0.5, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, ai:{ basic:{ order:1 }, result:{ - player:1, - }, + player:1 + } } }, niepan:{ @@ -8008,7 +7990,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huoji_info:'出牌阶段,你可以将你的任意一张红色手牌当作【火攻】使用。', bazhen_info:'锁定技,若你的防具栏内没有牌且没有被废除,则你视为装备着【八卦阵】。', kanpo_info:'你可以将你的任意一张黑色手牌当做【无懈可击】使用。', - lianhuan_info:'出牌阶段,你可以将一张梅花手牌当做【铁索连环】使用或重铸。', + lianhuan_info:'出牌阶段,你可以将一张♣手牌当做【铁索连环】使用或重铸。', niepan_info:'限定技,出牌阶段或当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。', oldniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。', quhu_info:'出牌阶段限一次,你可以与一名体力值大于你的角色拼点,若你赢,则该角色对其攻击范围内另一名由你指定的角色造成1点伤害。若你没赢,该角色对你造成一点伤害。', diff --git a/character/shiji.js b/character/shiji.js index 1f933e32f..63ee976e0 100644 --- a/character/shiji.js +++ b/character/shiji.js @@ -130,9 +130,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(get.prompt('tongduo'),'令一名角色重铸一张牌',function(card,player,target){ - return target.countCards('he')>0; + return target.hasCard(lib.filter.cardRecastable,'he'); }).set('ai',function(target){ - return get.attitude(_status.event.player,target)*Math.min(3,Math.floor(target.countCards('h')/2)); + return get.attitude(_status.event.player,target)*Math.min(3,Math.floor(target.countCards('h',lib.filter.cardRecastable)/2)); }); 'step 1' if(result.bool){ @@ -142,11 +142,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event.finish(); 'step 2' - if(target.countCards('he')==0) event.finish(); - else target.chooseCard('he',true,'请重铸一张牌'); + if(!target.hasCard(lib.filter.cardRecastable,'he')) event.finish(); + else target.chooseCard('he',true,'请重铸一张牌',lib.filter.cardRecastable); 'step 3' - target.loseToDiscardpile(result.cards); - target.draw(); + target.recast(result.cards); }, }, //朱儁 diff --git a/character/sp.js b/character/sp.js index 5c456160e..c9336bdc7 100755 --- a/character/sp.js +++ b/character/sp.js @@ -2340,14 +2340,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.goto(6); 'step 3' if(result.bool){ - var hs=target.getCards('h',card=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; - }); + var hs=target.getCards('h',lib.filter.cardRecastable); if(hs.length){ - target.loseToDiscardpile(hs); - target.draw(hs.length); + target.recast(hs); } } event.goto(6); @@ -2355,13 +2350,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var hs=target.getCards('h',card=>{ if(!card.hasGaintag('olhuiyun_tag')) return false; - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; + return target.canRecast(card); }); if(hs.length){ - target.loseToDiscardpile(hs); - target.draw(hs.length); + target.recast(hs); } } event.goto(6); @@ -3106,16 +3098,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' var type=get.type2(cards[0]); target.chooseCard(get.translation(player)+'对你发动了【剑合】','请重铸'+get.cnNumber(cards.length)+'张'+get.translation(type)+'牌,或点“取消”受到1点雷电伤害',cards.length,'he',(card,player)=>{ - return get.type2(card)==_status.event.type; + return get.type2(card)==_status.event.type&&player.canRecast(card); }).set('ai',card=>{ if(_status.event.goon) return (get.type(card)=='equip'?15:7)-get.value(card); return 0; }).set('type',type).set('goon',get.damageEffect(target,player,target,'thunder')<0); 'step 2' if(result.bool){ - var cards=result.cards; - target.loseToDiscardpile(cards); - target.draw(cards.length); + target.recast(result.cards); } else{ target.damage(player,'thunder'); @@ -3738,16 +3728,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - target.chooseCard('he',true,'铸币:请重铸一张牌',(card,player,target)=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - return true; - }); + target.chooseCard('he',true,'铸币:请重铸一张牌',lib.filter.cardRecastable); 'step 1' if(result.bool){ - var cards=result.cards; - target.loseToDiscardpile(cards); - target.draw().gaintag=['olzhubi_tag']; + target.recast(result.cards,null,player=>player.draw().set('log',false).gaintag=['olzhubi_tag']); } }, ai:{ @@ -4281,7 +4265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(!player.countCards('h')||player.hasSkill('olhuanshi_mark',null,null,false)) event.finish(); 'step 3' - player.chooseCard('是否重铸任意张手牌?','操作提示:选择要重铸的牌并点击“确定”',[1,player.countCards('h')]).set('ai',function(card){ + player.chooseCard('是否重铸任意张手牌?','操作提示:选择要重铸的牌并点击“确定”',[1,player.countCards('h')],lib.filter.cardRecastable).set('ai',function(card){ var player=_status.event.player,cards=ui.selected.cards; if(!player.hasSkill('olmingzhe')) return 5-get.value(card); for(var i of cards){ @@ -4292,8 +4276,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 4' if(result.bool){ player.addTempSkill('olhuanshi_mark'); - player.loseToDiscardpile(result.cards); - player.draw(result.cards.length); + player.recast(result.cards); } }, ai:{ @@ -6016,9 +5999,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToDiscard('he',true); } else{ - var cards=target.getCards('e'); - target.loseToDiscardpile(cards); - target.draw(cards.length) + target.recast(target.getCards('e',lib.filter.cardRecastable)); } }, }, @@ -22179,33 +22160,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return current.hasSkill('xinfu_jianjie'); })) return false; if((player.getStat().skill.smh_lianhuan||0)+(player.getStat().skill.smh_lianhuan1||0)>=3) return false; - return player.countCards('h',{suit:'club'})>0; + return player.hasCard(card=>lib.skill.smh_lianhuan1.filterCard(card,player),'h'); }, - filterCard:function (card){ - return get.suit(card)=='club'; - }, - check:function (card){ + filterCard:(card,player)=>get.suit(card)=='club'&&player.canRecast(card), + check:function(card){ return -1; }, - content:function (){ - player.draw(); + content:function(){ + player.recast(cards); }, discard:false, - loseTo:'discardPile', + lose:false, + delay:false, prompt:"将一张梅花牌置入弃牌堆并摸一张牌", - delay:0.5, - prepare:function (cards,player){ - player.$throw(cards,1000); - }, ai:{ basic:{ order:1, }, result:{ - player:1, - }, + player:1 + } }, - forced:true, + forced:true }, "smh_yeyan":{ unique:true, diff --git a/character/sp2.js b/character/sp2.js index 0ebb28359..b359a4783 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -9216,16 +9216,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, charlotte:true, filter:function(event,player){ - return player.getCards('h',function(card){ - return card.hasGaintag('xinfu_bijing'); - }).length>0; + return player.hasCard(card=>card.hasGaintag('xinfu_bijing')&&player.canRecast(card),'h'); }, content:function(){ - var cards=player.getCards('h',function(card){ - return card.hasGaintag('xinfu_bijing'); - }); - player.loseToDiscardpile(cards); - player.draw(cards.length); + player.recast(player.getCards('h',card=>card.hasGaintag('xinfu_bijing')&&player.canRecast(card))); }, sub:true, }, diff --git a/character/tw.js b/character/tw.js index 195afd8ca..fcf04f842 100644 --- a/character/tw.js +++ b/character/tw.js @@ -1282,16 +1282,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'twqingtao_jieshu', content:function(){ 'step 0' - player.chooseCard(get.prompt2('twqingtao'),'he').set('ai',function(card){ + player.chooseCard(get.prompt2('twqingtao'),'he',lib.filter.cardRecastable).set('ai',function(card){ if(card.name=='jiu'||get.type(card)!='basic') return 10-get.value(card); return 6-get.value(card); }); 'step 1' if(result.bool){ player.logSkill('twqingtao'); - player.loseToDiscardpile(result.cards); - player.draw(); - if(result.cards[0].name=='jiu'||get.type(result.cards[0],false,player)!='basic') player.draw(); + player.recast(result.cards); + if(get.name(result.cards[0])=='jiu'||get.type(result.cards[0],false,player)!='basic') player.draw(); } }, subSkill:{ @@ -11174,14 +11173,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' if(!event.isMine()&&!event.isOnline()) game.delayx(); - player.chooseCard('是否发动【革制】重铸一张牌?').set('ai',function(card){ + player.chooseCard('是否发动【革制】重铸一张牌?',lib.filter.cardRecastable).set('ai',function(card){ return 5.5-get.value(card); }); 'step 1' if(result.bool){ player.logSkill('twgezhi'); - player.loseToDiscardpile(result.cards); - player.draw(); + player.recast(result.cards); } }, group:'twgezhi_buff', diff --git a/character/xiake.js b/character/xiake.js index 7d15e350a..298b82e5d 100644 --- a/character/xiake.js +++ b/character/xiake.js @@ -34,12 +34,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', position:'e', filter:function(event,player){ - return player.countCards('e')>0; + return player.hasCard(card=>lib.skill.rouquan.filterCard(card,player),lib.skill.rouquan.position); }, - filterCard:true, + filterCard:lib.filter.cardRecastable, prompt:'将要重铸的牌置入弃牌堆并摸一张牌', discard:false, - delay:0.5, + lose:false, + delay:false, check:function(card,player){ var val=get.equipValue(card); var player=_status.event.player; @@ -51,16 +52,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 0; }, - prepare:function(cards,player){ - player.$throw(cards,1000); - }, content:function(){ - "step 0" - player.draw(); - "step 1" - for(var i=0;i0; - }, - filterCard:{name:'sha'}, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); + return player.hasCard(card=>lib.skill.yanyu.filterCard(card,player),'h'); }, + filterCard:(card,player)=>get.name(card)=='sha'&&player.canRecast(card), discard:false, - loseTo:'discardPile', - visible:true, - delay:0.5, + lose:false, + delay:false, content:function(){ - player.draw(); + player.recast(cards); }, ai:{ basic:{ order:1 }, result:{ - player:1, - }, + player:1 + } }, group:'yanyu2' }, diff --git a/character/yingbian.js b/character/yingbian.js index 62ad0489b..180bf0cc5 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -682,17 +682,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', content:function(){ 'step 0' - player.loseToDiscardpile(cards); - player.draw(); + player.recast(cards); 'step 1' if(target.countCards('he')>0){ - target.chooseCard('he',true,'请重铸一张牌'); + target.chooseCard('he',true,'请重铸一张牌',lib.filter.cardRecastable); } else event.finish(); 'step 2' if(result.bool){ - target.loseToDiscardpile(result.cards); - target.draw(); + target.recast(result.cards); } }, ai:{ diff --git a/game/game.js b/game/game.js index e488152aa..6b555eeda 100644 --- a/game/game.js +++ b/game/game.js @@ -10698,6 +10698,17 @@ emptyEvent:function(){ event.trigger(event.name); }, + //Recast + //重铸 + recast:()=>{ + 'step 0' + game.log(player,'重铸了',cards); + if(typeof event.recastingLose=='function') event.recastingLose(player,cards); + 'step 1' + event.trigger('recast'); + 'step 2' + if(typeof event.recastingGain=='function') event.recastingGain(player,cards); + }, //装备栏相关 disableEquip:function(){ 'step 0' @@ -10879,7 +10890,7 @@ var next=game.createEvent('replaceEquip'); next.player=player; next.card=card; - next.setContent(info.replaceEquip||'replaceEquip') + next.setContent(info.replaceEquip||'replaceEquip'); "step 4" var info=get.info(card,false); if(get.itemtype(result)=='cards'){ @@ -16739,7 +16750,7 @@ }, loseToDiscardpile:function(){ "step 0" - game.log(player,'将',cards,'置入了弃牌堆'); + if(event.log!=false) game.log(player,'将',cards,'置入了弃牌堆'); event.done=player.lose(cards,event.position,'visible'); event.done.type='loseToDiscardpile'; "step 1" @@ -18240,6 +18251,31 @@ }, player:{ //新函数 + //Recast + //重铸 + recast:function(cards,recastingLose,recastingGain){ + const recast=game.createEvent('recast'); + recast.player=this; + if(get.itemtype(cards)=='card') recast.cards=[cards]; + else if(get.itemtype(cards)=='cards'&&cards.length) recast.cards=cards; + else _status.event.next.remove(recast); + if(typeof recastingLose!='function') recastingLose=(player,cards)=>player.loseToDiscardpile(cards).log=false; + recast.recastingLose=recastingLose; + if(typeof recastingGain!='function') recastingGain=(player,cards)=>player.draw(cards.length).log=false; + recast.recastingGain=recastingGain; + recast.setContent('recast'); + recast._args=Array.from(arguments); + return recast; + }, + //Check if the player can recast the card + //检查角色是否能重铸此牌 + canRecast:function(card,source,strict){ + const cardRecastable=lib.filter.cardRecastable(card,this,source,strict); + if(cardRecastable!='unchanged') return cardRecastable; + if(get.position(card)!='h') return false; + const info=get.info(card); + return typeof info.chongzhu=='function'?info.chongzhu(event,player):info.chongzhu; + }, //装备栏相关 //判断一名角色的某个区域是否被废除 //type为要判断的区域 若为空 则判断玩家是否有任意一个被废除的区域 @@ -19047,9 +19083,13 @@ inRangeOf:function(source){ return source.inRange(this); }, + //Get the player's HP not less than 0. Set “raw” to true to get the player's raw HP instead. + //获取角色的体力值。设置“raw”为true以获取角色的体力。 getHp:function(raw){ return raw?this.hp:Math.max(0,this.hp); }, + //Set “raw” to true to get the player's raw damaged HP instead. + //设置“raw”为true以获取角色已损失的体力。 getDamagedHp:function(raw){ return this.maxHp-this.getHp(raw); }, @@ -28264,6 +28304,12 @@ all:function(){ return true; }, + //Check if the card is recastable + //检查此牌是否可重铸 + cardRecastable:(card,player,source,strict)=>{ + if(typeof player=='undefined') player=get.owner(card); + return game.checkMod(card,player,source,!strict||'unchanged','cardRecastable',player); + }, //装备栏相关 canBeReplaced:function(card,player){ var mod=game.checkMod(card,player,'unchanged','canBeReplaced',player); @@ -29885,78 +29931,47 @@ logv:false, visible:true, prompt:'将要重铸的牌置入弃牌堆并摸一张牌', - filter:function(event,player){ - return player.hasCard(function(card){ - return lib.skill._chongzhu.filterCard(card,player); - }); - }, - filterCard:function(card,player){ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return mod; - var info=get.info(card); - if(typeof info.chongzhu=='function'){ - return info.chongzhu(event,player); - } - return info.chongzhu; - }, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, - check:function(card){ - // if(get.type(card)=='stonecharacter'&&_status.event.player.countCards('h',{type:'stonecharacter'})<=1){ - // return 0; - // } - return 1; - }, + filter:(event,player)=>player.hasCard(card=>lib.skill._chongzhu.filterCard(card,player),'he'), + position:'he', + filterCard:(card,player)=>player.canRecast(card,null,true), discard:false, - loseTo:'discardPile', - delay:0.5, + lose:false, + delay:false, content:function(){ - "step 0" - if(lib.config.mode=='stone'&&_status.mode=='deck'&& - !player.isMin()&&get.type(cards[0]).indexOf('stone')==0){ - var list=get.stonecard(1,player.career); - if(list.length){ - player.gain(game.createCard(list.randomGet()),'draw'); - } - else{ - player.draw({drawDeck:1}) - } - } - else if(get.subtype(cards[0])=='spell_gold'){ - var list=get.libCard(function(info){ - return info.subtype=='spell_silver'; + player.recast(cards,null,(player,cards)=>{ + let numberOfCardsToDraw=cards.length; + cards.forEach(value=>{ + if(lib.config.mode=='stone'&&_status.mode=='deck'&&!player.isMin()&&get.type(value).indexOf('stone')==0){ + const stonecard=get.stonecard(1,player.career); + numberOfCardsToDraw--; + if(stonecard.length) player.gain(game.createCard(stonecard.randomGet()),'draw'); + else player.draw({ + drawDeck:1 + }).log=false; + } + else if(get.subtype(value)=='spell_gold'){ + const libCard=get.libCard(info=>info.subtype=='spell_silver'); + if(!libCard.length) return; + numberOfCardsToDraw--; + player.gain(game.createCard(libCard.randomGet()),'draw'); + } + else if(get.subtype(value)=='spell_silver'){ + const libCard=get.libCard(info=>info.subtype=='spell_bronze'); + if(!libCard.length) return; + numberOfCardsToDraw--; + player.gain(game.createCard(libCard.randomGet()),'draw'); + } }); - if(list.length){ - player.gain(game.createCard(list.randomGet()),'draw'); - } - else{ - player.draw(); - } - } - else if(get.subtype(cards[0])=='spell_silver'){ - var list=get.libCard(function(info){ - return info.subtype=='spell_bronze'; - }); - if(list.length){ - player.gain(game.createCard(list.randomGet()),'draw'); - } - else{ - player.draw(); - } - } - else{ - player.draw(); - } + if(numberOfCardsToDraw) player.draw(numberOfCardsToDraw).log=false; + }); }, ai:{ basic:{ order:6 }, result:{ - player:1, - }, + player:1 + } } }, _lianhuan:{ @@ -38643,36 +38658,15 @@ } return num; }, - filterPlayer:function(func,list,includeOut){ - if(!Array.isArray(list)){ - list=[]; - } - if(typeof func!='function'){ - func=lib.filter.all; - } - for(var i=0;i{ + if(!Array.isArray(list)) list=[]; + if(typeof func!='function') func=lib.filter.all; + return list.addArray(game.players.filter(value=>(includeOut||!value.isOut())&&func(value))); }, - filterPlayer2:function(func,list,includeOut){ - if(!Array.isArray(list)){ - list=[]; - } - if(typeof func!='function'){ - func=lib.filter.all; - } - var players=game.players.slice(0).concat(game.dead); - for(var i=0;i{ + if(!Array.isArray(list)) list=[]; + if(typeof func!='function') func=lib.filter.all; + return list.addArray(game.players.concat(game.dead).filter(value=>(includeOut||!value.isOut())&&func(value))); }, findPlayer:function(func,includeOut){ for(var i=0;idiv:first-child>div{ + filter: invert(0.8) sepia(1); -webkit-filter: invert(0.8) sepia(1); } @@ -201,6 +202,7 @@ html{ transition-property: transform; transition-duration: 0s; background-size: cover; + filter: blur(3px); -webkit-filter: blur(3px); } .popup-container>.prompt-container>div>div{ From a9935c1ee3d2872d1d2a61f29eff4e50939fb868 Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Sat, 19 Aug 2023 22:41:06 -0700 Subject: [PATCH 3/7] Fix some characters. --- character/refresh.js | 1 - character/sb.js | 1 - character/shenhua.js | 2 -- 3 files changed, 4 deletions(-) diff --git a/character/refresh.js b/character/refresh.js index b86d7341d..9f5ea86c8 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -8868,7 +8868,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'chooseToUse', mark:true, skillAnimation:true, - animationStr:'涅盘', limited:true, animationColor:'orange', init:function(player){ diff --git a/character/sb.js b/character/sb.js index 6b859974e..523e7ff1c 100644 --- a/character/sb.js +++ b/character/sb.js @@ -1093,7 +1093,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'chooseToUse', mark:true, skillAnimation:true, - //animationStr:'涅盘', limited:true, animationColor:'orange', filter:function(event,player){ diff --git a/character/shenhua.js b/character/shenhua.js index 88719fce4..ec5bceb65 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -5515,7 +5515,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, limited:true, skillAnimation:true, - //animationStr:'涅盘', animationColor:'fire', init:function(player){ player.storage.niepan=false; @@ -5574,7 +5573,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'chooseToUse', mark:true, skillAnimation:true, - //animationStr:'涅盘', limited:true, animationColor:'orange', init:function(player){ From 57e1ad46ed47851df93e627298452fedb542495c Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Sat, 19 Aug 2023 23:01:04 -0700 Subject: [PATCH 4/7] Fix lib.element.content.addToExpansion. --- game/game.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/game/game.js b/game/game.js index 6b555eeda..91096c0ef 100644 --- a/game/game.js +++ b/game/game.js @@ -17189,7 +17189,7 @@ } if(event.animate=='draw'){ player.$draw(cards.length); - game.log(player,'将',get.cnNumber(cards.length),'张牌置于了武将牌上'); + if(event.log) game.log(player,'将',get.cnNumber(cards.length),'张牌置于了武将牌上'); game.pause(); setTimeout(function(){ player.$addToExpansion(cards,null,event.gaintag); @@ -17223,8 +17223,8 @@ if(event.animate=='give'){ for(var i in evtmap){ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; - source.$give(evtmap[i][0],player); - game.log(player,'将',get.cnNumber(evtmap[i][0]),'置于了武将牌上'); + source.$give(evtmap[i][0],player,false); + if(event.log) game.log(player,'将',evtmap[i][0],'置于了武将牌上'); } } else{ @@ -17232,11 +17232,11 @@ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; if(evtmap[i][1].length){ source.$giveAuto(evtmap[i][1],player,false); - game.log(player,'将',get.cnNumber(evtmap[i][1].length),'张牌置于了武将牌上'); + if(event.log) game.log(player,'将',get.cnNumber(evtmap[i][1].length),'张牌置于了武将牌上'); } if(evtmap[i][2].length){ source.$give(evtmap[i][2],player,false); - game.log(player,'将',get.cnNumber(evtmap[i][2]),'置于了武将牌上'); + if(event.log) game.log(player,'将',evtmap[i][2],'置于了武将牌上'); } } } @@ -17261,9 +17261,6 @@ for(var i of event.gaintag) player.markSkill(i); event.finish(); } - if(event.log){ - game.log(player,'将',cards,'置于了武将牌上'); - } "step 4" game.delayx(); if(event.updatePile) game.updateRoundNumber(); From 05373085870895b75499a8390b384aac3d5b0499 Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Sat, 19 Aug 2023 23:05:42 -0700 Subject: [PATCH 5/7] Change the name of the 4th parameter. --- game/game.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/game/game.js b/game/game.js index 91096c0ef..77b39f0fb 100644 --- a/game/game.js +++ b/game/game.js @@ -28303,9 +28303,9 @@ }, //Check if the card is recastable //检查此牌是否可重铸 - cardRecastable:(card,player,source,strict)=>{ + cardRecastable:(card,player,source,raw)=>{ if(typeof player=='undefined') player=get.owner(card); - return game.checkMod(card,player,source,!strict||'unchanged','cardRecastable',player); + return game.checkMod(card,player,source,!raw||'unchanged','cardRecastable',player); }, //装备栏相关 canBeReplaced:function(card,player){ From 71e99e32724321019cf3466f78f914174dde4589 Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Mon, 21 Aug 2023 07:55:18 -0700 Subject: [PATCH 6/7] Remove a redundant
. --- character/shenhua.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/character/shenhua.js b/character/shenhua.js index ec5bceb65..48fe50a6f 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -4218,7 +4218,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dialog.buttons[i].node.group.remove(); dialog.buttons[i].node.hp.remove(); dialog.buttons[i].node.intro.remove(); - dialog.buttons[i].node.name.innerHTML='未
知'; + dialog.buttons[i].node.name.innerHTML=get.verticalStr('未知'); dialog.buttons[i].node.name.dataset.nature=''; dialog.buttons[i].style.background=''; dialog.buttons[i]._nointro=true; From 2510053e48b1d6e3c940cf6d60ba6a6b4433b0bf Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Mon, 21 Aug 2023 11:10:40 -0700 Subject: [PATCH 7/7] Fix the turnover CSS. --- game/game.js | 2 +- layout/default/layout.css | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/game/game.js b/game/game.js index 77b39f0fb..1da88204c 100644 --- a/game/game.js +++ b/game/game.js @@ -48207,7 +48207,7 @@ node.node={ avatar:ui.create.div('.avatar',node,ui.click.avatar).hide(), avatar2:ui.create.div('.avatar2',node,ui.click.avatar2).hide(), - turnedover:ui.create.div('.turned','

',node), + turnedover:ui.create.div('.turned','
'+get.verticalStr('翻面')+'
',node), framebg:ui.create.div('.framebg',node), intro:ui.create.div('.intro',node), identity:ui.create.div('.identity',node), diff --git a/layout/default/layout.css b/layout/default/layout.css index 6c4b8acc0..37e1fc961 100644 --- a/layout/default/layout.css +++ b/layout/default/layout.css @@ -2239,9 +2239,8 @@ div:not(.handcards)>.card>.info>span, text-shadow: none; } .player>.turned>div{ - top:calc(50% - 50px); - width: 100%; - left: 0; + top: calc(50% - 50px); + left: calc(50% - 25px); white-space: nowrap; writing-mode: vertical-rl; -webkit-writing-mode: vertical-rl;