-- Lua中的继承
function Inherit(tbParent, tbChild)
if not tbParent then
local o = tbChild or {}
setmetatable(o, { __index = o })
return o
else
local tb = tbChild or {}
tbParent.__index = tbParent
--local super_mt = getmetatable(tbParent)
setmetatable(tb, tbParent)
tb.super = setmetatable({}, tbParent)
return tb
end
end
--> 多继承
function InheritMulti(tbChild, ...)
local super = function(k, list)
for i, v in ipairs(list) do
local ret = v[k]
if ret then return ret end
end
end
local args = {...}
if #args < 1 then
local o = tbChild or {}
setmetatable(o, { __index = o })
return o
else
local tb = tbChild or {}
setmetatable(tb, {__index = function(t, k) return super(k, args) end})
return tb
end
end
function RandomList(arr)
if not arr or #arr <= 1 then
return
end
local index
for i = #arr, 1, -1 do
index = math.random(1, i)
arr[i], arr[index] = arr[index], arr[i]
end
end
--查找对象--
function find(str)
return GameObject.Find(str)
end
function destroy(obj)
GameObject.DestroyImmediate(obj)
end
function newObject(prefab)
return GameObject.Instantiate(prefab)
end
--适配
function screenAdapte(go)
--if Screen.width > 1080 or Screen.height > 1920 then
-- local scale = math.max(Screen.width / 1080, Screen.height / 1920)
-- go.transform.localScale = Vector3.one * scale
--end
end
function effectAdapte(go)
local scale = Screen.width / Screen.height / 1080 * 1920
--local scale = Screen.width / 1080
--local scale = 1920 / Screen.height
local v3 = go.transform.localScale
if scale <= 1 then
Util.SetParticleScale(go, scale)
end
go.transform.localScale = v3
end
--创建面板--
function createPanel(name)
PanelManager:CreatePanel(name)
end
function child(str)
return transform:FindChild(str)
end
function subGet(childNode, typeName)
return child(childNode):GetComponent(typeName)
end
function findPanel(str)
local obj = find(str)
if obj == nil then
error(str .. " is null")
return nil
end
return obj:GetComponent("BaseLua")
end
function ReloadFile(file_path)
package.loaded[file_path] = nil -- 消除载入记录
return require(file_path) -- 重新加载lua文件
end
function UnLoadLuaFiles(config)
for i, v in ipairs(config) do
package.loaded[v] = nil
package.preload[v] = nil
end
end
function LoadLuaFiles(config)
for i, v in ipairs(config) do
require(v)
end
end
--播放指定音效,在同一时刻点击音效不播放
function PlaySoundWithoutClick(sound)
SoundManager.PlaySound(sound)
Framework.PlayClickSoundThisTime = false
end
-- 连续弹出文字
-- 1 -- 使用正常Tip
-- 2 -- 使用带颜色的
function PopupText(strTable, delayTime, type)
local index = 1
local timer
timer = Timer.New(function()
if index == #strTable + 1 then
timer:Stop()
else
if type == 1 then
PopupTipPanel.ShowTip(strTable[index])
elseif type == 2 then
PopupTipPanel.ShowColorTip(strTable[index].name, strTable[index].icon, strTable[index].num)
end
index = index + 1
end
end, delayTime, #strTable * delayTime * 2)
timer:Start()
end
function Util_SetHeadImage(url, image, isSelf)
if image == nil then
return
end
if url == nil then
Util_SetToDefaultHeadImage(image)
return
end
if url == "" or url == "/0" then
Util_SetToDefaultHeadImage(image)
return
end
imageDownloadMgr:SetImage_Image(url, image, isSelf)
end
function Util_SetToDefaultHeadImage(image)
if image == nil then
return
end
local bundleName = "normal_asset"
local assetName = "Avatar"
local sprite = Util.LoadSprite("Platform", assetName)
image.sprite = sprite
end
function TextHelper_Get24HourTimeStr(time)
if time < 10 then
return "0" .. time
else
return time
end
end
function PrintWanNum(num)
if num >= 100000000 then
return string.format(GetLanguageStrById(12100), string.format("%.1f", num / 100000000))
elseif num >= 1000000 then
return tostring(math.floor(num / 10000)) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
function PrintWanNum2(num)
if num >= 100000000 then
return string.format(GetLanguageStrById(12100), string.format("%.1f", num / 100000000))
elseif num >= 100000 then
return tostring(math.floor(num / 10000)) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
function PrintWanNum3(num)
if num >= 100000000 then
return string.format(GetLanguageStrById(12100), string.format("%.2f", num / 100000000))
elseif num >= 100000 then
return string.format("%.2f",num / 10000) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
function PrintWanNum5(num,num2)
if num >= 100000000 then
return string.format(GetLanguageStrById(12100), string.format("%.2f", num / 100000000)) .."/"..string.format(GetLanguageStrById(12100), string.format("%.2f", num2 / 100000000))
elseif num >= 100000 then
return string.format("%.2f",num / 10000) .. GetLanguageStrById(10042).."/"..string.format("%.2f", num2 / 10000) .. GetLanguageStrById(10042)
else
return tostring(num).."/"..tostring(num2)
end
end
function PrintWanNum4(num)
if num >= 10000 then
return tostring(math.floor(num / 10000)) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
function PrintWanNum6(num)
if num >= 1000000000 then
return string.format("%.2f",num / 1000000000) .. GetLanguageStrById(23166)
elseif num >= 1000000 then
return string.format("%.2f",num / 1000000) .. GetLanguageStrById(23165)
elseif num >= 10000 then
return string.format("%.1f",num / 10000) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
function PrintPowerNum(num)
if num >= 100000000 then
return string.format(GetLanguageStrById(12100), string.format("%.1f", num / 100000000))
elseif num >= 1000000 then
return tostring(math.floor(num / 10000)) .. GetLanguageStrById(10042)
else
return tostring(num)
end
end
--判断两个时间在同一天
function Util_Check_insameday(time1, time2)
local date1 = os.date("*t", time1)
local date2 = os.date("*t", time2)
if date1.year == date2.year and date1.month == date2.month and date1.day == date2.day then
return true
end
return false
end
--判断两个时间在同一个月
function Util_Check_insamemonth(time1, time2)
local date1 = os.date("*t", time1)
local date2 = os.date("*t", time2)
if date1.year == date2.year and date1.month == date2.month then
return true
end
return false
end
--判断两个时间在同一星期
function Util_Check_insameweek(time1, time2)
local week_second = 7 * 24 * 3600
local time_zero = os.time { year = 2015, month = 1, day = 5, hour = 0, min = 0, sec = 0 }
local time1_tran = time1 - time_zero
local time2_tran = time2 - time_zero
local week1 = math.floor(time1_tran / week_second)
local week2 = math.floor(time2_tran / week_second)
if week1 == week2 then
return true
end
return false
end
--秒转换成文字对应时间
function GetTimeStrBySeconds(_seconds)
return os.date(GetLanguageStrById(10779), _seconds)
end
--秒转换成文字对应时间 只有分秒
function GetTimeMaoHaoStrBySeconds(_seconds)
return os.date("%M:%S", _seconds)
end
--当前时间转换成周几
function GetTimeWeekBySeconds(servertime)
local cruWeek = os.date("*t", servertime).wday - 1
if cruWeek == 0 then
GetLanguageStrById(50137)
elseif cruWeek == 1 then
GetLanguageStrById(50138)
elseif cruWeek == 2 then
GetLanguageStrById(50139)
elseif cruWeek == 3 then
GetLanguageStrById(50140)
elseif cruWeek == 4 then
GetLanguageStrById(50141)
elseif cruWeek == 5 then
GetLanguageStrById(50142)
elseif cruWeek == 6 then
GetLanguageStrById(50143)
end
end
function PrintTable(root)
local cache = { [root] = "." }
local function _dump(t, space, name)
if type(t) == "table" then
local temp = {}
for k, v in pairs(t) do
local key = tostring(k)
if cache[v] then
tinsert(temp, "+" .. key .. " {" .. cache[v] .. "}")
elseif type(v) == "table" then
local new_key = name .. "." .. key
cache[v] = new_key
tinsert(temp, "+" .. key .. _dump(v, space .. (next(t, k) and "|" or " ") .. srep(" ", #key), new_key))
else
tinsert(temp, "+" .. key .. " [" .. tostring(v) .. "]")
end
end
return tconcat(temp, "\n" .. space)
end
end
print(_dump(root, "", ""))
end
local isPcall = true
--用于查找错误用
function MyPCall(func)
if not isPcall then
func()
return
end
local flag, msg = pcall(func)
if not flag then
Util.LogError(msg)
end
end
function PlayUIAnims(gameObject, callback)
local anims = gameObject:GetComponentsInChildren(typeof(PlayFlyAnim))
if anims.Length > 0 then
for i = 0, anims.Length - 1 do
anims[i]:PlayAnim(false, callback)
end
end
end
function PlayUIAnimBacks(gameObject, callback)
local anims = gameObject:GetComponentsInChildren(typeof(PlayFlyAnim))
if anims.Length > 0 then
for i = 0, anims.Length - 1 do
anims[i]:PlayHideAnim(callback)
end
end
end
function PlayUIAnim(gameObject, callback)
local anim = gameObject:GetComponent(typeof(PlayFlyAnim))
if anim then
anim:PlayAnim(false, callback)
end
end
function PlayUIAnimBack(gameObject, callback)
--local anim = gameObject:GetComponent(typeof(PlayFlyAnim))
local anim = gameObject:GetComponent("PlayFlyAnim")
if anim then
anim:PlayHideAnim(callback)
end
end
--地图uv坐标
function Map_UV2Pos(u, v)
return u * 256 + v
end
--地图uv坐标
function Map_Pos2UV(pos)
return math.floor(pos / 256), pos % 256
end
-- 公会地图坐标精细化处理
function GuildMap_UV2Pos(u, v)
-- return u * 256 + v
local _u = math.floor(u *100)
local _v = math.floor(v *100)
return _u * 25600 + _v
end
function GuildMap_Pos2UV(pos)
-- return math.floor(pos / 256), pos % 256
local _u = math.floor(pos/25600)/100
local _v = pos%25600/100
return math.round(_u), math.round(_v), _u, _v
end
--把英雄星级父对象和星级传过来 type 1 第6-11个预设 type 2 第12-16个预设 prefabAligment 1 左对齐 2 居中 默认居中
--> _scale 为spacing
function SetHeroStars(starGrid, star, scale)
scale = scale or 1
local starPre
if Util.GetGameObject(starGrid, "starGridMiddle") then
starPre = Util.GetGameObject(starGrid, "starGridMiddle")
else
local prefab = resMgr:LoadAsset("starGridMiddle")
starPre = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, starGrid.transform)
starPre:SetActive(true)
starPre.name = "starGridMiddle"
starPre:GetComponent("RectTransform").anchoredPosition = Vector3.zero
starPre:GetComponent("RectTransform").localScale = Vector3.one * scale
-- starPre.transform:SetAsFirstSibling()
end
local starIcon = Util.GetGameObject(starPre,"starIcon"):GetComponent("Image")
starIcon.sprite = Util.LoadSprite("X1_tongyong_xingji_"..star)
end
function SetHeroBg(bg, frame, quality, star)
frame:GetComponent("Image").sprite = Util.LoadSprite(GetCardFrame(star))
bg:GetComponent("Image").sprite = Util.LoadSprite(GetQuantityBgImageByquality(quality, star))
end
--把英雄星级父对象和星级传过来
local star2index = {
[1] = {3},
[2] = {2, 4},
[3] = {2, 3, 4},
[4] = {1, 2, 4, 5},
[5] = {1, 2, 3, 4, 5}
}
function SetCardStars(starGrid, star)
for i = 1, 15 do
starGrid.transform:GetChild(i - 1).gameObject:SetActive(false)
end
if star < 6 then
for _, i in ipairs(star2index[star]) do
starGrid.transform:GetChild(i - 1).gameObject:SetActive(true)
end
elseif star > 5 and star < 10 then
for _, i in ipairs(star2index[star-5]) do
starGrid.transform:GetChild(5 + i - 1).gameObject:SetActive(true)
end
elseif star > 9 then
starGrid.transform:GetChild(star).gameObject:SetActive(true)
end
end
-- 在给定节点下加载预设, 返回实例化的预设
function newObjToParent(prefab, parent)
local go = newObject(prefab)
go.transform:SetParent(parent.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
go:SetActive(true)
return go
end
-- 清除节点下所有的子节点
function ClearChild(parent)
Util.ClearChild(parent.transform)
end
-- 加载一个商店使用的item
function AddShopItem(parent, itemId, shopType)
local item = SubUIManager.Open(SubUIConfig.ShopItemView, parent.transform)
item:OnOpen(itemId, shopType)
return item
end
-- 根据ID返回物品的Icon,配置数据在artResourceConfig中
function SetIcon(id)
if not id or id == 0 then
return
end
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local icon = nil
local resId = itemConfig[id].ResourceID
if not resId then
return
end
local resPath = GetResourcePath(resId)
if not resPath then
return
end
icon = Util.LoadSprite(resPath)
return icon
end
function SetFrame(id)
if not id or id == 0 then
return
end
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local icon = nil
local resId = itemConfig[id].Quantity
if not resId then
return
end
icon = Util.LoadSprite(GetQuantityImageByquality(resId))
return icon
end
--属性表ID转换表
function GetProIndexByProId(proId)
local proIndex = 0
if proId == 1 then
-- 最大生命
proIndex = 3
elseif proId == 2 then
-- 攻击力
proIndex = 4
elseif proId == 3 then
-- 护甲
proIndex = 5
elseif proId == 4 then
-- 魔抗
proIndex = 6
elseif proId == 5 then
-- 速度
proIndex = 7
elseif proId == 6 or proId == 67 or proId == 68 then
-- 当前生命值
proIndex = 2
elseif proId == 51 then
-- 伤害加成
proIndex = 8
elseif proId == 52 then
-- 伤害减免
proIndex = 9
elseif proId == 53 then
-- 效果命中
proIndex = 10
elseif proId == 54 then
-- 效果抵抗
proIndex = 11
elseif proId == 55 then
-- 暴击率
proIndex = 12
elseif proId == 56 then
-- 暴伤
proIndex = 13
elseif proId == 57 then
-- 回复率
proIndex = 14
elseif proId == 101 then
-- 火焰伤害
proIndex = 15
elseif proId == 102 then
-- 狂风伤害
proIndex = 16
elseif proId == 103 then
-- 碧水伤害
proIndex = 17
elseif proId == 104 then
-- 大地伤害
proIndex = 18
elseif proId == 105 then
-- 神圣伤害
elseif proId == 106 then
-- 黑暗伤害
elseif proId == 107 then
-- 火焰抗性
elseif proId == 108 then
-- 狂风抗性
elseif proId == 109 then
-- 碧水抗性
elseif proId == 110 then
-- 大地抗性
elseif proId == 111 then
-- 神圣抗性
elseif proId == 112 then
-- 黑暗抗性
end
return proIndex
end
--逐渐显示对应文字内容,若在此期间点击屏幕,则立刻显示完文字内容
function ShowText(go, str, duration, callBack)
local text = go:GetComponent("Text")
text.text = ""
local tween = text:DOText(str, duration)
local isClick = false
tween:OnUpdate(function()
if Input.GetMouseButtonDown(0) then
isClick = true
end
if isClick then
if tween then
tween:Kill()
go:GetComponent("Text").text = str
if callBack then
callBack()
end
end
end
end)
tween:OnComplete(callBack)
end
-- 将秒转换成分:秒格式返回
function SetTimeFormation(seconds)
local str = ""
local ten_minute = math.modf(seconds / 600)
local minute = math.modf(seconds / 60) % 10
local ten_second = math.modf(seconds / 10) % 6
local second = seconds % 10
str = ten_minute .. minute .. " : " .. ten_second .. second
return str
end
function Dump(data, showMetatable, lastCount)
if type(data) == "table" then
--Format
local count = lastCount or 0
count = count + 1
local B2 = ""
for i = 1, count do
B2 = B2 .. " "
end
--Metatable
if showMetatable then
local blank = " "
for i = 1, count do
blank = blank .. " "
end
local mt = getmetatable(data)
Dump(mt, showMetatable, count)
end
--Key
for key, value in pairs(data) do
local blank = " "
for i = 1, count do
blank = blank .. " "
end
if type(key) == "string" then
elseif type(key) == "number" then
else
end
Dump(value, showMetatable, count)
end
--Format
local B0 = " "
for i = 1, lastCount or 0 do
B0 = B0 .. " "
end
end
--Format
if not lastCount then
end
end
function GetStr(data)
local str = ""
if type(data) ~= "table" then
--Value
if type(data) == "string" then
str = ("\"" .. data .. "\"")
elseif data == nil then
str = "nil"
else
str = (string.format("%s", data))
end
end
return str
end
---获得未指定的英雄头像名字
---@param quality any
---@return string
function GetNoTargetHero(quality)
if quality == 3 then
return "X1_icon_3xingyingxiongsuipian"
elseif quality == 4 then
return "X1_icon_4xingyingxiongsuipian"
elseif quality == 5 then
return "X1_icon_5xingyingxiongsuipian"
else
return "X1_icon_6xingyingxiongsuipian"
end
end
--通过item稀有度读取背景框
function GetQuantityImageByquality(quality,star)
if star then--and star > 5
if star == 1 then
return "X1_tongyong_daojukuang_01"
elseif star == 2 then
return "X1_tongyong_daojukuang_02"
elseif star == 3 then
return "X1_tongyong_daojukuang_03"
elseif star == 4 then
return "X1_tongyong_daojukuang_04"
elseif star == 5 then
return "X1_tongyong_daojukuang_05"
elseif star >= 6 and star <= 10 then
return "X1_tongyong_daojukuang_06"
elseif star > 10 then
return "X1_tongyong_daojukuang_06"
end
else
if quality == 0 or quality == 1 then
return "X1_tongyong_daojukuang_01"
elseif quality == 2 then
return "X1_tongyong_daojukuang_02"
elseif quality == 3 then
return "X1_tongyong_daojukuang_03"
elseif quality == 4 then
return "X1_tongyong_daojukuang_04"
elseif quality == 5 then
return "X1_tongyong_daojukuang_05"
elseif quality == 6 then
return "X1_tongyong_daojukuang_06"
elseif quality >= 7 then
return "X1_tongyong_daojukuang_06"
end
end
end
--通过item稀有度读取底板
function GetQuantityBgImageByquality(quality,star)
if star then--and star > 5
if star == 1 then
return "X1_tongyong_yingxiongkuangdiban_01"
elseif star == 2 then
return "X1_tongyong_yingxiongkuangdiban_02"
elseif star == 3 then
return "X1_tongyong_yingxiongkuangdiban_03"
elseif star == 4 then
return "X1_tongyong_yingxiongkuangdiban_04"
elseif star == 5 then
return "X1_tongyong_yingxiongkuangdiban_05"
elseif star >= 6 and star <= 10 then
return "X1_tongyong_yingxiongkuangdiban_06"
elseif star > 10 then
return "X1_tongyong_yingxiongkuangdiban_06"
end
else
if quality == 0 or quality == 1 then
return "X1_tongyong_yingxiongkuangdiban_01"
elseif quality == 2 then
return "X1_tongyong_yingxiongkuangdiban_02"
elseif quality == 3 then
return "X1_tongyong_yingxiongkuangdiban_03"
elseif quality == 4 then
return "X1_tongyong_yingxiongkuangdiban_04"
elseif quality == 5 then
return "X1_tongyong_yingxiongkuangdiban_05"
elseif quality == 6 then
return "X1_tongyong_yingxiongkuangdiban_06"
elseif quality >= 7 then
return "X1_tongyong_yingxiongkuangdiban_06"
end
end
end
--通过item稀有度读取pro底板
function GetQuantityProBgImageByquality(quality,star)
if star then--and star > 5
if star == 1 then
return "X1_tongyong_daojukuang_zhenying_01"
elseif star == 2 then
return "X1_tongyong_daojukuang_zhenying_02"
elseif star == 3 then
return "X1_tongyong_daojukuang_zhenying_03"
elseif star == 4 then
return "X1_tongyong_daojukuang_zhenying_04"
elseif star == 5 then
return "X1_tongyong_daojukuang_zhenying_05"
elseif star >= 6 and star <= 10 then
return "X1_tongyong_daojukuang_zhenying_06"
elseif star > 10 then
return "X1_tongyong_daojukuang_zhenying_06"
end
else
if quality == 0 or quality == 1 then
return "X1_tongyong_daojukuang_zhenying_01"
elseif quality == 2 then
return "X1_tongyong_daojukuang_zhenying_02"
elseif quality == 3 then
return "X1_tongyong_daojukuang_zhenying_03"
elseif quality == 4 then
return "X1_tongyong_daojukuang_zhenying_04"
elseif quality == 5 then
return "X1_tongyong_daojukuang_zhenying_05"
elseif quality == 6 then
return "X1_tongyong_daojukuang_zhenying_06"
elseif quality >= 7 then
return "X1_tongyong_daojukuang_zhenying_06"
end
end
end
--> 六边形背景
function GetQuantityImageByqualityHexagon(quality, star)
if star then--and star > 5
if star == 1 then
return "X1_tongyong_daojukuang_dengji_01"
elseif star == 2 then
return "X1_tongyong_daojukuang_dengji_02"
elseif star == 3 then
return "X1_tongyong_daojukuang_dengji_03"
elseif star == 4 then
return "X1_tongyong_daojukuang_dengji_04"
elseif star == 5 then
return "X1_tongyong_daojukuang_dengji_05"
elseif star >= 6 and star <= 10 then
return "X1_tongyong_daojukuang_dengji_06"
elseif star > 10 then
return "X1_tongyong_daojukuang_dengji_06"
end
else
if quality == 0 or quality == 1 then
return "X1_tongyong_daojukuang_dengji_01"
elseif quality == 2 then
return "X1_tongyong_daojukuang_dengji_02"
elseif quality == 3 then
return "X1_tongyong_daojukuang_dengji_03"
elseif quality == 4 then
return "X1_tongyong_daojukuang_dengji_04"
elseif quality == 5 then
return "X1_tongyong_daojukuang_dengji_05"
elseif quality == 6 then
return "X1_tongyong_daojukuang_dengji_06"
elseif quality >= 7 then
return "X1_tongyong_daojukuang_dengji_06"
end
end
end
function GetCardFrame(star)
if star then
if star == 1 then
return "X1_tongyong_yingxiongkuang_01"
elseif star == 2 then
return "X1_tongyong_yingxiongkuang_02"
elseif star == 3 then
return "X1_tongyong_yingxiongkuang_03"
elseif star == 4 then
return "X1_tongyong_yingxiongkuang_04"
elseif star == 5 then
return "X1_tongyong_yingxiongkuang_05"
elseif star > 5 then
return "X1_tongyong_yingxiongkuang_06"
end
end
end
--通过item品质读取tips背景color n1
function GetQuantityTipsColorByQuality(quality)
if quality == 1 then
return "N1_tipsbg_beibao_lvse"
elseif quality == 2 then
return "N1_tipsbg_beibao_lvse"
elseif quality == 3 then
return "N1_tipsbg_beibao_lanse"
elseif quality == 4 then
return "N1_tipsbg_beibao_zise"
elseif quality == 5 then
return "N1_tipsbg_beibao_chengse"
elseif quality >= 6 then
return "N1_tipsbg_beibao_hongse"
else
return "N1_tipsbg_beibao_lvse"
end
end
--通过item稀有度读取背景框
function GetQuantityImageByqualityPoint(quality)
if quality == 1 then
return "r_hunyin_zise"
elseif quality == 2 then
return "r_hunyin_zise"
elseif quality == 3 then
return "r_hunyin_zise"
elseif quality == 4 then
return "r_hunyin_zise"
elseif quality == 5 then
return "r_hunyin_chengse"
elseif quality == 6 then
return "r_hunyin_hongse"
elseif quality == 7 then
return "r_hunyin_caise"
else
return "r_hunyin_caise"
end
end
--通过item稀有度读取背景框
function GetQuantityStrByquality(quality)
if quality == 1 then
return GetLanguageStrById(10198)
elseif quality == 2 then
return GetLanguageStrById(10197)
elseif quality == 3 then
return GetLanguageStrById(10196)
elseif quality == 4 then
return GetLanguageStrById(10195)
elseif quality == 5 then
return GetLanguageStrById(10194)
elseif quality == 6 then
return GetLanguageStrById(10193)
elseif quality == 7 then
return GetLanguageStrById(10192)
else
return GetLanguageStrById(10198)
end
end
--通过Hero稀有度读取碎片遮罩(小)
function GetHeroChipQuantityImageByquality(quality)
-- if quality == 1 then
-- return "PieceMask_white"
-- elseif quality == 2 then
-- return "PieceMask_green"
-- elseif quality == 3 then
-- return "PieceMask_blue"
-- elseif quality == 4 then
-- return "PieceMask_purple"
-- elseif quality == 5 then
-- return "PieceMask_goden"
-- elseif quality >= 6 then
-- return "PieceMask_red"
-- end
return "X1_tongyong_daojukuang_suipian"
end
--通过Hero稀有度读取背景框(小)
function GetHeroQuantityImageByquality(quality,star)
if star then--and star > 5
if star == 1 then
return "X1_tongyong_daojukuang_01"
elseif star == 2 then
return "X1_tongyong_daojukuang_02"
elseif star == 3 then
return "X1_tongyong_daojukuang_03"
elseif star == 4 then
return "X1_tongyong_daojukuang_04"
elseif star == 5 then
return "X1_tongyong_daojukuang_05"
elseif star >= 6 and star <=10 then
return "X1_tongyong_daojukuang_06"
elseif star > 10 then
return "X1_tongyong_daojukuang_06"
end
else
if quality == 0 or quality == 1 then
return "X1_tongyong_daojukuang_01"
elseif quality == 2 then
return "X1_tongyong_daojukuang_02"
elseif quality == 3 then
return "X1_tongyong_daojukuang_03"
elseif quality == 4 then
return "X1_tongyong_daojukuang_04"
elseif quality == 5 then
return "X1_tongyong_daojukuang_05"
elseif quality == 6 then
return "X1_tongyong_daojukuang_06"
elseif quality >= 7 then
return "X1_tongyong_daojukuang_01"
end
end
end
--通过Hero稀有度读取背景框(卡库)外框
function GetHeroCardQuantityWaiImageByquality(quality)
if quality <= 3 then
return "r_hero_lankuang"
elseif quality == 4 then
return "r_hero_zikuang"
elseif quality == 5 then
return "r_hero_huangkuang"
elseif quality > 5 then
return "r_hero_huangkuang"
end
end
-- --通过Hero或异妖稀有度读取资质框
-- function GetQuantityImage(quality)
-- local sprite
-- if quality < 11 then
-- sprite = Util.LoadSprite(AptitudeQualityFrame[1])
-- elseif quality >= 11 and quality < 13 then
-- sprite = Util.LoadSprite(AptitudeQualityFrame[2])
-- elseif quality >= 13 and quality < 15 then
-- sprite = Util.LoadSprite(AptitudeQualityFrame[3])
-- elseif quality >= 15 and quality < 17 then
-- sprite = Util.LoadSprite(AptitudeQualityFrame[4])
-- elseif quality >= 17 and quality < 19 then
-- sprite = Util.LoadSprite(AptitudeQualityFrame[5])
-- end
-- return sprite
-- end
--通过装备位置获得装备位置类型字符串
function GetEquipPosStrByEquipPosNum(_index)
if _index == 1 then
return GetLanguageStrById(10427)
elseif _index == 2 then
return GetLanguageStrById(12104)
elseif _index == 3 then
return GetLanguageStrById(10429)
elseif _index == 4 then
return GetLanguageStrById(12105)
elseif _index == 5 then
return GetLanguageStrById(22321)
elseif _index == 6 then
return GetLanguageStrById(22321)
elseif _index == 7 then
return GetLanguageStrById(50532)
elseif _index == 8 then
return GetLanguageStrById(50533)
end
end
--通过职业获取职业字符串
function GetJobStrByJobNum(_index)
if _index == 0 then
return GetLanguageStrById(12108)
elseif _index == 1 then
return GetLanguageStrById(12038)
elseif _index == 2 then
return GetLanguageStrById(12039)
elseif _index == 3 then
return GetLanguageStrById(12040)
elseif _index == 4 then
return GetLanguageStrById(12041)
elseif _index == 5 then
return GetLanguageStrById(12042)
end
end
--通过职业获取职业字符串
function GetJobSpriteStrByJobNum(_index)
if _index == 1 then
return "X1_tongyong_yingxiongdingwei_01"
elseif _index == 2 then
return "X1_tongyong_yingxiongdingwei_03"
elseif _index == 3 then
return "X1_tongyong_yingxiongdingwei_02"
elseif _index == 4 then
return "X1_tongyong_yingxiongdingwei_04"
elseif _index == 5 then
return "N1_icon_tongyong_deguo"
elseif _index == 6 then
return "N1_icon_tongyong_deguo"
else
return "N1_icon_tongyong_deguo"
end
end
--角色定位ID 获取角色定位背景图片
function GetHeroPosBgStr(_i)
if _i == 1 then
return "r_hero_roudundi"
elseif _i == 2 then
return "r_hero_shuchudi"
elseif _i == 3 then
return "r_hero_kongzhidi"
elseif _i == 4 then
return "r_hero_fuzhudi"
end
end
--根据角色定位Id 获取角色定位图
function GetHeroPosStr(_i)
if _i == 1 then
return "r_hero_roudunbiao"
elseif _i == 2 then
return "r_hero_shuchubiao"
elseif _i == 3 then
return "r_hero_konghzibiao"
elseif _i == 4 then
return "r_hero_fuzhubiao"
end
end
--获取技能类型 data 当前技能数据
function GetSkillType(data)
local SkillIconType={"N1_iconbg_tongyong_baise","N1_iconbg_tongyong_baise","N1_iconbg_tongyong_baise"}
if data.skillConfig.Type == SkillType.Pu then
return SkillIconType[SkillType.Pu]--普技
elseif data.skillConfig.Type == SkillType.Jue then
return SkillIconType[SkillType.Jue]--绝技
elseif data.skillConfig.Type == SkillType.Bei then
return SkillIconType[SkillType.Bei]--被动技
end
end
-- --通过角色属性获取角色属性图标
-- function GetProStrImageByProNum(_index)
-- if _index == 1 then
-- return "N1_groupicon_tongyongweixuanzhong_yingguo"
-- elseif _index == 2 then
-- return "N1_groupicon_tongyongweixuanzhong_sulian"
-- elseif _index == 3 then
-- return "N1_groupicon_tongyongweixuanzhong_faguo"
-- elseif _index == 4 then
-- return "N1_groupicon_tongyongweixuanzhong_meiguo"
-- elseif _index == 5 then
-- return "N1_groupicon_tongyongweixuanzhong_deguo"
-- else
-- return "N1_groupicon_tongyongweixuanzhong_quanbu"
-- end
-- end
--通过角色属性获取角色属性图标
function GetProStrImageByProNum(_index)
if _index == 1 then
return "X1_tongyong_zhenying_04"
elseif _index == 2 then
return "X1_tongyong_zhenying_02"
elseif _index == 3 then
return "X1_tongyong_zhenying_03"
elseif _index == 4 then
return "X1_tongyong_zhenying_06"
elseif _index == 5 then
return "X1_tongyong_zhenying_05"
elseif _index == 6 then
return "X1_tongyong_zhenying_07"
else
return GetPictureFont("X1_tongyong_zhenying_01")
end
end
--通过角色属性获取角色属性图标
function GetProStrImageByProNum2(_index)
if _index == 1 then
return "X1_tongyong_zhenying_04"
elseif _index == 2 then
return "X1_tongyong_zhenying_02"
elseif _index == 3 then
return "X1_tongyong_zhenying_03"
elseif _index == 4 then
return "X1_tongyong_zhenying_06"
elseif _index == 5 then
return "X1_tongyong_zhenying_05"
elseif _index == 6 then
return "X1_tongyong_zhenying_07"
else
return GetPictureFont("X1_tongyong_zhenying_01")
end
end
--通过角色属性获取角色属性图标
function GetBigProStrImageByProNum(_index)
if _index == 1 then
return "X1_tongyong_zhenying_04"
elseif _index == 2 then
return "X1_tongyong_zhenying_02"
elseif _index == 3 then
return "X1_tongyong_zhenying_03"
elseif _index == 4 then
return "X1_tongyong_zhenying_06"
elseif _index == 5 then
return "X1_tongyong_zhenying_05"
elseif _index == 5 then
return "X1_tongyong_zhenying_07"
else
return GetPictureFont("X1_tongyong_zhenying_01")
end
end
--通过装备位置获得装备位置类型字符串
function GetQuaStringByEquipQua(_Qua)
--
if _Qua == 1 then
return GetLanguageStrById(12109)
elseif _Qua == 2 then
return GetLanguageStrById(12110)
elseif _Qua == 3 then
return GetLanguageStrById(12111)
elseif _Qua == 4 then
return GetLanguageStrById(12112)
elseif _Qua == 5 then
return GetLanguageStrById(12113)
elseif _Qua == 6 then
return GetLanguageStrById(12114)
elseif _Qua == 7 then
return GetLanguageStrById(12115)
end
end
--通过item稀有度获取改颜色的文字
function GetStringByEquipQua(_Qua, _Str)
if _Qua == 1 then
return string.format("%s", _Str)
elseif _Qua == 2 then
return string.format("%s", _Str)
elseif _Qua == 3 then
return string.format("%s", _Str)
elseif _Qua == 4 then
return string.format("%s", _Str)
elseif _Qua == 5 then
return string.format("%s", _Str)
elseif _Qua == 6 then
return string.format("%s", _Str)
else
return string.format("%s", _Str)
end
end
--冒险通过区域序号取得区域名称美术字图标
function GetAreaNameIconByAreaNumer(index)
if index == 1 then
return "r_guaji_qiyuanzhidi"
elseif index == 2 then
return "r_guaji_yiwangzhilu"
elseif index == 3 then
return "r_guaji_houhuizhishi"
elseif index == 4 then
return "r_guaji_zuifashengdian"
elseif index == 5 then
return "r_guaji_qidaoshengsuo"
elseif index == 6 then
return "r_guaji_youjieyehuo"
elseif index == 7 then
return "r_guaji_wushengmishi"
elseif index == 8 then
return "r_guaji_wanshenghuanghun"
end
end
--根据英雄品质获取抽卡英雄颜色
function GetColorByHeroQua(_Qua)
if _Qua == 1 then
return Color.New(152/255,99/255,103/255,1)
elseif _Qua == 2 then
return Color.New(166/255,238/255,165/255,1)
elseif _Qua == 3 then
return Color.New(23/255,158/255,255/255,1)
elseif _Qua == 4 then
return Color.New(209/255,112/255,255/255,1)
elseif _Qua == 5 then
return Color.New(255/255,156/255,42/255,1)
elseif _Qua == 6 then
return Color.New(255/255,73/255,73/255,1)
elseif _Qua >= 7 then
return Color.New(255/255,73/255,73/255,1)
end
end
--根据英雄品质获取抽卡英雄进入时颜色
function GetColorByHeroEnterQua(_Qua)
if _Qua == 1 then
return Color.New(150/255,143/255,154/255,0)
elseif _Qua == 2 then
return Color.New(166/255,238/255,165/255,0)
elseif _Qua == 3 then
return Color.New(16/255,58/255,255/255,0)
elseif _Qua == 4 then
return Color.New(209/255,112/255,255/255,0)
elseif _Qua == 5 then
return Color.New(255/255,156/255,42/255,0)
elseif _Qua == 6 then
return Color.New(255/255,73/255,73/255,0)
elseif _Qua == 7 then
return Color.New(255/255,73/255,73/255,0)
end
end
--- N钟,N时,N天
function GetLeftTimeStrByDeltaTime(deltaTime)
if deltaTime > 86400 then
return math.floor(deltaTime / 86400) .." ".. GetLanguageStrById(10021)
end
if deltaTime > 3600 then
return math.floor(deltaTime / 3600) .." ".. GetLanguageStrById(12116)
end
if deltaTime > 60 then
return math.floor(deltaTime / 60) .." ".. GetLanguageStrById(12117)
end
return math.floor(deltaTime)..GetLanguageStrById(10364)
end
function GetLeftTimeStrByDeltaTime2(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = math.floor(second % 60)
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
if second > 86400 then
return " ".. day .." ".. GetLanguageStrById(10021).." "..hour .." "..GetLanguageStrById(10993)
end
if second > 3600 then
return " ".. hour .." ".. GetLanguageStrById(10993).." "..minute .." ".. GetLanguageStrById(12117)
end
return " "..minute .." ".. GetLanguageStrById(12117) .." ".. sec .. GetLanguageStrById(10364)
end
--- 获取经历的时间字符串
--- 刚刚,N分钟前,N小时前,N天前
function GetDeltaTimeStrByDeltaTime(deltaTime)
if deltaTime > 86400 then
return math.floor(deltaTime / 86400) .. GetLanguageStrById(10827)
end
if deltaTime > 3600 then
return math.floor(deltaTime / 3600) .. GetLanguageStrById(10826)
end
if deltaTime > 60 then
return math.floor(deltaTime / 60) .. GetLanguageStrById(10825)
end
return GetLanguageStrById(10824)
end
function GetDeltaTimeStr(timestamp)
local curTimeStemp = GetTimeStamp()
local deltaTime = curTimeStemp - timestamp
return GetDeltaTimeStrByDeltaTime(deltaTime)
end
--- 计算公式 a*x^3 + b*x^2 + c*x +d
--- 1、 CalculateCostCount(x, a, b, c, d)
--- 2、 CalculateCostCount(x, array)
--- array 为按顺序存储a, b, c, d值的数组
---
function CalculateCostCount(x, ...)
if not x then
return
end
local args = { ... }
if type(args[1]) == "table" then
args = args[1]
end
if type(args[1]) ~= "number" then
return
end
local a = args[1]
local b = args[2]
local c = args[3]
local d = args[4]
local cost = math.pow(x, 3) * a + math.pow(x, 2) * b + x * c + d
return cost
end
--获取服务器当前星期几
function GetSeverWeek()
local severTime = GetTimeStamp()
local time = GetTimeShow(severTime)
return System.DateTime.Parse(time).DayOfWeek:ToInt()
end
--- 获取当前时间戳
function GetTimeStamp()
return PlayerManager.serverTime
end
--- 获取当前时间到一天中某时的剩余时间(24小时制)
function CalculateSecondsNowTo_N_OClock(n)
local curTimeStemp = GetTimeStamp()
--- 标准时间戳从1970年1月1日8点开始,加上八个小时的秒数,使其从0点开始
--- 8*60*60 = 28800
--- 24*60*60 = 86400
local now = os.time()
local timeZone = os.difftime(now, os.time(os.date("!*t", now)))
local todayPassSeconds = (curTimeStemp + timeZone) % 86400
local targetSeconds = n * 3600 --- 60*60 = 3600
if todayPassSeconds <= targetSeconds then
return targetSeconds - todayPassSeconds
else
-- 如果已经过去了,则计算到第二天这个时间点需要的秒数
return targetSeconds + 86400 - todayPassSeconds
end
end
function TimeToFelaxible(second)--大于一天用多少天多少小时,小于一天用00:00:00
if second <= 86400 then
if not second or second < 0 then
return "00:00:00"
end
local _sec = second % 60
local allMin = math.floor(second / 60)
local _min = allMin % 60
local _hour = math.floor(allMin / 60)
return string.format("%02d:%02d:%02d", _hour, _min, _sec), _hour, _min, _sec
elseif second > 86400 then
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(12278),day, hour)
end
end
--- 将一段时间转换为天时分秒
function TimeToDHMS(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(10548),day, hour, minute, sec)
end
--- 将一段时间转换为天时分
function TimeToDHM(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(10548),day, hour, minute)
end
--- 将一段时间转换为天时
function TimeToDH(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(12278),day, hour)
end
--- 将一段时间转换为时
function TimeToH(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(11751), hour)
end
--- 将一段时间转换为时分秒
function TimeToHMS(t)
if not t or t < 0 then
return "00:00:00"
end
local _sec = t % 60
local allMin = math.floor(t / 60)
local _min = allMin % 60
local _hour = math.floor(allMin / 60)
return string.format("%02d:%02d:%02d", _hour, _min, _sec), _hour, _min, _sec
end
--- 将一段时间转换为时分秒,分开返回
function TimeToH_M_S(t)
if not t or t < 0 then
return "00:00:00"
end
local _sec = t % 60
local allMin = math.floor(t / 60)
local _min = allMin % 60
local _hour = math.floor(allMin / 60)
return string.format("%02d",_hour), string.format("%02d",_min), string.format("%02d", _sec)
end
--- 将一段时间转换为分秒
function TimeToMS(t)
if not t or t < 0 then
return "00:00"
end
local _sec = t % 60
local _min = math.floor(t / 60)
return string.format("%02d:%02d", _min, _sec)
end
-- 将一段时间转换为年月日时分秒
function TimeToYMDHMS(t)
if not t or t < 0 then
return 0
end
return os.date("%Y年%m月%d日 %H:%M:%S", t)
end
--- 将一段时间转换为时分
function TimeToHM(t)
if not t or t < 0 then
return "00:00"
end
local allMin = math.floor(t / 60)
local _min = allMin % 60
local _hour = math.floor(allMin / 60)
return string.format("%02d:%02d", _hour, _min)
end
-- 将一段时间转换为月日
function TimeToMD(t)
if GetChannelConfig().ListID == "Android_Funtap" or GetChannelConfig().ListID == "iOS_Funtap" then
return os.date(" "..GetLanguageStrById(12303).." ".."%d".." "..GetLanguageStrById(12360).." ".."%m", t)
end
return os.date("%m"..GetLanguageStrById(12360).."%d"..GetLanguageStrById(12303), t)
end
--- 获取今天某时间点时间戳
function Today_N_OClockTimeStamp(n)
local currentTime = math.floor(GetTimeStamp())
local tab = os.date("*t", currentTime)
tab.hour = n
tab.min = 0
tab.sec = 0
local N_TimeStamp = os.time(tab)
return N_TimeStamp
end
----- 时效类时间(服务器按照每天凌晨的0点为起始的一天)
function GetTimePass(timeValue)
local tab = os.date("*t", timeValue == 0 and os.time() or timeValue)
tab.hour = 0
tab.min = 0
tab.sec = 0
local tab2 = os.date("*t", timeValue == 0 and os.time() or timeValue)
tab2.hour = 24
tab2.min = 0
tab2.sec = 0
local timeStartSum = os.time(tab2)
--0点
local forwardDay
local zeroTimeStamp = os.time(tab)
if timeValue > zeroTimeStamp and timeValue < timeStartSum then
forwardDay = 1
else
forwardDay = 0
end
local dayPass = math.ceil((GetTimeStamp() - timeStartSum) / 86400)
return (dayPass + forwardDay) > 3 and 3 or (dayPass + forwardDay)
end
---时间格式化接口
function GetTimeShow(data)
local year = math.floor(os.date("%Y", data))
local month = math.floor(os.date("%m", data))
local day = math.floor(os.date("%d", data))
local time = year .. "." .. month .. "." .. day
return time
end
--转换年月日
function GetYearMonthDay(data)
local year = math.floor(os.date("%Y", data))
local month = math.floor(os.date("%m", data))
local day = math.floor(os.date("%d", data))
return year, month, day
end
--获取两个日期之间的间隔天数
function GetDataToDataBetweenDays(time1, time2)
local year, month, day = GetYearMonthDay(time1)
local dtDay1 = System.DateTime.New(year, month, day)
local year2, month2, day2 = GetYearMonthDay(time2)
local dtDay2 = System.DateTime.New(year2, month2, day2)
local time = System.TimeSpan.New(dtDay1.Ticks - dtDay2.Ticks).Days
return time
end
---obj必须是userdata(c#对象)
function IsNull(obj)
return obj == nil or obj:Equals(nil)
end
------- 红点相关 ----------
-- 绑定红点物体
function BindRedPointObject(rpType, rpObj)
RedpotManager.BindObject(rpType, rpObj)
end
-- 清除红点上绑定的所有物体
function ClearRedPointObject(rpType, rpObj)
RedpotManager.ClearObject(rpType, rpObj)
end
-- 强制改变红点状态(不建议使用)
function ChangeRedPointStatus(rpType, state)
RedpotManager.SetRedPointStatus(rpType, state)
end
-- 重置服务器红点状态到隐藏状态
function ResetServerRedPointStatus(rpType)
RedpotManager.SetServerRedPointStatus(rpType, RedPointStatus.Hide)
end
-- 检测红点显示
function CheckRedPointStatus(rpType)
RedpotManager.CheckRedPointStatus(rpType)
end
-------------------------
--统用属性展示
function GetPropertyFormatStr(type, value)
if type == 1 then
return value
else
if value % 100 == 0 then
return string.format("%d%%", value / 100)
else
return string.format("%.2f%%", value / 100)
end
end
end
--统用属性展示
function GetPropertyFormatStrOne(type, value)
if type == 1 then
return value
else
if value % 100 == 0 then
return string.format("%d%%", value / 100)
else
return string.format("%.1f%%", value / 100)
end
end
end
--装备专属属性展示
function GetEquipPropertyFormatStr(type, value)
if type == 1 then
return value
else
if value / 100 > 1 then
return string.format("%d%%", value / 100)
else
return string.format("%d%%", 1)
end
end
end
-- 将秒转换成显示使用的时间
function FormatSecond(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
return string.format(GetLanguageStrById(12118), day, hour, minute, sec)
end
-- 将时间戳转换为用于显示的日期字符串
function TimeStampToDateStr(timestamp)
local date = os.date("*t", timestamp)
local cdate = os.date("*t", GetTimeStamp())
if date.year == cdate.year and date.month == cdate.month and date.day == cdate.day then
return string.format("%02d:%02d", date.hour, date.min)
end
return string.format(GetLanguageStrById(12119), date.year, date.month, date.day, date.hour, date.min)
end
-- 将时间戳转换为用于显示的日期字符串(时分秒)
function TimeStampToDateStr3(second)
local minute = math.floor(second / 60) % 60
local sec = second % 60
local hour = math.floor(math.floor(second - sec - minute * 60) / 3600)
return string.format("%02d:%02d:%02d", hour, minute, sec)
end
--- 根据id获取资源
function GetResourcePath(id)
local data = ConfigManager.TryGetConfigData(ConfigName.ArtResourcesConfig, id)
--> 无资源返回固定资源 找表问题
if data == nil or data.Name == nil or data.Name == "" then
return "N1_btn_tongyong_guanbi"
else
return data.Name
end
-- return ConfigManager.TryGetConfigData(ConfigName.ArtResourcesConfig, id).Name
end
--> 获取资源名 错误返回X
function GetResourceStr(str)
if str == nil or str == "" then
return "N1_btn_tongyong_guanbi"
end
return str
end
--- 获取玩家头像资源
function GetPlayerHeadSprite(headId)
if headId == 0 then
if PlayerManager.sex then
headId = 71000
else
headId = 70999
end
end
local head = ConfigManager.GetConfigData(ConfigName.ItemConfig, headId)
if not head then
LogError("储存的头像不对:"..headId)
if PlayerManager.sex then
headId = 71000
else
headId = 70999
end
head = ConfigManager.GetConfigData(ConfigName.ItemConfig, headId)
end
return Util.LoadSprite(GetResourcePath(head.ResourceID))
end
--- 获取玩家头像框资源
function GetPlayerHeadFrameSprite(frameId)
if frameId == 0 then frameId = 80000 end
local frame = ConfigManager.GetConfigData(ConfigName.ItemConfig, frameId)
return Util.LoadSprite(GetResourcePath(frame.ResourceID))
end
--是否弹出快捷购买面板
function PopQuickPurchasePanel(type, needNum)
local ownNumber = BagManager.GetItemCountById(type)
if ownNumber >= needNum then
return false
else
UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = type })
return true
end
end
----- SDK数据上报
----- @param context
---- {
---- type, -- required, 调用时机
---- }
function SubmitExtraData(context)
if not AppConst.isSDKLogin then
return
end
local params = SDK.SDKSubmitExtraDataArgs.New()
params.dataType = context.type
params.serverID = tonumber(PlayerManager.serverInfo.server_id)
params.serverName = PlayerManager.serverInfo.name
params.zoneID = PlayerManager.serverInfo.area
params.zoneName = AppConst.AppID--特殊参数 (台湾)guid#游戏的区id
params.roleID = tostring(PlayerManager.uid)
params.roleName = PlayerManager.nickName
params.roleLevel = tostring(PlayerManager.level)
params.guildID = PlayerManager.familyId
params.Vip = tostring(VipManager.GetVipLevel())
params.moneyNum = BagManager.GetItemCountById(16)
params.roleCreateTime = DateUtils.GetDateTime(PlayerManager.userCreateTime)
params.roleLevelUpTime = context.roleLevelUpTime and DateUtils.GetDateTime(context.roleLevelUpTime) or ""
SDKMgr:SubmitExtraData(params)
end
function ShowConfirmPanel(context)
UIManager.OpenPanel(UIName.CommonConfirmPanel, context)
end
-- 检测某一面板关闭再抛相应的事件
function CallBackOnPanelClose(uiPanel, func)
if UIManager.IsOpen(uiPanel) then
local triggerCallBack
triggerCallBack = function (panelType, panel)
if panelType == uiPanel then
if func then func() end
Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnClose, triggerCallBack)
end
end
Game.GlobalEvent:AddEvent(GameEvent.UI.OnClose, triggerCallBack)
else
if func then func() end
end
end
-- 检测某一面板打开再抛相应的事件
function CallBackOnPanelOpen(uiPanel, func)
if not UIManager.IsOpen(uiPanel) then
local triggerCallBack
triggerCallBack = function (panelType, panel)
if panelType == uiPanel then
if func then func() end
Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnOpen, triggerCallBack)
end
end
Game.GlobalEvent:AddEvent(GameEvent.UI.OnOpen, triggerCallBack)
else
if func then func() end
end
end
-- 通过地图坐标设置物体在UI平面的位置
function SetObjPosByUV(pos)
local u, v = Map_Pos2UV(pos)
local v2 = RectTransformUtility.WorldToScreenPoint(TileMapView.GetCamera(), TileMapView.GetLiveTilePos(u, v))
v2 = v2 / math.min(Screen.width/1080, Screen.height/1920)
v2.x = v2.x - (Screen.width - UIManager.width) / 2
v2.y = v2.y - (Screen.height - UIManager.height) / 2
return v2
end
--获取技能描述 notColor不加颜色
--arrayType desc v c 维数
function GetSkillConfigDesc(cfg, notColor, arrayType)
local arrayType = arrayType or 2 -- 暂时默认2维
if arrayType == 1 then
if cfg.DescColor then
local ss = {}
for i = 1, #cfg.DescColor do
local str
if cfg.DescColor[i] == 1 then
if notColor then
str = cfg.DescValue[i]
else
str = string.format("%s", cfg.DescValue[i])
end
elseif cfg.DescColor[i] == 2 then
if notColor then
str = cfg.DescValue[i]
else
str = string.format("%s", cfg.DescValue[1][i])
end
else
str = cfg.DescValue[i]
end
ss[i] = str
end
return string.format(GetLanguageStrById(cfg.Desc), unpack(ss))
end
return GetLanguageStrById(cfg.Desc)
elseif arrayType == 2 then
if cfg.DescColor[1] then
local ss = {}
for i = 1, #cfg.DescColor[1] do
local str
if cfg.DescColor[1][i] == 1 then
if notColor then
str = cfg.DescValue[1][i]
else
str = string.format("%s", cfg.DescValue[1][i])
end
elseif cfg.DescColor[1][i] == 2 then
if notColor then
str = cfg.DescValue[1][i]
else
str = string.format("%s", cfg.DescValue[1][i])
end
else
str = cfg.DescValue[1][i]
end
ss[i] = str
end
return string.format(GetLanguageStrById(cfg.Desc[1]), unpack(ss))
end
elseif arrayType == 3 then --英雄技能描述做特殊处理
if not cfg.DescValue then
return GetLanguageStrById(cfg.Desc[1])
end
if cfg.DescColor[1] then
local ss = {}
for i = 1, #cfg.DescColor do
local str
if cfg.DescColor[i] == 1 then
if notColor then
str = cfg.DescValue[i]
else
str = string.format("%s", cfg.DescValue[i])
end
elseif cfg.DescColor[i] == 2 then
if notColor then
str = cfg.DescValue[i]
else
str = string.format("%s", cfg.DescValue[i])
end
else
str = cfg.DescValue[1][i]
end
ss[i] = str
end
return string.format(GetLanguageStrById(cfg.Desc[1]), unpack(ss))
end
return GetLanguageStrById(cfg.Desc)
end
return "GetSkillConfigDesc Error!!"
end
--后台传输多语言数据合并
function GetMailConfigDesc(cfg, mailparam)--cfg插入内容,mailparam插入数组
if #mailparam > 0 then
local ss = {}
for i = 1, #mailparam do
local lsparam = string.find(mailparam[i], "|0")
if lsparam == nil then
ss[i] = GetLanguageStrById(mailparam[i])
else
local s = "";
local len = string.len(mailparam[i])
s = string.sub(mailparam[i],3,len)
ss[i] = GetLanguageStrById(s)
end
end
return string.format(GetLanguageStrById(cfg), unpack(ss))
-- else
-- string.format(GetLanguageStrById(cfg), mailparam)
end
return GetLanguageStrById(cfg)
end
-- 设置排名所需要的数字框
function SetRankNumFrame(rankNum)
local rankNumRes = {
[1] = "X1_tongyong_diyi",
[2] = "X1_tongyong_dier",
[3] = "X1_tongyong_disan",
[4] = "X1_jingjichang_shujudiban_06",
}
local resPath = rankNum > 3 and rankNumRes[4] or rankNumRes[rankNum]
local icon = Util.LoadSprite(resPath)
return icon
end
--- 本方法适用滚动条中 生成item的使用 (主要适用每条滚动条item数量不定的滚动条中)
--- itemview重设复用 1根节点 2生成到父节点 3item容器 4容器上限 5缩放 6层级 7根据数据类型生成 8不定参数据...
--- type=true 针对表数据为一维数据 type=false 针对表数据为二维数据
function ResetItemView(root,rewardRoot,itemList,max,scale,sortingOrder,type,...)
local args = {...}
local data1 = args[1]
local data2 = args[2]
if itemList[root] then -- 存在
for i = 1, max do
itemList[root][i].gameObject:SetActive(false)
end
if type then
itemList[root][1]:OnOpen(false, {data1,data2},scale,false,false,false,sortingOrder)
itemList[root][1].gameObject:SetActive(true)
else
for i = 1, #data1 do
if itemList[root][i] then
itemList[root][i]:OnOpen(false, {data1[i][1],data1[i][2]},scale,false,false,false,sortingOrder)
itemList[root][i]:Reset({data1[i][1],data1[i][2]},ItemType.Hero,{false,true,true,true})
itemList[root][i].gameObject:SetActive(true)
end
end
end
else -- 不存在 新建
itemList[root]={}
for i = 1, max do
itemList[root][i] = SubUIManager.Open(SubUIConfig.ItemView, rewardRoot)
itemList[root][i].gameObject:SetActive(false)
end
if type then
itemList[root][1]:OnOpen(false, {data1,data2},scale,false,false,false,sortingOrder)
itemList[root][1].gameObject:SetActive(true)
else
for i = 1, #data1 do
itemList[root][i]:OnOpen(false, {data1[i][1],data1[i][2]},scale,false,false,false,sortingOrder)
itemList[root][i]:Reset({data1[i][1],data1[i][2]},ItemType.Hero,{false,true,true,true})
itemList[root][i].gameObject:SetActive(true)
end
end
end
end
--只有英文截取长度
function SubString2(inputstr,num)
if GetLan() == 0 then
return inputstr
end
if not inputstr or inputstr == "" then
return ""
end
local num = num and num or 0
local str = ""
local lenInByte = #inputstr
local width = 0
local i = 1
while (i <= lenInByte)
do
local curByte = string.byte(inputstr, i)
local byteCount = 1
if curByte > 0 and curByte <= 127 then
byteCount = 1 --1字节字符
elseif curByte >= 192 and curByte < 223 then
byteCount = 2 --双字节字符
elseif curByte >= 224 and curByte < 239 then
byteCount = 3 --汉字
elseif curByte >= 240 and curByte <= 247 then
byteCount = 4 --4字节字符
end
local char = string.sub(inputstr, i, i+byteCount-1)
-- print(char)
str = str..char
i = i + byteCount -- 重置下一字节的索引
width = width + 1 -- 字符的个数(长度)
if width == num then
if lenInByte > num then
str = str .. "..."
end
return str
end
end
if lenInByte > num then
str = str .. "..."
end
return str
end
--> 连接live
function ConnectTankName(fabName, isDown)
local strNameConnect = "up"
if isDown then
strNameConnect = "down"
end
return tostring(fabName) .. "_" .. strNameConnect
end
--> item pic tips
function ItemImageTips(itemid, imageGo)
local btn = imageGo:GetComponent(typeof(UnityEngine.UI.Button))
if not btn then
imageGo:AddComponent(typeof(UnityEngine.UI.Button))
end
Util.AddOnceClick(imageGo, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, itemid)
end)
end
function GetProDataStr(id, value)
local style = G_PropertyConfig[id].Style
local str = ""
if style == 1 then --< 绝对值
str = GetPropertyFormatStr(1, value)
elseif style == 2 then --< 百分比
str = GetPropertyFormatStr(2, value)
end
return str
end
--> 获取数量填充颜色
function GetNumUnenoughColor(a, b, showa, showb)
local str = ""
local ka = showa and showa or a
local kb = showb and showb or b
if tonumber(a) < tonumber(b) then
str = string.format("%s", tostring(ka)) .. "/" .. tostring(kb)
else
str = ka .. "/" .. kb
end
return str
end
--> 设置formationbuff 团队效果 icon 节点结构需一致
function SetFormationBuffIcon(Image, elementList)
local iconStr, numArray, isGray = FormationManager.GetElementPicNum(elementList)
Image:GetComponent("Image").sprite = Util.LoadSprite(GetResourceStr(iconStr))
local buffnums = {}
for i = 1, 3 do
local buff = Util.GetGameObject(Image, tostring(i) .. "_buff")
table.insert(buffnums, buff)
end
Util.SetGray(Image, isGray)
for i = 1, #buffnums do
buffnums[i]:SetActive(false)
end
if not isGray then
local root = buffnums[#numArray]
if root then
root:SetActive(true)
for i = 1, 3 do
if i <= #numArray then
local num = Util.GetGameObject(root, "num" .. tostring(i))
num:GetComponent("Text").text = numArray[i]
end
end
end
end
end
--本地文本显示统一调用此接口
--查找不以Log开头或不以--开头的包括在双引号内中文的正则表达式:^((?!--|Log.*).)*".*[一-龠]+.*"
function GetLanguageStrById(zhStr)
if zhStr == nil then
return zhStr
end
local t = type(zhStr)
local languageID = 0
if t == "string" then
languageID = tonumber(zhStr)
else
languageID = zhStr
end
if languageDic then
if languageDic[languageID] then
if GetLan() == 0 then
return languageDic[languageID].zh
elseif GetLan() == 1 then
return languageDic[languageID].en
elseif GetLan() == 2 then
return languageDic[languageID].jp
elseif GetLan() == 3 then
return languageDic[languageID].kr
elseif GetLan() == 4 then
return languageDic[languageID].tw
elseif GetLan() == 5 then
return languageDic[languageID].vn
else
return languageDic[languageID].zh
end
else
-- LogRed("在language表内未找到 id:"..zhStr)
return tostring(zhStr)
end
end
return zhStr
end
local originLanguage
-- 0:中文 1:英文
function GetCurLanguage()
-- LogRed("GetCurLanguage")
-- LogRed(AppConst.originLan)
if not originLanguage then
originLanguage = PlayerPrefs.GetInt("multi_language", AppConst.originLan)
end
return originLanguage
end
--> 多语言选项ID 转 语言种类ID 10001 2 3 位代表语言 4 5 位代表多语言选项id
function LanguageID2LanID(languageid)
local lanid = 0
if languageid then
lanid = tonumber(math.floor(languageid / 100) % 100)
end
return lanid
end
function GetLan()
return LanguageID2LanID(GetCurLanguage())
end
function GetLanguageStrByStr(zhStr)
if languageDicStr then
if languageDicStr[zhStr] then
if GetLan() == 0 then
return languageDicStr[zhStr].zh
elseif GetLan() == 1 then
return languageDicStr[zhStr].en
elseif GetLan() == 2 then
return languageDicStr[zhStr].jp
elseif GetLan() == 3 then
return languageDicStr[zhStr].kr
elseif GetLan() == 4 then
return languageDicStr[zhStr].tw
elseif GetLan() == 5 then
return languageDicStr[zhStr].vn
else
return languageDicStr[zhStr].zh
end
else
-- LogRed("languageDicStr no find Str: " .. zhStr)
return tostring(zhStr)
end
end
return zhStr
end
function HasLanguageStrKey(zhStr)
if languageDicStr then
if languageDicStr[zhStr] then
return true
end
end
return false
end
function GetMonsterGroupFirstEnemy(_monsterGroupId)
for i = 1, #G_MonsterGroup[_monsterGroupId].Contents[1] do
if G_MonsterGroup[_monsterGroupId].Contents[1][i] ~= 0 then
return G_MonsterGroup[_monsterGroupId].Contents[1][i]
end
end
LogError("GetMonsterGroupFirstEnemy Error!!!")
return nil
end
function ServerDropAdd(...)
local newDrop = {}
local args = {...}
for i = 1, #args do
local drop = args[i]
if drop.itemlist ~= nil and #drop.itemlist > 0 then
for j = 1, #drop.itemlist do
if newDrop.itemlist == nil then
newDrop.itemlist = {}
end
table.insert(newDrop.itemlist, drop.itemlist[j])
end
end
if drop.equipId ~= nil and #drop.equipId > 0 then
for j = 1, #drop.equipId do
if newDrop.equipId == nil then
newDrop.equipId = {}
end
table.insert(newDrop.equipId, drop.equipId[j])
end
end
if drop.Hero ~= nil and #drop.Hero > 0 then
for j = 1, #drop.Hero do
if newDrop.Hero == nil then
newDrop.Hero = {}
end
table.insert(newDrop.Hero, drop.Hero[j])
end
end
if drop.soulEquip ~= nil and #drop.soulEquip > 0 then
for j = 1, #drop.soulEquip do
if newDrop.soulEquip == nil then
newDrop.soulEquip = {}
end
table.insert(newDrop.soulEquip, drop.soulEquip[j])
end
end
end
return newDrop
end
--> 合属性
function F_DoubleTableProCompound(allProVal, addProVal)
if addProVal and LengthOfTable(addProVal) > 0 then
for k, v in pairs(addProVal) do
if v > 0 then
if allProVal[k] then
allProVal[k] = allProVal[k] + v
else
allProVal[k] = v
end
end
end
end
end
function SecTorPlayAnimByScroll(scroll,_scale)
local scale = 0.05
if _scale then
scale = _scale
end
scroll:ForeachItemGO(function (index, go)
Timer.New(function ()
go.gameObject:SetActive(true)
PlayUIAnim(go.gameObject)
end, scale*(index-1)):Start()
end)
end
-- 加载立绘
function LoadHerolive(_heroConfig, _objPoint, isStatic)
local artResourcesConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
if _heroConfig.RoleImage ~= 0 and not isStatic then
--动态加载立绘
local liveName = artResourcesConfig[_heroConfig.RoleImage].Name
if liveName == "lihui_baiqi" then liveName = "lihui_baiqi_01" end
local testLive = poolManager:LoadLive(liveName, _objPoint.transform, Vector3.one * _heroConfig.Scale, Vector3.New(_heroConfig.Position[1], _heroConfig.Position[2], 0))
local SkeletonGraphic = testLive:GetComponent("SkeletonGraphic")
return testLive
else
--静态加载立绘
local roleStaticImg = poolManager:LoadAsset("TestImg", PoolManager.AssetType.GameObject)
roleStaticImg.transform:SetParent(_objPoint.transform)
roleStaticImg.transform.localScale = Vector3.one * _heroConfig.Static[1]
roleStaticImg.transform.localPosition = Vector3.New(_heroConfig.Static[2], _heroConfig.Static[3], 0)
roleStaticImg.name = "TestImg"
roleStaticImg:GetComponent("Image").sprite = Util.LoadSprite(artResourcesConfig[_heroConfig.BigIcon].Name)
roleStaticImg:GetComponent("Image").raycastTarget = false
return roleStaticImg
end
end
--卸载立绘
function UnLoadHerolive(_heroConfig,_obj)
local artResourcesConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
if _heroConfig.RoleImage ~= 0 then
poolManager:UnLoadLive(artResourcesConfig[_heroConfig.RoleImage].Name, _obj)
else
poolManager:UnLoadAsset("TestImg", _obj, PoolManager.AssetType.gameObject)
end
end
--延迟显示List里的item
function DelayCreation(list,maxIndex)
if list == nil then return end
if #list == 0 then return end
for i = 1, #list do
if list[i] then
if list[i].activeSelf then
list[i]:SetActive(false)
end
end
end
local time = 0.01
local _index = 1
local _timer
if not maxIndex then
maxIndex = #list
end
_timer = Timer.New(function ()
if _index == maxIndex + 1 then
if _timer then
_timer:Stop()
end
end
if list[_index] then
list[_index]:SetActive(true)
Timer.New(function ()
_index = _index + 1
end,time):Start()
end
end,time,maxIndex + 1):Start()
end
--刷新战力
function RefreshPower(_oldPower, _newPower)
local oldPower = _oldPower
local newPower
if oldPower == 0 then
return
end
if _newPower then
newPower = _newPower
else
newPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
end
if oldPower ~= newPower then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldPower, newValue = newPower})
Game.GlobalEvent:DispatchEvent(GameEvent.Player.OnPowerChange)
end
end
--获取图片字
function GetPictureFont(str)
if not str then
return ""
end
if GetLan() == 0 then
return str .. "_zh"
elseif GetLan() == 1 then
return str .. "_en"
elseif GetLan() == 2 then
return str .. "_jp"
elseif GetLan() == 3 then
return str .. "_kr"
elseif GetLan() == 4 then
return str .. "_tw"
elseif GetLan() == 5 then
return str .. "_vn"
else
return str .. "_zh"
end
end
--设置机器人名字
function SetRobotName(uid, name)
if uid < 100000 then
return GetLanguageStrById(tonumber(name))
else
return name
end
end
function CompareBagNumAndNeedNum(id, needNum)
return BagManager.GetItemCountById(id) >= needNum
end
--获取渠道配置文件
function GetChannelConfig()
--Log("ChannelType:".. AppConst.ChannelType)
local channelConfig = ConfigManager.GetConfigDataByKey(ConfigName.ChannelConfig, "ListID", AppConst.ChannelType)
return channelConfig
end
--设置领取按钮状态
function SetBtnReceiveState(state, btn, btnTxt)
if state == 0 then
btn:GetComponent("Image").color = UIColorNew.YELLOW
btnTxt.text = GetLanguageStrById(10023)
elseif state == 1 then
btn:GetComponent("Image").color = UIColorNew.ORANGE
btnTxt.text = GetLanguageStrById(10022)
else
btnTxt.text = GetLanguageStrById(10350)
end
Util.SetGray(btn, state == 2)
btn:GetComponent("Button").enabled = state ~= 2
end
function SetItemCountColor(txt, id, num2)
local num1 = BagManager.GetItemCountById(id)
if num1 < num2 then
txt.text = string.format("%s/%s", PrintWanNum3(num1), PrintWanNum3(num2))
else
txt.text = string.format("%s/%s", PrintWanNum3(num1), PrintWanNum3(num2))
end
end
function GetActivityState(id)
local groups = GetChannelConfig().channel_ActivityGroupsID
local state = false
if groups then
for i = 1, #groups do
if groups[i] == id then
state = true
end
end
end
return state
end
function GetFont()
if GetLan() == 0 then
return "OPPOSans-M-2"
elseif GetLan() == 1 then
return "EnFont1"
elseif GetLan() == 2 then
return "JpFont1"
elseif GetLan() == 3 then
return "KrFont1"
elseif GetLan() == 4 then
return "TwFont1"
elseif GetLan() == 5 then
return "VnFont1"
else
return "OPPOSans-M-2"
end
end
function GetFont2()
if GetLan() == 0 then
return "OPPOSans-M-2 SDF"
elseif GetLan() == 1 then
return "EnFont1 SDF"
elseif GetLan() == 2 then
return "JpFont1 SDF"
elseif GetLan() == 3 then
return "KrFont1 SDF"
elseif GetLan() == 4 then
return "TwFont1 SDF"
elseif GetLan() == 5 then
return "VnFont1 SDF"
else
return "OPPOSans-M-2 SDF"
end
end
function GetNewChatMsg(msg)
local list = {}
local len = 1
local index = 1
if not msg==nil then
for i = 1, string.len(msg) do
if index == i then
local s = string.sub(msg, i, i)
if s == "#" then
if #list ~= 0 then
len = len + 1
end
list[len] = s..string.sub(msg, i+1, i+1)..string.sub(msg, i+2, i+2)
len = len + 1
index = i + 3
else
if not list[len] then
list[len] = s
else
list[len] = list[len]..s
end
index = i + 1
end
end
end
end
local _list = {}
for key, value in pairs(list) do
table.insert(_list, value)
end
list = _list
-- content.text = contentStr
-- LogError(contentStr)
-- for i = 1, #list do
-- LogError(list[i])
-- end
local newStr = ""
for i = 1, #list do
if string.sub(list[i], 1, 1) == "#" then
local config = ConfigManager.GetConfigDataByKey(ConfigName.ExpressionConfig, "Esc", list[i])
if config then
local id = tonumber(config.Id)-1
newStr = newStr..""
else
newStr = newStr..list[i]
end
else
newStr = newStr..list[i]
end
end
return newStr
end
--设置领取按钮状态
function SetBtnReceiveState(state, btn, btnTxt)
if state == 0 then
btn:GetComponent("Image").color = UIColorNew.YELLOW
btnTxt.text = GetLanguageStrById(10023)
elseif state == 1 then
btn:GetComponent("Image").color = UIColorNew.ORANGE
btnTxt.text = GetLanguageStrById(10022)
else
btnTxt.text = GetLanguageStrById(10350)
end
Util.SetGray(btn, state == 2)
btn:GetComponent("Button").enabled = state ~= 2
end
--比较两个数返回不同字体颜色的字符串
function CompareNum(bagNum, needNum)
if bagNum >= needNum then
return string.format("%s/%s", PrintWanNum2(bagNum), PrintWanNum2(needNum))
else
return string.format("%s/%s", PrintWanNum2(bagNum), PrintWanNum2(needNum))
end
end