inventory module
This commit is contained in:
parent
9c55f18186
commit
7487931b87
|
@ -72,6 +72,7 @@ SET(SOURCES
|
||||||
src/otclient/core/localplayer.cpp
|
src/otclient/core/localplayer.cpp
|
||||||
|
|
||||||
# otclient ui
|
# otclient ui
|
||||||
|
src/otclient/ui/uiitem.cpp
|
||||||
src/otclient/ui/uimap.cpp
|
src/otclient/ui/uimap.cpp
|
||||||
|
|
||||||
# otclient net
|
# otclient net
|
||||||
|
|
|
@ -13,5 +13,6 @@ Module
|
||||||
importStyles 'styles/lineedits.otui'
|
importStyles 'styles/lineedits.otui'
|
||||||
importStyles 'styles/windows.otui'
|
importStyles 'styles/windows.otui'
|
||||||
importStyles 'styles/listboxes.otui'
|
importStyles 'styles/listboxes.otui'
|
||||||
|
importStyles 'styles/items.otui'
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Item < UIItem
|
||||||
|
size: 34 34
|
||||||
|
item margin: 1
|
||||||
|
border-image:
|
||||||
|
source: /core_styles/images/panel_flat.png
|
||||||
|
border: 4
|
|
@ -19,7 +19,7 @@ MiniWindow < UIWindow
|
||||||
size: 192 200
|
size: 192 200
|
||||||
head height: 25
|
head height: 25
|
||||||
head text align: center
|
head text align: center
|
||||||
margin.top: 6
|
margin.top: 10
|
||||||
margin.left: 6
|
margin.left: 6
|
||||||
margin.right: 6
|
margin.right: 6
|
||||||
move policy: free updated
|
move policy: free updated
|
||||||
|
|
|
@ -21,7 +21,7 @@ ManaLabel < Label
|
||||||
UIWindow
|
UIWindow
|
||||||
id: healthManaPanel
|
id: healthManaPanel
|
||||||
width: 192
|
width: 192
|
||||||
margin.top: 6
|
margin.top: 10
|
||||||
margin.left: 6
|
margin.left: 6
|
||||||
margin.right: 6
|
margin.right: 6
|
||||||
move policy: free updated
|
move policy: free updated
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
Inventory = {}
|
||||||
|
|
||||||
|
-- private variables
|
||||||
|
local window = nil
|
||||||
|
|
||||||
|
local InventorySlotHead = 1
|
||||||
|
local InventorySlotNecklace = 2
|
||||||
|
local InventorySlotBackpack = 3
|
||||||
|
local InventorySlotArmor = 4
|
||||||
|
local InventorySlotRight = 5
|
||||||
|
local InventorySlotLeft = 6
|
||||||
|
local InventorySlotLegs = 7
|
||||||
|
local InventorySlotFeet = 8
|
||||||
|
local InventorySlotRing = 9
|
||||||
|
local InventorySlotAmmo = 10
|
||||||
|
|
||||||
|
-- public functions
|
||||||
|
function Inventory.create()
|
||||||
|
window = loadUI("/inventory/inventory.otui", Game.gameRightPanel)
|
||||||
|
|
||||||
|
local itemWidget = window:getChildById('feet')
|
||||||
|
window:setHeight(itemWidget:getPosition().y + itemWidget:getHeight() - window:getPosition().y)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inventory.destroy()
|
||||||
|
window:destroy()
|
||||||
|
window = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- hooked events
|
||||||
|
function Game.onInventoryChange(slot, item)
|
||||||
|
local slotId
|
||||||
|
if slot == InventorySlotHead then
|
||||||
|
slotId = 'head'
|
||||||
|
elseif slot == InventorySlotNecklace then
|
||||||
|
slotId = 'necklace'
|
||||||
|
elseif slot == InventorySlotBackpack then
|
||||||
|
slotId = 'backpack'
|
||||||
|
elseif slot == InventorySlotArmor then
|
||||||
|
slotId = 'armor'
|
||||||
|
elseif slot == InventorySlotRight then
|
||||||
|
slotId = 'right'
|
||||||
|
elseif slot == InventorySlotLeft then
|
||||||
|
slotId = 'left'
|
||||||
|
elseif slot == InventorySlotLegs then
|
||||||
|
slotId = 'legs'
|
||||||
|
elseif slot == InventorySlotFeet then
|
||||||
|
slotId = 'feet'
|
||||||
|
elseif slot == InventorySlotRing then
|
||||||
|
slotId = 'ring'
|
||||||
|
elseif slot == InventorySlotAmmo then
|
||||||
|
slotId = 'ammo'
|
||||||
|
end
|
||||||
|
|
||||||
|
local itemWidget = window:getChildById(slotId)
|
||||||
|
itemWidget:setItem(item)
|
||||||
|
end
|
||||||
|
|
||||||
|
connect(Game, { onLogin = Inventory.create,
|
||||||
|
onLogout = Inventory.destroy })
|
|
@ -0,0 +1,14 @@
|
||||||
|
Module
|
||||||
|
name: equipments
|
||||||
|
description: View local player equipments window
|
||||||
|
author: OTClient team
|
||||||
|
website: https://github.com/edubart/otclient
|
||||||
|
autoLoad: true
|
||||||
|
dependencies:
|
||||||
|
- game
|
||||||
|
|
||||||
|
onLoad: |
|
||||||
|
require 'inventory'
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
UIWindow
|
||||||
|
width: 192
|
||||||
|
margin.top: 10
|
||||||
|
margin.left: 6
|
||||||
|
margin.right: 6
|
||||||
|
move policy: free updated
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: head
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: armor
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: legs
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: feet
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: necklace
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: head.left
|
||||||
|
margin.top: 15
|
||||||
|
margin.right: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: left
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: ring
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: backpack
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: head.right
|
||||||
|
margin.top: 15
|
||||||
|
margin.left: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: right
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
Item
|
||||||
|
id: ammo
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin.top: 10
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -259,6 +259,19 @@ namespace Otc
|
||||||
SpriteNoMask = 255
|
SpriteNoMask = 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum InventorySlots {
|
||||||
|
InventorySlotHead = 1,
|
||||||
|
InventorySlotNecklace,
|
||||||
|
InventorySlotBackpack,
|
||||||
|
InventorySlotArmor,
|
||||||
|
InventorySlotRight,
|
||||||
|
InventorySlotLeft,
|
||||||
|
InventorySlotLegs,
|
||||||
|
InventorySlotFeet,
|
||||||
|
InventorySlotRing,
|
||||||
|
InventorySlotAmmo
|
||||||
|
};
|
||||||
|
|
||||||
enum Statistic {
|
enum Statistic {
|
||||||
Health,
|
Health,
|
||||||
MaxHealth,
|
MaxHealth,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
#include "localplayer.h"
|
#include "localplayer.h"
|
||||||
#include <otclient/net/protocolgame.h>
|
#include <otclient/net/protocolgame.h>
|
||||||
|
#include <framework/core/eventdispatcher.h>
|
||||||
|
|
||||||
Game g_game;
|
Game g_game;
|
||||||
|
|
||||||
|
@ -102,6 +103,13 @@ void Game::processTextMessage(int type, const std::string& message)
|
||||||
g_lua.callGlobalField("Game","onTextMessage", type, message);
|
g_lua.callGlobalField("Game","onTextMessage", type, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::processInventoryChange(int slot, const ItemPtr& item)
|
||||||
|
{
|
||||||
|
g_dispatcher.addEvent([=] {
|
||||||
|
g_lua.callGlobalField("Game","onInventoryChange", slot, item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void Game::walk(Otc::Direction direction)
|
void Game::walk(Otc::Direction direction)
|
||||||
{
|
{
|
||||||
if(!m_online || !m_localPlayer->canWalk(direction))
|
if(!m_online || !m_localPlayer->canWalk(direction))
|
||||||
|
@ -158,9 +166,6 @@ void Game::turn(Otc::Direction direction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Game.talkChannel(1, 0, "lalala")
|
|
||||||
// TODO: MAKE SURE IT WAS AN USER EVENT AND NOT DIRECTLY FROM SCRIPT.
|
|
||||||
|
|
||||||
void Game::talkChannel(int channelType, int channelId, const std::string& message)
|
void Game::talkChannel(int channelType, int channelId, const std::string& message)
|
||||||
{
|
{
|
||||||
if(!m_online)
|
if(!m_online)
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include "declarations.h"
|
#include "declarations.h"
|
||||||
#include <otclient/net/declarations.h>
|
#include <otclient/net/declarations.h>
|
||||||
|
#include <otclient/core/item.h>
|
||||||
|
|
||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
|
@ -45,6 +46,7 @@ public:
|
||||||
void processLogout();
|
void processLogout();
|
||||||
|
|
||||||
void processTextMessage(int type, const std::string& message);
|
void processTextMessage(int type, const std::string& message);
|
||||||
|
void processInventoryChange(int slot, const ItemPtr& item);
|
||||||
|
|
||||||
void walk(Otc::Direction direction);
|
void walk(Otc::Direction direction);
|
||||||
void turn(Otc::Direction direction);
|
void turn(Otc::Direction direction);
|
||||||
|
|
|
@ -452,13 +452,15 @@ void ProtocolGame::parseContainerRemoveItem(InputMessage& msg)
|
||||||
|
|
||||||
void ProtocolGame::parseAddInventoryItem(InputMessage& msg)
|
void ProtocolGame::parseAddInventoryItem(InputMessage& msg)
|
||||||
{
|
{
|
||||||
msg.getU8(); // slot
|
uint8 slot = msg.getU8();
|
||||||
internalGetItem(msg, 0xFFFF);
|
ItemPtr item = internalGetItem(msg, 0xFFFF);
|
||||||
|
g_game.processInventoryChange(slot, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseRemoveInventoryItem(InputMessage& msg)
|
void ProtocolGame::parseRemoveInventoryItem(InputMessage& msg)
|
||||||
{
|
{
|
||||||
msg.getU8(); // slot
|
uint8 slot = msg.getU8();
|
||||||
|
g_game.processInventoryChange(slot, ItemPtr(nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseOpenShopWindow(InputMessage& msg)
|
void ProtocolGame::parseOpenShopWindow(InputMessage& msg)
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <otclient/core/spritemanager.h>
|
#include <otclient/core/spritemanager.h>
|
||||||
#include <otclient/net/protocollogin.h>
|
#include <otclient/net/protocollogin.h>
|
||||||
#include <otclient/net/protocolgame.h>
|
#include <otclient/net/protocolgame.h>
|
||||||
|
#include <otclient/ui/uiitem.h>
|
||||||
#include <otclient/ui/uimap.h>
|
#include <otclient/ui/uimap.h>
|
||||||
|
|
||||||
void OTClient::registerLuaFunctions()
|
void OTClient::registerLuaFunctions()
|
||||||
|
@ -65,6 +66,11 @@ void OTClient::registerLuaFunctions()
|
||||||
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
||||||
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
||||||
|
|
||||||
|
g_lua.registerClass<UIItem, UIWidget>();
|
||||||
|
g_lua.bindClassStaticFunction<UIItem>("create", &UIItem::create<UIItem>);
|
||||||
|
g_lua.bindClassMemberFunction<UIItem>("getItem", &UIItem::getItem);
|
||||||
|
g_lua.bindClassMemberFunction<UIItem>("setItem", &UIItem::setItem);
|
||||||
|
|
||||||
g_lua.registerClass<UIMap, UIWidget>();
|
g_lua.registerClass<UIMap, UIWidget>();
|
||||||
g_lua.bindClassStaticFunction<UIMap>("create", &UIWidget::create<UIMap>);
|
g_lua.bindClassStaticFunction<UIMap>("create", &UIWidget::create<UIMap>);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "uiitem.h"
|
||||||
|
#include <framework/otml/otml.h>
|
||||||
|
#include <framework/graphics/graphics.h>
|
||||||
|
|
||||||
|
void UIItem::setup()
|
||||||
|
{
|
||||||
|
UIWidget::setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIItem::render()
|
||||||
|
{
|
||||||
|
renderSelf();
|
||||||
|
|
||||||
|
if(m_item) {
|
||||||
|
g_graphics.bindColor(Fw::white);
|
||||||
|
m_item->draw(m_rect.topLeft() + m_itemMargin);
|
||||||
|
}
|
||||||
|
|
||||||
|
renderChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIItem::onStyleApply(const OTMLNodePtr& styleNode)
|
||||||
|
{
|
||||||
|
for(OTMLNodePtr node : styleNode->children()) {
|
||||||
|
if(node->tag() == "item margin")
|
||||||
|
m_itemMargin = node->value<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
UIWidget::onStyleApply(styleNode);
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UIITEM_H
|
||||||
|
#define UIITEM_H
|
||||||
|
|
||||||
|
#include "declarations.h"
|
||||||
|
#include <framework/ui/uiwidget.h>
|
||||||
|
#include <otclient/core/item.h>
|
||||||
|
|
||||||
|
class UIItem : public UIWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void setup();
|
||||||
|
void render();
|
||||||
|
|
||||||
|
void setItem(const ItemPtr& item) { m_item = item; }
|
||||||
|
ItemPtr getItem() { return m_item; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void onStyleApply(const OTMLNodePtr& styleNode);
|
||||||
|
|
||||||
|
private:
|
||||||
|
ItemPtr m_item;
|
||||||
|
int m_itemMargin;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue