implement grid layout

master
Eduardo Bart 12 years ago
parent 8db565f456
commit c1cf53829e

@ -10,3 +10,4 @@ hotkeys works while windows are locked, it shouldnt
some animated hits are displayed as 2 hits instead of one
numpad on windows doesn't work correctly
skulls is rendering outside map bounds
these are some issues when skill progressbar is 0% or 100%

@ -54,7 +54,6 @@ Low priority TODO
== UI
[bart] fix massive hotkeys when holding down a key
[bart] grid layout
[bart] horizontal box layout
[bart] move layout proprieties to widget style
[bart] multiline text editor widget

@ -189,8 +189,9 @@ SET(framework_SOURCES ${framework_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/ui/uiwidgettext.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uiwidgetbasestyle.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uilineedit.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uianchorlayout.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uiverticallayout.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uigridlayout.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uianchorlayout.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uilayout.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uiframecounter.cpp
${CMAKE_CURRENT_LIST_DIR}/ui/uitranslator.cpp

@ -281,6 +281,17 @@ void Application::registerLuaFunctions()
g_lua.bindClassStaticFunction<UIVerticalLayout>("create", [](UIWidgetPtr parent){ return UIVerticalLayoutPtr(new UIVerticalLayout(parent)); } );
g_lua.bindClassMemberFunction<UIVerticalLayout>("setFitParent", &UIVerticalLayout::setFitParent);
// UIGridLayout
g_lua.registerClass<UIGridLayout, UILayout>();
g_lua.bindClassStaticFunction<UIGridLayout>("create", [](UIWidgetPtr parent){ return UIGridLayoutPtr(new UIGridLayout(parent)); });
g_lua.bindClassMemberFunction<UIGridLayout>("setCellSize", &UIGridLayout::setCellSize);
g_lua.bindClassMemberFunction<UIGridLayout>("setCellWidth", &UIGridLayout::setCellWidth);
g_lua.bindClassMemberFunction<UIGridLayout>("setCellHeight", &UIGridLayout::setCellHeight);
g_lua.bindClassMemberFunction<UIGridLayout>("setCellSpacing", &UIGridLayout::setCellSpacing);
g_lua.bindClassMemberFunction<UIGridLayout>("setNumColumns", &UIGridLayout::setNumColumns);
g_lua.bindClassMemberFunction<UIGridLayout>("setNumLines", &UIGridLayout::setNumLines);
g_lua.bindClassMemberFunction<UIGridLayout>("asUIGridLayout", &UIGridLayout::asUIGridLayout);
// UIAnchorLayout
g_lua.registerClass<UIAnchorLayout, UILayout>();
g_lua.bindClassStaticFunction<UIAnchorLayout>("create", [](UIWidgetPtr parent){ return UIAnchorLayoutPtr(new UIAnchorLayout(parent)); } );

@ -31,6 +31,7 @@ class UILineEdit;
class UIFrameCounter;
class UILayout;
class UIVerticalLayout;
class UIGridLayout;
class UIAnchorLayout;
typedef std::shared_ptr<UIWidget> UIWidgetPtr;
@ -40,6 +41,7 @@ typedef std::shared_ptr<UILineEdit> UILineEditPtr;
typedef std::shared_ptr<UIFrameCounter> UIFrameCounterPtr;
typedef std::shared_ptr<UILayout> UILayoutPtr;
typedef std::shared_ptr<UIVerticalLayout> UIVerticalLayoutPtr;
typedef std::shared_ptr<UIGridLayout> UIGridLayoutPtr;
typedef std::shared_ptr<UIAnchorLayout> UIAnchorLayoutPtr;
typedef std::deque<UIWidgetPtr> UIWidgetList;

@ -29,6 +29,7 @@
#include "uiframecounter.h"
#include "uilayout.h"
#include "uiverticallayout.h"
#include "uigridlayout.h"
#include "uianchorlayout.h"
#endif

@ -0,0 +1,91 @@
/*
* Copyright (c) 2010-2012 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 "uigridlayout.h"
#include "uiwidget.h"
UIGridLayout::UIGridLayout(UIWidgetPtr parentWidget): UILayout(parentWidget)
{
m_cellSize = Size(16,16);
m_cellSpacing = 0;
m_numColumns = 1;
m_numLines = 1;
}
void UIGridLayout::applyStyle(const OTMLNodePtr& styleNode)
{
UILayout::applyStyle(styleNode);
for(const OTMLNodePtr& node : styleNode->children()) {
if(node->tag() == "cell-size")
setCellSize(node->value<Size>());
else if(node->tag() == "cell-width")
setCellWidth(node->value<int>());
else if(node->tag() == "cell-height")
setCellHeight(node->value<int>());
else if(node->tag() == "cell-spacing")
setCellSpacing(node->value<int>());
else if(node->tag() == "num-columns")
setNumColumns(node->value<int>());
else if(node->tag() == "num-lines")
setNumLines(node->value<int>());
}
}
void UIGridLayout::removeWidget(const UIWidgetPtr& widget)
{
update();
}
void UIGridLayout::addWidget(const UIWidgetPtr& widget)
{
update();
}
void UIGridLayout::internalUpdate()
{
UIWidgetPtr parentWidget = getParentWidget();
UIWidgetList widgets = parentWidget->getChildren();
Rect childrenRect = parentWidget->getChildrenRect();
Point topLeft = childrenRect.topLeft();
int index = 0;
for(const UIWidgetPtr& widget : widgets) {
if(!widget->isExplicitlyVisible())
continue;
int line = index / m_numLines;
int column = index % m_numLines;
Point virtualPos = Point(column * (m_cellSize.width() + m_cellSpacing), line * (m_cellSize.height() + m_cellSpacing));
Point pos = topLeft + virtualPos;
widget->setRect(Rect(pos, m_cellSize));
index++;
if(index >= m_numColumns * m_numLines)
break;
}
}

@ -0,0 +1,57 @@
/*
* Copyright (c) 2010-2012 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 UIGRIDLAYOUT_H
#define UIGRIDLAYOUT_H
#include <framework/ui/uilayout.h>
class UIGridLayout : public UILayout
{
public:
UIGridLayout(UIWidgetPtr parentWidget);
void applyStyle(const OTMLNodePtr& styleNode);
void removeWidget(const UIWidgetPtr& widget);
void addWidget(const UIWidgetPtr& widget);
void setCellSize(const Size& size) { m_cellSize = size; update(); }
void setCellWidth(int width) { m_cellSize.setWidth(width); update(); }
void setCellHeight(int height) { m_cellSize.setHeight(height); update(); }
void setCellSpacing(int spacing) { m_cellSpacing = spacing; update(); }
void setNumColumns(int columns) { m_numColumns = columns; update(); }
void setNumLines(int lines) { m_numLines = lines; update(); }
virtual UIGridLayoutPtr asUIGridLayout() { return nullptr; }
protected:
void internalUpdate();
private:
Size m_cellSize;
int m_cellSpacing;
int m_numColumns;
int m_numLines;
};
#endif

@ -25,7 +25,7 @@
#include "declarations.h"
#include <framework/luascript/luaobject.h>
#include <framework/otml/declarations.h>
#include <framework/otml/otml.h>
class UILayout : public LuaObject
{
@ -46,11 +46,11 @@ public:
bool isUpdateDisabled() { return m_updateDisabled; }
bool isUpdating() { return m_updating; }
virtual bool needsUpdatesOnChildChange() { return false; }
UILayoutPtr asUILayout() { return std::static_pointer_cast<UILayout>(shared_from_this()); }
virtual UIAnchorLayoutPtr asUIAnchorLayout() { return nullptr; }
virtual UIVerticalLayoutPtr asUIVerticalLayout() { return nullptr; }
virtual UIGridLayoutPtr asUIGridLayout() { return nullptr; }
protected:
virtual void internalUpdate() = 0;

@ -0,0 +1,24 @@
/*
* Copyright (c) 2010-2012 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 "uirichtext.h"

@ -0,0 +1,33 @@
/*
* Copyright (c) 2010-2012 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 UIRICHTEXT_H
#define UIRICHTEXT_H
#include <framework/ui/uiwidget.h>
class UIRichText : public UIWidget
{
};
#endif // UIRICHTEXT_H

@ -22,7 +22,6 @@
#include "uiverticallayout.h"
#include "uiwidget.h"
#include <framework/otml/otml.h>
#include <framework/core/eventdispatcher.h>
UIVerticalLayout::UIVerticalLayout(UIWidgetPtr parentWidget)
@ -45,35 +44,6 @@ void UIVerticalLayout::applyStyle(const OTMLNodePtr& styleNode)
}
}
void UIVerticalLayout::addWidget(const UIWidgetPtr& widget)
{
update();
}
void UIVerticalLayout::removeWidget(const UIWidgetPtr& widget)
{
update();
}
void UIVerticalLayout::setAlignBottom(bool aliginBottom)
{
m_alignBottom = aliginBottom;
update();
}
void UIVerticalLayout::setSpacing(int spacing)
{
m_spacing = spacing;
update();
}
void UIVerticalLayout::setFitParent(bool fitParent)
{
m_fitParent = fitParent;
update();
}
void UIVerticalLayout::internalUpdate()
{
UIWidgetPtr parentWidget = getParentWidget();

@ -31,14 +31,12 @@ public:
UIVerticalLayout(UIWidgetPtr parentWidget);
void applyStyle(const OTMLNodePtr& styleNode);
void addWidget(const UIWidgetPtr& widget);
void removeWidget(const UIWidgetPtr& widget);
void addWidget(const UIWidgetPtr& widget) { update(); }
void removeWidget(const UIWidgetPtr& widget) { update(); }
void setAlignBottom(bool aliginBottom);
void setSpacing(int spacing);
void setFitParent(bool fitParent);
bool needsUpdatesOnChildChange() { return m_fitParent; }
void setAlignBottom(bool aliginBottom) { m_alignBottom = aliginBottom; update(); }
void setSpacing(int spacing) { m_spacing = spacing; update(); }
void setFitParent(bool fitParent) { m_fitParent = fitParent; update(); }
UIVerticalLayoutPtr asUIVerticalLayout() { return std::static_pointer_cast<UIVerticalLayout>(shared_from_this()); }

@ -364,8 +364,8 @@ void UIWidget::unlockChild(const UIWidgetPtr& child)
void UIWidget::applyStyle(const OTMLNodePtr& styleNode)
{
m_loadingStyle = true;
try {
m_loadingStyle = true;
onStyleApply(styleNode->tag(), styleNode);
callLuaField("onStyleApply", styleNode->tag(), styleNode);
@ -377,10 +377,10 @@ void UIWidget::applyStyle(const OTMLNodePtr& styleNode)
}
m_firstOnStyle = false;
m_loadingStyle = false;
} catch(Exception& e) {
logError("Failed to apply style to widget '", m_id, "' style: ", e.what());
}
m_loadingStyle = false;
}
void UIWidget::addAnchor(Fw::AnchorEdge anchoredEdge, const std::string& hookedWidgetId, Fw::AnchorEdge hookedEdge)
{

@ -21,8 +21,9 @@
*/
#include "uiwidget.h"
#include "uianchorlayout.h"
#include "uiverticallayout.h"
#include "uigridlayout.h"
#include "uianchorlayout.h"
#include "uitranslator.h"
#include <framework/graphics/painter.h>
@ -233,6 +234,8 @@ void UIWidget::parseBaseStyle(const OTMLNodePtr& styleNode)
UILayoutPtr layout;
if(layoutType == "verticalBox")
layout = UIVerticalLayoutPtr(new UIVerticalLayout(asUIWidget()));
else if(layoutType == "grid")
layout = UIGridLayoutPtr(new UIGridLayout(asUIWidget()));
else if(layoutType == "anchor")
layout = UIAnchorLayoutPtr(new UIAnchorLayout(asUIWidget()));
else

@ -31,7 +31,7 @@ class Item : public Thing
public:
Item();
static ItemPtr create(int id = 0);
static ItemPtr create(int id);
enum {
TICKS_PER_FRAME = 500

@ -308,7 +308,7 @@ namespace Proto {
case Proto::SpeakYell:
return "yell";
case Proto::SpeakMonsterSay:
return "monsterSay";
return "monsterSay";
case Proto::SpeakMonsterYell:
return "monsterYell";
case Proto::SpeakPrivateNpcToPlayer:

@ -60,18 +60,18 @@ public:
void sendPlayerPurchase(int thingId, int count, int amount, bool ignoreCapacity, bool buyWithBackpack);
void sendPlayerSale(int thingId, int count, int amount, bool ignoreEquipped);
void sendCloseShop();
void sendRequestTrade(const Position& pos, int thingId, int stackpos, int playerId);
void sendRequestTrade(const Position& pos, int thingId, int stackpos, uint playerId);
void sendLookInTrade(bool counterOffer, int index);
void sendAcceptTrade();
void sendRejectTrade();
void sendUseItem(const Position& position, int itemId, int stackpos, int index);
void sendUseItemEx(const Position& fromPos, int fromThingId, int fromStackpos, const Position& toPos, int toThingId, int toStackpos);
void sendUseItemCreature(const Position& pos, int thingId, int stackpos, int creatureId);
void sendUseItemCreature(const Position& pos, int thingId, int stackpos, uint creatureId);
void sendRotateItem(const Position& pos, int thingId, int stackpos);
void sendCloseContainer(int containerId);
void sendUpContainer(int containerId);
void sendTextWindow(int windowTextId, const std::string& text);
void sendHouseWindow(int doorId, int id, const std::string& text);
void sendTextWindow(uint windowTextId, const std::string& text);
void sendHouseWindow(int doorId, uint id, const std::string& text);
void sendLookAt(const Position& position, int thingId, int stackpos);
void sendTalk(int channelType, int channelId, const std::string& receiver, const std::string& message);
void sendGetChannels();
@ -80,12 +80,12 @@ public:
void sendPrivateChannel(const std::string& receiver);
void sendCloseNpcChannel();
void sendFightTatics(Otc::FightModes fightMode, Otc::ChaseModes chaseMode, bool safeFight);
void sendAttack(int creatureId);
void sendFollow(int creatureId);
void sendInviteToParty(int creatureId);
void sendJoinParty(int creatureId);
void sendRevokeInvitation(int creatureId);
void sendPassLeadership(int creatureId);
void sendAttack(uint creatureId);
void sendFollow(uint creatureId);
void sendInviteToParty(uint creatureId);
void sendJoinParty(uint creatureId);
void sendRevokeInvitation(uint creatureId);
void sendPassLeadership(uint creatureId);
void sendLeaveParty();
void sendShareExperience(bool active, int unknown);
void sendOpenChannel();
@ -96,12 +96,12 @@ public:
void sendGetOutfit();
void sendSetOutfit(const Outfit& outfit);
void sendAddVip(const std::string& name);
void sendRemoveVip(int playerId);
void sendRemoveVip(uint playerId);
void sendGetQuestLog();
void sendGetQuestLine(int questId);
private:
void sendLoginPacket(uint32 timestamp, uint8 unknown);
void sendLoginPacket(uint timestamp, uint8 unknown);
// Parse Messages
void parseMessage(InputMessage& msg);
@ -173,13 +173,13 @@ private:
void parseQuestList(InputMessage& msg);
void parseQuestPartList(InputMessage& msg);
void setMapDescription(InputMessage& msg, int32 x, int32 y, int32 z, int32 width, int32 height);
void setFloorDescription(InputMessage& msg, int32 x, int32 y, int32 z, int32 width, int32 height, int32 offset, int32* skipTiles);
void setMapDescription(InputMessage& msg, int x, int y, int z, int width, int height);
void setFloorDescription(InputMessage& msg, int x, int y, int z, int width, int height, int offset, int* skipTiles);
void setTileDescription(InputMessage& msg, Position position);
Outfit internalGetOutfit(InputMessage& msg);
ThingPtr internalGetThing(InputMessage& msg);
ItemPtr internalGetItem(InputMessage& msg, uint16 id);
ItemPtr internalGetItem(InputMessage& msg, int id = 0);
void addPosition(OutputMessage& msg, const Position& position);
Position parsePosition(InputMessage& msg);

@ -37,7 +37,7 @@ void ProtocolGame::parseMessage(InputMessage& msg)
{
try {
while(!msg.eof()) {
uint8 opt = msg.getU8();
int opt = msg.getU8();
switch(opt) {
case Proto::GameServerInitGame:
@ -267,7 +267,7 @@ void ProtocolGame::parseMessage(InputMessage& msg)
void ProtocolGame::parsePlayerLogin(InputMessage& msg)
{
int playerId = msg.getU32();
uint playerId = msg.getU32();
int serverBeat = msg.getU16();
int playerCanReportBugs = msg.getU8();
@ -279,7 +279,7 @@ void ProtocolGame::parsePlayerLogin(InputMessage& msg)
void ProtocolGame::parseGMActions(InputMessage& msg)
{
for(uint8 i = 0; i < Proto::NumViolationReasons; ++i)
for(int i = 0; i < Proto::NumViolationReasons; ++i)
msg.getU8();
}
@ -359,7 +359,7 @@ void ProtocolGame::parseMoveWest(InputMessage& msg)
void ProtocolGame::parseUpdateTile(InputMessage& msg)
{
Position tilePos = parsePosition(msg);
uint16 thingId = msg.getU16(true);
int thingId = msg.getU16(true);
if(thingId == 0xFF01) {
msg.getU16();
} else {
@ -371,7 +371,7 @@ void ProtocolGame::parseUpdateTile(InputMessage& msg)
void ProtocolGame::parseTileAddThing(InputMessage& msg)
{
Position pos = parsePosition(msg);
uint8 stackPos = msg.getU8();
int stackPos = msg.getU8();
ThingPtr thing = internalGetThing(msg);
g_map.addThing(thing, pos, stackPos);
@ -380,13 +380,13 @@ void ProtocolGame::parseTileAddThing(InputMessage& msg)
void ProtocolGame::parseTileTransformThing(InputMessage& msg)
{
Position pos = parsePosition(msg);
uint8 stackPos = msg.getU8();
int stackPos = msg.getU8();
uint16 thingId = msg.getU16();
int thingId = msg.getU16();
assert(thingId != 0);
if(thingId == 0x0061 || thingId == 0x0062 || thingId == 0x0063) {
parseCreatureTurn(msg);
}
else {
} else {
ThingPtr thing = internalGetItem(msg, thingId);
g_map.removeThingByPos(pos, stackPos);
g_map.addThing(thing, pos, stackPos);
@ -396,7 +396,7 @@ void ProtocolGame::parseTileTransformThing(InputMessage& msg)
void ProtocolGame::parseTileRemoveThing(InputMessage& msg)
{
Position pos = parsePosition(msg);
uint8 stackPos = msg.getU8();
int stackPos = msg.getU8();
g_map.removeThingByPos(pos, stackPos);
}
@ -404,7 +404,7 @@ void ProtocolGame::parseTileRemoveThing(InputMessage& msg)
void ProtocolGame::parseCreatureMove(InputMessage& msg)
{
Position oldPos = parsePosition(msg);
uint8 oldStackpos = msg.getU8();
int oldStackpos = msg.getU8();
Position newPos = parsePosition(msg);
ThingPtr thing = g_map.getTile(oldPos)->getThing(oldStackpos);
@ -435,10 +435,10 @@ void ProtocolGame::parseOpenContainer(InputMessage& msg)
msg.getString(); // name
msg.getU8(); // capacity
msg.getU8(); // hasParent
uint8 size = msg.getU8(); // size
int size = msg.getU8(); // size
for(uint32 i = 0; i < size; i++)
internalGetItem(msg, 0xFFFF);
for(int i = 0; i < size; i++)
internalGetItem(msg);
}
void ProtocolGame::parseCloseContainer(InputMessage& msg)
@ -449,14 +449,14 @@ void ProtocolGame::parseCloseContainer(InputMessage& msg)
void ProtocolGame::parseContainerAddItem(InputMessage& msg)
{
msg.getU8(); // cid
internalGetItem(msg, 0xFFFF);
internalGetItem(msg);
}
void ProtocolGame::parseContainerUpdateItem(InputMessage& msg)
{
msg.getU8(); // cid
msg.getU8(); // slot
internalGetItem(msg, 0xFFFF);
internalGetItem(msg);
}
void ProtocolGame::parseContainerRemoveItem(InputMessage& msg)
@ -467,21 +467,21 @@ void ProtocolGame::parseContainerRemoveItem(InputMessage& msg)
void ProtocolGame::parseAddInventoryItem(InputMessage& msg)
{
uint8 slot = msg.getU8();
ItemPtr item = internalGetItem(msg, 0xFFFF);
int slot = msg.getU8();
ItemPtr item = internalGetItem(msg);
g_game.processInventoryChange(slot, item);
}
void ProtocolGame::parseRemoveInventoryItem(InputMessage& msg)
{
uint8 slot = msg.getU8();
int slot = msg.getU8();
g_game.processInventoryChange(slot, ItemPtr());
}
void ProtocolGame::parseOpenShopWindow(InputMessage& msg)
{
uint8 listCount = msg.getU8();
for(uint8 i = 0; i < listCount; ++i) {
int listCount = msg.getU8();
for(int i = 0; i < listCount; ++i) {
msg.getU16(); // item id
msg.getU8(); // runecharges
msg.getString(); // item name
@ -494,7 +494,7 @@ void ProtocolGame::parseOpenShopWindow(InputMessage& msg)
void ProtocolGame::parsePlayerCash(InputMessage& msg)
{
msg.getU32();
uint8 size = msg.getU8();
int size = msg.getU8();
for(int i = 0; i < size; i++) {
msg.getU16(); // itemid
@ -509,10 +509,10 @@ void ProtocolGame::parseCloseShopWindow(InputMessage&)
void ProtocolGame::parseSafeTradeRequest(InputMessage& msg)
{
msg.getString(); // name
uint8 count = msg.getU8();
int count = msg.getU8();
for(uint8 i = 0; i < count; i++)
internalGetItem(msg, 0xFFFF);
for(int i = 0; i < count; i++)
internalGetItem(msg);
}
void ProtocolGame::parseSafeTradeClose(InputMessage&)
@ -542,7 +542,7 @@ void ProtocolGame::parseMagicEffect(InputMessage& msg)
void ProtocolGame::parseAnimatedText(InputMessage& msg)
{
Position position = parsePosition(msg);
uint8 color = msg.getU8();
int color = msg.getU8();
std::string text = msg.getString();
AnimatedTextPtr animatedText = AnimatedTextPtr(new AnimatedText);
@ -566,8 +566,8 @@ void ProtocolGame::parseDistanceMissile(InputMessage& msg)
void ProtocolGame::parseCreatureSquare(InputMessage& msg)
{
uint32 id = msg.getU32();
uint8 color = msg.getU8();
uint id = msg.getU32();
int color = msg.getU8();
CreaturePtr creature = g_map.getCreatureById(id);
if(creature)
@ -576,8 +576,8 @@ void ProtocolGame::parseCreatureSquare(InputMessage& msg)
void ProtocolGame::parseCreatureHealth(InputMessage& msg)
{
uint32 id = msg.getU32();
uint8 healthPercent = msg.getU8();
uint id = msg.getU32();
int healthPercent = msg.getU8();
CreaturePtr creature = g_map.getCreatureById(id);
if(creature)
@ -586,7 +586,7 @@ void ProtocolGame::parseCreatureHealth(InputMessage& msg)
void ProtocolGame::parseCreatureLight(InputMessage& msg)
{
uint32 id = msg.getU32();
uint id = msg.getU32();
Light light;
light.intensity = msg.getU8();
@ -599,7 +599,7 @@ void ProtocolGame::parseCreatureLight(InputMessage& msg)
void ProtocolGame::parseCreatureOutfit(InputMessage& msg)
{
uint32 id = msg.getU32();
uint id = msg.getU32();
Outfit outfit = internalGetOutfit(msg);
CreaturePtr creature = g_map.getCreatureById(id);
@ -609,8 +609,8 @@ void ProtocolGame::parseCreatureOutfit(InputMessage& msg)
void ProtocolGame::parseCreatureSpeed(InputMessage& msg)
{
uint32 id = msg.getU32();
uint16 speed = msg.getU16();
uint id = msg.getU32();
int speed = msg.getU16();
CreaturePtr creature = g_map.getCreatureById(id);
if(creature)
@ -619,8 +619,8 @@ void ProtocolGame::parseCreatureSpeed(InputMessage& msg)
void ProtocolGame::parseCreatureSkulls(InputMessage& msg)
{
uint32 id = msg.getU32();
uint8 skull = msg.getU8();
uint id = msg.getU32();
int skull = msg.getU8();
CreaturePtr creature = g_map.getCreatureById(id);
if(creature)
@ -629,8 +629,8 @@ void ProtocolGame::parseCreatureSkulls(InputMessage& msg)
void ProtocolGame::parseCreatureShields(InputMessage& msg)
{
uint32 id = msg.getU32();
uint8 shield = msg.getU8();
uint id = msg.getU32();
int shield = msg.getU8();
CreaturePtr creature = g_map.getCreatureById(id);
if(creature)
@ -639,7 +639,7 @@ void ProtocolGame::parseCreatureShields(InputMessage& msg)
void ProtocolGame::parseCreatureTurn(InputMessage& msg)
{
uint32 id = msg.getU32();
uint id = msg.getU32();
Otc::Direction direction = (Otc::Direction)msg.getU8();
CreaturePtr creature = g_map.getCreatureById(id);
@ -744,7 +744,7 @@ void ProtocolGame::parsePlayerSkills(InputMessage& msg)
void ProtocolGame::parsePlayerIcons(InputMessage& msg)
{
uint16 icons = msg.getU16();
int icons = msg.getU16();
m_localPlayer->setIcons((Otc::PlayerIcons)icons);
}
@ -837,7 +837,7 @@ void ProtocolGame::parseClosePrivateChannel(InputMessage& msg)
void ProtocolGame::parseTextMessage(InputMessage& msg)
{
uint8 type = msg.getU8();
int type = msg.getU8();
std::string typeDesc = Proto::translateTextMessageType(type);
std::string message = msg.getString();
@ -857,9 +857,9 @@ void ProtocolGame::parseFloorChangeUp(InputMessage& msg)
Position pos = g_map.getCentralPosition();
pos.z--;
int32 skip = 0;
int skip = 0;
if(pos.z == 7)
for(int32 i = 5; i >= 0; i--)
for(int i = 5; i >= 0; i--)
setFloorDescription(msg, pos.x - 8, pos.y - 6, i, 18, 14, 8 - i, &skip);
else if(pos.z > 7)
setFloorDescription(msg, pos.x - 8, pos.y - 6, pos.z - 2, 18, 14, 3, &skip);
@ -913,7 +913,7 @@ void ProtocolGame::parseOutfitWindow(InputMessage& msg)
void ProtocolGame::parseVipState(InputMessage& msg)
{
int id = msg.getU32();
uint id = msg.getU32();
std::string name = msg.getString();
bool online = msg.getU8() != 0;
@ -922,14 +922,14 @@ void ProtocolGame::parseVipState(InputMessage& msg)
void ProtocolGame::parseVipLogin(InputMessage& msg)
{
int id = msg.getU32();
uint id = msg.getU32();
g_lua.callGlobalField("Game", "onVipStateChange", id, true);
}
void ProtocolGame::parseVipLogout(InputMessage& msg)
{
int id = msg.getU32();
uint id = msg.getU32();
g_lua.callGlobalField("Game", "onVipStateChange", id, false);
}
@ -948,8 +948,8 @@ void ProtocolGame::parseAddMarker(InputMessage& msg)
void ProtocolGame::parseQuestList(InputMessage& msg)
{
uint16 questsCount = msg.getU16();
for(uint16 i = 0; i < questsCount; i++) {
int questsCount = msg.getU16();
for(int i = 0; i < questsCount; i++) {
msg.getU16(); // quest id
msg.getString(); // quest name
msg.getU8(); // quest state
@ -959,8 +959,8 @@ void ProtocolGame::parseQuestList(InputMessage& msg)
void ProtocolGame::parseQuestPartList(InputMessage& msg)
{
msg.getU16(); // quest id
uint8 missionCount = msg.getU8();
for(uint8 i = 0; i < missionCount; i++) {
int missionCount = msg.getU8();
for(int i = 0; i < missionCount; i++) {
msg.getString(); // quest name
msg.getString(); // quest description
}
@ -987,12 +987,12 @@ void ProtocolGame::setMapDescription(InputMessage& msg, int32 x, int32 y, int32
void ProtocolGame::setFloorDescription(InputMessage& msg, int32 x, int32 y, int32 z, int32 width, int32 height, int32 offset, int32* skipTiles)
{
int32 skip = *skipTiles;
int skip = *skipTiles;
for(int32 nx = 0; nx < width; nx++) {
for(int32 ny = 0; ny < height; ny++) {
for(int nx = 0; nx < width; nx++) {
for(int ny = 0; ny < height; ny++) {
if(skip == 0) {
uint16 tileOpt = msg.getU16(true);
int tileOpt = msg.getU16(true);
if(tileOpt >= 0xFF00)
skip = (msg.getU16() & 0xFF);
else {
@ -1014,7 +1014,7 @@ void ProtocolGame::setTileDescription(InputMessage& msg, Position position)
int stackPos = 0;
while(true) {
uint16 inspectTileId = msg.getU16(true);
int inspectTileId = msg.getU16(true);
if(inspectTileId >= 0xFF00)
return;
else {
@ -1022,7 +1022,8 @@ void ProtocolGame::setTileDescription(InputMessage& msg, Position position)
logTraceError("too many things, stackpos=", stackPos, " pos=", position);
ThingPtr thing = internalGetThing(msg);
g_map.addThing(thing, position, 255);
if(thing)
g_map.addThing(thing, position, 255);
}
stackPos++;
}
@ -1032,14 +1033,14 @@ Outfit ProtocolGame::internalGetOutfit(InputMessage& msg)
{
Outfit outfit;
uint16 id = msg.getU16();
int id = msg.getU16();
if(id != 0) {
outfit.setCategory(ThingsType::Creature);
uint8 head = msg.getU8();
uint8 body = msg.getU8();
uint8 legs = msg.getU8();
uint8 feet = msg.getU8();
uint8 addons = msg.getU8();
int head = msg.getU8();
int body = msg.getU8();
int legs = msg.getU8();
int feet = msg.getU8();
int addons = msg.getU8();
outfit.setId(id);
outfit.setHead(head);
@ -1049,7 +1050,7 @@ Outfit ProtocolGame::internalGetOutfit(InputMessage& msg)
outfit.setAddons(addons);
}
else {
uint16 id = msg.getU16();
int id = msg.getU16();
if(id == 0) {
outfit.setCategory(ThingsType::Effect);
outfit.setId(13);
@ -1067,12 +1068,13 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
{
ThingPtr thing;
uint16 thingId = msg.getU16();
int thingId = msg.getU16();
assert(thingId != 0);
if(thingId == 0x0061 || thingId == 0x0062) { // add new creature
CreaturePtr creature;
if(thingId == 0x0062) { //creature is known
uint32 id = msg.getU32();
uint id = msg.getU32();
CreaturePtr knownCreature = g_map.getCreatureById(id);
if(knownCreature)
@ -1080,8 +1082,8 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
else
logTraceError("server says creature is known, but its not on creatures list");
} else if(thingId == 0x0061) { //creature is not known
uint32 removeId = msg.getU32();
uint32 id = msg.getU32();
uint removeId = msg.getU32();
uint id = msg.getU32();
std::string name = msg.getString();
if(name.length() > 0) // every creature name must start with a capital letter
@ -1112,11 +1114,11 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
light.intensity = msg.getU8();
light.color = msg.getU8();
uint16 speed = msg.getU16();
uint8 skull = msg.getU8();
uint8 shield = msg.getU8();
int speed = msg.getU16();
int skull = msg.getU8();
int shield = msg.getU8();
uint8 emblem = 0;
int emblem = 0;
if(thingId == 0x0061) // emblem is sent only in packet type 0x61
emblem = msg.getU8();
@ -1144,9 +1146,9 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
return thing;
}
ItemPtr ProtocolGame::internalGetItem(InputMessage& msg, uint16 id)
ItemPtr ProtocolGame::internalGetItem(InputMessage& msg, int id)
{
if(id == 0xFFFF)
if(id == 0)
id = msg.getU16();
ItemPtr item = Item::create(id);

@ -23,7 +23,7 @@
#include "protocolgame.h"
#include <framework/net/rsa.h>
void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown)
void ProtocolGame::sendLoginPacket(uint timestamp, uint8 unknown)
{
OutputMessage oMsg;
@ -217,7 +217,7 @@ void ProtocolGame::sendCloseShop()
send(oMsg);
}
void ProtocolGame::sendRequestTrade(const Position& pos, int thingId, int stackpos, int playerId)
void ProtocolGame::sendRequestTrade(const Position& pos, int thingId, int stackpos, uint playerId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientTradeObject);
@ -275,7 +275,7 @@ void ProtocolGame::sendUseItemEx(const Position& fromPos, int fromThingId, int f
send(oMsg);
}
void ProtocolGame::sendUseItemCreature(const Position& pos, int thingId, int stackpos, int creatureId)
void ProtocolGame::sendUseItemCreature(const Position& pos, int thingId, int stackpos, uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientUseOnCreature);
@ -312,7 +312,7 @@ void ProtocolGame::sendUpContainer(int containerId)
send(oMsg);
}
void ProtocolGame::sendTextWindow(int windowTextId, const std::string& text)
void ProtocolGame::sendTextWindow(uint windowTextId, const std::string& text)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientEditText);
@ -321,7 +321,7 @@ void ProtocolGame::sendTextWindow(int windowTextId, const std::string& text)
send(oMsg);
}
void ProtocolGame::sendHouseWindow(int doorId, int id, const std::string& text)
void ProtocolGame::sendHouseWindow(int doorId, uint id, const std::string& text)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientEditList);
@ -420,7 +420,7 @@ void ProtocolGame::sendFightTatics(Otc::FightModes fightMode, Otc::ChaseModes ch
send(oMsg);
}
void ProtocolGame::sendAttack(int creatureId)
void ProtocolGame::sendAttack(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientAttack);
@ -430,7 +430,7 @@ void ProtocolGame::sendAttack(int creatureId)
send(oMsg);
}
void ProtocolGame::sendFollow(int creatureId)
void ProtocolGame::sendFollow(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientFollow);
@ -438,7 +438,7 @@ void ProtocolGame::sendFollow(int creatureId)
send(oMsg);
}
void ProtocolGame::sendInviteToParty(int creatureId)
void ProtocolGame::sendInviteToParty(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientInviteToParty);
@ -446,7 +446,7 @@ void ProtocolGame::sendInviteToParty(int creatureId)
send(oMsg);
}
void ProtocolGame::sendJoinParty(int creatureId)
void ProtocolGame::sendJoinParty(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientJoinParty);
@ -454,7 +454,7 @@ void ProtocolGame::sendJoinParty(int creatureId)
send(oMsg);
}
void ProtocolGame::sendRevokeInvitation(int creatureId)
void ProtocolGame::sendRevokeInvitation(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientRevokeInvitation);
@ -462,7 +462,7 @@ void ProtocolGame::sendRevokeInvitation(int creatureId)
send(oMsg);
}
void ProtocolGame::sendPassLeadership(int creatureId)
void ProtocolGame::sendPassLeadership(uint creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientPassLeadership);
@ -555,7 +555,7 @@ void ProtocolGame::sendAddVip(const std::string& name)
send(oMsg);
}
void ProtocolGame::sendRemoveVip(int playerId)
void ProtocolGame::sendRemoveVip(uint playerId)
{
OutputMessage oMsg;
oMsg.addU8(Proto::ClientRemoveBuddy);

@ -55,7 +55,7 @@ void ProtocolLogin::onRecv(InputMessage& inputMessage)
{
try {
while(!inputMessage.eof()) {
uint8 opt = inputMessage.getU8();
int opt = inputMessage.getU8();
switch(opt) {
case Proto::LoginServerError:
parseError(inputMessage);

Loading…
Cancel
Save