文章编辑人员:雪舞
内容测试时间:2023-7-4 15:34:36
测试版本:新武侠世界
有问题的代码:
function x900011_RefreshEquipGemGrade(sceneId,selfId,EquipBagIndex,GemPos)
local NowGemInfo = {} --宝石信息组
local FinalData = ""
local GemXiulian,GemJingJie = 0,0
local nGem1,nGem2,nGem3,nGem4 = LuaFnGetGemInfoInEquip(sceneId,selfId,EquipBagIndex)
local nGemData = {nGem1,nGem2,nGem3,nGem4}
for i = 1,4 do
if nGemData[i] ~= -1 and nGemData[i] ~= 0 then
tinsert(NowGemInfo,nGemData[i])
end
end
for i = 1,getn(NowGemInfo) do --计算原有评分
local nGrade_1,nGrade_2 = LuaFnGetGemGradeInfo(NowGemInfo[i]);
GemXiulian = GemXiulian + nGrade_1
GemJingJie = GemJingJie + nGrade_2
end
if GemPos ~= nil then --处理摘除时的特殊情况!!!
local Gem_SplitID = LuaFnGetItemTableIndexByIndex( sceneId, selfId, GemPos )
local nGrade_1,nGrade_2 = LuaFnGetGemGradeInfo(Gem_SplitID);
GemXiulian = GemXiulian - nGrade_1
GemJingJie = GemJingJie - nGrade_2
end
local _,Data = LuaFnGetItemCreator(sceneId, selfId, EquipBagIndex)
local FinalGrade = ""
if GemXiulian > 1 and GemXiulian < 100 then --特殊情况
FinalGrade = "0"..tostring(GemXiulian)
end
if GemXiulian >= 100 and GemXiulian < 1000 then
FinalGrade = tostring(GemXiulian)
end
if GemXiulian == 0 or GemXiulian < 0 then --做一次极端情况处理
FinalData = ""
else
FinalData = "&BS"..tostring(FinalGrade)
end
if Data ~= nil and Data ~= "" then
if strfind(Data,"&BS") ~=nil then
if getn(NowGemInfo) == 0 then --没有宝石
FinalData = gsub(Data,"&BS(%w%w%w)","")
else
FinalData = gsub(Data,"&BS(%w%w%w)",FinalData)
end
else
FinalData = Data..FinalData
end
LuaFnSetItemCreator( sceneId, selfId, EquipBagIndex, FinalData )
else
LuaFnSetItemCreator( sceneId, selfId, EquipBagIndex, FinalData )
end
end
我看到的代码是处理宝石级别的Lua函数,你提到的问题看起来是在处理宝石级别时,对于一位数级别的宝石,代码生成的字符串只有2位数字,而你需要3位数字。这可能是因为对于宝石级别的处理方式没有正确处理一位数级别的情况。
在这个函数中,你是用一个字符串 'FinalGrade' 来表示宝石的级别。对于一位数级别的宝石,你只添加了一个 '0' 前缀,所以生成的字符串只有2位数字。对于二位数和三位数级别的宝石,你没有添加任何前缀,所以生成的字符串有2位或3位数字。
你可能需要在一位数级别的宝石前添加两个 '0' ,以保证所有的级别字符串都有3位数字。你可以通过修改这个部分的代码来实现这个目标:
if GemXiulian > 1 and GemXiulian < 10 then --特殊情况
FinalGrade = "00"..tostring(GemXiulian)
end
if GemXiulian >= 10 and GemXiulian < 100 then
FinalGrade = "0"..tostring(GemXiulian)
end
if GemXiulian >= 100 and GemXiulian < 1000 then
FinalGrade = tostring(GemXiulian)
end
有个问题出现了&BS04的情况 ,一般情况下都是&BS040,使用新代码后,这样应该就可以解决你的问题了。
解决后:
|