From b854e05124d27784260e3b689dbf2efd009c4116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=9A=E4=B8=BA=E4=BD=95?= <2642270721@qq.com> Date: Wed, 18 Jun 2025 15:57:30 +0000 Subject: [PATCH] =?UTF-8?q?UpdateCardVisibility=20--=E5=8D=A1=E7=89=8C?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 诚为何 <2642270721@qq.com> --- Fk/Pages/RoomLogic.js | 26 ++++++++++++++++++++++++++ Fk/RoomElement/CardItem.qml | 5 +++++ lua/client/client.lua | 9 +++++++++ lua/server/serverplayer.lua | 17 +++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/Fk/Pages/RoomLogic.js b/Fk/Pages/RoomLogic.js index 6d45bc9..8cd962f 100644 --- a/Fk/Pages/RoomLogic.js +++ b/Fk/Pages/RoomLogic.js @@ -781,6 +781,32 @@ callbacks["UpdateCard"] = (j) => { card.setData(lcall("GetCardData", id)); } +callbacks["UpdateCardVisibility"] = (data) => { + const id = parseInt(data[0]); + const known = data[1]; + let card; + roomScene.tableCards.forEach((v) => { + if (v.cid === id) { + card = v; + return; + } + }); + + if (!card) { + roomScene.dashboard.handcardArea.cards.forEach((v) => { + if (v.cid === id) { + card = v; + return; + } + }); + } + + if (!card) { + return; + } + card.setKnown(known); +} + callbacks["UpdateSkill"] = (j) => { const sortable = lcall("CanSortHandcards", Self.id); dashboard.sortable = sortable; diff --git a/Fk/RoomElement/CardItem.qml b/Fk/RoomElement/CardItem.qml index 8d2c4d8..77a5258 100644 --- a/Fk/RoomElement/CardItem.qml +++ b/Fk/RoomElement/CardItem.qml @@ -366,6 +366,11 @@ Item { mark = data.mark ?? {}; } + function setKnown(data) + { + known = data; + } + function toData() { const data = { diff --git a/lua/client/client.lua b/lua/client/client.lua index 52f60f9..e79f7a6 100644 --- a/lua/client/client.lua +++ b/lua/client/client.lua @@ -1275,6 +1275,15 @@ fk.client_callback["SyncDrawPile"] = function(self, data) self.draw_pile = data end +fk.client_callback["UpdateCardVisibility"] = function(self, data) + -- jsonData: [ int id, bool known ] + local player, cards = data[1], data[2] + local p = self:getPlayerById(player) + for _, id in ipairs(cards) do + self:notifyUI("UpdateCardVisibility", {id, p:cardVisible(id)}) + end +end + -- Create ClientInstance (used by Lua) -- Let Cpp call this function to create function CreateLuaClient(cpp_client) diff --git a/lua/server/serverplayer.lua b/lua/server/serverplayer.lua index de1b89a..4a1d9c6 100644 --- a/lua/server/serverplayer.lua +++ b/lua/server/serverplayer.lua @@ -848,4 +848,21 @@ function ServerPlayer:addQinggangTag(data) end end +--- 刷新角色视角下对应卡牌的可见性。 +---@param cards integer[] ? @ 卡牌ID,默认为角色的所有手牌 +function ServerPlayer:UpdateCardVisibility(cards) + cards = cards or self.player_cards[Player.Hand] + if #cards == 0 then return end + local update = function () + self:doNotify("UpdateCardVisibility", json.encode{ + self.id, + cards + }) + end + update() + self.room.logic:getCurrentEvent():addExitFunc(function () + update() + end) +end + return ServerPlayer -- Gitee