From b32d9388f68f4364880981a77b74b6facc1d1a80 Mon Sep 17 00:00:00 2001 From: copcap Date: Mon, 6 May 2024 15:16:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A5=9E=E9=82=93=E8=89=BE?= =?UTF-8?q?=E4=B8=89=E4=B8=AA=E5=8C=BA=E5=9F=9F=E5=9C=A8=E5=BD=95=E5=83=8F?= =?UTF-8?q?=E9=87=8C=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/extra/skill.js | 41 ++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/character/extra/skill.js b/character/extra/skill.js index b3eb1b383..8f9229c46 100644 --- a/character/extra/skill.js +++ b/character/extra/skill.js @@ -1823,27 +1823,40 @@ const skills = { if (result.bool) { game.broadcastAll( function (moved, player) { - var tags = ["dctuoyu_fengtian", "dctuoyu_qingqu", "dctuoyu_junshan"]; - var cards = []; - for (var i = 0; i < moved.length; i++) { - for (var card of moved[i]) { - cards.unshift(card); - for (var j = 0; j < tags.length; j++) { - if (i == j + 1) { - if (!card.hasGaintag(tags[j] + "_tag")) card.addGaintag(tags[j] + "_tag"); - } else { - if (card.hasGaintag(tags[j] + "_tag")) card.removeGaintag(tags[j] + "_tag"); - } - } - } - } if (player == game.me) { + const cards = moved.flat(1).reverse(); game.addVideo("lose", game.me, [get.cardsInfo(cards), [], [], []]); for (var i = 0; i < cards.length; i++) { cards[i].goto(ui.special); } game.me.directgain(cards, false); } + var tags = ["dctuoyu_fengtian", "dctuoyu_qingqu", "dctuoyu_junshan"]; + var map = {}; + for (var i = 0; i < moved.length; i++) { + for (var card of moved[i]) { + for (var j = 0; j < tags.length; j++) { + const tag = `${tags[j]}_tag`; + if (!map[tag]) map[tag] = [[], []]; + if (i == j + 1) { + map[tag][0].add(card); + if (!card.hasGaintag(tag)) { + card.addGaintag(tag); + } + } else { + if (card.hasGaintag(tag)) { + map[tag][1].add(card); + card.removeGaintag(tag); + } + } + } + } + } + for (const tag in map) { + if (map[tag][0].length) game.addVideo("addGaintag", player, [get.cardsInfo(map[tag][0]), tag]); + if (map[tag][1].length) game.addVideo("removeGaintag", player, [tag, get.cardsInfo(map[tag][1])]); + } + game.addVideo("delay", null, 1); }, result.moved, player