diff --git a/Fk/Cheat/PlayerDetail.qml b/Fk/Cheat/PlayerDetail.qml index 41184d69..d58b2276 100644 --- a/Fk/Cheat/PlayerDetail.qml +++ b/Fk/Cheat/PlayerDetail.qml @@ -153,6 +153,14 @@ Flickable { selectByMouse: false wrapMode: TextEdit.WordWrap textFormat: TextEdit.RichText + onLinkActivated: (link) => { + if (link === "back") { + text = savedtext.pop(); + } else { + savedtext.push(text); + text = '点击返回
' + luatr(link); + } + } } } } diff --git a/Fk/Config.qml b/Fk/Config.qml index 4dacd173..edecced3 100644 --- a/Fk/Config.qml +++ b/Fk/Config.qml @@ -60,11 +60,13 @@ QtObject { property bool enableFreeAssign: false property bool observing: false property bool replaying: false + property bool replayingShowCards: false property list blockedUsers: [] property int totalTime: 0 // FIXME: only for notifying onObservingChanged: lcall("SetObserving", observing); - //onReplayingChanged: lcall("SetReplaying", replaying); + onReplayingChanged: lcall("SetReplaying", replaying); + onReplayingShowCardsChanged: lcall("SetReplayingShowCards", replayingShowCards); // onDisabledGeneralsChanged: { // disableGeneralSchemes[disableSchemeIdx] = disabledGenerals; diff --git a/Fk/Pages/Room.qml b/Fk/Pages/Room.qml index bf6686bf..f4aabec5 100644 --- a/Fk/Pages/Room.qml +++ b/Fk/Pages/Room.qml @@ -396,6 +396,7 @@ Item { deputyGeneral: model.deputyGeneral screenName: model.screenName role: model.role + role_shown: model.role_shown kingdom: model.kingdom netstate: model.netstate maxHp: model.maxHp @@ -588,6 +589,12 @@ Item { } } + Switch { + text: luatr("Show All Cards") + checked: config.replayingShowCards + onCheckedChanged: config.replayingShowCards = checked; + } + Switch { text: luatr("Speed Resume") checked: false @@ -1396,6 +1403,7 @@ Item { deputyGeneral: "", screenName: i ? "" : Self.screenName, role: "unknown", + role_shown: false, kingdom: "unknown", netstate: "online", maxHp: 0, diff --git a/Fk/Pages/RoomLogic.js b/Fk/Pages/RoomLogic.js index 7e152306..af7198ad 100644 --- a/Fk/Pages/RoomLogic.js +++ b/Fk/Pages/RoomLogic.js @@ -208,6 +208,7 @@ function moveCards(data) { if (!from || !to || (from === to && move.fromArea !== Card.DiscardPile)) continue; const items = from.remove(move.ids, move.fromSpecialName, data); + items.forEach((item) => item.known = !!data[item.cid.toString()]); if (to === tablePile) { let vanished = items.filter(c => c.cid === -1); if (vanished.length > 0) { @@ -1019,6 +1020,7 @@ callbacks["AskForCardChosen"] = (data) => { const box = roomScene.popupBox.item; box.prompt = prompt; + box.visible_data = data.visible_data ?? {}; for (let d of data.card_data) { const arr = []; const ids = d[1]; @@ -1053,6 +1055,7 @@ callbacks["AskForCardsChosen"] = (data) => { box.min = min; box.max = max; box.prompt = prompt; + box.visible_data = data.visible_data ?? {}; for (let d of data.card_data) { const arr = []; const ids = d[1]; diff --git a/Fk/RoomElement/HandcardArea.qml b/Fk/RoomElement/HandcardArea.qml index f8adab75..38ea1d46 100644 --- a/Fk/RoomElement/HandcardArea.qml +++ b/Fk/RoomElement/HandcardArea.qml @@ -49,7 +49,7 @@ Item { card = result[i]; card.draggable = false; card.selectable = false; - card.clicked.connect(selectCard); + card.clicked.disconnect(selectCard); card.selectedChanged.disconnect(adjustCards); card.released.disconnect(updateCardReleased); card.xChanged.disconnect(updateCardDragging); diff --git a/Fk/RoomElement/Photo.qml b/Fk/RoomElement/Photo.qml index 1d648b6f..60167edb 100644 --- a/Fk/RoomElement/Photo.qml +++ b/Fk/RoomElement/Photo.qml @@ -18,6 +18,7 @@ Item { property string deputyGeneral: "" property string screenName: "" property string role: "unknown" + property bool role_shown: false property string kingdom: "qun" property string netstate: "online" property alias handcards: handcardAreaItem.length @@ -533,6 +534,7 @@ Item { id: role value: { if (root.role === "hidden") return "hidden"; + if (root.role_shown) return root.role; lcall("RoleVisibility", root.playerid) ? root.role : "unknown"; } anchors.top: parent.top diff --git a/Fk/RoomElement/PlayerCardBox.qml b/Fk/RoomElement/PlayerCardBox.qml index 1dc51865..29b10624 100644 --- a/Fk/RoomElement/PlayerCardBox.qml +++ b/Fk/RoomElement/PlayerCardBox.qml @@ -25,6 +25,7 @@ GraphicsBox { property int min: 0 property int max: 1 property var selected_ids: [] + property var visible_data: ({}) ListModel { id: cardModel @@ -75,7 +76,10 @@ GraphicsBox { suit: model.suit || "" number: model.number || 0 autoBack: false - known: model.known + known: { + if (visible_data[cid.toString()] == false) return false; + return true; + } selectable: true onClicked: { if (!root.multiChoose) { diff --git a/Fk/RoomElement/PoxiBox.qml b/Fk/RoomElement/PoxiBox.qml index 88f76efc..c5136592 100644 --- a/Fk/RoomElement/PoxiBox.qml +++ b/Fk/RoomElement/PoxiBox.qml @@ -71,7 +71,11 @@ GraphicsBox { suit: model.suit || "" number: model.number || 0 autoBack: false - known: model.known + known: { + const visible_data = extra_data?.visible_data ?? {}; + if (visible_data[cid.toString()] == false) return false; + return true; + } selectable: chosenInBox || lcall("PoxiFilter", root.poxi_type, model.cid, root.selected_ids, root.card_data, root.extra_data);