Best Practices
Avoiding Bugsplats
Variables must be properly purged, attempting to access certain obj properties after the obj has been deleted by the LoL client will result in LoL bugsplatting.
lua
local ex_obj
local function on_tick()
if ex_obj and ex_obj.isDead then
ex_obj = nil
end
--continue rest of your code
end
local function on_create_minion(obj)
if not ex_obj then
ex_obj = obj
end
end
local function on_delete_minion(obj)
if ex_obj and ex_obj.ptr==obj.ptr then
ex_obj = nil
end
end
cb.add(cb.tick, on_tick)
cb.add(cb.create_minion, on_create_minion)
cb.add(cb.delete_minion, on_delete_minion)Do not use spell.obj outside of the spell callback.
lua
local wrong
local correct
local function on_process_spell(spell)
if not wrong then
wrong = spell
end
if not correct then
correct = {
windUpTime = spell.windUpTime,
startPos = vec3(spell.startPos),
}
end
end
local function on_tick()
if wrong then
--DO NOT DO THIS, this is very likely to lead to bugsplats!
print(wrong.windUpTime)
end
if correct then
--Instead, do this
print(correct.windUpTime)
end
end
cb.add(cb.spell, on_process_spell)
cb.add(cb.tick, on_tick)Do not attempt to access obj properties other than ptr in cb.delete_minion, cb.delete_particle or cb.delete_missile.
lua
local function on_delete_minion(obj)
--wrong
if obj.charName=='dontdothis' then
--this is likely to lead to bugsplats
end
--correct, only check ptrs here
if obj.ptr==someobj.ptr then
someobj = nil
end
end
local function on_delete_particle(obj)
--wrong
if obj.charName=='dontdothis' then
--this is likely to lead to bugsplats
end
--correct, only check ptrs here
if obj.ptr==someobj.ptr then
someobj = nil
end
end
local function on_delete_missile(obj)
--wrong
if obj.charName=='dontdothis' then
--this is likely to lead to bugsplats
end
--correct, only check ptrs here
if obj.ptr==someobj.ptr then
someobj = nil
end
end
cb.add(cb.create_minion, on_create_minion)
cb.add(cb.delete_particlee, on_delete_particle)
cb.add(cb.delete_missile, on_delete_missile)Do not use the buffManager, use obj.buff instead.
Performance Tips
- The
cb.on_drawwill cause lots performance, Dont loop objManager or do lots calulation in it. - Use
objManager.minions['xxx']to get the type of minions needed. - Some other tips for lua: using local variable
- DONT use any NYI: The JIT Compiler's Drawback: Why Avoid NYI?
lua
-- normal
for i=0, objManager.minions[TEAM_ENEMY].size-1 do
local obj = objManager.minions[TEAM_ENEMY][i]
end
-- use, local variable, better
local enemyMinions = objManager.minions[TEAM_ENEMY]
local enemyMinionsSize = enemyMinions.size
for i=0, enemyMinionsSize-1 do
local obj = enemyMinions[i]
endInternal Profiler Tools
- Start game and click "Open Performance Monitor" in "Hanbot Settings"
- In "Settings" tab, Check "Enable LuaJIT Profiler"
- Press [-] to start record performance data and press [+] to stop
- Download this profiler_tool and start profiler_gui
- Open "profile.prof" (in the same directory with core.dll) and analyze performance (It is recommended to display the "Stats" window as "Aggregate Stats")