---@class MainUIInfo MainUIInfo = class() local this = MainUIInfo function this:ctor() end function this:Reset() end function this:Init() self:InitData() self:InitExpHurtData() self:RegistMessages() end function this:InitData() self.experienceAddInfoList = {} ---@type cfg_global_column local tbl = SL:GetConfig("cfg_global",601) if tbl then local strList = string.split(tbl.value,"|") for i, v in pairs(strList) do local strList1 = string.split(v,"#") local type = tonumber(strList1[1]) local name = strList1[2] local command = strList1[3] local needLevel = tonumber(strList1[4]) local args = tonumber(strList1[5]) self.experienceAddInfoList[type] = {cfgId = 0,lastCfgId = 0,type = type, needLevel = needLevel,name = name,command=command,exp = 0,endTime = 0,icon = "experienceIcon",args=args} end end end function this:RegistMessages() SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_EXP_BONUS_INFO, self.RES_EXP_BONUS_INFO, self) SL:RegisterLuaNetMsg(MessageDef.ResFightResultMessage, self.ResFightResultMessage, self) SL:RegisterLUAEvent(MESSAGE_ACCEPT, self.MESSAGE_ACCEPT, self) end function this:RES_EXP_BONUS_INFO(id,message) if self.experienceAddInfoList[message.bonusType] then local expireTime = tonumber(message.expireTime) local exp = (message.value and (expireTime > Time.GetServerTime() or expireTime<=0)) and math.floor(tonumber(message.value) / 100) or 0 self.experienceAddInfoList[message.bonusType].lastCfgId = self.experienceAddInfoList[message.bonusType].cfgId self.experienceAddInfoList[message.bonusType].cfgId = tonumber(message.buffId) self.experienceAddInfoList[message.bonusType].exp = exp self.experienceAddInfoList[message.bonusType].endTime = expireTime end SL:onLUAEvent(LUA_EVENT_EXPERIENCE_ADD_CHANGE) end function this:Reset() for i, v in pairs(self.experienceAddInfoList) do v.endTime = 0 v.exp = 0 v.cfgId=0 end end function this:InitExpHurtData() self.exp_list = {} self.hurt_list = {} end function this:ResFightResultMessage(id,message) local rid = SL:GetMetaValue(EMetaVarGetKey.USER_ID) if tonumber(rid) == message.attackerId then local panel = GUI:GetUI("dev/ui/MainUI/Panel/KLUIHurtExp/KLUIHurtExpPanel") if not panel then panel = GUI:UIPanel_Open("dev/ui/MainUI/Panel/KLUIHurtExp/KLUIHurtExpPanel") end panel:RefreshTime() local target = message.target local all_hpChange = 0 for i, v in ipairs(target) do all_hpChange = all_hpChange + tonumber(v.hpChange) end local time = Time.GetServerTime() self.hurt_list[time] = all_hpChange self:HurtRemoveOutTime() end end --伤害统计只存5秒的 function this:HurtRemoveOutTime() local time = Time.GetServerTime() - 5000 local remove_list = {} for i, v in pairs(self.hurt_list) do if i < time then self.hurt_list[i] = nil end end end ---查询1秒的伤害数据,实际是5秒的平均值 function this:GetHurtNum() local num = 0 for i, v in pairs(self.hurt_list) do num = num + v end num = math.floor(num/5) return num end local exp_str = "经验" function this:MESSAGE_ACCEPT(id,message) if message then if message.id == 32 then if message.params[1] == exp_str then local isSafe = SL:GetMetaValue(EMetaVarGetKey.IN_SAFE_AREA) if isSafe then return end local time = Time.GetServerTime() self.exp_list[time] = tonumber(message.params[2]) self:ExpRemoveOutTime() end end end end --经验统计存1分钟内的 function this:ExpRemoveOutTime() local time = Time.GetServerTime() - 60000 local remove_list = {} for i, v in pairs(self.exp_list) do if i < time then self.exp_list[i] = nil end end end ---查询1分钟的经验数据 function this:GetExpNum() local num = 0 for i, v in pairs(self.exp_list) do num = num + v end return num end return this