mirror of
https://github.com/edubart/otclient.git
synced 2025-10-14 11:34:54 +02:00
Add/get table functions implemented on ext charlist
This commit is contained in:
@@ -295,3 +295,10 @@ KeyCodeDescs = {
|
||||
[KeyNumpad8] = 'Numpad8',
|
||||
[KeyNumpad9] = 'Numpad9'
|
||||
}
|
||||
|
||||
NetworkMessageTypes = {
|
||||
Boolean = 1,
|
||||
Number = 2,
|
||||
String = 3,
|
||||
Table = 4
|
||||
}
|
||||
|
@@ -19,3 +19,6 @@ Module
|
||||
dofile 'mouse'
|
||||
|
||||
dofiles 'ui'
|
||||
|
||||
dofile 'inputmessage'
|
||||
dofile 'outputmessage'
|
||||
|
26
modules/corelib/inputmessage.lua
Normal file
26
modules/corelib/inputmessage.lua
Normal file
@@ -0,0 +1,26 @@
|
||||
function InputMessage:getData()
|
||||
local dataType = self:getU8()
|
||||
if dataType == NetworkMessageTypes.Boolean then
|
||||
return numbertoboolean(self:getU8())
|
||||
elseif dataType == NetworkMessageTypes.Number then
|
||||
return self:getU64()
|
||||
elseif dataType == NetworkMessageTypes.String then
|
||||
return self:getString()
|
||||
elseif dataType == NetworkMessageTypes.Table then
|
||||
return self:getTable()
|
||||
else
|
||||
perror('Unknown data type ' .. dataType)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function InputMessage:getTable()
|
||||
local ret = {}
|
||||
local size = self:getU32()
|
||||
for i=1,size do
|
||||
local index = self:getData()
|
||||
local value = self:getData()
|
||||
ret[index] = value
|
||||
end
|
||||
return ret
|
||||
end
|
42
modules/corelib/outputmessage.lua
Normal file
42
modules/corelib/outputmessage.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
function OutputMessage:addData(data)
|
||||
if type(data) == 'boolean' then
|
||||
self:addU8(NetworkMessageTypes.Boolean)
|
||||
self:addU8(booleantonumber(data))
|
||||
elseif type(data) == 'number' then
|
||||
self:addU8(NetworkMessageTypes.Number)
|
||||
self:addU64(data)
|
||||
elseif type(data) == 'string' then
|
||||
self:addU8(NetworkMessageTypes.String)
|
||||
self:addString(data)
|
||||
elseif type(data) == 'table' then
|
||||
self:addU8(NetworkMessageTypes.Table)
|
||||
self:addTable(data)
|
||||
else
|
||||
perror('Invalid data type ' .. type(data))
|
||||
end
|
||||
end
|
||||
|
||||
function OutputMessage:addTable(data)
|
||||
local size = 0
|
||||
|
||||
-- reserve for size
|
||||
local sizePos = self:getWritePos()
|
||||
self:addU32(size)
|
||||
local sizeSize = self:getWritePos() - sizePos
|
||||
|
||||
-- add values
|
||||
for key,value in pairs(data) do
|
||||
self:addData(key)
|
||||
self:addData(value)
|
||||
size = size + 1
|
||||
end
|
||||
|
||||
-- write size
|
||||
local currentPos = self:getWritePos()
|
||||
self:setWritePos(sizePos)
|
||||
self:addU32(size)
|
||||
|
||||
-- fix msg size and go back to end
|
||||
self:setMessageSize(self:getMessageSize() - sizeSize)
|
||||
self:setWritePos(currentPos)
|
||||
end
|
@@ -244,6 +244,22 @@ function fromboolean(boolean)
|
||||
end
|
||||
end
|
||||
|
||||
function booleantonumber(boolean)
|
||||
if boolean then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
function numbertoboolean(number)
|
||||
if number ~= 0 then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function signalcall(param, ...)
|
||||
if type(param) == 'function' then
|
||||
local status, ret = pcall(param, ...)
|
||||
|
Reference in New Issue
Block a user