159 lines
No EOL
5.3 KiB
Lua
159 lines
No EOL
5.3 KiB
Lua
-- local cfg_att_score = ssrRequireGameCfg("cfg_att_score")
|
||
local _attrgroup = {{3,4},{5,6},{7,8},{9,10},{11,12}} --属性组:攻击 魔法 道术 防御 魔御 的下上限idx
|
||
local _attrname = {[3]="攻%s击", [5]="魔%s法", [7]="道%s术", [9]="防%s御", [11]="魔%s御"}
|
||
function ssrAttrToClient(attr, state, chnum)
|
||
state = state or 0
|
||
|
||
--深拷贝表
|
||
local newattr = SL:CopyData(attr)
|
||
local attridxs = {}
|
||
for i,v in ipairs(newattr) do
|
||
attridxs[i] = tonumber(v[1])
|
||
end
|
||
|
||
--重组属性
|
||
for _,v in ipairs(_attrgroup) do
|
||
local loweridx, upperidx = v[1], v[2]
|
||
local lower, upper = table.indexof(attridxs, loweridx), table.indexof(attridxs, upperidx)
|
||
if lower and upper then --同时有某上下限属性
|
||
table.remove(attridxs, upper)
|
||
local upper_attr = table.remove(newattr, upper)
|
||
-- SL:Print("=============================")
|
||
-- SL:dump(newattr,"添加前1111111")
|
||
-- SL:dump(upper_attr,"upper_attr")
|
||
table.insertto(newattr[lower], upper_attr)
|
||
-- SL:dump(newattr,"添加后1111111")
|
||
-- SL:Print("=============================")
|
||
elseif lower and not upper then --有下限属性
|
||
-- SL:Print("=============================")
|
||
-- SL:dump(newattr,"添加前2222222222")
|
||
table.insertto(newattr[lower], {loweridx+1, 0})
|
||
-- SL:dump(newattr,"添加后2222222222")
|
||
-- SL:Print("=============================")
|
||
elseif not lower and upper then --有上限属性
|
||
table.insert(newattr[upper], 0, 1)
|
||
table.insert(newattr[upper], upperidx-1, 1)
|
||
end
|
||
end
|
||
|
||
--转显示属性
|
||
local showattr = {}
|
||
for i,v in ipairs(newattr) do
|
||
local idx = v[1]
|
||
local name = _attrname[idx] or cfg_att_score[idx].name
|
||
|
||
local value = ""
|
||
--下限 上限 值
|
||
local attrvalue1, attrvalue2 = v[2], v[4]
|
||
|
||
if state == 0 then
|
||
if not attrvalue2 then
|
||
local type = cfg_att_score[idx].type or 1
|
||
if type == 1 then
|
||
value = attrvalue1..""
|
||
elseif type == 2 then--万分比
|
||
if idx == 67 then
|
||
value = (attrvalue1*0.0001) .. "倍"
|
||
else
|
||
value = (attrvalue1 / 100) .. "%"
|
||
end
|
||
elseif type == 3 then --百分比
|
||
value = attrvalue1.."%"
|
||
end
|
||
end
|
||
else
|
||
value = state < 0 and "0" or "已满级"
|
||
end
|
||
|
||
if attrvalue2 then
|
||
local ch = ""
|
||
if chnum and chnum > 0 then
|
||
for i=1,chnum do ch = ch.." " end
|
||
end
|
||
name = string.format(name, ch)
|
||
if state == 0 then
|
||
value = attrvalue1.."-"..attrvalue2
|
||
else
|
||
value = state < 0 and "11111110-0" or "已满级"
|
||
end
|
||
end
|
||
name = name .. ":"
|
||
showattr[i] = {name=name, value=value}
|
||
end
|
||
|
||
return showattr
|
||
end
|
||
|
||
--[[
|
||
@desc: 配置表属性转客户端显示数据
|
||
--@cfg: table 配置表数据
|
||
--@index: number cfg表的下标索引 cfg[index]
|
||
--@field: string cfg表的下标索引中属性字段 cfg[index][field]
|
||
--@state: chnum 属性名中间的空格数
|
||
@return: table 客户端显示数据
|
||
]]
|
||
function ssrAttrToClientEx(cfg, index, field, chnum)
|
||
local newindex,state = index, 0
|
||
if index == 0 then
|
||
state = -1
|
||
newindex = 1
|
||
elseif index > #cfg then
|
||
state = 1
|
||
newindex = #cfg
|
||
end
|
||
local attr = cfg[index] and cfg[index][field] or cfg[newindex][field]
|
||
return ssrAttrToClient(attr, state, chnum)
|
||
end
|
||
|
||
-- 保留n位小数
|
||
function ssrKeepDecimalTest(num, n)
|
||
--整数直接返回
|
||
if num == math.floor(num) then return num end
|
||
--如果是负数转整数
|
||
local change = num < 0 and -1 or 1
|
||
if change==-1 then num = num * change end
|
||
--取整数与小数部分
|
||
local int = math.floor(num)
|
||
local decimal = num - int
|
||
--默认保留2位小数
|
||
n = n or 2
|
||
--获取小数放大倍数
|
||
local multiple = 1
|
||
for i=1, n do multiple = multiple * 10 end
|
||
--保留小数部分转整数并去除多余的小数部分 +0.1是为了解决lua中的bug
|
||
decimal = math.floor(decimal*multiple+0.1)
|
||
--整数部分+保留小数部分
|
||
num = int + (decimal/multiple)
|
||
--完美返回
|
||
return num * change
|
||
end
|
||
--type = 1:地面 2:背包 3:内观
|
||
function ssrGetLooksPath(looks, type)
|
||
type = type or 3
|
||
|
||
local index = string.format("%06d", looks)
|
||
local pathindex = math.floor(looks/10000)
|
||
local pathname
|
||
if type == 1 then
|
||
pathname = "item_ground"
|
||
elseif type == 2 then
|
||
pathname = "item"
|
||
else
|
||
pathname = "player_show"
|
||
end
|
||
return "res/"..pathname.."/" .. pathname.. "_" .. pathindex .. "/" .. index ..".png"
|
||
end
|
||
function ssrAttributeToArray(attribute)
|
||
local attrarr = {}
|
||
|
||
local arr_arr = SL:Split(attribute, "|")
|
||
for _,str in ipairs(arr_arr) do
|
||
local arr = SL:Split(str, "#")
|
||
if #arr == 3 then
|
||
table.remove(arr,1)
|
||
table.insert(attrarr, arr)
|
||
end
|
||
end
|
||
|
||
return attrarr
|
||
end |