Fixed high memory usage issue

This commit is contained in:
OTCv8 2020-01-14 01:09:33 +01:00
parent 26c347d2bc
commit 11ad766308
16 changed files with 111 additions and 37 deletions

View File

@ -133,6 +133,7 @@ function sendStats()
cpu = g_platform.getCPUName(),
mem = g_platform.getTotalSystemMemory(),
mem_usage = g_platform.getMemoryUsage(),
lua_mem_usage = gcinfo(),
os_name = g_platform.getOSName(),
platform = g_window.getPlatformType(),
uptime = g_clock.seconds()
@ -170,6 +171,7 @@ function update()
end
statsWindow.debugPanel.sleepTime:setText("Sleep: " .. math.round(g_stats.getSleepTime() / math.max(1, g_clock.micros() - lastSleepTimeReset), 2) .. "%")
statsWindow.debugPanel.luaRamUsage:setText("Ram usage by lua: " .. gcinfo() .. " kb")
local adaptive = "Adaptive: " .. g_adaptiveRenderer.getLevel() .. " | " .. g_adaptiveRenderer.getDebugInfo()
adaptiveRender:setText(adaptive)
atlas:setText("Atlas: " .. g_atlas.getStats())

View File

@ -38,6 +38,10 @@ MainWindow
text: -
anchors.top: parent.top
DebugText
id: luaRamUsage
text: -
DebugLabel
!text: tr('Render')
@ -89,7 +93,7 @@ MainWindow
text: -
DebugLabel
!text: tr('Widgets')
!text: tr('Widgets & Objects')
DebugText
id: widgetsInfo

View File

@ -3,7 +3,6 @@ battleButton = nil
battlePanel = nil
filterPanel = nil
toggleFilterButton = nil
creatureAgeList = {}
battleButtonsList = {}
mouseWidget = nil
@ -233,12 +232,8 @@ function checkCreatures()
local dimension = modules.game_interface.getMapPanel():getVisibleDimension()
local spectators = g_map.getSpectatorsInRangeEx(player:getPosition(), false, math.floor(dimension.width / 2), math.floor(dimension.width / 2), math.floor(dimension.height / 2), math.floor(dimension.height / 2))
creatures = {}
local creatures = {}
for _, creature in ipairs(spectators) do
if creatureAgeList[creature] == nil then
creatureAgeList[creature] = creatureAgeCounter
creatureAgeCounter = creatureAgeCounter + 1
end
if doCreatureFitFilters(creature) then
table.insert(creatures, creature)
end
@ -335,23 +330,23 @@ function sortCreatures(creatures)
local playerPos = player:getPosition()
table.sort(creatures, function(a, b)
if getDistanceBetween(playerPos, a:getPosition()) == getDistanceBetween(playerPos, b:getPosition()) then
return creatureAgeList[a] > creatureAgeList[b]
return a:getAge() > b:getAge()
end
return getDistanceBetween(playerPos, a:getPosition()) > getDistanceBetween(playerPos, b:getPosition())
end)
elseif getSortType() == 'health' then
table.sort(creatures, function(a, b)
if a:getHealthPercent() == b:getHealthPercent() then
return creatureAgeList[a] > creatureAgeList[b]
return a:getAge() > b:getAge()
end
return a:getHealthPercent() > b:getHealthPercent()
end)
elseif getSortType() == 'age' then
table.sort(creatures, function(a, b) return creatureAgeList[a] > creatureAgeList[b] end)
table.sort(creatures, function(a, b) return a:getAge() > b:getAge() end)
else -- name
table.sort(creatures, function(a, b)
if a:getName():lower() == b:getName():lower() then
return creatureAgeList[a] > creatureAgeList[b]
return a:getAge() > b:getAge()
end
return a:getName():lower() > b:getName():lower()
end)

View File

@ -1,3 +1,23 @@
BotTabBar < MoveableTabBar
tab-spacing: 1
margin-left: 1
margin-right: 1
movable: false
height: 20
$on:
visible: true
margin-top: 2
$!on:
visible: false
margin-top: -20
BotTabBarButton < MoveableTabBarButton
padding: 3
text-horizontal-auto-resize: true
MiniWindow
id: botWindow
!text: tr('Bot')
@ -88,24 +108,12 @@ MiniWindow
margin-left: 2
margin-right: 2
MoveableTabBar
BotTabBar
id: botTabs
anchors.top: prev.bottom
anchors.left: parent.left
anchors.right: parent.right
tab-spacing: 1
margin-left: 1
margin-right: 1
height: 20
movable: false
$on:
visible: true
margin-top: 2
$!on:
visible: false
margin-top: -20
margin-right: -20
Panel
id: botPanel

View File

