首先,一些上下文(除了我对编码还很陌生)......我正在开发一个棋盘游戏,对于所说游戏的桌面模拟器版本,我创建了一系列 UI每当玩家按下桌子中间的按钮时弹出的菜单操作(玩家必须首先宣布他们将为特定工作提交投标,并且他们的按钮按下启动该工作的 RFP 投标过程)。玩家按下按钮后,UI 会提示所有其他玩家是否愿意参与相关工作的竞标。
然后所有参与的投标人输入他们的有效投标——连同他们的市场声誉,这会影响他们在投标过程中从工作中收取的总体费用——然后脚本找到最低投标来确定工作获胜者。
此出价调整菜单的前两个字段是可编辑的,而第三个(费用)是只读的。费用数字会根据其他两个输入的值实时调整。费用的计算公式是effective bid + (reputation * 5) = fee
。
我遇到的问题是,每当玩家从前两个字段之一中删除一个值(例如,通过突出显示它并按退格键),游戏的聊天框中会弹出以下错误:
Error in Script (Custom Assetbundle - 64453f) function <adjustReputationBlue>:
chunk_3:(555,4-55): attempt to perform arithmetic on a string value
我假设错误是由删除数值后的 nil 值引起的,因此我尝试添加一些条件逻辑,在执行任何算术之前将前两个字段中的 nil 值重置为 0。然而,这并没有奏效,所以我有点难过。
这是相关的 Lua 代码(在按钮的 ttslua 文件中):
function adjustBidBlue(Player, value, id)
effective_bid_blue = value
feeAdjustBlue()
end
function adjustReputationBlue(Player, value, id)
reputation_blue = value
feeAdjustBlue()
end
function feeAdjustBlue()
if effective_bid_blue == nil then
effective_bid_blue = 0
end
if reputation_blue == nil then
reputation_blue = 0
end
fee_blue = effective_bid_blue + reputation_blue * 5
UI.setAttribute("fee_blue", "text", fee_blue)
end
这是相关的 XML 代码(在全局 UI 文件中):
<InputField
id="effective_bid_blue"
active="false"
characterLimit="4"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="-285 -150"
onValueChanged="64453f/adjustBidBlue"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
visibility="Blue"
width="85">
</InputField>
<InputField
id="reputation_blue"
active="false"
characterLimit="2"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="-95 -150"
onValueChanged="64453f/adjustReputationBlue"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
visibility="Blue"
width="85">
</InputField>
<InputField
id="fee_blue"
active="false"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="95 -150"
readOnly="true"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
width="85"
visibility="Blue">
</InputField>
如果您想查看完整代码,请访问 GitHub。它在 Steam 创意工坊中。
非常感谢!