From 7290ec33346902e566ed74d5afbefd4888dc503d Mon Sep 17 00:00:00 2001 From: Joao Pasqualini Costa Date: Sun, 20 Oct 2013 20:21:20 -0200 Subject: [PATCH] Some work on container pagination Bind lua functions for containers Update onAddItem now it have the pagination slot Note: getSize as i see is equal to getItemsCount, but not sure thats why I've added ! --- src/client/container.cpp | 10 +++++++--- src/client/container.h | 12 ++++++++++-- src/client/game.cpp | 9 ++++----- src/client/game.h | 4 ++-- src/client/luafunctions.cpp | 8 ++++++-- src/client/protocolgameparse.cpp | 20 +++++++++++++------- 6 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/client/container.cpp b/src/client/container.cpp index e8abe0a7..dd43cf34 100644 --- a/src/client/container.cpp +++ b/src/client/container.cpp @@ -23,7 +23,7 @@ #include "container.h" #include "item.h" -Container::Container(int id, int capacity, const std::string& name, const ItemPtr& containerItem, bool hasParent) +Container::Container(int id, int capacity, const std::string& name, const ItemPtr& containerItem, bool hasParent, bool isUnlocked, bool hasPages, int containerSize, int firstIndex) { m_id = id; m_capacity = capacity; @@ -31,6 +31,10 @@ Container::Container(int id, int capacity, const std::string& name, const ItemPt m_containerItem = containerItem; m_hasParent = hasParent; m_closed = false; + m_unlocked = isUnlocked; + m_hasPages = hasPages; + m_size = containerSize; + m_firstIndex = firstIndex; } ItemPtr Container::getItem(int slot) @@ -51,12 +55,12 @@ void Container::onClose() callLuaField("onClose"); } -void Container::onAddItem(const ItemPtr& item) +void Container::onAddItem(const ItemPtr& item, int slot) { m_items.push_front(item); updateItemsPositions(); - callLuaField("onAddItem", 0, item); + callLuaField("onAddItem", slot, item); } ItemPtr Container::findItemById(uint itemId, int subType) diff --git a/src/client/container.h b/src/client/container.h index fa67c950..4631ba9e 100644 --- a/src/client/container.h +++ b/src/client/container.h @@ -32,7 +32,7 @@ class Container : public LuaObject { protected: - Container(int id, int capacity, const std::string& name, const ItemPtr& containerItem, bool hasParent); + Container(int id, int capacity, const std::string& name, const ItemPtr& containerItem, bool hasParent, bool isUnlocked, bool hasPages, int containerSize, int firstIndex); public: ItemPtr getItem(int slot); @@ -45,12 +45,16 @@ public: std::string getName() { return m_name; } bool hasParent() { return m_hasParent; } bool isClosed() { return m_closed; } + bool isUnlocked() { return m_unlocked; } + bool hasPages() { return m_hasPages; } + int getSize() { return m_size; } + int getFirstIndex() { return m_firstIndex; } ItemPtr findItemById(uint itemId, int subType); protected: void onOpen(const ContainerPtr& previousContainer); void onClose(); - void onAddItem(const ItemPtr& item); + void onAddItem(const ItemPtr& item, int slot); void onAddItems(const std::vector& items); void onUpdateItem(int slot, const ItemPtr& item); void onRemoveItem(int slot); @@ -66,6 +70,10 @@ private: std::string m_name; bool m_hasParent; bool m_closed; + bool m_unlocked; + bool m_hasPages; + int m_size; + int m_firstIndex; std::deque m_items; }; diff --git a/src/client/game.cpp b/src/client/game.cpp index 2a26c54b..cd5c649c 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -171,7 +171,6 @@ void Game::processEnterGame() g_lua.callGlobalField("g_game", "onEnterGame"); } - void Game::processGameStart() { m_online = true; @@ -274,10 +273,10 @@ void Game::processTalk(const std::string& name, int level, Otc::MessageMode mode g_lua.callGlobalField("g_game", "onTalk", name, level, mode, text, channelId, pos); } -void Game::processOpenContainer(int containerId, const ItemPtr& containerItem, const std::string& name, int capacity, bool hasParent, const std::vector& items) +void Game::processOpenContainer(int containerId, const ItemPtr& containerItem, const std::string& name, int capacity, bool hasParent, const std::vector& items, bool isUnlocked, bool hasPages, int containerSize, int firstIndex) { ContainerPtr previousContainer = getContainer(containerId); - ContainerPtr container = ContainerPtr(new Container(containerId, capacity, name, containerItem, hasParent)); + ContainerPtr container = ContainerPtr(new Container(containerId, capacity, name, containerItem, hasParent, isUnlocked, hasPages, containerSize, firstIndex)); m_containers[containerId] = container; container->onAddItems(items); @@ -302,7 +301,7 @@ void Game::processCloseContainer(int containerId) container->onClose(); } -void Game::processContainerAddItem(int containerId, const ItemPtr& item) +void Game::processContainerAddItem(int containerId, const ItemPtr& item, int slot) { ContainerPtr container = getContainer(containerId); if(!container) { @@ -310,7 +309,7 @@ void Game::processContainerAddItem(int containerId, const ItemPtr& item) return; } - container->onAddItem(item); + container->onAddItem(item, slot); } void Game::processContainerUpdateItem(int containerId, int slot, const ItemPtr& item) diff --git a/src/client/game.h b/src/client/game.h index 3fdf85fa..d6dc2d04 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -80,9 +80,9 @@ protected: void processTalk(const std::string& name, int level, Otc::MessageMode mode, const std::string& text, int channelId, const Position& pos); // container related - void processOpenContainer(int containerId, const ItemPtr& containerItem, const std::string& name, int capacity, bool hasParent, const std::vector& items); + void processOpenContainer(int containerId, const ItemPtr& containerItem, const std::string& name, int capacity, bool hasParent, const std::vector& items, bool isUnlocked, bool hasPages, int containerSize, int firstIndex); void processCloseContainer(int containerId); - void processContainerAddItem(int containerId, const ItemPtr& item); + void processContainerAddItem(int containerId, const ItemPtr& item, int slot); void processContainerUpdateItem(int containerId, int slot, const ItemPtr& item); void processContainerRemoveItem(int containerId, int slot); diff --git a/src/client/luafunctions.cpp b/src/client/luafunctions.cpp index 78b64f66..c0338d5e 100644 --- a/src/client/luafunctions.cpp +++ b/src/client/luafunctions.cpp @@ -68,7 +68,7 @@ void Client::registerLuaFunctions() g_lua.bindSingletonFunction("g_things", "findItemTypeByClientId", &ThingTypeManager::findItemTypeByClientId, &g_things); g_lua.bindSingletonFunction("g_things", "findItemTypeByName", &ThingTypeManager::findItemTypeByName, &g_things); g_lua.bindSingletonFunction("g_things", "findItemTypesByName", &ThingTypeManager::findItemTypesByName, &g_things); - g_lua.bindSingletonFunction("g_things", "findItemTypesByString", &ThingTypeManager::findItemTypesByString, &g_things); + g_lua.bindSingletonFunction("g_things", "findItemTypesByString", &ThingTypeManager::findItemTypesByString, &g_things); g_lua.bindSingletonFunction("g_things", "findItemTypeByCategory", &ThingTypeManager::findItemTypeByCategory, &g_things); g_lua.bindSingletonFunction("g_things", "findThingTypeByAttr", &ThingTypeManager::findThingTypeByAttr, &g_things); @@ -317,6 +317,10 @@ void Client::registerLuaFunctions() g_lua.bindClassMemberFunction("getContainerItem", &Container::getContainerItem); g_lua.bindClassMemberFunction("hasParent", &Container::hasParent); g_lua.bindClassMemberFunction("isClosed", &Container::isClosed); + g_lua.bindClassMemberFunction("isUnlocked", &Container::isUnlocked); + g_lua.bindClassMemberFunction("hasPages", &Container::hasPages); + g_lua.bindClassMemberFunction("getSize", &Container::getSize); + g_lua.bindClassMemberFunction("getFirstIndex", &Container::getFirstIndex); g_lua.registerClass(); g_lua.bindClassMemberFunction("setId", &Thing::setId); @@ -646,7 +650,7 @@ void Client::registerLuaFunctions() g_lua.bindClassMemberFunction("getMinZoom", &UIMinimap::getMinZoom); g_lua.bindClassMemberFunction("getMaxZoom", &UIMinimap::getMaxZoom); g_lua.bindClassMemberFunction("getZoom", &UIMinimap::getZoom); - g_lua.bindClassMemberFunction("getScale", &UIMinimap::getScale); + g_lua.bindClassMemberFunction("getScale", &UIMinimap::getScale); g_lua.bindClassMemberFunction("anchorPosition", &UIMinimap::anchorPosition); g_lua.bindClassMemberFunction("fillPosition", &UIMinimap::fillPosition); g_lua.bindClassMemberFunction("centerInPosition", &UIMinimap::centerInPosition); diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index 3a30e29f..9415e24b 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -620,11 +620,16 @@ void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg) int capacity = msg->getU8(); bool hasParent = (msg->getU8() != 0); + bool isUnlocked; + bool hasPages; + int containerSize; + int firstIndex; + if(g_game.getFeature(Otc::GameContainerPagination)) { - msg->getU8(); // drag and drop - msg->getU8(); // pagination - msg->getU16(); // container size - msg->getU16(); // first index + isUnlocked = (msg->getU8() != 0); // drag and drop + hasPages = (msg->getU8() != 0); // pagination + containerSize = msg->getU16(); // container size + firstIndex = msg->getU16(); // first index } int itemCount = msg->getU8(); @@ -633,7 +638,7 @@ void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg) for(int i = 0; i < itemCount; i++) items[i] = getItem(msg); - g_game.processOpenContainer(containerId, containerItem, name, capacity, hasParent, items); + g_game.processOpenContainer(containerId, containerItem, name, capacity, hasParent, items, isUnlocked, hasPages, containerSize, firstIndex); } void ProtocolGame::parseCloseContainer(const InputMessagePtr& msg) @@ -645,11 +650,12 @@ void ProtocolGame::parseCloseContainer(const InputMessagePtr& msg) void ProtocolGame::parseContainerAddItem(const InputMessagePtr& msg) { int containerId = msg->getU8(); + int slot = 0; if(g_game.getFeature(Otc::GameContainerPagination)) { - msg->getU16(); // slot + slot = msg->getU16(); // slot } ItemPtr item = getItem(msg); - g_game.processContainerAddItem(containerId, item); + g_game.processContainerAddItem(containerId, item, slot); } void ProtocolGame::parseContainerUpdateItem(const InputMessagePtr& msg)