给好几个交互加个cancelable/prompt参数
把prompt美化了一下
This commit is contained in:
notify 2023-04-04 15:59:21 +08:00 committed by GitHub
parent 615a4884e2
commit 64f095d98f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 25 deletions

View File

@ -140,6 +140,7 @@ FreeKill使用的是libgit2的C API与此同时使用Git完成拓展包的下
["#AskForNullificationWithoutTo"] = "是否对 %src 使用的 %arg 使用无懈可击?",
["#AskForDiscard"] = "请弃置 %arg 张牌,最少 %arg2 张",
["#AskForCard"] = "请选择 %arg 张牌,最少 %arg2 张",
["#askForPindian"] = "请选择一张手牌作为拼点牌",
["Trust"] = "托管",

View File

@ -846,8 +846,9 @@ end
---@param skillName string @ 引发弃牌的技能名
---@param cancelable boolean @ 能不能点取消?
---@param pattern string @ 弃牌需要符合的规则
---@param prompt string @ 提示信息
---@return integer[] @ 弃掉的牌的id列表可能是空的
function Room:askForDiscard(player, minNum, maxNum, includeEquip, skillName, cancelable, pattern)
function Room:askForDiscard(player, minNum, maxNum, includeEquip, skillName, cancelable, pattern, prompt)
if minNum < 1 then
return nil
end
@ -862,7 +863,7 @@ function Room:askForDiscard(player, minNum, maxNum, includeEquip, skillName, can
reason = skillName,
pattern = pattern,
}
local prompt = "#AskForDiscard:::" .. maxNum .. ":" .. minNum
local prompt = prompt or ("#AskForDiscard:::" .. maxNum .. ":" .. minNum)
local _, ret = self:askForUseActiveSkill(player, "discard_skill", prompt, cancelable, data)
if ret then
toDiscard = ret.cards
@ -891,10 +892,11 @@ end
---@param prompt string @ 提示信息
---@param skillName string @ 技能名
---@return integer[] @ 选择的玩家id列表可能为空
function Room:askForChoosePlayers(player, targets, minNum, maxNum, prompt, skillName)
function Room:askForChoosePlayers(player, targets, minNum, maxNum, prompt, skillName, cancelable)
if maxNum < 1 then
return {}
end
cancelable = (not cancelable) and false or true
local data = {
targets = targets,
@ -903,12 +905,15 @@ function Room:askForChoosePlayers(player, targets, minNum, maxNum, prompt, skill
pattern = "",
skillName = skillName
}
local _, ret = self:askForUseActiveSkill(player, "choose_players_skill", prompt or "", true, data)
local _, ret = self:askForUseActiveSkill(player, "choose_players_skill", prompt or "", cancelable, data)
if ret then
return ret.targets
else
-- TODO: default
if cancelable then
return {}
else
return table.random(targets, minNum)
end
end
end
@ -922,8 +927,9 @@ end
---@param skillName string @ 技能名
---@param cancelable boolean @ 能不能点取消
---@param pattern string @ 选牌规则
---@param prompt string @ 提示信息
---@return integer[] @ 选择的牌的id列表可能是空的
function Room:askForCard(player, minNum, maxNum, includeEquip, skillName, cancelable, pattern)
function Room:askForCard(player, minNum, maxNum, includeEquip, skillName, cancelable, pattern, prompt)
if minNum < 1 then
return nil
end
@ -938,7 +944,7 @@ function Room:askForCard(player, minNum, maxNum, includeEquip, skillName, cancel
reason = skillName,
pattern = pattern,
}
local prompt = "#askForCard:::" .. maxNum .. ":" .. minNum
local prompt = prompt or ("#AskForCard:::" .. maxNum .. ":" .. minNum)
local _, ret = self:askForUseActiveSkill(player, "choose_cards_skill", prompt, cancelable, data)
if ret then
chosenCards = ret.cards
@ -967,12 +973,19 @@ end
---@param maxNum integer @ 选目标最大值
---@param pattern string @ 选牌规则
---@param prompt string @ 提示信息
---@param cancelable boolean @ 能否点取消
---@return integer[], integer
function Room:askForChooseCardAndPlayers(player, targets, minNum, maxNum, pattern, prompt, skillName)
function Room:askForChooseCardAndPlayers(player, targets, minNum, maxNum, pattern, prompt, skillName, cancelable)
if maxNum < 1 then
return {}
end
local pcards = table.filter(player:getCardIds({ Player.Hand, Player.Equip }), function(id)
local c = Fk:getCardById(id)
return c:matchPattern(pattern)
end)
if #pcards == 0 then return {} end
local data = {
targets = targets,
num = maxNum,
@ -984,8 +997,11 @@ function Room:askForChooseCardAndPlayers(player, targets, minNum, maxNum, patter
if ret then
return ret.targets, ret.cards[1]
else
-- TODO: default
if cancelable then
return {}
else
return table.random(targets, minNum), table.random(pcards)
end
end
end
@ -1111,12 +1127,13 @@ end
---@param player ServerPlayer @ 要询问的玩家
---@param skill_name string @ 技能名
---@param data any @ 未使用
---@param prompt string @ 提示信息
---@return boolean
function Room:askForSkillInvoke(player, skill_name, data)
function Room:askForSkillInvoke(player, skill_name, data, prompt)
local command = "AskForSkillInvoke"
self:notifyMoveFocus(player, skill_name)
local invoked = false
local result = self:doRequest(player, command, skill_name)
local result = self:doRequest(player, command, json.encode{ skill_name, prompt })
if result ~= "" then invoked = true end
return invoked
end

View File

@ -307,5 +307,6 @@ ___
-- aux skills
Fk:loadTranslationTable{
["discard_skill"] = "弃牌",
["choose_cards_skill"] = "选牌",
["choose_players_skill"] = "选择角色",
}

View File

@ -291,10 +291,14 @@ Item {
Text {
id: prompt
visible: progress.visible
anchors.top: progress.top
anchors.topMargin: -2
color: "white"
anchors.bottom: progress.bottom
z: 1
color: "#F0E5DA"
font.pixelSize: 16
font.family: fontLibian.name
style: Text.Outline
styleColor: "#3D2D1C"
textFormat: TextEdit.RichText
anchors.horizontalCenter: progress.horizontalCenter
}
@ -311,20 +315,25 @@ Item {
background: Rectangle {
implicitWidth: 200
implicitHeight: 14
implicitHeight: 12
color: "black"
radius: 3
radius: 6
}
contentItem: Item {
implicitWidth: 200
implicitHeight: 12
implicitWidth: 196
implicitHeight: 10
Rectangle {
width: progress.visualPosition * parent.width
height: parent.height
radius: 2
color: "red"
radius: 6
gradient: Gradient {
GradientStop { position: 0.0; color: "orange" }
GradientStop { position: 0.3; color: "red" }
GradientStop { position: 0.7; color: "red" }
GradientStop { position: 1.0; color: "orange" }
}
}
}

View File

@ -577,9 +577,12 @@ callbacks["AskForGeneral"] = function(jsonData) {
}
callbacks["AskForSkillInvoke"] = function(jsonData) {
// jsonData: string name
roomScene.promptText = Backend.translate("#AskForSkillInvoke")
.arg(Backend.translate(jsonData));
// jsonData: [ string name, string prompt ]
let data = JSON.parse(jsonData);
let skill = data[0];
let prompt = data[1];
roomScene.promptText = prompt ? processPrompt(prompt) : Backend.translate("#AskForSkillInvoke")
.arg(Backend.translate(skill));
roomScene.state = "replying";
roomScene.okCancel.visible = true;
roomScene.okButton.enabled = true;