@ -67,6 +67,12 @@ function executeBot(config, storage, tabs, msgCallback, saveConfigCallback, webs
context.table = table
context.string = string
context.tonumber = tonumber
context.type = type
context.pcall = pcall
context.load = function(str) return load(str, nil, nil, context) end
context.loadstring = context.load
context.assert = assert
context.gcinfo = gcinfo
context.tr = tr
context.json = json
context.regexMatch = regexMatch
@ -84,9 +90,16 @@ function executeBot(config, storage, tabs, msgCallback, saveConfigCallback, webs
context.g_window = g_window
context.g_mouse = g_mouse
context.Item = Item
context.Creature = Creature
context.ThingType = ThingType
context.Effect = Effect
context.Missile = Missile
context.Player = Player
context.Monster = Monster
context.StaticText = StaticText
context.Config = Config
context.HTTP = HTTP
context.OutputMessage = OutputMessage
context.modules = modules
-- log functions
@ -123,7 +136,7 @@ function executeBot(config, storage, tabs, msgCallback, saveConfigCallback, webs
context.time = g_clock.millis()
for i, macro in ipairs(context._macros) do
if macro.lastExecution + macro.timeout <= context.now and (macro.name == nil or macro.name:len() < 1 or macro.enabled) then
if macro.lastExecution + macro.timeout <= context.now and macro.enabled then
local status, result = pcall(function()
if macro.callback(macro) then
macro.lastExecution = context.now

View File

@ -0,0 +1,8 @@
North = 0
East = 1
South = 2
West = 3
NorthEast = 4
SouthEast = 5
SouthWest = 6
NorthWest = 7

View File

@ -10,8 +10,6 @@ context.addIcon = function(id, options, callback)
text: string
x: float (0.0 - 1.0)
y: float (0.0 - 1.0)
width: number
height: number
hotkey: string
switchable: true / false [default: true]
movable: true / false [default: true]
@ -63,6 +61,9 @@ context.addIcon = function(id, options, callback)
widget.status:hide()
widget.status:setOn(true)
else
if config.enabled ~= true then
config.enabled = false
end
widget.status:setOn(config.enabled)
end

View File

@ -95,6 +95,8 @@ context.macro = function(timeout, name, hotkey, callback, parent)
if context.storage._macros[name] == true then
macro.setOn()
end
else
macro.enabled = true -- unnamed macros are enabled by default
end
local desc = "lua"

View File

@ -16,16 +16,17 @@ context.NPC.isTrading = function()
end
context.NPC.hasTrade = context.NPC.isTrading
context.NPC.hasTradeWindow = context.NPC.isTrading
context.NPC.isTradeOpen = context.NPC.isTrading
context.NPC.getSellItems = function()
if not context.NPC.isTrading() then return {} end
local items = {}
for i, item in ipairs(modules.game_npctrade.tradeItems[modules.game_npctrade.SELL]) do
table.insert(items, {
item = item.ptr,
id = item.ptr:getId(),
name = item.name,
count = item.ptr:getCount(),
name = item.name,
subType = item.ptr:getSubType(),
weight = item.weight / 100,
price = item.price
@ -36,11 +37,13 @@ end
context.NPC.getBuyItems = function()
if not context.NPC.isTrading() then return {} end
local items = {}
for i, item in ipairs(modules.game_npctrade.tradeItems[modules.game_npctrade.BUY]) do
table.insert(items, {
item = item.ptr,
id = item.ptr:getId(),
name = item.name,
count = item.ptr:getCount(),
name = item.name,
subType = item.ptr:getSubType(),
weight = item.weight / 100,
price = item.price
@ -67,7 +70,15 @@ end
context.NPC.sell = function(item, count, ignoreEquipped)
if type(item) == 'number' then
for i, entry in ipairs(context.NPC.getSellItems()) do
if entry.id == item then
item = entry.item
break
end
end
if type(item) == 'number' then
item = Item.create(item)
end
end
if count == 0 then
count = 1
@ -83,7 +94,15 @@ end
context.NPC.buy = function(item, count, ignoreCapacity, withBackpack)
if type(item) == 'number' then
for i, entry in ipairs(context.NPC.getBuyItems()) do
if entry.id == item then
item = entry.item
break
end
end
if type(item) == 'number' then
item = Item.create(item)
end
end
if count == nil or count <= 0 then
count = 1

View File

@ -10,9 +10,24 @@ context.setupUI = function(otml, parent)
end
context.addTab = function(name)
local tab = context.tabs:getTab(name)
if tab then -- return existing tab
return tab.tabPanel.content
end
context.tabs:setOn(true)
return context.tabs:addTab(name, g_ui.createWidget('BotPanel')).tabPanel.content
local newTab = context.tabs:addTab(name, g_ui.createWidget('BotPanel')).tabPanel.content
print(#(context.tabs.tabs))
if #(context.tabs.tabs) > 5 then
for k,tab in pairs(context.tabs.tabs) do
tab:setPadding(3)
tab:setFont('cipsoftFont')
end
end
return newTab
end
context.getTab = context.addTab
context.addSwitch = function(id, text, onClickCallback, parent)
if not parent then

View File

@ -424,7 +424,7 @@ function onOpenNpcTrade(items)
newItem.price = item[4]
table.insert(tradeItems[BUY], newItem)
end
if item[5] > 0 then
local newItem = {}
newItem.ptr = item[1]
@ -551,8 +551,10 @@ function sellAll()
for itemid,item in pairs(playerItems) do
local item = Item.create(itemid)
local amount = getSellQuantity(item)
if amount > 0 then
g_game.sellItem(item, amount, ignoreEquipped:isChecked())
while amount > 0 do
local maxAmount = math.min(amount, getMaxAmount())
g_game.sellItem(item, maxAmount, ignoreEquipped:isChecked())
amount = amount - maxAmount
end
end
end

View File

@ -20,7 +20,8 @@ function init()
onPositionChange = onPositionChange,
onWalk = onWalk,
onTeleport = onTeleport,
onWalkFinish = onWalkFinish
onWalkFinish = onWalkFinish,
onCancelWalk = onCancelWalk
})
modules.game_interface.getRootPanel().onFocusChange = stopSmartWalk
@ -255,6 +256,10 @@ function onWalkFinish(player)
end
end
function onCancelWalk(player)
player:lockWalk(50)
end
function walk(dir)
lastManualWalk = g_clock.millis()
local player = g_game.getLocalPlayer()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.