Version 1.5 - bug fixes and small improvements

This commit is contained in:
OTCv8 2019-12-23 20:19:46 +01:00
parent cf8b21263d
commit d15cc347dc
17 changed files with 149 additions and 25 deletions

View File

@ -42,15 +42,15 @@ if Services.crash ~= nil and Services.crash:len() > 4 then
local normalLog = g_logger.getLastLog() local normalLog = g_logger.getLastLog()
local crashed = false local crashed = false
if crashLog:len() > 0 then if crashLog:len() > 0 then
g_http.post(Services.crash .. "?txt=0", crashLog) g_http.post(Services.crash .. "?txt=0&version=" .. g_app.getVersion(), crashLog)
crashed = true crashed = true
end end
if crashLogTxt:len() > 0 then if crashLogTxt:len() > 0 then
g_http.post(Services.crash .. "?txt=1", crashLogTxt) g_http.post(Services.crash .. "?txt=1&version=" .. g_app.getVersion(), crashLogTxt)
crashed = true crashed = true
end end
if crashed and normalLog:len() > 0 then if crashed and normalLog:len() > 0 then
g_http.post(Services.crash .. "?txt=2", normalLog) g_http.post(Services.crash .. "?txt=2&version=" .. g_app.getVersion(), normalLog)
end end
g_resources.deleteCrashLog() g_resources.deleteCrashLog()
end end

View File

@ -34,11 +34,9 @@ local function tryLogin(charInfo, tries)
-- proxies for not http login users -- proxies for not http login users
if charInfo.worldHost == "0.0.0.0" and g_proxy then if charInfo.worldHost == "0.0.0.0" and g_proxy then
g_proxy.clear() g_proxy.clear()
-- g_proxy.addProxy(localPort, proxyHost, proxyPort, proxyPriority) -- g_proxy.addProxy(proxyHost, proxyPort, proxyPriority)
g_proxy.addProxy(tonumber(charInfo.worldPort), "51.158.184.57", 7162, 0) g_proxy.addProxy("163.172.147.135", 7162, 0)
g_proxy.addProxy(tonumber(charInfo.worldPort), "54.39.190.20", 7162, 0) g_proxy.addProxy("158.69.68.42", 7162, 0)
g_proxy.addProxy(tonumber(charInfo.worldPort), "51.83.226.109", 7162, 0)
g_proxy.addProxy(tonumber(charInfo.worldPort), "35.247.201.100", 443, 0)
end end
g_game.loginWorld(G.account, G.password, charInfo.worldName, charInfo.worldHost, charInfo.worldPort, charInfo.characterName, G.authenticatorToken, G.sessionKey) g_game.loginWorld(G.account, G.password, charInfo.worldName, charInfo.worldHost, charInfo.worldPort, charInfo.characterName, G.authenticatorToken, G.sessionKey)

View File

@ -131,6 +131,7 @@ function sendStats()
display_height = g_window.getDisplayHeight(), display_height = g_window.getDisplayHeight(),
cpu = g_platform.getCPUName(), cpu = g_platform.getCPUName(),
mem = g_platform.getTotalSystemMemory(), mem = g_platform.getTotalSystemMemory(),
mem_usage = g_platform.getMemoryUsage(),
os_name = g_platform.getOSName() os_name = g_platform.getOSName()
} }
} }

View File

@ -34,6 +34,7 @@ function init()
onGameStart = online, onGameStart = online,
onGameEnd = offline, onGameEnd = offline,
onTalk = botOnTalk, onTalk = botOnTalk,
onTextMessage = botOnTextMessage,
onUse = botOnUse, onUse = botOnUse,
onUseWith = botOnUseWith, onUseWith = botOnUseWith,
onChannelList = botChannelList, onChannelList = botChannelList,
@ -161,6 +162,7 @@ function terminate()
onGameStart = online, onGameStart = online,
onGameEnd = offline, onGameEnd = offline,
onTalk = botOnTalk, onTalk = botOnTalk,
onTextMessage = botOnTextMessage,
onUse = botOnUse, onUse = botOnUse,
onUseWith = botOnUseWith, onUseWith = botOnUseWith,
onChannelList = botChannelList, onChannelList = botChannelList,
@ -479,6 +481,11 @@ function botOnTalk(name, level, mode, text, channelId, pos)
safeBotCall(function() compiledConfig.callbacks.onTalk(name, level, mode, text, channelId, pos) end) safeBotCall(function() compiledConfig.callbacks.onTalk(name, level, mode, text, channelId, pos) end)
end end
function botOnTextMessage(mode, text)
if compiledConfig == nil then return false end
safeBotCall(function() compiledConfig.callbacks.onTextMessage(mode, text) end)
end
function botAddThing(tile, thing) function botAddThing(tile, thing)
if compiledConfig == nil then return false end if compiledConfig == nil then return false end
safeBotCall(function() compiledConfig.callbacks.onAddThing(tile, thing) end) safeBotCall(function() compiledConfig.callbacks.onAddThing(tile, thing) end)

