2011-08-28 15:17:58 +02:00
|
|
|
/*
|
2012-01-02 17:58:37 +01:00
|
|
|
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
|
2011-08-28 15:17:58 +02:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2011-08-15 16:11:24 +02:00
|
|
|
#ifndef PROTOCOLGAME_H
|
|
|
|
#define PROTOCOLGAME_H
|
|
|
|
|
|
|
|
#include "declarations.h"
|
2011-08-29 16:14:21 +02:00
|
|
|
#include <otclient/core/declarations.h>
|
2011-08-15 16:11:24 +02:00
|
|
|
#include <framework/net/protocol.h>
|
2011-08-29 16:14:21 +02:00
|
|
|
#include <otclient/core/creature.h>
|
2011-08-15 16:11:24 +02:00
|
|
|
|
|
|
|
class ProtocolGame : public Protocol
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ProtocolGame();
|
|
|
|
|
|
|
|
public:
|
2011-08-26 20:00:22 +02:00
|
|
|
void login(const std::string& accountName, const std::string& accountPassword, const std::string& host, uint16 port, const std::string& characterName);
|
2011-08-15 16:11:24 +02:00
|
|
|
|
|
|
|
void onConnect();
|
|
|
|
void onRecv(InputMessage& inputMessage);
|
2011-08-16 02:30:31 +02:00
|
|
|
void onError(const boost::system::error_code& error);
|
2011-08-15 16:11:24 +02:00
|
|
|
|
|
|
|
void sendLogout();
|
|
|
|
void sendPing();
|
|
|
|
void sendWalkNorth();
|
|
|
|
void sendWalkEast();
|
|
|
|
void sendWalkSouth();
|
|
|
|
void sendWalkWest();
|
2012-01-02 23:23:54 +01:00
|
|
|
void sendStopAutowalk();
|
2011-08-29 07:54:28 +02:00
|
|
|
void sendWalkNorthEast();
|
|
|
|
void sendWalkSouthEast();
|
|
|
|
void sendWalkSouthWest();
|
|
|
|
void sendWalkNorthWest();
|
2011-08-17 06:45:55 +02:00
|
|
|
void sendTurnNorth();
|
|
|
|
void sendTurnEast();
|
|
|
|
void sendTurnSouth();
|
|
|
|
void sendTurnWest();
|
2012-01-02 23:23:54 +01:00
|
|
|
void sendThrow(const Position& fromPos, int thingId, int stackpos, const Position& toPos, int count);
|
|
|
|
void sendLookInShop(int thingId, int count);
|
|
|
|
void sendPlayerPurchase(int thingId, int count, int amount, bool ignoreCapacity, bool buyWithBackpack);
|
|
|
|
void sendPlayerSale(int thingId, int count, int amount, bool ignoreEquipped);
|
|
|
|
void sendCloseShop();
|
2012-01-12 20:20:18 +01:00
|
|
|
void sendRequestTrade(const Position& pos, int thingId, int stackpos, uint playerId);
|
2012-01-02 23:23:54 +01:00
|
|
|
void sendLookInTrade(bool counterOffer, int index);
|
|
|
|
void sendAcceptTrade();
|
|
|
|
void sendRejectTrade();
|
2011-11-10 07:53:16 +01:00
|
|
|
void sendUseItem(const Position& position, int itemId, int stackpos, int index);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendUseItemEx(const Position& fromPos, int fromThingId, int fromStackpos, const Position& toPos, int toThingId, int toStackpos);
|
2012-01-17 23:28:55 +01:00
|
|
|
void sendUseOnCreature(const Position& pos, int thingId, int stackpos, uint creatureId);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendRotateItem(const Position& pos, int thingId, int stackpos);
|
|
|
|
void sendCloseContainer(int containerId);
|
|
|
|
void sendUpContainer(int containerId);
|
2012-01-12 20:20:18 +01:00
|
|
|
void sendTextWindow(uint windowTextId, const std::string& text);
|
|
|
|
void sendHouseWindow(int doorId, uint id, const std::string& text);
|
2011-12-30 19:14:50 +01:00
|
|
|
void sendLookAt(const Position& position, int thingId, int stackpos);
|
2012-01-14 02:37:15 +01:00
|
|
|
void sendTalk(const std::string& speakTypeDesc, int channelId, const std::string& receiver, const std::string& message);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendGetChannels();
|
|
|
|
void sendJoinChannel(int channelId);
|
|
|
|
void sendLeaveChannel(int channelId);
|
|
|
|
void sendPrivateChannel(const std::string& receiver);
|
|
|
|
void sendCloseNpcChannel();
|
|
|
|
void sendFightTatics(Otc::FightModes fightMode, Otc::ChaseModes chaseMode, bool safeFight);
|
2012-01-12 20:20:18 +01:00
|
|
|
void sendAttack(uint creatureId);
|
|
|
|
void sendFollow(uint creatureId);
|
|
|
|
void sendInviteToParty(uint creatureId);
|
|
|
|
void sendJoinParty(uint creatureId);
|
|
|
|
void sendRevokeInvitation(uint creatureId);
|
|
|
|
void sendPassLeadership(uint creatureId);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendLeaveParty();
|
|
|
|
void sendShareExperience(bool active, int unknown);
|
2012-01-14 02:37:15 +01:00
|
|
|
void sendOpenChannel(int channelId);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendInviteToChannel(const std::string& name);
|
|
|
|
void sendExcludeFromChannel(const std::string& name);
|
|
|
|
void sendCancel();
|
|
|
|
void sendUpdateContainer();
|
2011-11-14 23:32:55 +01:00
|
|
|
void sendGetOutfit();
|
2011-11-14 23:47:36 +01:00
|
|
|
void sendSetOutfit(const Outfit& outfit);
|
2011-09-03 00:52:40 +02:00
|
|
|
void sendAddVip(const std::string& name);
|
2012-01-12 20:20:18 +01:00
|
|
|
void sendRemoveVip(uint playerId);
|
2012-01-03 14:13:54 +01:00
|
|
|
void sendGetQuestLog();
|
|
|
|
void sendGetQuestLine(int questId);
|
2011-08-15 16:11:24 +02:00
|
|
|
|
|
|
|
private:
|
2012-01-12 20:20:18 +01:00
|
|
|
void sendLoginPacket(uint timestamp, uint8 unknown);
|
2011-08-15 16:11:24 +02:00
|
|
|
|
|
|
|
// Parse Messages
|
|
|
|
void parseMessage(InputMessage& msg);
|
|
|
|
|
|
|
|
void parsePlayerLogin(InputMessage& msg);
|
|
|
|
void parseGMActions(InputMessage& msg);
|
2011-11-11 21:26:10 +01:00
|
|
|
void parseLoginError(InputMessage& msg);
|
2011-08-15 16:11:24 +02:00
|
|
|
void parseFYIMessage(InputMessage& msg);
|
|
|
|
void parseWaitList(InputMessage& msg);
|
|
|
|
void parsePing(InputMessage&);
|
2011-09-02 02:28:24 +02:00
|
|
|
void parseDeath(InputMessage& msg);
|
2011-08-15 16:11:24 +02:00
|
|
|
void parseCanReportBugs(InputMessage& msg);
|
|
|
|
void parseMapDescription(InputMessage& msg);
|
|
|
|
void parseMoveNorth(InputMessage& msg);
|
|
|
|
void parseMoveEast(InputMessage& msg);
|
|
|
|
void parseMoveSouth(InputMessage& msg);
|
|
|
|
void parseMoveWest(InputMessage& msg);
|
|
|
|
void parseUpdateTile(InputMessage& msg);
|
|
|
|
void parseTileAddThing(InputMessage& msg);
|
|
|
|
void parseTileTransformThing(InputMessage& msg);
|
|
|
|
void parseTileRemoveThing(InputMessage& msg);
|
|
|
|
void parseCreatureMove(InputMessage& msg);
|
|
|
|
void parseOpenContainer(InputMessage& msg);
|
|
|
|
void parseCloseContainer(InputMessage& msg);
|
|
|
|
void parseContainerAddItem(InputMessage& msg);
|
|
|
|
void parseContainerUpdateItem(InputMessage& msg);
|
|
|
|
void parseContainerRemoveItem(InputMessage& msg);
|
|
|
|
void parseAddInventoryItem(InputMessage& msg);
|
|
|
|
void parseRemoveInventoryItem(InputMessage& msg);
|
|
|
|
void parseOpenShopWindow(InputMessage& msg);
|
|
|
|
void parsePlayerCash(InputMessage& msg);
|
|
|
|
void parseCloseShopWindow(InputMessage&);
|
|
|
|
void parseWorldLight(InputMessage& msg);
|
|
|
|
void parseMagicEffect(InputMessage& msg);
|
|
|
|
void parseAnimatedText(InputMessage& msg);
|
2011-11-12 07:24:32 +01:00
|
|
|
void parseDistanceMissile(InputMessage& msg);
|
2011-08-15 16:11:24 +02:00
|
|
|
void parseCreatureSquare(InputMessage& msg);
|
|
|
|
void parseCreatureHealth(InputMessage& msg);
|
|
|
|
void parseCreatureLight(InputMessage& msg);
|
|
|
|
void parseCreatureOutfit(InputMessage& msg);
|
|
|
|
void parseCreatureSpeed(InputMessage& msg);
|
|
|
|
void parseCreatureSkulls(InputMessage& msg);
|
|
|
|
void parseCreatureShields(InputMessage& msg);
|
|
|
|
void parseCreatureTurn(InputMessage& msg);
|
|
|
|
void parseItemTextWindow(InputMessage& msg);
|
|
|
|
void parseHouseTextWindow(InputMessage& msg);
|
|
|
|
void parsePlayerStats(InputMessage& msg);
|
|
|
|
void parsePlayerSkills(InputMessage& msg);
|
|
|
|
void parsePlayerIcons(InputMessage& msg);
|
|
|
|
void parsePlayerCancelAttack(InputMessage& msg);
|
|
|
|
void parseCreatureSpeak(InputMessage& msg);
|
|
|
|
void parseChannelList(InputMessage& msg);
|
|
|
|
void parseOpenChannel(InputMessage& msg);
|
|
|
|
void parseOpenPrivatePlayerChat(InputMessage& msg);
|
|
|
|
void parseCreatePrivateChannel(InputMessage& msg);
|
|
|
|
void parseClosePrivateChannel(InputMessage& msg);
|
|
|
|
void parseSafeTradeRequest(InputMessage& msg);
|
|
|
|
void parseSafeTradeClose(InputMessage&);
|
|
|
|
void parseTextMessage(InputMessage& msg);
|
|
|
|
void parseCancelWalk(InputMessage& msg);
|
|
|
|
void parseFloorChangeUp(InputMessage& msg);
|
|
|
|
void parseFloorChangeDown(InputMessage& msg);
|
|
|
|
void parseOutfitWindow(InputMessage& msg);
|
|
|
|
void parseVipState(InputMessage& msg);
|
|
|
|
void parseVipLogin(InputMessage& msg);
|
|
|
|
void parseVipLogout(InputMessage& msg);
|
|
|
|
void parseShowTutorial(InputMessage& msg);
|
|
|
|
void parseAddMarker(InputMessage& msg);
|
|
|
|
void parseQuestList(InputMessage& msg);
|
|
|
|
void parseQuestPartList(InputMessage& msg);
|
|
|
|
|
2012-01-12 20:20:18 +01:00
|
|
|
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);
|
2011-08-15 16:11:24 +02:00
|
|
|
void setTileDescription(InputMessage& msg, Position position);
|
2011-08-15 23:02:52 +02:00
|
|
|
|
|
|
|
Outfit internalGetOutfit(InputMessage& msg);
|
2011-08-15 16:11:24 +02:00
|
|
|
ThingPtr internalGetThing(InputMessage& msg);
|
2012-01-12 20:20:18 +01:00
|
|
|
ItemPtr internalGetItem(InputMessage& msg, int id = 0);
|
2011-08-15 16:11:24 +02:00
|
|
|
|
2011-11-10 07:53:16 +01:00
|
|
|
void addPosition(OutputMessage& msg, const Position& position);
|
2011-08-15 16:11:24 +02:00
|
|
|
Position parsePosition(InputMessage& msg);
|
|
|
|
|
2011-08-15 23:02:52 +02:00
|
|
|
private:
|
2011-08-16 02:30:31 +02:00
|
|
|
bool m_waitingLoginPacket;
|
2011-08-15 23:02:52 +02:00
|
|
|
std::string m_accountName;
|
|
|
|
std::string m_accountPassword;
|
|
|
|
std::string m_characterName;
|
|
|
|
LocalPlayerPtr m_localPlayer;
|
2011-08-15 16:11:24 +02:00
|
|
|
};
|
|
|
|
|
2011-08-15 23:02:52 +02:00
|
|
|
#endif
|