diff --git a/800OTClient/data/things/772/Tibia.dat b/800OTClient/data/things/772/Tibia.dat index 9afa4b1..4efa049 100644 Binary files a/800OTClient/data/things/772/Tibia.dat and b/800OTClient/data/things/772/Tibia.dat differ diff --git a/800OTClient/data/things/772/Tibia.spr b/800OTClient/data/things/772/Tibia.spr index de15dc1..89e43d5 100644 Binary files a/800OTClient/data/things/772/Tibia.spr and b/800OTClient/data/things/772/Tibia.spr differ diff --git a/800OTClient/modules/game_features/features.lua b/800OTClient/modules/game_features/features.lua index 30a2292..cbe3841 100644 --- a/800OTClient/modules/game_features/features.lua +++ b/800OTClient/modules/game_features/features.lua @@ -13,6 +13,7 @@ function updateFeatures(version) end -- you can add custom features here, list of them is in the modules\gamelib\const.lua + g_game.enableFeature(GamePlayerMarket) --g_game.enableFeature(GameClientPing) --g_game.enableFeature(GameExtendedOpcode) --g_game.enableFeature(GameMinimapLimitedToSingleFloor) -- it will generate minimap only for current floor diff --git a/800OTClient/modules/game_market/market.lua b/800OTClient/modules/game_market/market.lua index 5c6abb7..829e0a7 100644 --- a/800OTClient/modules/game_market/market.lua +++ b/800OTClient/modules/game_market/market.lua @@ -740,6 +740,19 @@ local function onMarketMessage(messageMode, message) Market.displayMessage(message) end +local function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + return s .. '} ' + else + return tostring(o) + end +end + local function initMarketItems(items) for c = MarketCategory.First, MarketCategory.Last do marketItems[c] = {} @@ -768,7 +781,6 @@ local function initMarketItems(items) tradeAs = entry.id } } - -- add new market item if marketItems[entry.category] ~= nil then table.insert(marketItems[entry.category], marketItem) diff --git a/800OTClient/modules/game_market/marketprotocol.lua b/800OTClient/modules/game_market/marketprotocol.lua index ab4a673..16f5caf 100644 --- a/800OTClient/modules/game_market/marketprotocol.lua +++ b/800OTClient/modules/game_market/marketprotocol.lua @@ -37,39 +37,33 @@ local function readMarketOffer(msg, action, var) return MarketOffer.new({timestamp, counter}, action, Item.create(itemId), amount, price, playerName, state, var) end +local function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + return s .. '} ' + else + return tostring(o) + end +end + -- parsing protocols local function parseMarketEnter(protocol, msg) - local items - if g_game.getClientVersion() < 944 then - items = {} - local itemsCount = msg:getU16() - for i = 1, itemsCount do - local itemId = msg:getU16() - local category = msg:getU8() - local name = msg:getString() - table.insert(items, { - id = itemId, - category = category, - name = name + local version = 981 + local items = {} + +table.insert(items, { + id = 3264, + category = 20, + name = "sword" }) - end - end - - local balance = 0 - if g_game.getProtocolVersion() <= 1250 or not g_game.getFeature(GameTibia12Protocol) then - if g_game.getProtocolVersion() >= 981 or g_game.getProtocolVersion() < 944 then - balance = msg:getU64() - else - balance = msg:getU32() - end - end - - local vocation = -1 - if g_game.getProtocolVersion() >= 944 and g_game.getProtocolVersion() < 950 then - vocation = msg:getU8() -- get vocation id - end - local offers = msg:getU8() + local vocation = -1 + local offers = msg:getU8() + local balance = msg:getU64(); local depotItems = {} local depotCount = msg:getU16() for i = 1, depotCount do @@ -78,8 +72,10 @@ local function parseMarketEnter(protocol, msg) depotItems[itemId] = itemCount end - + + print(dump(depotItems)) signalcall(Market.onMarketEnter, depotItems, offers, balance, vocation, items) + --signalcall(Market.onMarketEnter, depotItems, offers, balance, vocation, items) return true end @@ -89,9 +85,11 @@ local function parseMarketLeave(protocol, msg) end local function parseMarketDetail(protocol, msg) +print("DETAILS") local itemId = msg:getU16() - + print (itemId + "assadsd") local descriptions = {} + table.insert(descriptions, {2, "28"}) for i = MarketItemDescription.First, MarketItemDescription.Last do if msg:peekU16() ~= 0x00 then table.insert(descriptions, {i, msg:getString()}) -- item descriptions diff --git a/800OTClient/otclientv8.log b/800OTClient/otclientv8.log index f66dfc8..8a7b8d8 100644 --- a/800OTClient/otclientv8.log +++ b/800OTClient/otclientv8.log @@ -1,429 +1,2315 @@ -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 06 2022 18:32:29 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -Login to 127.0.0.1:7172 -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -Login to 127.0.0.1:7172 -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -Login to 127.0.0.1:7172 -ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/client_topmenu/topmenu.lua:266: in function 'callback' - /modules/corelib/http.lua:172: in function -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 08 2022 13:58:07 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Connecting to: 127.0.0.1:7171 -Connecting to: 127.0.0.1:7171 -Connecting to: 127.0.0.1:7171 -Connecting to: 127.0.0.1:7171 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:21:31 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -ERROR: Failed to read dat '/things/800/Tibia.dat': corrupt data (id: 100, category: 0, count: 255, lastAttr: 1)' -ERROR: Failed to read dat '/things/800/Tibia.dat': corrupt data (id: 100, category: 0, count: 255, lastAttr: 1)' -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:24:10 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Exiting application.. -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -ERROR: ProtocolGame parse message exception (3635 bytes, 2979 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (206 bytes, 101 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (320 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xa2 (162)): InputMessage eof reached -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32345 32218 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: no thing at pos:32345 32219 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: no thing at pos:32345 32220 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -Login to 127.0.0.1:7172 -ERROR: ProtocolGame parse message exception (4035 bytes, 3404 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32346 32221 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: no thing at pos:32349 32220 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: no thing at pos:32347 32221 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -Login to 127.0.0.1:7172 -ERROR: lua function callback failed: /modules/game_walking/walking.lua:322: attempt to index local 'toPos' (a nil value) -stack traceback: - [C]: in function '__index' - /modules/game_walking/walking.lua:322: in function 'walk' - /modules/game_walking/walking.lua:259: in function -ERROR: ProtocolGame parse message exception (4208 bytes, 3577 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (222 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xa2 (162)): InputMessage eof reached -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32350 32220 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: ProtocolGame parse message exception (313 bytes, 181 unread, last opcode is 0x65 (101), prev opcode is 0x6d (109)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (230 bytes, 91 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (105 bytes, 13 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (103 bytes, 29 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32368 32219 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32368 32218 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: ProtocolGame parse message exception (66 bytes, 33 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 -Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) -ERROR: no thing at pos:32369 32218 7, stackpos:1 -at: - [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z -ERROR: no creature found to move -at: - [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z -ERROR: Missing file: 800/Tibia.dat -Missing file: 800/Tibia.spr - -You should open data/things and create directory 800. -In this directory (data/things/800) you should put missing -files (Tibia.dat and Tibia.spr/Tibia.cwm) from correct Tibia version. -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:31:16 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:31:57 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:39:00 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:40:17 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:47:31 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:48:35 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:49:23 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:50:38 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:51:46 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:52:17 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:53:55 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:55:45 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:56:13 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:56:55 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:57:26 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:58:55 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 12:59:22 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:00:28 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:01:26 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:07:44 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:09:28 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:17:50 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:19:55 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:20:53 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Exiting application.. -GPU Radeon RX 580 Series (ATI Technologies Inc.) -OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 -[Atlas] Texture size is: 4096x4096 (max: 16384x16384) -Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' -== application started at Apr 09 2022 13:22:25 -OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 -Connecting to: 127.0.0.1:7171 -Login to 127.0.0.1:7172 -Login to 127.0.0.1:7172 +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 06 2022 18:32:29 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: /modules/client_topmenu/topmenu.lua:266: attempt to index local 'data' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/client_topmenu/topmenu.lua:266: in function 'callback' + /modules/corelib/http.lua:172: in function +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 08 2022 13:58:07 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:21:31 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +ERROR: Failed to read dat '/things/800/Tibia.dat': corrupt data (id: 100, category: 0, count: 255, lastAttr: 1)' +ERROR: Failed to read dat '/things/800/Tibia.dat': corrupt data (id: 100, category: 0, count: 255, lastAttr: 1)' +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:24:10 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Exiting application.. +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (3635 bytes, 2979 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (206 bytes, 101 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (320 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xa2 (162)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32345 32218 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: no thing at pos:32345 32219 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: no thing at pos:32345 32220 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (4035 bytes, 3404 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32346 32221 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: no thing at pos:32349 32220 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: no thing at pos:32347 32221 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +Login to 127.0.0.1:7172 +ERROR: lua function callback failed: /modules/game_walking/walking.lua:322: attempt to index local 'toPos' (a nil value) +stack traceback: + [C]: in function '__index' + /modules/game_walking/walking.lua:322: in function 'walk' + /modules/game_walking/walking.lua:259: in function +ERROR: ProtocolGame parse message exception (4208 bytes, 3577 unread, last opcode is 0x64 (100), prev opcode is 0x0b (11)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (222 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xa2 (162)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32350 32220 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: ProtocolGame parse message exception (313 bytes, 181 unread, last opcode is 0x65 (101), prev opcode is 0x6d (109)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (230 bytes, 91 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (105 bytes, 13 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (103 bytes, 29 unread, last opcode is 0x66 (102), prev opcode is 0x6d (109)): invalid thing id (0) +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32368 32219 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (90 bytes, 57 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32368 32218 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: ProtocolGame parse message exception (66 bytes, 33 unread, last opcode is 0x20 (32), prev opcode is 0xa0 (160)): unhandled opcode 32 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: no thing at pos:32369 32218 7, stackpos:1 +at: + [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z +ERROR: no creature found to move +at: + [C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: Missing file: 800/Tibia.dat +Missing file: 800/Tibia.spr + +You should open data/things and create directory 800. +In this directory (data/things/800) you should put missing +files (Tibia.dat and Tibia.spr/Tibia.cwm) from correct Tibia version. +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:31:16 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:31:57 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:39:00 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:40:17 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:47:31 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:48:35 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:49:23 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:50:38 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:51:46 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:52:17 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:53:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:55:45 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:56:13 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:56:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:57:26 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:58:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 12:59:22 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:00:28 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:01:26 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:07:44 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:09:28 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:17:50 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:19:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:20:53 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 13:22:25 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 14:11:26 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:00:09 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:00:29 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:01:03 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:02:09 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:02:30 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:02:40 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:02:53 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:03:07 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:04:57 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:08:19 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (9 bytes, 4 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU64' + /modules/game_market/marketprotocol.lua:61: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (65 bytes, 60 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:49: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:40:05 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:78: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:40:35 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:50: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:40:54 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:78: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:41:16 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:78: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:43:02 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:69: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:43:18 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +FATAL ERROR: Unable to load module 'game_market': LUA ERROR: /modules/game_market/marketprotocol.lua:75: 'end' expected (to close 'function' at line 41) near 'signalcall' +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'ensureModuleLoaded' + /init.lua:71: in function 'loadModules' + /init.lua:92: in main chunk +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:43:26 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:69: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:44:03 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:44:20 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:69: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:45:03 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:69: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:46:07 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:46:56 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:48: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:47:49 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU8' + /modules/game_market/marketprotocol.lua:47: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:48:37 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +ERROR: ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x00 (0), prev opcode is 0xf6 (246)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +256 +ERROR: ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x00 (0), prev opcode is 0xf6 (246)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:49:59 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +49152 +ERROR: ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x0c (12), prev opcode is 0xf6 (246)): unhandled opcode 12 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:50:30 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +ERROR: ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x0c (12), prev opcode is 0xf6 (246)): unhandled opcode 12 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 17:51:29 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:05:23 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:06:04 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:07:02 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:08:14 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:08:40 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +table: 0x0e38bf10 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:12:19 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ } +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:18:42 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (63 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:19:45 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:20:18 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ [1] = { ["category"] = 255,["name"] = sword,["id"] = 3264,} ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:21:45 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ [1] = { ["category"] = 255,["name"] = sword,["id"] = 3264,} ,} +papala +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:23:16 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e5f2a78,["thingType"] = userdata: 0x0e627a08,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +256 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0582fae8,["thingType"] = userdata: 0x0582fb08,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:39:10 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:57: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:40:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:47: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:41:48 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +0 +192 +îù" +{ } +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { } ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +256 +0 +192 +îù" +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: invalid encrypted network message 24577 +at: + [C++]: ?xteaDecrypt@Protocol@@AAE_NABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: failed to decrypt message +at: + [C++]: ?internalRecvData@Protocol@@AAEXPAEI@Z +Login to 127.0.0.1:7172 +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:48:11 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: invalid encrypted network message 24577 +at: + [C++]: ?xteaDecrypt@Protocol@@AAE_NABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z +ERROR: failed to decrypt message +at: + [C++]: ?internalRecvData@Protocol@@AAEXPAEI@Z +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +256 +0 +192 +îù" +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:53:46 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0ed938f0,["thingType"] = userdata: 0x0ed93e98,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 18:54:44 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +256 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0dd83c00,["thingType"] = userdata: 0x0dd0c270,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (177 bytes, 153 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +257 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0dc6f830,["thingType"] = userdata: 0x0de4bd70,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (181 bytes, 157 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +258 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e4ad7d8,["thingType"] = userdata: 0x0e58f280,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (256 bytes, 232 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x1bba9838,["thingType"] = userdata: 0x1bba9858,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:06:37 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e04d868,["thingType"] = userdata: 0x0de5d880,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:07:26 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0defdda8,["thingType"] = userdata: 0x0defdde8,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x1bac2ee0,["thingType"] = userdata: 0x1bac2f00,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:09:59 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0ef42100,["thingType"] = userdata: 0x0ef42120,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:16:12 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e4a1438,["thingType"] = userdata: 0x0e49fad8,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:18:24 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +259 +49152 +12 +1 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0d7bf9a8,["thingType"] = userdata: 0x0d817630,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:29:32 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +768 +44544 +269 +13312 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:78: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:30:40 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: /modules/game_market/marketprotocol.lua:42: bad argument #1 to 'insert' (table expected, got nil) +stack traceback: + [C]: at 0x00c9e880 + [C]: in function 'insert' + /modules/game_market/marketprotocol.lua:42: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:31:05 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e22f4d8,["thingType"] = userdata: 0x0e22d610,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0edb7a88,["thingType"] = userdata: 0x0edb86d0,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e938f20,["thingType"] = userdata: 0x0ef15a20,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:32:46 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [7477] = 1,} +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0e712e98,["thingType"] = userdata: 0x0df74fd0,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +{ [1] = { ["category"] = 20,["name"] = sword,["id"] = 3264,} ,} +papala +{ [1] = { } ,[2] = { } ,[3] = { } ,[4] = { } ,[5] = { } ,[6] = { } ,[7] = { } ,[8] = { } ,[9] = { } ,[10] = { } ,[11] = { } ,[12] = { } ,[13] = { } ,[14] = { } ,[15] = { } ,[16] = { } ,[17] = { } ,[18] = { } ,[19] = { } ,[20] = { [1] = { ["displayItem"] = userdata: 0x0eacb5c8,["thingType"] = userdata: 0x0eacb5e8,["marketData"] = { ["requiredLevel"] = 0,["showAs"] = 3264,["restrictVocation"] = 0,["category"] = 20,["name"] = sword,["tradeAs"] = 3264,} ,} ,} ,[21] = { } ,[22] = { } ,[23] = { } ,[24] = { } ,[25] = { } ,[26] = { } ,[27] = { } ,[28] = { } ,[29] = { } ,[30] = { } ,[31] = { } ,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:33:55 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [238] = 9055,} +ERROR: ProtocolGame parse message exception (54 bytes, 26 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (65 bytes, 5 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246)): unhandled opcode 53 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246)): unhandled opcode 53 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246)): unhandled opcode 53 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246)): unhandled opcode 53 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:44:08 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:45:01 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (165 bytes, 141 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (62 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getU16' + /modules/game_market/marketprotocol.lua:74: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (66 bytes, 61 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1)): unhandled opcode 246 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:56:36 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:57:07 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ } +ERROR: ProtocolGame parse message exception (66 bytes, 44 unread, last opcode is 0x00 (0), prev opcode is 0xae (174)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:57:25 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +9056 +{ } +ERROR: ProtocolGame parse message exception (66 bytes, 44 unread, last opcode is 0x00 (0), prev opcode is 0xae (174)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 19:58:53 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (66 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (66 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (173 bytes, 149 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (22 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +ERROR: ProtocolGame parse message exception (22 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Exiting application.. +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 20:13:04 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,[3264] = 1,[7476] = 1,} +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:34: in function 'readMarketOffer' + /modules/game_market/marketprotocol.lua:145: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (98 bytes, 38 unread, last opcode is 0xf9 (249), prev opcode is 0xf6 (246)): unhandled opcode 249 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 20:19:15 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [3502] = 1,[3264] = 2,[7477] = 1,} +{ [3502] = 1,[3264] = 2,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[3264] = 2,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: protected lua call failed: C++ call failed: InputMessage eof reached +stack traceback: + [builtin#146]: at 0x00df4070 + [C]: in function 'getString' + /modules/game_market/marketprotocol.lua:34: in function 'readMarketOffer' + /modules/game_market/marketprotocol.lua:145: in function 'callback' + /modules/gamelib/protocolgame.lua:10: in function +ERROR: ProtocolGame parse message exception (143 bytes, 38 unread, last opcode is 0xf9 (249), prev opcode is 0xf6 (246)): unhandled opcode 249 +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +GPU Radeon RX 580 Series (ATI Technologies Inc.) +OpenGL 4.6.13596 Compatibility Profile Context 20.10.35.02 27.20.1034.6 +[Atlas] Texture size is: 4096x4096 (max: 16384x16384) +Found work dir at 'C:/Users/erika/source/repos/Sabrehaven/800OTClient/' +== application started at Apr 09 2022 20:20:07 +OTCv8 3.1 rev 163 (dev) made by otclient.net built on Mar 31 2022 for arch x86 +Connecting to: 127.0.0.1:7171 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [3502] = 1,[3264] = 2,[7477] = 1,} +{ [3502] = 1,[7476] = 1,[7477] = 1,} +{ [3502] = 1,[7476] = 1,[7477] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +{ [7477] = 1,[3264] = 1,[7476] = 1,} +ERROR: ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249)): InputMessage eof reached +Packet has been saved to packet.log, you can use it to find what was wrong. (Protocol: 772) +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [7477] = 2,[3452] = 1,[7476] = 2,} +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +Login to 127.0.0.1:7172 +{ [3502] = 1,[7477] = 1,[3264] = 1,[7476] = 1,} +{ [3502] = 1,[3264] = 1,[7477] = 1,} +Login to 127.0.0.1:7172 +{ [3502] = 1,[3264] = 1,[7477] = 1,} +{ [3502] = 1,[3264] = 1,[7477] = 1,} +{ [3502] = 1,[7476] = 1,[7477] = 1,} +{ [3502] = 1,[3264] = 1,[7477] = 1,} +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +Login to 127.0.0.1:7172 +{ [3502] = 1,[7476] = 1,[7477] = 1,} +Login to 127.0.0.1:7172 +{ [3502] = 1,[3264] = 1,[7477] = 1,} +Exiting application.. diff --git a/800OTClient/packet.log b/800OTClient/packet.log index 09b0f19..4f3f602 100644 --- a/800OTClient/packet.log +++ b/800OTClient/packet.log @@ -68,3 +68,1070 @@ ProtocolGame parse message exception (66 bytes, 33 unread, last opcode is 0x20 ( a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d aa 04 00 00 00 06 00 45 72 69 6b 61 73 30 00 01 6c 7e d6 7d 07 09 00 65 78 6f 72 69 20 76 69 73 +ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 32 00 +f6 00 02 00 16 0d 01 00 ae 0d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 39 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 32 00 +f6 00 02 00 16 0d 01 00 ae 0d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 39 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +30 00 2a 00 f6 00 00 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 39 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +30 00 2a 00 f6 00 00 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (54 bytes, 49 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 32 00 +f6 00 02 00 16 0d 01 00 ae 0d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +30 00 2a 00 f6 00 00 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +30 00 2a 00 f6 00 00 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (9 bytes, 4 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 05 00 +f6 00 00 00 1e + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (8 bytes, 3 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +08 00 04 00 +f6 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (65 bytes, 60 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +40 00 3d 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 5d 7e dc 7d 07 01 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (46 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +30 00 2a 00 f6 00 00 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (50 bytes, 45 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +30 00 2e 00 +f6 00 01 00 c0 0c 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x00 (0), prev opcode is 0xf6 (246), proto: 772): InputMessage eof reached +38 00 2f 00 +f6 00 01 +00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x00 (0), prev opcode is 0xf6 (246), proto: 772): InputMessage eof reached +38 00 2f 00 +f6 00 01 +00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x0c (12), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 12 +38 00 2f 00 +f6 00 01 00 c0 +0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 41 unread, last opcode is 0x0c (12), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 12 +38 00 2f 00 +f6 00 01 00 c0 +0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (63 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3b 00 6d 5e 7e dc 7d 07 01 5d 7e dc 7d 07 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 46 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 2f 00 +f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 00 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 2c 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (177 bytes, 153 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +b0 00 ad 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 78 06 d7 0b 4f a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d f6 01 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 17 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 03 c0 0c 01 00 00 00 4d ac 51 62 01 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 01 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 17 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (181 bytes, 157 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +b8 00 b1 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 78 06 d7 0b 3a a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d f6 02 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 02 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 03 c0 0c 02 00 00 00 4d ac 51 62 01 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 62 ac 51 62 02 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 02 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 02 01 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (256 bytes, 232 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +00 01 fc 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 79 06 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d 78 05 d7 0b 26 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 03 c0 0c 03 00 00 00 4d ac 51 62 01 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 62 ac 51 62 02 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 c6 ac 51 62 03 00 01 00 64 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (51 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 2f 00 f6 03 01 00 c0 0c 00 01 00 ee 00 f9 22 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 53 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +38 00 36 00 +f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 02 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 02 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (54 bytes, 26 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 32 00 f6 00 02 00 c0 0c 04 00 35 1d 01 00 ee 00 5f 23 +00 00 00 00 00 +00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 c0 0c 02 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (65 bytes, 5 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3d 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 6c 5d 7e dc 7d 07 01 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 53 +40 00 3a 00 +f6 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 +35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 53 +40 00 3a 00 +f6 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 +35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 53 +40 00 3a 00 +f6 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 +35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (62 bytes, 41 unread, last opcode is 0x35 (53), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 53 +40 00 3a 00 +f6 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 +35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (58 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +38 00 36 00 f6 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (62 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3a 00 f6 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (165 bytes, 141 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +a8 00 a1 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 78 05 d7 0b 11 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d f6 01 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 03 c0 0c 01 00 00 00 44 b8 51 62 04 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 00 00 00 00 + +ProtocolGame parse message exception (62 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3a 00 f6 01 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 5f 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (66 bytes, 61 unread, last opcode is 0xf6 (246), prev opcode is 0xffffffff (-1), proto: 772): unhandled opcode 246 +40 00 3e 00 +f6 00 60 23 00 00 00 00 00 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (66 bytes, 44 unread, last opcode is 0x00 (0), prev opcode is 0xae (174), proto: 772): InputMessage eof reached +40 00 3e 00 f6 00 60 23 00 00 00 00 00 00 03 00 +ae 0d 01 +00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (66 bytes, 44 unread, last opcode is 0x00 (0), prev opcode is 0xae (174), proto: 772): InputMessage eof reached +40 00 3e 00 f6 00 60 23 00 00 00 00 00 00 03 00 +ae 0d 01 +00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +48 00 42 00 f6 00 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 ff 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (66 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3e 00 f6 00 60 23 00 00 00 00 00 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (66 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +40 00 3e 00 f6 00 60 23 00 00 00 00 00 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +48 00 42 00 f6 00 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 8a 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (173 bytes, 149 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +b0 00 a9 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 78 05 d7 0b 11 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d f6 01 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 03 c0 0c 01 00 00 00 6f bb 51 62 05 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 00 00 00 00 + +ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +48 00 42 00 f6 01 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +48 00 42 00 f6 01 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (22 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +18 00 12 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (70 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +48 00 42 00 f6 01 60 23 00 00 00 00 00 00 04 00 c0 0c 01 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 ee 00 60 23 00 00 00 00 00 00 ee 01 75 00 00 00 00 00 00 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (34 bytes, 10 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +20 00 1e 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 f9 03 0c 00 00 00 00 00 00 00 00 00 + +ProtocolGame parse message exception (22 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0x00 (0), proto: 772): InputMessage eof reached +18 00 12 00 df 01 00 00 00 00 00 00 00 00 +00 00 00 00 00 +00 00 00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (98 bytes, 38 unread, last opcode is 0xf9 (249), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 249 +60 00 5e 00 72 00 00 78 05 d7 0b 12 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d +f6 01 61 23 00 00 00 00 00 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 +f9 03 c0 0c 00 00 00 00 01 00 00 00 02 bf 51 62 06 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (143 bytes, 38 unread, last opcode is 0xf9 (249), prev opcode is 0xf6 (246), proto: 772): unhandled opcode 249 +90 00 8b 00 79 05 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d 78 05 d7 0b 62 a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d a0 f4 01 f4 01 ff ff 68 e3 18 00 30 00 04 34 08 34 08 2b 00 64 20 0d +f6 01 61 23 00 00 00 00 00 00 03 00 ae 0d 01 00 34 1d 01 00 35 1d 01 00 +f9 03 c0 0c 00 00 00 00 01 00 00 00 3f c0 51 62 07 00 01 00 01 00 00 00 00 00 00 00 09 00 41 6e 6f 6e 79 6d 6f 75 73 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + +ProtocolGame parse message exception (16 bytes, 0 unread, last opcode is 0x00 (0), prev opcode is 0xf9 (249), proto: 772): InputMessage eof reached +10 00 0c 00 +f9 03 0c 00 00 00 00 00 00 00 00 +00 + diff --git a/config.lua b/config.lua index 3b865b7..20378d2 100644 --- a/config.lua +++ b/config.lua @@ -11,6 +11,8 @@ ropeSpotBlock = false showMonsterLoot = true blockHeight = false dropItems = false +marketOfferDuration = 1 +premiumToCreateMarketOffer = false -- Combat settings -- NOTE: valid values for worldType are: "pvp", "no-pvp" and "pvp-enforced" diff --git a/data/items800/items.srv b/data/items800/items.srv index a9da0a2..c9ad1c5 100644 --- a/data/items800/items.srv +++ b/data/items800/items.srv @@ -33801,4 +33801,18 @@ Flags = {Bottom,Unpass,Unmove} TypeID = 7475 Name = "a sarcophagus" -Flags = {Bottom,Unpass,Unmove} \ No newline at end of file +Flags = {Bottom,Unpass,Unmove} + +TypeID = 7476 +Name = "your inbox" +Flags = {Container,Unmove} +Attributes = {Capacity=30} + +TypeID = 7477 +Name = "the market" +Flags = {Unmove} + +TypeID = 7478 +Name = "your store inbox" +Flags = {Container,Unmove} +Attributes = {Capacity=30} \ No newline at end of file diff --git a/sabrehaven.sql b/sabrehaven.sql index 0101986..6fd3088 100644 --- a/sabrehaven.sql +++ b/sabrehaven.sql @@ -55,6 +55,47 @@ CREATE TABLE `account_bans` ( -- -------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `player_inboxitems` ( + `player_id` int NOT NULL, + `sid` int NOT NULL, + `pid` int NOT NULL DEFAULT '0', + `itemtype` smallint unsigned NOT NULL, + `count` smallint NOT NULL DEFAULT '0', + `attributes` blob NOT NULL, + UNIQUE KEY `player_id_2` (`player_id`, `sid`), + FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; + +CREATE TABLE IF NOT EXISTS `market_history` ( + `id` int unsigned NOT NULL AUTO_INCREMENT, + `player_id` int NOT NULL, + `sale` tinyint NOT NULL DEFAULT '0', + `itemtype` smallint unsigned NOT NULL, + `amount` smallint unsigned NOT NULL, + `price` bigint unsigned NOT NULL DEFAULT '0', + `expires_at` bigint unsigned NOT NULL, + `inserted` bigint unsigned NOT NULL, + `state` tinyint unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `player_id` (`player_id`, `sale`), + FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; + +CREATE TABLE IF NOT EXISTS `market_offers` ( + `id` int unsigned NOT NULL AUTO_INCREMENT, + `player_id` int NOT NULL, + `sale` tinyint NOT NULL DEFAULT '0', + `itemtype` smallint unsigned NOT NULL, + `amount` smallint unsigned NOT NULL, + `created` bigint unsigned NOT NULL, + `anonymous` tinyint NOT NULL DEFAULT '0', + `price` bigint unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `sale` (`sale`,`itemtype`), + KEY `created` (`created`), + FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; + -- -- Table structure for table `account_ban_history` -- diff --git a/src/actions.cpp b/src/actions.cpp index 6e9d108..97e4942 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -273,6 +273,7 @@ ReturnValue Actions::internalUseItem(Player* player, const Position& pos, uint8_ DepotLocker* myDepotLocker = player->getDepotLocker(depot->getDepotId(), true); myDepotLocker->setParent(depot->getParent()->getTile()); openContainer = myDepotLocker; + player->setLastDepotId(depot->getDepotId()); } else { openContainer = container; } @@ -325,6 +326,17 @@ bool Actions::useItem(Player* player, const Position& pos, uint8_t index, Item* player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL)); player->stopWalk(); + if (item->getID() == ITEM_MARKET) + { + if (player->getLastDepotId() == -1) { + return false; + } + + player->sendMarketEnter(player->getLastDepotId()); + + return true; + } + if (isHotkey) { uint32_t count = 0; if (item->isRune()) { diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 224185c..3509e95 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -63,6 +63,8 @@ bool ConfigManager::load() integer[GAME_PORT] = getGlobalNumber(L, "gameProtocolPort", 7172); integer[LOGIN_PORT] = getGlobalNumber(L, "loginProtocolPort", 7171); integer[STATUS_PORT] = getGlobalNumber(L, "statusProtocolPort", 7171); + + integer[MARKET_OFFER_DURATION] = getGlobalNumber(L, "marketOfferDuration", 30 * 24 * 60 * 60); } boolean[SHOW_MONSTER_LOOT] = getGlobalBoolean(L, "showMonsterLoot", true); @@ -74,6 +76,7 @@ bool ConfigManager::load() boolean[FREE_PREMIUM] = getGlobalBoolean(L, "freePremium", false); boolean[REPLACE_KICK_ON_LOGIN] = getGlobalBoolean(L, "replaceKickOnLogin", true); boolean[ALLOW_CLONES] = getGlobalBoolean(L, "allowClones", false); + boolean[MARKET_PREMIUM] = getGlobalBoolean(L, "premiumToCreateMarketOffer", true); boolean[STAMINA_SYSTEM] = getGlobalBoolean(L, "staminaSystem", true); boolean[WARN_UNSAFE_SCRIPTS] = getGlobalBoolean(L, "warnUnsafeScripts", true); boolean[CONVERT_UNSAFE_SCRIPTS] = getGlobalBoolean(L, "convertUnsafeScripts", true); @@ -126,6 +129,8 @@ bool ConfigManager::load() integer[KILLS_MONTH_BANISHMENT] = getGlobalNumber(L, "killsMonthBanishment", 10); integer[STAIRHOP_DELAY] = getGlobalNumber(L, "stairJumpExhaustion", 2000); integer[EXP_FROM_PLAYERS_LEVEL_RANGE] = getGlobalNumber(L, "expFromPlayersLevelRange", 75); + integer[CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES] = getGlobalNumber(L, "checkExpiredMarketOffersEachMinutes", 60); + integer[MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER] = getGlobalNumber(L, "maxMarketOffersAtATimePerPlayer", 100); integer[MAX_PACKETS_PER_SECOND] = getGlobalNumber(L, "maxPacketsPerSecond", 25); integer[NEWBIE_TOWN] = getGlobalNumber(L, "newbieTownId", 1); integer[NEWBIE_LEVEL_THRESHOLD] = getGlobalNumber(L, "newbieLevelThreshold", 5); diff --git a/src/configmanager.h b/src/configmanager.h index beb3442..7091c15 100644 --- a/src/configmanager.h +++ b/src/configmanager.h @@ -41,6 +41,7 @@ class ConfigManager ALLOW_CLONES, BIND_ONLY_GLOBAL_ADDRESS, OPTIMIZE_DATABASE, + MARKET_PREMIUM, STAMINA_SYSTEM, WARN_UNSAFE_SCRIPTS, CONVERT_UNSAFE_SCRIPTS, @@ -113,6 +114,9 @@ class ConfigManager LOGIN_PORT, STATUS_PORT, STAIRHOP_DELAY, + MARKET_OFFER_DURATION, + CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, + MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, EXP_FROM_PLAYERS_LEVEL_RANGE, MAX_PACKETS_PER_SECOND, NEWBIE_TOWN, diff --git a/src/const.h b/src/const.h index 68aa943..69dc919 100644 --- a/src/const.h +++ b/src/const.h @@ -21,6 +21,8 @@ #define FS_CONST_H_0A49B5996F074465BF44B90F4F780E8B static constexpr int32_t NETWORKMESSAGE_MAXSIZE = 24590; +static constexpr int32_t MIN_MARKET_FEE = 20; +static constexpr int32_t MAX_MARKET_FEE = 100000; enum MagicEffectClasses : uint8_t { CONST_ME_NONE, @@ -281,6 +283,8 @@ enum item_t : uint16_t { ITEM_DEPOT = 3502, ITEM_LOCKER1 = 3497, + ITEM_INBOX = 7476, + ITEM_MARKET = 7477, ITEM_MALE_CORPSE = 4240, ITEM_FEMALE_CORPSE = 4247, @@ -301,6 +305,14 @@ enum item_t : uint16_t { ITEM_DOCUMENT_RO = 2819, //read-only }; +enum ResourceTypes_t : uint8_t { + RESOURCE_BANK_BALANCE = 0x00, + RESOURCE_GOLD_EQUIPPED = 0x01, + RESOURCE_PREY_WILDCARDS = 0x0A, + RESOURCE_DAILYREWARD_STREAK = 0x14, + RESOURCE_DAILYREWARD_JOKERS = 0x15, +}; + enum PlayerFlags : uint64_t { PlayerFlag_CannotUseCombat = 1 << 0, PlayerFlag_CannotAttackPlayer = 1 << 1, diff --git a/src/container.cpp b/src/container.cpp index f949f81..0878a5e 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -19,6 +19,8 @@ #include "otpch.h" +#include "depotchest.h" +#include "inbox.h" #include "container.h" #include "iomap.h" #include "game.h" @@ -264,12 +266,17 @@ ReturnValue Container::queryAdd(int32_t index, const Thing& thing, uint32_t coun } const Cylinder* cylinder = getParent(); + if (!hasBitSet(FLAG_NOLIMIT, flags)) { while (cylinder) { if (cylinder == &thing) { return RETURNVALUE_THISISIMPOSSIBLE; } + if (dynamic_cast(cylinder)) { + return RETURNVALUE_CONTAINERNOTENOUGHROOM; + } + cylinder = cylinder->getParent(); } diff --git a/src/depotchest.cpp b/src/depotchest.cpp new file mode 100644 index 0000000..948cc09 --- /dev/null +++ b/src/depotchest.cpp @@ -0,0 +1,68 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#include "otpch.h" + +#include "depotchest.h" + +#include "tools.h" + +DepotChest::DepotChest(uint16_t type) : + Container(type), maxDepotItems(2000) {} + +ReturnValue DepotChest::queryAdd(int32_t index, const Thing& thing, uint32_t count, + uint32_t flags, Creature* actor/* = nullptr*/) const +{ + const Item* item = thing.getItem(); + if (!item) { + return RETURNVALUE_NOTPOSSIBLE; + } + + bool skipLimit = hasBitSet(FLAG_NOLIMIT, flags); + if (!skipLimit) { + int32_t addCount = 0; + + if ((item->isStackable() && item->getItemCount() != count)) { + addCount = 1; + } + + if (item->getTopParent() != this) { + if (const Container* container = item->getContainer()) { + addCount = container->getItemHoldingCount() + 1; + } + else { + addCount = 1; + } + } + + if (getItemHoldingCount() + addCount > maxDepotItems) { + return RETURNVALUE_DEPOTISFULL; + } + } + + return Container::queryAdd(index, thing, count, flags, actor); +} + +void DepotChest::postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t) +{ + Cylinder* parent = getParent(); + if (parent) { + parent->postAddNotification(thing, oldParent, index, LINK_PARENT); + } +} + +void DepotChest::postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t) +{ + Cylinder* parent = getParent(); + if (parent) { + parent->postRemoveNotification(thing, newParent, index, LINK_PARENT); + } +} + +Cylinder* DepotChest::getParent() const +{ + if (parent) { + return parent->getParent(); + } + return nullptr; +} diff --git a/src/depotchest.h b/src/depotchest.h new file mode 100644 index 0000000..c61bb4d --- /dev/null +++ b/src/depotchest.h @@ -0,0 +1,40 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#ifndef FS_DEPOTCHEST_H +#define FS_DEPOTCHEST_H + +#include "container.h" + +class DepotChest final : public Container +{ +public: + explicit DepotChest(uint16_t type); + + //serialization + void setMaxDepotItems(uint32_t maxitems) { + maxDepotItems = maxitems; + } + + //cylinder implementations + ReturnValue queryAdd(int32_t index, const Thing& thing, uint32_t count, + uint32_t flags, Creature* actor = nullptr) const override; + + void postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + void postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + + //overrides + bool canRemove() const override { + return false; + } + + Cylinder* getParent() const override; + Cylinder* getRealParent() const override { + return parent; + } + +private: + uint32_t maxDepotItems; +}; + +#endif // FS_DEPOTCHEST_H diff --git a/src/depotlocker.cpp b/src/depotlocker.cpp index 09189a1..373d4cc 100644 --- a/src/depotlocker.cpp +++ b/src/depotlocker.cpp @@ -23,6 +23,7 @@ #include "creature.h" #include "player.h" #include "tools.h" +#include "inbox.h" DepotLocker::DepotLocker(uint16_t type) : Container(type, 30), depotId(0) {} @@ -87,3 +88,12 @@ void DepotLocker::postRemoveNotification(Thing* thing, const Cylinder* newParent parent->postRemoveNotification(thing, newParent, index, LINK_PARENT); } } + +void DepotLocker::removeInbox(Inbox* inbox) +{ + auto cit = std::find(itemlist.begin(), itemlist.end(), inbox); + if (cit == itemlist.end()) { + return; + } + itemlist.erase(cit); +} diff --git a/src/depotlocker.h b/src/depotlocker.h index 094defc..6b91500 100644 --- a/src/depotlocker.h +++ b/src/depotlocker.h @@ -22,6 +22,8 @@ #include "container.h" +class Inbox; + class DepotLocker final : public Container { public: @@ -51,6 +53,8 @@ class DepotLocker final : public Container void postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t link = LINK_OWNER) final; void postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t link = LINK_OWNER) final; + void removeInbox(Inbox* inbox); + bool canRemove() const final { return false; } diff --git a/src/enums.h b/src/enums.h index d6bf53a..7be97dd 100644 --- a/src/enums.h +++ b/src/enums.h @@ -63,6 +63,26 @@ enum VipStatus_t : uint8_t { VIPSTATUS_ONLINE = 1, }; +enum MarketAction_t { + MARKETACTION_BUY = 0, + MARKETACTION_SELL = 1, +}; + +enum MarketRequest_t { + MARKETREQUEST_OWN_HISTORY = 1, + MARKETREQUEST_OWN_OFFERS = 2, + MARKETREQUEST_ITEM = 3, +}; + +enum MarketOfferState_t { + OFFERSTATE_ACTIVE = 0, + OFFERSTATE_CANCELLED = 1, + OFFERSTATE_EXPIRED = 2, + OFFERSTATE_ACCEPTED = 3, + + OFFERSTATE_ACCEPTEDEX = 255, +}; + enum OperatingSystem_t : uint8_t { CLIENTOS_NONE = 0, @@ -351,6 +371,8 @@ enum ReturnValue { RETURNVALUE_YOUDONTOWNTHISHOUSE, RETURNVALUE_TRADEPLAYERALREADYOWNSAHOUSE, RETURNVALUE_TRADEPLAYERHIGHESTBIDDER, + RETURNVALUE_CANNOTMOVEITEMISNOTSTOREITEM, + RETURNVALUE_ITEMCANNOTBEMOVEDTHERE, RETURNVALUE_YOUCANNOTTRADETHISHOUSE, }; @@ -371,6 +393,48 @@ struct LightInfo { constexpr LightInfo(uint8_t level, uint8_t color) : level(level), color(color) {} }; +struct MarketOffer { + uint64_t price; + uint32_t timestamp; + uint16_t amount; + uint16_t counter; + uint16_t itemId; + std::string playerName; +}; + +struct MarketOfferEx { + MarketOfferEx() = default; + MarketOfferEx(MarketOfferEx&& other) : + id(other.id), playerId(other.playerId), timestamp(other.timestamp), price(other.price), + amount(other.amount), counter(other.counter), itemId(other.itemId), type(other.type), + playerName(std::move(other.playerName)) {} + + uint32_t id; + uint32_t playerId; + uint32_t timestamp; + uint64_t price; + uint16_t amount; + uint16_t counter; + uint16_t itemId; + MarketAction_t type; + std::string playerName; +}; + +struct HistoryMarketOffer { + uint32_t timestamp; + uint64_t price; + uint16_t itemId; + uint16_t amount; + MarketOfferState_t state; +}; + +struct MarketStatistics { + uint32_t numTransactions = 0; + uint32_t highestPrice = 0; + uint64_t totalPrice = 0; + uint32_t lowestPrice = 0; +}; + enum CombatOrigin { ORIGIN_NONE, @@ -398,4 +462,7 @@ struct CombatDamage } }; +using MarketOfferList = std::list; +using HistoryMarketOfferList = std::list; + #endif diff --git a/src/events.cpp b/src/events.cpp index 868901e..3f3e026 100644 --- a/src/events.cpp +++ b/src/events.cpp @@ -130,6 +130,9 @@ bool Events::load() else if (methodName == "onLookInTrade") { playerOnLookInTrade = event; } + else if (methodName == "onLookInMarket") { + playerOnLookInMarket = event; + } else if (methodName == "onTradeRequest") { playerOnTradeRequest = event; } @@ -499,6 +502,33 @@ void Events::eventPlayerOnLookInTrade(Player* player, Player* partner, Item* ite scriptInterface.callVoidFunction(4); } +bool Events::eventPlayerOnLookInMarket(Player* player, const ItemType* itemType) +{ + // Player:onLookInMarket(itemType) or Player.onLookInMarket(self, itemType) + if (playerOnLookInMarket == -1) { + return true; + } + + if (!scriptInterface.reserveScriptEnv()) { + std::cout << "[Error - Events::eventPlayerOnLookInMarket] Call stack overflow" << std::endl; + return false; + } + + ScriptEnvironment* env = scriptInterface.getScriptEnv(); + env->setScriptId(playerOnLookInMarket, &scriptInterface); + + lua_State* L = scriptInterface.getLuaState(); + scriptInterface.pushFunction(playerOnLookInMarket); + + LuaScriptInterface::pushUserdata(L, player); + LuaScriptInterface::setMetatable(L, -1, "Player"); + + LuaScriptInterface::pushUserdata(L, itemType); + LuaScriptInterface::setMetatable(L, -1, "ItemType"); + + return scriptInterface.callFunction(2); +} + bool Events::eventPlayerOnMoveItem(Player* player, Item* item, uint16_t count, const Position& fromPosition, const Position& toPosition, Cylinder* fromCylinder, Cylinder* toCylinder) { // Player:onMoveItem(item, count, fromPosition, toPosition) or Player.onMoveItem(self, item, count, fromPosition, toPosition, fromCylinder, toCylinder) diff --git a/src/events.h b/src/events.h index 7582c29..4a3a558 100644 --- a/src/events.h +++ b/src/events.h @@ -49,6 +49,7 @@ public: void eventPlayerOnLook(Player* player, const Position& position, Thing* thing, uint8_t stackpos, int32_t lookDistance); void eventPlayerOnLookInBattleList(Player* player, Creature* creature, int32_t lookDistance); void eventPlayerOnLookInTrade(Player* player, Player* partner, Item* item, int32_t lookDistance); + bool eventPlayerOnLookInMarket(Player* player, const ItemType* itemType); bool eventPlayerOnMoveItem(Player* player, Item* item, uint16_t count, const Position& fromPosition, const Position& toPosition, Cylinder* fromCylinder, Cylinder* toCylinder); void eventPlayerOnItemMoved(Player* player, Item* item, uint16_t count, const Position& fromPosition, const Position& toPosition, Cylinder* fromCylinder, Cylinder* toCylinder); bool eventPlayerOnMoveCreature(Player* player, Creature* creature, const Position& fromPosition, const Position& toPosition); @@ -79,6 +80,7 @@ private: int32_t playerOnLook; int32_t playerOnLookInBattleList; int32_t playerOnLookInTrade; + int32_t playerOnLookInMarket; int32_t playerOnMoveItem; int32_t playerOnItemMoved; int32_t playerOnMoveCreature; diff --git a/src/game.cpp b/src/game.cpp index d4595e2..ea6159c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -28,6 +28,7 @@ #include "game.h" #include "actions.h" #include "iologindata.h" +#include "iomarket.h" #include "talkaction.h" #include "spells.h" #include "configmanager.h" @@ -37,6 +38,8 @@ #include "scheduler.h" #include "databasetasks.h" #include "movement.h" +#include "inbox.h" +#include "depotchest.h" extern ConfigManager g_config; extern Actions* g_actions; @@ -310,6 +313,7 @@ Thing* Game::internalGetThing(Player* player, const Position& pos, int32_t index //inventory slots_t slot = static_cast(pos.y); return player->getInventoryItem(slot); + } void Game::internalGetPosition(Item* item, Position& pos, uint8_t& stackpos) @@ -4452,6 +4456,473 @@ void Game::playerDebugAssert(uint32_t playerId, const std::string& assertLine, c } } +void Game::playerLeaveMarket(uint32_t playerId) +{ + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + player->setInMarket(false); +} + +void Game::playerBrowseMarket(uint32_t playerId, uint16_t spriteId) +{ + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + const ItemType& it = Item::items[spriteId]; + if (it.id == 0) { + return; + } + + const MarketOfferList& buyOffers = IOMarket::getActiveOffers(MARKETACTION_BUY, it.id); + const MarketOfferList& sellOffers = IOMarket::getActiveOffers(MARKETACTION_SELL, it.id); + player->sendMarketBrowseItem(it.id, buyOffers, sellOffers); + g_events->eventPlayerOnLookInMarket(player, &it); +} + +void Game::playerBrowseMarketOwnOffers(uint32_t playerId) +{ + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + const MarketOfferList& buyOffers = IOMarket::getOwnOffers(MARKETACTION_BUY, player->getGUID()); + const MarketOfferList& sellOffers = IOMarket::getOwnOffers(MARKETACTION_SELL, player->getGUID()); + player->sendMarketBrowseOwnOffers(buyOffers, sellOffers); +} + +void Game::playerBrowseMarketOwnHistory(uint32_t playerId) +{ + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + const HistoryMarketOfferList& buyOffers = IOMarket::getOwnHistory(MARKETACTION_BUY, player->getGUID()); + const HistoryMarketOfferList& sellOffers = IOMarket::getOwnHistory(MARKETACTION_SELL, player->getGUID()); + player->sendMarketBrowseOwnHistory(buyOffers, sellOffers); +} + +void Game::playerCreateMarketOffer(uint32_t playerId, uint8_t type, uint16_t spriteId, uint16_t amount, uint64_t price, bool anonymous) +{ + if (amount == 0 || amount > 64000) { + return; + } + + if (price == 0 || price > 999999999999) { + return; + } + + if (type != MARKETACTION_BUY && type != MARKETACTION_SELL) { + return; + } + + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + if (g_config.getBoolean(ConfigManager::MARKET_PREMIUM) && !player->isPremium()) { + player->sendTextMessage(MESSAGE_STATUS_DEFAULT, "Only premium accounts may create offers for that object."); + return; + } + + const ItemType& it = Item::items[spriteId]; + if (it.id == 0) { + return; + } + + if (!it.stackable && amount > 2000) { + return; + } + + const uint32_t maxOfferCount = g_config.getNumber(ConfigManager::MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER); + if (maxOfferCount != 0 && IOMarket::getPlayerOfferCount(player->getGUID()) >= maxOfferCount) { + return; + } + + uint64_t fee = (price / 100.) * amount; + if (fee < MIN_MARKET_FEE) { + fee = MIN_MARKET_FEE; + } + else if (fee > MAX_MARKET_FEE) { + fee = MAX_MARKET_FEE; + } + + if (type == MARKETACTION_SELL) { + if (fee > (player->getMoney() + player->bankBalance)) { + return; + } + + DepotLocker* depotLocker = player->getDepotLocker(player->getLastDepotId(), false); + if (!depotLocker) { + return; + } + + std::forward_list itemList = getMarketItemList(it.id, amount, depotLocker, player->getInbox()); + if (itemList.empty()) { + return; + } + + if (it.stackable) { + uint16_t tmpAmount = amount; + for (Item* item : itemList) { + uint16_t removeCount = std::min(tmpAmount, item->getItemCount()); + tmpAmount -= removeCount; + internalRemoveItem(item, removeCount); + + if (tmpAmount == 0) { + break; + } + } + } + else { + for (Item* item : itemList) { + internalRemoveItem(item); + } + } + + const auto debitCash = std::min(player->getMoney(), fee); + const auto debitBank = fee - debitCash; + removeMoney(player, debitCash); + player->bankBalance -= debitBank; + } + else { + uint64_t totalPrice = static_cast(price) * amount; + totalPrice += fee; + if (totalPrice > (player->getMoney() + player->bankBalance)) { + return; + } + + const auto debitCash = std::min(player->getMoney(), totalPrice); + const auto debitBank = totalPrice - debitCash; + removeMoney(player, debitCash); + player->bankBalance -= debitBank; + } + + IOMarket::createOffer(player->getGUID(), static_cast(type), it.id, amount, price, anonymous); + + player->sendMarketEnter(player->getLastDepotId()); + const MarketOfferList& buyOffers = IOMarket::getActiveOffers(MARKETACTION_BUY, it.id); + const MarketOfferList& sellOffers = IOMarket::getActiveOffers(MARKETACTION_SELL, it.id); + player->sendMarketBrowseItem(it.id, buyOffers, sellOffers); +} + +void Game::playerCancelMarketOffer(uint32_t playerId, uint32_t timestamp, uint16_t counter) +{ + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + MarketOfferEx offer = IOMarket::getOfferByCounter(timestamp, counter); + if (offer.id == 0 || offer.playerId != player->getGUID()) { + return; + } + + if (offer.type == MARKETACTION_BUY) { + player->bankBalance += offer.price * offer.amount; + player->sendMarketEnter(player->getLastDepotId()); + } + else { + const ItemType& it = Item::items[offer.itemId]; + if (it.id == 0) { + return; + } + + if (it.stackable) { + uint16_t tmpAmount = offer.amount; + while (tmpAmount > 0) { + int32_t stackCount = std::min(100, tmpAmount); + Item* item = Item::CreateItem(it.id, stackCount); + if (internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + + tmpAmount -= stackCount; + } + } + else { + int32_t subType; + if (it.charges != 0) { + subType = it.charges; + } + else { + subType = -1; + } + + for (uint16_t i = 0; i < offer.amount; ++i) { + Item* item = Item::CreateItem(it.id, subType); + if (internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + } + } + } + + IOMarket::moveOfferToHistory(offer.id, OFFERSTATE_CANCELLED); + offer.amount = 0; + offer.timestamp += g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + player->sendMarketCancelOffer(offer); + player->sendMarketEnter(player->getLastDepotId()); +} + +void Game::playerAcceptMarketOffer(uint32_t playerId, uint32_t timestamp, uint16_t counter, uint16_t amount) +{ + if (amount == 0 || amount > 64000) { + return; + } + + Player* player = getPlayerByID(playerId); + if (!player) { + return; + } + + if (!player->isInMarket()) { + return; + } + + MarketOfferEx offer = IOMarket::getOfferByCounter(timestamp, counter); + if (offer.id == 0) { + return; + } + + uint32_t offerAccountId = IOLoginData::getAccountIdByPlayerId(offer.playerId); + if (offerAccountId == player->getAccount()) { + player->sendTextMessage(MESSAGE_STATUS_DEFAULT, "You cannot accept your own offer."); + return; + } + + if (amount > offer.amount) { + return; + } + + const ItemType& it = Item::items[offer.itemId]; + if (it.id == 0) { + return; + } + + uint64_t totalPrice = offer.price * amount; + + if (offer.type == MARKETACTION_BUY) { + DepotLocker* depotLocker = player->getDepotLocker(player->getLastDepotId(), false); + if (!depotLocker) { + return; + } + + std::forward_list itemList = getMarketItemList(it.id, amount, depotLocker, player->getInbox()); + if (itemList.empty()) { + return; + } + + Player* buyerPlayer = getPlayerByGUID(offer.playerId); + if (!buyerPlayer) { + buyerPlayer = new Player(nullptr); + if (!IOLoginData::loadPlayerById(buyerPlayer, offer.playerId)) { + delete buyerPlayer; + return; + } + } + + if (it.stackable) { + uint16_t tmpAmount = amount; + for (Item* item : itemList) { + uint16_t removeCount = std::min(tmpAmount, item->getItemCount()); + tmpAmount -= removeCount; + internalRemoveItem(item, removeCount); + + if (tmpAmount == 0) { + break; + } + } + } + else { + for (Item* item : itemList) { + internalRemoveItem(item); + } + } + + player->bankBalance += totalPrice; + + if (it.stackable) { + uint16_t tmpAmount = amount; + while (tmpAmount > 0) { + uint16_t stackCount = std::min(100, tmpAmount); + Item* item = Item::CreateItem(it.id, stackCount); + if (internalAddItem(buyerPlayer->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + + tmpAmount -= stackCount; + } + } + else { + int32_t subType; + if (it.charges != 0) { + subType = it.charges; + } + else { + subType = -1; + } + + for (uint16_t i = 0; i < amount; ++i) { + Item* item = Item::CreateItem(it.id, subType); + if (internalAddItem(buyerPlayer->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + } + } + + if (buyerPlayer->isOffline()) { + IOLoginData::savePlayer(buyerPlayer); + delete buyerPlayer; + } + else { + buyerPlayer->onReceiveMail(); + } + } + else { + if (totalPrice > (player->getMoney() + player->bankBalance)) { + return; + } + + const auto debitCash = std::min(player->getMoney(), totalPrice); + const auto debitBank = totalPrice - debitCash; + removeMoney(player, debitCash); + player->bankBalance -= debitBank; + + if (it.stackable) { + uint16_t tmpAmount = amount; + while (tmpAmount > 0) { + uint16_t stackCount = std::min(100, tmpAmount); + Item* item = Item::CreateItem(it.id, stackCount); + if (internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + + tmpAmount -= stackCount; + } + } + else { + int32_t subType; + if (it.charges != 0) { + subType = it.charges; + } + else { + subType = -1; + } + + for (uint16_t i = 0; i < amount; ++i) { + Item* item = Item::CreateItem(it.id, subType); + if (internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + } + } + + Player* sellerPlayer = getPlayerByGUID(offer.playerId); + if (sellerPlayer) { + sellerPlayer->bankBalance += totalPrice; + } + else { + IOLoginData::increaseBankBalance(offer.playerId, totalPrice); + } + + player->onReceiveMail(); + } + + const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + IOMarket::appendHistory(player->getGUID(), (offer.type == MARKETACTION_BUY ? MARKETACTION_SELL : MARKETACTION_BUY), offer.itemId, amount, offer.price, offer.timestamp + marketOfferDuration, OFFERSTATE_ACCEPTEDEX); + + IOMarket::appendHistory(offer.playerId, offer.type, offer.itemId, amount, offer.price, offer.timestamp + marketOfferDuration, OFFERSTATE_ACCEPTED); + + offer.amount -= amount; + + if (offer.amount == 0) { + IOMarket::deleteOffer(offer.id); + } + else { + IOMarket::acceptOffer(offer.id, amount); + } + + player->sendMarketEnter(player->getLastDepotId()); + offer.timestamp += marketOfferDuration; + player->sendMarketAcceptOffer(offer); +} + +std::forward_list Game::getMarketItemList(uint16_t wareId, uint16_t sufficientCount, DepotLocker* depotLocker, Inbox* inbox) +{ + std::forward_list itemList; + uint16_t count = 0; + + std::list containers{ depotLocker, inbox }; + do { + Container* container = containers.front(); + containers.pop_front(); + + for (Item* item : container->getItemList()) { + Container* c = item->getContainer(); + if (c && !c->empty()) { + containers.push_back(c); + continue; + } + + const ItemType& itemType = Item::items[item->getID()]; + if (itemType.id != wareId) { + continue; + } + + if (c && (!itemType.isContainer() || c->capacity() != itemType.maxItems)) { + continue; + } + + if (!item->hasMarketAttributes()) { + continue; + } + + itemList.push_front(item); + + count += Item::countByType(item, -1); + if (count >= sufficientCount) { + return itemList; + } + } + } while (!containers.empty()); + return std::forward_list(); +} + void Game::parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer) { Player* player = getPlayerByID(playerId); diff --git a/src/game.h b/src/game.h index d47d04d..f6d7876 100644 --- a/src/game.h +++ b/src/game.h @@ -406,6 +406,15 @@ class Game void playerContinueRuleViolationReport(Player* player, const std::string& text); void parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer); + void playerLeaveMarket(uint32_t playerId); + void playerBrowseMarket(uint32_t playerId, uint16_t spriteId); + void playerBrowseMarketOwnOffers(uint32_t playerId); + void playerBrowseMarketOwnHistory(uint32_t playerId); + void playerCreateMarketOffer(uint32_t playerId, uint8_t type, uint16_t spriteId, uint16_t amount, uint64_t price, bool anonymous); + void playerCancelMarketOffer(uint32_t playerId, uint32_t timestamp, uint16_t counter); + void playerAcceptMarketOffer(uint32_t playerId, uint32_t timestamp, uint16_t counter, uint16_t amount); + std::forward_list getMarketItemList(uint16_t wareId, uint16_t sufficientCount, DepotLocker* depotLocker, Inbox* inbox); + void closeRuleViolationReport(Player* player); void cancelRuleViolationReport(Player* player); diff --git a/src/house.cpp b/src/house.cpp index 244f2a1..fcb8891 100644 --- a/src/house.cpp +++ b/src/house.cpp @@ -26,6 +26,7 @@ #include "game.h" #include "configmanager.h" #include "bed.h" +#include "inbox.h" extern ConfigManager g_config; extern Game g_game; diff --git a/src/inbox.cpp b/src/inbox.cpp new file mode 100644 index 0000000..40a2f17 --- /dev/null +++ b/src/inbox.cpp @@ -0,0 +1,57 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#include "otpch.h" + +#include "inbox.h" + +#include "tools.h" + +Inbox::Inbox(uint16_t type) : Container(type, 30) {} + +ReturnValue Inbox::queryAdd(int32_t, const Thing& thing, uint32_t, + uint32_t flags, Creature*) const +{ + if (!hasBitSet(FLAG_NOLIMIT, flags)) { + return RETURNVALUE_CONTAINERNOTENOUGHROOM; + } + + const Item* item = thing.getItem(); + if (!item) { + return RETURNVALUE_NOTPOSSIBLE; + } + + if (item == this) { + return RETURNVALUE_THISISIMPOSSIBLE; + } + + if (!item->isPickupable()) { + return RETURNVALUE_CANNOTPICKUP; + } + + return RETURNVALUE_NOERROR; +} + +void Inbox::postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t) +{ + Cylinder* parent = getParent(); + if (parent) { + parent->postAddNotification(thing, oldParent, index, LINK_PARENT); + } +} + +void Inbox::postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t) +{ + Cylinder* parent = getParent(); + if (parent) { + parent->postRemoveNotification(thing, newParent, index, LINK_PARENT); + } +} + +Cylinder* Inbox::getParent() const +{ + if (parent) { + return parent->getParent(); + } + return nullptr; +} diff --git a/src/inbox.h b/src/inbox.h new file mode 100644 index 0000000..640ff5e --- /dev/null +++ b/src/inbox.h @@ -0,0 +1,32 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#ifndef FS_INBOX_H +#define FS_INBOX_H + +#include "container.h" + +class Inbox final : public Container +{ +public: + explicit Inbox(uint16_t type); + + //cylinder implementations + ReturnValue queryAdd(int32_t index, const Thing& thing, uint32_t count, + uint32_t flags, Creature* actor = nullptr) const override; + + void postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + void postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + + //overrides + bool canRemove() const override { + return false; + } + + Cylinder* getParent() const override; + Cylinder* getRealParent() const override { + return parent; + } +}; + +#endif // FS_INBOX_H diff --git a/src/iologindata.cpp b/src/iologindata.cpp index ae1da42..03a3b47 100644 --- a/src/iologindata.cpp +++ b/src/iologindata.cpp @@ -22,6 +22,9 @@ #include "iologindata.h" #include "configmanager.h" #include "game.h" +#include "depotchest.h" +#include "inbox.h" +#include extern ConfigManager g_config; extern Game g_game; @@ -480,7 +483,8 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) } } } - } else { + } + else { ItemMap::const_iterator it2 = itemMap.find(pid); if (it2 == itemMap.end()) { continue; @@ -494,6 +498,35 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) } } + //load inbox items + itemMap.clear(); + + if ((result = db->storeQuery(fmt::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_inboxitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { + loadItems(itemMap, result); + + for (ItemMap::const_reverse_iterator it = itemMap.rbegin(), end = itemMap.rend(); it != end; ++it) { + const std::pair& pair = it->second; + Item* item = pair.first; + int32_t pid = pair.second; + + if (pid >= 0 && pid < 100) { + player->getInbox()->internalAddThing(item); + } + else { + ItemMap::const_iterator it2 = itemMap.find(pid); + + if (it2 == itemMap.end()) { + continue; + } + + Container* container = it2->second.first->getContainer(); + if (container) { + container->internalAddThing(item); + } + } + } + } + //load storage map query.str(std::string()); query << "SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = " << player->getGUID(); @@ -761,22 +794,37 @@ bool IOLoginData::savePlayer(Player* player) return false; } - //save depot items - query.str(std::string()); - query << "DELETE FROM `player_depotitems` WHERE `player_id` = " << player->getGUID(); + if (player->lastDepotId != -1) { + //save depot items + if (!db->executeQuery(fmt::format("DELETE FROM `player_depotitems` WHERE `player_id` = {:d}", player->getGUID()))) { + return false; + } - if (!db->executeQuery(query.str())) { + DBInsert depotQuery("INSERT INTO `player_depotitems` (`player_id`, `pid`, `sid`, `itemtype`, `count`, `attributes`) VALUES "); + itemList.clear(); + + for (const auto& it : player->depotLockerMap) { + itemList.emplace_back(it.first, it.second); + } + + if (!saveItems(player, itemList, depotQuery, propWriteStream)) { + return false; + } + } + + //save inbox items + if (!db->executeQuery(fmt::format("DELETE FROM `player_inboxitems` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } - DBInsert depotQuery("INSERT INTO `player_depotitems` (`player_id`, `pid`, `sid`, `itemtype`, `count`, `attributes`) VALUES "); + DBInsert inboxQuery("INSERT INTO `player_inboxitems` (`player_id`, `pid`, `sid`, `itemtype`, `count`, `attributes`) VALUES "); itemList.clear(); - for (const auto& it : player->depotLockerMap) { - itemList.emplace_back(it.first, it.second); + for (Item* item : player->getInbox()->getItemList()) { + itemList.emplace_back(0, item); } - if (!saveItems(player, itemList, depotQuery, propWriteStream)) { + if (!saveItems(player, itemList, inboxQuery, propWriteStream)) { return false; } @@ -985,3 +1033,14 @@ void IOLoginData::removePremiumDays(uint32_t accountId, int32_t removeDays) query << "UPDATE `accounts` SET `premdays` = `premdays` - " << removeDays << " WHERE `id` = " << accountId; Database::getInstance()->executeQuery(query.str()); } + +uint32_t IOLoginData::getAccountIdByPlayerId(uint32_t playerId) +{ + Database* db = Database::getInstance(); + + DBResult_ptr result = db->storeQuery(fmt::format("SELECT `account_id` FROM `players` WHERE `id` = {:d}", playerId)); + if (!result) { + return 0; + } + return result->getNumber("account_id"); +} \ No newline at end of file diff --git a/src/iologindata.h b/src/iologindata.h index 6bfbecd..a477de3 100644 --- a/src/iologindata.h +++ b/src/iologindata.h @@ -59,6 +59,7 @@ class IOLoginData static void addPremiumDays(uint32_t accountId, int32_t addDays); static void removePremiumDays(uint32_t accountId, int32_t removeDays); + static uint32_t getAccountIdByPlayerId(uint32_t playerId); protected: typedef std::map> ItemMap; diff --git a/src/iomarket.cpp b/src/iomarket.cpp new file mode 100644 index 0000000..562f240 --- /dev/null +++ b/src/iomarket.cpp @@ -0,0 +1,307 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#include "otpch.h" + +#include "iomarket.h" + +#include "configmanager.h" +#include "databasetasks.h" +#include "game.h" +#include "inbox.h" +#include "iologindata.h" +#include "scheduler.h" +#include + +extern ConfigManager g_config; +extern Game g_game; + +MarketOfferList IOMarket::getActiveOffers(MarketAction_t action, uint16_t itemId) +{ + MarketOfferList offerList; + + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT `id`, `amount`, `price`, `created`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `sale` = {:d} AND `itemtype` = {:d}", action, itemId)); + if (!result) { + return offerList; + } + + const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + do { + MarketOffer offer; + offer.amount = result->getNumber("amount"); + offer.price = result->getNumber("price"); + offer.timestamp = result->getNumber("created") + marketOfferDuration; + offer.counter = result->getNumber("id") & 0xFFFF; + if (result->getNumber("anonymous") == 0) { + offer.playerName = result->getString("player_name"); + } + else { + offer.playerName = "Anonymous"; + } + offerList.push_back(offer); + } while (result->next()); + return offerList; +} + +MarketOfferList IOMarket::getOwnOffers(MarketAction_t action, uint32_t playerId) +{ + MarketOfferList offerList; + + const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT `id`, `amount`, `price`, `created`, `itemtype` FROM `market_offers` WHERE `player_id` = {:d} AND `sale` = {:d}", playerId, action)); + if (!result) { + return offerList; + } + + do { + MarketOffer offer; + offer.amount = result->getNumber("amount"); + offer.price = result->getNumber("price"); + offer.timestamp = result->getNumber("created") + marketOfferDuration; + offer.counter = result->getNumber("id") & 0xFFFF; + offer.itemId = result->getNumber("itemtype"); + offerList.push_back(offer); + } while (result->next()); + return offerList; +} + +HistoryMarketOfferList IOMarket::getOwnHistory(MarketAction_t action, uint32_t playerId) +{ + HistoryMarketOfferList offerList; + + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT `itemtype`, `amount`, `price`, `expires_at`, `state` FROM `market_history` WHERE `player_id` = {:d} AND `sale` = {:d}", playerId, action)); + if (!result) { + return offerList; + } + + do { + HistoryMarketOffer offer; + offer.itemId = result->getNumber("itemtype"); + offer.amount = result->getNumber("amount"); + offer.price = result->getNumber("price"); + offer.timestamp = result->getNumber("expires_at"); + + MarketOfferState_t offerState = static_cast(result->getNumber("state")); + if (offerState == OFFERSTATE_ACCEPTEDEX) { + offerState = OFFERSTATE_ACCEPTED; + } + + offer.state = offerState; + + offerList.push_back(offer); + } while (result->next()); + return offerList; +} + +void IOMarket::processExpiredOffers(DBResult_ptr result, bool) +{ + if (!result) { + return; + } + + do { + if (!IOMarket::moveOfferToHistory(result->getNumber("id"), OFFERSTATE_EXPIRED)) { + continue; + } + + const uint32_t playerId = result->getNumber("player_id"); + const uint16_t amount = result->getNumber("amount"); + if (result->getNumber("sale") == 1) { + const ItemType& itemType = Item::items[result->getNumber("itemtype")]; + if (itemType.id == 0) { + continue; + } + + Player* player = g_game.getPlayerByGUID(playerId); + if (!player) { + player = new Player(nullptr); + if (!IOLoginData::loadPlayerById(player, playerId)) { + delete player; + continue; + } + } + + if (itemType.stackable) { + uint16_t tmpAmount = amount; + while (tmpAmount > 0) { + uint16_t stackCount = std::min(100, tmpAmount); + Item* item = Item::CreateItem(itemType.id, stackCount); + if (g_game.internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + + tmpAmount -= stackCount; + } + } + else { + int32_t subType; + if (itemType.charges != 0) { + subType = itemType.charges; + } + else { + subType = -1; + } + + for (uint16_t i = 0; i < amount; ++i) { + Item* item = Item::CreateItem(itemType.id, subType); + if (g_game.internalAddItem(player->getInbox(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RETURNVALUE_NOERROR) { + delete item; + break; + } + } + } + + if (player->isOffline()) { + IOLoginData::savePlayer(player); + delete player; + } + } + else { + uint64_t totalPrice = result->getNumber("price") * amount; + + Player* player = g_game.getPlayerByGUID(playerId); + if (player) { + player->setBankBalance(player->getBankBalance() + totalPrice); + } + else { + IOLoginData::increaseBankBalance(playerId, totalPrice); + } + } + } while (result->next()); +} + +void IOMarket::checkExpiredOffers() +{ + const time_t lastExpireDate = time(nullptr) - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + g_databaseTasks.addTask(fmt::format("SELECT `id`, `amount`, `price`, `itemtype`, `player_id`, `sale` FROM `market_offers` WHERE `created` <= {:d}", lastExpireDate), IOMarket::processExpiredOffers, true); + + int32_t checkExpiredMarketOffersEachMinutes = g_config.getNumber(ConfigManager::CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES); + if (checkExpiredMarketOffersEachMinutes <= 0) { + return; + } + + g_scheduler.addEvent(createSchedulerTask(checkExpiredMarketOffersEachMinutes * 60 * 1000, &IOMarket::checkExpiredOffers)); +} + +uint32_t IOMarket::getPlayerOfferCount(uint32_t playerId) +{ + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT COUNT(*) AS `count` FROM `market_offers` WHERE `player_id` = {:d}", playerId)); + if (!result) { + return 0; + } + return result->getNumber("count"); +} + +MarketOfferEx IOMarket::getOfferByCounter(uint32_t timestamp, uint16_t counter) +{ + MarketOfferEx offer; + + const int32_t created = timestamp - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT `id`, `sale`, `itemtype`, `amount`, `created`, `price`, `player_id`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `created` = {:d} AND (`id` & 65535) = {:d} LIMIT 1", created, counter)); + if (!result) { + offer.id = 0; + offer.playerId = 0; + return offer; + } + + offer.id = result->getNumber("id"); + offer.type = static_cast(result->getNumber("sale")); + offer.amount = result->getNumber("amount"); + offer.counter = result->getNumber("id") & 0xFFFF; + offer.timestamp = result->getNumber("created"); + offer.price = result->getNumber("price"); + offer.itemId = result->getNumber("itemtype"); + offer.playerId = result->getNumber("player_id"); + if (result->getNumber("anonymous") == 0) { + offer.playerName = result->getString("player_name"); + } + else { + offer.playerName = "Anonymous"; + } + return offer; +} + +void IOMarket::createOffer(uint32_t playerId, MarketAction_t action, uint32_t itemId, uint16_t amount, uint64_t price, bool anonymous) +{ + Database::getInstance()->executeQuery(fmt::format("INSERT INTO `market_offers` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `created`, `anonymous`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, action, itemId, amount, price, time(nullptr), anonymous)); +} + +void IOMarket::acceptOffer(uint32_t offerId, uint16_t amount) +{ + Database::getInstance()->executeQuery(fmt::format("UPDATE `market_offers` SET `amount` = `amount` - {:d} WHERE `id` = {:d}", amount, offerId)); +} + +void IOMarket::deleteOffer(uint32_t offerId) +{ + Database::getInstance()->executeQuery(fmt::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId)); +} + +void IOMarket::appendHistory(uint32_t playerId, MarketAction_t type, uint16_t itemId, uint16_t amount, uint64_t price, time_t timestamp, MarketOfferState_t state) +{ + g_databaseTasks.addTask(fmt::format("INSERT INTO `market_history` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `expires_at`, `inserted`, `state`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, type, itemId, amount, price, timestamp, time(nullptr), state)); +} + +bool IOMarket::moveOfferToHistory(uint32_t offerId, MarketOfferState_t state) +{ + const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + + Database* db = Database::getInstance(); + + DBResult_ptr result = db->storeQuery(fmt::format("SELECT `player_id`, `sale`, `itemtype`, `amount`, `price`, `created` FROM `market_offers` WHERE `id` = {:d}", offerId)); + if (!result) { + return false; + } + + if (!db->executeQuery(fmt::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId))) { + return false; + } + + appendHistory(result->getNumber("player_id"), static_cast(result->getNumber("sale")), result->getNumber("itemtype"), result->getNumber("amount"), result->getNumber("price"), result->getNumber("created") + marketOfferDuration, state); + return true; +} + +void IOMarket::updateStatistics() +{ + DBResult_ptr result = Database::getInstance()->storeQuery(fmt::format("SELECT `sale` AS `sale`, `itemtype` AS `itemtype`, COUNT(`price`) AS `num`, MIN(`price`) AS `min`, MAX(`price`) AS `max`, SUM(`price`) AS `sum` FROM `market_history` WHERE `state` = {:d} GROUP BY `itemtype`, `sale`", OFFERSTATE_ACCEPTED)); + if (!result) { + return; + } + + do { + MarketStatistics* statistics; + if (result->getNumber("sale") == MARKETACTION_BUY) { + statistics = &purchaseStatistics[result->getNumber("itemtype")]; + } + else { + statistics = &saleStatistics[result->getNumber("itemtype")]; + } + + statistics->numTransactions = result->getNumber("num"); + statistics->lowestPrice = result->getNumber("min"); + statistics->totalPrice = result->getNumber("sum"); + statistics->highestPrice = result->getNumber("max"); + } while (result->next()); +} + +MarketStatistics* IOMarket::getPurchaseStatistics(uint16_t itemId) +{ + auto it = purchaseStatistics.find(itemId); + if (it == purchaseStatistics.end()) { + return nullptr; + } + return &it->second; +} + +MarketStatistics* IOMarket::getSaleStatistics(uint16_t itemId) +{ + auto it = saleStatistics.find(itemId); + if (it == saleStatistics.end()) { + return nullptr; + } + return &it->second; +} diff --git a/src/iomarket.h b/src/iomarket.h new file mode 100644 index 0000000..181b651 --- /dev/null +++ b/src/iomarket.h @@ -0,0 +1,47 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#ifndef FS_IOMARKET_H +#define FS_IOMARKET_H + +#include "database.h" +#include "enums.h" + +class IOMarket +{ +public: + static IOMarket& getInstance() { + static IOMarket instance; + return instance; + } + + static MarketOfferList getActiveOffers(MarketAction_t action, uint16_t itemId); + static MarketOfferList getOwnOffers(MarketAction_t action, uint32_t playerId); + static HistoryMarketOfferList getOwnHistory(MarketAction_t action, uint32_t playerId); + + static void processExpiredOffers(DBResult_ptr result, bool); + static void checkExpiredOffers(); + + static uint32_t getPlayerOfferCount(uint32_t playerId); + static MarketOfferEx getOfferByCounter(uint32_t timestamp, uint16_t counter); + + static void createOffer(uint32_t playerId, MarketAction_t action, uint32_t itemId, uint16_t amount, uint64_t price, bool anonymous); + static void acceptOffer(uint32_t offerId, uint16_t amount); + static void deleteOffer(uint32_t offerId); + + static void appendHistory(uint32_t playerId, MarketAction_t type, uint16_t itemId, uint16_t amount, uint64_t price, time_t timestamp, MarketOfferState_t state); + static bool moveOfferToHistory(uint32_t offerId, MarketOfferState_t state); + + void updateStatistics(); + + MarketStatistics* getPurchaseStatistics(uint16_t itemId); + MarketStatistics* getSaleStatistics(uint16_t itemId); + +private: + IOMarket() = default; + + std::map purchaseStatistics; + std::map saleStatistics; +}; + +#endif // FS_IOMARKET_H diff --git a/src/item.cpp b/src/item.cpp index 929f22c..5a1c07c 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -1302,3 +1302,44 @@ void Item::startDecaying() { g_game.startDecay(this); } + +bool Item::hasMarketAttributes() const +{ + if (!attributes) { + return true; + } + + // discard items with custom boost and reflect + /* + TODO: find out if necessary + for (uint16_t i = 0; i < COMBAT_COUNT; ++i) { + if (getBoostPercent(indexToCombatType(i), false) > 0) { + return false; + } + + Reflect tmpReflect = getReflect(indexToCombatType(i), false); + if (tmpReflect.chance != 0 || tmpReflect.percent != 0) { + return false; + } + } + */ + // discard items with other modified attributes + for (const auto& attr : attributes->getList()) { + if (attr.type == ITEM_ATTRIBUTE_CHARGES) { + uint16_t charges = static_cast(attr.value.integer); + if (charges != items[id].charges) { + return false; + } + } + else if (attr.type == ITEM_ATTRIBUTE_DURATION) { + uint32_t duration = static_cast(attr.value.integer); + if (duration != getDefaultDuration()) { + return false; + } + } + else { + return false; + } + } + return true; +} \ No newline at end of file diff --git a/src/item.h b/src/item.h index 87b2a04..eac9d10 100644 --- a/src/item.h +++ b/src/item.h @@ -776,6 +776,8 @@ class Item : virtual public Thing virtual void startDecaying(); + bool hasMarketAttributes() const; + void setLoadedFromMap(bool value) { loadedFromMap = value; } diff --git a/src/items.h b/src/items.h index 6411e99..6b6d6e2 100644 --- a/src/items.h +++ b/src/items.h @@ -258,6 +258,7 @@ class ItemType bool useEvent = false; bool multiUseEvent = false; bool distUse = false; + bool storeItem = false; bool disguise = false; bool forceUse = false; bool changeUse = false; diff --git a/src/luascript.cpp b/src/luascript.cpp index c82f47d..124fed7 100644 --- a/src/luascript.cpp +++ b/src/luascript.cpp @@ -28,6 +28,7 @@ #include "protocolstatus.h" #include "spells.h" #include "iologindata.h" +#include "iomarket.h" #include "configmanager.h" #include "teleport.h" #include "databasemanager.h" @@ -35,6 +36,8 @@ #include "monster.h" #include "scheduler.h" #include "databasetasks.h" +#include "inbox.h" +#include "depotchest.h" extern Chat* g_chat; extern Game g_game; @@ -1629,6 +1632,7 @@ void LuaScriptInterface::registerFunctions() registerEnumIn("configKeys", ConfigManager::ALLOW_CLONES) registerEnumIn("configKeys", ConfigManager::BIND_ONLY_GLOBAL_ADDRESS) registerEnumIn("configKeys", ConfigManager::OPTIMIZE_DATABASE) + registerEnumIn("configKeys", ConfigManager::MARKET_PREMIUM) registerEnumIn("configKeys", ConfigManager::STAMINA_SYSTEM) registerEnumIn("configKeys", ConfigManager::WARN_UNSAFE_SCRIPTS) registerEnumIn("configKeys", ConfigManager::CONVERT_UNSAFE_SCRIPTS) @@ -1685,6 +1689,9 @@ void LuaScriptInterface::registerFunctions() registerEnumIn("configKeys", ConfigManager::LOGIN_PORT) registerEnumIn("configKeys", ConfigManager::STATUS_PORT) registerEnumIn("configKeys", ConfigManager::STAIRHOP_DELAY) + registerEnumIn("configKeys", ConfigManager::MARKET_OFFER_DURATION) + registerEnumIn("configKeys", ConfigManager::CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES) + registerEnumIn("configKeys", ConfigManager::MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER) registerEnumIn("configKeys", ConfigManager::EXP_FROM_PLAYERS_LEVEL_RANGE) registerEnumIn("configKeys", ConfigManager::MAX_PACKETS_PER_SECOND) registerEnumIn("configKeys", ConfigManager::NEWBIE_TOWN) @@ -1989,6 +1996,7 @@ void LuaScriptInterface::registerFunctions() registerMethod("Player", "getFreeCapacity", LuaScriptInterface::luaPlayerGetFreeCapacity); registerMethod("Player", "getDepotChest", LuaScriptInterface::luaPlayerGetDepotChest); + registerMethod("Player", "getInbox", LuaScriptInterface::luaPlayerGetInbox); registerMethod("Player", "getMurderTimestamps", LuaScriptInterface::luaPlayerGetMurderTimestamps); registerMethod("Player", "getPlayerKillerEnd", LuaScriptInterface::luaPlayerGetPlayerKillerEnd); @@ -2300,6 +2308,9 @@ void LuaScriptInterface::registerFunctions() registerMethod("ItemType", "getNutrition", LuaScriptInterface::luaItemTypeGetNutrition); registerMethod("ItemType", "getRequiredLevel", LuaScriptInterface::luaItemTypeGetRequiredLevel); + registerMethod("ItemType", "getMarketBuyStatistics", LuaScriptInterface::luaItemTypeGetMarketBuyStatistics); + registerMethod("ItemType", "getMarketSellStatistics", LuaScriptInterface::luaItemTypeGetMarketSellStatistics); + registerMethod("ItemType", "hasSubType", LuaScriptInterface::luaItemTypeHasSubType); // Combat @@ -7276,6 +7287,26 @@ int LuaScriptInterface::luaPlayerGetDepotChest(lua_State* L) return 1; } +int LuaScriptInterface::luaPlayerGetInbox(lua_State* L) +{ + // player:getInbox() + Player* player = getUserdata(L, 1); + if (!player) { + lua_pushnil(L); + return 1; + } + + Inbox* inbox = player->getInbox(); + if (inbox) { + pushUserdata(L, inbox); + setItemMetatable(L, -1, inbox); + } + else { + pushBoolean(L, false); + } + return 1; +} + int LuaScriptInterface::luaPlayerGetMurderTimestamps(lua_State * L) { // player:getMurderTimestamps() @@ -10656,6 +10687,52 @@ int LuaScriptInterface::luaItemTypeGetRequiredLevel(lua_State* L) return 1; } +int LuaScriptInterface::luaItemTypeGetMarketBuyStatistics(lua_State* L) +{ + // itemType:getMarketBuyStatistics() + const ItemType* itemType = getUserdata(L, 1); + if (itemType) { + MarketStatistics* statistics = IOMarket::getInstance().getPurchaseStatistics(itemType->id); + if (statistics) { + lua_createtable(L, 4, 0); + setField(L, "numTransactions", statistics->numTransactions); + setField(L, "totalPrice", statistics->totalPrice); + setField(L, "highestPrice", statistics->highestPrice); + setField(L, "lowestPrice", statistics->lowestPrice); + } + else { + lua_pushnil(L); + } + } + else { + lua_pushnil(L); + } + return 1; +} + +int LuaScriptInterface::luaItemTypeGetMarketSellStatistics(lua_State* L) +{ + // itemType:getMarketSellStatistics() + const ItemType* itemType = getUserdata(L, 1); + if (itemType) { + MarketStatistics* statistics = IOMarket::getInstance().getSaleStatistics(itemType->id); + if (statistics) { + lua_createtable(L, 4, 0); + setField(L, "numTransactions", statistics->numTransactions); + setField(L, "totalPrice", statistics->totalPrice); + setField(L, "highestPrice", statistics->highestPrice); + setField(L, "lowestPrice", statistics->lowestPrice); + } + else { + lua_pushnil(L); + } + } + else { + lua_pushnil(L); + } + return 1; +} + int LuaScriptInterface::luaItemTypeHasSubType(lua_State* L) { // itemType:hasSubType() diff --git a/src/luascript.h b/src/luascript.h index cbc7c4d..9f9c3d8 100644 --- a/src/luascript.h +++ b/src/luascript.h @@ -807,6 +807,7 @@ class LuaScriptInterface static int luaPlayerGetFreeCapacity(lua_State* L); static int luaPlayerGetDepotChest(lua_State* L); + static int luaPlayerGetInbox(lua_State* L); static int luaPlayerGetMurderTimestamps(lua_State* L); static int luaPlayerGetPlayerKillerEnd(lua_State* L); @@ -1110,6 +1111,9 @@ class LuaScriptInterface static int luaItemTypeGetNutrition(lua_State* L); static int luaItemTypeGetRequiredLevel(lua_State* L); + static int luaItemTypeGetMarketBuyStatistics(lua_State* L); + static int luaItemTypeGetMarketSellStatistics(lua_State* L); + static int luaItemTypeHasSubType(lua_State* L); // Combat diff --git a/src/mailbox.cpp b/src/mailbox.cpp index 31cd67f..d3ac5b9 100644 --- a/src/mailbox.cpp +++ b/src/mailbox.cpp @@ -24,6 +24,7 @@ #include "player.h" #include "iologindata.h" #include "town.h" +#include "inbox.h" extern Game g_game; @@ -94,50 +95,42 @@ bool Mailbox::sendItem(Item* item) const { std::string receiver; std::string townName; + townName = "thais"; if (!getDestination(item, receiver, townName)) { return false; } - if (receiver.empty() || townName.empty()) { - return false; - } - - Town* town = g_game.map.towns.getTown(townName); - if (!town) { + /**No need to continue if its still empty**/ + if (receiver.empty()) { return false; } Player* player = g_game.getPlayerByName(receiver); if (player) { - DepotLocker* depotLocker = player->getDepotLocker(town->getID(), true); - if (depotLocker) { - if (g_game.internalMoveItem(item->getParent(), depotLocker, INDEX_WHEREEVER, - item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) { - g_game.transformItem(item, item->getID() + 1); - player->onReceiveMail(town->getID()); - return true; - } + if (g_game.internalMoveItem(item->getParent(), player->getInbox(), INDEX_WHEREEVER, + item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) { + g_game.transformItem(item, item->getID() + 1); + player->onReceiveMail(); + return true; } - } else { + } + else { Player tmpPlayer(nullptr); if (!IOLoginData::loadPlayerByName(&tmpPlayer, receiver)) { return false; } - DepotLocker* depotLocker = tmpPlayer.getDepotLocker(town->getID(), true); - if (depotLocker) { - if (g_game.internalMoveItem(item->getParent(), depotLocker, INDEX_WHEREEVER, - item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) { - g_game.transformItem(item, item->getID() + 1); - IOLoginData::savePlayer(&tmpPlayer); - return true; - } + if (g_game.internalMoveItem(item->getParent(), tmpPlayer.getInbox(), INDEX_WHEREEVER, + item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) { + g_game.transformItem(item, item->getID() + 1); + IOLoginData::savePlayer(&tmpPlayer); + return true; } } - return false; } + bool Mailbox::getDestination(Item* item, std::string& name, std::string& town) const { const Container* container = item->getContainer(); diff --git a/src/otserv.cpp b/src/otserv.cpp index f52bdf3..38a3c00 100644 --- a/src/otserv.cpp +++ b/src/otserv.cpp @@ -22,6 +22,7 @@ #include "server.h" #include "game.h" +#include "iomarket.h" #ifndef _WIN32 #include // for sigemptyset() @@ -305,6 +306,9 @@ void mainLoader(int, char*[], ServiceManager* services) g_game.map.houses.payHouses(rentPeriod); + IOMarket::checkExpiredOffers(); + IOMarket::getInstance().updateStatistics(); + std::cout << ">> Loaded all modules, server starting up..." << std::endl; #ifndef _WIN32 diff --git a/src/player.cpp b/src/player.cpp index 0d7a9c9..7540037 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -32,6 +32,8 @@ #include "monster.h" #include "movement.h" #include "scheduler.h" +#include "depotchest.h" +#include "inbox.h" extern ConfigManager g_config; extern Game g_game; @@ -46,8 +48,9 @@ MuteCountMap Player::muteCountMap; uint32_t Player::playerAutoID = 0x10000000; Player::Player(ProtocolGame_ptr p) : - Creature(), lastPing(OTSYS_TIME()), lastPong(lastPing), client(std::move(p)) + Creature(), lastPing(OTSYS_TIME()), lastPong(lastPing), client(std::move(p)), inbox(new Inbox(ITEM_INBOX)) { + inbox->incrementReferenceCounter(); } Player::~Player() @@ -60,9 +63,11 @@ Player::~Player() } for (const auto& it : depotLockerMap) { - it.second->decrementReferenceCounter(); + it.second->removeInbox(inbox); } + inbox->decrementReferenceCounter(); + setWriteItem(nullptr); setEditHouse(nullptr); } @@ -579,14 +584,14 @@ bool Player::canSeeCreature(const Creature* creature) const return true; } -void Player::onReceiveMail(uint32_t townId) const +void Player::onReceiveMail() const { - if (isNearDepotBox(townId)) { + if (isNearDepotBox()) { sendTextMessage(MESSAGE_EVENT_ADVANCE, "New mail has arrived."); } } -bool Player::isNearDepotBox(uint32_t townId) const +bool Player::isNearDepotBox() const { const Position& pos = getPosition(); for (int32_t cx = -1; cx <= 1; ++cx) { @@ -597,25 +602,43 @@ bool Player::isNearDepotBox(uint32_t townId) const } if (DepotLocker* depotLocker = tile->getDepotLocker()) { - if (depotLocker->getDepotId() == townId) { - return true; - } + return true; } } } return false; } +DepotChest* Player::getDepotChest(uint32_t depotId, bool autoCreate) +{ + auto it = depotChests.find(depotId); + if (it != depotChests.end()) { + return it->second; + } + + if (!autoCreate) { + return nullptr; + } + + it = depotChests.emplace(depotId, new DepotChest(ITEM_DEPOT)).first; + it->second->setMaxDepotItems(getMaxDepotItems()); + return it->second; +} + + DepotLocker* Player::getDepotLocker(uint32_t depotId, bool autoCreate) { auto it = depotLockerMap.find(depotId); if (it != depotLockerMap.end()) { + inbox->setParent(it->second); return it->second; } if (autoCreate) { DepotLocker* depotLocker = new DepotLocker(ITEM_LOCKER1); depotLocker->setDepotId(depotId); + depotLocker->internalAddThing(Item::CreateItem(ITEM_MARKET)); + depotLocker->internalAddThing(inbox); Item* depotItem = Item::CreateItem(ITEM_DEPOT); if (depotItem) { depotLocker->internalAddThing(depotItem); @@ -1006,6 +1029,11 @@ void Player::onCreatureMove(Creature* creature, const Tile* newTile, const Posit } } + // leave market + if (inMarket) { + inMarket = false; + } + if (party) { party->updateSharedExperience(); } diff --git a/src/player.h b/src/player.h index 08f4002..4d60e12 100644 --- a/src/player.h +++ b/src/player.h @@ -35,6 +35,7 @@ #include "town.h" class BehaviourDatabase; +class DepotChest; class House; class NetworkMessage; class Weapon; @@ -207,6 +208,10 @@ class Player final : public Creature, public Cylinder bool isInWar(const Player* player) const; bool isInWarList(uint32_t guild_id) const; + Inbox* getInbox() const { + return inbox; + } + uint16_t getClientIcons() const; const GuildWarList& getGuildWarList() const { @@ -306,6 +311,20 @@ class Player final : public Creature, public Cylinder return group; } + void setInMarket(bool value) { + inMarket = value; + } + bool isInMarket() const { + return inMarket; + } + + void setLastDepotId(int16_t newId) { + lastDepotId = newId; + } + int16_t getLastDepotId() const { + return lastDepotId; + } + void resetIdleTime() { idleTime = 0; resetLastWalkingTime(); @@ -454,9 +473,10 @@ class Player final : public Creature, public Cylinder void addConditionSuppressions(uint32_t conditions); void removeConditionSuppressions(uint32_t conditions); + DepotChest* getDepotChest(uint32_t depotId, bool autoCreate); DepotLocker* getDepotLocker(uint32_t depotId, bool autoCreate); - void onReceiveMail(uint32_t townId) const; - bool isNearDepotBox(uint32_t townId) const; + void onReceiveMail() const; + bool isNearDepotBox() const; bool canSee(const Position& pos) const final; bool canSeeCreature(const Creature* creature) const final; @@ -856,6 +876,42 @@ class Player final : public Creature, public Cylinder client->sendToChannel(creature, type, text, channelId); } } + void sendMarketEnter(uint32_t depotId) const { + if (client) { + client->sendMarketEnter(depotId); + } + } + void sendMarketLeave() { + inMarket = false; + if (client) { + client->sendMarketLeave(); + } + } + void sendMarketBrowseItem(uint16_t itemId, const MarketOfferList& buyOffers, const MarketOfferList& sellOffers) const { + if (client) { + client->sendMarketBrowseItem(itemId, buyOffers, sellOffers); + } + } + void sendMarketBrowseOwnOffers(const MarketOfferList& buyOffers, const MarketOfferList& sellOffers) const { + if (client) { + client->sendMarketBrowseOwnOffers(buyOffers, sellOffers); + } + } + void sendMarketBrowseOwnHistory(const HistoryMarketOfferList& buyOffers, const HistoryMarketOfferList& sellOffers) const { + if (client) { + client->sendMarketBrowseOwnHistory(buyOffers, sellOffers); + } + } + void sendMarketAcceptOffer(const MarketOfferEx& offer) const { + if (client) { + client->sendMarketAcceptOffer(offer); + } + } + void sendMarketCancelOffer(const MarketOfferEx& offer) const { + if (client) { + client->sendMarketCancelOffer(offer); + } + } void sendTradeItemRequest(const std::string& traderName, const Item* item, bool ack) const { if (client) { client->sendTradeItemRequest(traderName, item, ack); @@ -1023,6 +1079,7 @@ class Player final : public Creature, public Cylinder std::map openContainers; std::map depotLockerMap; + std::map depotChests; std::map storageMap; std::vector outfits; @@ -1061,6 +1118,7 @@ class Player final : public Creature, public Cylinder Guild* guild = nullptr; const GuildRank* guildRank = nullptr; Group* group = nullptr; + Inbox* inbox; Item* tradeItem = nullptr; Item* inventory[CONST_SLOT_LAST + 1] = {}; Item* writeItem = nullptr; @@ -1103,6 +1161,7 @@ class Player final : public Creature, public Cylinder uint16_t staminaMinutes = 3360; uint16_t maxWriteLen = 0; + int16_t lastDepotId = -1; uint8_t soul = 0; uint8_t blessings = 0; @@ -1118,6 +1177,7 @@ class Player final : public Creature, public Cylinder AccountType_t accountType = ACCOUNT_TYPE_NORMAL; bool secureMode = false; + bool inMarket = false; bool ghostMode = false; bool pzLocked = false; bool isConnecting = false; diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index ce46f0d..2404a77 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -30,10 +30,13 @@ #include "configmanager.h" #include "actions.h" #include "game.h" +#include "inbox.h" +#include "iomarket.h" #include "iologindata.h" #include "waitlist.h" #include "ban.h" #include "scheduler.h" +#include "depotchest.h" extern ConfigManager g_config; extern Actions actions; @@ -451,6 +454,11 @@ void ProtocolGame::parsePacket(NetworkMessage& msg) case 0xE8: parseDebugAssert(msg); break; case 0xF0: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerShowQuestLog, player->getID()); break; case 0xF1: parseQuestLine(msg); break; + case 0xF4: parseMarketLeave(); break; + case 0xF5: parseMarketBrowse(msg); break; + case 0xF6: parseMarketCreateOffer(msg); break; + case 0xF7: parseMarketCancelOffer(msg); break; + case 0xF8: parseMarketAcceptOffer(msg); break; default: std::cout << "Player: " << player->getName() << " sent an unknown packet header: 0x" << std::hex << static_cast(recvbyte) << std::dec << "!" << std::endl; break; @@ -997,6 +1005,61 @@ void ProtocolGame::parseQuestLine(NetworkMessage& msg) addGameTask(&Game::playerShowQuestLine, player->getID(), questId); } +void ProtocolGame::parseMarketLeave() +{ + addGameTask(&Game::playerLeaveMarket, player->getID()); +} + +void ProtocolGame::parseMarketBrowse(NetworkMessage& msg) +{ + uint8_t browseId = msg.get(); + if (browseId == MARKETREQUEST_OWN_OFFERS) { + addGameTask(&Game::playerBrowseMarketOwnOffers, player->getID()); + } + else if (browseId == MARKETREQUEST_OWN_HISTORY) { + addGameTask(&Game::playerBrowseMarketOwnHistory, player->getID()); + } + else { + uint16_t spriteID = msg.get(); + addGameTask(&Game::playerBrowseMarket, player->getID(), spriteID); + } +} + +void ProtocolGame::parseMarketCreateOffer(NetworkMessage& msg) +{ + uint8_t type = msg.getByte(); + uint16_t spriteId = msg.get(); + + const ItemType& it = Item::items[spriteId]; + if (it.id == 0) { + return; + } + // TODO: + //else if (it.classification > 0) { + // msg.getByte(); // item tier + //} + + uint16_t amount = msg.get(); + uint64_t price = msg.get(); + bool anonymous = (msg.getByte() != 0); + addGameTask(&Game::playerCreateMarketOffer, player->getID(), type, spriteId, amount, price, anonymous); +} + +void ProtocolGame::parseMarketCancelOffer(NetworkMessage& msg) +{ + uint32_t timestamp = msg.get(); + uint16_t counter = msg.get(); + addGameTask(&Game::playerCancelMarketOffer, player->getID(), timestamp, counter); +} + +void ProtocolGame::parseMarketAcceptOffer(NetworkMessage& msg) +{ + uint32_t timestamp = msg.get(); + uint16_t counter = msg.get(); + uint16_t amount = msg.get(); + addGameTask(&Game::playerAcceptMarketOffer, player->getID(), timestamp, counter, amount); +} + void ProtocolGame::parseSeekInContainer(NetworkMessage& msg) { uint8_t containerId = msg.getByte(); @@ -1251,6 +1314,259 @@ void ProtocolGame::sendContainer(uint8_t cid, const Container* container, bool h writeToOutputBuffer(msg); } +void ProtocolGame::sendMarketEnter(uint32_t depotId) +{ + NetworkMessage msg; + msg.addByte(0xF6); + msg.addByte(std::min(IOMarket::getPlayerOfferCount(player->getGUID()), std::numeric_limits::max())); + + DepotLocker* depotLocker = player->getDepotLocker(depotId, false); + if (!depotLocker) { + msg.add(0x00); + writeToOutputBuffer(msg); + return; + } + + player->setInMarket(true); + + msg.add(player->getBankBalance()); + + std::map depotItems; + std::forward_list containerList{ depotLocker, player->getInbox() }; + + do { + Container* container = containerList.front(); + containerList.pop_front(); + + for (Item* item : container->getItemList()) { + Container* c = item->getContainer(); + if (c && !c->empty()) { + containerList.push_front(c); + continue; + } + + const ItemType& itemType = Item::items[item->getID()]; + if (itemType.id == 0) { + continue; + } + + if (c && (!itemType.isContainer() || c->capacity() != itemType.maxItems)) { + continue; + } + + if (!item->hasMarketAttributes()) { + continue; + } + + depotItems[itemType.id] += Item::countByType(item, -1); + } + } while (!containerList.empty()); + + uint16_t itemsToSend = std::min(depotItems.size(), std::numeric_limits::max()); + uint16_t i = 0; + + msg.add(itemsToSend); + for (std::map::const_iterator it = depotItems.begin(); i < itemsToSend; ++it, ++i) { + const ItemType& itemType = Item::items[it->first]; + msg.add(itemType.id); + // TODO + //if (itemType.classification > 0) { + // msg.addByte(0); + //} + msg.add(std::min(0xFFFF, it->second)); + } + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketLeave() +{ + NetworkMessage msg; + msg.addByte(0xF7); + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketBrowseItem(uint16_t itemId, const MarketOfferList& buyOffers, const MarketOfferList& sellOffers) +{ + NetworkMessage msg; + msg.addByte(0xF9); + msg.addByte(MARKETREQUEST_ITEM); + msg.addItemId(itemId); + + // TODO + //if (Item::items[itemId].classification > 0) { + // msg.addByte(0); // item tier + //} + + msg.add(buyOffers.size()); + for (const MarketOffer& offer : buyOffers) { + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.add(offer.amount); + msg.add(offer.price); + msg.addString(offer.playerName); + } + + msg.add(sellOffers.size()); + for (const MarketOffer& offer : sellOffers) { + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.add(offer.amount); + msg.add(offer.price); + msg.addString(offer.playerName); + } + + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketAcceptOffer(const MarketOfferEx& offer) +{ + NetworkMessage msg; + msg.addByte(0xF9); + msg.addByte(MARKETREQUEST_ITEM); + msg.addItemId(offer.itemId); + // TODO + //if (Item::items[offer.itemId].classification > 0) { + // msg.addByte(0); + //} + + if (offer.type == MARKETACTION_BUY) { + msg.add(0x01); + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.add(offer.amount); + msg.add(offer.price); + msg.addString(offer.playerName); + msg.add(0x00); + } + else { + msg.add(0x00); + msg.add(0x01); + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.add(offer.amount); + msg.add(offer.price); + msg.addString(offer.playerName); + } + + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketBrowseOwnOffers(const MarketOfferList& buyOffers, const MarketOfferList& sellOffers) +{ + NetworkMessage msg; + msg.addByte(0xF9); + msg.addByte(MARKETREQUEST_OWN_OFFERS); + + msg.add(buyOffers.size()); + for (const MarketOffer& offer : buyOffers) { + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.addItemId(offer.itemId); + // TODO + //if (Item::items[offer.itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(offer.amount); + msg.add(offer.price); + } + + msg.add(sellOffers.size()); + for (const MarketOffer& offer : sellOffers) { + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.addItemId(offer.itemId); + // TODO + //if (Item::items[offer.itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(offer.amount); + msg.add(offer.price); + } + + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketCancelOffer(const MarketOfferEx& offer) +{ + NetworkMessage msg; + msg.addByte(0xF9); + msg.addByte(MARKETREQUEST_OWN_OFFERS); + + if (offer.type == MARKETACTION_BUY) { + msg.add(0x01); + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.addItemId(offer.itemId); + // TODO + //if (Item::items[offer.itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(offer.amount); + msg.add(offer.price); + msg.add(0x00); + } + else { + msg.add(0x00); + msg.add(0x01); + msg.add(offer.timestamp); + msg.add(offer.counter); + msg.addItemId(offer.itemId); + // TODO + //if (Item::items[offer.itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(offer.amount); + msg.add(offer.price); + } + + writeToOutputBuffer(msg); +} + +void ProtocolGame::sendMarketBrowseOwnHistory(const HistoryMarketOfferList& buyOffers, const HistoryMarketOfferList& sellOffers) +{ + uint32_t i = 0; + std::map counterMap; + uint32_t buyOffersToSend = std::min(buyOffers.size(), 810 + std::max(0, 810 - sellOffers.size())); + uint32_t sellOffersToSend = std::min(sellOffers.size(), 810 + std::max(0, 810 - buyOffers.size())); + + NetworkMessage msg; + msg.addByte(0xF9); + msg.addByte(MARKETREQUEST_OWN_HISTORY); + + msg.add(buyOffersToSend); + for (auto it = buyOffers.begin(); i < buyOffersToSend; ++it, ++i) { + msg.add(it->timestamp); + msg.add(counterMap[it->timestamp]++); + msg.addItemId(it->itemId); + // TODO + //if (Item::items[it->itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(it->amount); + msg.add(it->price); + msg.addByte(it->state); + } + + counterMap.clear(); + i = 0; + + msg.add(sellOffersToSend); + for (auto it = sellOffers.begin(); i < sellOffersToSend; ++it, ++i) { + msg.add(it->timestamp); + msg.add(counterMap[it->timestamp]++); + msg.addItemId(it->itemId); + // TODO + //if (Item::items[it->itemId].classification > 0) { + // msg.addByte(0); + //} + msg.add(it->amount); + msg.add(it->price); + msg.addByte(it->state); + } + + writeToOutputBuffer(msg); +} + void ProtocolGame::sendQuestLog() { NetworkMessage msg; diff --git a/src/protocolgame.h b/src/protocolgame.h index 03a2baa..c03bfbd 100644 --- a/src/protocolgame.h +++ b/src/protocolgame.h @@ -115,6 +115,13 @@ class ProtocolGame final : public Protocol void parseQuestLine(NetworkMessage& msg); + //market methods + void parseMarketLeave(); + void parseMarketBrowse(NetworkMessage& msg); + void parseMarketCreateOffer(NetworkMessage& msg); + void parseMarketCancelOffer(NetworkMessage& msg); + void parseMarketAcceptOffer(NetworkMessage& msg); + void parseInviteToParty(NetworkMessage& msg); void parseJoinParty(NetworkMessage& msg); void parseRevokePartyInvite(NetworkMessage& msg); @@ -160,6 +167,13 @@ class ProtocolGame final : public Protocol void sendCreatureTurn(const Creature* creature, uint32_t stackpos); void sendCreatureSay(const Creature* creature, SpeakClasses type, const std::string& text, const Position* pos = nullptr); + void sendMarketEnter(uint32_t depotId); + void sendMarketLeave(); + void sendMarketBrowseItem(uint16_t itemId, const MarketOfferList& buyOffers, const MarketOfferList& sellOffers); + void sendMarketAcceptOffer(const MarketOfferEx& offer); + void sendMarketBrowseOwnOffers(const MarketOfferList& buyOffers, const MarketOfferList& sellOffers); + void sendMarketCancelOffer(const MarketOfferEx& offer); + void sendMarketBrowseOwnHistory(const HistoryMarketOfferList& buyOffers, const HistoryMarketOfferList& sellOffers); void sendQuestLog(); void sendQuestLine(const Quest* quest); diff --git a/src/storeinbox.cpp b/src/storeinbox.cpp new file mode 100644 index 0000000..33e9a4b --- /dev/null +++ b/src/storeinbox.cpp @@ -0,0 +1,51 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#include "otpch.h" + +#include "storeinbox.h" + +StoreInbox::StoreInbox(uint16_t type) : Container(type, 20, true, true) {} + +ReturnValue StoreInbox::queryAdd(int32_t, const Thing& thing, uint32_t, uint32_t flags, Creature*) const +{ + const Item* item = thing.getItem(); + if (!item) { + return RETURNVALUE_NOTPOSSIBLE; + } + + if (item == this) { + return RETURNVALUE_THISISIMPOSSIBLE; + } + + if (!item->isPickupable()) { + return RETURNVALUE_CANNOTPICKUP; + } + + if (!hasBitSet(FLAG_NOLIMIT, flags)) { + if (!item->isStoreItem()) { + return RETURNVALUE_CANNOTMOVEITEMISNOTSTOREITEM; + } + + const Container* container = item->getContainer(); + if (container && !container->empty()) { + return RETURNVALUE_ITEMCANNOTBEMOVEDTHERE; + } + } + + return RETURNVALUE_NOERROR; +} + +void StoreInbox::postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t) +{ + if (parent) { + parent->postAddNotification(thing, oldParent, index, LINK_TOPPARENT); + } +} + +void StoreInbox::postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t) +{ + if (parent) { + parent->postRemoveNotification(thing, newParent, index, LINK_TOPPARENT); + } +} diff --git a/src/storeinbox.h b/src/storeinbox.h new file mode 100644 index 0000000..5d8efc4 --- /dev/null +++ b/src/storeinbox.h @@ -0,0 +1,33 @@ +// Copyright 2022 The Forgotten Server Authors. All rights reserved. +// Use of this source code is governed by the GPL-2.0 License that can be found in the LICENSE file. + +#ifndef FS_STOREINBOX_H +#define FS_STOREINBOX_H + +#include "container.h" + +class StoreInbox final : public Container +{ +public: + explicit StoreInbox(uint16_t type); + + StoreInbox* getStoreInbox() override { + return this; + } + const StoreInbox* getStoreInbox() const override { + return this; + } + + //cylinder implementations + ReturnValue queryAdd(int32_t index, const Thing& thing, uint32_t count, + uint32_t flags, Creature* actor = nullptr) const override; + + void postAddNotification(Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + void postRemoveNotification(Thing* thing, const Cylinder* newParent, int32_t index, cylinderlink_t link = LINK_OWNER) override; + + bool canRemove() const override { + return false; + } +}; + +#endif // FS_STOREINBOX_H diff --git a/src/tools.h b/src/tools.h index f4c71f2..134367d 100644 --- a/src/tools.h +++ b/src/tools.h @@ -48,7 +48,7 @@ typedef std::vector IntegerVec; StringVec explodeString(const std::string& inString, const std::string& separator, int32_t limit = -1); IntegerVec vectorAtoi(const StringVec& stringVector); -inline bool hasBitSet(uint32_t flag, uint32_t flags) { +constexpr bool hasBitSet(uint32_t flag, uint32_t flags) { return (flags & flag) != 0; } diff --git a/vc14/theforgottenserver.vcxproj b/vc14/theforgottenserver.vcxproj index b1c4e61..710214b 100644 --- a/vc14/theforgottenserver.vcxproj +++ b/vc14/theforgottenserver.vcxproj @@ -159,6 +159,7 @@ + @@ -168,6 +169,7 @@ + @@ -218,6 +220,7 @@ + @@ -240,6 +243,7 @@ + @@ -250,6 +254,7 @@ + @@ -297,6 +302,7 @@ +