From b812d60690ff6fbc9d9da788ea2182a8f2232b91 Mon Sep 17 00:00:00 2001 From: Henrique Santiago Date: Thu, 12 Jan 2012 17:25:58 -0200 Subject: [PATCH] init container --- modules/client_tibiafiles | 2 +- src/otclient/core/game.cpp | 8 ++++++ src/otclient/core/game.h | 1 + src/otclient/net/protocolgameparse.cpp | 40 +++++++++++++++----------- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/modules/client_tibiafiles b/modules/client_tibiafiles index 9beb17da..dd648e14 160000 --- a/modules/client_tibiafiles +++ b/modules/client_tibiafiles @@ -1 +1 @@ -Subproject commit 9beb17daaeb170c127c39c5a5e4feb9d95ebed92 +Subproject commit dd648e1431171bffe091b748744395780df7eba1 diff --git a/src/otclient/core/game.cpp b/src/otclient/core/game.cpp index 62f5607e..82dab455 100644 --- a/src/otclient/core/game.cpp +++ b/src/otclient/core/game.cpp @@ -122,6 +122,14 @@ void Game::processTextMessage(const std::string& type, const std::string& messag g_lua.callGlobalField("Game","onTextMessage", type, message); } +void Game::processContainerAddItem(int containerId, const ItemPtr& item) +{ + if(item) + item->setPos(Position(65535, containerId, 0)); + + g_lua.callGlobalField("Game", "onContainerAddItem", containerId, item); +} + void Game::processInventoryChange(int slot, const ItemPtr& item) { if(item) diff --git a/src/otclient/core/game.h b/src/otclient/core/game.h index 218de49b..3a9797ad 100644 --- a/src/otclient/core/game.h +++ b/src/otclient/core/game.h @@ -48,6 +48,7 @@ public: void processTextMessage(const std::string& type, const std::string& message); void processCreatureSpeak(const std::string& name, int level, const std::string& type, const std::string& message, int channelId, const Position& creaturePos); + void processContainerAddItem(int containerId, const ItemPtr& item); void processInventoryChange(int slot, const ItemPtr& item); void processCreatureMove(const CreaturePtr& creature, const Position& oldPos, const Position& newPos); void processAttackCancel(); diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index 9fcfe145..68ecbc0a 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -430,39 +430,47 @@ void ProtocolGame::parseCreatureMove(InputMessage& msg) void ProtocolGame::parseOpenContainer(InputMessage& msg) { - msg.getU8(); // cid - msg.getU16(); // itemid - msg.getString(); // name - msg.getU8(); // capacity - msg.getU8(); // hasParent - int size = msg.getU8(); // size + int containerId = msg.getU8(); + int itemId = msg.getU16(); + std::string name = msg.getString(); + int capacity = msg.getU8(); + bool hasParent = (msg.getU8() != 0); + int itemCount = msg.getU8(); - for(int i = 0; i < size; i++) - internalGetItem(msg); + g_lua.callGlobalField("Game", "onContainerOpen", containerId, itemId, name, capacity, hasParent); + + for(int i = 0; i < itemCount; i++) { + ItemPtr item = internalGetItem(msg); + g_lua.callGlobalField("Game", "onContainerAddItem", containerId, item); + } } void ProtocolGame::parseCloseContainer(InputMessage& msg) { - msg.getU8(); // cid + int containerId = msg.getU8(); + g_lua.callGlobalField("Game", "onContainerClose", containerId); } void ProtocolGame::parseContainerAddItem(InputMessage& msg) { - msg.getU8(); // cid - internalGetItem(msg); + int containerId = msg.getU8(); + ItemPtr item = internalGetItem(msg); + g_lua.callGlobalField("Game", "onContainerAddItem", containerId, item); } void ProtocolGame::parseContainerUpdateItem(InputMessage& msg) { - msg.getU8(); // cid - msg.getU8(); // slot - internalGetItem(msg); + int containerId = msg.getU8(); + int slot = msg.getU8(); + ItemPtr item = internalGetItem(msg); + g_lua.callGlobalField("Game", "onContainerUpdateItem", containerId, slot, item); } void ProtocolGame::parseContainerRemoveItem(InputMessage& msg) { - msg.getU8(); // cid - msg.getU8(); // slot + int containerId = msg.getU8(); + int slot = msg.getU8(); + g_lua.callGlobalField("Game", "onContainerUpdateItem", containerId, slot); } void ProtocolGame::parseAddInventoryItem(InputMessage& msg)