|
|
|
|
local floatingnumbers = require("devilutionx.floatingnumbers")
|
|
|
|
|
local events = require("devilutionx.events")
|
|
|
|
|
local player = require("devilutionx.player")
|
|
|
|
|
local system = require("devilutionx.system")
|
|
|
|
|
local render = require("devilutionx.render")
|
|
|
|
|
|
|
|
|
|
local accumulated_xp = {}
|
|
|
|
|
local MERGE_WINDOW_MS = 100
|
|
|
|
|
|
|
|
|
|
events.OnPlayerGainExperience.add(function(_player, experience)
|
|
|
|
|
if _player == player.self() then
|
|
|
|
|
local id = _player.id
|
|
|
|
|
local now = system.get_ticks()
|
|
|
|
|
|
|
|
|
|
local entry = accumulated_xp[id]
|
|
|
|
|
if entry and (now - entry.time) < MERGE_WINDOW_MS then
|
|
|
|
|
entry.experience = entry.experience + experience
|
|
|
|
|
else
|
|
|
|
|
entry = { experience = experience, time = now }
|
|
|
|
|
accumulated_xp[id] = entry
|
|
|
|
|
end
|
|
|
|
|
entry.time = now
|
|
|
|
|
|
|
|
|
|
local text = tostring(entry.experience) .. " XP"
|
|
|
|
|
floatingnumbers.add(text, _player.position, render.UiFlags.ColorWhite, id, true)
|
|
|
|
|
end
|
|
|
|
|
end)
|