From 8ef4716d7166889dc9612d7014036f4c1ec0279b Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Tue, 5 Jun 2012 13:59:32 -0300 Subject: [PATCH] some APi changes in Container --- src/otclient/core/container.cpp | 26 +++++++++++++------------- src/otclient/core/container.h | 18 +++++++++++------- src/otclient/core/game.cpp | 16 ++++++++-------- src/otclient/luafunctions.cpp | 7 +------ 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/otclient/core/container.cpp b/src/otclient/core/container.cpp index 7ccf084e..b71ac9d5 100644 --- a/src/otclient/core/container.cpp +++ b/src/otclient/core/container.cpp @@ -31,17 +31,24 @@ Container::Container() m_hasParent = false; } -void Container::open(const ContainerPtr& previousContainer) +ItemPtr Container::getItem(int slot) +{ + if(slot < 0 || slot >= (int)m_items.size()) + return nullptr; + return m_items[slot]; +} + +void Container::onOpen(const ContainerPtr& previousContainer) { callLuaField("onOpen", previousContainer); } -void Container::close() +void Container::onClose() { callLuaField("onClose"); } -void Container::addItem(const ItemPtr& item) +void Container::onAddItem(const ItemPtr& item) { m_items.push_front(item); updateItemsPositions(); @@ -49,14 +56,14 @@ void Container::addItem(const ItemPtr& item) callLuaField("onAddItem", 0, item); } -void Container::addItems(const std::vector& items) +void Container::onAddItems(const std::vector& items) { for(const ItemPtr& item : items) m_items.push_back(item); updateItemsPositions(); } -void Container::updateItem(int slot, const ItemPtr& item) +void Container::onUpdateItem(int slot, const ItemPtr& item) { if(slot < 0 || slot >= (int)m_items.size()) { g_logger.traceError("slot not found"); @@ -70,7 +77,7 @@ void Container::updateItem(int slot, const ItemPtr& item) callLuaField("onUpdateItem", slot, item, oldItem); } -void Container::removeItem(int slot) +void Container::onRemoveItem(int slot) { if(slot < 0 || slot >= (int)m_items.size()) { g_logger.traceError("slot not found"); @@ -85,13 +92,6 @@ void Container::removeItem(int slot) callLuaField("onRemoveItem", slot, item); } -ItemPtr Container::getItem(int slot) -{ - if(slot < 0 || slot >= (int)m_items.size()) - return nullptr; - return m_items[slot]; -} - void Container::updateItemsPositions() { for(int slot = 0; slot < (int)m_items.size(); ++slot) diff --git a/src/otclient/core/container.h b/src/otclient/core/container.h index 77bb655b..f63586d3 100644 --- a/src/otclient/core/container.h +++ b/src/otclient/core/container.h @@ -32,14 +32,8 @@ class Container : public LuaObject public: Container(); - void open(const ContainerPtr& previousContainer); - void close(); - - void addItem(const ItemPtr& item); - void addItems(const std::vector& items); - void updateItem(int slot, const ItemPtr& item); - void removeItem(int slot); ItemPtr getItem(int slot); + std::deque getItems() { return m_items; } Position getSlotPosition(int slot) { return Position(0xffff, m_id | 0x40, slot); } @@ -56,6 +50,16 @@ public: ItemPtr getContainerItem() { return m_containerItem; } bool hasParent() { return m_hasParent; } +protected: + void onOpen(const ContainerPtr& previousContainer); + void onClose(); + void onAddItem(const ItemPtr& item); + void onAddItems(const std::vector& items); + void onUpdateItem(int slot, const ItemPtr& item); + void onRemoveItem(int slot); + + friend class Game; + private: void updateItemsPositions(); diff --git a/src/otclient/core/game.cpp b/src/otclient/core/game.cpp index b12d0ad7..1da67f72 100644 --- a/src/otclient/core/game.cpp +++ b/src/otclient/core/game.cpp @@ -57,7 +57,7 @@ void Game::resetGameStates() for(auto& it : m_containers) { const ContainerPtr& container = it.second; if(container) - container->close(); + container->onClose(); } m_containers.clear(); m_vips.clear(); @@ -180,11 +180,11 @@ void Game::processOpenContainer(int containerId, const ItemPtr& containerItem, c container->setContainerItem(containerItem); container->setHasParent(hasParent); m_containers[containerId] = container; - container->addItems(items); + container->onAddItems(items); - container->open(previousContainer); + container->onOpen(previousContainer); if(previousContainer) - previousContainer->close(); + previousContainer->onClose(); } void Game::processCloseContainer(int containerId) @@ -196,7 +196,7 @@ void Game::processCloseContainer(int containerId) } m_containers[containerId] = nullptr; - container->close(); + container->onClose(); } void Game::processContainerAddItem(int containerId, const ItemPtr& item) @@ -207,7 +207,7 @@ void Game::processContainerAddItem(int containerId, const ItemPtr& item) return; } - container->addItem(item); + container->onAddItem(item); } void Game::processContainerUpdateItem(int containerId, int slot, const ItemPtr& item) @@ -218,7 +218,7 @@ void Game::processContainerUpdateItem(int containerId, int slot, const ItemPtr& return; } - container->updateItem(slot, item); + container->onUpdateItem(slot, item); } void Game::processContainerRemoveItem(int containerId, int slot) @@ -229,7 +229,7 @@ void Game::processContainerRemoveItem(int containerId, int slot) return; } - container->removeItem(slot); + container->onRemoveItem(slot); } void Game::processInventoryChange(int slot, const ItemPtr& item) diff --git a/src/otclient/luafunctions.cpp b/src/otclient/luafunctions.cpp index 8a9e034f..4505a37d 100644 --- a/src/otclient/luafunctions.cpp +++ b/src/otclient/luafunctions.cpp @@ -192,13 +192,8 @@ void OTClient::registerLuaFunctions() g_lua.registerClass(); g_lua.bindClassStaticFunction("create", []{ return ContainerPtr(new Container); }); - g_lua.bindClassMemberFunction("open", &Container::open); - g_lua.bindClassMemberFunction("close", &Container::close); - g_lua.bindClassMemberFunction("addItem", &Container::addItem); - g_lua.bindClassMemberFunction("addItems", &Container::addItems); - g_lua.bindClassMemberFunction("updateItem", &Container::updateItem); - g_lua.bindClassMemberFunction("removeItem", &Container::removeItem); g_lua.bindClassMemberFunction("getItem", &Container::getItem); + g_lua.bindClassMemberFunction("getItems", &Container::getItems); g_lua.bindClassMemberFunction("getSlotPosition", &Container::getSlotPosition); g_lua.bindClassMemberFunction("setId", &Container::setId); g_lua.bindClassMemberFunction("setCapacity", &Container::setCapacity);