From f6b6f0f26c2e993445884501b726d6aa27c23bd4 Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 28 Oct 2023 11:16:18 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9F=A5=E6=83=85?= =?UTF-8?q?=E7=89=8C=E6=9C=BA=E5=88=B6=EF=BC=8C=E8=BE=85=E5=8A=A9AI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- card/extra.js | 11 +++++ game/game.js | 108 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 114 insertions(+), 5 deletions(-) diff --git a/card/extra.js b/card/extra.js index 83ef9d2f0..1fb1be66d 100644 --- a/card/extra.js +++ b/card/extra.js @@ -242,6 +242,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target:function(player,target){ if(target.hasSkill('huogong2')||target.countCards('h')==0) return 0; if(player.countCards('h')<=1) return 0; + if(_status.event.player == player){ + if(target.isAllCardsKnown(player)){ + if(!target.countCards('h',card=>{ + return player.countCards('h',card2=>{ + return get.suit(card2) == get.suit(card); + }); + })){ + return 0; + } + } + } if(target==player){ if(typeof _status.event.filterCard=='function'&& _status.event.filterCard({name:'huogong'},player,_status.event)){ diff --git a/game/game.js b/game/game.js index 4e1af65fb..89a3d6593 100644 --- a/game/game.js +++ b/game/game.js @@ -17968,10 +17968,12 @@ if(!event.chooseonly){ if(event.delay!==false){ var next=player.gain(event.cards,target,event.visibleMove?'give':'giveAuto','bySelf'); + next.set('cardKnower',event.visibleMove?['everyone']:[target]); event.done=next; } else{ var next=player.gain(event.cards,target,'bySelf'); + next.set('cardKnower',event.visibleMove?['everyone']:[target]); event.done=next; target[event.visibleMove?'$give':'$giveAuto'](cards,player); if(event.visibleMove) next.visible=true; @@ -18048,6 +18050,7 @@ else{ game.log(player,'展示了',cards); } + game.addCardKnowner(cards,'everyone'); game.delayx(event.delay_time||2.5); game.addVideo('showCards',player,[event.str,get.cardsInfo(cards)]); "step 1" @@ -18056,6 +18059,7 @@ }, viewCards:function(){ "step 0" + game.addCardKnowner(event.cards,player); if(player==game.me){ event.dialog=ui.create.dialog(event.str,event.cards); if(event.isMine()){ @@ -19254,7 +19258,13 @@ for(var i in map){ var owner=(_status.connectMode?lib.playerOL:game.playerMap)[i]; var next=owner.lose(map[i][0],ui.special).set('type','gain').set('forceDie',true).set('getlx',false); - if(event.visible==true) next.visible=true; + if(event.visible==true){ + next.visible=true; + game.addCardKnowner(map[i][0],'everyone'); + }else{ + game.addCardKnowner(map[i][1],owner); + game.addCardKnowner(map[i][2],'everyone'); + } event.relatedLose=next; } } @@ -19765,6 +19775,7 @@ event.js=js; event.ss=ss; event.xs=xs; + game.clearCardKnowers(hs); "step 2" if(num{return true}; + return this.getCards('h',function(card){ + return card.isKnownBy(other) && filter(card); + }); + } + //判断此角色的手牌是否已经被看光了。 + isAllCardsKnown(other){ + if(!other)other = _status.event.player; + if(!other)other = this; + return this.countCards('h',function(card){ + return !card.isKnownBy(other); + }) == 0; + } + //判断此角色是否有被知的牌。 + hasKnownCards(other,filter){ + if(!other)other = _status.event.player; + if(!other)other = this; + if(!filter)filter = (card)=>{return true}; + return this.countCards('h',function(card){ + return card.isKnownBy(other) && filter(card); + }) > 0; + } //Execute the delay card effect //执行延时锦囊牌效果 executeDelayCardEffect(card,target,judge,judge2){ @@ -28286,8 +28325,13 @@ let cards,selected=get.copy(ui.selected.cards); if(get.itemtype(ignore)==='cards') selected.addArray(ignore); else if(get.itemtype(ignore)==='card') selected.add(ignore); - if(this===viewer||get.itemtype(viewer)==='player'&&viewer.hasSkillTag('viewHandcard',null,this,true)) cards=this.getCards('h'); - else cards=this.getShownCards(); + /*if(this===viewer||get.itemtype(viewer)==='player'&&viewer.hasSkillTag('viewHandcard',null,this,true)) cards=this.getCards('h'); + else cards=this.getShownCards();*/ + if(this === viewer || get.itemtype(viewer) == 'player'){ + cards = this.getKnownCards(viewer); + }else{ + cards = this.getShownCards(); + } if(cards.some(card=>{ if(selected.includes(card)) return false; let name=get.name(card,this); @@ -28308,8 +28352,13 @@ let cards,selected=get.copy(ui.selected.cards); if(get.itemtype(ignore)==='cards') selected.addArray(ignore); else if(get.itemtype(ignore)==='card') selected.add(ignore); - if(this===viewer||get.itemtype(viewer)==='player'&&viewer.hasSkillTag('viewHandcard',null,this,true)) cards=this.getCards('h'); - else cards=this.getShownCards(); + /*if(this===viewer||get.itemtype(viewer)==='player'&&viewer.hasSkillTag('viewHandcard',null,this,true)) cards=this.getCards('h'); + else cards=this.getShownCards();*/ + if(this === viewer || get.itemtype(viewer) == 'player'){ + cards = this.getKnownCards(viewer); + }else{ + cards = this.getShownCards(); + } if(cards.some(card=>{ if(selected.includes(card)) return false; let name=get.name(card,this); @@ -30432,6 +30481,41 @@ aiexclude(){ _status.event._aiexclude.add(this); } + //为此牌添加知情者。参数可为数组,若参数为字符串'everyone',则所有玩家均为知情者。 + addKnowner(player){ + if(!this._knowers){ + this._knowers = []; + } + if(typeof player == 'string'){ + this._knowers.add(player); + }else{ + let type = get.itemtype(player); + if(type == 'player'){ + this._knowers.add(player.playerid); + }else if(type == 'players'){ + player.forEach(p=>this._knowers.add(p.playerid)); + } + } + } + //清除此牌的知情者。 + clearKnowers(){ + if(this._knowers)delete this._knowers; + } + //判断玩家对此牌是否知情。 + isKnownBy(player){ + if(['e','j'].includes(get.position(this)))return true;//装备区或者判定区的牌,必知情。 + let owner = get.owner(this); + if(owner){ + if(owner == player)return true;//是牌主,必知情。 + if(player.hasSkillTag('viewHandcard',null,owner,true))return true;//有viewHandcard标签,必知情。 + if(owner.isUnderControl(true,player))return true;//被操控,必知情。 + } + if(get.is.shownCard(this))return true;//此牌是明置牌,必知情。 + if(this._knowers){ + return this._knowers.includes('everyone') || this._knowers.includes(player.playerid); + } + return false; + } getSource(name){ if(this.name==name) return true; var info=lib.card[this.name]; @@ -36059,6 +36143,20 @@ if(i.storage.renku) i.markSkill('renku'); } }, + //为牌添加知情者。 + addCardKnowner:function(cards,players){ + if(get.itemtype(cards) == 'card'){ + cards = [cards]; + } + cards.forEach(card=>card.addKnowner(players)); + }, + //移除牌的所有知情者。 + clearCardKnowers:function(cards){ + if(get.itemtype(cards) == 'card'){ + cards = [cards]; + } + cards.forEach(card=>card.clearKnowers()); + }, loseAsync:function(arg){ var next=game.createEvent('loseAsync'); next.forceDie=true; From 6992562ab7a8a6243e43408b1e3c48f7ac0f1aef Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 28 Oct 2023 11:31:48 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gain=E7=9A=84=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=9F=A5=E6=83=85=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/game/game.js b/game/game.js index 89a3d6593..039e16a65 100644 --- a/game/game.js +++ b/game/game.js @@ -19267,6 +19267,9 @@ } event.relatedLose=next; } + if(event.cardKnower){ + game.addCardKnowner(cards,event.cardKnower); + } } else{ event.finish(); From 15c61886be8454b5e363e85bbdb04d08b6e30dd2 Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 28 Oct 2023 11:40:24 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8D=95=E8=AF=8D=E6=8B=BC=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/game/game.js b/game/game.js index 039e16a65..bc57583c7 100644 --- a/game/game.js +++ b/game/game.js @@ -18050,7 +18050,7 @@ else{ game.log(player,'展示了',cards); } - game.addCardKnowner(cards,'everyone'); + game.addCardKnower(cards,'everyone'); game.delayx(event.delay_time||2.5); game.addVideo('showCards',player,[event.str,get.cardsInfo(cards)]); "step 1" @@ -18059,7 +18059,7 @@ }, viewCards:function(){ "step 0" - game.addCardKnowner(event.cards,player); + game.addCardKnower(event.cards,player); if(player==game.me){ event.dialog=ui.create.dialog(event.str,event.cards); if(event.isMine()){ @@ -19260,15 +19260,15 @@ var next=owner.lose(map[i][0],ui.special).set('type','gain').set('forceDie',true).set('getlx',false); if(event.visible==true){ next.visible=true; - game.addCardKnowner(map[i][0],'everyone'); + game.addCardKnower(map[i][0],'everyone'); }else{ - game.addCardKnowner(map[i][1],owner); - game.addCardKnowner(map[i][2],'everyone'); + game.addCardKnower(map[i][1],owner); + game.addCardKnower(map[i][2],'everyone'); } event.relatedLose=next; } if(event.cardKnower){ - game.addCardKnowner(cards,event.cardKnower); + game.addCardKnower(cards,event.cardKnower); } } else{ @@ -20620,8 +20620,8 @@ for(i=0;icard.addKnowner(players)); + cards.forEach(card=>card.addKnower(players)); }, //移除牌的所有知情者。 clearCardKnowers:function(cards){ From deb7757b88939fb8c8737271dbfacbced2654549 Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 28 Oct 2023 12:36:12 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=83=8C=E9=9D=A2=E6=9C=9D=E4=B8=8A?= =?UTF-8?q?=E5=A4=B1=E5=8E=BB=E6=89=8B=E7=89=8C=E5=90=8E=EF=BC=8C=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=89=8B=E7=89=8C=E6=B8=85=E7=A9=BA=E7=9F=A5=E6=83=85?= =?UTF-8?q?=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/game/game.js b/game/game.js index bc57583c7..4c80243d7 100644 --- a/game/game.js +++ b/game/game.js @@ -19779,6 +19779,9 @@ event.ss=ss; event.xs=xs; game.clearCardKnowers(hs); + if(hs.length && !event.visible){ + this.getCards('h').forEach(hcard=>{hcard.clearKnowers();}); + } "step 2" if(num Date: Sat, 28 Oct 2023 12:46:19 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=BE=97?= =?UTF-8?q?=E7=89=8C=E6=97=B6=E7=9A=84=E7=9F=A5=E6=83=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/game/game.js b/game/game.js index 4c80243d7..6a1648f11 100644 --- a/game/game.js +++ b/game/game.js @@ -19260,15 +19260,11 @@ var next=owner.lose(map[i][0],ui.special).set('type','gain').set('forceDie',true).set('getlx',false); if(event.visible==true){ next.visible=true; - game.addCardKnower(map[i][0],'everyone'); - }else{ - game.addCardKnower(map[i][1],owner); - game.addCardKnower(map[i][2],'everyone'); } event.relatedLose=next; - } - if(event.cardKnower){ - game.addCardKnower(cards,event.cardKnower); + if(event.cardKnower){ + next.set('cardKnower',event.cardKnower); + } } } else{ @@ -19286,6 +19282,8 @@ var hs=source.getCards('hejsx'); if(hs.contains(cards[i])){ cards.splice(i--,1); + }else{ + cards[i].addKnower(event.visible?'everyone':source); } } } From d7c845b2c33503eb3bbd392d6f5585726c985f3e Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 28 Oct 2023 12:50:44 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=A5=E6=83=85?= =?UTF-8?q?=E7=89=8C=E7=9A=84=E8=AE=BE=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/game/game.js b/game/game.js index 6a1648f11..4135205ac 100644 --- a/game/game.js +++ b/game/game.js @@ -17968,12 +17968,10 @@ if(!event.chooseonly){ if(event.delay!==false){ var next=player.gain(event.cards,target,event.visibleMove?'give':'giveAuto','bySelf'); - next.set('cardKnower',event.visibleMove?['everyone']:[target]); event.done=next; } else{ var next=player.gain(event.cards,target,'bySelf'); - next.set('cardKnower',event.visibleMove?['everyone']:[target]); event.done=next; target[event.visibleMove?'$give':'$giveAuto'](cards,player); if(event.visibleMove) next.visible=true; @@ -19262,9 +19260,6 @@ next.visible=true; } event.relatedLose=next; - if(event.cardKnower){ - next.set('cardKnower',event.cardKnower); - } } } else{