diff --git a/Fk/Pages/RoomLogic.js b/Fk/Pages/RoomLogic.js index 6d45bc9fc5cd2d950daab79ff09784b46c396c5b..8cd962f5c3ffbf2e69ad5aaf9655920293b07a6d 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 8d2c4d8b0b59af0cb71ba1a663d293de97663ead..77a525870ff27ee2ab7873ec046272410d006ca0 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 52f60f967bcb2a785ae29d87cd0e436d61a52426..e79f7a63500f74ebf4f87569926a68fb7c9f708e 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 de1b89ab73cf6a4ea73d5163b5566d5987e55f0b..4a1d9c6ca29054798bd9b703c9712cf14a055c64 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