View File

@ -19,6 +19,7 @@ function executeBot(config, storage, tabs, msgCallback, saveConfigCallback, webs
onKeyUp = {}, onKeyUp = {},
onKeyPress = {}, onKeyPress = {},
onTalk = {}, onTalk = {},
onTextMessage = {},
onAddThing = {}, onAddThing = {},
onRemoveThing = {}, onRemoveThing = {},
onCreatureAppear = {}, onCreatureAppear = {},
@ -169,6 +170,11 @@ function executeBot(config, storage, tabs, msgCallback, saveConfigCallback, webs
callback(name, level, mode, text, channelId, pos) callback(name, level, mode, text, channelId, pos)
end end
end, end,
onTextMessage = function(mode, text)
for i, callback in ipairs(context._callbacks.onTextMessage) do
callback(mode, text)
end
end,
onAddThing = function(tile, thing) onAddThing = function(tile, thing)
for i, callback in ipairs(context._callbacks.onAddThing) do for i, callback in ipairs(context._callbacks.onAddThing) do
callback(tile, thing) callback(tile, thing)

View File

@ -39,6 +39,11 @@ context.onTalk = function(callback)
return context.callback("onTalk", callback) return context.callback("onTalk", callback)
end end
-- onTextMessage(callback) -- callback = function(mode, text)
context.onTextMessage = function(callback)
return context.callback("onTextMessage", callback)
end
-- onAddThing(callback) -- callback = function(tile, thing) -- onAddThing(callback) -- callback = function(tile, thing)
context.onAddThing = function(callback) context.onAddThing = function(callback)
return context.callback("onAddThing", callback) return context.callback("onAddThing", callback)

View File

@ -64,12 +64,10 @@ context.macro = function(timeout, name, hotkey, callback, parent)
end end
-- hotkey(keys, callback) -- hotkey(keys, callback)
-- hotkey(keys, callback, parent)
-- hotkey(keys, name, callback) -- hotkey(keys, name, callback)
-- hotkey(keys, name, callback, parent) -- hotkey(keys, name, callback, parent)
context.hotkey = function(keys, name, callback, parent, single) context.hotkey = function(keys, name, callback, parent, single)
if type(name) == 'function' then if type(name) == 'function' then
parent = callback
callback = name callback = name
name = "" name = ""
end end
@ -110,12 +108,10 @@ context.hotkey = function(keys, name, callback, parent, single)
end end
-- singlehotkey(keys, callback) -- singlehotkey(keys, callback)
-- singlehotkey(keys, callback, parent)
-- singlehotkey(keys, name, callback) -- singlehotkey(keys, name, callback)
-- singlehotkey(keys, name, callback, parent) -- singlehotkey(keys, name, callback, parent)
context.singlehotkey = function(keys, name, callback, parent) context.singlehotkey = function(keys, name, callback, parent)
if type(name) == 'function' then if type(name) == 'function' then
parent = callback
callback = name callback = name
name = "" name = ""
end end

View File

@ -19,7 +19,7 @@ local function sendAction(action, data)
data = {} data = {}
end end
if protocolGame then if protocolGame then
protocolGame:sendExtendedOpcode(SHOP_EXTENTED_OPCODE, json.encode({action = action, data = data})) protocolGame:sendExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, {action = action, data = data})
end end
end end
@ -27,7 +27,7 @@ end
function init() function init()
connect(g_game, { onGameStart = check, onGameEnd = hide }) connect(g_game, { onGameStart = check, onGameEnd = hide })
ProtocolGame.registerExtendedOpcode(SHOP_EXTENTED_OPCODE, onExtendedOpcode) ProtocolGame.registerExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, onExtendedJSONOpcode)
if g_game.isOnline() then if g_game.isOnline() then
check() check()
@ -37,7 +37,7 @@ end
function terminate() function terminate()
disconnect(g_game, { onGameStart = check, onGameEnd = hide }) disconnect(g_game, { onGameStart = check, onGameEnd = hide })
ProtocolGame.unregisterExtendedOpcode(SHOP_EXTENTED_OPCODE, onExtendedOpcode) ProtocolGame.unregisterExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, onExtendedJSONOpcode)
if shopButton then if shopButton then
shopButton:destroy() shopButton:destroy()
@ -87,7 +87,7 @@ function toggle()
check() check()
end end
function onExtendedOpcode(protocol, code, buffer) function onExtendedJSONOpcode(protocol, code, json_data)
if not shop then if not shop then
shop = g_ui.displayUI('shop') shop = g_ui.displayUI('shop')
shop:hide() shop:hide()
@ -96,12 +96,6 @@ function onExtendedOpcode(protocol, code, buffer)
connect(shop.categories, { onChildFocusChange = changeCategory }) connect(shop.categories, { onChildFocusChange = changeCategory })
end end
local json_status, json_data = pcall(function() return json.decode(buffer) end)
if not json_status then
g_logger.error("SHOP json error: " .. json_data)
return false
end
local action = json_data['action'] local action = json_data['action']
local data = json_data['data'] local data = json_data['data']
local status = json_data['status'] local status = json_data['status']
@ -316,6 +310,7 @@ function addOffer(category, data)
offer.description:setText(data["description"]) offer.description:setText(data["description"])
if category ~= 0 then if category ~= 0 then
offer.onDoubleClick = buyOffer offer.onDoubleClick = buyOffer
offer.buyButton.onClick = function() buyOffer(offer) end
end end
end end

