MainUIInfo.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. ---@class MainUIInfo
  2. MainUIInfo = class()
  3. local this = MainUIInfo
  4. function this:ctor()
  5. end
  6. function this:Reset()
  7. end
  8. function this:Init()
  9. self:InitData()
  10. self:InitExpHurtData()
  11. self:RegistMessages()
  12. end
  13. function this:InitData()
  14. self.experienceAddInfoList = {}
  15. ---@type cfg_global_column
  16. local tbl = SL:GetConfig("cfg_global",601)
  17. if tbl then
  18. local strList = string.split(tbl.value,"|")
  19. for i, v in pairs(strList) do
  20. local strList1 = string.split(v,"#")
  21. local type = tonumber(strList1[1])
  22. local name = strList1[2]
  23. local command = strList1[3]
  24. local needLevel = tonumber(strList1[4])
  25. local args = tonumber(strList1[5])
  26. self.experienceAddInfoList[type] = {cfgId = 0,lastCfgId = 0,type = type, needLevel = needLevel,name = name,command=command,exp = 0,endTime = 0,icon = "experienceIcon",args=args}
  27. end
  28. end
  29. end
  30. function this:RegistMessages()
  31. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_EXP_BONUS_INFO, self.RES_EXP_BONUS_INFO, self)
  32. SL:RegisterLuaNetMsg(MessageDef.ResFightResultMessage, self.ResFightResultMessage, self)
  33. SL:RegisterLUAEvent(MESSAGE_ACCEPT, self.MESSAGE_ACCEPT, self)
  34. end
  35. function this:RES_EXP_BONUS_INFO(id,message)
  36. if self.experienceAddInfoList[message.bonusType] then
  37. local expireTime = tonumber(message.expireTime)
  38. local exp = (message.value and (expireTime > Time.GetServerTime() or expireTime<=0)) and math.floor(tonumber(message.value) / 100) or 0
  39. self.experienceAddInfoList[message.bonusType].lastCfgId = self.experienceAddInfoList[message.bonusType].cfgId
  40. self.experienceAddInfoList[message.bonusType].cfgId = tonumber(message.buffId)
  41. self.experienceAddInfoList[message.bonusType].exp = exp
  42. self.experienceAddInfoList[message.bonusType].endTime = expireTime
  43. end
  44. SL:onLUAEvent(LUA_EVENT_EXPERIENCE_ADD_CHANGE)
  45. end
  46. function this:Reset()
  47. for i, v in pairs(self.experienceAddInfoList) do
  48. v.endTime = 0
  49. v.exp = 0
  50. v.cfgId=0
  51. end
  52. end
  53. function this:InitExpHurtData()
  54. self.exp_list = {}
  55. self.hurt_list = {}
  56. end
  57. function this:ResFightResultMessage(id,message)
  58. local rid = SL:GetMetaValue(EMetaVarGetKey.USER_ID)
  59. if tonumber(rid) == message.attackerId then
  60. local panel = GUI:GetUI("dev/ui/MainUI/Panel/KLUIHurtExp/KLUIHurtExpPanel")
  61. if not panel then
  62. panel = GUI:UIPanel_Open("dev/ui/MainUI/Panel/KLUIHurtExp/KLUIHurtExpPanel")
  63. end
  64. panel:RefreshTime()
  65. local target = message.target
  66. local all_hpChange = 0
  67. for i, v in ipairs(target) do
  68. all_hpChange = all_hpChange + tonumber(v.hpChange)
  69. end
  70. local time = Time.GetServerTime()
  71. self.hurt_list[time] = all_hpChange
  72. self:HurtRemoveOutTime()
  73. end
  74. end
  75. --伤害统计只存5秒的
  76. function this:HurtRemoveOutTime()
  77. local time = Time.GetServerTime() - 5000
  78. local remove_list = {}
  79. for i, v in pairs(self.hurt_list) do
  80. if i < time then
  81. self.hurt_list[i] = nil
  82. end
  83. end
  84. end
  85. ---查询1秒的伤害数据,实际是5秒的平均值
  86. function this:GetHurtNum()
  87. local num = 0
  88. for i, v in pairs(self.hurt_list) do
  89. num = num + v
  90. end
  91. num = math.floor(num/5)
  92. return num
  93. end
  94. local exp_str = "经验"
  95. function this:MESSAGE_ACCEPT(id,message)
  96. if message then
  97. if message.id == 32 then
  98. if message.params[1] == exp_str then
  99. local isSafe = SL:GetMetaValue(EMetaVarGetKey.IN_SAFE_AREA)
  100. if isSafe then
  101. return
  102. end
  103. local time = Time.GetServerTime()
  104. self.exp_list[time] = tonumber(message.params[2])
  105. self:ExpRemoveOutTime()
  106. end
  107. end
  108. end
  109. end
  110. --经验统计存1分钟内的
  111. function this:ExpRemoveOutTime()
  112. local time = Time.GetServerTime() - 60000
  113. local remove_list = {}
  114. for i, v in pairs(self.exp_list) do
  115. if i < time then
  116. self.exp_list[i] = nil
  117. end
  118. end
  119. end
  120. ---查询1分钟的经验数据
  121. function this:GetExpNum()
  122. local num = 0
  123. for i, v in pairs(self.exp_list) do
  124. num = num + v
  125. end
  126. return num
  127. end
  128. return this