bayuMIR/client/dev/GUILayout/ssrgame/util/hk.lua
2026-06-12 02:32:15 +08:00

720 lines
20 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local hk = {}
hk.titlttbl = SL:GetMetaValue("TITLES")
local function title_reload()
hk.titlttbl = SL:GetMetaValue("TITLES")
end
SL:RegisterLUAEvent(LUA_EVENT_ROLE_PROPERTY_INITED, "称号刷新", title_reload)
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_TITLE_CHANGE, "称号刷新", title_reload)
hk.att_score = SL:Require("scripts/game_config/cfg_att_score")
-- 获取键值
---* 参数1 变量
---* 参数2 键名
function hk.getkeycount(var, key)
local str = SL:Get_SERVER_VALUE(var)
local data = str and SL:JsonDecode(str) or {}
return data["J_" .. key] or nil
end
-- 获取键值返回键值表
---* 参数1 玩家对象
---* 参数2 变量
---* return tbl
function hk.getkeytbl(var)
local str = SL:Get_SERVER_VALUE(var)
local data = str and SL:JsonDecode(str) or {}
local newData = {}
for key, value in pairs(data or {}) do
local new_key = key:gsub("J_", "")
newData[tonumber(new_key) and tonumber(new_key) or new_key] = value
end
return newData
end
---* 消耗横排自适应
---* 参数一 父节点的快捷子控件组
---* 参数二 父节点对象
---* 参数三 消耗表
---* 参数四 动画增长方式 1: 从上到下(从左到右)(多行从左上角), 2中间到两边多行从右上角, 3从下到上从右到左
---* 参数五 1垂直; 2: 水平; 3 两者
---* 参数六 多行列数dir必须是3
---* 参数七 interval增长方式动画播放时间间隔, 不传值则不播放动画
---* 参数八 背景图路径
---* 参数九 间距
---* 参数十 物品缩放比例 默认1
---* 参数十一 物品数量显示
function hk.SettingXhShow(ui, parent, tbl, adddir, dir, colnum, interval, bgpic, gap, scale, numshow)
bgpic = bgpic or "res/public/1900000651.png"
for i, v in ipairs(tbl or {}) do
local xh_img = "xh_img" .. i
ui[xh_img] = GUI:Image_Create(parent, xh_img, 0.00, 5.00, bgpic)
GUI:setTouchEnabled(ui[xh_img], false)
GUI:setTag(ui[xh_img], -1)
GUI:Win_SetParam(ui[xh_img], i)
GUI:setChildrenCascadeOpacityEnabled(ui[xh_img], true)
GUI:setScale(ui[xh_img], scale or 1)
local setData = {}
if type(v) == "table" then
setData.index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", v[1])
else
setData.index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", v)
end
local count = v[2] or 1
setData.look = true -- 是否显示tips
setData.bgVisible = false -- 是否显示背景框
setData.count = not numshow and count or 1 -- 物品数量
local xh_item = "xh_item" .. i
local bg_Size = GUI:getContentSize(ui[xh_img])
ui[xh_item] = GUI:ItemShow_Create(ui[xh_img], xh_item, bg_Size.width / 2, bg_Size.height / 2, setData)
-- GUI:setScale(ui[xh_item], 0.8)
if scale then
GUI:setScale(ui[xh_item], scale)
end
GUI:setAnchorPoint(ui[xh_item], 0.50, 0.50)
GUI:setChildrenCascadeOpacityEnabled(ui[xh_item], true)
if numshow then
local id_numshow = "bag_show_num_" .. i
if GUI:Win_IsNotNull(parent[id_numshow]) then
GUI:removeFromParent(parent[id_numshow])
end
local bag_list = SL:GetMetaValue("ITEM_COUNT", setData.index)
local text_color = "#ff0000"
if bag_list >= count then
text_color = "#00ff00"
end
parent[id_numshow] = GUI:Text_Create(ui[xh_img], id_numshow, bg_Size.width, 0, 12, text_color,
string.format("%s/%s", SL:GetSimpleNumber(bag_list, 0), SL:GetSimpleNumber(count, 0)))
GUI:setAnchorPoint(parent[id_numshow], 1, 0)
GUI:Text_enableOutline(parent[id_numshow], "#000000", 2)
end
end
if not adddir then
adddir = 2
end
if not dir then
dir = 2
end
if not colnum then
colnum = 1
end
if not interval then
interval = 0.8
end
if not gap then
gap = 0
end
GUI:UserUILayout(parent, {
dir = dir,
addDir = adddir,
interval = interval,
colnum = colnum,
gap = { x = gap },
sortfunc = function(lists)
table.sort(lists, function(a, b)
return GUI:Win_GetParam(a) > GUI:Win_GetParam(b)
end)
end
})
end
---* 更新物品框内容
---* 父节点对象 parent
---* 物品名称 ItemName
---* 物品数量 ItemCount
---* 是否显示tips tips
function hk.reloadItemShow(parent, ItemName, ItemCount, ItemData, tips, numshow)
if tips == nil then
tips = true
end
local setData = {}
setData.index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", ItemName) -- 物品Index
setData.look = tips -- 是否显示tips
setData.bgVisible = false -- 是否显示背景框
setData.count = not numshow and ItemCount or nil -- 物品数量
setData.starLv = true -- 是否显示星级
-- setData.onlyShowSFX = true -- 只显示道具特效其它都不显示
setData.showModelEffect = false -- 只显示内观特效不显示背包特效
if ItemData then
setData.itemData = ItemData
end
GUI:ItemShow_updateItem(parent, setData)
if numshow then
local id_numshow = "bag_show_num"
if GUI:Win_IsNotNull(parent[id_numshow]) then
GUI:removeFromParent(parent[id_numshow])
end
local bag_list = SL:GetMetaValue("ITEM_COUNT", ItemName)
local text_color = "#ff0000"
if bag_list >= ItemCount then
text_color = "#00ff00"
end
parent[id_numshow] = GUI:Text_Create(parent, id_numshow, GUI:getContentSize(parent).width, 0, 12, text_color,
string.format("%s/%s", SL:GetSimpleNumber(bag_list, 0), SL:GetSimpleNumber(ItemCount, 0)))
GUI:setAnchorPoint(parent[id_numshow], 1, 0)
GUI:Text_enableOutline(parent[id_numshow], "#000000", 2)
end
end
---* 获得玩家当前地图ID
function hk.getmapid()
return SL:GetMetaValue("MAP_ID")
end
---* 发送sendmsg9
function hk.sendmsg(msg)
if not msg then
return
end
local part = SL:Split(msg, "|")
local str = {}
for i, v in ipairs(part) do
local plist = {}
if string.find(v, "#", 1, true) == nil then
plist[1] = v
plist[2] = "251"
else
plist = SL:Split(v, "#")
end
if not plist[2] then
plist[2] = "251"
end
table.insert(str, "<font color='" .. SL:GetHexColorByStyleId(tonumber(plist[2])) .. "'>" .. plist[1] .. "</font>")
end
local msg_data = {}
msg_data.Type = 9
msg_data.Msg = table.concat(str)
SL:ShowLocalNoticeByType(msg_data)
-- body
end
local check_contrast = {
["等于"] = function(a, b)
if a == b then
return true
else
return false
end
end,
["大于"] = function(a, b)
if a > b then
return true
else
return false
end
end,
["小于"] = function(a, b)
if a < b then
return true
else
return false
end
end,
["大于等于"] = function(a, b)
if a >= b then
return true
else
return false
end
end,
["小于等于"] = function(a, b)
if a <= b then
return true
else
return false
end
end,
["不等于"] = function(a, b)
if a ~= b then
return true
else
return false
end
end,
["不小于"] = function(a, b)
if a >= b then
return true
else
return false
end
end,
["不大于"] = function(a, b)
if a < b then
return true
else
return false
end
end,
}
local check_cond_tbl = {
["检测等级"] = function(tbl)
if SL:GetMetaValue("LEVEL") >= tbl[2] then
return true
else
return false
end
end,
["检测转生"] = function(tbl)
local func = check_contrast[tbl[2]]
if func then
if func(SL:GetMetaValue(ssrConstCfg.MetaValue.relevel), tbl[3]) then
return true
else
return false
end
end
end,
["检测键值数字"] = function(tbl)
if not tbl then
return false
end
local func = check_contrast[tbl[4]]
if func then
if func(hk.getkeycount(tbl[2], tbl[3]), tbl[5]) then
return true
else
return false
end
end
end,
["比较数字变量"] = function(tbl)
local func = check_contrast[tbl[3]]
if func then
local key_value = tonumber(SL:GetMetaValue("SERVER_VALUE", tbl[2])) or 0
if func(key_value, tbl[4]) then
return true
else
return false
end
end
end,
["检测标识"] = function(tbl)
if tonumber(SL:GetMetaValue("SERVER_VALUE", "{" .. tostring(tbl[2]) .. "}")) == tbl[3] then
return true
else
return false
end
end,
["检测称号"] = function(tbl)
-- SL:dump(tbl)
if SL:GetMetaValue("TITLE_DATA_BY_ID", SL:GetMetaValue("ITEM_INDEX_BY_NAME", tbl[2])) ~= nil then
return true
else
return false
end
end,
["检测无称号"] = function(tbl)
local titleTbl = hk.titlttbl or SL:GetMetaValue("TITLES")
for i, v in ipairs(titleTbl) do
local title_name = SL:GetMetaValue("ITEM_NAME", v.id)
if title_name == tbl[2] then
return false
end
end
return true
end,
["检测货币"] = function(tbl)
local money_num = 0
local money_idx = tonumber(SL:GetMetaValue("ITEM_INDEX_BY_NAME", tbl[2])) or 0
local duohuobi = 0
if not tbl[4] then
duohuobi = 1
else
duohuobi = tbl[4]
end
if duohuobi > 0 then
money_num = tonumber(SL:GetMetaValue("MONEY_ASSOCIATED", money_idx)) or 0
else
money_num = tonumber(SL:GetMetaValue("MONEY", money_idx)) or 0
end
if money_num >= tbl[3] then
return true
end
return false
end,
["检测文本包含"] = function(tbl)
if not tbl then
return
end
local value = SL:GetMetaValue("SERVER_VALUE", tbl[2])
if string.match(value, tbl[3]) then
return true
end
return false
end,
["检测文本变量"] = function(tbl)
local func = check_contrast[tbl[3]]
if not tbl[4] then
tbl[4] = ""
end
if func then
if func(SL:GetMetaValue("SERVER_VALUE", tbl[2]), tbl[4]) then
return true
else
return false
end
end
end,
["检测物品"] = function(tbl)
if not tbl then
return
end
local item_num = tonumber(SL:GetMetaValue("ITEM_COUNT", tbl[2])) or 0
if item_num >= tbl[3] then
return true
else
return false
end
end,
["检测日期区间"] = function(tbl)
local function isDateInRange(startDate, endDate)
local currentDate = os.date("%Y-%m-%d")
return currentDate >= startDate and currentDate <= endDate
end
if isDateInRange(tbl[2], tbl[3]) then
return true
else
return false
end
end,
}
---* 批量判定条件
---* 参数一 玩家对象
---* 参数二 检查表
function hk.checkcontion(tbl)
if tbl == nil then
return true
end
-- SL:dump(tbl)
local tbl_num = 0
for i, v in pairs(tbl) do
local func = check_cond_tbl[v[1]]
if func then
if func(v) then
tbl_num = tbl_num + 1
else
break
end
end
end
if tbl_num == #tbl then
return true
else
return false
end
end
function hk.wenhao_tips(obj, parent, Tips_str, pos)
local ext = {
count = 12,
speed = 100,
loop = -1,
finishhide = 0
}
obj.frames2 = GUI:Frames_Create(obj[parent], "frames2", pos.x, pos.y, "res/custom/w/1_", ".png", 1, 12, ext)
-- Create Layout
obj.w_Layout = GUI:Layout_Create(obj[parent], "w_Layout", pos.x, pos.y, 70.00, 70.00, false)
GUI:setTouchEnabled(obj.w_Layout, true)
GUI:setTag(obj.w_Layout, -1)
local str = table.concat(Tips_str, "\\")
local param = {
checkCallback = function(touchPos)
if touchPos and GUI:isClippingParentContainsPoint(obj.w_Layout, touchPos) then
return true
end
return false
end
}
GUI:addMouseOverTips(obj.w_Layout, str, nil, nil, param)
GUI:addOnClickEvent(obj.w_Layout, function()
local data = { width = 1136, str = str, worldPos = GUI:getWorldPosition(obj.w_Layout), anchorPoint = { x = 0, y = 1 } }
SL:OpenCommonDescTipsPop(data)
end)
end
---* 验证冷却时间
---* 玩家对象
---* 时间戳变量
---* 间隔时间
function hk.check_cd(var, num)
if var == nil then
return true
end
if num == nil then
return false
end
num = tonumber(num)
local to_time = os.time()
local _cd = tonumber(SL:GetMetaValue("SERVER_VALUE", var)) or 0
-- LOGPrint(to_time,_cd,num)
if (to_time - _cd) >= num then
return true
else
return false
end
end
---* 通用充值拉起窗口
function hk.changgeparent(parent, change_id, money_num, chang_msg)
-- Create chang_Node
local chang_Node = GUI:Node_Create(parent, "chang_Node", 0.00, 0.00)
GUI:setTag(chang_Node, -1)
GUI:setPosition(chang_Node, SL:GetMetaValue("SCREEN_WIDTH") / 2, SL:GetMetaValue("SCREEN_HEIGHT") / 2)
GUI:setAnchorPoint(chang_Node, 0.50, 0.50)
local chang_bg_close = GUI:Layout_Create(chang_Node, "chang_bg_close", 0.00, 0.00, SL:GetMetaValue("SCREEN_WIDTH"),
SL:GetMetaValue("SCREEN_HEIGHT"), false)
GUI:Layout_setBackGroundColorType(chang_bg_close, 1)
GUI:Layout_setBackGroundColor(chang_bg_close, "#000000")
GUI:Layout_setBackGroundColorOpacity(chang_bg_close, 60)
GUI:setTouchEnabled(chang_bg_close, true)
GUI:setTag(chang_bg_close, -1)
GUI:setAnchorPoint(chang_bg_close, 0.50, 0.50)
GUI:addOnClickEvent(chang_bg_close, function()
ssrMessage:sendmsg(ssrNetMsgCfg.chongzhiZhongxin_claerT88)
GUI:removeFromParent(chang_Node)
end)
-- Create change_img
local change_img = GUI:Image_Create(chang_Node, "change_img", 0.00, 0.00, "res/public/1900000677.png")
GUI:Image_setScale9Slice(change_img, 5, 5, 5, 5)
GUI:setContentSize(change_img, 350, 150)
GUI:setIgnoreContentAdaptWithSize(change_img, false)
GUI:setAnchorPoint(change_img, 0.50, 0.50)
GUI:setTouchEnabled(change_img, true)
GUI:setTag(change_img, -1)
GUI:setScaleX(change_img, 0.01)
-- Create Text
local Text = GUI:Text_Create(change_img, "Text", 177.00, 129.00, 16, "#ffffff", chang_msg)
GUI:setAnchorPoint(Text, 0.50, 0.50)
GUI:setTouchEnabled(Text, false)
GUI:setTag(Text, -1)
GUI:Text_enableOutline(Text, "#000000", 1)
-- Create Text_1
local Text_1 = GUI:Text_Create(change_img, "Text_1", 105.00, 83.00, 16, "#ffff00", [[充值金额:]])
GUI:setTouchEnabled(Text_1, false)
GUI:setTag(Text_1, -1)
GUI:Text_enableOutline(Text_1, "#000000", 2)
-- Create Text_1_1
local Text_1_1 = GUI:Text_Create(change_img, "Text_1_1", 179.00, 83.00, 16, "#00ff00", money_num .. [[元]])
GUI:setTouchEnabled(Text_1_1, false)
GUI:setTag(Text_1_1, -1)
GUI:Text_enableOutline(Text_1_1, "#000000", 2)
-- Create Button
local chang_Button_1 = GUI:Button_Create(change_img, "chang_Button_1", 23.00, 18.00,
"res/private/powerful_secret/bg_czzya_05.png")
GUI:Button_setTitleText(chang_Button_1, "")
GUI:Button_setTitleColor(chang_Button_1, "#ffffff")
GUI:Button_setTitleFontSize(chang_Button_1, 14)
GUI:Button_titleEnableOutline(chang_Button_1, "#000000", 1)
GUI:setTouchEnabled(chang_Button_1, true)
GUI:setTag(chang_Button_1, -1)
GUI:addOnClickEvent(chang_Button_1, function()
SL:RequestPay(1, change_id, money_num, nil)
end)
-- Create Button_1
local chang_Button_2 = GUI:Button_Create(change_img, "chang_Button_2", 131.00, 18.00,
"res/private/powerful_secret/bg_czzya_06.png")
GUI:Button_setTitleText(chang_Button_2, "")
GUI:Button_setTitleColor(chang_Button_2, "#ffffff")
GUI:Button_setTitleFontSize(chang_Button_2, 14)
GUI:Button_titleEnableOutline(chang_Button_2, "#000000", 1)
GUI:setTouchEnabled(chang_Button_2, true)
GUI:setTag(chang_Button_2, -1)
GUI:addOnClickEvent(chang_Button_2, function()
SL:RequestPay(2, change_id, money_num, nil)
end)
-- Create Button_1_1
local chang_Button_3 = GUI:Button_Create(change_img, "chang_Button_3", 239.00, 18.00,
"res/private/powerful_secret/bg_czzya_04.png")
GUI:Button_setTitleText(chang_Button_3, "")
GUI:Button_setTitleColor(chang_Button_3, "#ffffff")
GUI:Button_setTitleFontSize(chang_Button_3, 14)
GUI:Button_titleEnableOutline(chang_Button_3, "#000000", 1)
GUI:setTouchEnabled(chang_Button_3, true)
GUI:setTag(chang_Button_3, -1)
GUI:addOnClickEvent(chang_Button_3, function()
SL:RequestPay(3, change_id, money_num, nil)
end)
local ScaleX = GUI:ActionScaleTo(0.2, 1.0, 1.0, 1.0)
GUI:runAction(change_img, ScaleX)
end
---* 测试区状态判定
function hk.sever_state()
local sever_name = SL:GetMetaValue("SERVER_NAME")
if string.find(sever_name, "测试", 1, true) ~= nil or string.find(sever_name, "工具服", 1, true) ~= nil or sever_name == "" then
return true
else
return false
end
end
---* 获取玩家阵营
function hk.getzhongzu()
local camp = SL:GetMetaValue("SERVER_VALUE", "T17")
if camp == "" then
return false
end
if camp == "" then
return 0
elseif camp == "" then
return 1
end
end
---* 前端引导窗口
function hk.guide(ui, dir, widget, _parent, text, func, isForce)
local data = {}
data.dir = dir -- 方向1~8从左按瞬时针
data.guideWidget = widget -- 当前节点
data.guideParent = _parent -- 父窗口
data.guideDesc = text -- 文本描述
data.clickCB = func
data.isForce = isForce -- 强制引导
return SL:StartGuide(data)
end
---* 获得装备 基础属性
---* 参数一 属性值: 3#X#X|3#X#X
---返回table 属性名:+值
function hk.getequipAttribute(data)
if not data then
return nil
end
local attList = GUIFunction:ParseItemBaseAtt(data)
-- 属性显示队列
local stringAtt = GUIFunction:GetAttDataShow(attList, nil, true)
local attStr = {}
for k, v in pairs(stringAtt or {}) do
table.insert(attStr,
string.format("<%s%s%s/FCOLOR=%s>", v.name, v.color and "+ " or "", v.value, v.color and v.color or "250"))
end
return attStr
end
---* 合并消耗表
---* 主表
---* 次表
---@param t1 any
---@param t2 any
function hk.deep_merge(t1, t2)
local new_t = {}
for i, v in ipairs(t1) do
local item1 = v[1]
local found = false
for t2_key, t2_v in ipairs(t2) do
local item2 = t2_v[1]
if item1 == item2 then
found = true
table.insert(new_t, { item1, t2_v[2] + v[2], v[3] })
end
end
if not found then
table.insert(new_t, v)
end
end
return new_t
end
---* 获得变量
function hk.getvalue(param)
local _value = SL:Get_SERVER_VALUE(param)
return tonumber(_value) and tonumber(_value) or _value
end
return hk