View File

@ -80,13 +80,23 @@ ShopOffer < Panel
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
margin-left: 55 margin-left: 55
margin-right: 55
text-align: topleft text-align: topleft
text: UAHSbjaS ASDJHASD ASKJD ssssUAHSbjaS ASDJHASD ASKJD ssssUAHSbjaS ASDJHASD ASKJD ssss
text-auto-resize: true text-auto-resize: true
text-wrap: true text-wrap: true
color: white color: white
font: verdana-11px-rounded font: verdana-11px-rounded
Button
id: buyButton
text: BUY
height: 25
anchors.verticalCenter: parent.verticalCenter
anchors.left: prev.right
anchors.right: parent.right
margin-right: 15
text-align: center
ShopOfferItem < ShopOffer ShopOfferItem < ShopOffer
UIItem UIItem
id: item id: item

View File

@ -367,7 +367,7 @@ end
function turn(dir, repeated) function turn(dir, repeated)
local player = g_game.getLocalPlayer() local player = g_game.getLocalPlayer()
if player:isWalking() and player:getWalkDirection() == dir then if player:isWalking() and player:getWalkDirection() == dir and not player:isServerWalking() then
return return
end end

View File

@ -1,5 +1,8 @@
local opcodeCallbacks = {} local opcodeCallbacks = {}
local extendedCallbacks = {} local extendedCallbacks = {}
local extendedJSONCallbacks = {}
local extendedJSONData = {}
local maxPacketSize = 65000
function ProtocolGame:onOpcode(opcode, msg) function ProtocolGame:onOpcode(opcode, msg)
for i, callback in pairs(opcodeCallbacks) do for i, callback in pairs(opcodeCallbacks) do
@ -16,6 +19,29 @@ function ProtocolGame:onExtendedOpcode(opcode, buffer)
if callback then if callback then
callback(self, opcode, buffer) callback(self, opcode, buffer)
end end
callback = extendedJSONCallbacks[opcode]
if callback then
local status = buffer:sub(1,1) -- O - just one message, S - start, P - part, E - end
local data = buffer:sub(2)
if status ~= "E" and status ~= "P" then
extendedJSONData[opcode] = ""
end
if status ~= "S" and status ~= "P" and status ~= "E" then
extendedJSONData[opcode] = buffer
else
extendedJSONData[opcode] = extendedJSONData[opcode] .. data
end
if status ~= "S" and status ~= "P" then
local json_status, json_data = pcall(function() return json.decode(extendedJSONData[opcode]) end)
extendedJSONData[opcode] = nil
if not json_status then
error("Invalid data in extended JSON opcode (" .. json_status .. "): " .. json_data)
return
end
callback(self, opcode, json_data)
end
end
end end
function ProtocolGame.registerOpcode(opcode, callback) function ProtocolGame.registerOpcode(opcode, callback)
@ -57,3 +83,56 @@ function ProtocolGame.unregisterExtendedOpcode(opcode)
extendedCallbacks[opcode] = nil extendedCallbacks[opcode] = nil
end end
function ProtocolGame.registerExtendedJSONOpcode(opcode, callback)
if not callback or type(callback) ~= 'function' then
error('Invalid callback.')
end
if opcode < 0 or opcode > 255 then
error('Invalid opcode. Range: 0-255')
end
if extendedJSONCallbacks[opcode] then
error('Opcode is already taken.')
end
extendedJSONCallbacks[opcode] = callback
end
function ProtocolGame.unregisterExtendedJSONOpcode(opcode)
if opcode < 0 or opcode > 255 then
error('Invalid opcode. Range: 0-255')
end
if not extendedJSONCallbacks[opcode] then
error('Opcode is not registered.')
end
extendedJSONCallbacks[opcode] = nil
end
function ProtocolGame:sendExtendedJSONOpcode(opcode, data)
if opcode < 0 or opcode > 255 then
error('Invalid opcode. Range: 0-255')
end
if type(data) ~= "table" then
error('Invalid data type, should be table')
end
local buffer = json.encode(data)
local s = {}
for i=1, #buffer, maxPacketSize do
s[#s+1] = buffer:sub(i,i+maxPacketSize - 1)
end
if #s == 1 then
self:sendExtendedOpcode(opcode, s[1])
return
end
self:sendExtendedOpcode(opcode, "S" .. s[1])
for i=2,#s - 1 do
self:sendExtendedOpcode(opcode, "P" .. s[i])
end
self:sendExtendedOpcode(opcode, "E" .. s[#s])
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -17,6 +17,7 @@ local SHOP_AD = { -- can be nil
url = "http://otclient.ovh", url = "http://otclient.ovh",
text = "" text = ""
} }
local MAX_PACKET_SIZE = 50000
--[[ SQL TABLE --[[ SQL TABLE
@ -217,10 +218,36 @@ function sendJSON(player, action, data, forceStatus)
end end
player:setStorageValue(1150001, os.time()) player:setStorageValue(1150001, os.time())
local buffer = json.encode({action = action, data = data, status = status})
local s = {}
for i=1, #buffer, MAX_PACKET_SIZE do
s[#s+1] = buffer:sub(i,i+MAX_PACKET_SIZE - 1)
end
local msg = NetworkMessage() local msg = NetworkMessage()
if #s == 1 then
msg:addByte(50)
msg:addByte(SHOP_EXTENDED_OPCODE)
msg:addString(s[1])
msg:sendToPlayer(player)
return
end
-- split message if too big
msg:addByte(50) msg:addByte(50)
msg:addByte(SHOP_EXTENDED_OPCODE) msg:addByte(SHOP_EXTENDED_OPCODE)
msg:addString(json.encode({action = action, data = data, status = status})) msg:addString("S" .. s[1])
msg:sendToPlayer(player)
for i=2,#s - 1 do
msg = NetworkMessage()
msg:addByte(50)
msg:addByte(SHOP_EXTENDED_OPCODE)
msg:addString("P" .. s[i])
msg:sendToPlayer(player)
end
msg = NetworkMessage()
msg:addByte(50)
msg:addByte(SHOP_EXTENDED_OPCODE)
msg:addString("E" .. s[#s])
msg:sendToPlayer(player) msg:sendToPlayer(player)
end end