summaryrefslogtreecommitdiff
path: root/src/net/eathena
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/eathena')
-rw-r--r--src/net/eathena/adminhandler.cpp379
-rw-r--r--src/net/eathena/adminhandler.h167
-rw-r--r--src/net/eathena/adminrecv.cpp81
-rw-r--r--src/net/eathena/adminrecv.h39
-rw-r--r--src/net/eathena/auctionhandler.cpp116
-rw-r--r--src/net/eathena/auctionhandler.h65
-rw-r--r--src/net/eathena/auctionrecv.cpp85
-rw-r--r--src/net/eathena/auctionrecv.h41
-rw-r--r--src/net/eathena/bankhandler.cpp86
-rw-r--r--src/net/eathena/bankhandler.h50
-rw-r--r--src/net/eathena/bankrecv.cpp65
-rw-r--r--src/net/eathena/bankrecv.h39
-rw-r--r--src/net/eathena/battlegroundhandler.cpp81
-rw-r--r--src/net/eathena/battlegroundhandler.h51
-rw-r--r--src/net/eathena/battlegroundrecv.cpp123
-rw-r--r--src/net/eathena/battlegroundrecv.h46
-rw-r--r--src/net/eathena/beinghandler.cpp109
-rw-r--r--src/net/eathena/beinghandler.h54
-rw-r--r--src/net/eathena/beingrecv.cpp2191
-rw-r--r--src/net/eathena/beingrecv.h136
-rw-r--r--src/net/eathena/buyingstorehandler.cpp112
-rw-r--r--src/net/eathena/buyingstorehandler.h54
-rw-r--r--src/net/eathena/buyingstorerecv.cpp238
-rw-r--r--src/net/eathena/buyingstorerecv.h55
-rw-r--r--src/net/eathena/buysellhandler.cpp77
-rw-r--r--src/net/eathena/buysellhandler.h59
-rw-r--r--src/net/eathena/buysellrecv.cpp141
-rw-r--r--src/net/eathena/buysellrecv.h41
-rw-r--r--src/net/eathena/cashshophandler.cpp160
-rw-r--r--src/net/eathena/cashshophandler.h57
-rw-r--r--src/net/eathena/cashshoprecv.cpp181
-rw-r--r--src/net/eathena/cashshoprecv.h45
-rw-r--r--src/net/eathena/charserverhandler.cpp248
-rw-r--r--src/net/eathena/charserverhandler.h88
-rw-r--r--src/net/eathena/charserverrecv.cpp570
-rw-r--r--src/net/eathena/charserverrecv.h68
-rw-r--r--src/net/eathena/chathandler.cpp338
-rw-r--r--src/net/eathena/chathandler.h103
-rw-r--r--src/net/eathena/chatrecv.cpp768
-rw-r--r--src/net/eathena/chatrecv.h78
-rw-r--r--src/net/eathena/elementalhandler.cpp39
-rw-r--r--src/net/eathena/elementalhandler.h40
-rw-r--r--src/net/eathena/elementalrecv.cpp73
-rw-r--r--src/net/eathena/elementalrecv.h38
-rw-r--r--src/net/eathena/familyhandler.cpp67
-rw-r--r--src/net/eathena/familyhandler.h44
-rw-r--r--src/net/eathena/familyrecv.cpp123
-rw-r--r--src/net/eathena/familyrecv.h45
-rw-r--r--src/net/eathena/friendshandler.cpp64
-rw-r--r--src/net/eathena/friendshandler.h49
-rw-r--r--src/net/eathena/friendsrecv.cpp76
-rw-r--r--src/net/eathena/friendsrecv.h41
-rw-r--r--src/net/eathena/gamehandler.cpp226
-rw-r--r--src/net/eathena/gamehandler.h60
-rw-r--r--src/net/eathena/gamerecv.cpp86
-rw-r--r--src/net/eathena/gamerecv.h42
-rw-r--r--src/net/eathena/generalhandler.cpp245
-rw-r--r--src/net/eathena/generalhandler.h134
-rw-r--r--src/net/eathena/generalrecv.cpp180
-rw-r--r--src/net/eathena/generalrecv.h40
-rw-r--r--src/net/eathena/guildhandler.cpp291
-rw-r--r--src/net/eathena/guildhandler.h104
-rw-r--r--src/net/eathena/guildrecv.cpp717
-rw-r--r--src/net/eathena/guildrecv.h77
-rw-r--r--src/net/eathena/homunculushandler.cpp141
-rw-r--r--src/net/eathena/homunculushandler.h59
-rw-r--r--src/net/eathena/homunculusrecv.cpp227
-rw-r--r--src/net/eathena/homunculusrecv.h42
-rw-r--r--src/net/eathena/inventoryhandler.cpp603
-rw-r--r--src/net/eathena/inventoryhandler.h97
-rw-r--r--src/net/eathena/inventoryrecv.cpp1441
-rw-r--r--src/net/eathena/inventoryrecv.h81
-rw-r--r--src/net/eathena/itemflags.h45
-rw-r--r--src/net/eathena/itemhandler.cpp35
-rw-r--r--src/net/eathena/itemhandler.h41
-rw-r--r--src/net/eathena/itemrecv.cpp178
-rw-r--r--src/net/eathena/itemrecv.h43
-rw-r--r--src/net/eathena/loginhandler.cpp167
-rw-r--r--src/net/eathena/loginhandler.h70
-rw-r--r--src/net/eathena/loginrecv.cpp294
-rw-r--r--src/net/eathena/loginrecv.h44
-rw-r--r--src/net/eathena/mail2handler.cpp285
-rw-r--r--src/net/eathena/mail2handler.h88
-rw-r--r--src/net/eathena/mail2recv.cpp526
-rw-r--r--src/net/eathena/mail2recv.h55
-rw-r--r--src/net/eathena/mailhandler.cpp109
-rw-r--r--src/net/eathena/mailhandler.h61
-rw-r--r--src/net/eathena/mailrecv.cpp251
-rw-r--r--src/net/eathena/mailrecv.h45
-rw-r--r--src/net/eathena/maphandler.cpp39
-rw-r--r--src/net/eathena/maphandler.h41
-rw-r--r--src/net/eathena/maprecv.cpp68
-rw-r--r--src/net/eathena/maprecv.h41
-rw-r--r--src/net/eathena/maptypeproperty2.h55
-rw-r--r--src/net/eathena/markethandler.cpp145
-rw-r--r--src/net/eathena/markethandler.h51
-rw-r--r--src/net/eathena/marketrecv.cpp108
-rw-r--r--src/net/eathena/marketrecv.h42
-rw-r--r--src/net/eathena/menu.cpp28
-rw-r--r--src/net/eathena/menu.h31
-rw-r--r--src/net/eathena/mercenaryhandler.cpp121
-rw-r--r--src/net/eathena/mercenaryhandler.h55
-rw-r--r--src/net/eathena/mercenaryrecv.cpp194
-rw-r--r--src/net/eathena/mercenaryrecv.h40
-rw-r--r--src/net/eathena/messagein.cpp178
-rw-r--r--src/net/eathena/messagein.h69
-rw-r--r--src/net/eathena/messageout.cpp150
-rw-r--r--src/net/eathena/messageout.h85
-rw-r--r--src/net/eathena/network.cpp255
-rw-r--r--src/net/eathena/network.h66
-rw-r--r--src/net/eathena/npchandler.cpp365
-rw-r--r--src/net/eathena/npchandler.h101
-rw-r--r--src/net/eathena/npcrecv.cpp132
-rw-r--r--src/net/eathena/npcrecv.h48
-rw-r--r--src/net/eathena/packetsin.inc972
-rw-r--r--src/net/eathena/packetsout.inc8044
-rw-r--r--src/net/eathena/partyhandler.cpp203
-rw-r--r--src/net/eathena/partyhandler.h69
-rw-r--r--src/net/eathena/partyrecv.cpp422
-rw-r--r--src/net/eathena/partyrecv.h54
-rw-r--r--src/net/eathena/pethandler.cpp126
-rw-r--r--src/net/eathena/pethandler.h64
-rw-r--r--src/net/eathena/petrecv.cpp181
-rw-r--r--src/net/eathena/petrecv.h43
-rw-r--r--src/net/eathena/playerhandler.cpp718
-rw-r--r--src/net/eathena/playerhandler.h82
-rw-r--r--src/net/eathena/playerrecv.cpp498
-rw-r--r--src/net/eathena/playerrecv.h60
-rw-r--r--src/net/eathena/protocolout.cpp32
-rw-r--r--src/net/eathena/protocolout.h40
-rw-r--r--src/net/eathena/questhandler.cpp50
-rw-r--r--src/net/eathena/questhandler.h44
-rw-r--r--src/net/eathena/questrecv.cpp205
-rw-r--r--src/net/eathena/questrecv.h45
-rw-r--r--src/net/eathena/recvpackets.inc32
-rw-r--r--src/net/eathena/roulettehandler.cpp39
-rw-r--r--src/net/eathena/roulettehandler.h40
-rw-r--r--src/net/eathena/rouletterecv.cpp79
-rw-r--r--src/net/eathena/rouletterecv.h40
-rw-r--r--src/net/eathena/searchstorehandler.cpp88
-rw-r--r--src/net/eathena/searchstorehandler.h53
-rw-r--r--src/net/eathena/searchstorerecv.cpp109
-rw-r--r--src/net/eathena/searchstorerecv.h40
-rw-r--r--src/net/eathena/serverfeatures.cpp153
-rw-r--r--src/net/eathena/serverfeatures.h86
-rw-r--r--src/net/eathena/skillhandler.cpp152
-rw-r--r--src/net/eathena/skillhandler.h70
-rw-r--r--src/net/eathena/skillrecv.cpp529
-rw-r--r--src/net/eathena/skillrecv.h56
-rw-r--r--src/net/eathena/sp.h271
-rw-r--r--src/net/eathena/sprite.h49
-rw-r--r--src/net/eathena/tradehandler.cpp107
-rw-r--r--src/net/eathena/tradehandler.h58
-rw-r--r--src/net/eathena/traderecv.cpp185
-rw-r--r--src/net/eathena/traderecv.h47
-rw-r--r--src/net/eathena/updateprotocol.cpp57
-rw-r--r--src/net/eathena/updateprotocol.h29
-rw-r--r--src/net/eathena/vendinghandler.cpp150
-rw-r--r--src/net/eathena/vendinghandler.h62
-rw-r--r--src/net/eathena/vendingrecv.cpp277
-rw-r--r--src/net/eathena/vendingrecv.h48
161 files changed, 0 insertions, 32780 deletions
diff --git a/src/net/eathena/adminhandler.cpp b/src/net/eathena/adminhandler.cpp
deleted file mode 100644
index 45cfb9ed5..000000000
--- a/src/net/eathena/adminhandler.cpp
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/adminhandler.h"
-
-#include "being/being.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/gmfunctions.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-std::string AdminHandler::mStatsName;
-
-AdminHandler::AdminHandler() :
- Ea::AdminHandler()
-{
- adminHandler = this;
-}
-
-AdminHandler::~AdminHandler()
-{
- adminHandler = nullptr;
-}
-
-void AdminHandler::announce(const std::string &text) const
-{
- createOutPacket(CMSG_ADMIN_ANNOUNCE);
- outMsg.writeInt16(CAST_S16(text.length() + 4), "len");
- outMsg.writeString(text, CAST_S32(text.length()), "message");
-}
-
-void AdminHandler::localAnnounce(const std::string &text) const
-{
- createOutPacket(CMSG_ADMIN_LOCAL_ANNOUNCE);
- outMsg.writeInt16(CAST_S16(text.length() + 4), "len");
- outMsg.writeString(text, CAST_S32(text.length()), "message");
-}
-
-void AdminHandler::hide(const bool h A_UNUSED) const
-{
- createOutPacket(CMSG_ADMIN_HIDE);
- outMsg.writeInt32(0, "unused");
-}
-
-void AdminHandler::kick(const BeingId playerId) const
-{
- createOutPacket(CMSG_ADMIN_KICK);
- outMsg.writeBeingId(playerId, "account id");
-}
-
-void AdminHandler::kickAll() const
-{
- createOutPacket(CMSG_ADMIN_KICK_ALL);
-}
-
-void AdminHandler::warp(const std::string &map, const int x, const int y) const
-{
- createOutPacket(CMSG_PLAYER_MAPMOVE);
- outMsg.writeString(map, 16, "map");
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(CAST_S16(y), "y");
-}
-
-void AdminHandler::resetStats() const
-{
- createOutPacket(CMSG_ADMIN_RESET_PLAYER);
- outMsg.writeInt16(0, "flag");
-}
-
-void AdminHandler::resetSkills() const
-{
- createOutPacket(CMSG_ADMIN_RESET_PLAYER);
- outMsg.writeInt16(1, "flag");
-}
-
-void AdminHandler::gotoName(const std::string &name) const
-{
- createOutPacket(CMSG_ADMIN_GOTO);
- outMsg.writeString(name, 24, "name");
-}
-
-void AdminHandler::recallName(const std::string &name) const
-{
- createOutPacket(CMSG_ADMIN_RECALL);
- outMsg.writeString(name, 24, "name");
-}
-
-void AdminHandler::mute(const Being *const being,
- const int type,
- const int limit) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_ADMIN_MUTE);
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt8(CAST_S8(type), "type");
- outMsg.writeInt16(CAST_S16(limit), "value");
-}
-
-void AdminHandler::muteName(const std::string &name) const
-{
- createOutPacket(CMSG_ADMIN_MUTE_NAME);
- outMsg.writeString(name, 24, "name");
-}
-
-void AdminHandler::requestLogin(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_ADMIN_ID_TO_LOGIN);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void AdminHandler::setTileType(const int x, const int y,
- const int type) const
-{
- createOutPacket(CMSG_ADMIN_SET_TILE_TYPE);
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(CAST_S16(y), "y");
- outMsg.writeInt16(CAST_S16(type), "type");
-}
-
-void AdminHandler::unequipAll(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_ADMIN_UNEQUIP_ALL);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void AdminHandler::requestStats(const std::string &name) const
-{
- mStatsName = name;
- createOutPacket(CMSG_ADMIN_REQUEST_STATS);
- outMsg.writeString(name, 24, "name");
-}
-
-void AdminHandler::monsterInfo(const std::string &name) const
-{
- Gm::runCommand("monsterinfo", name);
-}
-
-void AdminHandler::itemInfo(const std::string &name) const
-{
- Gm::runCommand("iteminfo", name);
-}
-
-void AdminHandler::whoDrops(const std::string &name) const
-{
- Gm::runCommand("whodrops", name);
-}
-
-void AdminHandler::mobSearch(const std::string &name) const
-{
- Gm::runCommand("mobsearch", name);
-}
-
-void AdminHandler::mobSpawnSearch(const std::string &name) const
-{
- Gm::runCommand("whereis", name);
-}
-
-void AdminHandler::playerGmCommands(const std::string &name) const
-{
- Gm::runCharCommand("commands", name);
-}
-
-void AdminHandler::playerCharGmCommands(const std::string &name) const
-{
- Gm::runCharCommand("charcommands", name);
-}
-
-void AdminHandler::showLevel(const std::string &name) const
-{
- Gm::runCharCommand("exp", name);
-}
-
-void AdminHandler::showStats(const std::string &name) const
-{
- Gm::runCharCommand("stats", name);
-}
-
-void AdminHandler::showStorageList(const std::string &name) const
-{
- Gm::runCharCommand("storagelist", name);
-}
-
-void AdminHandler::showCartList(const std::string &name) const
-{
- Gm::runCharCommand("cartlist", name);
-}
-
-void AdminHandler::showInventoryList(const std::string &name) const
-{
- Gm::runCharCommand("itemlist", name);
-}
-
-void AdminHandler::locatePlayer(const std::string &name) const
-{
- Gm::runCommand("where", name);
-}
-
-void AdminHandler::showAccountInfo(const std::string &name) const
-{
- Gm::runCommand("accinfo", name);
-}
-
-void AdminHandler::spawnSlave(const std::string &name) const
-{
- Gm::runCommand("summon", name);
-}
-
-void AdminHandler::spawnClone(const std::string &name) const
-{
- Gm::runCommand("clone", name);
-}
-
-void AdminHandler::spawnSlaveClone(const std::string &name) const
-{
- Gm::runCommand("slaveclone", name);
-}
-
-void AdminHandler::spawnEvilClone(const std::string &name) const
-{
- Gm::runCommand("evilclone", name);
-}
-
-void AdminHandler::savePosition(const std::string &name) const
-{
- Gm::runCharCommand("save", name);
-}
-
-void AdminHandler::loadPosition(const std::string &name) const
-{
- Gm::runCharCommand("load", name);
-}
-
-void AdminHandler::randomWarp(const std::string &name) const
-{
- Gm::runCharCommand("jump", name);
-}
-
-void AdminHandler::gotoNpc(const std::string &name) const
-{
- Gm::runCommand("tonpc", name);
-}
-
-void AdminHandler::killer(const std::string &name) const
-{
- Gm::runCharCommand("killer", name);
-}
-
-void AdminHandler::killable(const std::string &name) const
-{
- Gm::runCharCommand("killable", name);
-}
-
-void AdminHandler::heal(const std::string &name) const
-{
- Gm::runCharCommand("heal", name);
-}
-
-void AdminHandler::alive(const std::string &name) const
-{
- Gm::runCharCommand("alive", name);
-}
-
-void AdminHandler::disguise(const std::string &name) const
-{
- Gm::runCommand("disguise", name);
-}
-
-void AdminHandler::immortal(const std::string &name) const
-{
- Gm::runCharCommand("monsterignore", name);
-}
-
-void AdminHandler::hide(const std::string &name) const
-{
- Gm::runCharCommand("hide", name);
-}
-
-void AdminHandler::nuke(const std::string &name) const
-{
- Gm::runCommand("nuke", name);
-}
-
-void AdminHandler::kill(const std::string &name) const
-{
- Gm::runCharCommand("kill", name);
-}
-
-void AdminHandler::jail(const std::string &name) const
-{
- Gm::runCommand("jail", name);
-}
-
-void AdminHandler::unjail(const std::string &name) const
-{
- Gm::runCommand("unjail", name);
-}
-
-void AdminHandler::npcMove(const std::string &name,
- const int x,
- const int y) const
-{
- Gm::runCommand("npcmove",
- strprintf("%d %d %s",
- x,
- y,
- name.c_str()));
-}
-
-void AdminHandler::hideNpc(const std::string &name) const
-{
- Gm::runCommand("hidenpc", name);
-}
-
-void AdminHandler::showNpc(const std::string &name) const
-{
- Gm::runCommand("shownpc", name);
-}
-
-void AdminHandler::changePartyLeader(const std::string &name) const
-{
- Gm::runCommand("changeleader", name);
-}
-
-void AdminHandler::partyRecall(const std::string &name) const
-{
- Gm::runCommand("partyrecall", name);
-}
-
-void AdminHandler::breakGuild(const std::string &name) const
-{
- Gm::runCharCommand("breakguild", name);
-}
-
-void AdminHandler::guildRecall(const std::string &name) const
-{
- Gm::runCommand("guildrecall", name);
-}
-
-void AdminHandler::slide(const int x, const int y) const
-{
- Gm::runCommand("slide",
- strprintf("%d %d", x, y));
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/adminhandler.h b/src/net/eathena/adminhandler.h
deleted file mode 100644
index 2cee9a354..000000000
--- a/src/net/eathena/adminhandler.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ADMINHANDLER_H
-#define NET_EATHENA_ADMINHANDLER_H
-
-#include "net/ea/adminhandler.h"
-
-namespace EAthena
-{
-
-class AdminHandler final : public Ea::AdminHandler
-{
- public:
- AdminHandler();
-
- A_DELETE_COPY(AdminHandler)
-
- ~AdminHandler();
-
- void announce(const std::string &text) const override final;
-
- void localAnnounce(const std::string &text) const override final;
-
- void hide(const bool h) const override final;
-
- void kick(const BeingId playerId) const override final;
-
- void kickAll() const override final;
-
- void warp(const std::string &map,
- const int x, const int y) const override final;
-
- void resetStats() const override final;
-
- void resetSkills() const override final;
-
- void gotoName(const std::string &name) const override final;
-
- void recallName(const std::string &name) const override final;
-
- void mute(const Being *const being,
- const int type,
- const int limit) const override final;
-
- void muteName(const std::string &name) const override final;
-
- void requestLogin(const Being *const being) const override final;
-
- void setTileType(const int x, const int y,
- const int type) const override final;
-
- void unequipAll(const Being *const being) const override final;
-
- void requestStats(const std::string &name) const override final;
-
- void monsterInfo(const std::string &name) const override final;
-
- void itemInfo(const std::string &name) const override final;
-
- void whoDrops(const std::string &name) const override final;
-
- void mobSearch(const std::string &name) const override final;
-
- void mobSpawnSearch(const std::string &name) const override final;
-
- void playerGmCommands(const std::string &name) const override final;
-
- void playerCharGmCommands(const std::string &name) const
- override final;
-
- void showLevel(const std::string &name) const override final;
-
- void showStats(const std::string &name) const override final;
-
- void showStorageList(const std::string &name) const override final;
-
- void showCartList(const std::string &name) const override final;
-
- void showInventoryList(const std::string &name) const override final;
-
- void locatePlayer(const std::string &name) const override final;
-
- void showAccountInfo(const std::string &name) const override final;
-
- void spawnSlave(const std::string &name) const override final;
-
- void spawnClone(const std::string &name) const override final;
-
- void spawnSlaveClone(const std::string &name) const override final;
-
- void spawnEvilClone(const std::string &name) const override final;
-
- void savePosition(const std::string &name) const override final;
-
- void loadPosition(const std::string &name) const override final;
-
- void randomWarp(const std::string &name) const override final;
-
- void gotoNpc(const std::string &name) const override final;
-
- void killer(const std::string &name) const override final;
-
- void killable(const std::string &name) const override final;
-
- void heal(const std::string &name) const override final;
-
- void alive(const std::string &name) const override final;
-
- void disguise(const std::string &name) const override final;
-
- void immortal(const std::string &name) const override final;
-
- void hide(const std::string &name) const override final;
-
- void nuke(const std::string &name) const override final;
-
- void kill(const std::string &name) const override final;
-
- void jail(const std::string &name) const override final;
-
- void unjail(const std::string &name) const override final;
-
- void npcMove(const std::string &name,
- const int x,
- const int y) const override final;
-
- void hideNpc(const std::string &name) const override final;
-
- void showNpc(const std::string &name) const override final;
-
- void changePartyLeader(const std::string &name) const override final;
-
- void partyRecall(const std::string &name) const override final;
-
- void breakGuild(const std::string &name) const override final;
-
- void guildRecall(const std::string &name) const override final;
-
- void slide(const int x, const int y) const override final;
-
- protected:
- static std::string mStatsName;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_ADMINHANDLER_H
diff --git a/src/net/eathena/adminrecv.cpp b/src/net/eathena/adminrecv.cpp
deleted file mode 100644
index a49776ba4..000000000
--- a/src/net/eathena/adminrecv.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/adminrecv.h"
-
-#include "logger.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void AdminRecv::processAdminGetLoginAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readString(24, "login");
-}
-
-void AdminRecv::processSetTileType(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need set collision tile for map
- msg.readInt16("x");
- msg.readInt16("y");
- msg.readInt16("type");
- msg.readString(16, "map name");
-}
-
-void AdminRecv::processAccountStats(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need show in other players stats window, nick in mStatsName
- msg.readUInt8("str");
- msg.readUInt8("need str");
- msg.readUInt8("agi");
- msg.readUInt8("need agi");
- msg.readUInt8("vit");
- msg.readUInt8("need vit");
- msg.readUInt8("int");
- msg.readUInt8("need int");
- msg.readUInt8("dex");
- msg.readUInt8("need dex");
- msg.readUInt8("luk");
- msg.readUInt8("need luk");
- msg.readInt16("attack");
- msg.readInt16("refine");
- msg.readInt16("matk max");
- msg.readInt16("matk min");
- msg.readInt16("item def");
- msg.readInt16("plus def");
- msg.readInt16("mdef");
- msg.readInt16("plus mdef");
- msg.readInt16("hit");
- msg.readInt16("flee");
- msg.readInt16("flee2/10");
- msg.readInt16("cri/10");
- msg.readInt16("speed");
- msg.readInt16("zero");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/adminrecv.h b/src/net/eathena/adminrecv.h
deleted file mode 100644
index 36453de0f..000000000
--- a/src/net/eathena/adminrecv.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ADMINRECV_H
-#define NET_EATHENA_ADMINRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace AdminRecv
- {
- void processAdminGetLoginAck(Net::MessageIn &msg);
- void processSetTileType(Net::MessageIn &msg);
- void processAccountStats(Net::MessageIn &msg);
- } // namespace AdminRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_ADMINRECV_H
diff --git a/src/net/eathena/auctionhandler.cpp b/src/net/eathena/auctionhandler.cpp
deleted file mode 100644
index 709e15138..000000000
--- a/src/net/eathena/auctionhandler.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/auctionhandler.h"
-
-#include "const/net/inventory.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "resources/item/item.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-AuctionHandler::AuctionHandler()
-{
- auctionHandler = this;
-}
-
-AuctionHandler::~AuctionHandler()
-{
- auctionHandler = nullptr;
-}
-
-void AuctionHandler::cancelReg() const
-{
- createOutPacket(CMSG_AUCTION_CANCEL_REG);
- outMsg.writeInt16(0, "type"); // unused
-}
-
-void AuctionHandler::setItem(const Item *const item,
- const int amount) const
-{
- if (item == nullptr)
- return;
- createOutPacket(CMSG_AUCTION_SET_ITEM);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(amount, "amount"); // always 1
-}
-
-void AuctionHandler::reg(const int currentPrice,
- const int maxPrice,
- const int hours) const
-{
- createOutPacket(CMSG_AUCTION_REGISTER);
- outMsg.writeInt32(currentPrice, "now money");
- outMsg.writeInt32(maxPrice, "max money");
- outMsg.writeInt32(hours, "delete hour");
-}
-
-void AuctionHandler::cancel(const int auctionId) const
-{
- createOutPacket(CMSG_AUCTION_CANCEL);
- outMsg.writeInt32(auctionId, "auction id");
-}
-
-void AuctionHandler::close(const int auctionId) const
-{
- createOutPacket(CMSG_AUCTION_CLOSE);
- outMsg.writeInt32(auctionId, "auction id");
-}
-
-void AuctionHandler::bid(const int auctionId,
- const int money) const
-{
- createOutPacket(CMSG_AUCTION_BID);
- outMsg.writeInt32(auctionId, "auction id");
- outMsg.writeInt32(money, "money");
-}
-
-void AuctionHandler::search(const AuctionSearchTypeT type,
- const int auctionId,
- const std::string &text,
- const int page) const
-{
- createOutPacket(CMSG_AUCTION_SEARCH);
- outMsg.writeInt16(CAST_S16(type), "search type");
- outMsg.writeInt32(auctionId, "auction id");
- outMsg.writeString(text, 24, "search text");
- outMsg.writeInt16(CAST_S16(page), "page");
-}
-
-void AuctionHandler::buy() const
-{
- createOutPacket(CMSG_AUCTION_BUY_SELL);
- outMsg.writeInt16(1, "buy/sell type");
-}
-
-void AuctionHandler::sell() const
-{
- createOutPacket(CMSG_AUCTION_BUY_SELL);
- outMsg.writeInt16(0, "buy/sell type");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/auctionhandler.h b/src/net/eathena/auctionhandler.h
deleted file mode 100644
index 097f4ca3b..000000000
--- a/src/net/eathena/auctionhandler.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_AUCTIONHANDLER_H
-#define NET_EATHENA_AUCTIONHANDLER_H
-
-#include "net/auctionhandler.h"
-
-namespace EAthena
-{
-class AuctionHandler final : public Net::AuctionHandler
-{
- public:
- AuctionHandler();
-
- A_DELETE_COPY(AuctionHandler)
-
- ~AuctionHandler();
-
- void cancelReg() const override final;
-
- void setItem(const Item *const item,
- const int amount) const override final;
-
- void reg(const int currentPrice,
- const int maxPrice,
- const int hours) const override final;
-
- void cancel(const int auctionId) const override final;
-
- void close(const int auctionId) const override final;
-
- void bid(const int auctionId,
- const int money) const override final;
-
- void search(const AuctionSearchTypeT type,
- const int auctionId,
- const std::string &text,
- const int page) const override final;
-
- void buy() const override final;
-
- void sell() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_AUCTIONHANDLER_H
diff --git a/src/net/eathena/auctionrecv.cpp b/src/net/eathena/auctionrecv.cpp
deleted file mode 100644
index 5b51dc9a9..000000000
--- a/src/net/eathena/auctionrecv.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/auctionrecv.h"
-
-#include "logger.h"
-
-#include "const/resources/item/cards.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void AuctionRecv::processOpenWindow(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("flag"); // 0 - open, 1 - close
-}
-
-void AuctionRecv::processAuctionResults(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("len");
- msg.readInt32("pages");
- const int itemCount = msg.readInt32("items count");
- for (int f = 0; f < itemCount; f ++)
- {
- msg.readInt32("auction id");
- msg.readString(24, "seller name");
- msg.readInt32("item id");
- msg.readInt32("auction type");
- msg.readInt16("item amount"); // always 1
- msg.readUInt8("identify");
- msg.readUInt8("attribute");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- msg.readInt32("price");
- msg.readInt32("buy now");
- msg.readString(24, "buyer name");
- msg.readInt32("timestamp");
- // +++ need use ItemColorManager for color
- }
-}
-
-void AuctionRecv::processAuctionSetItem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("index");
- msg.readUInt8("flag");
-}
-
-void AuctionRecv::processAuctionMessage(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("message");
-}
-
-void AuctionRecv::processAuctionClose(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("flag");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/auctionrecv.h b/src/net/eathena/auctionrecv.h
deleted file mode 100644
index 25e91a848..000000000
--- a/src/net/eathena/auctionrecv.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_AUCTIONRECV_H
-#define NET_EATHENA_AUCTIONRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace AuctionRecv
- {
- void processOpenWindow(Net::MessageIn &msg);
- void processAuctionResults(Net::MessageIn &msg);
- void processAuctionSetItem(Net::MessageIn &msg);
- void processAuctionMessage(Net::MessageIn &msg);
- void processAuctionClose(Net::MessageIn &msg);
- } // namespace AuctionRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_AUCTIONRECV_H
diff --git a/src/net/eathena/bankhandler.cpp b/src/net/eathena/bankhandler.cpp
deleted file mode 100644
index 19d600059..000000000
--- a/src/net/eathena/bankhandler.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/bankhandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-BankHandler::BankHandler() :
- Net::BankHandler()
-{
- bankHandler = this;
-}
-
-BankHandler::~BankHandler()
-{
- bankHandler = nullptr;
-}
-
-void BankHandler::deposit(const int money) const
-{
- if (packetVersion < 20130320)
- return;
- createOutPacket(CMSG_BANK_DEPOSIT);
- outMsg.writeInt32(0, "account id");
- outMsg.writeInt32(money, "money");
-}
-
-void BankHandler::withdraw(const int money) const
-{
- if (packetVersion < 20130320)
- return;
- createOutPacket(CMSG_BANK_WITHDRAW);
- outMsg.writeInt32(0, "account id");
- outMsg.writeInt32(money, "money");
-}
-
-void BankHandler::check() const
-{
- if (packetVersion < 20130320)
- return;
- createOutPacket(CMSG_BANK_CHECK);
- outMsg.writeInt32(0, "account id");
-}
-
-void BankHandler::open() const
-{
- if (packetVersion < 20130417)
- return;
- createOutPacket(CMSG_BANK_OPEN);
- outMsg.writeInt32(0, "unused");
-}
-
-void BankHandler::close() const
-{
- if (packetVersion < 20130417)
- return;
- createOutPacket(CMSG_BANK_CLOSE);
- outMsg.writeInt32(0, "unused");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/bankhandler.h b/src/net/eathena/bankhandler.h
deleted file mode 100644
index 0e890a61e..000000000
--- a/src/net/eathena/bankhandler.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BANKHANDLER_H
-#define NET_EATHENA_BANKHANDLER_H
-
-#include "net/bankhandler.h"
-
-namespace EAthena
-{
-class BankHandler final : public Net::BankHandler
-{
- public:
- BankHandler();
-
- A_DELETE_COPY(BankHandler)
-
- ~BankHandler();
-
- void deposit(const int money) const override final;
-
- void withdraw(const int money) const override final;
-
- void check() const override final;
-
- void open() const override final;
-
- void close() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_BANKHANDLER_H
diff --git a/src/net/eathena/bankrecv.cpp b/src/net/eathena/bankrecv.cpp
deleted file mode 100644
index 12b17727b..000000000
--- a/src/net/eathena/bankrecv.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/bankrecv.h"
-
-#include "notifymanager.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "listeners/banklistener.h"
-
-#include "net/messagein.h"
-
-#include "utils/cast.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void BankRecv::processBankStatus(Net::MessageIn &msg)
-{
- const int money = CAST_S32(msg.readInt64("money"));
- msg.readInt16("reason");
- BankListener::distributeEvent(money);
-}
-
-void BankRecv::processBankDeposit(Net::MessageIn &msg)
-{
- const int reason = msg.readInt16("reason");
- const int money = CAST_S32(msg.readInt64("money"));
- msg.readInt32("balance");
- BankListener::distributeEvent(money);
- if (reason != 0)
- NotifyManager::notify(NotifyTypes::BANK_DEPOSIT_FAILED);
-}
-
-void BankRecv::processBankWithdraw(Net::MessageIn &msg)
-{
- const int reason = msg.readInt16("reason");
- const int money = CAST_S32(msg.readInt64("money"));
- msg.readInt32("balance");
- BankListener::distributeEvent(money);
- if (reason != 0)
- NotifyManager::notify(NotifyTypes::BANK_WITHDRAW_FAILED);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/bankrecv.h b/src/net/eathena/bankrecv.h
deleted file mode 100644
index 2d2755170..000000000
--- a/src/net/eathena/bankrecv.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BANKRECV_H
-#define NET_EATHENA_BANKRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace BankRecv
- {
- void processBankStatus(Net::MessageIn &msg);
- void processBankDeposit(Net::MessageIn &msg);
- void processBankWithdraw(Net::MessageIn &msg);
- } // namespace BankRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_BANKRECV_H
diff --git a/src/net/eathena/battlegroundhandler.cpp b/src/net/eathena/battlegroundhandler.cpp
deleted file mode 100644
index 09bc28a01..000000000
--- a/src/net/eathena/battlegroundhandler.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/battlegroundhandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-BattleGroundHandler::BattleGroundHandler()
-{
- battleGroundHandler = this;
-}
-
-BattleGroundHandler::~BattleGroundHandler()
-{
- battleGroundHandler = nullptr;
-}
-
-void BattleGroundHandler::registerBg(const BattleGroundTypeT &type,
- const std::string &name) const
-{
- if (packetVersion < 20111005)
- return;
- createOutPacket(CMSG_BATTLE_REGISTER);
- outMsg.writeInt16(CAST_S16(type), "type");
- outMsg.writeString(name, 24, "bg name");
-}
-
-void BattleGroundHandler::rekoveRequest(const std::string &name) const
-{
- if (packetVersion < 20111005)
- return;
- createOutPacket(CMSG_BATTLE_REVOKE);
- outMsg.writeString(name, 24, "bg name");
-}
-
-void BattleGroundHandler::beginAck(const bool result,
- const std::string &bgName,
- const std::string &gameName) const
-{
- if (packetVersion < 20111005)
- return;
- createOutPacket(CMSG_BATTLE_BEGIN_ACK);
- outMsg.writeInt8(CAST_S8(result ? 1 : 0), "result");
- outMsg.writeString(bgName, 24, "bg name");
- outMsg.writeString(gameName, 24, "game name");
-}
-
-void BattleGroundHandler::checkState(const std::string &name) const
-{
- if (packetVersion < 20111005)
- return;
- createOutPacket(CMSG_BATTLE_CHECK_STATE);
- outMsg.writeString(name, 24, "bg name");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/battlegroundhandler.h b/src/net/eathena/battlegroundhandler.h
deleted file mode 100644
index 230146963..000000000
--- a/src/net/eathena/battlegroundhandler.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BATTLEGROUNDHANDLER_H
-#define NET_EATHENA_BATTLEGROUNDHANDLER_H
-
-#include "net/battlegroundhandler.h"
-
-namespace EAthena
-{
-class BattleGroundHandler final : public Net::BattleGroundHandler
-{
- public:
- BattleGroundHandler();
-
- A_DELETE_COPY(BattleGroundHandler)
-
- ~BattleGroundHandler();
-
- void registerBg(const BattleGroundTypeT &type,
- const std::string &name) const override final;
-
- void rekoveRequest(const std::string &name) const override final;
-
- void beginAck(const bool result,
- const std::string &bgName,
- const std::string &gameName) const override final;
-
- void checkState(const std::string &name) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_BATTLEGROUNDHANDLER_H
diff --git a/src/net/eathena/battlegroundrecv.cpp b/src/net/eathena/battlegroundrecv.cpp
deleted file mode 100644
index 2aaab9294..000000000
--- a/src/net/eathena/battlegroundrecv.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/battlegroundrecv.h"
-
-#include "actormanager.h"
-#include "logger.h"
-
-#include "being/being.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void BattleGroundRecv::processBattleEmblem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readString(24, "name");
- msg.readInt16("bg id");
-}
-
-void BattleGroundRecv::processBattleEmblem2(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("account id");
- msg.readString(24, "name");
- msg.readInt16("bg id");
- const int teamId = msg.readInt16("team id");
-
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- dstBeing->setTeamId(CAST_U16(teamId));
-}
-
-void BattleGroundRecv::processBattleUpdateScore(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("camp a points");
- msg.readInt16("camp b points");
-}
-
-void BattleGroundRecv::processBattleUpdateCoords(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readString(24, "name");
- msg.readInt16("class");
- msg.readInt16("x");
- msg.readInt16("y");
-}
-
-void BattleGroundRecv::processBattlePlay(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(24, "battle ground name");
-}
-
-void BattleGroundRecv::processBattleQueueAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("type");
- msg.readString(24, "bg name");
-}
-
-void BattleGroundRecv::processBattleBegins(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(24, "bg name");
- msg.readString(24, "game name");
-}
-
-void BattleGroundRecv::processBattleNoticeDelete(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("type");
- msg.readString(24, "bg name");
-}
-
-void BattleGroundRecv::processBattleJoined(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(24, "name");
- msg.readInt32("position");
-}
-
-void BattleGroundRecv::processBattleUpdateHp(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- if (msg.getVersion() >= 20140613)
- {
- msg.readInt32("hp");
- msg.readInt32("max hp");
- }
- else
- {
- msg.readString(24, "name");
- msg.readInt16("hp");
- msg.readInt16("max hp");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/battlegroundrecv.h b/src/net/eathena/battlegroundrecv.h
deleted file mode 100644
index 7036fb31a..000000000
--- a/src/net/eathena/battlegroundrecv.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BATTLEGROUNDRECV_H
-#define NET_EATHENA_BATTLEGROUNDRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace BattleGroundRecv
- {
- void processBattleEmblem(Net::MessageIn &msg);
- void processBattleEmblem2(Net::MessageIn &msg);
- void processBattleUpdateScore(Net::MessageIn &msg);
- void processBattleUpdateCoords(Net::MessageIn &msg);
- void processBattlePlay(Net::MessageIn &msg);
- void processBattleQueueAck(Net::MessageIn &msg);
- void processBattleBegins(Net::MessageIn &msg);
- void processBattleNoticeDelete(Net::MessageIn &msg);
- void processBattleJoined(Net::MessageIn &msg);
- void processBattleUpdateHp(Net::MessageIn &msg);
- } // namespace BattleGroundRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_BATTLEGROUNDRECV_H
diff --git a/src/net/eathena/beinghandler.cpp b/src/net/eathena/beinghandler.cpp
deleted file mode 100644
index d53848654..000000000
--- a/src/net/eathena/beinghandler.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/beinghandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-#include "net/eathena/sprite.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-namespace EAthena
-{
-
-BeingHandler::BeingHandler(const bool enableSync) :
- Ea::BeingHandler(enableSync)
-{
- beingHandler = this;
-}
-
-BeingHandler::~BeingHandler()
-{
- beingHandler = nullptr;
-}
-
-void BeingHandler::requestNameById(const BeingId id) const
-{
- createOutPacket(CMSG_NAME_REQUEST);
- if (packetVersion >= 20080827 && packetVersion < 20101124)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- }
- outMsg.writeBeingId(id, "being id");
-}
-
-void BeingHandler::undress(Being *const being) const
-{
- if (being == nullptr)
- return;
- being->unSetSprite(SPRITE_WEAPON);
- being->unSetSprite(SPRITE_HEAD_BOTTOM);
- being->unSetSprite(SPRITE_HEAD_TOP);
- being->unSetSprite(SPRITE_HEAD_MID);
- being->unSetSprite(SPRITE_CLOTHES_COLOR);
- being->unSetSprite(SPRITE_SHIELD);
- being->unSetSprite(SPRITE_FLOOR);
- being->unSetSprite(SPRITE_ROBE);
- being->unSetSprite(SPRITE_EVOL2);
- being->unSetSprite(SPRITE_EVOL3);
- being->unSetSprite(SPRITE_EVOL4);
- being->unSetSprite(SPRITE_EVOL5);
- being->unSetSprite(SPRITE_EVOL6);
- being->unSetSprite(SPRITE_HAIR);
- being->unSetSprite(SPRITE_SHOES);
-}
-
-void BeingHandler::requestRanks(const RankT rank) const
-{
- if (packetVersion < 20130605)
- return;
-
- createOutPacket(CMSG_REQUEST_RANKS);
- outMsg.writeInt16(CAST_S16(rank), "type");
-}
-
-void BeingHandler::viewPlayerEquipment(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_PLAYER_VIEW_EQUIPMENT);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void BeingHandler::requestNameByCharId(const int id) const
-{
- createOutPacket(CMSG_SOLVE_CHAR_NAME);
- if (packetVersion >= 20080827 && packetVersion < 20101124)
- {
- outMsg.writeInt32(9, "unused");
- outMsg.writeInt32(9, "unused");
- }
- outMsg.writeInt32(id, "character id");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/beinghandler.h b/src/net/eathena/beinghandler.h
deleted file mode 100644
index cb8f8c248..000000000
--- a/src/net/eathena/beinghandler.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BEINGHANDLER_H
-#define NET_EATHENA_BEINGHANDLER_H
-
-#include "net/ea/beinghandler.h"
-
-namespace EAthena
-{
-
-class BeingHandler final : public Ea::BeingHandler
-{
- public:
- explicit BeingHandler(const bool enableSync);
-
- A_DELETE_COPY(BeingHandler)
-
- ~BeingHandler();
-
- void requestNameById(const BeingId id) const override final;
-
- void undress(Being *const being) const override final;
-
- void requestRanks(const RankT rank) const override final;
-
- void requestNameByCharId(const int id) const override final;
-
- void viewPlayerEquipment(const Being *const being) const
- override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_BEINGHANDLER_H
diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp
deleted file mode 100644
index 8d986797b..000000000
--- a/src/net/eathena/beingrecv.cpp
+++ /dev/null
@@ -1,2191 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/beingrecv.h"
-
-#include "actormanager.h"
-#include "effectmanager.h"
-#include "game.h"
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/mercenaryinfo.h"
-
-#include "const/utils/timer.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "particle/particleengine.h"
-
-#include "input/keyboardconfig.h"
-
-#include "gui/viewport.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/socialwindow.h"
-#include "gui/windows/okdialog.h"
-#include "gui/windows/outfitwindow.h"
-
-#include "net/character.h"
-#include "net/charserverhandler.h"
-#include "net/messagein.h"
-#include "net/serverfeatures.h"
-
-#include "net/ea/beingrecv.h"
-
-#include "net/eathena/maptypeproperty2.h"
-#include "net/eathena/sp.h"
-#include "net/eathena/sprite.h"
-
-#include "resources/iteminfo.h"
-#include "resources/db/itemdb.h"
-
-#include "resources/map/map.h"
-
-#include "utils/checkutils.h"
-#include "utils/foreach.h"
-#include "utils/timer.h"
-
-#include "debug.h"
-
-extern int serverVersion;
-extern OkDialog *deathNotice;
-
-namespace EAthena
-{
-
-void BeingRecv::processBeingChangeLook2(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- const uint8_t type = msg.readUInt8("type");
-
- const int id = msg.readInt16("id1");
- unsigned int id2 = msg.readInt16("id2");
- if (type != 2)
- id2 = 1;
-
- if ((localPlayer == nullptr) || (dstBeing == nullptr))
- return;
-
- processBeingChangeLookContinue(msg, dstBeing, type, id, id2, nullptr);
-}
-
-void BeingRecv::processBeingChangeLookCards(Net::MessageIn &msg)
-{
- Being *dstBeing = nullptr;
- int cards[maxCards];
-
- if (actorManager == nullptr)
- { // here can be look from char server
- Net::Characters &chars = Net::CharServerHandler::mCharacters;
- const BeingId id = msg.readBeingId("being id");
-
- FOR_EACH (Net::Characters::iterator, it, chars)
- {
- const Net::Character *const character = *it;
- if (character->dummy != nullptr &&
- character->dummy->getId() == id)
- {
- dstBeing = character->dummy;
- break;
- }
- }
- }
- else
- {
- dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- }
-
- const uint8_t type = msg.readUInt8("type");
-
- const int id = msg.readInt16("id1");
- unsigned int id2 = msg.readInt16("id2");
- if (type != 2)
- id2 = 1;
-
- for (int f = 0; f < maxCards; f ++)
- cards[f] = msg.readUInt16("card");
-
- if (dstBeing == nullptr)
- return;
-
- processBeingChangeLookContinue(msg, dstBeing, type, id, id2, &cards[0]);
-}
-
-void BeingRecv::processBeingChangeLookContinue(const Net::MessageIn &msg,
- Being *const dstBeing,
- const uint8_t type,
- const int id,
- const int id2,
- const int *const cards)
-{
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->setOtherTime();
-
- switch (type)
- {
- // here should be used SPRITE_* constants
- // but for now they conflicting with sprites
- // SPRITE_* is same with server LOOK_*
- case 0: // change race
- dstBeing->setSubtype(fromInt(id, BeingTypeId),
- dstBeing->getLook());
- break;
- case 1: // eAthena LOOK_HAIR
- dstBeing->setHairColor(fromInt(id, ItemColor));
- dstBeing->setHairColorSpriteID(SPRITE_HAIR_COLOR,
- id * -1);
- break;
- case 2: // LOOK_WEAPON Weapon ID in id, Shield ID in id2
- dstBeing->setSpriteCards(SPRITE_BODY,
- id,
- CardsList(cards));
- dstBeing->setWeaponId(id);
- dstBeing->setSpriteId(SPRITE_FLOOR,
- id2);
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR);
- break;
- case 3: // LOOK_HEAD_BOTTOM
- dstBeing->setSpriteCards(SPRITE_WEAPON,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_WEAPON);
- break;
- case 4: // LOOK_HEAD_TOP Change upper headgear for eAthena, hat for us
- dstBeing->setSpriteCards(SPRITE_CLOTHES_COLOR,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_CLOTHES_COLOR);
- break;
- case 5: // LOOK_HEAD_MID Change middle headgear for eathena,
- // armor for us
- dstBeing->setSpriteCards(SPRITE_HEAD_BOTTOM,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_BOTTOM);
- break;
- case 6: // eAthena LOOK_HAIR_COLOR
- dstBeing->setHairColor(fromInt(id, ItemColor));
- dstBeing->setSpriteColor(SPRITE_HAIR_COLOR,
- ItemDB::get(dstBeing->getSpriteID(
- SPRITE_HAIR_COLOR)).getDyeColorsString(
- fromInt(id, ItemColor)));
- break;
- case 7: // Clothes color. Now used as look
- dstBeing->setLook(CAST_U8(id));
- break;
- case 8: // eAthena LOOK_SHIELD
- dstBeing->setSpriteCards(SPRITE_FLOOR,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_FLOOR);
- break;
- case 9: // eAthena LOOK_SHOES
- dstBeing->setSpriteCards(SPRITE_HAIR,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_HAIR);
- break;
- case 10: // LOOK_GLOVES
- dstBeing->setSpriteCards(SPRITE_SHOES,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_SHOES);
- break;
- case 11: // LOOK_FLOOR
- dstBeing->setSpriteCards(SPRITE_SHIELD,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_SHIELD);
- break;
- case 12: // LOOK_ROBE
- dstBeing->setSpriteCards(SPRITE_HEAD_TOP,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_TOP);
- break;
- case 13: // COSTUME_HEAD_TOP
- dstBeing->setSpriteCards(SPRITE_HEAD_MID,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_HEAD_MID);
- break;
- case 14: // COSTUME_HEAD_MID
- dstBeing->setSpriteCards(SPRITE_ROBE,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_ROBE);
- break;
- case 15: // COSTUME_HEAD_LOW
- dstBeing->setSpriteCards(SPRITE_EVOL2,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL2);
- break;
- case 16: // COSTUME_GARMENT
- dstBeing->setSpriteCards(SPRITE_EVOL3,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL3);
- break;
- case 17: // ARMOR
- dstBeing->setSpriteCards(SPRITE_EVOL4,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL4);
- break;
- case 18:
- dstBeing->setSpriteCards(SPRITE_EVOL5,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL5);
- break;
- case 19:
- dstBeing->setSpriteCards(SPRITE_EVOL6,
- id,
- CardsList(cards));
- if (localPlayer != nullptr)
- localPlayer->imitateOutfit(dstBeing, SPRITE_EVOL6);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(type);
- break;
- }
-}
-
-void BeingRecv::processBeingVisible(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- // need set type based on id
- BeingTypeT type = BeingType::MONSTER;
- if (msg.getVersion() >= 20091103)
- {
- msg.readInt16("len");
- type = static_cast<BeingTypeT>(
- msg.readUInt8("object type"));
- }
-
- // Information about a being in range
- const BeingId id = msg.readBeingId("being id");
- if (msg.getVersion() >= 20131223)
- msg.readBeingId("char id");
- BeingId spawnId;
- if (id == Ea::BeingRecv::mSpawnId)
- spawnId = Ea::BeingRecv::mSpawnId;
- else
- spawnId = BeingId_zero;
- Ea::BeingRecv::mSpawnId = BeingId_zero;
-
- int16_t speed = msg.readInt16("speed");
- const uint32_t opt1 = msg.readInt16("opt1");
- // probably wrong effect usage
- const uint32_t opt2 = msg.readInt16("opt2");
- uint32_t option;
- if (msg.getVersion() >= 20080102)
- option = msg.readInt32("option");
- else
- option = msg.readInt16("option");
- const int16_t job = msg.readInt16("class");
-
- Being *dstBeing = actorManager->findBeing(id);
-
- if ((dstBeing != nullptr) && dstBeing->getType() == ActorType::Monster
- && !dstBeing->isAlive())
- {
- actorManager->destroy(dstBeing);
- actorManager->erase(dstBeing);
- dstBeing = nullptr;
- }
-
- if (dstBeing == nullptr)
- {
- if (actorManager->isBlocked(id) == true)
- return;
-
- dstBeing = createBeing2(msg, id, job, type);
- if (dstBeing == nullptr)
- return;
- }
- else
- {
- // undeleting marked for deletion being
- if (dstBeing->getType() == ActorType::Npc)
- actorManager->undelete(dstBeing);
- }
-
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->setMoveTime();
-
- if (spawnId != BeingId_zero)
- {
- dstBeing->setAction(BeingAction::SPAWN, 0);
- }
- else
- {
- dstBeing->clearPath();
- dstBeing->setActionTime(tick_time);
- dstBeing->setAction(BeingAction::STAND, 0);
- }
-
- // Prevent division by 0 when calculating frame
- if (speed == 0)
- speed = 150;
-
- dstBeing->setWalkSpeed(speed);
- dstBeing->setSubtype(fromInt(job, BeingTypeId), 0);
- if (dstBeing->getType() == ActorType::Monster && (localPlayer != nullptr))
- localPlayer->checkNewName(dstBeing);
-
- const int hairStyle = msg.readInt16("hair style");
- uint32_t weapon;
- if (msg.getVersion() >= 7)
- weapon = CAST_U32(msg.readInt32("weapon"));
- else
- weapon = CAST_U32(msg.readInt16("weapon"));
- const uint16_t headBottom = msg.readInt16("head bottom");
- if (msg.getVersion() < 7)
- msg.readInt16("shield");
- const uint16_t headTop = msg.readInt16("head top");
- const uint16_t headMid = msg.readInt16("head mid");
- const ItemColor hairColor = fromInt(msg.readInt16("hair color"),
- ItemColor);
- const uint16_t shoes = msg.readInt16("shoes or clothes color?");
-
- const uint16_t gloves = msg.readInt16("head dir / gloves");
- // may be use robe as gloves?
- if (msg.getVersion() >= 20101124)
- msg.readInt16("robe");
- msg.readInt32("guild id");
- msg.readInt16("guild emblem");
- dstBeing->setManner(msg.readInt16("manner"));
- uint32_t opt3;
- if (msg.getVersion() >= 7)
- opt3 = msg.readInt32("opt3");
- else
- opt3 = msg.readInt16("opt3");
- dstBeing->setKarma(msg.readUInt8("karma"));
- const uint8_t gender = CAST_U8(msg.readUInt8("gender") & 3);
-
- const ActorTypeT actorType = dstBeing->getType();
- switch (actorType)
- {
- case ActorType::Player:
- dstBeing->setGender(Being::intToGender(gender));
- dstBeing->setHairColor(hairColor);
- // Set these after the gender, as the sprites may be gender-specific
- if (hairStyle == 0)
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR,
- 0,
- std::string());
- }
- else
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR,
- hairStyle * -1,
- ItemDB::get(-hairStyle).getDyeColorsString(hairColor));
- }
- dstBeing->updateSprite(SPRITE_WEAPON, headBottom);
- dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid);
- dstBeing->updateSprite(SPRITE_CLOTHES_COLOR, headTop);
- dstBeing->updateSprite(SPRITE_HAIR, shoes);
- dstBeing->updateSprite(SPRITE_SHOES, gloves);
- dstBeing->updateSprite(SPRITE_BODY, weapon);
- dstBeing->setWeaponId(weapon);
- break;
- case ActorType::Npc:
- if (serverFeatures->haveNpcGender())
- {
- dstBeing->setGender(Being::intToGender(gender));
- }
- break;
- default:
- case ActorType::Monster:
- case ActorType::Portal:
- case ActorType::Pet:
- case ActorType::Mercenary:
- case ActorType::Homunculus:
- case ActorType::SkillUnit:
- case ActorType::Elemental:
- break;
- case ActorType::FloorItem:
- case ActorType::Avatar:
- case ActorType::Unknown:
- reportAlways("Wrong being type detected: %d",
- CAST_S32(actorType));
- break;
- }
-
- uint8_t dir;
- uint16_t x, y;
- msg.readCoordinates(x, y, dir, "position");
- msg.readInt8("xs");
- msg.readInt8("ys");
- applyPlayerAction(msg, dstBeing, msg.readUInt8("action type"));
- dstBeing->setTileCoords(x, y);
-
- if (job == 45 && (socialWindow != nullptr) && (outfitWindow != nullptr))
- {
- const int num = socialWindow->getPortalIndex(x, y);
- if (num >= 0)
- {
- dstBeing->setName(KeyboardConfig::getKeyShortString(
- OutfitWindow::keyName(num)));
- }
- else
- {
- dstBeing->setName("");
- }
- }
-
- dstBeing->setDirection(dir);
-
- const int level = CAST_S32(msg.readInt16("level"));
- if (level != 0)
- dstBeing->setLevel(level);
- if (msg.getVersion() >= 20080102)
- msg.readInt16("font");
-
- if (msg.getVersion() >= 20120221)
- {
- const int maxHP = msg.readInt32("max hp");
- const int hp = msg.readInt32("hp");
- dstBeing->setMaxHP(maxHP);
- dstBeing->setHP(hp);
- msg.readInt8("is boss");
- }
-
- if (serverVersion == 0 ||
- serverVersion >= 16)
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- }
- if (msg.getVersion() >= 20131223)
- {
- msg.readString(24, "name");
- }
- }
- else
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- msg.readString(24, "name");
- }
- }
-
- dstBeing->setStatusEffectOpitons(option,
- opt1,
- opt2,
- opt3);
-}
-
-void BeingRecv::processBeingMove(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- if (msg.getVersion() >= 20091103)
- msg.readInt16("len");
- BeingTypeT type;
- if (msg.getVersion() >= 20071106)
- {
- type = static_cast<BeingTypeT>(
- msg.readUInt8("object type"));
- }
- else
- {
- // need detect type based on id
- type = BeingType::MONSTER;
- }
-
- // Information about a being in range
- const BeingId id = msg.readBeingId("being id");
- if (msg.getVersion() >= 20131223)
- msg.readBeingId("char id");
- BeingId spawnId;
- if (id == Ea::BeingRecv::mSpawnId)
- spawnId = Ea::BeingRecv::mSpawnId;
- else
- spawnId = BeingId_zero;
- Ea::BeingRecv::mSpawnId = BeingId_zero;
- int16_t speed = msg.readInt16("speed");
- const uint32_t opt1 = msg.readInt16("opt1");
- // probably wrong effect usage
- const uint32_t opt2 = msg.readInt16("opt2");
- uint32_t option;
- if (msg.getVersion() >= 7)
- option = msg.readInt32("option");
- else
- option = msg.readInt16("option");
- const int16_t job = msg.readInt16("class");
-
- Being *dstBeing = actorManager->findBeing(id);
-
- if ((dstBeing != nullptr) && dstBeing->getType() == ActorType::Monster
- && !dstBeing->isAlive())
- {
- actorManager->destroy(dstBeing);
- actorManager->erase(dstBeing);
- dstBeing = nullptr;
- }
-
- if (dstBeing == nullptr)
- {
- if (actorManager->isBlocked(id) == true)
- return;
-
- dstBeing = createBeing2(msg, id, job, type);
- if (dstBeing == nullptr)
- return;
- }
- else
- {
- // undeleting marked for deletion being
- if (dstBeing->getType() == ActorType::Npc)
- actorManager->undelete(dstBeing);
- }
-
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->setMoveTime();
-
- if (spawnId != BeingId_zero)
- dstBeing->setAction(BeingAction::SPAWN, 0);
-
- // Prevent division by 0 when calculating frame
- if (speed == 0)
- speed = 150;
-
- dstBeing->setWalkSpeed(speed);
- dstBeing->setSubtype(fromInt(job, BeingTypeId), 0);
- if (dstBeing->getType() == ActorType::Monster && (localPlayer != nullptr))
- localPlayer->checkNewName(dstBeing);
-
- const int hairStyle = msg.readInt16("hair style");
- uint32_t weapon;
- if (msg.getVersion() >= 7)
- weapon = CAST_U32(msg.readInt32("weapon"));
- else
- weapon = CAST_U32(msg.readInt16("weapon"));
- const uint16_t headBottom = msg.readInt16("head bottom");
- msg.readInt32("tick");
- if (msg.getVersion() < 7)
- msg.readInt16("shield");
- const uint16_t headTop = msg.readInt16("head top");
- const uint16_t headMid = msg.readInt16("head mid");
- const ItemColor hairColor = fromInt(
- msg.readInt16("hair color"), ItemColor);
- const uint16_t shoes = msg.readInt16("shoes or clothes color?");
-
- const uint16_t gloves = msg.readInt16("head dir / gloves");
- // may be use robe as gloves?
- if (msg.getVersion() >= 20101124)
- msg.readInt16("robe");
- msg.readInt32("guild id");
- msg.readInt16("guild emblem");
- dstBeing->setManner(msg.readInt16("manner"));
- uint32_t opt3;
- if (msg.getVersion() >= 7)
- opt3 = msg.readInt32("opt3");
- else
- opt3 = msg.readInt16("opt3");
- dstBeing->setKarma(msg.readUInt8("karma"));
- const uint8_t gender = CAST_U8(msg.readUInt8("gender") & 3);
-
- const ActorTypeT actorType = dstBeing->getType();
- switch (actorType)
- {
- case ActorType::Player:
- dstBeing->setGender(Being::intToGender(gender));
- dstBeing->setHairColor(hairColor);
- // Set these after the gender, as the sprites may be gender-specific
- if (hairStyle == 0)
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR, 0);
- }
- else
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR,
- hairStyle * -1,
- ItemDB::get(-hairStyle).getDyeColorsString(hairColor));
- }
- if (!serverFeatures->haveMove3())
- {
- dstBeing->updateSprite(SPRITE_WEAPON, headBottom);
- dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid);
- dstBeing->updateSprite(SPRITE_CLOTHES_COLOR, headTop);
- dstBeing->updateSprite(SPRITE_HAIR, shoes);
- dstBeing->updateSprite(SPRITE_SHOES, gloves);
- dstBeing->updateSprite(SPRITE_BODY, weapon);
- dstBeing->setWeaponId(weapon);
- }
- break;
- case ActorType::Npc:
- if (serverFeatures->haveNpcGender())
- {
- dstBeing->setGender(Being::intToGender(gender));
- }
- break;
- default:
- case ActorType::Monster:
- case ActorType::Portal:
- case ActorType::Pet:
- case ActorType::Mercenary:
- case ActorType::Homunculus:
- case ActorType::SkillUnit:
- case ActorType::Elemental:
- break;
- case ActorType::FloorItem:
- case ActorType::Avatar:
- case ActorType::Unknown:
- reportAlways("Wrong being type detected: %d",
- CAST_S32(actorType));
- break;
- }
-
- uint16_t srcX, srcY, dstX, dstY;
- msg.readCoordinatePair(srcX, srcY, dstX, dstY, "move path");
- msg.readUInt8("(sx<<4) | (sy&0x0f)");
- msg.readInt8("xs");
- msg.readInt8("ys");
- dstBeing->setAction(BeingAction::STAND, 0);
- dstBeing->setTileCoords(srcX, srcY);
- if (localPlayer != nullptr)
- localPlayer->followMoveTo(dstBeing, srcX, srcY, dstX, dstY);
- if (serverFeatures->haveMove3())
- dstBeing->setCachedDestination(dstX, dstY);
- else
- dstBeing->setDestination(dstX, dstY);
-
- // because server don't send direction in move packet, we fixing it
-
- uint8_t d = 0;
- if (localPlayer != nullptr &&
- srcX == dstX &&
- srcY == dstY)
- { // if player did one step from invisible area to visible,
- // move path is broken
- int x2 = localPlayer->getTileX();
- int y2 = localPlayer->getTileY();
- if (abs(x2 - srcX) > abs(y2 - srcY))
- y2 = srcY;
- else
- x2 = srcX;
- d = dstBeing->calcDirection(x2, y2);
- }
- else
- {
- d = dstBeing->calcDirection(dstX, dstY);
- }
- if ((d != 0u) && dstBeing->getDirection() != d)
- dstBeing->setDirection(d);
-
- const int level = CAST_S32(msg.readInt16("level"));
- if (level != 0)
- dstBeing->setLevel(level);
- if (msg.getVersion() >= 20080102)
- msg.readInt16("font");
- if (msg.getVersion() >= 20120221)
- {
- const int maxHP = msg.readInt32("max hp");
- const int hp = msg.readInt32("hp");
- dstBeing->setMaxHP(maxHP);
- dstBeing->setHP(hp);
- msg.readInt8("is boss");
- }
- if (serverVersion == 0 ||
- serverVersion >= 16)
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- }
- if (msg.getVersion() >= 20131223)
- {
- msg.readString(24, "name");
- }
- }
- else
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- msg.readString(24, "name");
- }
- }
-
- dstBeing->setStatusEffectOpitons(option,
- opt1,
- opt2,
- opt3);
-}
-
-void BeingRecv::processBeingSpawn(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- // need get type from id
- BeingTypeT type = BeingType::MONSTER;
- if (msg.getVersion() >= 20091103)
- {
- msg.readInt16("len");
- type = static_cast<BeingTypeT>(
- msg.readUInt8("object type"));
- }
-
- // Information about a being in range
- const BeingId id = msg.readBeingId("being id");
- if (msg.getVersion() >= 20131223)
- {
- msg.readBeingId("char id");
- }
- Ea::BeingRecv::mSpawnId = id;
- const BeingId spawnId = id;
- int16_t speed = msg.readInt16("speed");
- const uint32_t opt1 = msg.readInt16("opt1");
- // probably wrong effect usage
- const uint32_t opt2 = msg.readInt16("opt2");
- uint32_t option;
- if (msg.getVersion() >= 20080102)
- option = msg.readInt32("option");
- else
- option = msg.readInt16("option");
- const int16_t job = msg.readInt16("class");
-
- Being *dstBeing = actorManager->findBeing(id);
-
- if ((dstBeing != nullptr) && dstBeing->getType() == ActorType::Monster
- && !dstBeing->isAlive())
- {
- actorManager->destroy(dstBeing);
- actorManager->erase(dstBeing);
- dstBeing = nullptr;
- }
-
- if (dstBeing == nullptr)
- {
- if (actorManager->isBlocked(id) == true)
- return;
-
- dstBeing = createBeing2(msg, id, job, type);
- if (dstBeing == nullptr)
- return;
- }
- else
- {
- // undeleting marked for deletion being
- if (dstBeing->getType() == ActorType::Npc)
- actorManager->undelete(dstBeing);
- }
-
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->setMoveTime();
-
- if (spawnId != BeingId_zero)
- dstBeing->setAction(BeingAction::SPAWN, 0);
-
- // Prevent division by 0 when calculating frame
- if (speed == 0)
- speed = 150;
-
- dstBeing->setWalkSpeed(speed);
- dstBeing->setSubtype(fromInt(job, BeingTypeId), 0);
- if (dstBeing->getType() == ActorType::Monster && (localPlayer != nullptr))
- localPlayer->checkNewName(dstBeing);
-
- const int hairStyle = msg.readInt16("hair style");
- uint32_t weapon;
- if (msg.getVersion() >= 7)
- weapon = CAST_U32(msg.readInt32("weapon"));
- else
- weapon = CAST_U32(msg.readInt16("weapon"));
- const uint16_t headBottom = msg.readInt16("head bottom");
- if (msg.getVersion() < 7)
- msg.readInt16("shield");
- const uint16_t headTop = msg.readInt16("head top");
- const uint16_t headMid = msg.readInt16("head mid");
- const ItemColor hairColor = fromInt(
- msg.readInt16("hair color"), ItemColor);
- const uint16_t shoes = msg.readInt16("shoes or clothes color?");
- const uint16_t gloves = msg.readInt16("head dir / gloves");
- // may be use robe as gloves?
- if (msg.getVersion() >= 20101124)
- msg.readInt16("robe");
- msg.readInt32("guild id");
- msg.readInt16("guild emblem");
- dstBeing->setManner(msg.readInt16("manner"));
- uint32_t opt3;
- if (msg.getVersion() >= 7)
- opt3 = msg.readInt32("opt3");
- else
- opt3 = msg.readInt16("opt3");
-
- dstBeing->setKarma(msg.readUInt8("karma"));
- const uint8_t gender = CAST_U8(msg.readUInt8("gender") & 3);
-
- const ActorTypeT actorType = dstBeing->getType();
- switch (actorType)
- {
- case ActorType::Player:
- dstBeing->setGender(Being::intToGender(gender));
- dstBeing->setHairColor(hairColor);
- // Set these after the gender, as the sprites may be gender-specific
- if (hairStyle == 0)
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR, 0);
- }
- else
- {
- dstBeing->updateSprite(SPRITE_HAIR_COLOR,
- hairStyle * -1,
- ItemDB::get(-hairStyle).getDyeColorsString(hairColor));
- }
- dstBeing->updateSprite(SPRITE_WEAPON, headBottom);
- dstBeing->updateSprite(SPRITE_HEAD_BOTTOM, headMid);
- dstBeing->updateSprite(SPRITE_CLOTHES_COLOR, headTop);
- dstBeing->updateSprite(SPRITE_HAIR, shoes);
- dstBeing->updateSprite(SPRITE_SHOES, gloves);
- dstBeing->updateSprite(SPRITE_BODY, weapon);
- dstBeing->setWeaponId(weapon);
- break;
- case ActorType::Npc:
- if (serverFeatures->haveNpcGender())
- {
- dstBeing->setGender(Being::intToGender(gender));
- }
- break;
- default:
- case ActorType::Monster:
- case ActorType::Portal:
- case ActorType::Pet:
- case ActorType::Mercenary:
- case ActorType::Homunculus:
- case ActorType::SkillUnit:
- case ActorType::Elemental:
- break;
- case ActorType::FloorItem:
- case ActorType::Avatar:
- case ActorType::Unknown:
- reportAlways("Wrong being type detected: %d",
- CAST_S32(actorType));
- break;
- }
-
- uint8_t dir;
- uint16_t x, y;
- msg.readCoordinates(x, y, dir, "position");
- msg.readInt8("xs");
- msg.readInt8("ys");
- dstBeing->setTileCoords(x, y);
-
- if (job == 45 && (socialWindow != nullptr) && (outfitWindow != nullptr))
- {
- const int num = socialWindow->getPortalIndex(x, y);
- if (num >= 0)
- {
- dstBeing->setName(KeyboardConfig::getKeyShortString(
- OutfitWindow::keyName(num)));
- }
- else
- {
- dstBeing->setName("");
- }
- }
-
- dstBeing->setDirection(dir);
-
- const int level = CAST_S32(msg.readInt16("level"));
- if (level != 0)
- dstBeing->setLevel(level);
- if (msg.getVersion() >= 20080102)
- msg.readInt16("font");
- if (msg.getVersion() >= 20120221)
- {
- const int maxHP = msg.readInt32("max hp");
- const int hp = msg.readInt32("hp");
- dstBeing->setMaxHP(maxHP);
- dstBeing->setHP(hp);
- msg.readInt8("is boss");
- }
- if (serverVersion == 0 ||
- serverVersion >= 16)
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- }
- if (msg.getVersion() >= 20131223)
- {
- msg.readString(24, "name");
- }
- }
- else
- {
- if (msg.getVersion() >= 20150513)
- {
- msg.readInt16("body2");
- msg.readString(24, "name");
- }
- }
-
- dstBeing->setStatusEffectOpitons(option,
- opt1,
- opt2,
- opt3);
-}
-
-void BeingRecv::processMapTypeProperty(Net::MessageIn &msg)
-{
- const int16_t type = msg.readInt16("type");
- const int flags = msg.readInt32("flags");
- if (type == 0x28)
- {
- // +++ need get other flags from here
- MapTypeProperty2 props;
- props.data = CAST_U32(flags);
- const Game *const game = Game::instance();
- if (game == nullptr)
- return;
- Map *const map = game->getCurrentMap();
- if (map == nullptr)
- return;
- map->setPvpMode(props.bits.party | (props.bits.guild * 2));
- }
-}
-
-void BeingRecv::processMapType(Net::MessageIn &msg)
-{
- const int16_t type = msg.readInt16("type");
- if (type == 19)
- NotifyManager::notify(NotifyTypes::MAP_TYPE_BATTLEFIELD);
- else
- UNIMPLEMENTEDPACKETFIELD(type);
-}
-
-void BeingRecv::processSkillCasting(Net::MessageIn &msg)
-{
- const BeingId srcId = msg.readBeingId("src id");
- const BeingId dstId = msg.readBeingId("dst id");
- const int dstX = msg.readInt16("dst x");
- const int dstY = msg.readInt16("dst y");
- const int skillId = msg.readInt16("skill id");
- msg.readInt32("property"); // can be used to trigger effect
- const int castTime = msg.readInt32("cast time");
- if (msg.getVersion() >= 20091124)
- msg.readInt8("dispossable");
-
- processSkillCastingContinue(msg,
- srcId, dstId,
- dstX, dstY,
- skillId,
- 1,
- 0,
- SkillType2::Unknown,
- castTime);
-}
-
-void BeingRecv::processSkillCasting2(Net::MessageIn &msg)
-{
- msg.readInt16("len"); // for now unused
- const BeingId srcId = msg.readBeingId("src id");
- const BeingId dstId = msg.readBeingId("dst id");
- const int dstX = msg.readInt16("dst x");
- const int dstY = msg.readInt16("dst y");
- const int skillId = msg.readInt16("skill id");
- const int skillLevel = msg.readInt16("skill level");
- msg.readInt32("property"); // can be used to trigger effect
- const int castTime = msg.readInt32("cast time");
- const int range = msg.readInt32("skill range");
- const SkillType2::SkillType2 inf2 =
- static_cast<SkillType2::SkillType2>(msg.readInt32("inf2"));
-
- processSkillCastingContinue(msg,
- srcId, dstId,
- dstX, dstY,
- skillId,
- skillLevel,
- range,
- inf2,
- castTime);
-}
-
-void BeingRecv::processSkillCastingContinue(Net::MessageIn &msg,
- const BeingId srcId,
- const BeingId dstId,
- const int dstX,
- const int dstY,
- const int skillId,
- const int skillLevel,
- const int range,
- const SkillType2::SkillType2 inf2,
- const int castTime)
-{
- if (effectManager == nullptr)
- return;
-
- if (srcId == BeingId_zero)
- {
- UNIMPLEMENTEDPACKETFIELD(0);
- return;
- }
- Being *const srcBeing = actorManager->findBeing(srcId);
- if (dstId != BeingId_zero)
- { // being to being
- Being *const dstBeing = actorManager->findBeing(dstId);
- if (srcBeing != nullptr)
- {
- srcBeing->handleSkillCasting(dstBeing, skillId, skillLevel);
- if (dstBeing != nullptr)
- {
- srcBeing->addCast(dstBeing->getTileX(),
- dstBeing->getTileY(),
- skillId,
- skillLevel,
- range,
- castTime / MILLISECONDS_IN_A_TICK);
- }
- }
- }
- else if (dstX != 0 || dstY != 0)
- { // being to position
- if (srcBeing != nullptr)
- srcBeing->setAction(BeingAction::CAST, skillId);
- skillDialog->playCastingDstTileEffect(skillId,
- skillLevel,
- dstX, dstY,
- castTime);
- if (srcBeing != nullptr)
- {
- srcBeing->addCast(dstX, dstY,
- skillId,
- skillLevel,
- range,
- castTime / MILLISECONDS_IN_A_TICK);
- }
- }
- if ((localPlayer != nullptr) &&
- srcBeing == localPlayer &&
- (inf2 & SkillType2::FreeCastAny) == 0)
- {
- localPlayer->freezeMoving(castTime / MILLISECONDS_IN_A_TICK);
- }
-}
-
-void BeingRecv::processBeingStatusChange(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingStatusChange")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingStatusChange")
- return;
- }
-
- // Status change
- const uint16_t status = msg.readInt16("status");
- const BeingId id = msg.readBeingId("being id");
- const Enable flag = fromBool(
- msg.readUInt8("flag: 0: stop, 1: start"), Enable);
- if (msg.getVersion() >= 20120618)
- msg.readInt32("total");
- if (msg.getVersion() >= 20090121)
- {
- msg.readInt32("left");
- msg.readInt32("val1");
- msg.readInt32("val2");
- msg.readInt32("val3");
- }
-
- const IsStart start = msg.getVersion() == 20090121 ?
- IsStart_false : IsStart_true;
-
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- dstBeing->setStatusEffect(status, flag, start);
- BLOCK_END("BeingRecv::processBeingStatusChange")
-}
-
-void BeingRecv::processBeingMove2(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingMove2")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingMove2")
- return;
- }
-
- /*
- * A simplified movement packet, used by the
- * later versions of eAthena for both mobs and
- * players
- */
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
-
- uint16_t srcX, srcY, dstX, dstY;
- msg.readCoordinatePair(srcX, srcY, dstX, dstY, "move path");
- msg.readUInt8("(sx<<4) | (sy&0x0f)");
- msg.readInt32("tick");
-
- /*
- * This packet doesn't have enough info to actually
- * create a new being, so if the being isn't found,
- * we'll just pretend the packet didn't happen
- */
-
- if (dstBeing == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingMove2")
- return;
- }
-
- dstBeing->setTileCoords(srcX, srcY);
- if (localPlayer != nullptr)
- localPlayer->followMoveTo(dstBeing, srcX, srcY, dstX, dstY);
- if (serverFeatures->haveMove3())
- dstBeing->setCachedDestination(dstX, dstY);
- else
- dstBeing->setDestination(dstX, dstY);
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->setMoveTime();
- BLOCK_END("BeingRecv::processBeingMove2")
-}
-
-void BeingRecv::processBeingAction2(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingAction2")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingAction2")
- return;
- }
-
- Being *const srcBeing = actorManager->findBeing(
- msg.readBeingId("src being id"));
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("dst being id"));
-
- msg.readInt32("tick");
- const int srcSpeed = msg.readInt32("src speed");
- msg.readInt32("dst speed");
- int param1;
- if (msg.getVersion() >= 20071113)
- param1 = msg.readInt32("damage");
- else
- param1 = msg.readInt16("damage");
- if (msg.getVersion() >= 20131223)
- msg.readUInt8("is sp damaged");
- msg.readInt16("count");
- const AttackTypeT type = static_cast<AttackTypeT>(
- msg.readUInt8("action"));
- if (msg.getVersion() >= 20071113)
- msg.readInt32("left damage");
- else
- msg.readInt16("left damage");
-
- switch (type)
- {
- case AttackType::HIT: // Damage
- case AttackType::CRITICAL: // Critical Damage
- case AttackType::MULTI: // Critical Damage
- case AttackType::MULTI_REFLECT:
- case AttackType::REFLECT: // Reflected Damage
- case AttackType::FLEE: // Lucky Dodge
- case AttackType::SPLASH:
- case AttackType::SKILL:
- case AttackType::REPEATE:
- if (srcBeing != nullptr)
- {
- if (srcSpeed != 0 && srcBeing->getType() == ActorType::Player)
- srcBeing->setAttackDelay(srcSpeed);
- // attackid=1, type
- srcBeing->handleAttack(dstBeing, param1, 1);
- if (srcBeing->getType() == ActorType::Player)
- srcBeing->setAttackTime();
- }
- if (dstBeing != nullptr)
- {
- // level not present, using 1
- dstBeing->takeDamage(srcBeing, param1,
- static_cast<AttackTypeT>(type), 1);
- }
- break;
-
- case AttackType::PICKUP:
- break;
-
- case AttackType::TOUCH_SKILL:
- break;
-
- case AttackType::SIT:
- if (srcBeing != nullptr)
- {
- srcBeing->setAction(BeingAction::SIT, 0);
- if (srcBeing->getType() == ActorType::Player)
- {
- srcBeing->setMoveTime();
- if (localPlayer != nullptr)
- localPlayer->imitateAction(srcBeing, BeingAction::SIT);
- }
- }
- break;
-
- case AttackType::STAND:
- if (srcBeing != nullptr)
- {
- srcBeing->setAction(BeingAction::STAND, 0);
- if (srcBeing->getType() == ActorType::Player)
- {
- srcBeing->setMoveTime();
- if (localPlayer != nullptr)
- {
- localPlayer->imitateAction(srcBeing,
- BeingAction::STAND);
- }
- }
- }
- break;
- default:
- case AttackType::MISS:
- case AttackType::SKILLMISS:
- UNIMPLEMENTEDPACKETFIELD(CAST_S32(type));
- break;
- }
- BLOCK_END("BeingRecv::processBeingAction2")
-}
-
-void BeingRecv::processBeingHp(Net::MessageIn &msg)
-{
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- int hp;
- int maxHP;
- if (msg.getVersion() >= 20100126)
- {
- hp = msg.readInt32("hp");
- maxHP = msg.readInt32("max hp");
- }
- else
- {
- hp = msg.readInt16("hp");
- maxHP = msg.readInt16("max hp");
- }
- if (dstBeing != nullptr)
- {
- dstBeing->setHP(hp);
- dstBeing->setMaxHP(maxHP);
- }
-}
-
-void BeingRecv::processMonsterHp(Net::MessageIn &msg)
-{
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("monster id"));
- const int hp = msg.readInt32("hp");
- const int maxHP = msg.readInt32("max hp");
- if (dstBeing != nullptr)
- {
- dstBeing->setHP(hp);
- dstBeing->setMaxHP(maxHP);
- }
-}
-
-void BeingRecv::processSkillAutoCast(Net::MessageIn &msg)
-{
- const int id = msg.readInt16("skill id");
- msg.readInt16("inf");
- msg.readInt16("unused");
- const int level = msg.readInt16("skill level");
- msg.readInt16("sp");
- msg.readInt16("range");
- msg.readString(24, "skill name");
- msg.readInt8("unused");
-
- if (localPlayer != nullptr)
- {
- localPlayer->handleSkill(localPlayer, 0, id, level);
- localPlayer->takeDamage(localPlayer, 0, AttackType::SKILL, id, level);
- }
-}
-
-void BeingRecv::processRanksList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need window with rank tables.
- msg.readInt16("rank type");
- for (int f = 0; f < 10; f ++)
- msg.readString(24, "name");
- for (int f = 0; f < 10; f ++)
- msg.readInt32("points");
- msg.readInt32("my points");
-}
-
-void BeingRecv::processBlacksmithRanksList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need window with rank tables.
- for (int f = 0; f < 10; f ++)
- msg.readString(24, "name");
- for (int f = 0; f < 10; f ++)
- msg.readInt32("points");
-}
-
-void BeingRecv::processAlchemistRanksList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need window with rank tables.
- for (int f = 0; f < 10; f ++)
- msg.readString(24, "name");
- for (int f = 0; f < 10; f ++)
- msg.readInt32("points");
-}
-
-void BeingRecv::processTaekwonRanksList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need window with rank tables.
- for (int f = 0; f < 10; f ++)
- msg.readString(24, "name");
- for (int f = 0; f < 10; f ++)
- msg.readInt32("points");
-}
-
-void BeingRecv::processPkRanksList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need window with rank tables.
- for (int f = 0; f < 10; f ++)
- msg.readString(24, "name");
- for (int f = 0; f < 10; f ++)
- msg.readInt32("points");
-}
-
-void BeingRecv::processBeingChangeDirection(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingChangeDirection")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingChangeDirection")
- return;
- }
-
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
-
- msg.readInt16("head direction");
-
- const uint8_t dir = Net::MessageIn::fromServerDirection(
- CAST_U8(msg.readUInt8("player direction") & 0x0FU));
-
- if (dstBeing == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingChangeDirection")
- return;
- }
-
- dstBeing->setDirection(dir);
- if (localPlayer != nullptr)
- localPlayer->imitateDirection(dstBeing, dir);
- BLOCK_END("BeingRecv::processBeingChangeDirection")
-}
-
-void BeingRecv::processBeingSpecialEffect(Net::MessageIn &msg)
-{
- if ((effectManager == nullptr) || (actorManager == nullptr))
- return;
-
- const BeingId id = msg.readBeingId("being id");
- Being *const being = actorManager->findBeing(id);
- if (being == nullptr)
- return;
-
- const int effectType = msg.readInt32("effect type");
-
- if (ParticleEngine::enabled)
- effectManager->trigger(effectType, being);
-
- // +++ need dehard code effectType == 3
- if (effectType == 3 && being->getType() == ActorType::Player
- && (socialWindow != nullptr))
- { // reset received damage
- socialWindow->resetDamage(being->getName());
- }
-}
-
-void BeingRecv::processBeingSpecialEffectNum(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need somhow show this effects.
- // type is not same with self/misc effect.
- msg.readBeingId("account id");
- msg.readInt32("effect type");
- msg.readInt32("num"); // effect variable
-}
-
-void BeingRecv::processBeingSoundEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need play this effect.
- msg.readString(24, "sound effect name");
- msg.readUInt8("type");
- msg.readInt32("unused");
- msg.readInt32("source being id");
-}
-
-void BeingRecv::processSkillGroundNoDamage(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("skill id");
- msg.readInt32("src id");
- msg.readInt16("val");
- msg.readInt16("x");
- msg.readInt16("y");
- msg.readInt32("tick");
-}
-
-void BeingRecv::processSkillEntry(Net::MessageIn &msg)
-{
- if (msg.getVersion() >= 20110718)
- msg.readInt16("len");
- const BeingId id = msg.readBeingId("skill unit id");
- const BeingId creatorId = msg.readBeingId("creator accound id");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- int job = 0;
- if (msg.getVersion() >= 20121212)
- job = msg.readInt32("job");
- if (msg.getVersion() >= 20110718)
- msg.readUInt8("radius");
- msg.readUInt8("visible");
- int level = 0;
- if (msg.getVersion() >= 20130731)
- level = msg.readUInt8("level");
- Being *const dstBeing = createBeing2(msg,
- id,
- job,
- BeingType::SKILL);
- if (dstBeing == nullptr)
- return;
- dstBeing->setAction(BeingAction::STAND, 0);
- dstBeing->setTileCoords(x, y);
- dstBeing->setLevel(level);
- dstBeing->setCreatorId(creatorId);
-}
-
-void BeingRecv::processPlayerStatusChange(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processPlayerStop")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processPlayerStop")
- return;
- }
-
- // Change in players' flags
- const BeingId id = msg.readBeingId("account id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- {
- msg.readInt16("opt1");
- msg.readInt16("opt2");
- if (msg.getVersion() >= 7)
- msg.readInt32("option");
- else
- msg.readInt16("option");
- msg.readUInt8("karma");
- return;
- }
-
- const uint32_t opt1 = msg.readInt16("opt1");
- const uint32_t opt2 = msg.readInt16("opt2");
- uint32_t option;
- if (msg.getVersion() >= 7)
- option = msg.readInt32("option");
- else
- option = msg.readInt16("option");
- dstBeing->setKarma(msg.readUInt8("karma"));
-
- dstBeing->setStatusEffectOpitons(option,
- opt1,
- opt2);
- BLOCK_END("BeingRecv::processPlayerStop")
-}
-
-void BeingRecv::processPlayerStatusChange2(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- // look like this function unused on server
-
- const BeingId id = msg.readBeingId("account id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- return;
-
- const uint32_t option = msg.readInt32("option");
- dstBeing->setLevel(msg.readInt32("level"));
- msg.readInt32("showEFST");
- dstBeing->setStatusEffectOpiton0(option);
-}
-
-void BeingRecv::processBeingResurrect(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingResurrect")
- if (actorManager == nullptr ||
- localPlayer == nullptr)
- {
- BLOCK_END("BeingRecv::processBeingResurrect")
- return;
- }
-
- // A being changed mortality status
-
- const BeingId id = msg.readBeingId("being id");
- msg.readInt16("unused");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- {
- DEBUGLOGSTR("insible player?");
- BLOCK_END("BeingRecv::processBeingResurrect")
- return;
- }
-
- // If this is player's current target, clear it.
- if (dstBeing == localPlayer->getTarget())
- localPlayer->stopAttack();
- if (dstBeing == localPlayer &&
- deathNotice != nullptr)
- {
- deathNotice->scheduleDelete();
- deathNotice = nullptr;
- }
-
- dstBeing->setAction(BeingAction::STAND, 0);
- BLOCK_END("BeingRecv::processBeingResurrect")
-}
-
-void BeingRecv::processPlayerGuilPartyInfo(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processPlayerGuilPartyInfo")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processPlayerGuilPartyInfo")
- return;
- }
-
- const BeingId beingId = msg.readBeingId("being id");
- const std::string name = msg.readString(24, "char name");
- actorManager->updateNameId(name, beingId);
- Being *const dstBeing = actorManager->findBeing(beingId);
- if (dstBeing != nullptr)
- {
- if (beingId == localPlayer->getId())
- {
- localPlayer->pingResponse();
- }
- dstBeing->setName(name);
- dstBeing->setPartyName(msg.readString(24, "party name"));
- dstBeing->setGuildName(msg.readString(24, "guild name"));
- dstBeing->setGuildPos(msg.readString(24, "guild pos"));
- dstBeing->addToCache();
- }
- else
- {
- msg.readString(24, "party name");
- msg.readString(24, "guild name");
- msg.readString(24, "guild pos");
- }
- BLOCK_END("BeingRecv::processPlayerGuilPartyInfo")
-}
-
-void BeingRecv::processBeingRemoveSkill(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("skill unit id");
- if (actorManager == nullptr)
- return;
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- return;
- actorManager->destroy(dstBeing);
-}
-
-void BeingRecv::processBeingFakeName(Net::MessageIn &msg)
-{
- uint16_t x, y;
- uint8_t dir;
- if (msg.getVersion() < 20071106)
- {
- msg.readBeingId("npc id");
- msg.skip(8, "unused");
- msg.readInt16("class?"); // 111
- msg.skip(30, "unused");
- msg.readCoordinates(x, y, dir, "position");
- msg.readUInt8("sx");
- msg.readUInt8("sy");
- msg.skip(3, "unused");
- return;
- }
- const BeingTypeT type = static_cast<BeingTypeT>(
- msg.readUInt8("object type"));
- const BeingId id = msg.readBeingId("npc id");
- msg.skip(8, "unused");
- const uint16_t job = msg.readInt16("class?"); // 111
- msg.skip(30, "unused");
- msg.readCoordinates(x, y, dir, "position");
- msg.readUInt8("sx");
- msg.readUInt8("sy");
- msg.skip(3, "unused");
-
- Being *const dstBeing = createBeing2(msg, id, job, type);
- if (dstBeing == nullptr)
- return;
- dstBeing->setSubtype(fromInt(job, BeingTypeId), 0);
- dstBeing->setTileCoords(x, y);
- dstBeing->setDirection(dir);
-}
-
-void BeingRecv::processBeingStatUpdate1(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("account id");
- const int type = msg.readInt16("type");
- const int value = msg.readInt32("value");
-
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- return;
-
- if (type != Sp::MANNER)
- {
- UNIMPLEMENTEDPACKETFIELD(type);
- return;
- }
- dstBeing->setManner(value);
-}
-
-void BeingRecv::processBeingSelfEffect(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processBeingSelfEffect")
- if ((effectManager == nullptr) || (actorManager == nullptr))
- {
- BLOCK_END("BeingRecv::processBeingSelfEffect")
- return;
- }
-
- const BeingId id = msg.readBeingId("being id");
- Being *const being = actorManager->findBeing(id);
- if (being == nullptr)
- {
- DEBUGLOGSTR("insible player?");
- msg.readInt32("effect type");
- BLOCK_END("BeingRecv::processBeingSelfEffect")
- return;
- }
-
- const int effectType = msg.readInt32("effect type");
- if (ParticleEngine::enabled)
- effectManager->trigger(effectType, being);
-
- BLOCK_END("BeingRecv::processBeingSelfEffect")
-}
-
-void BeingRecv::processMobInfo(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- if (len < 12)
- return;
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("monster id"));
- const int attackRange = msg.readInt32("range");
- if (dstBeing != nullptr)
- dstBeing->setAttackRange(attackRange);
-}
-
-void BeingRecv::processBeingAttrs(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- if (len < 14)
- return;
-
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("player id"));
- const int groupId = msg.readInt32("group id");
- uint16_t mount = 0;
- mount = msg.readInt16("mount");
- int language = -1;
- if (serverVersion >= 17 && len > 14)
- language = msg.readInt16("language");
- if (dstBeing != nullptr)
- {
- if (serverVersion <= 17 ||
- dstBeing != localPlayer)
- {
- dstBeing->setGroupId(groupId);
- if (groupId != 0)
- dstBeing->setGM(true);
- else
- dstBeing->setGM(false);
- }
- dstBeing->setHorse(mount);
- dstBeing->setLanguageId(language);
- if (dstBeing == localPlayer)
- PlayerInfo::setServerLanguage(language);
- }
-}
-
-void BeingRecv::processMonsterInfo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("class");
- msg.readInt16("level");
- msg.readInt16("size");
- msg.readInt32("hp");
- msg.readInt16("def");
- msg.readInt16("race");
- msg.readInt16("mdef");
- msg.readInt16("ele");
-}
-
-void BeingRecv::processClassChange(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("being id");
- msg.readUInt8("type");
- msg.readInt32("class");
-}
-
-void BeingRecv::processSpiritBalls(Net::MessageIn &msg)
-{
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- const int balls = msg.readInt16("spirits amount");
- if (dstBeing != nullptr)
- dstBeing->setSpiritBalls(balls);
-}
-
-void BeingRecv::processBladeStop(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt32("src being id");
- msg.readInt32("dst being id");
- msg.readInt32("flag");
-}
-
-void BeingRecv::processComboDelay(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("being id");
- msg.readInt32("wait");
-}
-
-void BeingRecv::processWddingEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("being id");
-}
-
-void BeingRecv::processBeingSlide(Net::MessageIn &msg)
-{
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- if (dstBeing == nullptr)
- return;
- if (localPlayer == dstBeing)
- {
- localPlayer->stopAttack();
- localPlayer->navigateClean();
- if (viewport != nullptr)
- viewport->returnCamera();
- }
-
- dstBeing->setAction(BeingAction::STAND, 0);
- dstBeing->setTileCoords(x, y);
-}
-
-void BeingRecv::processStarsKill(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readString(24, "map name");
- msg.readInt32("monster id");
- msg.readUInt8("start");
- msg.readUInt8("result");
-}
-
-void BeingRecv::processGladiatorFeelRequest(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readUInt8("which");
-}
-
-void BeingRecv::processBossMapInfo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readUInt8("info type");
- msg.readInt32("x");
- msg.readInt32("y");
- msg.readInt16("min hours");
- msg.readInt16("min minutes");
- msg.readInt16("max hours");
- msg.readInt16("max minutes");
- msg.readString(24, "monster name"); // really can be used 51 byte?
-}
-
-void BeingRecv::processBeingFont(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("account id");
- msg.readInt16("font");
-}
-
-void BeingRecv::processBeingMilleniumShield(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("account id");
- msg.readInt16("shields");
- msg.readInt16("unused");
-}
-
-void BeingRecv::processBeingCharm(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("account id");
- msg.readInt16("charm type");
- msg.readInt16("charm count");
-}
-
-void BeingRecv::processBeingViewEquipment(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 45) / 31;
- msg.readString(24, "name");
- msg.readInt16("job");
- msg.readInt16("head");
- msg.readInt16("accessory");
- msg.readInt16("accessory2");
- msg.readInt16("accessory3");
- if (msg.getVersion() >= 20101124)
- msg.readInt16("robe");
- msg.readInt16("hair color");
- msg.readInt16("body color");
- msg.readUInt8("gender");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("index");
- msg.readInt16("item id");
- msg.readUInt8("item type");
- msg.readInt32("location");
- msg.readInt32("wear state");
- msg.readInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- msg.readInt32("hire expire date (?)");
- msg.readInt16("equip type");
- msg.readInt16("item sprite number");
- msg.readUInt8("flags");
- }
-}
-
-void BeingRecv::processPvpSet(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processPvpSet")
- const BeingId id = msg.readBeingId("being id");
- const int rank = msg.readInt32("rank");
- msg.readInt32("num");
- if (actorManager != nullptr)
- {
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- dstBeing->setPvpRank(rank);
- }
- BLOCK_END("BeingRecv::processPvpSet")
-}
-
-void BeingRecv::processNameResponse2(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processNameResponse2")
- if ((actorManager == nullptr) || (localPlayer == nullptr))
- {
- BLOCK_END("BeingRecv::processNameResponse2")
- return;
- }
-
- const int len = msg.readInt16("len");
- const BeingId beingId = msg.readBeingId("account id");
- const std::string str = msg.readString(len - 8, "name");
- actorManager->updateNameId(str, beingId);
- Being *const dstBeing = actorManager->findBeing(beingId);
- if (dstBeing != nullptr)
- {
- if (beingId == localPlayer->getId())
- {
- localPlayer->pingResponse();
- }
- else
- {
- dstBeing->setName(str);
- dstBeing->updateGuild();
- dstBeing->addToCache();
-
- if (dstBeing->getType() == ActorType::Player)
- dstBeing->updateColors();
-
- if (localPlayer != nullptr)
- {
- const Party *const party = localPlayer->getParty();
- if (party != nullptr && party->isMember(dstBeing->getId()))
- {
- PartyMember *const member = party->getMember(
- dstBeing->getId());
-
- if (member != nullptr)
- member->setName(dstBeing->getName());
- }
- localPlayer->checkNewName(dstBeing);
- }
- }
- }
- BLOCK_END("BeingRecv::processNameResponse2")
-}
-
-Being *BeingRecv::createBeing2(Net::MessageIn &msg,
- const BeingId id,
- const int32_t job,
- const BeingTypeT beingType)
-{
- if (actorManager == nullptr)
- return nullptr;
-
- ActorTypeT type = ActorType::Unknown;
- switch (beingType)
- {
- case BeingType::PC:
- type = ActorType::Player;
- break;
- case BeingType::NPC:
- case BeingType::NPC_EVENT:
- type = ActorType::Npc;
- break;
- case BeingType::MONSTER:
- type = ActorType::Monster;
- break;
- case BeingType::MERSOL:
- type = ActorType::Mercenary;
- break;
- case BeingType::PET:
- type = ActorType::Pet;
- break;
- case BeingType::HOMUN:
- type = ActorType::Homunculus;
- break;
- case BeingType::SKILL:
- type = ActorType::SkillUnit;
- break;
- case BeingType::ELEMENTAL:
- type = ActorType::Elemental;
- break;
- case BeingType::ITEM:
- logger->log("not supported object type: %d, job: %d",
- CAST_S32(beingType), CAST_S32(job));
- break;
- case BeingType::CHAT:
- default:
- UNIMPLEMENTEDPACKETFIELD(CAST_S32(beingType));
- type = ActorType::Monster;
- logger->log("not supported object type: %d, job: %d",
- CAST_S32(beingType), CAST_S32(job));
- break;
- }
- if (job == 45 && beingType == BeingType::NPC_EVENT)
- type = ActorType::Portal;
-
- Being *const being = actorManager->createBeing(
- id, type, fromInt(job, BeingTypeId));
- if (beingType == BeingType::MERSOL)
- {
- const MercenaryInfo *const info = PlayerInfo::getMercenary();
- if ((info != nullptr) && info->id == id)
- PlayerInfo::setMercenaryBeing(being);
- }
- else if (beingType == BeingType::PET)
- {
- if (PlayerInfo::getPetBeingId() == id)
- PlayerInfo::setPetBeing(being);
- }
- return being;
-}
-
-void BeingRecv::processSkillCancel(Net::MessageIn &msg)
-{
- msg.readInt32("id?");
-}
-
-void BeingRecv::processSolveCharName(Net::MessageIn &msg)
-{
- const int id = msg.readInt32("char id");
- if (actorManager == nullptr)
- {
- msg.readString(24, "name");
- return;
- }
- actorManager->addChar(id, msg.readString(24, "name"));
-}
-
-void BeingRecv::processGraffiti(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("graffiti id");
- const BeingId creatorId = msg.readBeingId("creator id");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int job = msg.readUInt8("job");
- msg.readUInt8("visible");
- msg.readUInt8("is content");
- const std::string text = msg.readString(80, "text");
-
- Being *const dstBeing = createBeing2(msg, id, job, BeingType::SKILL);
- if (dstBeing == nullptr)
- return;
-
- dstBeing->setAction(BeingAction::STAND, 0);
- dstBeing->setTileCoords(x, y);
- dstBeing->setShowName(true);
- dstBeing->setName(text);
- dstBeing->setCreatorId(creatorId);
-}
-
-void BeingRecv::processSkillDamage(Net::MessageIn &msg)
-{
- BLOCK_START("BeingRecv::processSkillDamage")
- if (actorManager == nullptr)
- {
- BLOCK_END("BeingRecv::processSkillDamage")
- return;
- }
-
- const int id = msg.readInt16("skill id");
- Being *const srcBeing = actorManager->findBeing(
- msg.readBeingId("src being id"));
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("dst being id"));
- msg.readInt32("tick");
- msg.readInt32("src speed");
- msg.readInt32("dst speed");
- int param1;
- if (msg.getVersion() >= 3)
- param1 = msg.readInt32("damage");
- else
- param1 = msg.readInt16("damage");
- const int level = msg.readInt16("skill level");
- msg.readInt16("div");
- msg.readUInt8("skill hit/type?");
- if (srcBeing != nullptr)
- srcBeing->handleSkill(dstBeing, param1, id, level);
- if (dstBeing != nullptr)
- dstBeing->takeDamage(srcBeing, param1, AttackType::SKILL, id, level);
- BLOCK_END("BeingRecv::processSkillDamage")
-}
-
-void BeingRecv::processNavigateTo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // 0 position
- // 1 no position
- // 3 monster
- msg.readUInt8("navigate type");
- msg.readUInt8("transportation flag");
- msg.readUInt8("hide window");
- msg.readString(16, "map name");
- msg.readInt16("x");
- msg.readInt16("y");
- msg.readInt16("mob id");
-}
-
-void BeingRecv::applyPlayerAction(Net::MessageIn &msg,
- Being *const being,
- const uint8_t type)
-{
- if (being == nullptr)
- return;
- switch (type)
- {
- case 0:
- being->setAction(BeingAction::STAND, 0);
- localPlayer->imitateAction(being, BeingAction::STAND);
- break;
-
- case 1:
- if (being->getCurrentAction() != BeingAction::DEAD)
- {
- being->setAction(BeingAction::DEAD, 0);
- being->recalcSpritesOrder();
- }
- break;
-
- case 2:
- being->setAction(BeingAction::SIT, 0);
- localPlayer->imitateAction(being, BeingAction::SIT);
- break;
-
- default:
- UNIMPLEMENTEDPACKETFIELD(type);
- break;
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h
deleted file mode 100644
index b70d1f7fb..000000000
--- a/src/net/eathena/beingrecv.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BEINGRECV_H
-#define NET_EATHENA_BEINGRECV_H
-
-#include "enums/net/beingtype.h"
-
-#include "enums/resources/skill/skilltype2.h"
-
-#include "enums/simpletypes/beingid.h"
-
-#if defined(__GXX_EXPERIMENTAL_CXX0X__)
-#if defined(__APPLE__)
-#include <tr1/cstdint>
-#endif // defined(__APPLE__)
-#endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
-
-#include "localconsts.h"
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-class Being;
-
-namespace EAthena
-{
- namespace BeingRecv
- {
- void processBeingChangeLook2(Net::MessageIn &msg);
- void processBeingChangeLookCards(Net::MessageIn &msg);
- void processBeingVisible(Net::MessageIn &msg);
- void processBeingMove(Net::MessageIn &msg);
- void processBeingSpawn(Net::MessageIn &msg);
- void processMapTypeProperty(Net::MessageIn &msg);
- void processMapType(Net::MessageIn &msg);
- void processSkillCasting(Net::MessageIn &msg);
- void processSkillCasting2(Net::MessageIn &msg);
- void processBeingStatusChange(Net::MessageIn &msg);
- void processBeingMove2(Net::MessageIn &msg);
- void processBeingAction2(Net::MessageIn &msg);
- void processMonsterHp(Net::MessageIn &msg);
- void processBeingHp(Net::MessageIn &msg);
- void processSkillAutoCast(Net::MessageIn &msg);
- void processRanksList(Net::MessageIn &msg);
- void processBeingChangeDirection(Net::MessageIn &msg);
- void processBeingChangeLookContinue(const Net::MessageIn &msg,
- Being *const dstBeing,
- const uint8_t type,
- const int id,
- const int id2,
- const int *const cards)
- A_NONNULL(2);
- void processBeingSpecialEffect(Net::MessageIn &msg);
- void processBeingSpecialEffectNum(Net::MessageIn &msg);
- void processBeingSoundEffect(Net::MessageIn &msg);
- void processSkillGroundNoDamage(Net::MessageIn &msg);
- void processSkillEntry(Net::MessageIn &msg);
- void processPlayerStatusChange(Net::MessageIn &msg);
- void processBeingResurrect(Net::MessageIn &msg);
- void processPlayerGuilPartyInfo(Net::MessageIn &msg);
- void processBeingRemoveSkill(Net::MessageIn &msg);
- void processBeingFakeName(Net::MessageIn &msg);
- void processBeingStatUpdate1(Net::MessageIn &msg);
- void processPlayerStatusChange2(Net::MessageIn &msg);
- void processBeingSelfEffect(Net::MessageIn &msg);
- void processMobInfo(Net::MessageIn &msg);
- void processBeingAttrs(Net::MessageIn &msg);
- void processMonsterInfo(Net::MessageIn &msg);
- void processClassChange(Net::MessageIn &msg);
- void processSpiritBalls(Net::MessageIn &msg);
- void processBladeStop(Net::MessageIn &msg);
- void processComboDelay(Net::MessageIn &msg);
- void processWddingEffect(Net::MessageIn &msg);
- void processBeingSlide(Net::MessageIn &msg);
- void processStarsKill(Net::MessageIn &msg);
- void processBlacksmithRanksList(Net::MessageIn &msg);
- void processAlchemistRanksList(Net::MessageIn &msg);
- void processTaekwonRanksList(Net::MessageIn &msg);
- void processPkRanksList(Net::MessageIn &msg);
- void processGladiatorFeelRequest(Net::MessageIn &msg);
- void processBossMapInfo(Net::MessageIn &msg);
- void processBeingFont(Net::MessageIn &msg);
- void processBeingMilleniumShield(Net::MessageIn &msg);
- void processBeingCharm(Net::MessageIn &msg);
- void processBeingViewEquipment(Net::MessageIn &msg);
- void processPvpSet(Net::MessageIn &msg);
- void processNameResponse2(Net::MessageIn &msg);
- void processSkillCancel(Net::MessageIn &msg);
- void processSolveCharName(Net::MessageIn &msg);
- void processGraffiti(Net::MessageIn &msg);
- void processSkillDamage(Net::MessageIn &msg);
- void processNavigateTo(Net::MessageIn &msg);
-
- Being *createBeing2(Net::MessageIn &msg,
- const BeingId id,
- const int32_t job,
- const BeingTypeT beingType);
- void applyPlayerAction(Net::MessageIn &msg,
- Being *const being,
- const uint8_t type);
- void processSkillCastingContinue(Net::MessageIn &msg,
- const BeingId srcId,
- const BeingId dstId,
- const int dstX,
- const int dstY,
- const int skillId,
- const int skillLevel,
- const int range,
- const SkillType2::SkillType2 inf2,
- const int castTime);
- } // namespace BeingRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_BEINGRECV_H
diff --git a/src/net/eathena/buyingstorehandler.cpp b/src/net/eathena/buyingstorehandler.cpp
deleted file mode 100644
index c4d172b89..000000000
--- a/src/net/eathena/buyingstorehandler.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/buyingstorehandler.h"
-
-#include "being/being.h"
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/shopitem.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-BuyingStoreHandler::BuyingStoreHandler()
-{
- buyingStoreHandler = this;
-}
-
-BuyingStoreHandler::~BuyingStoreHandler()
-{
- buyingStoreHandler = nullptr;
-}
-
-void BuyingStoreHandler::create(const std::string &name,
- const int maxMoney,
- const bool flag,
- const STD_VECTOR<ShopItem*> &items) const
-{
- if (packetVersion < 20100303)
- return;
- createOutPacket(CMSG_BUYINGSTORE_CREATE);
- outMsg.writeInt16(CAST_S16(89 + items.size() * 8), "len");
- outMsg.writeInt32(maxMoney, "limit money");
- outMsg.writeInt8(static_cast<int8_t>(flag), "flag");
- outMsg.writeString(name, 80, "store name");
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- const ShopItem *const item = *it;
- outMsg.writeInt16(CAST_S16(item->getId()), "item id");
- outMsg.writeInt16(CAST_S16(item->getQuantity()), "amount");
- outMsg.writeInt32(item->getPrice(), "price");
- }
-}
-
-void BuyingStoreHandler::close() const
-{
- if (packetVersion < 20100420)
- return;
- createOutPacket(CMSG_BUYINGSTORE_CLOSE);
- PlayerInfo::enableVending(false);
-}
-
-void BuyingStoreHandler::open(const Being *const being) const
-{
- if (being == nullptr)
- return;
- if (packetVersion < 20100420)
- return;
- createOutPacket(CMSG_BUYINGSTORE_OPEN);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void BuyingStoreHandler::sell(const Being *const being,
- const int storeId,
- const Item *const item,
- const int amount) const
-{
- if ((being == nullptr) || (item == nullptr))
- return;
- if (packetVersion < 20100420)
- return;
-
- createOutPacket(CMSG_BUYINGSTORE_SELL);
- outMsg.writeInt16(18, "len");
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt32(storeId, "store id");
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET),
- "index");
- outMsg.writeInt16(CAST_S16(item->getId()), "item id");
- outMsg.writeInt16(CAST_S16(amount), "amount");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/buyingstorehandler.h b/src/net/eathena/buyingstorehandler.h
deleted file mode 100644
index 8aed152c9..000000000
--- a/src/net/eathena/buyingstorehandler.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BUYINGSTOREHANDLER_H
-#define NET_EATHENA_BUYINGSTOREHANDLER_H
-
-#include "net/buyingstorehandler.h"
-
-namespace EAthena
-{
-class BuyingStoreHandler final : public Net::BuyingStoreHandler
-{
- public:
- BuyingStoreHandler();
-
- A_DELETE_COPY(BuyingStoreHandler)
-
- ~BuyingStoreHandler();
-
- void create(const std::string &name,
- const int maxMoney,
- const bool flag,
- const STD_VECTOR<ShopItem*> &items) const override final;
-
- void close() const override final;
-
- void open(const Being *const being) const override final;
-
- void sell(const Being *const being,
- const int storeId,
- const Item *const item,
- const int amount) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_BUYINGSTOREHANDLER_H
diff --git a/src/net/eathena/buyingstorerecv.cpp b/src/net/eathena/buyingstorerecv.cpp
deleted file mode 100644
index bf5d2032b..000000000
--- a/src/net/eathena/buyingstorerecv.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/buyingstorerecv.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/buyingstoreselldialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "listeners/arrowslistener.h"
-#include "listeners/buyingstoremodelistener.h"
-#include "listeners/buyingstoreslotslistener.h"
-
-#include "net/messagein.h"
-
-#include "resources/inventory/inventory.h"
-
-#include "resources/item/item.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void BuyingStoreRecv::processBuyingStoreOpen(Net::MessageIn &msg)
-{
- BuyingStoreSlotsListener::distributeEvent(msg.readUInt8("slots"));
-}
-
-void BuyingStoreRecv::processBuyingStoreCreateFailed(Net::MessageIn &msg)
-{
- const int16_t result = msg.readInt16("result");
- const int weight = msg.readInt32("weight");
- switch (result)
- {
- case 1:
- default:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_FAILED);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_CREATE_FAILED_WEIGHT,
- weight);
- break;
- case 8:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_EMPTY);
- break;
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreOwnItems(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 12) / 9;
- msg.readBeingId("account id");
- msg.readInt32("money limit");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("price");
- msg.readInt16("amount");
- msg.readUInt8("item type");
- msg.readInt16("item id");
- }
- PlayerInfo::enableVending(true);
- BuyingStoreModeListener::distributeEvent(true);
-}
-
-void BuyingStoreRecv::processBuyingStoreShowBoard(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("owner id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- {
- dstBeing->setBuyBoard(msg.readString(80, "shop name"));
- }
- else
- {
- msg.readString(80, "shop name");
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreHideBoard(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("owner id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- dstBeing->setBuyBoard(std::string());
- if (dstBeing == localPlayer)
- {
- PlayerInfo::enableVending(false);
- BuyingStoreModeListener::distributeEvent(false);
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreItemsList(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 16) / 9;
- const BeingId id = msg.readBeingId("account id");
- const int storeId = msg.readInt32("store id");
- // +++ in future need use it too
- msg.readInt32("money limit");
-
- const Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing == nullptr)
- return;
-
- SellDialog *const dialog = CREATEWIDGETR(BuyingStoreSellDialog,
- dstBeing->getId(),
- storeId);
- dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
- const Inventory *const inv = PlayerInfo::getInventory();
- for (int f = 0; f < count; f ++)
- {
- const int price = msg.readInt32("price");
- const int amount = msg.readInt16("amount");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const int itemId = msg.readInt16("item id");
-
- if (inv == nullptr)
- continue;
- const Item *const item = inv->findItem(itemId, ItemColor_one);
- if (item == nullptr)
- continue;
- // +++ need add colors support
- dialog->addItem(itemId, itemType, ItemColor_one, amount, price);
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreSellFailed(Net::MessageIn &msg)
-{
- const int16_t result = msg.readInt16("result");
- switch (result)
- {
- case 3:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELL_FAILED_MONEY_LIMIT);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED_EMPTY);
- break;
- default:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED);
- break;
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreSellerSellFailed(Net::MessageIn &msg)
-{
- const int16_t result = msg.readInt16("result");
- msg.readInt16("item id");
- switch (result)
- {
- case 5:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_DEAL);
- break;
- case 6:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_AMOUNT);
- break;
- case 7:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_BALANCE);
- break;
- default:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED);
- break;
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreReport(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("item id");
- msg.readInt16("amount");
- if (msg.getVersion() >= 20141016)
- {
- msg.readInt32("money");
- msg.readInt32("money limit");
- msg.readInt32("char id");
- msg.readInt32("date");
- }
- else
- {
- msg.readInt32("money limit");
- }
-}
-
-void BuyingStoreRecv::processBuyingStoreDeleteItem(Net::MessageIn &msg)
-{
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
- msg.readInt32("price");
-
- if (inventory != nullptr)
- {
- if (Item *const item = inventory->getItem(index))
- {
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- inventory->removeItemAt(index);
- ArrowsListener::distributeEvent();
- }
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/buyingstorerecv.h b/src/net/eathena/buyingstorerecv.h
deleted file mode 100644
index 15935c3b8..000000000
--- a/src/net/eathena/buyingstorerecv.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BUYINGSTORERECV_H
-#define NET_EATHENA_BUYINGSTORERECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace BuyingStoreRecv
- {
- void processBuyingStoreOpen(Net::MessageIn &msg);
-
- void processBuyingStoreCreateFailed(Net::MessageIn &msg);
-
- void processBuyingStoreOwnItems(Net::MessageIn &msg);
-
- void processBuyingStoreShowBoard(Net::MessageIn &msg);
-
- void processBuyingStoreHideBoard(Net::MessageIn &msg);
-
- void processBuyingStoreItemsList(Net::MessageIn &msg);
-
- void processBuyingStoreSellFailed(Net::MessageIn &msg);
-
- void processBuyingStoreReport(Net::MessageIn &msg);
-
- void processBuyingStoreDeleteItem(Net::MessageIn &msg);
-
- void processBuyingStoreSellerSellFailed(Net::MessageIn &msg);
- } // namespace BuyingStoreRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_BUYINGSTORERECV_H
diff --git a/src/net/eathena/buysellhandler.cpp b/src/net/eathena/buysellhandler.cpp
deleted file mode 100644
index 6858f0808..000000000
--- a/src/net/eathena/buysellhandler.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/buysellhandler.h"
-
-#include "net/ea/buysellrecv.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-BuySellHandler::BuySellHandler() :
- Ea::BuySellHandler()
-{
- buySellHandler = this;
- Ea::BuySellRecv::mBuyDialog = nullptr;
-}
-
-BuySellHandler::~BuySellHandler()
-{
- buySellHandler = nullptr;
-}
-
-void BuySellHandler::requestSellList(const std::string &nick A_UNUSED) const
-{
-}
-
-void BuySellHandler::requestBuyList(const std::string &nick A_UNUSED) const
-{
-}
-
-void BuySellHandler::sendBuyRequest(const std::string &nick A_UNUSED,
- const ShopItem *const item A_UNUSED,
- const int amount A_UNUSED) const
-{
-}
-
-void BuySellHandler::sendSellRequest(const std::string &nick A_UNUSED,
- const ShopItem *const item A_UNUSED,
- const int amount A_UNUSED) const
-{
-}
-
-void BuySellHandler::close() const
-{
- if (packetVersion < 20131218)
- return;
-
- createOutPacket(CMSG_NPC_SHOP_CLOSE);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/buysellhandler.h b/src/net/eathena/buysellhandler.h
deleted file mode 100644
index b7aea35c7..000000000
--- a/src/net/eathena/buysellhandler.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BUYSELLHANDLER_H
-#define NET_EATHENA_BUYSELLHANDLER_H
-
-#include "net/ea/buysellhandler.h"
-
-namespace EAthena
-{
-
-class BuySellHandler final : public Ea::BuySellHandler
-{
- public:
- BuySellHandler();
-
- A_DELETE_COPY(BuySellHandler)
-
- ~BuySellHandler();
-
- void requestSellList(const std::string &nick)
- const override final A_CONST;
-
- void requestBuyList(const std::string &nick)
- const override final A_CONST;
-
- void sendBuyRequest(const std::string &nick,
- const ShopItem *const item,
- const int amount) const override final A_CONST;
-
- void sendSellRequest(const std::string &nick,
- const ShopItem *const item,
- const int amount) const override final A_CONST;
-
- void close() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_BUYSELLHANDLER_H
diff --git a/src/net/eathena/buysellrecv.cpp b/src/net/eathena/buysellrecv.cpp
deleted file mode 100644
index db2b6a607..000000000
--- a/src/net/eathena/buysellrecv.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/buysellrecv.h"
-
-#include "notifymanager.h"
-
-#include "being/playerinfo.h"
-
-#include "const/resources/currency.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/buydialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/messagein.h"
-
-#include "net/ea/buysellrecv.h"
-
-#include "net/eathena/npcrecv.h"
-
-#include "resources/beinginfo.h"
-
-#include "resources/db/npcdb.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void BuySellRecv::processNpcBuy(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const int sz = 11;
- const int n_items = (msg.getLength() - 4) / sz;
-
- const BeingTypeId npcId = NpcRecv::mNpcTypeId;
- std::string currency;
-
- if (npcId != BeingTypeId_zero)
- {
- const BeingInfo *const info = NPCDB::get(npcId);
- if (info != nullptr)
- currency = info->getCurrency();
- else
- currency = DEFAULT_CURRENCY;
- }
- else
- {
- currency = DEFAULT_CURRENCY;
- }
-
- CREATEWIDGETV(Ea::BuySellRecv::mBuyDialog, BuyDialog,
- Ea::BuySellRecv::mNpcId,
- currency);
- Ea::BuySellRecv::mBuyDialog->setMoney(
- PlayerInfo::getAttribute(Attributes::MONEY));
-
- for (int k = 0; k < n_items; k++)
- {
- const int value = msg.readInt32("price");
- msg.readInt32("dc value?");
- const ItemTypeT type = static_cast<ItemTypeT>(
- msg.readUInt8("type"));
- const int itemId = msg.readInt16("item id");
- const ItemColor color = ItemColor_one;
- Ea::BuySellRecv::mBuyDialog->addItem(itemId, type, color, 0, value);
- }
- Ea::BuySellRecv::mBuyDialog->sort();
-}
-
-void BuySellRecv::processNpcSellResponse(Net::MessageIn &msg)
-{
- switch (msg.readUInt8("result"))
- {
- case 0:
- NotifyManager::notify(NotifyTypes::SOLD);
- break;
- case 1:
- default:
- NotifyManager::notify(NotifyTypes::SELL_FAILED);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::SELL_TRADE_FAILED);
- break;
- case 3:
- NotifyManager::notify(NotifyTypes::SELL_UNSELLABLE_FAILED);
- break;
- }
-}
-
-void BuySellRecv::processNpcBuyResponse(Net::MessageIn &msg)
-{
- const uint8_t response = msg.readUInt8("response");
- if (response == 0U)
- {
- NotifyManager::notify(NotifyTypes::BUY_DONE);
- return;
- }
- switch (response)
- {
- case 1:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_NO_MONEY);
- break;
-
- case 2:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_OVERWEIGHT);
- break;
-
- case 3:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_TOO_MANY_ITEMS);
- break;
-
- default:
- NotifyManager::notify(NotifyTypes::BUY_FAILED);
- break;
- };
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/buysellrecv.h b/src/net/eathena/buysellrecv.h
deleted file mode 100644
index 445fe35c6..000000000
--- a/src/net/eathena/buysellrecv.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_BUYSELLRECV_H
-#define NET_EATHENA_BUYSELLRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace BuySellRecv
- {
- void processNpcBuy(Net::MessageIn &msg);
- void processNpcSellResponse(Net::MessageIn &msg);
- void processNpcBuyResponse(Net::MessageIn &msg);
- } // namespace BuySellRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_BUYSELLRECV_H
diff --git a/src/net/eathena/cashshophandler.cpp b/src/net/eathena/cashshophandler.cpp
deleted file mode 100644
index 2e1e9cde4..000000000
--- a/src/net/eathena/cashshophandler.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/cashshophandler.h"
-
-#include "net/eathena/cashshoprecv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/shopitem.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-CashShopHandler::CashShopHandler() :
- Net::CashShopHandler()
-{
- cashShopHandler = this;
- CashShopRecv::mBuyDialog = nullptr;
-}
-
-CashShopHandler::~CashShopHandler()
-{
- cashShopHandler = nullptr;
-}
-
-void CashShopHandler::buyItem(const int points,
- const int itemId,
- const ItemColor color A_UNUSED,
- const int amount) const
-{
- if (packetVersion < 20101124)
- return;
- createOutPacket(CMSG_NPC_CASH_SHOP_BUY);
- outMsg.writeInt16(10 + 4, "len");
- outMsg.writeInt32(points, "points");
- outMsg.writeInt16(1, "count");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- outMsg.writeInt16(CAST_S16(itemId), "item id");
-}
-
-void CashShopHandler::buyItems(const int points,
- const STD_VECTOR<ShopItem*> &items) const
-{
- if (packetVersion < 20101124)
- return;
-
- int cnt = 0;
- const int pairSize = 4;
-
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- const ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- const ItemTypeT type = item->getType();
- if (usedQuantity == 0)
- continue;
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- cnt += item->getUsedQuantity();
- }
- else
- {
- cnt ++;
- }
- }
-
- if (cnt > 100)
- return;
-
- createOutPacket(CMSG_NPC_CASH_SHOP_BUY);
- outMsg.writeInt16(CAST_S16(10 + pairSize * cnt), "len");
- outMsg.writeInt32(points, "points");
- outMsg.writeInt16(CAST_S16(cnt), "count");
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- item->increaseQuantity(usedQuantity);
- item->increaseUsedQuantity(-usedQuantity);
- item->update();
- const ItemTypeT type = item->getType();
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- for (int f = 0; f < usedQuantity; f ++)
- {
- outMsg.writeInt16(CAST_S16(1), "amount");
- outMsg.writeInt16(CAST_S16(item->getId()),
- "item id");
- }
- }
- else
- {
- outMsg.writeInt16(CAST_S16(usedQuantity), "amount");
- outMsg.writeInt16(CAST_S16(item->getId()), "item id");
- }
- }
-}
-
-void CashShopHandler::close() const
-{
- if (packetVersion < 20110718)
- return;
- createOutPacket(CMSG_NPC_CASH_SHOP_CLOSE);
-}
-
-void CashShopHandler::requestPoints() const
-{
- if (packetVersion < 20110718)
- return;
- createOutPacket(CMSG_NPC_CASH_SHOP_OPEN);
-}
-
-void CashShopHandler::requestTab(const int tab) const
-{
- if (packetVersion < 20110718)
- return;
- createOutPacket(CMSG_NPC_CASH_SHOP_REQUEST_TAB);
- outMsg.writeInt16(CAST_S16(tab), "tab");
-}
-
-void CashShopHandler::schedule() const
-{
- if (packetVersion < 20110614)
- return;
- createOutPacket(CMSG_NPC_CASH_SHOP_SCHEDULE);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/cashshophandler.h b/src/net/eathena/cashshophandler.h
deleted file mode 100644
index 7294b5cae..000000000
--- a/src/net/eathena/cashshophandler.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CASHSHOPHANDLER_H
-#define NET_EATHENA_CASHSHOPHANDLER_H
-
-#include "net/cashshophandler.h"
-
-namespace EAthena
-{
-class CashShopHandler final : public Net::CashShopHandler
-{
- public:
- CashShopHandler();
-
- A_DELETE_COPY(CashShopHandler)
-
- ~CashShopHandler();
-
- void buyItem(const int points,
- const int itemId,
- const ItemColor color,
- const int amount) const override final;
-
- void buyItems(const int points,
- const STD_VECTOR<ShopItem*> &items) const override final
- A_CONST;
-
- void close() const override final;
-
- void requestPoints() const override final;
-
- void requestTab(const int tab) const override final;
-
- void schedule() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_CASHSHOPHANDLER_H
diff --git a/src/net/eathena/cashshoprecv.cpp b/src/net/eathena/cashshoprecv.cpp
deleted file mode 100644
index 421631ab6..000000000
--- a/src/net/eathena/cashshoprecv.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/cashshoprecv.h"
-
-#include "notifymanager.h"
-
-#include "const/resources/currency.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/buydialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/npcrecv.h"
-
-#include "resources/beinginfo.h"
-
-#include "resources/db/npcdb.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-namespace CashShopRecv
-{
- BuyDialog *mBuyDialog;
-} // namespace CashShopRecv
-
-void CashShopRecv::processCashShopOpen(Net::MessageIn &msg)
-{
- int count;
- if (packetVersion >= 20070711)
- count = (msg.readInt16("len") - 12) / 11;
- else
- count = (msg.readInt16("len") - 8) / 11;
-
- const BeingTypeId npcId = NpcRecv::mNpcTypeId;
- std::string currency;
-
- if (npcId != BeingTypeId_zero)
- {
- const BeingInfo *const info = NPCDB::get(npcId);
- if (info != nullptr)
- currency = info->getCurrency();
- else
- currency = DEFAULT_CURRENCY;
- }
- else
- {
- currency = DEFAULT_CURRENCY;
- }
- CREATEWIDGETV(mBuyDialog, BuyDialog,
- fromInt(BuyDialog::Cash, BeingId),
- currency);
- const int points = msg.readInt32("cash points");
-
- mBuyDialog->setMoney(points);
-
- if (packetVersion >= 20070711)
- msg.readInt32("kafra points");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("price");
- const int value = msg.readInt32("discount price");
- const ItemTypeT type = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const int itemId = msg.readInt16("item id");
- const ItemColor color = ItemColor_one;
- mBuyDialog->addItem(itemId, type, color, 0, value);
- }
- mBuyDialog->sort();
-}
-
-void CashShopRecv::processCashShopBuyAck(Net::MessageIn &msg)
-{
- msg.readInt32("cash points");
- if (packetVersion >= 20070711)
- msg.readInt32("kafra points");
- const uint16_t res = msg.readInt16("error");
- switch (res)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::BUY_DONE);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_NPC_NOT_FOUND);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_SYSTEM_ERROR);
- break;
- case 3:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_OVERWEIGHT);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::BUY_TRADE_FAILED);
- break;
- case 5:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_WRONG_ITEM);
- break;
- case 6:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_NO_MONEY);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(res);
- break;
- }
-}
-
-void CashShopRecv::processCashShopPoints(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("cash points");
- msg.readInt32("kafra points");
-}
-
-void CashShopRecv::processCashShopBuy(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("id");
- msg.readInt16("result");
- msg.readInt32("cash points");
- msg.readInt32("kafra points");
-}
-
-void CashShopRecv::processCashShopTabPriceList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 10) / 6;
- msg.readInt32("tab");
- const int itemsCount = msg.readInt16("count");
- if (count != itemsCount)
- logger->log("error: wrong list count");
-
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("item id");
- msg.readInt32("price");
- }
-}
-
-void CashShopRecv::processCashShopSchedule(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 8) / 6;
- const int itemsCount = msg.readInt16("count");
- msg.readInt16("tab");
- if (count != itemsCount)
- logger->log("error: wrong list count");
-
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("item id");
- msg.readInt32("price");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/cashshoprecv.h b/src/net/eathena/cashshoprecv.h
deleted file mode 100644
index 619474a6c..000000000
--- a/src/net/eathena/cashshoprecv.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CASHSHOPRECV_H
-#define NET_EATHENA_CASHSHOPRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-class BuyDialog;
-
-namespace EAthena
-{
- namespace CashShopRecv
- {
- extern BuyDialog *mBuyDialog;
- void processCashShopOpen(Net::MessageIn &msg);
- void processCashShopBuyAck(Net::MessageIn &msg);
- void processCashShopPoints(Net::MessageIn &msg);
- void processCashShopBuy(Net::MessageIn &msg);
- void processCashShopTabPriceList(Net::MessageIn &msg);
- void processCashShopSchedule(Net::MessageIn &msg);
- } // namespace CashShopRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_CASHSHOPRECV_H
diff --git a/src/net/eathena/charserverhandler.cpp b/src/net/eathena/charserverhandler.cpp
deleted file mode 100644
index 18273de0a..000000000
--- a/src/net/eathena/charserverhandler.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/charserverhandler.h"
-
-#include "gui/windows/charcreatedialog.h"
-
-#include "net/character.h"
-#include "net/serverfeatures.h"
-
-#include "net/ea/token.h"
-
-#include "net/eathena/charserverrecv.h"
-#include "net/eathena/loginhandler.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/network.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-namespace EAthena
-{
-
-extern ServerInfo charServer;
-extern ServerInfo mapServer;
-
-CharServerHandler::CharServerHandler() :
- Ea::CharServerHandler()
-{
- CharServerRecv::mNewName.clear();
- CharServerRecv::mPinSeed = 0;
- CharServerRecv::mPinAccountId = BeingId_zero;
- CharServerRecv::mRenameId = BeingId_zero;
- CharServerRecv::mNeedCreatePin = false;
-
- charServerHandler = this;
-}
-
-CharServerHandler::~CharServerHandler()
-{
- charServerHandler = nullptr;
-}
-
-void CharServerHandler::chooseCharacter(Net::Character *const character) const
-{
- if (character == nullptr)
- return;
-
- mSelectedCharacter = character;
- mCharSelectDialog = nullptr;
-
- createOutPacket(CMSG_CHAR_SELECT);
- outMsg.writeInt8(CAST_U8(
- mSelectedCharacter->slot), "slot");
-}
-
-void CharServerHandler::newCharacter(const std::string &name, const int slot,
- const GenderT gender,
- const int hairstyle, const int hairColor,
- const unsigned char race,
- const uint16_t look,
- const STD_VECTOR<int> &stats A_UNUSED)
- const
-{
- createOutPacket(CMSG_CHAR_CREATE);
- outMsg.writeString(name, 24, "login");
- if (serverVersion > 0)
- {
- outMsg.writeInt8(CAST_U8(slot), "slot");
- outMsg.writeInt16(CAST_S16(hairColor), "hair color");
- outMsg.writeInt16(CAST_S16(hairstyle), "hair style");
- if (serverFeatures->haveRaceSelection())
- outMsg.writeInt16(CAST_S16(race), "race");
- if (serverFeatures->haveCreateCharGender())
- {
- uint8_t sex = 0;
- if (gender == Gender::UNSPECIFIED)
- sex = 99;
- else
- sex = Being::genderToInt(gender);
- outMsg.writeInt8(sex, "gender");
- }
- if (serverFeatures->haveLookSelection())
- outMsg.writeInt16(CAST_S16(look), "look");
- }
- else
- {
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt8(CAST_U8(slot), "slot");
- outMsg.writeInt16(CAST_S16(hairColor), "hair color");
- outMsg.writeInt16(CAST_S16(hairstyle), "hair style");
- outMsg.writeInt16(CAST_S16(0), "starting job id");
- outMsg.writeInt16(0, "unknown");
- uint8_t sex = 0;
- if (gender == Gender::UNSPECIFIED)
- sex = 99;
- else
- sex = Being::genderToInt(gender);
- outMsg.writeInt8(sex, "gender");
- }
- else if (packetVersion >= 20120307)
- {
- outMsg.writeInt8(CAST_U8(slot), "slot");
- outMsg.writeInt16(CAST_S16(hairColor), "hair color");
- outMsg.writeInt16(CAST_S16(hairstyle), "hair style");
- }
- else
- { // < 20120307
- // +++ here need send stat points
- // sending 5 for each stat for now
- for (int i = 0; i < 6; i++)
- outMsg.writeInt8(CAST_U8(5), "stat");
-
- outMsg.writeInt8(CAST_U8(slot), "slot");
- outMsg.writeInt16(CAST_S16(hairColor), "hair color");
- outMsg.writeInt16(CAST_S16(hairstyle), "hair style");
- }
- }
-}
-
-void CharServerHandler::deleteCharacter(Net::Character *const character,
- const std::string &email) const
-{
- if (character == nullptr)
- return;
-
- mSelectedCharacter = character;
-
- createOutPacket(CMSG_CHAR_DELETE);
- outMsg.writeBeingId(mSelectedCharacter->dummy->getId(), "id?");
- if (email.empty())
- outMsg.writeString("a@a.com", 40, "email");
- else
- outMsg.writeString(email, 40, "email");
-}
-
-void CharServerHandler::switchCharacter() const
-{
- // This is really a map-server packet
- createOutPacket(CMSG_PLAYER_RESTART);
- outMsg.writeInt8(1, "flag");
-}
-
-void CharServerHandler::connect() const
-{
- const Token &token =
- static_cast<LoginHandler*>(loginHandler)->getToken();
-
- if (Network::mInstance == nullptr)
- return;
-
- Network::mInstance->disconnect();
- Network::mInstance->connect(charServer);
- createOutPacket(CMSG_CHAR_SERVER_CONNECT);
- outMsg.writeBeingId(token.account_ID, "account id");
- outMsg.writeInt32(token.session_ID1, "session id1");
- outMsg.writeInt32(token.session_ID2, "session id2");
- outMsg.writeInt16(CLIENT_PROTOCOL_VERSION, "client protocol version");
- outMsg.writeInt8(Being::genderToInt(token.sex), "gender");
-
- // We get 4 useless bytes before the real answer comes in (what are these?)
- Network::mInstance->skip(4);
-}
-
-void CharServerHandler::setCharCreateDialog(CharCreateDialog *const window)
- const
-{
- mCharCreateDialog = window;
-
- if (mCharCreateDialog == nullptr)
- return;
-
- StringVect attributes;
-
- const Token &token = static_cast<LoginHandler*>(loginHandler)->getToken();
-
- mCharCreateDialog->setAttributes(attributes, 0, 0, 0);
- mCharCreateDialog->setDefaultGender(token.sex);
-}
-
-void CharServerHandler::setNewPincode(const std::string &pin A_UNUSED) const
-{
-// here need ecript pin with mPinSeed and pin values.
-
-// createOutPacket(CMSG_CHAR_CREATE_PIN);
-// outMsg.writeBeingId(mPinAccountId, "account id");
-// outMsg.writeString(pin, 4, "encrypted pin");
-}
-
-void CharServerHandler::renameCharacter(const BeingId id,
- const std::string &newName) const
-{
- createOutPacket(CMSG_CHAR_CHECK_RENAME);
- CharServerRecv::mRenameId = id;
- CharServerRecv::mNewName = newName;
- outMsg.writeBeingId(id, "char id");
- outMsg.writeString(newName, 24, "name");
-}
-
-void CharServerHandler::changeSlot(const int oldSlot,
- const int newSlot) const
-{
- createOutPacket(CMSG_CHAR_CHANGE_SLOT);
- outMsg.writeInt16(CAST_S16(oldSlot), "old slot");
- outMsg.writeInt16(CAST_S16(newSlot), "new slot");
- outMsg.writeInt16(0, "unused");
-}
-
-void CharServerHandler::ping() const
-{
- createOutPacket(CMSG_CHAR_PING);
- outMsg.writeInt32(0, "unused");
-}
-
-unsigned int CharServerHandler::hatSprite() const
-{
- return 7;
-}
-
-bool CharServerHandler::isNeedCreatePin() const
-{
- return CharServerRecv::mNeedCreatePin;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/charserverhandler.h b/src/net/eathena/charserverhandler.h
deleted file mode 100644
index cef8f868e..000000000
--- a/src/net/eathena/charserverhandler.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CHARSERVERHANDLER_H
-#define NET_EATHENA_CHARSERVERHANDLER_H
-
-#include "net/ea/charserverhandler.h"
-
-namespace EAthena
-{
-
-/**
- * Deals with incoming messages from the character server.
- */
-class CharServerHandler final : public Ea::CharServerHandler
-{
- public:
- CharServerHandler();
-
- A_DELETE_COPY(CharServerHandler)
-
- ~CharServerHandler();
-
- void chooseCharacter(Net::Character *const character) const
- override final;
-
- void newCharacter(const std::string &name,
- const int slot,
- const GenderT gender,
- const int hairstyle,
- const int hairColor,
- const unsigned char race,
- const uint16_t look,
- const STD_VECTOR<int> &stats) const override final;
-
- void renameCharacter(const BeingId id,
- const std::string &newName) const override final;
-
- void deleteCharacter(Net::Character *const character,
- const std::string &email) const override final;
-
- void switchCharacter() const override final;
-
- void connect() const override final;
-
- bool isNeedCreatePin() const override final A_WARN_UNUSED;
-
- void setNewPincode(const std::string &pin) const override final
- A_CONST;
-
- /**
- * Sets the character create dialog. The handler will clean up this
- * dialog when a new character is successfully created, and will unlock
- * the dialog when a new character failed to be created.
- */
- void setCharCreateDialog(CharCreateDialog *const window) const
- override final;
-
- void changeSlot(const int oldSlot,
- const int newSlot) const override final;
-
- void ping() const override final;
-
- unsigned int hatSprite() const override final A_CONST A_WARN_UNUSED;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_CHARSERVERHANDLER_H
diff --git a/src/net/eathena/charserverrecv.cpp b/src/net/eathena/charserverrecv.cpp
deleted file mode 100644
index ec906f081..000000000
--- a/src/net/eathena/charserverrecv.cpp
+++ /dev/null
@@ -1,570 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/charserverrecv.h"
-
-#include "client.h"
-#include "configuration.h"
-#include "settings.h"
-
-#include "gui/windows/charcreatedialog.h"
-#include "gui/windows/charselectdialog.h"
-#include "gui/windows/okdialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/character.h"
-#include "net/charserverhandler.h"
-#include "net/playerhandler.h"
-
-#include "net/ea/token.h"
-
-#include "net/eathena/gamehandler.h"
-#include "net/eathena/loginhandler.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/network.h"
-#include "net/eathena/protocolout.h"
-#include "net/eathena/sprite.h"
-
-#include "resources/iteminfo.h"
-
-#include "resources/db/itemdb.h"
-
-#include "utils/dtor.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-extern ServerInfo charServer;
-extern ServerInfo mapServer;
-
-namespace CharServerRecv
-{
- std::string mNewName;
- uint32_t mPinSeed = 0;
- BeingId mPinAccountId = BeingId_zero;
- BeingId mRenameId = BeingId_zero;
- bool mNeedCreatePin = false;
-} // namespace CharServerRecv
-
-// callers must count each packet size by self
-void CharServerRecv::readPlayerData(Net::MessageIn &msg,
- Net::Character *const character)
-{
- if (character == nullptr)
- return;
-
- const Token &token =
- static_cast<LoginHandler*>(loginHandler)->getToken();
-
- LocalPlayer *const tempPlayer = new LocalPlayer(
- msg.readBeingId("player id"), BeingTypeId_zero);
- tempPlayer->setGender(token.sex);
-
- PlayerInfoBackend &data = character->data;
- if (packetVersion >= 20170830)
- data.mAttributes[Attributes::PLAYER_EXP] = msg.readInt64("exp");
- else
- data.mAttributes[Attributes::PLAYER_EXP] = msg.readInt32("exp");
- data.mAttributes[Attributes::MONEY] = msg.readInt32("money");
- if (packetVersion >= 20170830)
- {
- data.mAttributes[Attributes::PLAYER_JOB_EXP] =
- msg.readInt64("job exp");
- }
- else
- {
- data.mAttributes[Attributes::PLAYER_JOB_EXP] =
- msg.readInt32("job exp");
- }
- data.mAttributes[Attributes::PLAYER_JOB_LEVEL] =
- msg.readInt32("job level");
-
- msg.readInt16("shoes?");
- const int gloves = msg.readInt16("gloves");
- const int cape = msg.readInt16("cape");
- const int misc1 = msg.readInt16("misc1");
-
- msg.readInt32("option");
- tempPlayer->setKarma(msg.readInt32("karma"));
- tempPlayer->setManner(msg.readInt32("manner"));
- msg.readInt16("left points");
-
- if (packetVersion >= 20081217)
- {
- data.mAttributes[Attributes::PLAYER_HP] = msg.readInt32("hp");
- data.mAttributes[Attributes::PLAYER_MAX_HP] = msg.readInt32("max hp");
- }
- else
- {
- data.mAttributes[Attributes::PLAYER_HP] = msg.readInt16("hp");
- data.mAttributes[Attributes::PLAYER_MAX_HP] = msg.readInt16("max hp");
- }
- data.mAttributes[Attributes::PLAYER_MP] = msg.readInt16("mp/sp");
- data.mAttributes[Attributes::PLAYER_MAX_MP] = msg.readInt16("max mp/sp");
-
- msg.readInt16("speed");
- const uint16_t race = msg.readInt16("class");
-// tempPlayer->setSubtype(race, 0);
- const int hairStyle = msg.readInt16("hair style");
- if (packetVersion >= 20141022)
- msg.readInt16("body");
- const int option A_UNUSED = (msg.readInt16("weapon") | 1) ^ 1;
- const int weapon = 0;
-
- tempPlayer->setSpriteId(SPRITE_BODY,
- weapon);
- tempPlayer->setWeaponId(weapon);
-
- data.mAttributes[Attributes::PLAYER_BASE_LEVEL] = msg.readInt16("level");
-
- msg.readInt16("skill points");
- const int bottomClothes = msg.readInt16("head bottom");
- const int shield = msg.readInt16("shild");
- const int hat = msg.readInt16("head top");
- const int topClothes = msg.readInt16("head mid");
-
- const ItemColor color = fromInt(msg.readInt16("hair color"), ItemColor);
- tempPlayer->setHairColor(color);
- if (hairStyle == 0)
- {
- tempPlayer->unSetSprite(SPRITE_HAIR_COLOR);
- }
- else
- {
- tempPlayer->setSpriteColor(SPRITE_HAIR_COLOR,
- hairStyle * -1,
- ItemDB::get(-hairStyle).getDyeColorsString(
- color));
- }
-
- const uint16_t look = msg.readInt16("clothes color");
- tempPlayer->setSubtype(fromInt(race, BeingTypeId), look);
- tempPlayer->setName(msg.readString(24, "name"));
-
- character->dummy = tempPlayer;
-
- character->data.mStats[Attributes::PLAYER_STR].base = msg.readUInt8("str");
- character->data.mStats[Attributes::PLAYER_AGI].base = msg.readUInt8("agi");
- character->data.mStats[Attributes::PLAYER_VIT].base = msg.readUInt8("vit");
- character->data.mStats[Attributes::PLAYER_INT].base = msg.readUInt8("int");
- character->data.mStats[Attributes::PLAYER_DEX].base = msg.readUInt8("dex");
- character->data.mStats[Attributes::PLAYER_LUK].base = msg.readUInt8("luk");
-
- character->slot = msg.readInt16("character slot id");
- if (packetVersion >= 20061023)
- msg.readInt16("rename");
- if (packetVersion >= 20100803)
- {
- msg.readString(16, "map name");
- msg.readInt32("delete date");
- }
- int shoes = 0;
- if (packetVersion >= 20110111)
- shoes = msg.readInt32("robe");
- if (serverVersion == 0)
- {
- tempPlayer->setSpriteId(SPRITE_HAIR,
- shoes);
- tempPlayer->setSpriteId(SPRITE_SHOES,
- gloves);
- tempPlayer->setSpriteId(SPRITE_SHIELD,
- cape);
- tempPlayer->setSpriteId(SPRITE_HEAD_TOP,
- misc1);
- tempPlayer->setSpriteId(SPRITE_WEAPON,
- bottomClothes);
- tempPlayer->setSpriteId(SPRITE_FLOOR,
- shield);
- tempPlayer->setSpriteId(SPRITE_CLOTHES_COLOR,
- hat);
- tempPlayer->setSpriteId(SPRITE_HEAD_BOTTOM,
- topClothes);
-// tempPlayer->setSprite(SPRITE_HEAD_MID, misc2);
- }
- if (packetVersion >= 20110928)
- msg.readInt32("slot change");
- if (packetVersion >= 20111025)
- tempPlayer->setRename(msg.readInt32("rename (inverse)") != 0);
- uint8_t gender = 99U;
- if (packetVersion >= 20141016)
- gender = CAST_U8(msg.readUInt8("gender"));
- if (gender != 99)
- tempPlayer->setGender(Being::intToGender(gender));
-}
-
-void CharServerRecv::processCharLogin(Net::MessageIn &msg)
-{
- msg.skip(2, "packet len");
- int slots = 9;
- int offset = 0;
- if (packetVersion >= 20100413)
- {
- slots = msg.readInt8("MAX_CHARS");
- msg.readInt8("sd->char_slots");
- msg.readInt8("MAX_CHARS");
- offset = 3;
- }
- loginData.characterSlots = CAST_U16(slots);
-
- msg.skip(20, "unused 0");
-
- delete_all(Net::CharServerHandler::mCharacters);
- Net::CharServerHandler::mCharacters.clear();
-
- // Derive number of characters from message length
- const int count = (msg.getLength() - 24 - offset)
- / (106 + 4 + 2 + 16 + 4 + 4 + 4 + 4);
-
- for (int i = 0; i < count; ++i)
- {
- Net::Character *const character = new Net::Character;
- readPlayerData(msg, character);
- Net::CharServerHandler::mCharacters.push_back(character);
- if (character->dummy != nullptr)
- {
- logger->log("CharServer: Player: %s (%d)",
- character->dummy->getName().c_str(), character->slot);
- }
- }
-
- client->setState(State::CHAR_SELECT);
-}
-
-void CharServerRecv::processCharLogin2(Net::MessageIn &msg)
-{
- // ignored
- msg.readInt16("len");
- msg.readUInt8("char slots");
- msg.readUInt8("left slots");
- msg.readUInt8("left slots");
- msg.readUInt8("char slots");
- msg.readUInt8("char slots");
- msg.skip(20, "unused");
-}
-
-void CharServerRecv::processCharMapInfo(Net::MessageIn &restrict msg)
-{
- Network *const network = Network::mInstance;
- ServerInfo &server = mapServer;
- BLOCK_START("CharServerRecv::processCharMapInfo")
- PlayerInfo::setCharId(msg.readInt32("char id"));
- GameHandler::setMap(msg.readString(16, "map name"));
- if (config.getBoolValue("usePersistentIP") || settings.persistentIp)
- {
- msg.readInt32("map ip address");
- server.hostname = settings.serverName;
- }
- else
- {
- server.hostname = ipToString(msg.readInt32("map ip address"));
- }
- server.port = msg.readInt16("map ip port");
- if (msg.getVersion() >= 20170329)
- {
- for (int f = 0; f < 32; f ++)
- msg.readInt32("unused");
- }
-
- // Prevent the selected local player from being deleted
- localPlayer = Net::CharServerHandler::mSelectedCharacter->dummy;
- PlayerInfo::setBackend(Net::CharServerHandler::mSelectedCharacter->data);
- PlayerInfo::setStatBase(Attributes::PLAYER_WALK_SPEED,
- playerHandler->getDefaultWalkSpeed());
-
- Net::CharServerHandler::mSelectedCharacter->dummy = nullptr;
-
- charServerHandler->clear();
- Net::CharServerHandler::updateCharSelectDialog();
-
- if (network != nullptr)
- network->disconnect();
- client->setState(State::CONNECT_GAME);
- BLOCK_END("CharServerRecv::processCharMapInfo")
-}
-
-void CharServerRecv::processChangeMapServer(Net::MessageIn &msg)
-{
- Network *const network = Network::mInstance;
- ServerInfo &server = mapServer;
- BLOCK_START("CharServerRecv::processChangeMapServer")
- if (network == nullptr)
- {
- BLOCK_END("CharServerRecv::processChangeMapServer")
- return;
- }
- GameHandler::setMap(msg.readString(16, "map name"));
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- if (config.getBoolValue("usePersistentIP") || settings.persistentIp)
- {
- msg.readInt32("host");
- server.hostname = settings.serverName;
- }
- else
- {
- server.hostname = ipToString(msg.readInt32("host"));
- }
- server.port = msg.readInt16("port");
-
- network->disconnect();
- client->setState(State::CHANGE_MAP);
- if (localPlayer != nullptr)
- {
- localPlayer->setTileCoords(x, y);
- localPlayer->setMap(nullptr);
- }
- BLOCK_END("CharServerRecv::processChangeMapServer")
-}
-
-void CharServerRecv::processPincodeStatus(Net::MessageIn &msg)
-{
- mPinSeed = msg.readInt32("pincode seed");
- mPinAccountId = msg.readBeingId("account id");
- const uint16_t state = CAST_U16(msg.readInt16("state"));
- switch (state)
- {
- case 0: // pin ok
- break;
- case 1: // ask for pin
- break;
- case 2: // create new pin
- case 4: // create new pin?
- {
- mNeedCreatePin = true;
- break;
- }
- case 3: // pin must be changed
- break;
- case 5: // client show error?
- break;
- case 6: // Unable to use your KSSN number
- break;
- case 7: // char select window shows a button
- break;
- case 8: // pincode was incorrect
- break;
- default:
- UNIMPLEMENTEDPACKET;
- break;
- }
-}
-
-void CharServerRecv::processCharCreate(Net::MessageIn &msg)
-{
- BLOCK_START("CharServerRecv::processCharCreate")
- Net::Character *const character = new Net::Character;
- readPlayerData(msg, character);
- Net::CharServerHandler::mCharacters.push_back(character);
-
- Net::CharServerHandler::updateCharSelectDialog();
-
- // Close the character create dialog
- Net::CharServerHandler::mCharCreateDialog->scheduleDelete();
- Net::CharServerHandler::mCharCreateDialog = nullptr;
- BLOCK_END("CharServerRecv::processCharCreate")
-}
-
-void CharServerRecv::processCharCheckRename(Net::MessageIn &msg)
-{
- if (msg.readInt16("flag") != 0)
- {
- createOutPacket(CMSG_CHAR_RENAME);
- outMsg.writeBeingId(mRenameId, "char id");
- }
- else
- {
- CREATEWIDGET(OkDialog,
- // TRANSLATORS: error header
- _("Error"),
- // TRANSLATORS: error message
- _("Character rename error."),
- // TRANSLATORS: ok dialog button
- _("Error"),
- DialogType::ERROR,
- Modal_true,
- ShowCenter_true,
- nullptr,
- 260);
- }
-}
-
-void CharServerRecv::processCharRename(Net::MessageIn &msg)
-{
- const int flag = msg.readInt16("flag");
- if (flag == 0)
- {
- Net::CharServerHandler::mCharSelectDialog->setName(
- mRenameId,
- mNewName);
- CREATEWIDGET(OkDialog,
- // TRANSLATORS: info header
- _("Info"),
- // TRANSLATORS: info message
- _("Character renamed."),
- // TRANSLATORS: ok dialog button
- _("OK"),
- DialogType::OK,
- Modal_true,
- ShowCenter_true,
- nullptr,
- 260);
- }
- else
- {
- std::string message;
- switch (flag)
- {
- case 1:
- // TRANSLATORS: char rename error
- message = _("Rename not allowed.");
- break;
- case 2:
- // TRANSLATORS: char rename error
- message = _("New name is not set.");
- break;
- case 3:
- default:
- // TRANSLATORS: char rename error
- message = _("Character rename error.");
- break;
- case 4:
- // TRANSLATORS: char rename error
- message = _("Character not found.");
- break;
- }
- CREATEWIDGET(OkDialog,
- // TRANSLATORS: info message
- _("Info"),
- message,
- // TRANSLATORS: ok dialog button
- _("OK"),
- DialogType::OK,
- Modal_true,
- ShowCenter_true,
- nullptr,
- 260);
- }
-}
-
-void CharServerRecv::processCharChangeSlot(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("len");
- msg.readInt16("flag"); // 0 - ok, 1 - error
- msg.readInt16("unused");
-}
-
-void CharServerRecv::processCharDeleteFailed(Net::MessageIn &msg)
-{
- BLOCK_START("CharServerRecv::processCharDeleteFailed")
- Net::CharServerHandler::unlockCharSelectDialog();
- msg.readUInt8("error");
- CREATEWIDGET(OkDialog,
- // TRANSLATORS: error header
- _("Error"),
- // TRANSLATORS: error message
- _("Failed to delete character."),
- // TRANSLATORS: ok dialog button
- _("OK"),
- DialogType::ERROR,
- Modal_true,
- ShowCenter_true,
- nullptr,
- 260);
- BLOCK_END("CharServerRecv::processCharDeleteFailed")
-}
-
-void CharServerRecv::processCharCaptchaNotSupported(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("5");
- msg.readUInt8("1");
-}
-
-void CharServerRecv::processCharDelete2Ack(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("char id");
- msg.readInt32("result");
- // for packets before 20130000, this is raw time
- // in other case raw time - time(NULL)
- msg.readInt32("time");
-}
-
-void CharServerRecv::processCharDelete2AcceptActual(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("char id");
- msg.readInt32("result");
-}
-
-void CharServerRecv::processCharDelete2CancelAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("char id");
- msg.readInt32("result");
-}
-
-void CharServerRecv::processCharCharacters(Net::MessageIn &msg)
-{
- msg.skip(2, "packet len");
-
- delete_all(Net::CharServerHandler::mCharacters);
- Net::CharServerHandler::mCharacters.clear();
-
- // Derive number of characters from message length
- const int count = (msg.getLength() - 4)
- / (106 + 4 + 2 + 16 + 4 + 4 + 4 + 4);
-
- for (int i = 0; i < count; ++i)
- {
- Net::Character *const character = new Net::Character;
- readPlayerData(msg, character);
- Net::CharServerHandler::mCharacters.push_back(character);
- if (character->dummy != nullptr)
- {
- logger->log("CharServer: Player: %s (%d)",
- character->dummy->getName().c_str(), character->slot);
- }
- }
-
- client->setState(State::CHAR_SELECT);
-}
-
-void CharServerRecv::processCharBanCharList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 4) / 24;
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("char id");
- msg.readString(20, "unbun time");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/charserverrecv.h b/src/net/eathena/charserverrecv.h
deleted file mode 100644
index df37ed363..000000000
--- a/src/net/eathena/charserverrecv.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CHARSERVERRECV_H
-#define NET_EATHENA_CHARSERVERRECV_H
-
-#include "enums/simpletypes/beingid.h"
-
-#include <string>
-
-namespace Net
-{
- class MessageIn;
-
- struct Character;
-} // namespace Net
-
-namespace EAthena
-{
- namespace CharServerRecv
- {
- extern std::string mNewName;
- extern uint32_t mPinSeed;
- extern BeingId mPinAccountId;
- extern BeingId mRenameId;
- extern bool mNeedCreatePin;
-
- void readPlayerData(Net::MessageIn &msg,
- Net::Character *const character);
- void processPincodeStatus(Net::MessageIn &msg);
- void processCharLogin2(Net::MessageIn &msg);
- void processCharCreate(Net::MessageIn &msg);
- void processCharCheckRename(Net::MessageIn &msg);
- void processCharRename(Net::MessageIn &msg);
- void processCharChangeSlot(Net::MessageIn &msg);
- void processCharDeleteFailed(Net::MessageIn &msg);
- void processCharCaptchaNotSupported(Net::MessageIn &msg);
- void processCharDelete2Ack(Net::MessageIn &msg);
- void processCharDelete2AcceptActual(Net::MessageIn &msg);
- void processCharDelete2CancelAck(Net::MessageIn &msg);
- void processCharCharacters(Net::MessageIn &msg);
- void processCharBanCharList(Net::MessageIn &msg);
- void processCharLogin(Net::MessageIn &msg);
- void processCharMapInfo(Net::MessageIn &msg);
- void processChangeMapServer(Net::MessageIn &msg);
- } // namespace CharServerRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_CHARSERVERRECV_H
diff --git a/src/net/eathena/chathandler.cpp b/src/net/eathena/chathandler.cpp
deleted file mode 100644
index 6b8e0517b..000000000
--- a/src/net/eathena/chathandler.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/chathandler.h"
-
-#include "being/localplayer.h"
-
-#include "net/serverfeatures.h"
-
-#include "net/ea/chatrecv.h"
-
-#include "net/eathena/chatrecv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "resources/chatobject.h"
-
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-ChatHandler::ChatHandler() :
- Ea::ChatHandler()
-{
- chatHandler = this;
-}
-
-ChatHandler::~ChatHandler()
-{
- chatHandler = nullptr;
-}
-
-void ChatHandler::talk(const std::string &restrict text,
- const std::string &restrict channel A_UNUSED) const
-{
- if (localPlayer == nullptr)
- return;
-
- const std::string mes = std::string(localPlayer->getName()).append(
- " : ").append(text);
-
- createOutPacket(CMSG_CHAT_MESSAGE);
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt16(CAST_S16(mes.length() + 4), "len");
- outMsg.writeString(mes, CAST_S32(mes.length()), "message");
- }
- else
- {
- // Added + 1 in order to let eAthena parse admin commands correctly
- outMsg.writeInt16(CAST_S16(mes.length() + 4 + 1), "len");
- outMsg.writeString(mes, CAST_S32(mes.length() + 1), "message");
- }
-}
-
-void ChatHandler::talkRaw(const std::string &mes) const
-{
- createOutPacket(CMSG_CHAT_MESSAGE);
- outMsg.writeInt16(CAST_S16(mes.length() + 4), "len");
- outMsg.writeString(mes, CAST_S32(mes.length()), "message");
-}
-
-void ChatHandler::privateMessage(const std::string &restrict recipient,
- const std::string &restrict text) const
-{
- createOutPacket(CMSG_CHAT_WHISPER);
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt16(CAST_S16(text.length() + 28), "len");
- outMsg.writeString(recipient, 24, "recipient nick");
- outMsg.writeString(text, CAST_S32(text.length()), "message");
- }
- else
- {
- outMsg.writeInt16(CAST_S16(text.length() + 28 + 1), "len");
- outMsg.writeString(recipient, 24, "recipient nick");
- outMsg.writeString(text, CAST_S32(text.length()), "message");
- outMsg.writeInt8(0, "null char");
- }
- Ea::ChatRecv::mSentWhispers.push(recipient);
-}
-
-void ChatHandler::channelMessage(const std::string &restrict channel,
- const std::string &restrict text) const
-{
- privateMessage(channel, text);
-}
-
-void ChatHandler::who() const
-{
- createOutPacket(CMSG_WHO_REQUEST);
-}
-
-void ChatHandler::sendRaw(const std::string &args) const
-{
- std::string line = args;
- std::string str;
- MessageOut *outMsg = nullptr;
-
- if (line.empty())
- return;
-
- size_t pos = line.find(' ');
- if (pos != std::string::npos)
- {
- str = line.substr(0, pos);
-
- const int16_t id = CAST_S16(parseNumber(str));
- outMsg = new MessageOut(id);
- outMsg->writeInt16(id, "packet id");
- line = line.substr(pos + 1);
- pos = line.find(' ');
- }
- else
- {
- const int16_t id = CAST_S16(parseNumber(line));
- outMsg = new MessageOut(id);
- outMsg->writeInt16(id, "packet id");
- delete outMsg;
- return;
- }
-
- while (pos != std::string::npos)
- {
- str = line.substr(0, pos);
- processRaw(*outMsg, str);
- line = line.substr(pos + 1);
- pos = line.find(' ');
- }
- if (!line.empty())
- processRaw(*outMsg, line);
- delete outMsg;
-}
-
-void ChatHandler::processRaw(MessageOut &restrict outMsg,
- const std::string &restrict line)
-{
- if (line.size() < 2)
- return;
-
- const uint32_t i = parseNumber(line.substr(1));
- switch (tolower(line[0]))
- {
- case 'b':
- {
- outMsg.writeInt8(CAST_U8(i), "raw");
- break;
- }
- case 'w':
- {
- outMsg.writeInt16(CAST_S16(i), "raw");
- break;
- }
- case 'l':
- {
- outMsg.writeInt32(CAST_S32(i), "raw");
- break;
- }
- default:
- break;
- }
-}
-
-void ChatHandler::ignoreAll() const
-{
- createOutPacket(CMSG_IGNORE_ALL);
- outMsg.writeInt8(0, "flag");
-}
-
-void ChatHandler::unIgnoreAll() const
-{
- createOutPacket(CMSG_IGNORE_ALL);
- outMsg.writeInt8(1, "flag");
-}
-
-
-void ChatHandler::ignore(const std::string &nick) const
-{
- createOutPacket(CMSG_IGNORE_NICK);
- outMsg.writeString(nick, 24, "nick");
- outMsg.writeInt8(0, "flag");
-}
-
-void ChatHandler::unIgnore(const std::string &nick) const
-{
- createOutPacket(CMSG_IGNORE_NICK);
- outMsg.writeString(nick, 24, "nick");
- outMsg.writeInt8(1, "flag");
-}
-
-void ChatHandler::requestIgnoreList() const
-{
- createOutPacket(CMSG_REQUEST_IGNORE_LIST);
-}
-
-void ChatHandler::createChatRoom(const std::string &title,
- const std::string &password,
- const int limit,
- const bool isPublic) const
-{
- createOutPacket(CMSG_CREAYE_CHAT_ROOM);
- outMsg.writeInt16(CAST_S16(
- 7 + 8 + 36), "len");
- outMsg.writeInt16(CAST_S16(limit), "limit");
- outMsg.writeInt8(CAST_S8(isPublic ? 1 : 0), "public");
- outMsg.writeString(password, 8, "password");
- outMsg.writeString(title, 36, "title");
- ChatRecv::mChatRoom = title;
-}
-
-void ChatHandler::battleTalk(const std::string &text) const
-{
- if (localPlayer == nullptr)
- return;
-
- const std::string mes = std::string(localPlayer->getName()).append(
- " : ").append(text);
-
- createOutPacket(CMSG_BATTLE_CHAT_MESSAGE);
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt16(CAST_S16(mes.length() + 4), "len");
- outMsg.writeString(mes, CAST_S32(mes.length()), "message");
- }
- else
- {
- // Added + 1 in order to let eAthena parse admin commands correctly
- outMsg.writeInt16(CAST_S16(mes.length() + 4 + 1), "len");
- outMsg.writeString(mes, CAST_S32(mes.length() + 1), "message");
- }
-}
-
-void ChatHandler::joinChat(const ChatObject *const chat,
- const std::string &password) const
-{
- if (chat == nullptr)
- return;
-
- createOutPacket(CMSG_CHAT_ROOM_JOIN);
- outMsg.writeInt32(chat->chatId, "chat id");
- outMsg.writeString(password, 8, "password");
-}
-
-void ChatHandler::joinChannel(const std::string &channel) const
-{
- if (serverFeatures->haveJoinChannel())
- {
- createOutPacket(CMSG_CHAT_JOIN_CHANNEL);
- outMsg.writeString(channel, 24, "channel name");
- }
- else
- {
- channelMessage(channel, "\302\202\302");
- }
-}
-
-void ChatHandler::partChannel(const std::string &channel) const
-{
- if (serverFeatures->haveJoinChannel())
- {
- createOutPacket(CMSG_CHAT_PART_CHANNEL);
- outMsg.writeString(channel, 24, "channel name");
- }
-}
-
-void ChatHandler::talkPet(const std::string &restrict text,
- const std::string &restrict channel A_UNUSED) const
-{
- if (text.empty())
- return;
- std::string msg = text;
- if (msg.size() > 500)
- msg = msg.substr(0, 500);
- const size_t sz = msg.size();
-
- createOutPacket(CMSG_PET_TALK);
- outMsg.writeInt16(CAST_S16(sz + 4 + 1), "len");
- outMsg.writeString(msg, CAST_S32(sz), "message");
- outMsg.writeInt8(0, "zero byte");
-}
-
-void ChatHandler::leaveChatRoom() const
-{
- createOutPacket(CMSG_LEAVE_CHAT_ROOM);
-}
-
-void ChatHandler::setChatRoomOptions(const int limit,
- const bool isPublic,
- const std::string &password,
- const std::string &title) const
-{
- createOutPacket(CMSG_SET_CHAT_ROOM_OPTIONS);
- const int sz = CAST_S32(title.size());
- outMsg.writeInt16(CAST_S16(15 + sz), "len");
- outMsg.writeInt16(CAST_S16(limit), "limit");
- outMsg.writeInt8(CAST_S8(isPublic ? 1 : 0), "type");
- outMsg.writeString(password, 8, "password");
- outMsg.writeString(title, sz, "title");
-}
-
-void ChatHandler::setChatRoomOwner(const std::string &nick) const
-{
- createOutPacket(CMSG_SET_CHAT_ROOM_OWNER);
- outMsg.writeInt32(0, "role (unused)");
- outMsg.writeString(nick, 24, "nick");
-}
-
-void ChatHandler::kickFromChatRoom(const std::string &nick) const
-{
- createOutPacket(CMSG_KICK_FROM_CHAT_ROOM);
- outMsg.writeString(nick, 24, "nick");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/chathandler.h b/src/net/eathena/chathandler.h
deleted file mode 100644
index 685327cd3..000000000
--- a/src/net/eathena/chathandler.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CHATHANDLER_H
-#define NET_EATHENA_CHATHANDLER_H
-
-#include "net/ea/chathandler.h"
-
-namespace EAthena
-{
-class MessageOut;
-
-class ChatHandler final : public Ea::ChatHandler
-{
- public:
- ChatHandler();
-
- A_DELETE_COPY(ChatHandler)
-
- ~ChatHandler();
-
- void talk(const std::string &restrict text,
- const std::string &restrict channel) const override final;
-
- void talkRaw(const std::string &text) const override final;
-
- void privateMessage(const std::string &restrict recipient,
- const std::string &restrict text) const
- override final;
-
- void channelMessage(const std::string &restrict channel,
- const std::string &restrict text) const
- override final;
-
- void joinChannel(const std::string &channel) const override final;
-
- void who() const override final;
-
- void sendRaw(const std::string &args) const override final;
-
- void ignoreAll() const override final;
-
- void unIgnoreAll() const override final;
-
- void createChatRoom(const std::string &title,
- const std::string &password,
- const int limit,
- const bool isPublic) const override final;
-
- void ignore(const std::string &nick) const override final;
-
- void unIgnore(const std::string &nick) const override final;
-
- void requestIgnoreList() const override final;
-
- void battleTalk(const std::string &text) const override final;
-
- void joinChat(const ChatObject *const chat,
- const std::string &password) const override final;
-
- void partChannel(const std::string &channel) const override final;
-
- void talkPet(const std::string &restrict text,
- const std::string &restrict channel) const override final;
-
- void leaveChatRoom() const override final;
-
- void setChatRoomOptions(const int limit,
- const bool isPublic,
- const std::string &password,
- const std::string &title) const override final;
-
- void setChatRoomOwner(const std::string &nick) const override final;
-
- void kickFromChatRoom(const std::string &nick) const override final;
-
- protected:
- static void processRaw(MessageOut &restrict outMsg,
- const std::string &restrict line);
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_CHATHANDLER_H
diff --git a/src/net/eathena/chatrecv.cpp b/src/net/eathena/chatrecv.cpp
deleted file mode 100644
index 97f0de803..000000000
--- a/src/net/eathena/chatrecv.cpp
+++ /dev/null
@@ -1,768 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/chatrecv.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-#include "being/playerrelation.h"
-#include "being/playerrelations.h"
-
-#include "const/gui/chat.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/chatwindow.h"
-
-#include "gui/widgets/tabs/chat/chattab.h"
-
-#include "net/messagein.h"
-
-#include "net/ea/chatrecv.h"
-
-#include "net/eathena/mercenaryrecv.h"
-
-#include "resources/chatobject.h"
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace ChatRecv
-{
- std::string mChatRoom;
-} // namespace ChatRecv
-
-void ChatRecv::processIgnoreNickAck(Net::MessageIn &msg)
-{
- const int type = msg.readUInt8("type");
- const int flag = msg.readUInt8("flag");
- switch (type)
- {
- case 0:
- switch (flag)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::IGNORE_PLAYER_SUCCESS);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::IGNORE_PLAYER_FAILURE);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::IGNORE_PLAYER_TOO_MANY);
- break;
- default:
- NotifyManager::notify(NotifyTypes::IGNORE_PLAYER_UNKNOWN);
- break;
- }
- break;
- case 1:
- switch (flag)
- {
- case 0:
- NotifyManager::notify(
- NotifyTypes::UNIGNORE_PLAYER_SUCCESS);
- break;
- case 1:
- NotifyManager::notify(
- NotifyTypes::UNIGNORE_PLAYER_FAILURE);
- break;
- default:
- NotifyManager::notify(
- NotifyTypes::UNIGNORE_PLAYER_UNKNOWN);
- break;
- }
- break;
-
- default:
- NotifyManager::notify(NotifyTypes::IGNORE_PLAYER_TYPE_UNKNOWN);
- break;
- }
-}
-
-void ChatRecv::processChat(Net::MessageIn &msg)
-{
- BLOCK_START("ChatRecv::processChat")
- const int chatMsgLength = msg.readInt16("len") - 4;
- if (chatMsgLength <= 0)
- {
- BLOCK_END("ChatRecv::processChat")
- return;
- }
-
- processChatContinue(msg.readRawString(chatMsgLength, "message"),
- ChatMsgType::BY_PLAYER);
-}
-
-void ChatRecv::processFormatMessage(Net::MessageIn &msg)
-{
- const int msgId = msg.readInt16("msg id");
- // +++ here need load message from configuration file
- std::string chatMsg;
- if (msgId >= 1266 && msgId <= 1269)
- {
- MercenaryRecv::handleMercenaryMessage(msgId - 1266);
- return;
- }
- switch (msgId)
- {
- case 1334:
- // TRANSLATORS: error message
- chatMsg = _("Can't cast skill in this area.");
- break;
- case 1335:
- // TRANSLATORS: error message
- chatMsg = _("Can't use item in this area.");
- break;
- case 1773:
- // TRANSLATORS: error message
- chatMsg = _("Can't equip. Wrong level.");
- break;
- case 1774:
- // TRANSLATORS: error message
- chatMsg = _("Can't use. Wrong level.");
- break;
- case 1923:
- // TRANSLATORS: error message
- chatMsg = _("Work in progress."); // busy with npc
- break;
- default:
- chatMsg = strprintf("Message #%d", msgId);
- break;
- }
- processChatContinue(chatMsg, ChatMsgType::BY_SERVER);
-}
-
-void ChatRecv::processFormatMessageNumber(Net::MessageIn &msg)
-{
- const int msgId = msg.readInt16("msg id");
- const int value = msg.readInt32("value");
- if (msgId == 1862)
- {
- NotifyManager::notify(NotifyTypes::USE_ITEM_WAIT, value);
- return;
- }
- // +++ here need load message from configuration file
- const std::string chatMsg = strprintf(
- "Message #%d, value: %d", msgId, value);
- processChatContinue(chatMsg, ChatMsgType::BY_SERVER);
-}
-
-void ChatRecv::processFormatMessageSkill(Net::MessageIn &msg)
-{
- const int skillId = msg.readInt16("skill id");
- const int msgId = msg.readInt32("msg id");
- // +++ here need load message from configuration file
- const std::string chatMsg = strprintf(
- "Message #%d, skill: %d", msgId, skillId);
- processChatContinue(chatMsg, ChatMsgType::BY_SERVER);
-}
-
-void ChatRecv::processColorChat(Net::MessageIn &msg)
-{
- BLOCK_START("ChatRecv::processChat")
- int chatMsgLength = msg.readInt16("len") - 4;
- msg.readInt32("unused");
- msg.readInt32("chat color");
- chatMsgLength -= 8;
- if (chatMsgLength <= 0)
- {
- BLOCK_END("ChatRecv::processChat")
- return;
- }
-
- std::string message = msg.readRawString(chatMsgLength, "message");
- std::string msg2 = message;
- if (findCutFirst(msg2, "You're now in the '#") && findCutLast(msg2, "'"))
- {
- const size_t idx = msg2.find("' channel for '");
- if (idx != std::string::npos && (chatWindow != nullptr))
- {
- chatWindow->addChannelTab(std::string("#").append(
- msg2.substr(0, idx)), false);
- return;
- }
- }
- else
- {
- const std::string nick = Ea::ChatRecv::getLastWhisperNick();
- if (nick.size() > 1 && nick[0] == '#')
- {
- if (message == strprintf("[ %s ] %s : \302\202\302",
- nick.c_str(), localPlayer->getName().c_str()))
- {
- Ea::ChatRecv::mSentWhispers.pop();
- }
- }
- }
- processChatContinue(message, ChatMsgType::BY_UNKNOWN);
-}
-
-std::string ChatRecv::extractChannelFromMessage(std::string &chatMsg)
-{
- std::string msg = chatMsg;
- std::string channel(GENERAL_CHANNEL);
- if (findCutFirst(msg, "[ #"))
- { // found channel message
- const size_t idx = msg.find(" ] ");
- if (idx != std::string::npos)
- {
- channel = std::string("#").append(msg.substr(0, idx));
- chatMsg = msg.substr(idx + 3);
- }
- }
- return channel;
-}
-
-void ChatRecv::processChatContinue(std::string chatMsg,
- const ChatMsgTypeT own)
-{
- const std::string channel = extractChannelFromMessage(chatMsg);
- bool allow(true);
- if (chatWindow != nullptr)
- {
- allow = chatWindow->resortChatLog(chatMsg,
- own,
- channel,
- IgnoreRecord_false,
- TryRemoveColors_true);
- }
-
- const size_t pos = chatMsg.find(" : ", 0);
- if (pos != std::string::npos)
- chatMsg.erase(0, pos + 3);
-
- trim(chatMsg);
-
- if (localPlayer != nullptr)
- {
- if (((chatWindow != nullptr) || Ea::ChatRecv::mShowMotd) && allow)
- localPlayer->setSpeech(chatMsg, GENERAL_CHANNEL);
- }
- BLOCK_END("ChatRecv::processChat")
-}
-
-void ChatRecv::processGmChat(Net::MessageIn &msg)
-{
- BLOCK_START("ChatRecv::processChat")
- const int chatMsgLength = msg.readInt16("len") - 4;
- if (chatMsgLength <= 0)
- {
- BLOCK_END("ChatRecv::processChat")
- return;
- }
-
- std::string chatMsg = msg.readRawString(chatMsgLength, "message");
- // remove non persistend "colors" from server.
- if (!findCutFirst(chatMsg, "ssss"))
- findCutFirst(chatMsg, "eulb");
-
- if (chatWindow != nullptr)
- chatWindow->addGlobalMessage(chatMsg);
- BLOCK_END("ChatRecv::processChat")
-}
-
-void ChatRecv::processGmChat2(Net::MessageIn &msg)
-{
- const int chatMsgLength = msg.readInt16("len") - 16;
- msg.readInt32("font color");
- msg.readInt16("font type");
- msg.readInt16("font size");
- msg.readInt16("font align");
- msg.readInt16("font y");
- if (chatWindow != nullptr)
- {
- const std::string chatMsg = msg.readRawString(chatMsgLength,
- "message");
- chatWindow->addGlobalMessage(chatMsg);
- }
- else
- {
- msg.readRawString(chatMsgLength, "message");
- }
-}
-
-void ChatRecv::processWhisper(Net::MessageIn &msg)
-{
- BLOCK_START("ChatRecv::processWhisper")
- int packetLen = 28;
- if (msg.getVersion() >= 20091104)
- packetLen += 4;
- const int chatMsgLength = msg.readInt16("len") - packetLen;
- std::string nick = msg.readString(24, "nick");
- if (msg.getVersion() >= 20091104)
- msg.readInt32("admin flag");
-
- if (chatMsgLength <= 0)
- {
- BLOCK_END("ChatRecv::processWhisper")
- return;
- }
-
- processWhisperContinue(nick, msg.readString(chatMsgLength, "message"));
-}
-
-void ChatRecv::processWhisperResponse(Net::MessageIn &msg)
-{
- BLOCK_START("ChatRecv::processWhisperResponse")
-
- const uint8_t type = msg.readUInt8("response");
- if (msg.getVersion() >= 20131223)
- msg.readInt32("unknown");
- if (type == 1 && (chatWindow != nullptr))
- {
- const std::string nick = Ea::ChatRecv::getLastWhisperNick();
- if (nick.size() > 1 && nick[0] == '#')
- {
- chatWindow->channelChatLog(nick,
- // TRANSLATORS: chat message
- strprintf(_("Message could not be sent, channel "
- "%s is not exists."), nick.c_str()),
- ChatMsgType::BY_SERVER,
- IgnoreRecord_false,
- TryRemoveColors_false);
- if (!Ea::ChatRecv::mSentWhispers.empty())
- Ea::ChatRecv::mSentWhispers.pop();
- return;
- }
- }
- Ea::ChatRecv::processWhisperResponseContinue(msg, type);
-}
-
-void ChatRecv::processChatIgnoreList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need put it in some object or window
- const int count = (msg.readInt16("len") - 4) / 24;
- for (int f = 0; f < count; f ++)
- msg.readString(24, "nick");
-}
-
-void ChatRecv::processChatDisplay(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len") - 17;
- ChatObject *const obj = new ChatObject;
- obj->ownerId = msg.readBeingId("owner account id");
- obj->chatId = msg.readInt32("chat id");
- obj->maxUsers = msg.readInt16("max users");
- obj->currentUsers = msg.readInt16("current users");
- obj->type = msg.readUInt8("type");
- obj->title = msg.readString(len, "title");
- obj->update();
-
- Being *const dstBeing = actorManager->findBeing(obj->ownerId);
- if (dstBeing != nullptr)
- dstBeing->setChat(obj);
-}
-
-void ChatRecv::processChatRoomJoinAck(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 8) / 28;
- const int id = msg.readInt32("chat id");
-
- // +++ ignore chat members for now
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("role");
- msg.readString(24, "name");
- }
-
- const ChatObject *const oldChat = ChatObject::findById(id);
-
- if (oldChat != nullptr)
- PlayerInfo::setRoomName(oldChat->title);
- else
- PlayerInfo::setRoomName(std::string());
- chatWindow->joinRoom(true);
- ChatObject *const obj = new ChatObject;
- if (oldChat != nullptr)
- {
- obj->ownerId = oldChat->ownerId;
- obj->chatId = oldChat->chatId;
- obj->maxUsers = oldChat->maxUsers;
- obj->currentUsers = oldChat->currentUsers;
- obj->type = oldChat->type;
- obj->title = oldChat->title;
-// obj->update();
- }
- localPlayer->setChat(obj);
-}
-
-void ChatRecv::processChatRoomLeave(Net::MessageIn &msg)
-{
- msg.readInt16("users");
- const std::string name = msg.readString(24, "name");
- const int status = msg.readUInt8("flag"); // 0 - left, 1 - kicked
- switch (status)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::ROOM_LEAVE, name);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::ROOM_KICKED, name);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(status);
- break;
- }
- if ((localPlayer != nullptr) && name == localPlayer->getName())
- {
- if (chatWindow != nullptr)
- chatWindow->joinRoom(false);
- PlayerInfo::setRoomName(std::string());
- if (localPlayer != nullptr)
- localPlayer->setChat(nullptr);
- }
- else
- {
- Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being != nullptr)
- being->setChat(nullptr);
- }
-}
-
-void ChatRecv::processJoinChannel(Net::MessageIn &msg)
-{
- if (chatWindow == nullptr)
- return;
-
- const std::string channel = msg.readString(24, "channel name");
- const int flag = msg.readUInt8("flag");
-
- if (channel.size() < 2)
- return;
- switch (flag)
- {
- case 0:
- default:
- chatWindow->channelChatLog(channel,
- // TRANSLATORS: chat message
- strprintf(_("Can't open channel. Channel "
- "%s is not exists."), channel.c_str()),
- ChatMsgType::BY_SERVER,
- IgnoreRecord_false,
- TryRemoveColors_false);
- break;
-
- case 1:
- case 2:
- chatWindow->addChannelTab(std::string("#").append(
- channel.substr(1)), false);
- break;
- }
-}
-
-void ChatRecv::processWhisperContinue(const std::string &nick,
- std::string chatMsg)
-{
- // ignoring future whisper messages
- if (chatMsg.find("\302\202G") == 0 || chatMsg.find("\302\202A") == 0)
- {
- BLOCK_END("ChatRecv::processWhisper")
- return;
- }
- // remove first unicode space if this is may be whisper command.
- if (chatMsg.find("\302\202!") == 0)
- chatMsg = chatMsg.substr(2);
-
- if (nick != "Server")
- {
- if (playerRelations.hasPermission(nick, PlayerRelation::WHISPER))
- chatWindow->addWhisper(nick, chatMsg);
- }
- else if (localChatTab != nullptr)
- {
- localChatTab->chatLog(chatMsg, ChatMsgType::BY_SERVER);
- }
- BLOCK_END("ChatRecv::processWhisper")
-}
-
-void ChatRecv::processBeingChat(Net::MessageIn &msg)
-{
- if (actorManager == nullptr)
- return;
-
- BLOCK_START("ChatRecv::processBeingChat")
- const int chatMsgLength = msg.readInt16("len") - 8;
- Being *const being = actorManager->findBeing(msg.readBeingId("being id"));
-
- if (chatMsgLength <= 0)
- {
- BLOCK_END("ChatRecv::processBeingChat")
- return;
- }
-
- std::string chatMsg = msg.readRawString(chatMsgLength, "message");
-
- if ((being != nullptr) && being->getType() == ActorType::Player)
- being->setTalkTime();
-
- const size_t pos = chatMsg.find(" : ", 0);
- std::string sender_name = ((pos == std::string::npos)
- ? "" : chatMsg.substr(0, pos));
-
- if ((being != nullptr) && sender_name != being->getName()
- && being->getType() == ActorType::Player)
- {
- if (!being->getName().empty())
- sender_name = being->getName();
- }
- else
- {
- chatMsg.erase(0, pos + 3);
- }
-
- trim(chatMsg);
-
- bool allow(true);
- // We use getIgnorePlayer instead of ignoringPlayer here
- // because ignorePlayer' side effects are triggered
- // right below for Being::IGNORE_SPEECH_FLOAT.
- if ((playerRelations.checkPermissionSilently(sender_name,
- PlayerRelation::SPEECH_LOG) != 0u) && (chatWindow != nullptr))
- {
- allow = chatWindow->resortChatLog(
- removeColors(sender_name).append(" : ").append(chatMsg),
- ChatMsgType::BY_OTHER,
- GENERAL_CHANNEL,
- IgnoreRecord_false,
- TryRemoveColors_true);
- }
-
- if (allow &&
- being != nullptr &&
- playerRelations.hasPermission(sender_name,
- PlayerRelation::SPEECH_FLOAT))
- {
- being->setSpeech(chatMsg, GENERAL_CHANNEL);
- }
- BLOCK_END("ChatRecv::processBeingChat")
-}
-
-void ChatRecv::processChatRoomCreateAck(Net::MessageIn &msg)
-{
- const int result = msg.readUInt8("flag");
- switch (result)
- {
- case 0:
- {
- PlayerInfo::setRoomName(mChatRoom);
- chatWindow->joinRoom(true);
- ChatObject *const obj = new ChatObject;
- obj->ownerId = localPlayer->getId();
- obj->chatId = 0;
- obj->maxUsers = 1000;
- obj->currentUsers = 1;
- obj->type = 1;
- obj->title = mChatRoom;
- obj->update();
- localPlayer->setChat(obj);
- break;
- }
- case 1:
- NotifyManager::notify(NotifyTypes::ROOM_LIMIT_EXCEEDED);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::ROOM_ALREADY_EXISTS);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(result);
- break;
- }
- mChatRoom.clear();
-}
-
-void ChatRecv::processChatRoomDestroy(Net::MessageIn &msg)
-{
- const int chatId = msg.readInt32("chat id");
- actorManager->removeRoom(chatId);
-}
-
-void ChatRecv::processChatRoomJoinFailed(Net::MessageIn &msg)
-{
- const int result = msg.readUInt8("flag");
- switch (result)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_FULL);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_WRONG_PASSWORD);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_KICKED);
- break;
- case 3:
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_ZENY);
- break;
- case 5:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_LOW_LEVEL);
- break;
- case 6:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_HIGH_LEVEL);
- break;
- case 7:
- NotifyManager::notify(NotifyTypes::ROOM_ERROR_RACE);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(result);
- break;
- }
-}
-
-void ChatRecv::processChatRoomAddMember(Net::MessageIn &msg)
-{
- msg.readInt16("users");
- const std::string name = msg.readString(24, "name");
- if (localChatTab == nullptr)
- return;
- NotifyManager::notify(NotifyTypes::ROOM_JOINED, name);
-}
-
-void ChatRecv::processChatRoomSettings(Net::MessageIn &msg)
-{
- const int sz = msg.readInt16("len") - 17;
- const BeingId ownerId = msg.readBeingId("owner id");
- const int chatId = msg.readInt32("chat id");
- const uint16_t limit = msg.readInt16("limit");
- msg.readInt16("users");
- const uint8_t type = msg.readUInt8("type");
- const std::string &title = msg.readString(sz, "title");
- ChatObject *const chat = localPlayer->getChat();
- if ((chat != nullptr) && chat->chatId == chatId)
- {
- chat->ownerId = ownerId;
- chat->maxUsers = limit;
- chat->type = type;
- if (chat->title != title)
- {
- chat->title = title;
- actorManager->updateRoom(chat);
- chatWindow->joinRoom(true);
- }
- }
-}
-
-void ChatRecv::processChatRoomRoleChange(Net::MessageIn &msg)
-{
- const int role = msg.readInt32("role");
- const std::string name = msg.readString(24, "name");
- switch (role)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::ROOM_ROLE_OWNER, name);
- break;
- case 1:
- // dont show normal role
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(role);
- break;
- }
-}
-
-void ChatRecv::processMVPItem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("item id");
-}
-
-void ChatRecv::processMVPExp(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("exo");
-}
-
-void ChatRecv::processMVPNoItem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-}
-
-void ChatRecv::processMannerMessage(Net::MessageIn &msg)
-{
- const int result = msg.readInt32("type");
- switch (result)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MANNER_CHANGED);
- break;
- case 5:
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(result);
- break;
- }
-}
-
-void ChatRecv::processChatSilence(Net::MessageIn &msg)
-{
- const int result = msg.readUInt8("type");
- const std::string name = msg.readString(24, "gm name");
-
- switch (result)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MANNER_POSITIVE_POINTS, name);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::MANNER_NEGATIVE_POINTS, name);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(result);
- break;
- }
-}
-
-void ChatRecv::processChatTalkieBox(Net::MessageIn &msg)
-{
- msg.readBeingId("being id");
- const std::string message = msg.readString(80, "message");
- localChatTab->chatLog(message, ChatMsgType::BY_SERVER);
-}
-
-void ChatRecv::processBattleChatMessage(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int sz = msg.readInt16("len") - 24 - 8;
- msg.readBeingId("account id");
- msg.readString(24, "nick");
- msg.readString(sz, "message");
-}
-
-void ChatRecv::processScriptMessage(Net::MessageIn &msg)
-{
- const int sz = msg.readInt16("len") - 8;
- msg.readBeingId("being id");
- const std::string message = msg.readString(sz, "message");
- localChatTab->chatLog(message, ChatMsgType::BY_SERVER);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/chatrecv.h b/src/net/eathena/chatrecv.h
deleted file mode 100644
index 0f072bee6..000000000
--- a/src/net/eathena/chatrecv.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_CHATRECV_H
-#define NET_EATHENA_CHATRECV_H
-
-#include "enums/gui/chatmsgtype.h"
-
-#include <string>
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace ChatRecv
- {
- std::string extractChannelFromMessage(std::string &chatMsg);
- void processChat(Net::MessageIn &msg);
- void processColorChat(Net::MessageIn &msg);
- void processChatContinue(std::string chatMsg,
- const ChatMsgTypeT own);
- void processWhisper(Net::MessageIn &msg);
- void processWhisperResponse(Net::MessageIn &msg);
- void processGmChat(Net::MessageIn &msg);
- void processGmChat2(Net::MessageIn &msg);
- void processChatIgnoreList(Net::MessageIn &msg);
- void processFormatMessage(Net::MessageIn &msg);
- void processFormatMessageNumber(Net::MessageIn &msg);
- void processFormatMessageSkill(Net::MessageIn &msg);
- void processChatDisplay(Net::MessageIn &msg);
- void processChatRoomJoinAck(Net::MessageIn &msg);
- void processChatRoomLeave(Net::MessageIn &msg);
- void processJoinChannel(Net::MessageIn &msg);
- void processWhisperContinue(const std::string &nick,
- std::string chatMsg);
- void processBeingChat(Net::MessageIn &msg);
- void processIgnoreNickAck(Net::MessageIn &msg);
- void processChatRoomCreateAck(Net::MessageIn &msg);
- void processChatRoomDestroy(Net::MessageIn &msg);
- void processChatRoomJoinFailed(Net::MessageIn &msg);
- void processChatRoomAddMember(Net::MessageIn &msg);
- void processChatRoomSettings(Net::MessageIn &msg);
- void processChatRoomRoleChange(Net::MessageIn &msg);
- void processMVPItem(Net::MessageIn &msg);
- void processMVPExp(Net::MessageIn &msg);
- void processMVPNoItem(Net::MessageIn &msg);
- void processMannerMessage(Net::MessageIn &msg);
- void processChatSilence(Net::MessageIn &msg);
- void processChatTalkieBox(Net::MessageIn &msg);
- void processBattleChatMessage(Net::MessageIn &msg);
- void processScriptMessage(Net::MessageIn &msg);
- extern std::string mChatRoom;
- } // namespace ChatRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_CHATRECV_H
diff --git a/src/net/eathena/elementalhandler.cpp b/src/net/eathena/elementalhandler.cpp
deleted file mode 100644
index 8a8fa56bb..000000000
--- a/src/net/eathena/elementalhandler.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/elementalhandler.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-ElementalHandler::ElementalHandler() :
- Net::ElementalHandler()
-{
- elementalHandler = this;
-}
-
-ElementalHandler::~ElementalHandler()
-{
- elementalHandler = nullptr;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/elementalhandler.h b/src/net/eathena/elementalhandler.h
deleted file mode 100644
index 517b74a30..000000000
--- a/src/net/eathena/elementalhandler.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ELEMENTALHANDLER_H
-#define NET_EATHENA_ELEMENTALHANDLER_H
-
-#include "net/elementalhandler.h"
-
-namespace EAthena
-{
-class ElementalHandler final : public Net::ElementalHandler
-{
- public:
- ElementalHandler();
-
- A_DELETE_COPY(ElementalHandler)
-
- ~ElementalHandler();
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_ELEMENTALHANDLER_H
diff --git a/src/net/eathena/elementalrecv.cpp b/src/net/eathena/elementalrecv.cpp
deleted file mode 100644
index d5e0c6d18..000000000
--- a/src/net/eathena/elementalrecv.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/elementalrecv.h"
-
-#include "being/playerinfo.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/sp.h"
-
-#include "utils/checkutils.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-#define setElementalStat(sp, stat) \
- case sp: \
- PlayerInfo::setStatBase(stat, \
- val); \
- break;
-
-void ElementalRecv::processElementalUpdateStatus(Net::MessageIn &msg)
-{
- const int sp = msg.readInt16("type");
- const int val = msg.readInt32("value");
- switch (sp)
- {
- setElementalStat(Sp::HP, Attributes::ELEMENTAL_HP);
- setElementalStat(Sp::MAXHP, Attributes::ELEMENTAL_MAX_HP);
- setElementalStat(Sp::SP, Attributes::ELEMENTAL_MP);
- setElementalStat(Sp::MAXSP, Attributes::ELEMENTAL_MAX_MP);
- default:
- reportAlways("Unknown elemental stat %d",
- sp);
- break;
- }
-}
-
-void ElementalRecv::processElementalInfo(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("elemental id");
- PlayerInfo::setStatBase(Attributes::ELEMENTAL_HP,
- msg.readInt32("hp"));
- PlayerInfo::setStatBase(Attributes::ELEMENTAL_MAX_HP,
- msg.readInt32("max hp"));
- PlayerInfo::setStatBase(Attributes::ELEMENTAL_MP,
- msg.readInt32("sp"));
- PlayerInfo::setStatBase(Attributes::ELEMENTAL_MAX_MP,
- msg.readInt32("max sp"));
- PlayerInfo::setElemental(id);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/elementalrecv.h b/src/net/eathena/elementalrecv.h
deleted file mode 100644
index f99c8e1a3..000000000
--- a/src/net/eathena/elementalrecv.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ELEMENTALRECV_H
-#define NET_EATHENA_ELEMENTALRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace ElementalRecv
- {
- void processElementalUpdateStatus(Net::MessageIn &msg);
- void processElementalInfo(Net::MessageIn &msg);
- } // namespace ElementalRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_ELEMENTALRECV_H
diff --git a/src/net/eathena/familyhandler.cpp b/src/net/eathena/familyhandler.cpp
deleted file mode 100644
index 5ec423ce5..000000000
--- a/src/net/eathena/familyhandler.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/familyhandler.h"
-
-#include "being/being.h"
-
-#include "net/eathena/familyrecv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-FamilyHandler::FamilyHandler() :
- Net::FamilyHandler()
-{
- FamilyRecv::mParent1 = BeingId_zero;
- FamilyRecv::mParent2 = BeingId_zero;
-
- familyHandler = this;
-}
-
-FamilyHandler::~FamilyHandler()
-{
- familyHandler = nullptr;
-}
-
-void FamilyHandler::askForChild(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_FAMILY_ASK_FOR_CHILD);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void FamilyHandler::askForChildReply(const bool accept) const
-{
- createOutPacket(CMSG_FAMILY_ASK_FOR_CHILD_REPLY);
- outMsg.writeBeingId(FamilyRecv::mParent1, "parent1");
- outMsg.writeBeingId(FamilyRecv::mParent2, "parent2");
- outMsg.writeInt32(accept ? 1 : 0, "result");
- FamilyRecv::mParent1 = BeingId_zero;
- FamilyRecv::mParent2 = BeingId_zero;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/familyhandler.h b/src/net/eathena/familyhandler.h
deleted file mode 100644
index 91531fb2d..000000000
--- a/src/net/eathena/familyhandler.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_FAMILYHANDLER_H
-#define NET_EATHENA_FAMILYHANDLER_H
-
-#include "net/familyhandler.h"
-
-namespace EAthena
-{
-class FamilyHandler final : public Net::FamilyHandler
-{
- public:
- FamilyHandler();
-
- A_DELETE_COPY(FamilyHandler)
-
- ~FamilyHandler();
-
- void askForChild(const Being *const being) const override final;
-
- void askForChildReply(const bool accept) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_FAMILYHANDLER_H
diff --git a/src/net/eathena/familyrecv.cpp b/src/net/eathena/familyrecv.cpp
deleted file mode 100644
index f9f7b2fd8..000000000
--- a/src/net/eathena/familyrecv.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/familyrecv.h"
-
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/localplayer.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "listeners/requestadoptchildlistener.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace FamilyRecv
-{
- ConfirmDialog *confirmDlg = nullptr;
- RequestAdoptChildListener listener;
- BeingId mParent1 = BeingId_zero;
- BeingId mParent2 = BeingId_zero;
-} // namespace FamilyRecv
-
-void FamilyRecv::processAskForChild(Net::MessageIn &msg)
-{
- if (localPlayer == nullptr)
- {
- mParent1 = msg.readBeingId("account id who ask");
- mParent2 = msg.readBeingId("acoount id for other parent");
- msg.readString(24, "name who ask");
- return;
- }
- mParent1 = msg.readBeingId("account id who ask");
- mParent2 = msg.readBeingId("acoount id for other parent");
- const std::string name1 = msg.readString(24, "name who ask");
- const Party *const party = localPlayer->getParty();
- if (party != nullptr)
- {
- const PartyMember *const member = party->getMember(mParent2);
- if (member != nullptr)
- {
- const std::string name2 = member->getName();
- CREATEWIDGETV(confirmDlg, ConfirmDialog,
- // TRANSLATORS: adopt child message
- _("Request parents"),
- // TRANSLATORS: adopt child message
- strprintf(_("Do you accept %s and %s as parents?"),
- name1.c_str(), name2.c_str()),
- SOUND_REQUEST,
- false);
- confirmDlg->addActionListener(&listener);
- }
- }
-}
-
-void FamilyRecv::processCallPartner(Net::MessageIn &msg)
-{
- const std::string name = msg.readString(24, "name");
- if ((localPlayer != nullptr) && name == localPlayer->getName())
- {
- NotifyManager::notify(NotifyTypes::CALLED_PARTNER);
- }
- else
- {
- NotifyManager::notify(NotifyTypes::CALLING_PARTNER, name.c_str());
- }
-}
-
-void FamilyRecv::processDivorced(Net::MessageIn &msg)
-{
- const std::string name = msg.readString(24, "name");
- NotifyManager::notify(NotifyTypes::DIVORCED, name.c_str());
-}
-
-void FamilyRecv::processAskForChildReply(Net::MessageIn &msg)
-{
- const int type = msg.readInt32("type");
- switch (type)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::ADOPT_CHILD_ERROR_HAVE_BABY);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::ADOPT_CHILD_ERROR_LEVEL);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::ADOPT_CHILD_ERROR_BABY_MARRIED);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(type);
- break;
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/familyrecv.h b/src/net/eathena/familyrecv.h
deleted file mode 100644
index f069851aa..000000000
--- a/src/net/eathena/familyrecv.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_FAMILYRECV_H
-#define NET_EATHENA_FAMILYRECV_H
-
-#include "enums/simpletypes/beingid.h"
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace FamilyRecv
- {
- extern BeingId mParent1;
- extern BeingId mParent2;
-
- void processAskForChild(Net::MessageIn &msg);
- void processCallPartner(Net::MessageIn &msg);
- void processDivorced(Net::MessageIn &msg);
- void processAskForChildReply(Net::MessageIn &msg);
- } // namespace FamilyRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_FAMILYRECV_H
diff --git a/src/net/eathena/friendshandler.cpp b/src/net/eathena/friendshandler.cpp
deleted file mode 100644
index 000ea909d..000000000
--- a/src/net/eathena/friendshandler.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/friendshandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-FriendsHandler::FriendsHandler()
-{
- friendsHandler = this;
-}
-
-FriendsHandler::~FriendsHandler()
-{
- friendsHandler = nullptr;
-}
-
-void FriendsHandler::invite(const std::string &name) const
-{
- createOutPacket(CMSG_FRIENDS_ADD_PLAYER);
- outMsg.writeString(name, 24, "name");
-}
-
-void FriendsHandler::inviteResponse(const int accountId,
- const int charId,
- const bool accept) const
-{
- createOutPacket(CMSG_FRIENDS_REQUEST_ACK);
- outMsg.writeInt32(accountId, "account id");
- outMsg.writeInt32(charId, "char id");
- outMsg.writeInt32(accept ? 1 : 0, "result");
-}
-
-void FriendsHandler::remove(const int accountId, const int charId) const
-{
- createOutPacket(CMSG_FRIENDS_DELETE_PLAYER);
- outMsg.writeInt32(accountId, "account id");
- outMsg.writeInt32(charId, "char id");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/friendshandler.h b/src/net/eathena/friendshandler.h
deleted file mode 100644
index 7b985e0ca..000000000
--- a/src/net/eathena/friendshandler.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_FRIENDSHANDLER_H
-#define NET_EATHENA_FRIENDSHANDLER_H
-
-#include "net/friendshandler.h"
-
-namespace EAthena
-{
-class FriendsHandler final : public Net::FriendsHandler
-{
- public:
- FriendsHandler();
-
- A_DELETE_COPY(FriendsHandler)
-
- ~FriendsHandler();
-
- void invite(const std::string &name) const override final;
-
- void inviteResponse(const int accountId,
- const int charId,
- const bool accept) const override final;
-
- void remove(const int accountId,
- const int charId) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_FRIENDSHANDLER_H
diff --git a/src/net/eathena/friendsrecv.cpp b/src/net/eathena/friendsrecv.cpp
deleted file mode 100644
index cf0f6f66a..000000000
--- a/src/net/eathena/friendsrecv.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/friendsrecv.h"
-
-#include "logger.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void FriendsRecv::processPlayerOnline(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readInt32("char id");
- msg.readUInt8("flag"); // 0 - online, 1 - offline
-}
-
-void FriendsRecv::processFriendsList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("size") - 4) / 32;
- for (int f = 0; f < count; f ++)
- {
- msg.readBeingId("account id");
- msg.readInt32("char id");
- msg.readString(24, "name");
- }
-}
-
-void FriendsRecv::processRequestAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("type");
- msg.readBeingId("account id");
- msg.readInt32("char id");
- msg.readString(24, "name");
-}
-
-void FriendsRecv::processRequest(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readInt32("char id");
- msg.readString(24, "name");
-}
-
-void FriendsRecv::processDeletePlayer(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readInt32("char id");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/friendsrecv.h b/src/net/eathena/friendsrecv.h
deleted file mode 100644
index c6dbb5841..000000000
--- a/src/net/eathena/friendsrecv.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_FRIENDSRECV_H
-#define NET_EATHENA_FRIENDSRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace FriendsRecv
- {
- void processPlayerOnline(Net::MessageIn &msg);
- void processFriendsList(Net::MessageIn &msg);
- void processRequestAck(Net::MessageIn &msg);
- void processRequest(Net::MessageIn &msg);
- void processDeletePlayer(Net::MessageIn &msg);
- } // namespace FriendsRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_FRIENDSRECV_H
diff --git a/src/net/eathena/gamehandler.cpp b/src/net/eathena/gamehandler.cpp
deleted file mode 100644
index 274c04c0d..000000000
--- a/src/net/eathena/gamehandler.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/gamehandler.h"
-
-#include "client.h"
-
-#include "being/localplayer.h"
-
-#include "net/serverfeatures.h"
-
-#include "net/ea/token.h"
-
-#include "net/ea/gamerecv.h"
-
-#include "net/eathena/loginhandler.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/network.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-extern ServerInfo mapServer;
-
-GameHandler::GameHandler() :
- Ea::GameHandler()
-{
- gameHandler = this;
-}
-
-GameHandler::~GameHandler()
-{
- gameHandler = nullptr;
-}
-
-void GameHandler::mapLoadedEvent() const
-{
- createOutPacket(CMSG_MAP_LOADED);
-}
-
-void GameHandler::connect() const
-{
- if (Network::mInstance == nullptr)
- return;
-
- Network::mInstance->connect(mapServer);
-
- const Token &token = static_cast<LoginHandler*>(loginHandler)->getToken();
-
-
- if (client->getState() == State::CONNECT_GAME)
- {
- // Change the player's ID to the account ID to match what eAthena uses
- if (localPlayer != nullptr)
- {
- Ea::GameRecv::mCharID = localPlayer->getId();
- localPlayer->setId(token.account_ID);
- }
- else
- {
- Ea::GameRecv::mCharID = BeingId_zero;
- }
- }
-
- // Send login infos
- createOutPacket(CMSG_MAP_SERVER_CONNECT);
- outMsg.writeBeingId(token.account_ID, "account id");
- outMsg.writeBeingId(Ea::GameRecv::mCharID, "char id");
- outMsg.writeInt32(token.session_ID1, "session key1");
- outMsg.writeInt32(0, "tick");
- outMsg.writeInt8(Being::genderToInt(token.sex), "sex");
- if (serverFeatures->haveMapServerVersion())
- loginHandler->sendVersion();
-
- // We get 4 useless bytes before the real answer comes in (what are these?)
-// Network::mInstance->skip(4);
-}
-
-bool GameHandler::isConnected() const
-{
- if (Network::mInstance == nullptr)
- return false;
- return Network::mInstance->isConnected();
-}
-
-void GameHandler::disconnect() const
-{
- if (Network::mInstance != nullptr)
- Network::mInstance->disconnect();
-}
-
-void GameHandler::quit() const
-{
- createOutPacket(CMSG_CLIENT_QUIT);
-}
-
-void GameHandler::ping(const int tick) const
-{
- createOutPacket(CMSG_MAP_PING);
- if (packetVersion >= 20101124)
- {
- // nothing here
- }
- else if (packetVersion >= 20080827)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20070212)
- {
- outMsg.writeInt16(0, "unknown");
- }
- else if (packetVersion >= 20070108)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20050719)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20050718)
- {
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20050628)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20050509)
- {
- outMsg.writeInt16(0, "unknown");
- }
- else if (packetVersion >= 20050110)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20041129)
- {
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20041025)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20041005)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20040920)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20040906)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20040809)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- }
- else if (packetVersion >= 20040726)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- }
- outMsg.writeInt32(tick, "tick");
-}
-
-void GameHandler::disconnect2() const
-{
- createOutPacket(CMSG_CLIENT_QUIT);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/gamehandler.h b/src/net/eathena/gamehandler.h
deleted file mode 100644
index 4b2725a2f..000000000
--- a/src/net/eathena/gamehandler.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GAMEHANDLER_H
-#define NET_EATHENA_GAMEHANDLER_H
-
-#include "net/ea/gamehandler.h"
-
-namespace EAthena
-{
-
-class GameHandler final : public Ea::GameHandler
-{
- public:
- GameHandler();
-
- A_DELETE_COPY(GameHandler)
-
- ~GameHandler();
-
- void connect() const override final;
-
- bool isConnected() const override final A_WARN_UNUSED;
-
- void disconnect() const override final;
-
- void quit() const override final;
-
- void ping(const int tick) const override final;
-
- void disconnect2() const override final A_CONST;
-
- void mapLoadedEvent() const override final;
-
- bool mustPing() const override final A_WARN_UNUSED
- { return true; }
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_GAMEHANDLER_H
diff --git a/src/net/eathena/gamerecv.cpp b/src/net/eathena/gamerecv.cpp
deleted file mode 100644
index 00d2c4f9d..000000000
--- a/src/net/eathena/gamerecv.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/gamerecv.h"
-
-#include "client.h"
-#include "logger.h"
-
-#include "being/localplayer.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/network.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-extern ServerInfo mapServer;
-
-void GameRecv::processMapAccountId(Net::MessageIn &msg)
-{
- // ignored, because we already know local player account id.
- msg.readBeingId("account id");
-}
-
-void GameRecv::processMapLogin(Net::MessageIn &msg)
-{
- unsigned char direction;
- uint16_t x, y;
- msg.readInt32("start time");
- msg.readCoordinates(x, y, direction, "position");
- msg.readInt8("x size");
- msg.readInt8("y size");
- logger->log("Protocol: Player start position: "
- "(%d, %d), Direction: %d",
- x, y, direction);
- if (msg.getVersion() >= 20080102)
- msg.readInt16("font");
- if (msg.getVersion() >= 20141022 && msg.getVersion() < 20160330)
- msg.readUInt8("sex");
-
- mLastHost &= 0xffffff;
-
- Network *const network = Network::mInstance;
- if (network != nullptr)
- network->pauseDispatch();
-
- // Switch now or we'll have problems
- client->setState(State::GAME);
- if (localPlayer != nullptr)
- localPlayer->setTileCoords(x, y);
-}
-
-void GameRecv::processServerTick(Net::MessageIn &msg)
-{
- // ignoring
- msg.readInt32("tick");
-}
-
-void GameRecv::processMapAuthRefuse(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("error");
-}
-} // namespace EAthena
diff --git a/src/net/eathena/gamerecv.h b/src/net/eathena/gamerecv.h
deleted file mode 100644
index 3d2dbe590..000000000
--- a/src/net/eathena/gamerecv.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GAMERECV_H
-#define NET_EATHENA_GAMERECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace GameRecv
- {
- void processMapAccountId(Net::MessageIn &msg);
- void processMapLogin(Net::MessageIn &msg);
- void processServerTick(Net::MessageIn &msg);
- void processMapAuthRefuse(Net::MessageIn &msg);
- } // namespace GameRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_GAMERECV_H
diff --git a/src/net/eathena/generalhandler.cpp b/src/net/eathena/generalhandler.cpp
deleted file mode 100644
index c2aac194b..000000000
--- a/src/net/eathena/generalhandler.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/generalhandler.h"
-
-#include "client.h"
-#include "configuration.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/socialwindow.h"
-
-#include "gui/widgets/tabs/chat/guildtab.h"
-#include "gui/widgets/tabs/chat/partytab.h"
-
-#include "net/eathena/adminhandler.h"
-#include "net/eathena/auctionhandler.h"
-#include "net/eathena/bankhandler.h"
-#include "net/eathena/battlegroundhandler.h"
-#include "net/eathena/beinghandler.h"
-#include "net/eathena/buyingstorehandler.h"
-#include "net/eathena/buysellhandler.h"
-#include "net/eathena/cashshophandler.h"
-#include "net/eathena/chathandler.h"
-#include "net/eathena/charserverhandler.h"
-#include "net/eathena/elementalhandler.h"
-#include "net/eathena/familyhandler.h"
-#include "net/eathena/friendshandler.h"
-#include "net/eathena/gamehandler.h"
-#include "net/eathena/guildhandler.h"
-#include "net/eathena/homunculushandler.h"
-#include "net/eathena/inventoryhandler.h"
-#include "net/eathena/itemhandler.h"
-#include "net/eathena/loginhandler.h"
-#include "net/eathena/maphandler.h"
-#include "net/eathena/mail2handler.h"
-#include "net/eathena/mailhandler.h"
-#include "net/eathena/markethandler.h"
-#include "net/eathena/mercenaryhandler.h"
-#include "net/eathena/network.h"
-#include "net/eathena/npchandler.h"
-#include "net/eathena/partyhandler.h"
-#include "net/eathena/pethandler.h"
-#include "net/eathena/playerhandler.h"
-#include "net/eathena/roulettehandler.h"
-#include "net/eathena/searchstorehandler.h"
-#include "net/eathena/serverfeatures.h"
-#include "net/eathena/tradehandler.h"
-#include "net/eathena/skillhandler.h"
-#include "net/eathena/questhandler.h"
-#include "net/eathena/vendinghandler.h"
-
-#include "utils/delete2.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-GeneralHandler::GeneralHandler() :
- mAdminHandler(new AdminHandler),
- mBeingHandler(new BeingHandler(config.getBoolValue("EnableSync"))),
- mBuySellHandler(new BuySellHandler),
- mCharServerHandler(new CharServerHandler),
- mChatHandler(new ChatHandler),
- mGameHandler(new GameHandler),
- mGuildHandler(new GuildHandler),
- mInventoryHandler(new InventoryHandler),
- mItemHandler(new ItemHandler),
- mLoginHandler(new LoginHandler),
- mNpcHandler(new NpcHandler),
- mPartyHandler(new PartyHandler),
- mPetHandler(new PetHandler),
- mPlayerHandler(new PlayerHandler),
- mSkillHandler(new SkillHandler),
- mTradeHandler(new TradeHandler),
- mQuestHandler(new QuestHandler),
- mServerFeatures(new ServerFeatures),
- mMail2Handler(new Mail2Handler),
- mMailHandler(new MailHandler),
- mAuctionHandler(new AuctionHandler),
- mCashShopHandler(new CashShopHandler),
- mFamilyHandler(new FamilyHandler),
- mBankHandler(new BankHandler),
- mBattleGroundHandler(new BattleGroundHandler),
- mMercenaryHandler(new MercenaryHandler),
- mBuyingStoreHandler(new BuyingStoreHandler),
- mHomunculusHandler(new HomunculusHandler),
- mFriendsHandler(new FriendsHandler),
- mElementalHandler(new ElementalHandler),
- mMapHandler(new MapHandler),
- mMarketHandler(new MarketHandler),
- mVendingHandler(new VendingHandler),
- mRouletteHandler(new RouletteHandler),
- mSearchStoreHandler(new SearchStoreHandler)
-{
- generalHandler = this;
-}
-
-GeneralHandler::~GeneralHandler()
-{
- delete2(Network::mInstance);
-
- delete2(mAdminHandler);
- delete2(mBeingHandler);
- delete2(mBuySellHandler);
- delete2(mCharServerHandler);
- delete2(mChatHandler);
- delete2(mGameHandler);
- delete2(mGuildHandler);
- delete2(mInventoryHandler);
- delete2(mItemHandler);
- delete2(mLoginHandler);
- delete2(mNpcHandler);
- delete2(mPartyHandler);
- delete2(mPetHandler);
- delete2(mPlayerHandler);
- delete2(mSkillHandler);
- delete2(mTradeHandler);
- delete2(mQuestHandler);
- delete2(mServerFeatures);
- delete2(mMail2Handler);
- delete2(mMailHandler);
- delete2(mAuctionHandler);
- delete2(mCashShopHandler);
- delete2(mFamilyHandler);
- delete2(mBankHandler);
- delete2(mBattleGroundHandler);
- delete2(mMercenaryHandler);
- delete2(mBuyingStoreHandler);
- delete2(mHomunculusHandler);
- delete2(mFriendsHandler);
- delete2(mElementalHandler);
- delete2(mMapHandler);
- delete2(mMarketHandler);
- delete2(mVendingHandler);
- delete2(mRouletteHandler);
- delete2(mSearchStoreHandler);
-}
-
-void GeneralHandler::load() const
-{
- new Network;
- Network::mInstance->registerHandlers();
-}
-
-void GeneralHandler::reload() const
-{
- if (Network::mInstance != nullptr)
- Network::mInstance->disconnect();
-
- static_cast<LoginHandler*>(mLoginHandler)->clearWorlds();
- const CharServerHandler *const charHandler =
- static_cast<CharServerHandler*>(mCharServerHandler);
- charHandler->setCharCreateDialog(nullptr);
- charHandler->setCharSelectDialog(nullptr);
- PartyHandler::reload();
-}
-
-void GeneralHandler::reloadPartially() const
-{
- PartyHandler::reload();
-}
-
-void GeneralHandler::unload() const
-{
- clearHandlers();
-}
-
-void GeneralHandler::flushSend() const
-{
- if (Network::mInstance == nullptr)
- return;
-
- Network::mInstance->flush();
-}
-
-void GeneralHandler::flushNetwork() const
-{
- if (Network::mInstance == nullptr)
- return;
-
- Network::mInstance->flush();
- Network::mInstance->dispatchMessages();
-
- if (Network::mInstance->getState() == Network::NET_ERROR)
- {
- if (!Network::mInstance->getError().empty())
- {
- errorMessage = Network::mInstance->getError();
- }
- else
- {
- // TRANSLATORS: error message
- errorMessage = _("Got disconnected from server!");
- }
-
- client->setState(State::ERROR);
- }
-}
-
-void GeneralHandler::clearHandlers() const
-{
- if (Network::mInstance != nullptr)
- Network::mInstance->clearHandlers();
-}
-
-void GeneralHandler::gameStarted() const
-{
- if (skillDialog != nullptr)
- skillDialog->loadSkills();
-}
-
-void GeneralHandler::gameEnded() const
-{
- if (socialWindow != nullptr)
- {
- socialWindow->removeTab(taGuild);
- socialWindow->removeTab(Ea::taParty);
- }
-
- delete2(guildTab);
- delete2(partyTab);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/generalhandler.h b/src/net/eathena/generalhandler.h
deleted file mode 100644
index c4ff43402..000000000
--- a/src/net/eathena/generalhandler.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GENERALHANDLER_H
-#define NET_EATHENA_GENERALHANDLER_H
-
-#include "net/generalhandler.h"
-
-namespace EAthena
-{
-
-class AdminHandler;
-class BeingHandler;
-class BuySellHandler;
-class CharServerHandler;
-class ChatHandler;
-class GameHandler;
-class GuildHandler;
-class InventoryHandler;
-class ItemHandler;
-class LoginHandler;
-class NpcHandler;
-class PartyHandler;
-class PetHandler;
-class PlayerHandler;
-class SkillHandler;
-class TradeHandler;
-class QuestHandler;
-class ServerFeatures;
-class AuctionHandler;
-class BankHandler;
-class BattleGroundHandler;
-class BuyingStoreHandler;
-class CashShopHandler;
-class ElementalHandler;
-class FamilyHandler;
-class FriendsHandler;
-class HomunculusHandler;
-class MailHandler;
-class Mail2Handler;
-class MapHandler;
-class MarketHandler;
-class MercenaryHandler;
-class RouletteHandler;
-class SearchStoreHandler;
-class VendingHandler;
-
-class GeneralHandler final : public Net::GeneralHandler
-{
- public:
- GeneralHandler();
-
- A_DELETE_COPY(GeneralHandler)
-
- ~GeneralHandler();
-
- void load() const override final;
-
- void reload() const override final;
-
- void unload() const override final;
-
- void flushNetwork() const override final;
-
- void flushSend() const override final;
-
- void clearHandlers() const override final;
-
- void reloadPartially() const override final;
-
- void gameStarted() const override final;
-
- void gameEnded() const override final;
-
- protected:
- AdminHandler *mAdminHandler;
- BeingHandler *mBeingHandler;
- BuySellHandler *mBuySellHandler;
- CharServerHandler *mCharServerHandler;
- ChatHandler *mChatHandler;
- GameHandler *mGameHandler;
- GuildHandler *mGuildHandler;
- InventoryHandler *mInventoryHandler;
- ItemHandler *mItemHandler;
- LoginHandler *mLoginHandler;
- NpcHandler *mNpcHandler;
- PartyHandler *mPartyHandler;
- PetHandler *mPetHandler;
- PlayerHandler *mPlayerHandler;
- SkillHandler *mSkillHandler;
- TradeHandler *mTradeHandler;
- QuestHandler *mQuestHandler;
- ServerFeatures *mServerFeatures;
- Mail2Handler *mMail2Handler;
- MailHandler *mMailHandler;
- AuctionHandler *mAuctionHandler;
- CashShopHandler *mCashShopHandler;
- FamilyHandler *mFamilyHandler;
- BankHandler *mBankHandler;
- BattleGroundHandler *mBattleGroundHandler;
- MercenaryHandler *mMercenaryHandler;
- BuyingStoreHandler *mBuyingStoreHandler;
- HomunculusHandler *mHomunculusHandler;
- FriendsHandler *mFriendsHandler;
- ElementalHandler *mElementalHandler;
- MapHandler *mMapHandler;
- MarketHandler *mMarketHandler;
- VendingHandler *mVendingHandler;
- RouletteHandler *mRouletteHandler;
- SearchStoreHandler *mSearchStoreHandler;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_GENERALHANDLER_H
diff --git a/src/net/eathena/generalrecv.cpp b/src/net/eathena/generalrecv.cpp
deleted file mode 100644
index 2074fe31e..000000000
--- a/src/net/eathena/generalrecv.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/generalrecv.h"
-
-#include "client.h"
-#include "logger.h"
-
-#include "net/messagein.h"
-
-#include "utils/cast.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-ServerInfo charServer;
-ServerInfo mapServer;
-
-void GeneralRecv::processConnectionProblem(Net::MessageIn &msg)
-{
- const uint8_t code = msg.readUInt8("flag");
- logger->log("Connection problem: %u", CAST_U32(code));
-
- switch (code)
- {
- case 0:
- // TRANSLATORS: error message
- errorMessage = _("Authentication failed.");
- break;
- case 1:
- // TRANSLATORS: error message
- errorMessage = _("No servers available.");
- break;
- case 2:
- if (client->getState() == State::GAME)
- {
- // TRANSLATORS: error message
- errorMessage = _("Someone else is trying to use "
- "this account.");
- }
- else
- {
- // TRANSLATORS: error message
- errorMessage = _("This account is already logged in.");
- }
- break;
- case 3:
- // TRANSLATORS: error message
- errorMessage = _("Speed hack detected.");
- break;
- case 4:
- // TRANSLATORS: error message
- errorMessage = _("Server full.");
- break;
- case 5:
- // TRANSLATORS: error message
- errorMessage = _("Sorry, you are underaged.");
- break;
- case 8:
- // TRANSLATORS: error message
- errorMessage = _("Duplicated login.");
- break;
- case 9:
- // TRANSLATORS: error message
- errorMessage = _("To many connections from same ip.");
- break;
- case 10:
- // TRANSLATORS: error message
- errorMessage = _("Not paid for this time.");
- break;
- case 11:
- // TRANSLATORS: error message
- errorMessage = _("Pay suspended.");
- break;
- case 12:
- // TRANSLATORS: error message
- errorMessage = _("Pay changed.");
- break;
- case 13:
- // TRANSLATORS: error message
- errorMessage = _("Pay wrong ip.");
- break;
- case 14:
- // TRANSLATORS: error message
- errorMessage = _("Pay game room.");
- break;
- case 15:
- // TRANSLATORS: error message
- errorMessage = _("Disconnect forced by GM.");
- break;
- case 16:
- case 17:
- // TRANSLATORS: error message
- errorMessage = _("Ban japan refuse.");
- break;
- case 18:
- // TRANSLATORS: error message
- errorMessage = _("Remained other account.");
- break;
- case 100:
- // TRANSLATORS: error message
- errorMessage = _("Ip unfair.");
- break;
- case 101:
- // TRANSLATORS: error message
- errorMessage = _("Ip count all.");
- break;
- case 102:
- // TRANSLATORS: error message
- errorMessage = _("Ip count.");
- break;
- case 103:
- case 104:
- // TRANSLATORS: error message
- errorMessage = _("Memory.");
- break;
- case 105:
- // TRANSLATORS: error message
- errorMessage = _("Han valid.");
- break;
- case 106:
- // TRANSLATORS: error message
- errorMessage = _("Ip limited access.");
- break;
- case 107:
- // TRANSLATORS: error message
- errorMessage = _("Over characters list.");
- break;
- case 108:
- // TRANSLATORS: error message
- errorMessage = _("Ip blocked.");
- break;
- case 109:
- // TRANSLATORS: error message
- errorMessage = _("Invalid password count.");
- break;
- case 110:
- // TRANSLATORS: error message
- errorMessage = _("Not allowed race.");
- break;
- default:
- // TRANSLATORS: error message
- errorMessage = _("Unknown connection error.");
- break;
- }
- client->setState(State::ERROR);
-}
-
-void GeneralRecv::processMapNotFound(Net::MessageIn &msg)
-{
- const int sz = msg.readInt16("len") - 4;
- msg.readString(sz, "map name?");
- // TRANSLATORS: error message
- errorMessage = _("Map not found");
- client->setState(State::ERROR);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/generalrecv.h b/src/net/eathena/generalrecv.h
deleted file mode 100644
index fa5088c3d..000000000
--- a/src/net/eathena/generalrecv.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GENERALRECV_H
-#define NET_EATHENA_GENERALRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace GeneralRecv
- {
- void processConnectionProblem(Net::MessageIn &msg);
- void processMapNotFound(Net::MessageIn &msg);
- } // namespace GeneralRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_GENERALRECV_H
diff --git a/src/net/eathena/guildhandler.cpp b/src/net/eathena/guildhandler.cpp
deleted file mode 100644
index b55918f85..000000000
--- a/src/net/eathena/guildhandler.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/guildhandler.h"
-
-#include "actormanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "gui/widgets/tabs/chat/guildtab.h"
-
-#include "net/eathena/guildrecv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/delete2.h"
-
-#include "debug.h"
-
-GuildTab *guildTab = nullptr;
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-GuildHandler::GuildHandler() :
- Net::GuildHandler()
-{
- guildHandler = this;
- GuildRecv::showBasicInfo = false;
-}
-
-GuildHandler::~GuildHandler()
-{
- delete2(guildTab);
- guildHandler = nullptr;
- taGuild = nullptr;
-}
-
-void GuildHandler::clear() const
-{
- taGuild = nullptr;
-}
-
-ChatTab *GuildHandler::getTab() const
-{
- return guildTab;
-}
-
-void GuildHandler::create(const std::string &name) const
-{
- createOutPacket(CMSG_GUILD_CREATE);
- outMsg.writeInt32(0, "unused");
- outMsg.writeString(name, 24, "guild name");
-}
-
-void GuildHandler::invite(const std::string &name) const
-{
- if (actorManager == nullptr)
- return;
-
- const Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being != nullptr)
- {
- createOutPacket(CMSG_GUILD_INVITE);
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- }
- else if (packetVersion >= 20120418)
- {
- createOutPacket(CMSG_GUILD_INVITE2);
- outMsg.writeString(name, 24, "name");
- }
-}
-
-void GuildHandler::invite(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_GUILD_INVITE);
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
-}
-
-void GuildHandler::inviteResponse(const int guildId,
- const bool response) const
-{
- createOutPacket(CMSG_GUILD_INVITE_REPLY);
- outMsg.writeInt32(guildId, "guild id");
- outMsg.writeInt8(static_cast<int8_t>(response), "response");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(0, "unused");
-}
-
-void GuildHandler::leave(const int guildId) const
-{
- if (localPlayer == nullptr)
- return;
-
- createOutPacket(CMSG_GUILD_LEAVE);
- outMsg.writeInt32(guildId, "guild id");
- outMsg.writeBeingId(localPlayer->getId(), "account id");
- outMsg.writeInt32(PlayerInfo::getCharId(), "char id");
- outMsg.writeString("", 40, "message");
-}
-
-void GuildHandler::kick(const GuildMember *restrict const member,
- const std::string &restrict reason) const
-{
- if ((member == nullptr) || (member->getGuild() == nullptr))
- return;
-
- createOutPacket(CMSG_GUILD_EXPULSION);
- outMsg.writeInt32(member->getGuild()->getId(), "guild id");
- outMsg.writeBeingId(member->getID(), "account id");
- outMsg.writeInt32(member->getCharId(), "char id");
- outMsg.writeString(reason, 40, "message");
-}
-
-void GuildHandler::chat(const std::string &text) const
-{
- if (localPlayer == nullptr)
- return;
-
- const std::string str = std::string(localPlayer->getName()).append(
- " : ").append(text);
- createOutPacket(CMSG_GUILD_MESSAGE);
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt16(CAST_U16(str.size() + 4), "len");
- outMsg.writeString(str, CAST_S32(str.length()), "message");
- }
- else
- {
- outMsg.writeInt16(CAST_U16(str.size() + 4 + 1), "len");
- outMsg.writeString(str, CAST_S32(str.length()), "message");
- outMsg.writeInt8(0, "zero byte");
- }
-}
-
-void GuildHandler::memberList() const
-{
- // 0 = basic info + alliance info
- // 1 = position name list + member list
- // 2 = position name list + position info list
- // 3 = skill info
- // 4 = expulsion list
-
- createOutPacket(CMSG_GUILD_REQUEST_INFO);
- outMsg.writeInt32(1, "action"); // Request member list
-}
-
-void GuildHandler::info() const
-{
- // 0 = basic info + alliance info
- // 1 = position name list + member list
- // 2 = position name list + position info list
- // 3 = skill info
- // 4 = expulsion list
-
- GuildRecv::showBasicInfo = true;
- createOutPacket(CMSG_GUILD_REQUEST_INFO);
- outMsg.writeInt32(0, "action"); // Request basic info
-}
-
-void GuildHandler::changeMemberPostion(const GuildMember *const member,
- const int level) const
-{
- if ((member == nullptr) || (member->getGuild() == nullptr))
- return;
-
- createOutPacket(CMSG_GUILD_CHANGE_MEMBER_POS);
- outMsg.writeInt16(16, "len");
- outMsg.writeBeingId(member->getID(), "account id");
- outMsg.writeInt32(member->getCharId(), "char id");
- outMsg.writeInt32(level, "pos");
-}
-
-void GuildHandler::changeNotice(const int guildId,
- const std::string &restrict msg1,
- const std::string &restrict msg2) const
-{
- createOutPacket(CMSG_GUILD_CHANGE_NOTICE);
- outMsg.writeInt32(guildId, "guild id");
- outMsg.writeString(msg1, 60, "msg1");
- outMsg.writeString(msg2, 120, "msg2");
-}
-
-void GuildHandler::checkMaster() const
-{
- createOutPacket(CMSG_GUILD_CHECK_MASTER);
-}
-
-void GuildHandler::requestAlliance(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_GUILD_ALLIANCE_REQUEST);
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt32(0, "inviter account id");
- outMsg.writeInt32(0, "inviter char id");
-}
-
-void GuildHandler::requestAllianceResponse(const int beingId,
- const bool accept) const
-{
- createOutPacket(CMSG_GUILD_ALLIANCE_REPLY);
- outMsg.writeInt32(beingId, "account id");
- outMsg.writeInt32(static_cast<int32_t>(accept), "accept flag");
-}
-
-void GuildHandler::endAlliance(const int guildId,
- const int flag) const
-{
- createOutPacket(CMSG_GUILD_ALLIANCE_DELETE);
- outMsg.writeInt32(guildId, "guild id");
- outMsg.writeInt32(flag, "flag");
-}
-
-void GuildHandler::changePostionInfo(const int posId,
- const int mode,
- const int ranking,
- const int payRate,
- const std::string &name) const
-{
- createOutPacket(CMSG_GUILD_CHANGE_POS_INFO);
- outMsg.writeInt16(44, "len");
- outMsg.writeInt32(posId, "position id");
- outMsg.writeInt32(mode, "mode");
- outMsg.writeInt32(ranking, "ranking");
- outMsg.writeInt32(payRate, "pay rate");
- outMsg.writeString(name, 24, "name");
-}
-
-void GuildHandler::requestOpposition(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_GUILD_OPPOSITION);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void GuildHandler::breakGuild(const std::string &name) const
-{
- createOutPacket(CMSG_GUILD_BREAK);
- outMsg.writeString(name, 40, "name");
-}
-
-void GuildHandler::changeEmblem(std::string emblem) const
-{
- createOutPacket(CMSG_GUILD_CHANGE_EMBLEM);
- if (emblem.size() > 200)
- emblem = emblem.substr(0, 200);
- const int sz = CAST_S32(emblem.size());
- outMsg.writeInt16(CAST_S16(sz + 4), "len");
- outMsg.writeString(emblem, sz, "emblem");
-}
-
-void GuildHandler::requestEmblem(const int guildId) const
-{
- createOutPacket(CMSG_GUILD_REQUEST_EMBLEM);
- outMsg.writeInt32(guildId, "guild id");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/guildhandler.h b/src/net/eathena/guildhandler.h
deleted file mode 100644
index b9475f1b8..000000000
--- a/src/net/eathena/guildhandler.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GUILDHANDLER_H
-#define NET_EATHENA_GUILDHANDLER_H
-
-#include "net/guildhandler.h"
-
-class GuildTab;
-
-namespace EAthena
-{
-
-class GuildHandler final : public Net::GuildHandler
-{
- public:
- GuildHandler();
-
- A_DELETE_COPY(GuildHandler)
-
- ~GuildHandler();
-
- void clear() const override final;
-
- ChatTab *getTab() const override final;
-
- void create(const std::string &name) const override final;
-
- void invite(const std::string &name) const override final;
-
- void invite(const Being *const being) const override final;
-
- void inviteResponse(const int guildId,
- const bool response) const override final;
-
- void leave(const int guildId) const override final;
-
- void kick(const GuildMember *restrict const member,
- const std::string &restrict reason) const override final;
-
- void chat(const std::string &text) const override final;
-
- void memberList() const override final;
-
- void info() const override final;
-
- void changeMemberPostion(const GuildMember *const member,
- const int level) const override final;
-
- void changeNotice(const int guildId,
- const std::string &restrict msg1,
- const std::string &restrict msg2)
- const override final;
-
- void checkMaster() const override final;
-
- void requestAlliance(const Being *const being) const override final;
-
- void requestAllianceResponse(const int beingId,
- const bool accept) const override final;
-
- void endAlliance(const int guildId,
- const int flag) const override final;
-
- void changePostionInfo(const int posId,
- const int mode,
- const int ranking,
- const int payRate,
- const std::string &name) const override final;
-
- void requestOpposition(const Being *const being) const override final;
-
- void breakGuild(const std::string &name) const override final;
-
- void changeEmblem(std::string emblem) const override final;
-
- void requestEmblem(const int guildId) const override final;
-};
-
-extern Guild *taGuild;
-
-} // namespace EAthena
-
-extern GuildTab *guildTab;
-
-#endif // NET_EATHENA_GUILDHANDLER_H
diff --git a/src/net/eathena/guildrecv.cpp b/src/net/eathena/guildrecv.cpp
deleted file mode 100644
index d235c23bb..000000000
--- a/src/net/eathena/guildrecv.cpp
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/guildrecv.h"
-
-#include "actormanager.h"
-#include "configuration.h"
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/chatwindow.h"
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/socialwindow.h"
-
-#include "gui/widgets/tabs/chat/guildtab.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/guildhandler.h"
-
-#include "utils/delete2.h"
-#include "utils/checkutils.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-Guild *taGuild = nullptr;
-
-namespace GuildRecv
-{
- bool showBasicInfo = false;
-} // namespace GuildRecv
-
-void GuildRecv::processGuildCreateResponse(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("flag");
-
- switch (flag)
- {
- case 0:
- // Success
- NotifyManager::notify(NotifyTypes::GUILD_CREATED);
- break;
-
- case 1:
- // Already in a guild
- NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
- break;
-
- case 2:
- // Unable to make (likely name already in use)
- NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
- break;
-
- case 3:
- // Emperium check failed
- NotifyManager::notify(NotifyTypes::GUILD_EMPERIUM_CHECK_FAILED);
- break;
-
- default:
- // Unknown response
- NotifyManager::notify(NotifyTypes::GUILD_ERROR);
- break;
- }
-}
-
-void GuildRecv::processGuildMasterOrMember(Net::MessageIn &msg)
-{
- msg.readInt32("type"); // Type (0x57 for member, 0xd7 for master)
-}
-
-void GuildRecv::processGuildBasicInfo(Net::MessageIn &msg)
-{
- const int guildId = msg.readInt32("guild id");
- const int level = msg.readInt32("guild level");
- const int members = msg.readInt32("connect member");
- const int maxMembers = msg.readInt32("max member");
- const int avgLevel = msg.readInt32("average level");
- const int exp = msg.readInt32("exp");
- const int nextExp = msg.readInt32("next exp");
- msg.skip(12, "unused");
- const int emblem = msg.readInt32("emblem id");
- std::string name = msg.readString(24, "guild name");
- std::string castle;
- std::string master;
- if (msg.getVersion() >= 20160622)
- {
- castle = msg.readString(16, "castles");
- msg.readInt32("money, unused");
- msg.readBeingId("leader char id");
- }
- else
- {
- master = msg.readString(24, "master name");
- castle = msg.readString(16, "castles");
- msg.readInt32("money, unused");
- }
-
- if (guildTab != nullptr &&
- showBasicInfo)
- {
- showBasicInfo = false;
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild name: %s"),
- name.c_str()), ChatMsgType::BY_SERVER);
- if (!master.empty())
- {
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild master: %s"),
- master.c_str()), ChatMsgType::BY_SERVER);
- }
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild level: %d"), level),
- ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Online members: %d"),
- members), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Max members: %d"),
- maxMembers), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Average level: %d"),
- avgLevel), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild exp: %d"), exp),
- ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild next exp: %d"),
- nextExp), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild castle: %s"),
- castle.c_str()), ChatMsgType::BY_SERVER);
- }
-
- Guild *const g = Guild::getGuild(CAST_S16(guildId));
- if (g == nullptr)
- return;
- g->setName(name);
- g->setEmblemId(emblem);
-}
-
-void GuildRecv::processGuildAlianceInfo(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 32;
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt32("opposition");
- msg.readInt32("guild id");
- msg.readString(24, "guild name");
- }
-}
-
-void GuildRecv::processGuildMemberList(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- int guildSize = 0;
- if (msg.getVersion() >= 20161026)
- {
- guildSize = 34;
- reportAlways("missing guild member names");
- }
- else
- {
- guildSize = 104;
- }
-
- const int count = (length - 4) / guildSize;
- if (taGuild == nullptr)
- {
- logger->log1("!taGuild");
- return;
- }
-
- taGuild->clearMembers();
-
- int onlineNum = 0;
- int totalNum = 0;
- for (int i = 0; i < count; i++)
- {
- const BeingId id = msg.readBeingId("account id");
- const int charId = msg.readInt32("char id");
- msg.readInt16("hair");
- msg.readInt16("hair color");
- const int gender = msg.readInt16("gender");
- const int race = msg.readInt16("class");
- const int level = msg.readInt16("level");
- const int exp = msg.readInt32("exp");
- const int online = msg.readInt32("online");
- const int pos = msg.readInt32("position");
- std::string name;
- if (msg.getVersion() < 20161026)
- {
- msg.skip(50, "unused");
- name = msg.readString(24, "name");
- }
- else
- {
- msg.readInt32("last login"); // for now unused
- continue;
- }
-
- GuildMember *const m = taGuild->addMember(id, charId, name);
- if (m != nullptr)
- {
- m->setOnline(online != 0);
- m->setID(id);
- m->setCharId(charId);
- m->setGender(Being::intToGender(CAST_U8(gender)));
- m->setLevel(level);
- m->setExp(exp);
- m->setPos(pos);
- m->setRace(race);
- if (actorManager != nullptr)
- {
- Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being != nullptr)
- {
- being->setGuildName(taGuild->getName());
- if (being->getLevel() != level)
- {
- being->setLevel(level);
- being->updateName();
- }
- }
- }
- if (online != 0)
- onlineNum ++;
- totalNum ++;
- }
- }
- taGuild->sort();
- if (actorManager != nullptr)
- {
- actorManager->updatePlayerGuild();
- actorManager->updatePlayerColors();
- }
- if (socialWindow != nullptr)
- socialWindow->updateGuildCounter(onlineNum, totalNum);
-}
-
-void GuildRecv::processGuildPosNameList(Net::MessageIn &msg)
-{
- if (taGuild == nullptr)
- {
- logger->log1("!taGuild");
- return;
- }
-
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 28;
-
- for (int i = 0; i < count; i++)
- {
- const int id = msg.readInt32("position id");
- const std::string name = msg.readString(24, "position name");
- taGuild->addPos(id, name);
- }
-}
-
-void GuildRecv::processGuildPosInfoList(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 16;
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt32("id");
- msg.readInt32("mode");
- msg.readInt32("same id");
- msg.readInt32("exp mode");
- }
-}
-
-void GuildRecv::processGuildPositionChanged(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("len");
- msg.readInt32("id");
- msg.readInt32("mode");
- msg.readInt32("same ip");
- msg.readInt32("exp mode");
- msg.readString(24, "name");
-}
-
-void GuildRecv::processGuildMemberPosChange(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const BeingId accountId = msg.readBeingId("account id");
- const int charId = msg.readInt32("char id");
- const int pos = msg.readInt32("position");
- if (taGuild != nullptr)
- {
- GuildMember *const m = taGuild->getMember(accountId, charId);
- if (m != nullptr)
- m->setPos(pos);
- }
-}
-
-void GuildRecv::processGuildEmblemData(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int length = msg.readInt16("len");
-
- msg.readInt32("guild id");
- msg.readInt32("emblem id");
- if (length < 12)
- return;
- msg.skip(length - 12, "emblem data");
-}
-
-void GuildRecv::processGuildSkillInfo(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 6) / 37;
- msg.readInt16("skill points");
-
- if (skillDialog != nullptr)
- skillDialog->hideSkills(SkillOwner::Guild);
- for (int i = 0; i < count; i++)
- {
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Guild,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog != nullptr)
- skillDialog->updateModels();
-}
-
-void GuildRecv::processGuildNotice(Net::MessageIn &msg)
-{
- if (guildTab != nullptr)
- {
- const std::string msg1 = msg.readString(60, "msg1");
- const std::string msg2 = msg.readString(120, "msg2");
- guildTab->chatLog(msg1, ChatMsgType::BY_SERVER);
- guildTab->chatLog(msg2, ChatMsgType::BY_SERVER);
- }
- else
- {
- msg.readString(60, "msg1");
- msg.readString(120, "msg2");
- }
-}
-
-void GuildRecv::processGuildInvite(Net::MessageIn &msg)
-{
- const int guildId = msg.readInt32("guild id");
-
- if (socialWindow != nullptr)
- {
- const std::string guildName = msg.readString(24, "guild name");
- socialWindow->showGuildInvite(guildName, guildId, "");
- }
- else
- {
- msg.readString(24, "guild name");
- }
-}
-
-void GuildRecv::processGuildInviteAck(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("flag");
- if (guildTab == nullptr)
- return;
-
- switch (flag)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_FAILED);
- break;
-
- case 1:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_REJECTED);
- break;
-
- case 2:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_JOINED);
- break;
-
- case 3:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_FULL);
- break;
-
- default:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_ERROR);
- break;
- }
-}
-
-void GuildRecv::processGuildLeave(Net::MessageIn &msg)
-{
- const std::string nick = msg.readString(24, "nick");
- msg.readString(40, "message");
-
- if (taGuild != nullptr)
- taGuild->removeMember(nick);
-
- if (localPlayer == nullptr)
- return;
-
- if (nick == localPlayer->getName())
- {
- if (taGuild != nullptr)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- localPlayer->removeGuild(taGuild->getId());
- }
- NotifyManager::notify(NotifyTypes::GUILD_LEFT);
- delete2(guildTab)
-
- if ((socialWindow != nullptr) && (taGuild != nullptr))
- socialWindow->removeTab(taGuild);
- if (actorManager != nullptr)
- actorManager->updatePlayerColors();
- }
- else
- {
- NotifyManager::notify(NotifyTypes::GUILD_USER_LEFT, nick);
- if (actorManager != nullptr)
- {
- Being *const b = actorManager->findBeingByName(
- nick, ActorType::Player);
-
- if (b != nullptr)
- b->clearGuilds();
- if (taGuild != nullptr)
- taGuild->removeMember(nick);
- }
- }
-}
-
-void GuildRecv::processGuildMessage(Net::MessageIn &msg)
-{
- const int msgLength = msg.readInt16("len") - 4;
-
- if (msgLength <= 0)
- return;
- if (guildTab != nullptr)
- {
- std::string chatMsg = msg.readString(msgLength, "message");
- const size_t pos = chatMsg.find(" : ", 0);
- if (pos != std::string::npos)
- {
- const std::string sender_name = chatMsg.substr(0, pos);
- chatMsg.erase(0, pos + 3);
- trim(chatMsg);
- guildTab->chatLog(sender_name, chatMsg);
- }
- else
- {
- guildTab->chatLog(chatMsg, ChatMsgType::BY_SERVER);
- }
- }
- else
- {
- DEBUGLOGSTR("invisible guild?");
- msg.readString(msgLength, "message");
- }
-}
-
-void GuildRecv::processGuildSkillUp(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("skill id");
- msg.readInt16("level");
- msg.readInt16("sp");
- msg.readInt16("range");
- msg.readUInt8("unused?");
-}
-
-void GuildRecv::processGuildReqAlliance(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("id");
- msg.readString(24, "name");
-}
-
-void GuildRecv::processGuildReqAllianceAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildDelAlliance(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("guild id");
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildOppositionAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("flag");
-}
-
-void GuildRecv::processGuildBroken(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildExpulsionContinue(const std::string &nick)
-{
- if (taGuild != nullptr)
- taGuild->removeMember(nick);
-
- if (localPlayer == nullptr)
- return;
-
- if (nick == localPlayer->getName())
- {
- if (taGuild != nullptr)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- }
- NotifyManager::notify(NotifyTypes::GUILD_KICKED);
- delete2(guildTab)
-
- if ((socialWindow != nullptr) && (taGuild != nullptr))
- socialWindow->removeTab(taGuild);
- if (actorManager != nullptr)
- actorManager->updatePlayerColors();
- }
- else
- {
- NotifyManager::notify(NotifyTypes::GUILD_USER_KICKED, nick);
- if (actorManager != nullptr)
- {
- Being *const b = actorManager->findBeingByName(
- nick, ActorType::Player);
-
- if (b != nullptr)
- b->clearGuilds();
- if (taGuild != nullptr)
- taGuild->removeMember(nick);
- }
- }
-}
-
-void GuildRecv::processGuildUpdateCoords(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("account id");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- if (taGuild != nullptr)
- {
- GuildMember *const m = taGuild->getMember(id);
- if (m != nullptr)
- {
- m->setX(x);
- m->setY(y);
- }
- }
-}
-
-void GuildRecv::processGuildPositionInfo(Net::MessageIn &msg)
-{
- const int guildId = msg.readInt32("guild id");
- const int emblem = msg.readInt32("elblem id");
- PlayerInfo::setGuildPositionFlags(
- static_cast<GuildPositionFlags::Type>(msg.readInt32("mode")));
- msg.readUInt8("guild master");
- msg.readInt32("unused");
- std::string guildName = msg.readString(24, "guild name");
-
- Guild *const g = Guild::getGuild(CAST_S16(guildId));
- if (g == nullptr)
- return;
-
- g->setName(guildName);
- g->setEmblemId(emblem);
- if (taGuild == nullptr)
- taGuild = g;
- if ((guildTab == nullptr) && (chatWindow != nullptr))
- {
- guildTab = new GuildTab(chatWindow);
- if (config.getBoolValue("showChatHistory"))
- guildTab->loadFromLogFile("#Guild");
- if (localPlayer != nullptr)
- localPlayer->addGuild(taGuild);
- guildHandler->memberList();
- }
-
- if (localPlayer != nullptr)
- {
- localPlayer->setGuild(g);
- localPlayer->setGuildName(g->getName());
- }
-}
-
-void GuildRecv::processGuildMemberLogin(Net::MessageIn &msg)
-{
- const BeingId accountId = msg.readBeingId("account id");
- const int charId = msg.readInt32("char id");
- const int online = msg.readInt32("flag");
- const GenderT gender = Being::intToGender(CAST_U8(
- msg.readInt16("sex")));
- msg.readInt16("hair");
- msg.readInt16("hair color");
- if (taGuild != nullptr)
- {
- GuildMember *const m = taGuild->getMember(accountId, charId);
- if (m != nullptr)
- {
- m->setOnline(online != 0);
- if (online != 0)
- m->setGender(gender);
- if (guildTab != nullptr)
- guildTab->showOnline(m->getName(), fromBool(online, Online));
- if (socialWindow != nullptr)
- socialWindow->updateGuildCounter();
- }
- }
-}
-
-void GuildRecv::processGuildExpulsion(Net::MessageIn &msg)
-{
- const std::string nick = msg.readString(24, "name");
- msg.readString(40, "message");
-
- GuildRecv::processGuildExpulsionContinue(nick);
-}
-
-void GuildRecv::processGuildExpulsionList(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
-
- int count;
- if (msg.getVersion() < 20100803)
- {
- count = (length - 4) / 64;
- for (int i = 0; i < count; i++)
- {
- msg.readString(24, "name");
- msg.readString(40, "message");
- }
- }
- else
- {
- count = (length - 4) / 40;
- for (int i = 0; i < count; i++)
- msg.readString(40, "message");
- }
-}
-
-void GuildRecv::processGuildEmblem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("being id");
- msg.readInt32("guild id");
- msg.readInt16("emblem id");
-}
-
-void GuildRecv::processOnlineInfo(Net::MessageIn &msg)
-{
- // look like unused packet
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("being id");
- msg.readInt32("char id");
- msg.readInt32("online");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/guildrecv.h b/src/net/eathena/guildrecv.h
deleted file mode 100644
index f449480bf..000000000
--- a/src/net/eathena/guildrecv.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_GUILDRECV_H
-#define NET_EATHENA_GUILDRECV_H
-
-#include <string>
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-class Guild;
-class GuildTab;
-
-namespace EAthena
-{
- namespace GuildRecv
- {
- extern bool showBasicInfo;
-
- void processGuildCreateResponse(Net::MessageIn &msg);
- void processGuildMasterOrMember(Net::MessageIn &msg);
- void processGuildBasicInfo(Net::MessageIn &msg);
- void processGuildAlianceInfo(Net::MessageIn &msg);
- void processGuildMemberList(Net::MessageIn &msg);
- void processGuildPosNameList(Net::MessageIn &msg);
- void processGuildPosInfoList(Net::MessageIn &msg);
- void processGuildPositionChanged(Net::MessageIn &msg);
- void processGuildMemberPosChange(Net::MessageIn &msg);
- void processGuildEmblemData(Net::MessageIn &msg);
- void processGuildSkillInfo(Net::MessageIn &msg);
- void processGuildNotice(Net::MessageIn &msg);
- void processGuildInvite(Net::MessageIn &msg);
- void processGuildInviteAck(Net::MessageIn &msg);
- void processGuildLeave(Net::MessageIn &msg);
- void processGuildMessage(Net::MessageIn &msg);
- void processGuildSkillUp(Net::MessageIn &msg);
- void processGuildReqAlliance(Net::MessageIn &msg);
- void processGuildReqAllianceAck(Net::MessageIn &msg);
- void processGuildDelAlliance(Net::MessageIn &msg);
- void processGuildOppositionAck(Net::MessageIn &msg);
- void processGuildBroken(Net::MessageIn &msg);
- void processGuildExpulsionContinue(const std::string &nick);
- void processGuildUpdateCoords(Net::MessageIn &msg);
- void processGuildPositionInfo(Net::MessageIn &msg);
- void processGuildMemberLogin(Net::MessageIn &msg);
- void processGuildExpulsion(Net::MessageIn &msg);
- void processGuildExpulsionList(Net::MessageIn &msg);
- void processGuildEmblem(Net::MessageIn &msg);
- void processOnlineInfo(Net::MessageIn &msg);
- } // namespace GuildRecv
- extern Guild *taGuild;
-} // namespace EAthena
-
-extern GuildTab *guildTab;
-
-#endif // NET_EATHENA_GUILDRECV_H
diff --git a/src/net/eathena/homunculushandler.cpp b/src/net/eathena/homunculushandler.cpp
deleted file mode 100644
index 3a3021387..000000000
--- a/src/net/eathena/homunculushandler.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/homunculushandler.h"
-
-#include "being/playerinfo.h"
-
-#include "net/serverfeatures.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-HomunculusHandler::HomunculusHandler()
-{
- homunculusHandler = this;
-}
-
-HomunculusHandler::~HomunculusHandler()
-{
- homunculusHandler = nullptr;
-}
-
-void HomunculusHandler::setName(const std::string &name) const
-{
- createOutPacket(CMSG_HOMUNCULUS_SET_NAME);
- outMsg.writeString(name, 24, "name");
-}
-
-void HomunculusHandler::moveToMaster() const
-{
- const BeingId id = PlayerInfo::getHomunculusId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_MOVE_TO_MASTER);
- outMsg.writeBeingId(id, "homunculus id");
-}
-
-void HomunculusHandler::move(const int x, const int y) const
-{
- const BeingId id = PlayerInfo::getHomunculusId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_MOVE_TO);
- outMsg.writeBeingId(id, "homunculus id");
- outMsg.writeCoordinates(CAST_U16(x),
- CAST_U16(y),
- 1U, "position");
-}
-
-void HomunculusHandler::attack(const BeingId targetId,
- const Keep keep) const
-{
- const BeingId id = PlayerInfo::getHomunculusId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_ATTACK);
- outMsg.writeBeingId(id, "homunculus id");
- outMsg.writeBeingId(targetId, "target id");
- outMsg.writeInt8(CAST_S8(keep == Keep_true ? 1 : 0), "keep");
-}
-
-void HomunculusHandler::feed() const
-{
- if (packetVersion < 20050425)
- return;
- createOutPacket(CMSG_HOMUNCULUS_MENU);
- outMsg.writeInt16(0, "type");
- outMsg.writeInt8(1, "command"); // feed
-}
-
-void HomunculusHandler::fire() const
-{
- if (packetVersion < 20050425)
- return;
- createOutPacket(CMSG_HOMUNCULUS_MENU);
- outMsg.writeInt16(0, "type");
- outMsg.writeInt8(2, "command"); // delete
-}
-
-void HomunculusHandler::talk(const std::string &restrict text) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- if (text.empty())
- return;
- std::string msg = text;
- if (msg.size() > 500)
- msg = msg.substr(0, 500);
- const size_t sz = msg.size();
-
- createOutPacket(CMSG_HOMMERC_TALK);
- outMsg.writeInt16(CAST_S16(sz + 4 + 1), "len");
- outMsg.writeString(msg, CAST_S32(sz), "message");
- outMsg.writeInt8(0, "zero byte");
-}
-
-void HomunculusHandler::emote(const uint8_t emoteId) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_HOMMERC_EMOTE);
- outMsg.writeInt8(emoteId, "emote id");
-}
-
-void HomunculusHandler::setDirection(const unsigned char type) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_HOMMERC_DIRECTION);
- outMsg.writeInt32(0, "pet id");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(type),
- "pet direction");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/homunculushandler.h b/src/net/eathena/homunculushandler.h
deleted file mode 100644
index 817c6ee75..000000000
--- a/src/net/eathena/homunculushandler.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_HOMUNCULUSHANDLER_H
-#define NET_EATHENA_HOMUNCULUSHANDLER_H
-
-#include "net/homunculushandler.h"
-
-namespace EAthena
-{
-class HomunculusHandler final : public Net::HomunculusHandler
-{
- public:
- HomunculusHandler();
-
- A_DELETE_COPY(HomunculusHandler)
-
- ~HomunculusHandler();
-
- void setName(const std::string &name) const override final;
-
- void moveToMaster() const override final;
-
- void move(const int x, const int y) const override final;
-
- void attack(const BeingId targetId,
- const Keep keep) const override final;
-
- void feed() const override final;
-
- void fire() const override final;
-
- void talk(const std::string &restrict text) const override final;
-
- void emote(const uint8_t emoteId) const override final;
-
- void setDirection(const unsigned char type) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_HOMUNCULUSHANDLER_H
diff --git a/src/net/eathena/homunculusrecv.cpp b/src/net/eathena/homunculusrecv.cpp
deleted file mode 100644
index 204b618a7..000000000
--- a/src/net/eathena/homunculusrecv.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/homunculusrecv.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-
-#include "being/homunculusinfo.h"
-#include "being/playerinfo.h"
-#include "being/localplayer.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/skilldialog.h"
-
-#include "resources/iteminfo.h"
-
-#include "resources/db/itemdb.h"
-
-#include "net/messagein.h"
-
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void HomunculusRecv::processHomunculusSkills(Net::MessageIn &msg)
-{
- if (skillDialog != nullptr)
- skillDialog->hideSkills(SkillOwner::Homunculus);
-
- const int count = (msg.readInt16("len") - 4) / 37;
- for (int f = 0; f < count; f ++)
- {
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt16("inf"));
- msg.readInt16("unused");
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Homunculus,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog != nullptr)
- skillDialog->updateModels();
-}
-
-void HomunculusRecv::processHomunculusData(Net::MessageIn &msg)
-{
- msg.readUInt8("unused");
- const int cmd = msg.readUInt8("state");
- const BeingId id = msg.readBeingId("homunculus id");
- Being *const dstBeing = actorManager->findBeing(id);
- const int data = msg.readInt32("data");
- if (cmd == 0) // pre init
- {
- HomunculusInfo *const info = new HomunculusInfo;
- info->id = id;
- PlayerInfo::setHomunculus(info);
- PlayerInfo::setHomunculusBeing(dstBeing);
- return;
- }
- HomunculusInfo *const info = PlayerInfo::getHomunculus();
- if (info == nullptr)
- return;
- switch (cmd)
- {
- case 1: // intimacy
- info->intimacy = data;
- break;
- case 2: // hunger
- info->hungry = data;
- break;
- case 3: // accesory
- info->equip = data;
- break;
- default:
- break;
- }
-}
-
-void HomunculusRecv::processHomunculusInfo(Net::MessageIn &msg)
-{
- const std::string name = msg.readString(24, "name");
- msg.readUInt8("flags"); // 0x01 - renamed, 0x02 - vaporize, 0x04 - alive
- const int level = msg.readInt16("level");
- PlayerInfo::setStatBase(Attributes::HOMUN_LEVEL, level);
- const int hungry = msg.readInt16("hungry");
- const int intimacy = msg.readInt16("intimacy");
- const int equip = msg.readInt16("equip");
- PlayerInfo::setStatBase(Attributes::HOMUN_ATK,
- msg.readInt16("atk"));
- PlayerInfo::setStatBase(Attributes::HOMUN_MATK,
- msg.readInt16("matk"));
- PlayerInfo::setStatBase(Attributes::HOMUN_HIT,
- msg.readInt16("hit"));
- PlayerInfo::setStatBase(Attributes::HOMUN_CRIT,
- msg.readInt16("luk/3 or crit/10"));
- PlayerInfo::setStatBase(Attributes::HOMUN_DEF,
- msg.readInt16("def"));
- PlayerInfo::setStatBase(Attributes::HOMUN_MDEF,
- msg.readInt16("mdef"));
- PlayerInfo::setStatBase(Attributes::HOMUN_FLEE,
- msg.readInt16("flee"));
- PlayerInfo::setStatBase(Attributes::HOMUN_ATTACK_DELAY,
- msg.readInt16("attack speed"));
- if (msg.getVersion() >= 20150513)
- {
- PlayerInfo::setStatBase(Attributes::HOMUN_HP,
- msg.readInt32("hp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_MAX_HP,
- msg.readInt32("max hp"));
- }
- else
- {
- PlayerInfo::setStatBase(Attributes::HOMUN_HP,
- msg.readInt16("hp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_MAX_HP,
- msg.readInt16("max hp"));
- }
- PlayerInfo::setStatBase(Attributes::HOMUN_MP,
- msg.readInt16("sp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_MAX_MP,
- msg.readInt16("max sp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_EXP,
- msg.readInt32("exp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_EXP_NEEDED,
- msg.readInt32("next exp"));
- PlayerInfo::setStatBase(Attributes::HOMUN_SKILL_POINTS,
- msg.readInt16("skill points"));
- const int range = msg.readInt16("attack range");
- PlayerInfo::setStatBase(Attributes::HOMUN_ATTACK_RANGE,
- range);
-
- PlayerInfo::updateAttrs();
- HomunculusInfo *const info = PlayerInfo::getHomunculus();
- if (info == nullptr)
- return;
- Being *const dstBeing = actorManager->findBeing(info->id);
-
- info->name = name;
- info->level = level;
- info->range = range;
- info->hungry = hungry;
- info->intimacy = intimacy;
- info->equip = equip;
- PlayerInfo::setHomunculusBeing(dstBeing);
-}
-
-void HomunculusRecv::processHomunculusSkillUp(Net::MessageIn &msg)
-{
- const int skillId = msg.readInt16("skill id");
- const int level = msg.readInt16("level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
-
- if (skillDialog != nullptr && PlayerInfo::getSkillLevel(skillId) != level)
- skillDialog->playUpdateEffect(skillId);
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range,
- up, SkillType::Unknown, sp))
- {
- skillDialog->addSkill(SkillOwner::Homunculus,
- skillId, "", level,
- range, up, SkillType::Unknown, sp);
- }
- }
-}
-
-void HomunculusRecv::processHomunculusFood(Net::MessageIn &msg)
-{
- const int flag = msg.readUInt8("fail");
- const int itemId = msg.readInt16("food id");
- if (flag != 0)
- {
- NotifyManager::notify(NotifyTypes::HOMUNCULUS_FEED_OK);
- }
- else
- {
- const std::string name = strprintf("[@@%d|%s@@]", itemId,
- ItemDB::get(itemId).getName().c_str());
- NotifyManager::notify(NotifyTypes::HOMUNCULUS_FEED_FAIL, name);
- }
-}
-
-void HomunculusRecv::processHomunculusExp(Net::MessageIn &msg)
-{
- const int exp = msg.readInt32("exp");
- msg.readInt32("unused");
- if (localPlayer != nullptr)
- localPlayer->addHomunXpMessage(exp);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/homunculusrecv.h b/src/net/eathena/homunculusrecv.h
deleted file mode 100644
index d53a6fcda..000000000
--- a/src/net/eathena/homunculusrecv.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_HOMUNCULUSRECV_H
-#define NET_EATHENA_HOMUNCULUSRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace HomunculusRecv
- {
- void processHomunculusSkills(Net::MessageIn &msg);
- void processHomunculusData(Net::MessageIn &msg);
- void processHomunculusInfo(Net::MessageIn &msg);
- void processHomunculusSkillUp(Net::MessageIn &msg);
- void processHomunculusFood(Net::MessageIn &msg);
- void processHomunculusExp(Net::MessageIn &msg);
- } // namespace HomunculusRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_HOMUNCULUSRECV_H
diff --git a/src/net/eathena/inventoryhandler.cpp b/src/net/eathena/inventoryhandler.cpp
deleted file mode 100644
index 40ae67d5d..000000000
--- a/src/net/eathena/inventoryhandler.cpp
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/inventoryhandler.h"
-
-#include "const/net/inventory.h"
-
-#include "enums/equipslot.h"
-
-#include "net/eathena/inventoryrecv.h"
-#include "net/eathena/menu.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/item.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-// this conversion from bit corrupted LOOK_* to EquipSlot
-// for how it corrupted, see BeingRecv::processBeingChangeLookContinue
-const EquipSlot::Type EQUIP_CONVERT[] =
-{
- EquipSlot::PROJECTILE_SLOT, // 0 SPRITE_BASE
- EquipSlot::FEET_SLOT, // 1 SPRITE_HAIR
- EquipSlot::LEGS_SLOT, // 2 SPRITE_WEAPON
- EquipSlot::TORSO_SLOT, // 3 SPRITE_HEAD_BOTTOM
- EquipSlot::GLOVES_SLOT, // 4 SPRITE_HEAD_TOP
- EquipSlot::EVOL_RING1_SLOT, // 5 SPRITE_HEAD_MID
- EquipSlot::PROJECTILE_SLOT, // 6 SPRITE_HAIR_COLOR
- EquipSlot::HEAD_SLOT, // 7 SPRITE_CLOTHES_COLOR
- EquipSlot::RING2_SLOT, // 8 SPRITE_SHIELD
- EquipSlot::PROJECTILE_SLOT, // 9 SPRITE_SHOES
- EquipSlot::FIGHT1_SLOT, // 10 SPRITE_BODY
- EquipSlot::FIGHT2_SLOT, // 11 SPRITE_FLOOR
- EquipSlot::EVOL_RING2_SLOT, // 12 SPRITE_ROBE
- EquipSlot::PROJECTILE_SLOT, // 13 SPRITE_EVOL2
- EquipSlot::COSTUME_ROBE_SLOT, // 14 SPRITE_EVOL3
- EquipSlot::RING1_SLOT, // 15 SPRITE_EVOL4
- EquipSlot::NECK_SLOT, // 16 SPRITE_EVOL5
- EquipSlot::RING2_SLOT, // 17 SPRITE_EVOL6
-};
-
-namespace EAthena
-{
-
-InventoryHandler::InventoryHandler() :
- Ea::InventoryHandler(),
- mItemIndex(0)
-{
- inventoryHandler = this;
-
- InventoryRecv::mCartItems.clear();
-}
-
-InventoryHandler::~InventoryHandler()
-{
- inventoryHandler = nullptr;
-}
-
-void InventoryHandler::equipItem(const Item *const item) const
-{
- if (item == nullptr)
- return;
-
- createOutPacket(CMSG_PLAYER_EQUIP);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- // here we set flag for any slots,
- // probably better set to slot from item properties
- if (packetVersion >= 20130320)
- outMsg.writeInt32(0xFFFFFFFFU, "wear location");
- else
- outMsg.writeInt16(0x7FFFU, "wear location");
-}
-
-void InventoryHandler::unequipItem(const Item *const item) const
-{
- if (item == nullptr)
- return;
-
- createOutPacket(CMSG_PLAYER_UNEQUIP);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
-}
-
-void InventoryHandler::useItem(const Item *const item) const
-{
- if (item == nullptr)
- return;
-
- createOutPacket(CMSG_PLAYER_INVENTORY_USE);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(item->getId(), "unused");
-}
-
-void InventoryHandler::useItem(const Item *const item,
- const int16_t useType) const
-{
- if (item == nullptr)
- return;
-
- if (serverVersion >= 19)
- {
- createOutPacket(CMSG_PLAYER_INVENTORY_USE2);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt16(useType, "use type");
- }
- else
- {
- createOutPacket(CMSG_PLAYER_INVENTORY_USE);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(item->getId(), "unused");
- }
-}
-
-void InventoryHandler::dropItem(const Item *const item, const int amount) const
-{
- if (item == nullptr)
- return;
-
- createOutPacket(CMSG_PLAYER_INVENTORY_DROP);
- const int16_t index = CAST_S16(item->getInvIndex() + INVENTORY_OFFSET);
- if (packetVersion >= 20101124)
- {
- outMsg.writeInt16(index, "index");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20080827)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20070212)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20070108)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20060327)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20050719)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20050718)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20050628)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20050509)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20050110)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20041129)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20041025)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20041005)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20040920)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20040906)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20040809)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else if (packetVersion >= 20040726)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(index, "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
- else
- {
- outMsg.writeInt16(index, "index");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- }
-}
-
-void InventoryHandler::closeStorage() const
-{
- createOutPacket(CMSG_CLOSE_STORAGE);
-}
-
-void InventoryHandler::moveItemInventoryToStorage(const int slot,
- const int amount) const
-{
- createOutPacket(CMSG_MOVE_TO_STORAGE);
- if (packetVersion >= 20101124)
- {
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20080827)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20070212)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20070108)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20060327)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20050719)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20050718)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20050628)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20050509)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20050110)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20041129)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20041025)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20041005)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20040920)
- {
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20040906)
- {
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20040809)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else if (packetVersion >= 20040726)
- {
- outMsg.writeInt16(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(0, "unknown");
- outMsg.writeInt8(0, "unknown");
- outMsg.writeInt32(amount, "amount");
- }
- else
- {
- outMsg.writeInt16(CAST_S16(slot + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(amount, "amount");
- }
-}
-
-void InventoryHandler::moveItem2(const InventoryTypeT source,
- const int slot,
- const int amount,
- const InventoryTypeT destination) const
-{
- int packet = 0;
- int offset = INVENTORY_OFFSET;
- if (source == InventoryType::Inventory)
- {
- if (destination == InventoryType::Storage)
- {
- moveItemInventoryToStorage(slot, amount);
- return;
- }
- else if (destination == InventoryType::Cart)
- {
- packet = CMSG_MOVE_TO_CART;
- }
- }
- else if (source == InventoryType::Storage)
- {
- offset = STORAGE_OFFSET;
- if (destination == InventoryType::Inventory)
- packet = CMSG_MOVE_FROM_STORAGE;
- else if (destination == InventoryType::Cart)
- packet = CMSG_MOVE_FROM_STORAGE_TO_CART;
- }
- else if (source == InventoryType::Cart)
- {
- if (destination == InventoryType::Inventory)
- packet = CMSG_MOVE_FROM_CART;
- else if (destination == InventoryType::Storage)
- packet = CMSG_MOVE_FROM_CART_TO_STORAGE;
- }
-
- // for packetVersion < 20101124 need use other packet offset
- if (packet != 0)
- {
- createOutPacket(packet);
- outMsg.writeInt16(CAST_S16(slot + offset), "index");
- outMsg.writeInt32(amount, "amount");
- }
-}
-
-void InventoryHandler::useCard(const Item *const item)
-{
- if (item == nullptr)
- return;
-
- mItemIndex = item->getInvIndex();
- createOutPacket(CMSG_PLAYER_USE_CARD);
- outMsg.writeInt16(CAST_S16(
- mItemIndex + INVENTORY_OFFSET), "index");
-}
-
-void InventoryHandler::insertCard(const int cardIndex,
- const int itemIndex) const
-{
- createOutPacket(CMSG_PLAYER_INSERT_CARD);
- outMsg.writeInt16(CAST_S16(cardIndex + INVENTORY_OFFSET),
- "card index");
- outMsg.writeInt16(CAST_S16(itemIndex + INVENTORY_OFFSET),
- "item index");
-}
-
-void InventoryHandler::favoriteItem(const Item *const item,
- const bool favorite) const
-{
- if (item == nullptr)
- return;
- if (packetVersion < 20120410)
- return;
- createOutPacket(CMSG_PLAYER_FAVORITE_ITEM);
- outMsg.writeInt16(CAST_S16(item->getInvIndex()
- + INVENTORY_OFFSET),
- "item index");
- outMsg.writeInt8(static_cast<int8_t>(favorite), "favorite flag");
-}
-
-void InventoryHandler::selectEgg(const Item *const item) const
-{
- if (item == nullptr)
- return;
- createOutPacket(CMSG_PET_SELECT_EGG);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- menu = MenuType::Unknown;
-}
-
-int InventoryHandler::convertFromServerSlot(const int serverSlot) const
-{
- if (serverSlot < 0 || serverSlot >= 17)
- return 0;
-
- return CAST_S32(EQUIP_CONVERT[serverSlot]);
-}
-
-void InventoryHandler::selectCart(const BeingId accountId,
- const int type) const
-{
- if (packetVersion < 20150805)
- return;
- createOutPacket(CMSG_SELECT_CART);
- outMsg.writeBeingId(accountId, "account id");
- outMsg.writeInt8(CAST_S8(type), "type");
-}
-
-void InventoryHandler::identifyItem(const Item *const item) const
-{
- if (packetVersion < 20150513)
- return;
- createOutPacket(CMSG_QUICK_IDENTIFY_ITEM);
- outMsg.writeInt16(CAST_S16(item->getInvIndex()),
- "item index");
-}
-
-void InventoryHandler::mergeItemsAck(const STD_VECTOR<Item*> &items) const
-{
- createOutPacket(CMSG_MERGE_ITEM_ACK);
- const size_t sz = items.size();
- outMsg.writeInt16(CAST_S16(sz * 2 + 4),
- "len");
- FOR_EACH (STD_VECTOR<Item*>::const_iterator, it, items)
- {
- outMsg.writeInt16(CAST_S16((*it)->getInvIndex() + 2),
- "item index");
- }
-}
-
-void InventoryHandler::mergetItemsCancel() const
-{
- createOutPacket(CMSG_MERGE_ITEM_CANCEL);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/inventoryhandler.h b/src/net/eathena/inventoryhandler.h
deleted file mode 100644
index 79155ddaa..000000000
--- a/src/net/eathena/inventoryhandler.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_INVENTORYHANDLER_H
-#define NET_EATHENA_INVENTORYHANDLER_H
-
-#include "net/ea/inventoryhandler.h"
-
-namespace EAthena
-{
-
-class InventoryHandler final : public Ea::InventoryHandler
-{
- public:
- InventoryHandler();
-
- A_DELETE_COPY(InventoryHandler)
-
- ~InventoryHandler();
-
- void equipItem(const Item *const item) const override final;
-
- void unequipItem(const Item *const item) const override final;
-
- void useItem(const Item *const item) const override final;
-
- void useItem(const Item *const item,
- const int16_t useType) const override final;
-
- void dropItem(const Item *const item,
- const int amount) const override final;
-
- void closeStorage() const override final;
-
- void moveItem2(const InventoryTypeT source,
- const int slot,
- const int amount,
- const InventoryTypeT destination) const override final;
-
- void moveItemInventoryToStorage(const int slot,
- const int amount) const;
-
- void useCard(const Item *const item) override final;
-
- void insertCard(const int cardIndex,
- const int itemIndex) const override final;
-
- void favoriteItem(const Item *const item,
- const bool favorite) const override final;
-
- void selectEgg(const Item *const item) const override final;
-
- int convertFromServerSlot(const int serverSlot)
- const override final A_WARN_UNUSED;
-
- void selectCart(const BeingId accountId,
- const int type) const override final;
-
- void identifyItem(const Item *const item) const override final;
-
- void mergeItemsAck(const STD_VECTOR<Item*> &items) const
- override final;
-
- void mergetItemsCancel() const override final;
-
- int getProjectileSlot() const override final
- { return 10; }
-
- int getItemIndex() const override final A_WARN_UNUSED
- { return mItemIndex; }
-
- private:
- int mItemIndex;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_INVENTORYHANDLER_H
diff --git a/src/net/eathena/inventoryrecv.cpp b/src/net/eathena/inventoryrecv.cpp
deleted file mode 100644
index ead74ad63..000000000
--- a/src/net/eathena/inventoryrecv.cpp
+++ /dev/null
@@ -1,1441 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/inventoryrecv.h"
-
-#include "notifymanager.h"
-#include "itemcolormanager.h"
-
-#include "being/localplayer.h"
-
-#include "const/net/inventory.h"
-
-#include "enums/equipslot.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "enums/net/deleteitemreason.h"
-
-#include "gui/popups/itempopup.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "gui/windows/insertcarddialog.h"
-
-#include "listeners/arrowslistener.h"
-
-#include "net/inventoryhandler.h"
-#include "net/messagein.h"
-
-#include "net/eathena/itemflags.h"
-#include "net/eathena/menu.h"
-
-#include "net/ea/equipbackend.h"
-#include "net/ea/inventoryrecv.h"
-
-#include "resources/iteminfo.h"
-
-#include "utils/gettext.h"
-#include "utils/foreach.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-extern int serverVersion;
-extern int packetVersion;
-
-namespace EAthena
-{
-
-namespace InventoryRecv
-{
- // EQP_* to EquipSlot
- const EquipSlot::Type EQUIP_POINTS[EquipSlot::VECTOREND] =
- {
- EquipSlot::LEGS_SLOT, // 0 1 EQP_HEAD_LOW
- EquipSlot::FIGHT1_SLOT, // 1 2 EQP_HAND_R
- EquipSlot::GLOVES_SLOT, // 2 4 EQP_GARMENT
- EquipSlot::RING2_SLOT, // 3 8 EQP_ACC_L
- EquipSlot::RING1_SLOT, // 4 16 EQP_ARMOR
- EquipSlot::FIGHT2_SLOT, // 5 32 EQP_HAND_L
- EquipSlot::FEET_SLOT, // 6 64 EQP_SHOES
- EquipSlot::NECK_SLOT, // 7 128 EQP_ACC_R
- EquipSlot::HEAD_SLOT, // 8 256 EQP_HEAD_TOP
- EquipSlot::TORSO_SLOT, // 9 512 EQP_HEAD_MID
- EquipSlot::EVOL_RING1_SLOT, // 10 1024 EQP_COSTUME_HEAD_TOP
- EquipSlot::EVOL_RING2_SLOT, // 11 2048 EQP_COSTUME_HEAD_MID
- EquipSlot::PROJECTILE_SLOT, // 12 4096 EQP_COSTUME_HEAD_LOW
- EquipSlot::COSTUME_ROBE_SLOT, // 13 8192 EQP_COSTUME_GARMENT
- EquipSlot::PROJECTILE_SLOT, // 14 16384 UNUSED_COSTUME_FLOOR
- EquipSlot::PROJECTILE_SLOT, // 15 32768 EQP_AMMO
- EquipSlot::SHADOW_ARMOR_SLOT, // 16 65536 EQP_SHADOW_ARMOR
- EquipSlot::SHADOW_WEAPON_SLOT, // 17 131072 EQP_SHADOW_WEAPON
- EquipSlot::SHADOW_SHIELD_SLOT, // 18 262144 EQP_SHADOW_SHIELD
- EquipSlot::SHADOW_SHOES_SLOT, // 19 524288 EQP_SHADOW_SHOES
- EquipSlot::SHADOW_ACCESSORY2_SLOT, // 20 1048576 EQP_SHADOW_ACC_R
- EquipSlot::SHADOW_ACCESSORY1_SLOT, // 21 2097152 EQP_SHADOW_ACC_L
- };
-
- Ea::InventoryItems mCartItems;
-} // namespace InventoryRecv
-
-void InventoryRecv::processPlayerEquipment(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerEquipment")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- msg.readInt16("len");
- Equipment *const equipment = PlayerInfo::getEquipment();
- if ((equipment != nullptr) && (equipment->getBackend() == nullptr))
- { // look like SMSG_PLAYER_INVENTORY was not received
- Ea::InventoryRecv::mEquips.clear();
- equipment->setBackend(&Ea::InventoryRecv::mEquips);
- }
-
- int packetLen = 2 + 2 + 1 + 1 + 8;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 4 + 1;
- else
- packetLen += 1 + 2 + 2 + 1;
- if (msg.getVersion() >= 20071002)
- packetLen += 4;
- if (msg.getVersion() >= 20080102)
- packetLen += 2;
- if (msg.getVersion() >= 20100629)
- packetLen += 2;
- if (msg.getVersion() >= 20150226)
- packetLen += 26;
-
- const int number = (msg.getLength() - 4) / packetLen;
-
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- int equipType;
- if (msg.getVersion() >= 20120925)
- {
- msg.readInt32("location");
- equipType = msg.readInt32("wear state");
- }
- else
- {
- msg.readUInt8("identified");
- msg.readInt16("location");
- equipType = msg.readInt16("wear state");
- msg.readUInt8("is damaged");
- }
- const uint8_t refine = CAST_U8(msg.readInt8("refine"));
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- if (msg.getVersion() >= 20071002)
- msg.readInt32("hire expire date (?)");
- if (msg.getVersion() >= 20080102)
- msg.readInt16("equip type");
- if (msg.getVersion() >= 20100629)
- msg.readInt16("item sprite number");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList(msg.readUInt8("option count"));
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
- if (inventory != nullptr)
- {
- inventory->setItem(index,
- itemId,
- itemType,
- 1,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_true,
- Equipped_false);
- inventory->setCards(index, cards, maxCards);
- inventory->setOptions(index, options);
- }
- delete options;
-
- if (equipType != 0)
- {
- Ea::InventoryRecv::mEquips.setEquipment(
- InventoryRecv::getSlot(equipType),
- index);
- }
- }
- BLOCK_END("InventoryRecv::processPlayerEquipment")
-}
-
-void InventoryRecv::processPlayerInventoryAdd(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerInventoryAdd")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- if ((PlayerInfo::getEquipment() != nullptr)
- && (PlayerInfo::getEquipment()->getBackend() == nullptr))
- { // look like SMSG_PLAYER_INVENTORY was not received
- Ea::InventoryRecv::mEquips.clear();
- PlayerInfo::getEquipment()->setBackend(&Ea::InventoryRecv::mEquips);
- }
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- int amount = msg.readInt16("count");
- const int itemId = msg.readInt16("item id");
- const uint8_t identified = msg.readUInt8("identified");
- const uint8_t damaged = msg.readUInt8("is damaged");
- const uint8_t refine = msg.readUInt8("refine");
- Favorite favorite = Favorite_false;
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- int equipType;
- if (msg.getVersion() >= 20120925)
- equipType = msg.readInt32("location");
- else
- equipType = msg.readInt16("location");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const unsigned char err = msg.readUInt8("result");
- if (msg.getVersion() >= 20061218)
- msg.readInt32("hire expire date");
- if (msg.getVersion() >= 20071002)
- msg.readInt16("bind on equip");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList;
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
- if (msg.getVersion() >= 20160921)
- {
- favorite = fromBool(msg.readUInt8("favorite"), Favorite);
- msg.readInt16("look");
- }
-
- const ItemColor color = ItemColorManager::getColorFromCards(&cards[0]);
- BeingId floorId;
- if (Ea::InventoryRecv::mSentPickups.empty())
- {
- floorId = BeingId_zero;
- }
- else
- {
- floorId = Ea::InventoryRecv::mSentPickups.front();
- Ea::InventoryRecv::mSentPickups.pop();
- }
-
- if (err != 0u)
- {
- PickupT pickup;
- switch (err)
- {
- case 1:
- pickup = Pickup::BAD_ITEM;
- break;
- case 2:
- pickup = Pickup::TOO_HEAVY;
- break;
- case 4:
- pickup = Pickup::INV_FULL;
- break;
- case 5:
- pickup = Pickup::MAX_AMOUNT;
- break;
- case 6:
- pickup = Pickup::TOO_FAR;
- break;
- case 7:
- pickup = Pickup::STACK_AMOUNT;
- break;
- default:
- pickup = Pickup::UNKNOWN;
- UNIMPLEMENTEDPACKETFIELD(err);
- break;
- }
- if (localPlayer != nullptr)
- {
- if (itemId == 0)
- {
- localPlayer->pickedUp(ItemDB::getEmpty(),
- 0,
- color,
- floorId,
- pickup);
- }
- else
- {
- localPlayer->pickedUp(ItemDB::get(itemId),
- 0,
- color,
- floorId,
- pickup);
- }
- }
- }
- else
- {
- if (localPlayer != nullptr)
- {
- if (itemId == 0)
- {
- localPlayer->pickedUp(ItemDB::getEmpty(),
- amount,
- color,
- floorId,
- Pickup::OKAY);
- }
- else
- {
- localPlayer->pickedUp(ItemDB::get(itemId),
- amount,
- color,
- floorId,
- Pickup::OKAY);
- }
- }
-
- if (inventory != nullptr)
- {
- const Item *const item = inventory->getItem(index);
-
- if ((item != nullptr) && item->getId() == itemId)
- amount += item->getQuantity();
-
- inventory->setItem(index,
- itemId,
- itemType,
- amount,
- refine,
- color,
- fromBool(identified, Identified),
- fromBool(damaged, Damaged),
- favorite,
- fromBool(equipType, Equipm),
- Equipped_false);
- inventory->setCards(index, cards, maxCards);
- inventory->setOptions(index, options);
- }
- ArrowsListener::distributeEvent();
- }
- delete options;
- BLOCK_END("InventoryRecv::processPlayerInventoryAdd")
-}
-
-void InventoryRecv::processPlayerInventory(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerInventory")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
- if (PlayerInfo::getEquipment() != nullptr)
- {
- // Clear inventory - this will be a complete refresh
- Ea::InventoryRecv::mEquips.clear();
- PlayerInfo::getEquipment()->setBackend(&Ea::InventoryRecv::mEquips);
- }
-
- if (inventory != nullptr)
- inventory->clear();
-
- msg.readInt16("len");
-
- int packetLen = 7;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 1;
- else
- packetLen += 1 + 2;
- if (packetVersion >= 5)
- packetLen += 8;
- if (msg.getVersion() >= 20080102)
- packetLen += 4;
-
- const int number = (msg.getLength() - 4) / packetLen;
-
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("item index") - INVENTORY_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- if (msg.getVersion() < 20120925)
- msg.readUInt8("identified");
- const int amount = msg.readInt16("count");
- if (msg.getVersion() >= 20120925)
- msg.readInt32("wear state / equip");
- else
- msg.readInt16("wear state / equip");
- int cards[maxCards];
- if (packetVersion >= 5)
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- }
- else
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = 0;
- }
- if (msg.getVersion() >= 20080102)
- msg.readInt32("hire expire date (?)");
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
-
- if (inventory != nullptr)
- {
- inventory->setItem(index,
- itemId,
- itemType,
- amount,
- 0,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_false,
- Equipped_false);
- inventory->setCards(index, cards, maxCards);
- }
- }
- BLOCK_END("InventoryRecv::processPlayerInventory")
-}
-
-void InventoryRecv::processPlayerStorage(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerInventory")
- Ea::InventoryRecv::mInventoryItems.clear();
-
- msg.readInt16("len");
-
- int packetLen = 7;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 1;
- else
- packetLen += 1 + 2;
- if (packetVersion >= 5)
- packetLen += 8;
- if (msg.getVersion() >= 20080102)
- packetLen += 4;
-
- int number;
- if (msg.getVersion() >= 20120925)
- {
- msg.readString(24, "storage name");
- number = (msg.getLength() - 4 - 24) / packetLen;
- }
- else
- {
- number = (msg.getLength() - 4) / packetLen;
- }
-
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("item index") - STORAGE_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- if (msg.getVersion() < 20120925)
- msg.readUInt8("identified");
- const int amount = msg.readInt16("count");
- if (msg.getVersion() >= 20120925)
- msg.readInt32("wear state / equip");
- else
- msg.readInt16("wear state / equip");
- int cards[maxCards];
- if (msg.getVersion() >= 5)
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- }
- else
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = 0;
- }
- if (msg.getVersion() >= 20080102)
- msg.readInt32("hire expire date (?)");
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
-
- Ea::InventoryRecv::mInventoryItems.push_back(Ea::InventoryItem(
- index,
- itemId,
- itemType,
- cards,
- nullptr,
- amount,
- 0,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_false));
- }
- BLOCK_END("InventoryRecv::processPlayerInventory")
-}
-
-void InventoryRecv::processPlayerEquip(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerEquip")
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- int equipType;
- if (msg.getVersion() >= 20120925)
- equipType = msg.readInt32("wear location");
- else
- equipType = msg.readInt16("wear location");
- if (msg.getVersion() >= 20100629)
- msg.readInt16("sprite");
- const uint8_t flag = msg.readUInt8("result");
-
- switch (flag)
- {
- case 0:
- Ea::InventoryRecv::mEquips.setEquipment(
- InventoryRecv::getSlot(equipType),
- index);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::EQUIP_FAILED_LEVEL);
- break;
-
- case 2:
- default:
- NotifyManager::notify(NotifyTypes::EQUIP_FAILED);
- break;
- }
- BLOCK_END("InventoryRecv::processPlayerEquip")
-}
-
-void InventoryRecv::processPlayerUnEquip(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerUnEquip")
- msg.readInt16("index");
- int equipType;
- if (msg.getVersion() >= 20120925)
- equipType = msg.readInt32("wear location");
- else
- equipType = msg.readInt16("wear location");
- const uint8_t flag = msg.readUInt8("result");
-
- if (flag != 0u)
- {
- NotifyManager::notify(NotifyTypes::UNEQUIP_FAILED);
- }
- else
- {
- Ea::InventoryRecv::mEquips.setEquipment(
- InventoryRecv::getSlot(equipType),
- -1);
- }
- if ((equipType & 0x8000) != 0)
- ArrowsListener::distributeEvent();
- BLOCK_END("InventoryRecv::processPlayerUnEquip")
-}
-
-void InventoryRecv::processPlayerInventoryRemove2(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerInventoryRemove2")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- const DeleteItemReasonT reason = static_cast<DeleteItemReasonT>(
- msg.readInt16("reason"));
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
-
- if (inventory != nullptr)
- {
- if (Item *const item = inventory->getItem(index))
- {
- switch (reason)
- {
- case DeleteItemReason::Normal:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_NORMAL,
- item->getName());
- break;
- case DeleteItemReason::SkillUse:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_SKILL_USE,
- item->getName());
- break;
- case DeleteItemReason::FailRefine:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_FAIL_REFINE,
- item->getName());
- break;
- case DeleteItemReason::MaterialChange:
- NotifyManager::notify(
- NotifyTypes::DELETE_ITEM_MATERIAL_CHANGE,
- item->getName());
- break;
- case DeleteItemReason::ToStorage:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_TO_STORAGE,
- item->getName());
- break;
- case DeleteItemReason::ToCart:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_TO_CART,
- item->getName());
- break;
- case DeleteItemReason::Sold:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_SOLD,
- item->getName());
- break;
- case DeleteItemReason::Analysis:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_ANALYSIS,
- item->getName());
- break;
- default:
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_UNKNOWN,
- item->getName());
- break;
- }
-
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- inventory->removeItemAt(index);
- ArrowsListener::distributeEvent();
- }
- }
- BLOCK_END("InventoryRecv::processPlayerInventoryRemove2")
-}
-
-void InventoryRecv::processPlayerStorageEquip(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerStorageEquip")
- msg.readInt16("len");
-
- int packetLen = 2 + 2 + 1 + 1 + 8;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 4 + 1;
- else
- packetLen += 1 + 2 + 2 + 1;
- if (msg.getVersion() >= 20071002)
- packetLen += 4;
- if (msg.getVersion() >= 20080102)
- packetLen += 2;
- if (msg.getVersion() >= 20100629)
- packetLen += 2;
- if (msg.getVersion() >= 20150226)
- packetLen += 26;
-
- int number;
- if (msg.getVersion() >= 20120925)
- {
- msg.readString(24, "storage name");
- number = (msg.getLength() - 4 - 24) / packetLen;
- }
- else
- {
- number = (msg.getLength() - 4) / packetLen;
- }
-
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("index") - STORAGE_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const int amount = 1;
- if (msg.getVersion() >= 20120925)
- {
- msg.readInt32("location");
- msg.readInt32("wear state");
- }
- else
- {
- msg.readUInt8("identified");
- msg.readInt16("location");
- msg.readInt16("wear state");
- msg.readUInt8("is damaged");
- }
- const uint8_t refine = msg.readUInt8("refine level");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- if (msg.getVersion() >= 20071002)
- msg.readInt32("hire expire date");
- if (msg.getVersion() >= 20080102)
- msg.readInt16("bind on equip");
- if (msg.getVersion() >= 20100629)
- msg.readInt16("sprite");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList(msg.readUInt8("option count"));
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
-
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
-
- Ea::InventoryRecv::mInventoryItems.push_back(Ea::InventoryItem(
- index,
- itemId,
- itemType,
- cards,
- options,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_false));
- delete options;
- }
- BLOCK_END("InventoryRecv::processPlayerStorageEquip")
-}
-
-void InventoryRecv::processPlayerStorageAdd(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerStorageAdd")
- // Move an item into storage
- const int index = msg.readInt16("index") - STORAGE_OFFSET;
- const int amount = msg.readInt32("amount");
- const int itemId = msg.readInt16("item id");
- ItemTypeT itemType;
- if (msg.getVersion() >= 5)
- itemType = static_cast<ItemTypeT>(msg.readUInt8("type"));
- else
- itemType = ItemType::Unknown;
- const unsigned char identified = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList;
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
-
- const ItemColor color = ItemColorManager::getColorFromCards(&cards[0]);
- if (Item *const item = Ea::InventoryRecv::mStorage->getItem(index))
- {
- item->setId(itemId, color);
- item->increaseQuantity(amount);
- }
- else
- {
- if (Ea::InventoryRecv::mStorage != nullptr)
- {
- Ea::InventoryRecv::mStorage->setItem(index,
- itemId,
- itemType,
- amount,
- refine,
- color,
- fromBool(identified, Identified),
- damaged,
- Favorite_false,
- Equipm_false,
- Equipped_false);
- Ea::InventoryRecv::mStorage->setCards(index, cards, maxCards);
- Ea::InventoryRecv::mStorage->setOptions(index, options);
- }
- }
- delete options;
- BLOCK_END("InventoryRecv::processPlayerStorageAdd")
-}
-
-void InventoryRecv::processPlayerUseCard(Net::MessageIn &msg)
-{
- const Inventory *const inv = PlayerInfo::getInventory();
- const int index = inventoryHandler->getItemIndex();
- const Item *item1 = nullptr;
- if (inv != nullptr)
- item1 = inv->getItem(index);
- SellDialog *const dialog = CREATEWIDGETR(InsertCardDialog,
- index, item1);
-
- const int count = (msg.readInt16("len") - 4) / 2;
- for (int f = 0; f < count; f ++)
- {
- const int itemIndex = msg.readInt16("item index") - INVENTORY_OFFSET;
- if (inv == nullptr)
- continue;
- const Item *const item = inv->getItem(itemIndex);
- if (item == nullptr)
- continue;
- dialog->addItem(item, 0);
- }
-}
-
-void InventoryRecv::processPlayerInsertCard(Net::MessageIn &msg)
-{
- const int itemIndex = msg.readInt16("item index") - INVENTORY_OFFSET;
- const int cardIndex = msg.readInt16("card index") - INVENTORY_OFFSET;
- if (msg.readUInt8("flag") != 0u)
- {
- NotifyManager::notify(NotifyTypes::CARD_INSERT_FAILED);
- }
- else
- {
- NotifyManager::notify(NotifyTypes::CARD_INSERT_SUCCESS);
- Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- return;
- Item *const card = inv->getItem(cardIndex);
- int cardId = 0;
- if (card != nullptr)
- {
- cardId = card->getId();
- card->increaseQuantity(-1);
- if (card->getQuantity() == 0)
- inv->removeItemAt(cardIndex);
- }
- Item *const item = inv->getItem(itemIndex);
- if (item != nullptr)
- {
- item->addCard(cardId);
- item->updateColor();
- itemPopup->resetPopup();
- }
- }
-}
-
-void InventoryRecv::processPlayerItemRentalTime(Net::MessageIn &msg)
-{
- const int id = msg.readInt16("item id");
- const int seconds = msg.readInt32("seconds");
- const ItemInfo &info = ItemDB::get(id);
- const std::string timeStr = timeDiffToString(seconds);
- NotifyManager::notify(NotifyTypes::RENTAL_TIME_LEFT,
- // TRANSLATORS: notification message
- strprintf(_("Left %s rental time for item %s."),
- timeStr.c_str(), info.getName().c_str()));
-}
-
-void InventoryRecv::processPlayerItemRentalExpired(Net::MessageIn &msg)
-{
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int id = msg.readInt16("item id");
- const ItemInfo &info = ItemDB::get(id);
-
- NotifyManager::notify(NotifyTypes::RENTAL_TIME_EXPIRED,
- info.getName());
- if (inventory != nullptr)
- {
- if (Item *const item = inventory->getItem(index))
- {
- item->increaseQuantity(-item->getQuantity());
- inventory->removeItemAt(index);
- ArrowsListener::distributeEvent();
- }
- }
-}
-
-void InventoryRecv::processPlayerStorageRemove(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerStorageRemove")
- // Move an item out of storage
- const int index = msg.readInt16("index") - STORAGE_OFFSET;
- const int amount = msg.readInt32("amount");
- if (Ea::InventoryRecv::mStorage != nullptr)
- {
- if (Item *const item = Ea::InventoryRecv::mStorage->getItem(index))
- {
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- Ea::InventoryRecv::mStorage->removeItemAt(index);
- }
- }
- BLOCK_END("InventoryRecv::processPlayerStorageRemove")
-}
-
-void InventoryRecv::processCartInfo(Net::MessageIn &msg)
-{
- msg.readInt16("cart items used");
- const int size = msg.readInt16("max cart items");
- PlayerInfo::setAttribute(Attributes::CART_TOTAL_WEIGHT,
- msg.readInt32("cart weight"));
- PlayerInfo::setAttribute(Attributes::CART_MAX_WEIGHT,
- msg.readInt32("max cart weight"));
- if (mCartItems.empty())
- return;
-
- Inventory *const inv = PlayerInfo::getCartInventory();
- if (inv == nullptr)
- return;
-
- inv->resize(size);
-
- FOR_EACH (Ea::InventoryItems::const_iterator, it, mCartItems)
- {
- inv->setItem((*it).slot,
- (*it).id,
- (*it).type,
- (*it).quantity,
- (*it).refine,
- (*it).color,
- (*it).identified,
- (*it).damaged,
- (*it).favorite,
- (*it).equip,
- Equipped_false);
- }
- mCartItems.clear();
-}
-
-void InventoryRecv::processCartRemove(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need close or clear cart?
-}
-
-void InventoryRecv::processPlayerCartAdd(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerCartAdd")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getCartInventory() : nullptr;
-
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- int amount = msg.readInt32("count");
- const int itemId = msg.readInt16("item id");
- ItemTypeT itemType = ItemType::Unknown;
- if (msg.getVersion() >= 5)
- {
- itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- }
- const uint8_t identified = msg.readUInt8("identified");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList;
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
-
- // check what cart was created, if not add delayed items
- if ((inventory != nullptr) && inventory->getSize() > 0)
- {
- const Item *const item = inventory->getItem(index);
-
- if ((item != nullptr) && item->getId() == itemId)
- amount += item->getQuantity();
-
- inventory->setItem(index,
- itemId,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identified, Identified),
- damaged,
- Favorite_false,
- Equipm_false,
- Equipped_false);
- inventory->setCards(index, cards, maxCards);
- inventory->setOptions(index, options);
- }
- else
- {
- mCartItems.push_back(Ea::InventoryItem(index,
- itemId,
- itemType,
- cards,
- options,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identified, Identified),
- damaged,
- Favorite_false,
- Equipm_false));
- }
- delete options;
- BLOCK_END("InventoryRecv::processPlayerCartAdd")
-}
-
-void InventoryRecv::processPlayerCartEquip(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerCartEquip")
- msg.readInt16("len");
-
- int packetLen = 2 + 2 + 1 + 1 + 8;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 4 + 1;
- else
- packetLen += 1 + 2 + 2 + 1;
- if (msg.getVersion() >= 20071002)
- packetLen += 4;
- if (msg.getVersion() >= 20080102)
- packetLen += 2;
- if (msg.getVersion() >= 20100629)
- packetLen += 2;
- if (msg.getVersion() >= 20150226)
- packetLen += 26;
-
- const int number = (msg.getLength() - 4) / packetLen;
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const int amount = 1;
- if (msg.getVersion() >= 20120925)
- {
- msg.readInt32("location");
- msg.readInt32("wear state");
- }
- else
- {
- msg.readUInt8("identified");
- msg.readInt16("location");
- msg.readInt16("wear state");
- msg.readUInt8("is damaged");
- }
- const uint8_t refine = msg.readUInt8("refine level");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- if (msg.getVersion() >= 20071002)
- msg.readInt32("hire expire date");
- if (msg.getVersion() >= 20080102)
- msg.readInt16("bind on equip");
- if (msg.getVersion() >= 20100629)
- msg.readInt16("sprite");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList(msg.readUInt8("option count"));
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
-
- mCartItems.push_back(Ea::InventoryItem(index,
- itemId,
- itemType,
- cards,
- options,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_false));
- delete options;
- }
- BLOCK_END("InventoryRecv::processPlayerCartEquip")
-}
-
-void InventoryRecv::processPlayerCartItems(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerCartItems")
- Ea::InventoryRecv::mInventoryItems.clear();
-
- msg.readInt16("len");
-
- int packetLen = 7;
- if (msg.getVersion() >= 20120925)
- packetLen += 4 + 1;
- else
- packetLen += 1 + 2;
- if (packetVersion >= 5)
- packetLen += 8;
- if (msg.getVersion() >= 20080102)
- packetLen += 4;
-
- const int number = (msg.getLength() - 4) / packetLen;
- for (int loop = 0; loop < number; loop++)
- {
- const int index = msg.readInt16("item index") - INVENTORY_OFFSET;
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- if (msg.getVersion() < 20120925)
- msg.readUInt8("identified");
- const int amount = msg.readInt16("count");
- if (msg.getVersion() >= 20120925)
- msg.readInt32("wear state / equip");
- int cards[maxCards];
- if (msg.getVersion() >= 5)
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- }
- else
- {
- for (int f = 0; f < maxCards; f++)
- cards[f] = 0;
- }
- if (msg.getVersion() >= 20080102)
- msg.readInt32("hire expire date (?)");
- ItemFlags flags;
- if (msg.getVersion() >= 20120925)
- flags.byte = msg.readUInt8("flags");
- else
- flags.byte = 0;
-
- mCartItems.push_back(Ea::InventoryItem(index,
- itemId,
- itemType,
- cards,
- nullptr,
- amount,
- 0,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(flags.bits.isIdentified, Identified),
- fromBool(flags.bits.isDamaged, Damaged),
- fromBool(flags.bits.isFavorite, Favorite),
- Equipm_false));
- }
- BLOCK_END("InventoryRecv::processPlayerCartItems")
-}
-
-void InventoryRecv::processPlayerCartRemove(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerCartRemove")
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt32("amount");
-
- Inventory *const inv = PlayerInfo::getCartInventory();
- if (inv == nullptr)
- return;
-
- if (Item *const item = inv->getItem(index))
- {
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- inv->removeItemAt(index);
- }
- BLOCK_END("InventoryRecv::processPlayerCartRemove")
-}
-
-void InventoryRecv::processPlayerIdentifyList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- menu = MenuType::Identify;
- const int count = msg.readInt16("len") - 4;
- for (int f = 0; f < count; f ++)
- msg.readInt16("inv index");
-}
-
-void InventoryRecv::processPlayerIdentified(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("inv index");
- msg.readUInt8("flag");
-}
-
-void InventoryRecv::processPlayerRefine(Net::MessageIn &msg)
-{
- const int flag = msg.readInt16("flag");
- const int index = msg.readInt16("inv index") - INVENTORY_OFFSET;
- msg.readInt16("refine");
- const Inventory *const inv = PlayerInfo::getInventory();
- const Item *item = nullptr;
- int notifyType;
- std::string itemName;
- if (inv != nullptr)
- item = inv->getItem(index);
- if (item != nullptr)
- {
- itemName = item->getName();
- }
- else
- {
- // TRANSLATORS: unknown item
- itemName = _("Unknown item");
- }
- switch (flag)
- {
- case 0:
- notifyType = NotifyTypes::REFINE_SUCCESS;
- break;
- case 1:
- notifyType = NotifyTypes::REFINE_FAILURE;
- break;
- case 2:
- notifyType = NotifyTypes::REFINE_DOWNGRADE;
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(flag);
- notifyType = NotifyTypes::REFINE_UNKNOWN;
- break;
- }
- NotifyManager::notify(notifyType, itemName);
-}
-
-void InventoryRecv::processPlayerRepairList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 4) / 13;
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("index");
- msg.readInt16("item id");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- }
- menu = MenuType::RepairWespon;
-}
-
-void InventoryRecv::processPlayerRepairEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("item index");
- msg.readUInt8("flag");
-}
-
-void InventoryRecv::processPlayerRefineList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 4) / 13;
-
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("item index");
- msg.readInt16("item id");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- }
- menu = MenuType::WeaponeRefine;
-}
-
-void InventoryRecv::processPlayerStoragePassword(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("info");
-}
-
-void InventoryRecv::processPlayerStoragePasswordResult(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("result");
- msg.readInt16("error count");
-}
-
-void InventoryRecv::processPlayerCookingList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 6) / 2;
- msg.readInt16("list type");
- for (int f = 0; f < count; f ++)
- msg.readInt16("item id");
-}
-
-void InventoryRecv::processItemDamaged(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("position");
- msg.readBeingId("account id");
-}
-
-void InventoryRecv::processFavoriteItem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("item index");
- msg.readUInt8("favorite (0 - favorite)");
-}
-
-void InventoryRecv::processCartAddError(Net::MessageIn &msg)
-{
- switch (msg.readUInt8("flag"))
- {
- case 0:
- NotifyManager::notify(NotifyTypes::CART_ADD_WEIGHT_ERROR);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::CART_ADD_COUNT_ERROR);
- break;
- default:
- break;
- }
-}
-
-void InventoryRecv::processBindItem(Net::MessageIn &msg)
-{
- const int index = msg.readInt16("item index") - INVENTORY_OFFSET;
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv != nullptr)
- {
- std::string itemName;
- const Item *const item = inv->getItem(index);
- if (item != nullptr)
- {
- itemName = item->getName();
- }
- else
- {
- // TRANSLATORS: unknown item message
- itemName = _("Unknown item");
- }
- NotifyManager::notify(NotifyTypes::BOUND_ITEM, itemName);
- }
-}
-
-void InventoryRecv::processPlayerInventoryRemove(Net::MessageIn &msg)
-{
- BLOCK_START("InventoryRecv::processPlayerInventoryRemove")
- Inventory *const inventory = localPlayer != nullptr
- ? PlayerInfo::getInventory() : nullptr;
-
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
- if (inventory != nullptr)
- {
- if (Item *const item = inventory->getItem(index))
- {
- if (amount != 0)
- {
- NotifyManager::notify(NotifyTypes::DELETE_ITEM_DROPPED,
- item->getName());
- }
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- inventory->removeItemAt(index);
- ArrowsListener::distributeEvent();
- }
- }
- BLOCK_END("InventoryRecv::processPlayerInventoryRemove")
-}
-
-void InventoryRecv::processSelectCart(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = msg.readInt16("len") - 8;
- msg.readBeingId("account id");
- for (int f = 0; f < count; f ++)
- msg.readUInt8("cart type");
-}
-
-int InventoryRecv::getSlot(const int eAthenaSlot)
-{
- if (eAthenaSlot == 0)
- return EquipSlot::VECTOREND;
-
- if ((eAthenaSlot & 0x8000) != 0)
- return inventoryHandler->getProjectileSlot();
-
- unsigned int mask = 1;
- int position = 0;
- while ((eAthenaSlot & mask) == 0u)
- {
- mask <<= 1;
- position++;
- }
- if (position >= EquipSlot::VECTOREND)
- return EquipSlot::VECTOREND;
- return CAST_S32(EQUIP_POINTS[position]);
-}
-
-void InventoryRecv::processMergeItem(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 4) / 2;
- for (int f = 0; f < count; f ++)
- msg.readInt16("inv index");
-}
-
-void InventoryRecv::processMergeItemResponse(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("inv index");
- msg.readInt16("amount");
- msg.readUInt8("result");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/inventoryrecv.h b/src/net/eathena/inventoryrecv.h
deleted file mode 100644
index 09d868f21..000000000
--- a/src/net/eathena/inventoryrecv.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_INVENTORYRECV_H
-#define NET_EATHENA_INVENTORYRECV_H
-
-#include "net/ea/inventoryitem.h"
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace InventoryRecv
- {
- extern Ea::InventoryItems mCartItems;
-
- void processPlayerEquipment(Net::MessageIn &msg);
- void processPlayerInventoryAdd(Net::MessageIn &msg);
- void processPlayerInventory(Net::MessageIn &msg);
- void processPlayerStorage(Net::MessageIn &msg);
- void processPlayerEquip(Net::MessageIn &msg);
- void processPlayerUnEquip(Net::MessageIn &msg);
- void processPlayerInventoryRemove2(Net::MessageIn &msg);
- void processPlayerStorageEquip(Net::MessageIn &msg);
- void processPlayerStorageAdd(Net::MessageIn &msg);
- void processPlayerUseCard(Net::MessageIn &msg);
- void processPlayerInsertCard(Net::MessageIn &msg);
- void processPlayerItemRentalTime(Net::MessageIn &msg);
- void processPlayerItemRentalExpired(Net::MessageIn &msg);
- void processPlayerStorageRemove(Net::MessageIn &msg);
- void processCartInfo(Net::MessageIn &msg);
- void processCartRemove(Net::MessageIn &msg);
- void processPlayerCartAdd(Net::MessageIn &msg);
- void processPlayerCartEquip(Net::MessageIn &msg);
- void processPlayerCartItems(Net::MessageIn &msg);
- void processPlayerCartRemove(Net::MessageIn &msg);
- void processPlayerIdentifyList(Net::MessageIn &msg);
- void processPlayerIdentified(Net::MessageIn &msg);
- void processPlayerRefine(Net::MessageIn &msg);
- void processPlayerRepairList(Net::MessageIn &msg);
- void processPlayerRepairEffect(Net::MessageIn &msg);
- void processPlayerRefineList(Net::MessageIn &msg);
- void processPlayerStoragePassword(Net::MessageIn &msg);
- void processPlayerStoragePasswordResult(Net::MessageIn &msg);
- void processPlayerCookingList(Net::MessageIn &msg);
- void processItemDamaged(Net::MessageIn &msg);
- void processFavoriteItem(Net::MessageIn &msg);
- void processCartAddError(Net::MessageIn &msg);
- void processBindItem(Net::MessageIn &msg);
- void processPlayerInventoryRemove(Net::MessageIn &msg);
- void processSelectCart(Net::MessageIn &msg);
- void processMergeItem(Net::MessageIn &msg);
- void processMergeItemResponse(Net::MessageIn &msg);
-
- int getSlot(const int eAthenaSlot) A_WARN_UNUSED;
- } // namespace InventoryRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_INVENTORYRECV_H
diff --git a/src/net/eathena/itemflags.h b/src/net/eathena/itemflags.h
deleted file mode 100644
index a36099f60..000000000
--- a/src/net/eathena/itemflags.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ITEMFLAGS_H
-#define NET_EATHENA_ITEMFLAGS_H
-
-#include "localconsts.h"
-
-namespace EAthena
-{
- struct ItemFlagBits final
- {
- A_DEFAULT_COPY(ItemFlagBits)
-
- unsigned char isIdentified : 1;
- unsigned char isDamaged : 1;
- unsigned char isFavorite : 1;
- unsigned char spareBits : 5;
- };
-
- union ItemFlags final
- {
- ItemFlagBits bits;
- uint8_t byte;
- } __attribute__((packed));
-} // namespace EAthena
-
-#endif // NET_EATHENA_ITEMFLAGS_H
diff --git a/src/net/eathena/itemhandler.cpp b/src/net/eathena/itemhandler.cpp
deleted file mode 100644
index 02ad723bb..000000000
--- a/src/net/eathena/itemhandler.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/itemhandler.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-ItemHandler::ItemHandler() :
- Ea::ItemHandler()
-{
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/itemhandler.h b/src/net/eathena/itemhandler.h
deleted file mode 100644
index 8543fbeac..000000000
--- a/src/net/eathena/itemhandler.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ITEMHANDLER_H
-#define NET_EATHENA_ITEMHANDLER_H
-
-#include "net/ea/itemhandler.h"
-
-namespace EAthena
-{
-
-class ItemHandler final : public Ea::ItemHandler
-{
- public:
- ItemHandler();
-
- A_DELETE_COPY(ItemHandler)
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_ITEMHANDLER_H
diff --git a/src/net/eathena/itemrecv.cpp b/src/net/eathena/itemrecv.cpp
deleted file mode 100644
index f0a6bd585..000000000
--- a/src/net/eathena/itemrecv.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/itemrecv.h"
-
-#include "actormanager.h"
-#include "itemcolormanager.h"
-#include "logger.h"
-
-#include "const/resources/item/cards.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void ItemRecv::processItemDropped(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("id");
- const int itemId = msg.readInt16("item id");
- ItemTypeT itemType = ItemType::Unknown;
- if (msg.getVersion() >= 20130000)
- itemType = static_cast<ItemTypeT>(msg.readInt16("type"));
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int subX = CAST_S32(msg.readInt8("subx"));
- const int subY = CAST_S32(msg.readInt8("suby"));
- const int amount = msg.readInt16("count");
-
- if (actorManager != nullptr)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- 0,
- ItemColor_one,
- identified,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
-void ItemRecv::processItemDropped2(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("id");
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(msg.readUInt8("type"));
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = CAST_S32(msg.readInt8("subx"));
- const int subY = CAST_S32(msg.readInt8("suby"));
-
- if (actorManager != nullptr)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- identified,
- damaged,
- subX, subY,
- &cards[0]);
- }
-}
-
-void ItemRecv::processItemMvpDropped(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("len");
- msg.readUInt8("type");
- msg.readInt16("item id");
- msg.readUInt8("len");
- msg.readString(24, "name");
- msg.readUInt8("monster name len");
- msg.readString(24, "monster name");
-}
-
-void ItemRecv::processItemVisible(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = CAST_S32(msg.readInt8("sub x"));
- const int subY = CAST_S32(msg.readInt8("sub y"));
-
- if (actorManager != nullptr)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- ItemType::Unknown,
- amount,
- 0,
- ItemColor_one,
- identified,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
-void ItemRecv::processItemVisible2(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("type"));
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = CAST_S32(msg.readInt8("sub x"));
- const int subY = CAST_S32(msg.readInt8("sub y"));
-
- if (actorManager != nullptr)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- identified,
- damaged,
- subX, subY,
- &cards[0]);
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/itemrecv.h b/src/net/eathena/itemrecv.h
deleted file mode 100644
index d4eb2df34..000000000
--- a/src/net/eathena/itemrecv.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ITEMRECV_H
-#define NET_EATHENA_ITEMRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace ItemRecv
- {
- void processItemDropped(Net::MessageIn &msg);
- void processItemDropped2(Net::MessageIn &msg);
- void processItemMvpDropped(Net::MessageIn &msg);
- void processItemVisible(Net::MessageIn &msg);
- void processItemVisible2(Net::MessageIn &msg);
- } // namespace ItemRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_ITEMRECV_H
diff --git a/src/net/eathena/loginhandler.cpp b/src/net/eathena/loginhandler.cpp
deleted file mode 100644
index 35a8cf77f..000000000
--- a/src/net/eathena/loginhandler.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/loginhandler.h"
-
-#include "client.h"
-
-#include "net/generalhandler.h"
-#include "net/net.h"
-#include "net/serverfeatures.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/network.h"
-#include "net/eathena/updateprotocol.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-extern ServerInfo charServer;
-
-LoginHandler::LoginHandler() :
- Ea::LoginHandler()
-{
- loginHandler = this;
-}
-
-LoginHandler::~LoginHandler()
-{
- loginHandler = nullptr;
-}
-
-void LoginHandler::connect() const
-{
- if (Network::mInstance == nullptr)
- return;
-
- Network::mInstance->connect(mServer);
- if (serverFeatures->haveServerVersion())
- {
- sendVersion();
- }
- else
- {
- if (client->getState() != State::LOGIN)
- client->setState(State::LOGIN);
- }
-}
-
-bool LoginHandler::isConnected() const
-{
- if (Network::mInstance == nullptr)
- return false;
-
- return Network::mInstance->isConnected();
-}
-
-void LoginHandler::disconnect() const
-{
- if (Network::mInstance != nullptr &&
- Network::mInstance->getServer() == mServer)
- {
- Network::mInstance->disconnect();
- }
-}
-
-void LoginHandler::changePassword(const std::string &restrict oldPassword,
- const std::string &restrict newPassword)
- const
-{
- if (serverVersion == 0)
- return;
- createOutPacket(CMSG_CHAR_PASSWORD_CHANGE);
- outMsg.writeStringNoLog(oldPassword, 24, "old password");
- outMsg.writeStringNoLog(newPassword, 24, "new password");
-}
-
-void LoginHandler::sendLoginRegister(const std::string &restrict username,
- const std::string &restrict password,
- const std::string &restrict email) const
-{
- if (email.empty())
- {
- if (Net::getNetworkType() == ServerType::EATHENA)
- {
- createOutPacket(CMSG_LOGIN_REGISTER_HAN);
- outMsg.writeInt32(20, "client version");
- outMsg.writeString(username, 24, "login");
- outMsg.writeStringNoLog(password, 24, "password");
- outMsg.writeInt8(0x03, "client type");
- outMsg.writeString("127.0.0.1", 16, "ip address");
- outMsg.writeString("001122334455", 13, "mac address");
- outMsg.writeInt8(0, "is gravity id");
- }
- else
- {
- createOutPacket(CMSG_LOGIN_REGISTER);
- outMsg.writeInt32(20, "client version");
- outMsg.writeString(username, 24, "login");
- outMsg.writeStringNoLog(password, 24, "password");
- outMsg.writeInt8(0x03, "client type");
- }
- }
- else
- {
- createOutPacket(CMSG_LOGIN_REGISTER4);
- outMsg.writeString(username, 24, "login");
- outMsg.writeStringNoLog(password, 24, "password");
- outMsg.writeInt8(0x03, "client type");
- outMsg.writeString(email, 40, "email");
- }
-}
-
-ServerInfo *LoginHandler::getCharServer() const
-{
- return &charServer;
-}
-
-void LoginHandler::sendVersion() const
-{
- createOutPacket(CMSG_SERVER_VERSION_REQUEST);
- outMsg.writeInt32(CLIENT_PROTOCOL_VERSION, "protocol version");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- generalHandler->flushSend();
-}
-
-void LoginHandler::ping() const
-{
- createOutPacket(CMSG_LOGIN_PING);
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
-}
-
-void LoginHandler::updatePacketVersion() const
-{
- updateProtocol();
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/loginhandler.h b/src/net/eathena/loginhandler.h
deleted file mode 100644
index f9201e8fd..000000000
--- a/src/net/eathena/loginhandler.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_LOGINHANDLER_H
-#define NET_EATHENA_LOGINHANDLER_H
-
-#include "net/ea/loginhandler.h"
-
-namespace EAthena
-{
-
-class LoginHandler final : public Ea::LoginHandler
-{
- public:
- LoginHandler();
-
- A_DELETE_COPY(LoginHandler)
-
- ~LoginHandler();
-
- void connect() const override final;
-
- bool isConnected() const override final A_WARN_UNUSED;
-
- void disconnect() const override final;
-
- unsigned int getMaxPasswordLength() const override final A_WARN_UNUSED
- { return 24; }
-
- void changePassword(const std::string &restrict oldPassword,
- const std::string &restrict newPassword)
- const override final;
-
- void sendVersion() const override final;
-
- ServerInfo *getCharServer() const override final A_WARN_UNUSED;
-
- void ping() const override final;
-
- void updatePacketVersion() const override final;
-
- private:
- void sendLoginRegister(const std::string &restrict username,
- const std::string &restrict password,
- const std::string &restrict email)
- const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_LOGINHANDLER_H
diff --git a/src/net/eathena/loginrecv.cpp b/src/net/eathena/loginrecv.cpp
deleted file mode 100644
index 555d1a2c1..000000000
--- a/src/net/eathena/loginrecv.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/loginrecv.h"
-
-#include "client.h"
-#include "configuration.h"
-
-#include "being/being.h"
-
-#include "fs/paths.h"
-
-#include "gui/windows/logindialog.h"
-
-#include "net/logindata.h"
-#include "net/loginhandler.h"
-#include "net/messagein.h"
-
-#include "net/ea/loginrecv.h"
-
-#include "net/eathena/updateprotocol.h"
-
-#include "utils/gettext.h"
-#include "utils/foreach.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int evolPacketOffset;
-
-namespace EAthena
-{
-
-extern ServerInfo charServer;
-
-void LoginRecv::processLoginError2(Net::MessageIn &msg)
-{
- const uint32_t code = msg.readInt32("error");
- msg.readString(20, "error message");
- logger->log("Login::error code: %u", code);
-
- switch (code)
- {
- case 0:
- // TRANSLATORS: error message
- errorMessage = _("Unregistered ID.");
- break;
- case 1:
- // TRANSLATORS: error message
- errorMessage = _("Wrong password.");
- LoginDialog::savedPassword.clear();
- break;
- case 2:
- // TRANSLATORS: error message
- errorMessage = _("Account expired.");
- break;
- case 3:
- // TRANSLATORS: error message
- errorMessage = _("Rejected from server.");
- break;
- case 4:
- // TRANSLATORS: error message
- errorMessage = _("You have been permanently banned from "
- "the game. Please contact the GM team.");
- break;
- case 5:
- // TRANSLATORS: error message
- errorMessage = _("Client too old or wrong server type.\n"
- "Please update client on http://manaplus.org");
- break;
- case 6:
- // TRANSLATORS: error message
- errorMessage = strprintf(_("You have been temporarily "
- "banned from the game until "
- "%s.\nPlease contact the GM "
- "team via the forums."),
- msg.readString(20, "date").c_str());
- break;
- case 7:
- // look like unused
- // TRANSLATORS: error message
- errorMessage = _("Server overpopulated.");
- break;
- case 9:
- // look like unused
- // TRANSLATORS: error message
- errorMessage = _("This user name is already taken.");
- break;
- case 10:
- // look like unused
- // TRANSLATORS: error message
- errorMessage = _("Wrong name.");
- break;
- case 11:
- // look like unused
- // TRANSLATORS: error message
- errorMessage = _("Incorrect email.");
- break;
- case 99:
- // look like unused
- // TRANSLATORS: error message
- errorMessage = _("Username permanently erased.");
- break;
- default:
- // TRANSLATORS: error message
- errorMessage = _("Unknown error.");
- UNIMPLEMENTEDPACKETFIELD(code);
- break;
- }
- client->setState(State::ERROR);
-}
-
-void LoginRecv::processUpdateHost2(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len") - 4;
- const std::string updateHost = msg.readString(len, "host");
-
- splitToStringVector(loginData.updateHosts, updateHost, '|');
- FOR_EACH (StringVectIter, it, loginData.updateHosts)
- {
- if (!checkPath(*it))
- {
- logger->log1("Warning: incorrect update server name");
- loginData.updateHosts.clear();
- break;
- }
- }
-
- logger->log("Received update hosts \"%s\" from login server.",
- updateHost.c_str());
-
- if (client->getState() == State::PRE_LOGIN)
- client->setState(State::LOGIN);
-}
-
-void LoginRecv::processServerVersion(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- msg.readInt32("unused");
- serverVersion = msg.readInt32("server version");
- if (serverVersion > 0)
- {
- logger->log("Evol2 server version: %d", serverVersion);
- packetVersion = msg.readInt32("packet version");
- logger->log("Hercules packet version: %d", packetVersion);
- if (packetVersion == 20150000)
- {
- packetVersion = 20141022;
- logger->log("autofix Hercules packet version to: %d",
- packetVersion);
- }
- if (serverVersion >= 16 && len >= 18)
- {
- evolPacketOffset = msg.readInt16("evol packet offset");
- }
- }
- else
- {
- logger->log("Hercules without version");
- }
- updateProtocol();
- client->setState(State::LOGIN);
-}
-
-void LoginRecv::processCondingKey(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int sz = msg.readInt16("len") - 4;
- msg.readString(sz, "coding key");
-}
-
-void LoginRecv::processCharPasswordResponse(Net::MessageIn &msg)
-{
- // 0: acc not found, 1: success, 2: password mismatch, 3: pass too short
- const uint8_t errMsg = msg.readUInt8("result code");
- // Successful pass change
- if (errMsg == 1)
- {
- client->setState(State::CHANGEPASSWORD_SUCCESS);
- }
- // pass change failed
- else
- {
- switch (errMsg)
- {
- case 0:
- errorMessage =
- // TRANSLATORS: error message
- _("Account was not found. Please re-login.");
- break;
- case 2:
- // TRANSLATORS: error message
- errorMessage = _("Old password incorrect.");
- break;
- case 3:
- // TRANSLATORS: error message
- errorMessage = _("New password too short.");
- break;
- default:
- // TRANSLATORS: error message
- errorMessage = _("Unknown error.");
- break;
- }
- client->setState(State::ACCOUNTCHANGE_ERROR);
- }
-}
-
-void LoginRecv::processLoginData(Net::MessageIn &msg)
-{
- msg.readInt16("len");
-
- loginHandler->clearWorlds();
-
- int offset = 0;
- int serverLen = 0;
- if (msg.getVersion() >= 20170315)
- {
- offset = 47 + 17;
- serverLen = 32 + 128;
- }
- else
- {
- offset = 47;
- serverLen = 32;
- }
-
- const int worldCount = (msg.getLength() - offset) / serverLen;
-
- Ea::LoginRecv::mToken.session_ID1 = msg.readInt32("session id1");
- Ea::LoginRecv::mToken.account_ID = msg.readBeingId("accound id");
- Ea::LoginRecv::mToken.session_ID2 = msg.readInt32("session id2");
- msg.readInt32("old ip");
- loginData.lastLogin = msg.readString(24, "last login");
- msg.readInt16("unused");
-
- // reserve bits for future usage
- Ea::LoginRecv::mToken.sex = Being::intToGender(CAST_U8(
- msg.readUInt8("gender") & 3U));
-
- if (msg.getVersion() >= 20170315)
- {
- msg.readInt32("unused1");
- msg.readInt32("unused1");
- msg.readInt32("unused1");
- msg.readInt32("unused1");
- msg.readUInt8("unused1");
- }
-
- for (int i = 0; i < worldCount; i++)
- {
- WorldInfo *const world = new WorldInfo;
-
- world->address = msg.readInt32("ip address");
- world->port = msg.readInt16("port");
- world->name = msg.readString(20, "name");
- world->online_users = msg.readInt16("online number");
- config.setValue("updatehost", Ea::LoginRecv::mUpdateHost);
- world->updateHost = Ea::LoginRecv::mUpdateHost;
- msg.readInt16("maintenance");
- msg.readInt16("new");
- if (msg.getVersion() >= 20170315)
- {
- for (int f = 0; f < 32; f ++)
- msg.readInt32("unused2");
- }
-
- logger->log("Network: Server: %s (%s:%d)", world->name.c_str(),
- ipToString(world->address), world->port);
-
- Ea::LoginRecv::mWorlds.push_back(world);
- }
- client->setState(State::WORLD_SELECT);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/loginrecv.h b/src/net/eathena/loginrecv.h
deleted file mode 100644
index ca2da52bf..000000000
--- a/src/net/eathena/loginrecv.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_LOGINRECV_H
-#define NET_EATHENA_LOGINRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace LoginRecv
- {
- void processLoginError2(Net::MessageIn &msg);
- void processUpdateHost2(Net::MessageIn &msg);
- void processServerVersion(Net::MessageIn &msg);
- void processCondingKey(Net::MessageIn &msg);
- void processCharPasswordResponse(Net::MessageIn &msg);
- void processLoginData(Net::MessageIn &msg);
- } // namespace LoginRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_LOGINRECV_H
diff --git a/src/net/eathena/mail2handler.cpp b/src/net/eathena/mail2handler.cpp
deleted file mode 100644
index 2b4de04ab..000000000
--- a/src/net/eathena/mail2handler.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mail2handler.h"
-
-#include "const/net/inventory.h"
-
-#include "being/localplayer.h"
-
-#include "net/eathena/mail2recv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/checkutils.h"
-
-#include "resources/mailqueue.h"
-
-#include "resources/item/item.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-namespace EAthena
-{
-
-Mail2Handler::Mail2Handler()
-{
- mail2Handler = this;
-}
-
-Mail2Handler::~Mail2Handler()
-{
- mail2Handler = nullptr;
- Mail2Recv::mCheckedName.clear();
- while (!Mail2Recv::mMailQueue.empty())
- {
- MailQueue *const mail = Mail2Recv::mMailQueue.front();
- delete mail;
- Mail2Recv::mMailQueue.pop();
- }
-}
-
-void Mail2Handler::openWriteMail(const std::string &receiver) const
-{
- if (packetVersion < 20140416 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_OPEN_WRITE_MAIL);
- outMsg.writeString(receiver, 24, "receiver name");
-}
-
-void Mail2Handler::addItem(const Item *const item,
- const int amount) const
-{
- if (item == nullptr)
- return;
- if (packetVersion < 20140416 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
-
- createOutPacket(CMSG_MAIL2_ADD_ITEM_TO_MAIL);
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt16(CAST_S16(amount), "amount");
-}
-
-void Mail2Handler::removeItem(const int index,
- const int amount) const
-{
- if (packetVersion < 20140416 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
-
- createOutPacket(CMSG_MAIL2_REMOVE_ITEM_MAIL);
- outMsg.writeInt16(CAST_S16(index + INVENTORY_OFFSET), "index");
- outMsg.writeInt16(CAST_S16(amount), "amount");
-}
-
-void Mail2Handler::sendMail(const std::string &to,
- const std::string &title,
- const std::string &body,
- const int64_t &money) const
-{
- if (packetVersion < 20131230 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- if (localPlayer == nullptr)
- return;
-
- const std::string from = localPlayer->getName();
- const int titleSz = CAST_S32(title.size()) + 1;
- const int bodySz = CAST_S32(body.size()) + 1;
- int32_t sz = 2 + 2 + 24 + 24 + 8 + 2 + 2 + titleSz + bodySz;
- if (sz > 32767 - 4)
- {
- reportAlways("Mail message too big");
- return;
- }
- if (packetVersion >= 20160600)
- sz += 4;
-
- createOutPacket(CMSG_MAIL2_SEND_MAIL);
- outMsg.writeInt16(CAST_S16(sz), "len");
- outMsg.writeString(to, 24, "to");
- outMsg.writeString(from, 24, "from");
- outMsg.writeInt64(money, "money");
- outMsg.writeInt16(CAST_S16(titleSz), "title len");
- outMsg.writeInt16(CAST_S16(bodySz), "body len");
- if (packetVersion >= 20160600)
- outMsg.writeInt32(0, "to char id");
- outMsg.writeString(title, titleSz, "title");
- outMsg.writeString(body, bodySz, "body");
- Mail2Recv::mCheckedName.clear();
-}
-
-void Mail2Handler::queueCheckName(const MailQueueTypeT type,
- const std::string &to,
- const std::string &title,
- const std::string &body,
- const int64_t &money) const
-{
- MailQueue *const mail = new MailQueue;
- mail->to = to;
- mail->title = title;
- mail->body = body;
- mail->money = money;
- mail->type = type;
- Mail2Recv::mMailQueue.push(mail);
- requestCheckName(to);
-}
-
-void Mail2Handler::nextPage(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20131218 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_NEXT_PAGE);
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
- outMsg.writeInt64(mailId, "mail id");
-}
-
-void Mail2Handler::readMail(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20131223 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_READ_MAIL);
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
- outMsg.writeInt64(mailId, "mail id");
-}
-
-void Mail2Handler::deleteMail(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20131218 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_DELETE_MAIL);
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
- outMsg.writeInt64(mailId, "mail id");
-}
-
-void Mail2Handler::requestMoney(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20140326 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_REQUEST_MONEY);
- outMsg.writeInt64(mailId, "mail id");
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
-}
-
-void Mail2Handler::requestItems(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20140326 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_REQUEST_ITEMS);
- outMsg.writeInt64(mailId, "mail id");
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
-}
-
-void Mail2Handler::refreshMailList(const MailOpenTypeT openType,
- const int64_t mailId) const
-{
- if (packetVersion < 20131218 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_REFRESH_MAIL_LIST);
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
- outMsg.writeInt64(mailId, "mail id");
-}
-
-void Mail2Handler::openMailBox(const MailOpenTypeT openType) const
-{
- if (packetVersion < 20140212 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_OPEN_MAILBOX);
- outMsg.writeInt8(toInt(openType, int8_t), "open type");
- outMsg.writeInt64(0, "mail id");
-}
-
-void Mail2Handler::closeMailBox() const
-{
- if (packetVersion < 20131211 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_CLOSE_MAILBOX);
-}
-
-void Mail2Handler::cancelWriteMail() const
-{
- if (packetVersion < 20140326 ||
- (serverVersion < 19 && serverVersion != 0))
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_CANCEL_WRITE_MAIL);
-}
-
-void Mail2Handler::requestCheckName(const std::string &name) const
-{
- if (packetVersion < 20140423 ||
- serverVersion < 19)
- {
- return;
- }
- createOutPacket(CMSG_MAIL2_CHECK_NAME);
- outMsg.writeString(name, 24, "name");
-}
-
-std::string Mail2Handler::getCheckedName() const
-{
- return Mail2Recv::mCheckedName;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mail2handler.h b/src/net/eathena/mail2handler.h
deleted file mode 100644
index c7d15dc78..000000000
--- a/src/net/eathena/mail2handler.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAIL2HANDLER_H
-#define NET_EATHENA_MAIL2HANDLER_H
-
-#include "net/mail2handler.h"
-
-namespace EAthena
-{
-
-class Mail2Handler final : public Net::Mail2Handler
-{
- public:
- Mail2Handler();
-
- A_DELETE_COPY(Mail2Handler)
-
- ~Mail2Handler();
-
- void openWriteMail(const std::string &receiver) const override final;
-
- void addItem(const Item *const item,
- const int amount) const override final;
-
- void removeItem(const int index,
- const int amount) const override final;
-
- void sendMail(const std::string &to,
- const std::string &title,
- const std::string &body,
- const int64_t &money) const override final;
-
- void queueCheckName(const MailQueueTypeT type,
- const std::string &to,
- const std::string &title,
- const std::string &body,
- const int64_t &money) const override final;
-
- void nextPage(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void readMail(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void deleteMail(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void requestMoney(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void requestItems(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void refreshMailList(const MailOpenTypeT openType,
- const int64_t mailId) const override final;
-
- void openMailBox(const MailOpenTypeT openType) const override final;
-
- void closeMailBox() const override final;
-
- void cancelWriteMail() const override final;
-
- void requestCheckName(const std::string &name) const override final;
-
- std::string getCheckedName() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAIL2HANDLER_H
diff --git a/src/net/eathena/mail2recv.cpp b/src/net/eathena/mail2recv.cpp
deleted file mode 100644
index 1afb69d16..000000000
--- a/src/net/eathena/mail2recv.cpp
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mail2recv.h"
-
-#include "itemcolormanager.h"
-#include "notifymanager.h"
-
-#include "const/net/inventory.h"
-
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/mailmessage.h"
-
-#include "gui/windows/maileditwindow.h"
-#include "gui/windows/mailviewwindow.h"
-#include "gui/windows/mailwindow.h"
-
-#include "net/mail2handler.h"
-#include "net/messagein.h"
-
-#include "resources/mailqueue.h"
-
-#include "resources/inventory/inventory.h"
-
-#include "resources/item/item.h"
-#include "resources/item/itemoptionslist.h"
-
-#include "utils/checkutils.h"
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-#include "utils/timer.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace Mail2Recv
-{
- std::queue<MailQueue*> mMailQueue;
- std::string mCheckedName;
-} // namespace Mail2Recv
-
-void Mail2Recv::processMailIcon(Net::MessageIn &msg)
-{
- // ignored, because if has new mail, server send chat message already.
- msg.readUInt8("has new mail");
-}
-
-void Mail2Recv::processOpenNewMailWindow(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(24, "receiver");
- msg.readUInt8("result");
-}
-
-void Mail2Recv::processAddItemResult(Net::MessageIn &msg)
-{
- const int res = msg.readUInt8("result");
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const uint8_t identify = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- ItemOptionsList *options = new ItemOptionsList(5);
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- msg.readInt16("weight");
- msg.readUInt8("unknown 1");
- msg.readUInt8("unknown 2");
- msg.readUInt8("unknown 3");
- msg.readUInt8("unknown 4");
- msg.readUInt8("unknown 5");
-
- if (mailEditWindow == nullptr)
- {
- reportAlways("Mail edit window not created");
- delete options;
- return;
- }
- Inventory *const inventory = mailEditWindow->getInventory();
- if (inventory == nullptr)
- {
- reportAlways("Mail edit window inventory not exists");
- delete options;
- return;
- }
-
- if (res != 0)
- {
- switch (res)
- {
- case 1:
- NotifyManager::notify(
- NotifyTypes::MAIL_ATTACH_ITEM_WEIGHT_ERROR);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::MAIL_ATTACH_ITEM_FATAL_ERROR);
- break;
- case 3:
- NotifyManager::notify(
- NotifyTypes::MAIL_ATTACH_ITEM_NO_SPACE);
- break;
- case 4:
- NotifyManager::notify(
- NotifyTypes::MAIL_ATTACH_ITEM_NOT_TRADEABLE);
- break;
- default:
- NotifyManager::notify(
- NotifyTypes::MAIL_ATTACH_ITEM_UNKNOWN_ERROR);
- UNIMPLEMENTEDPACKETFIELD(res);
- break;
- }
- delete options;
- return;
- }
-
- Item *const item = inventory->findItemByTag(index);
- if (item == nullptr)
- {
- const int slot = inventory->addItem(itemId,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identify, Identified),
- damaged,
- Favorite_false,
- Equipm_false,
- Equipped_false);
- if (slot == -1)
- {
- delete options;
- return;
- }
- inventory->setCards(slot, cards, maxCards);
- inventory->setOptions(slot, options);
- inventory->setTag(slot, index);
- }
- else
- {
- item->increaseQuantity(amount);
- }
-
- mailEditWindow->updateItems();
- delete options;
-}
-
-void Mail2Recv::processRemoveItemResult(Net::MessageIn &msg)
-{
- const int result = msg.readUInt8("result");
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("count");
- msg.readInt16("weight");
-
- if (result == 0)
- {
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- {
- reportAlways("Player inventory not exists");
- return;
- }
- std::string itemName;
- const Item *const item = inv->getItem(index);
- if (item != nullptr)
- {
- itemName = item->getName();
- }
- else
- {
- // TRANSLATORS: unknown item name
- itemName = _("Unknown item");
- }
-
- NotifyManager::notify(
- NotifyTypes::MAIL_REMOVE_ITEM_ERROR,
- itemName);
- return;
- }
- if (mailEditWindow == nullptr)
- {
- reportAlways("Mail edit window not created");
- return;
- }
- Inventory *const inventory = mailEditWindow->getInventory();
- if (inventory == nullptr)
- {
- reportAlways("Mail edit window inventory not exists");
- return;
- }
- const int index2 = inventory->findIndexByTag(index);
- if (index2 == -1)
- {
- reportAlways("Item not exists in mail edit window.");
- return;
- }
- Item *const item = inventory->getItem(index2);
- if (item == nullptr)
- {
- reportAlways("Item not exists.");
- return;
- }
-
- item->increaseQuantity(-amount);
- mailEditWindow->updateItems();
-}
-
-void Mail2Recv::processCheckNameResult(Net::MessageIn &msg)
-{
- const int charId = msg.readInt32("char id");
- msg.readInt16("class");
- msg.readInt16("level");
- if (msg.getVersion() >= 20160316)
- msg.readString(24, "name");
- // +++ in future if name received, need use it in map
- if (mMailQueue.empty())
- {
- reportAlways("Mail2Recv::processCheckNameResult no names in queue."
- "Char id: %d", charId);
- return;
- }
- MailQueue *const mail = mMailQueue.front();
- mMailQueue.pop();
- if (charId == 0)
- {
- NotifyManager::notify(NotifyTypes::MAIL_NAME_VALIDATION_ERROR,
- mail->to);
- delete mail;
- return;
- }
- mCheckedName = mail->to;
- switch (mail->type)
- {
- case MailQueueType::SendMail:
- mail2Handler->sendMail(mail->to,
- mail->title,
- mail->body,
- mail->money);
- break;
- case MailQueueType::EditMail:
- if (mailWindow == nullptr)
- {
- reportAlways("Mail window not created");
- }
- else
- {
- mailWindow->createMail(mail->to);
- }
- break;
- case MailQueueType::ValidateTo:
- if (mailEditWindow == nullptr)
- {
- reportAlways("Mail edit window not created");
- }
- else
- {
- mailEditWindow->validatedTo();
- }
- break;
- case MailQueueType::Unknown:
- default:
- reportAlways("Not implemented yet.");
- break;
- }
- delete mail;
-}
-
-void Mail2Recv::processSendResult(Net::MessageIn &msg)
-{
- const int res = msg.readUInt8("result");
- switch (res)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_OK);
- if (mailEditWindow != nullptr)
- mailEditWindow->close();
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_FATAL_ERROR);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_COUNT_ERROR);
- break;
- case 3:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_ITEM_ERROR);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_RECEIVER_ERROR);
- break;
- default:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_ERROR);
- break;
- }
-}
-
-void Mail2Recv::processMailListPage(Net::MessageIn &msg)
-{
- if (mailWindow == nullptr)
- {
- reportAlways("mail window not created");
- return;
- }
- msg.readInt16("len");
- mailWindow->setOpenType(fromInt(msg.readUInt8("open type"),
- MailOpenTypeT));
- const int cnt = msg.readUInt8("cnt");
- const bool isEnd = msg.readUInt8("isEnd") != 0;
- for (int f = 0; f < cnt; f ++)
- {
- MailMessage *const mail = new MailMessage;
- mail->id = msg.readInt64("mail id");
- mail->read = msg.readUInt8("is read") != 0U ? true : false;
- mail->type = static_cast<MailMessageType::Type>(
- msg.readUInt8("type"));
- mail->sender = msg.readString(24, "sender name");
- mail->time = CAST_S32(cur_time - msg.readInt32("reg time"));
- mail->strTime = timeToStr(mail->time);
- mail->expireTime = msg.readInt32("expire time");
- mail->title = msg.readString(-1, "title");
- mailWindow->addMail(mail);
- }
- if (isEnd)
- mailWindow->setLastPage();
-}
-
-void Mail2Recv::processReadMail(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const MailOpenTypeT openType = static_cast<MailOpenTypeT>(
- msg.readUInt8("open type"));
- const int64_t mailId = msg.readInt64("mail id");
- const int textLen = msg.readInt16("text len");
- const int64_t money = msg.readInt64("money");
- const int itemsCount = msg.readUInt8("item count");
- const std::string text = msg.readString(textLen, "text message");
- MailMessage *mail = nullptr;
-
- if (mailWindow != nullptr &&
- openType == mailWindow->getOpenType())
- {
- mail = mailWindow->findMail(mailId);
- }
-
- if (mail == nullptr)
- {
- reportAlways("Mail message not found");
- for (int f = 0; f < itemsCount; f ++)
- {
- msg.readInt16("amount");
- msg.readInt16("item id");
- msg.readUInt8("identify");
- msg.readUInt8("damaged");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- msg.readInt32("unknown");
- msg.readUInt8("type");
- msg.readInt32("unknown");
- for (int d = 0; d < 5; d ++)
- {
- msg.readInt16("option index");
- msg.readInt16("option value");
- msg.readUInt8("option param");
- }
- }
- return;
- }
-
- mail->money = money;
- mail->text = text;
- mailWindow->showMessage(mail, itemsCount);
-
- Inventory *const inventory = mailViewWindow->getInventory();
-
- for (int f = 0; f < itemsCount; f ++)
- {
- // server may send wrong items count, if items was removed from mail
- if (msg.getUnreadLength() == 0)
- break;
- const int amount = msg.readInt16("amount");
- const int itemId = msg.readInt16("item id");
- const uint8_t identify = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int d = 0; d < maxCards; d ++)
- cards[d] = msg.readUInt16("card");
- msg.readInt32("unknown");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- msg.readInt32("unknown");
- ItemOptionsList *options = new ItemOptionsList(5);
- for (int d = 0; d < 5; d ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
-
- const int slot = inventory->addItem(itemId,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identify, Identified),
- damaged,
- Favorite_false,
- Equipm_false,
- Equipped_false);
- if (slot == -1)
- {
- delete options;
- continue;
- }
- inventory->setCards(slot, cards, maxCards);
- inventory->setOptions(slot, options);
- delete options;
- }
- mailViewWindow->updateItems();
-}
-
-void Mail2Recv::processMailDelete(Net::MessageIn &msg)
-{
- msg.readUInt8("open type");
- const int64_t mailId = msg.readInt64("mail id");
- if (mailWindow == nullptr)
- {
- reportAlways("Mail window not created.");
- return;
- }
- mailWindow->removeMail(mailId);
-}
-
-void Mail2Recv::processRequestMoney(Net::MessageIn &msg)
-{
- const int64_t mailId = msg.readInt64("mail id");
- msg.readUInt8("open type");
- const int res = msg.readUInt8("result");
- switch (res)
- {
- case 0:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_MONEY_OK);
- if (mailViewWindow != nullptr)
- mailViewWindow->removeMoney(mailId);
- break;
- case 1:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_MONEY_ERROR);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_MONEY_LIMIT_ERROR);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(res);
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_MONEY_ERROR);
- break;
- }
-}
-
-void Mail2Recv::processRequestItems(Net::MessageIn &msg)
-{
- const int64_t mailId = msg.readInt64("mail id");
- msg.readUInt8("open type");
- const int res = msg.readUInt8("result");
- switch (res)
- {
- case 0:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_ATTACH_OK);
- if (mailViewWindow != nullptr)
- mailViewWindow->removeItems(mailId);
- break;
- case 1:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_ATTACH_ERROR);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_ATTACH_FULL_ERROR);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(res);
- NotifyManager::notify(
- NotifyTypes::MAIL_GET_ATTACH_ERROR);
- break;
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mail2recv.h b/src/net/eathena/mail2recv.h
deleted file mode 100644
index e23603b8c..000000000
--- a/src/net/eathena/mail2recv.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAIL2RECV_H
-#define NET_EATHENA_MAIL2RECV_H
-
-#include <string>
-#include <queue>
-
-struct MailQueue;
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace Mail2Recv
- {
- extern std::queue<MailQueue*> mMailQueue;
- extern std::string mCheckedName;
-
- void processMailIcon(Net::MessageIn &msg);
- void processOpenNewMailWindow(Net::MessageIn &msg);
- void processAddItemResult(Net::MessageIn &msg);
- void processRemoveItemResult(Net::MessageIn &msg);
- void processCheckNameResult(Net::MessageIn &msg);
- void processSendResult(Net::MessageIn &msg);
- void processMailListPage(Net::MessageIn &msg);
- void processReadMail(Net::MessageIn &msg);
- void processMailDelete(Net::MessageIn &msg);
- void processRequestMoney(Net::MessageIn &msg);
- void processRequestItems(Net::MessageIn &msg);
- } // namespace Mail2Recv
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAIL2RECV_H
diff --git a/src/net/eathena/mailhandler.cpp b/src/net/eathena/mailhandler.cpp
deleted file mode 100644
index 44edeb5bd..000000000
--- a/src/net/eathena/mailhandler.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mailhandler.h"
-
-#include "const/net/inventory.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-MailHandler::MailHandler()
-{
- mailHandler = this;
-}
-
-MailHandler::~MailHandler()
-{
- mailHandler = nullptr;
-}
-
-void MailHandler::refresh() const
-{
- createOutPacket(CMSG_MAIL_REFRESH_INBOX);
-}
-
-void MailHandler::readMessage(const int msgId) const
-{
- createOutPacket(CMSG_MAIL_READ_MESSAGE);
- outMsg.writeInt32(msgId, "message id");
-}
-
-void MailHandler::getAttach(const int msgId) const
-{
- createOutPacket(CMSG_MAIL_GET_ATTACH);
- outMsg.writeInt32(msgId, "message id");
-}
-
-void MailHandler::deleteMessage(const int msgId) const
-{
- createOutPacket(CMSG_MAIL_DELETE_MESSAGE);
- outMsg.writeInt32(msgId, "message id");
-}
-
-void MailHandler::returnMessage(const int msgId) const
-{
- createOutPacket(CMSG_MAIL_RETURN_MESSAGE);
- outMsg.writeInt32(msgId, "message id");
- outMsg.writeString("", 24, "unused");
-}
-
-void MailHandler::setAttach(const int index, const int amount) const
-{
- createOutPacket(CMSG_MAIL_SET_ATTACH);
- outMsg.writeInt16(CAST_S16(index + INVENTORY_OFFSET), "index");
- outMsg.writeInt32(amount, "amount");
-}
-
-void MailHandler::setAttachMoney(const int money) const
-{
- createOutPacket(CMSG_MAIL_SET_ATTACH);
- outMsg.writeInt16(CAST_S16(0), "index");
- outMsg.writeInt32(money, "money");
-}
-
-void MailHandler::resetAttach(const int flag) const
-{
- createOutPacket(CMSG_MAIL_RESET_ATTACH);
- outMsg.writeInt16(CAST_S16(flag), "flag");
-}
-
-void MailHandler::send(const std::string &name,
- const std::string &title,
- std::string message) const
-{
- if (message.size() > 255)
- message = message.substr(0, 255);
- const int sz = CAST_S32(message.size());
-
- createOutPacket(CMSG_MAIL_SEND);
- outMsg.writeInt16(CAST_S16(69 + sz), "len");
- outMsg.writeString(name, 24, "name");
- outMsg.writeString(title, 40, "title");
- outMsg.writeInt8(CAST_S8(sz), "message size");
- outMsg.writeString(message, sz, "message");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mailhandler.h b/src/net/eathena/mailhandler.h
deleted file mode 100644
index 4d55238a6..000000000
--- a/src/net/eathena/mailhandler.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAILHANDLER_H
-#define NET_EATHENA_MAILHANDLER_H
-
-#include "net/mailhandler.h"
-
-namespace EAthena
-{
-
-class MailHandler final : public Net::MailHandler
-{
- public:
- MailHandler();
-
- A_DELETE_COPY(MailHandler)
-
- ~MailHandler();
-
- void refresh() const override final;
-
- void readMessage(const int msgId) const override final;
-
- void getAttach(const int msgId) const override final;
-
- void deleteMessage(const int msgId) const override final;
-
- void returnMessage(const int msgId) const override final;
-
- void setAttach(const int index, const int amount) const override final;
-
- void setAttachMoney(const int money) const override final;
-
- void resetAttach(const int flag) const override final;
-
- void send(const std::string &name,
- const std::string &title,
- std::string message) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAILHANDLER_H
diff --git a/src/net/eathena/mailrecv.cpp b/src/net/eathena/mailrecv.cpp
deleted file mode 100644
index de7945a7d..000000000
--- a/src/net/eathena/mailrecv.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mailrecv.h"
-
-#include "itemcolormanager.h"
-#include "notifymanager.h"
-
-#include "const/resources/item/cards.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/mailmessage.h"
-
-#include "gui/windows/mailviewwindow.h"
-#include "gui/windows/mailwindow.h"
-
-#include "net/mailhandler.h"
-#include "net/messagein.h"
-
-#include "utils/checkutils.h"
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "resources/inventory/inventory.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void MailRecv::processMailOpen(Net::MessageIn &msg)
-{
- const int flag = msg.readInt32("flag");
- switch (flag)
- {
- case 0: // open window
- if (mailWindow != nullptr)
- {
- if (!mailWindow->isWindowVisible())
- mailWindow->setVisible(Visible_true);
- mailWindow->requestMoveToTop();
- }
- break;
-
- case 1: // close window
- if (mailWindow != nullptr)
- {
- if (mailWindow->isWindowVisible())
- mailWindow->setVisible(Visible_false);
- }
- break;
-
- default:
- UNIMPLEMENTEDPACKETFIELD(flag);
- break;
- }
-}
-
-void MailRecv::processMailList(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 8) / 73;
- const int amount = msg.readInt32("amount");
- if (count != amount)
- logger->log("error: wrong mails count");
- mailWindow->clear();
- for (int f = 0; f < count; f ++)
- {
- MailMessage *const mail = new MailMessage;
- mail->id = msg.readInt32("message id");
- mail->title = msg.readString(40, "title");
- mail->read = msg.readUInt8("unread flag") != 0u ? true : false;
- mail->sender = msg.readString(24, "sender name");
- mail->time = msg.readInt32("time stamp");
- mail->strTime = timeToStr(mail->time);
- mailWindow->addMail(mail);
- }
-}
-
-void MailRecv::processReadMail(Net::MessageIn &msg)
-{
- const int sz = msg.readInt16("len") - 101;
- MailMessage *const mail = new MailMessage;
- mail->id = msg.readInt32("message id");
- mail->title = msg.readString(40, "title");
- mail->sender = msg.readString(24, "sender name");
- msg.readInt32("unused");
- mail->money = msg.readInt32("money");
-
- const int amount = msg.readInt32("item amount");
- const int itemId = msg.readInt16("item id");
- const ItemTypeT itemType = static_cast<ItemTypeT>(
- msg.readInt16("item type"));
- const uint8_t identify = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int d = 0; d < maxCards; d ++)
- cards[d] = msg.readUInt16("card");
- const int msgLen = msg.readUInt8("msg len");
- if (msgLen != sz)
- logger->log("error: wrong message size");
- mail->text = msg.readString(sz, "message");
- msg.readUInt8("zero");
- mail->strTime = timeToStr(mail->time);
- if (mailWindow == nullptr)
- {
- reportAlways("Mail window not created");
- delete mail;
- return;
- }
- mailWindow->showMessage(mail, itemId != 0 ? 1 : 0);
- if (mailViewWindow == nullptr)
- {
- reportAlways("Mail view window not created");
- return;
- }
-
- Inventory *const inventory = mailViewWindow->getInventory();
- if (inventory == nullptr)
- {
- reportAlways("Mail view window missing inventory");
- return;
- }
-
- const int slot = inventory->addItem(itemId,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identify, Identified),
- damaged,
- Favorite_false,
- Equipm_false,
- Equipped_false);
- if (slot != -1)
- inventory->setCards(slot, cards, maxCards);
-
- mailViewWindow->updateItems();
-}
-
-void MailRecv::processGetAttachment(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("flag");
- switch (flag)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_OK);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_ERROR);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_TOO_MANY_ITEMS);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(flag);
- break;
- }
-}
-
-void MailRecv::processSendMailAck(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("fail flag");
- switch (flag)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_OK);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::MAIL_SEND_ERROR);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(flag);
- break;
- }
-}
-
-void MailRecv::processNewMail(Net::MessageIn &msg)
-{
- msg.readInt32("message id");
- const std::string subj = msg.readString(40, "title");
- const std::string sender = msg.readString(24, "sender name");
- NotifyManager::notify(NotifyTypes::NEW_MAIL,
- // TRANSLATORS: mail message notification
- strprintf(_("You have new mail from %s with subject %s"),
- sender.c_str(), subj.c_str()));
- mailHandler->refresh();
-}
-
-void MailRecv::processSetAttachmentAck(Net::MessageIn &msg)
-{
- const int index = msg.readInt16("index");
- const int flag = msg.readUInt8("flag");
- if (flag != 0)
- {
- if (index != 0)
- NotifyManager::notify(NotifyTypes::MAIL_ATTACH_ITEM_ERROR);
- else
- NotifyManager::notify(NotifyTypes::MAIL_ATTACH_MONEY_ERROR);
- }
-}
-
-void MailRecv::processDeleteAck(Net::MessageIn &msg)
-{
- const int mail = msg.readInt32("message id");
- const int flag = msg.readInt16("fail flag");
- if (flag != 0)
- {
- NotifyManager::notify(NotifyTypes::MAIL_DELETE_ERROR);
- }
- else
- {
- NotifyManager::notify(NotifyTypes::MAIL_DELETE_OK);
- mailWindow->removeMail(mail);
- }
-}
-
-void MailRecv::processMailReturn(Net::MessageIn &msg)
-{
- const int mail = msg.readInt32("message id");
- const int flag = msg.readInt16("fail flag");
- if (flag != 0)
- {
- NotifyManager::notify(NotifyTypes::MAIL_RETURN_ERROR);
- }
- else
- {
- NotifyManager::notify(NotifyTypes::MAIL_RETURN_OK);
- mailWindow->removeMail(mail);
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mailrecv.h b/src/net/eathena/mailrecv.h
deleted file mode 100644
index 8f56f5a9f..000000000
--- a/src/net/eathena/mailrecv.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAILRECV_H
-#define NET_EATHENA_MAILRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace MailRecv
- {
- void processMailOpen(Net::MessageIn &msg);
- void processMailList(Net::MessageIn &msg);
- void processReadMail(Net::MessageIn &msg);
- void processGetAttachment(Net::MessageIn &msg);
- void processSendMailAck(Net::MessageIn &msg);
- void processNewMail(Net::MessageIn &msg);
- void processSetAttachmentAck(Net::MessageIn &msg);
- void processDeleteAck(Net::MessageIn &msg);
- void processMailReturn(Net::MessageIn &msg);
- } // namespace MailRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAILRECV_H
diff --git a/src/net/eathena/maphandler.cpp b/src/net/eathena/maphandler.cpp
deleted file mode 100644
index b16fc664f..000000000
--- a/src/net/eathena/maphandler.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/maphandler.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-MapHandler::MapHandler() :
- Net::MapHandler()
-{
- mapHandler = this;
-}
-
-MapHandler::~MapHandler()
-{
- mapHandler = nullptr;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/maphandler.h b/src/net/eathena/maphandler.h
deleted file mode 100644
index 855ec4da7..000000000
--- a/src/net/eathena/maphandler.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAPHANDLER_H
-#define NET_EATHENA_MAPHANDLER_H
-
-#include "net/maphandler.h"
-
-namespace EAthena
-{
-
-class MapHandler final : public Net::MapHandler
-{
- public:
- MapHandler();
-
- A_DELETE_COPY(MapHandler)
-
- ~MapHandler();
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAPHANDLER_H
diff --git a/src/net/eathena/maprecv.cpp b/src/net/eathena/maprecv.cpp
deleted file mode 100644
index cc079feba..000000000
--- a/src/net/eathena/maprecv.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/maprecv.h"
-
-#include "logger.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void MapRecv::processInstanceStart(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(61, "instance name");
- msg.readInt16("flag");
-}
-
-void MapRecv::processInstanceCreate(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("flag");
-}
-
-void MapRecv::processInstanceInfo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readString(61, "instance name");
- msg.readInt32("remaining time");
- msg.readInt32("no players close time");
-}
-
-void MapRecv::processInstanceDelete(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("flag");
- msg.readInt32("unused");
-}
-
-void MapRecv::processAddMapMarker(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readBeingId("account id");
- msg.readInt16("x");
- msg.readInt16("y");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/maprecv.h b/src/net/eathena/maprecv.h
deleted file mode 100644
index d9fffc8a2..000000000
--- a/src/net/eathena/maprecv.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAPRECV_H
-#define NET_EATHENA_MAPRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace MapRecv
- {
- void processInstanceStart(Net::MessageIn &msg);
- void processInstanceCreate(Net::MessageIn &msg);
- void processInstanceInfo(Net::MessageIn &msg);
- void processInstanceDelete(Net::MessageIn &msg);
- void processAddMapMarker(Net::MessageIn &msg);
- } // namespace MapRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAPRECV_H
diff --git a/src/net/eathena/maptypeproperty2.h b/src/net/eathena/maptypeproperty2.h
deleted file mode 100644
index 2bc235798..000000000
--- a/src/net/eathena/maptypeproperty2.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MAPTYPEPROPERTY2_H
-#define NET_EATHENA_MAPTYPEPROPERTY2_H
-
-#include "localconsts.h"
-
-namespace EAthena
-{
- struct MapTypeProperty2Bits final
- {
- A_DEFAULT_COPY(MapTypeProperty2Bits)
-
- uint32_t party : 1; // allow attack party members (PvP)
- uint32_t guild : 1; // allow attack guild members (GvG)
- uint32_t siege : 1; // show emblem in GvG (WoE castle)
- uint32_t mineffect : 1; // mine effect?
- uint32_t nolockon : 1; // unknown
- uint32_t countpk : 1; // show PvP counter
- uint32_t nopartyformation : 1; // prevent party creation/
- // modification
- uint32_t bg : 1; // is on battle ground
- uint32_t noitemconsumption : 1; // unused
- uint32_t usecart : 1; // unused
- uint32_t summonstarmiracle : 1; // unused
- uint32_t SpareBits : 15; // unused bits
- } __attribute__((packed));
-
- union MapTypeProperty2 final
- {
- MapTypeProperty2Bits bits;
- uint32_t data;
- } __attribute__((packed));
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MAPTYPEPROPERTY2_H
diff --git a/src/net/eathena/markethandler.cpp b/src/net/eathena/markethandler.cpp
deleted file mode 100644
index 46bf44027..000000000
--- a/src/net/eathena/markethandler.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/markethandler.h"
-
-#include "net/eathena/marketrecv.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/shopitem.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-MarketHandler::MarketHandler() :
- Net::MarketHandler()
-{
- marketHandler = this;
- MarketRecv::mBuyDialog = nullptr;
-}
-
-MarketHandler::~MarketHandler()
-{
- marketHandler = nullptr;
-}
-
-void MarketHandler::close() const
-{
- if (packetVersion < 20131218)
- return;
-
- createOutPacket(CMSG_NPC_MARKET_CLOSE);
-}
-
-void MarketHandler::buyItem(const int itemId,
- const ItemTypeT type,
- const ItemColor color A_UNUSED,
- const int amount) const
-{
- if (packetVersion < 20131218)
- return;
- const bool nonStack = type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor;
- int cnt = nonStack ? amount : 1;
- const int amount2 = nonStack ? 1 : amount;
- if (cnt > 100)
- cnt = 100;
-
- createOutPacket(CMSG_NPC_MARKET_BUY);
- outMsg.writeInt16(CAST_S16(4 + 6 * cnt), "len");
- for (int f = 0; f < cnt; f ++)
- {
- outMsg.writeInt16(CAST_S16(itemId), "item id");
- outMsg.writeInt32(CAST_S16(amount2), "amount");
- }
-}
-
-void MarketHandler::buyItems(const STD_VECTOR<ShopItem*> &items) const
-{
- if (packetVersion < 20131218)
- return;
- int cnt = 0;
- const int pairSize = 6;
-
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- const ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- const ItemTypeT type = item->getType();
- if (usedQuantity == 0)
- continue;
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- cnt += item->getUsedQuantity();
- }
- else
- {
- cnt ++;
- }
- }
-
- if (cnt > 100)
- return;
-
- createOutPacket(CMSG_NPC_MARKET_BUY);
- outMsg.writeInt16(CAST_S16(4 + pairSize * cnt), "len");
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- item->increaseQuantity(usedQuantity);
- item->increaseUsedQuantity(-usedQuantity);
- item->update();
- const ItemTypeT type = item->getType();
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- for (int f = 0; f < usedQuantity; f ++)
- {
- outMsg.writeInt16(CAST_S16(item->getId()),
- "item id");
- outMsg.writeInt32(CAST_S16(1), "amount");
- }
- }
- else
- {
- outMsg.writeInt16(CAST_S16(item->getId()), "item id");
- outMsg.writeInt32(CAST_S16(usedQuantity), "amount");
- }
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/markethandler.h b/src/net/eathena/markethandler.h
deleted file mode 100644
index c06018c0b..000000000
--- a/src/net/eathena/markethandler.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MARKETHANDLER_H
-#define NET_EATHENA_MARKETHANDLER_H
-
-#include "net/markethandler.h"
-
-namespace EAthena
-{
-
-class MarketHandler final : public Net::MarketHandler
-{
- public:
- MarketHandler();
-
- A_DELETE_COPY(MarketHandler)
-
- ~MarketHandler();
-
- void close() const override final;
-
- void buyItem(const int itemId,
- const ItemTypeT type,
- const ItemColor color,
- const int amount) const override final;
-
- void buyItems(const STD_VECTOR<ShopItem*> &items) const
- override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MARKETHANDLER_H
diff --git a/src/net/eathena/marketrecv.cpp b/src/net/eathena/marketrecv.cpp
deleted file mode 100644
index 8563c67ca..000000000
--- a/src/net/eathena/marketrecv.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/marketrecv.h"
-
-#include "notifymanager.h"
-
-#include "being/playerinfo.h"
-
-#include "const/resources/currency.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/buydialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/npcrecv.h"
-
-#include "resources/beinginfo.h"
-
-#include "resources/db/npcdb.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace MarketRecv
-{
- BuyDialog *mBuyDialog = nullptr;
-} // namespace MarketRecv
-
-
-void MarketRecv::processMarketOpen(Net::MessageIn &msg)
-{
- const int len = (msg.readInt16("len") - 4) / 13;
-
- const BeingTypeId npcId = NpcRecv::mNpcTypeId;
- std::string currency;
-
- if (npcId != BeingTypeId_zero)
- {
- const BeingInfo *const info = NPCDB::get(npcId);
- if (info != nullptr)
- currency = info->getCurrency();
- else
- currency = DEFAULT_CURRENCY;
- }
- else
- {
- currency = DEFAULT_CURRENCY;
- }
-
- CREATEWIDGETV(mBuyDialog, BuyDialog,
- fromInt(BuyDialog::Market, BeingId),
- currency);
- mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
-
- for (int f = 0; f < len; f ++)
- {
- const int itemId = msg.readInt16("item id");
- const ItemTypeT type = static_cast<ItemTypeT>(msg.readUInt8("type"));
- const int value = msg.readInt32("price");
- const int amount = msg.readInt32("amount");
- msg.readInt16("view");
- const ItemColor color = ItemColor_one;
- mBuyDialog->addItem(itemId, type, color, amount, value);
- }
- mBuyDialog->sort();
-}
-
-void MarketRecv::processMarketBuyAck(Net::MessageIn &msg)
-{
- const int len = (msg.readInt16("len") - 5) / 8;
- const int res = msg.readUInt8("result");
- for (int f = 0; f < len; f ++)
- {
- msg.readInt16("item id");
- msg.readInt16("amount");
- msg.readInt32("price");
- }
- if (res != 0)
- NotifyManager::notify(NotifyTypes::BUY_DONE);
- else
- NotifyManager::notify(NotifyTypes::BUY_FAILED);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/marketrecv.h b/src/net/eathena/marketrecv.h
deleted file mode 100644
index a75491967..000000000
--- a/src/net/eathena/marketrecv.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MARKETRECV_H
-#define NET_EATHENA_MARKETRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-class BuyDialog;
-
-namespace EAthena
-{
- namespace MarketRecv
- {
- extern BuyDialog *mBuyDialog;
-
- void processMarketOpen(Net::MessageIn &msg);
- void processMarketBuyAck(Net::MessageIn &msg);
- } // namespace MarketRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_MARKETRECV_H
diff --git a/src/net/eathena/menu.cpp b/src/net/eathena/menu.cpp
deleted file mode 100644
index 5fb14157e..000000000
--- a/src/net/eathena/menu.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "enums/net/menutype.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
- MenuTypeT menu = MenuType::Unknown;
-} // namespace EAthena
diff --git a/src/net/eathena/menu.h b/src/net/eathena/menu.h
deleted file mode 100644
index 0ed10da79..000000000
--- a/src/net/eathena/menu.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MENU_H
-#define NET_EATHENA_MENU_H
-
-#include "enums/net/menutype.h"
-
-namespace EAthena
-{
- extern MenuTypeT menu;
-} // namespace EAthena
-
-#endif // NET_EATHENA_MENU_H
diff --git a/src/net/eathena/mercenaryhandler.cpp b/src/net/eathena/mercenaryhandler.cpp
deleted file mode 100644
index ffb1b5b2c..000000000
--- a/src/net/eathena/mercenaryhandler.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mercenaryhandler.h"
-
-#include "being/playerinfo.h"
-
-#include "net/serverfeatures.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-MercenaryHandler::MercenaryHandler()
-{
- mercenaryHandler = this;
-}
-
-MercenaryHandler::~MercenaryHandler()
-{
- mercenaryHandler = nullptr;
-}
-
-void MercenaryHandler::fire() const
-{
- createOutPacket(CMSG_MERCENARY_ACTION);
- outMsg.writeInt8(2, "action"); // delete
-}
-
-void MercenaryHandler::moveToMaster() const
-{
- const BeingId id = PlayerInfo::getMercenaryId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_MOVE_TO_MASTER);
- outMsg.writeBeingId(id, "mercenary id");
-}
-
-void MercenaryHandler::move(const int x, const int y) const
-{
- const BeingId id = PlayerInfo::getMercenaryId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_MOVE_TO);
- outMsg.writeBeingId(id, "mercenary id");
- outMsg.writeCoordinates(CAST_U16(x),
- CAST_U16(y),
- 1U, "position");
-}
-
-void MercenaryHandler::attack(const BeingId targetId,
- const Keep keep) const
-{
- const BeingId id = PlayerInfo::getMercenaryId();
- if (id == BeingId_zero)
- return;
- createOutPacket(CMSG_HOMMERC_ATTACK);
- outMsg.writeBeingId(id, "mercenary id");
- outMsg.writeBeingId(targetId, "target id");
- outMsg.writeInt8(CAST_S8(keep == Keep_true ? 1 : 0), "keep");
-}
-
-void MercenaryHandler::talk(const std::string &restrict text) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- if (text.empty())
- return;
- std::string msg = text;
- if (msg.size() > 500)
- msg = msg.substr(0, 500);
- const size_t sz = msg.size();
-
- createOutPacket(CMSG_HOMMERC_TALK);
- outMsg.writeInt16(CAST_S16(sz + 4 + 1), "len");
- outMsg.writeString(msg, CAST_S32(sz), "message");
- outMsg.writeInt8(0, "zero byte");
-}
-
-void MercenaryHandler::emote(const uint8_t emoteId) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_HOMMERC_EMOTE);
- outMsg.writeInt8(emoteId, "emote id");
-}
-
-void MercenaryHandler::setDirection(const unsigned char type) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_HOMMERC_DIRECTION);
- outMsg.writeInt32(0, "pet id");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(type),
- "pet direction");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mercenaryhandler.h b/src/net/eathena/mercenaryhandler.h
deleted file mode 100644
index bd5e06b14..000000000
--- a/src/net/eathena/mercenaryhandler.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MERCENARYHANDLER_H
-#define NET_EATHENA_MERCENARYHANDLER_H
-
-#include "net/mercenaryhandler.h"
-
-namespace EAthena
-{
-class MercenaryHandler final : public Net::MercenaryHandler
-{
- public:
- MercenaryHandler();
-
- A_DELETE_COPY(MercenaryHandler)
-
- ~MercenaryHandler();
-
- void fire() const override final;
-
- void moveToMaster() const override final;
-
- void move(const int x, const int y) const override final;
-
- void attack(const BeingId targetId,
- const Keep keep) const override final;
-
- void talk(const std::string &restrict text) const override final;
-
- void emote(const uint8_t emoteId) const override final;
-
- void setDirection(const unsigned char type) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MERCENARYHANDLER_H
diff --git a/src/net/eathena/mercenaryrecv.cpp b/src/net/eathena/mercenaryrecv.cpp
deleted file mode 100644
index 457045e5b..000000000
--- a/src/net/eathena/mercenaryrecv.cpp
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/mercenaryrecv.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/mercenaryinfo.h"
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/skilldialog.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/sp.h"
-
-#include "utils/checkutils.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-#define setMercStat(sp, stat) \
- case sp: \
- PlayerInfo::setStatBase(stat, \
- val); \
- break;
-
-void MercenaryRecv::processMercenaryUpdate(Net::MessageIn &msg)
-{
- const int sp = msg.readInt16("type");
- const int val = msg.readInt32("value");
- switch (sp)
- {
- setMercStat(Sp::ATK1, Attributes::MERC_ATK);
- setMercStat(Sp::MATK1, Attributes::MERC_MATK);
- setMercStat(Sp::HIT, Attributes::MERC_HIT);
- setMercStat(Sp::CRITICAL, Attributes::MERC_CRIT);
- setMercStat(Sp::DEF1, Attributes::MERC_DEF);
- setMercStat(Sp::MDEF1, Attributes::MERC_MDEF);
- setMercStat(Sp::MERCFLEE, Attributes::MERC_FLEE);
- setMercStat(Sp::ASPD, Attributes::MERC_ATTACK_DELAY);
- setMercStat(Sp::HP, Attributes::MERC_HP);
- setMercStat(Sp::MAXHP, Attributes::MERC_MAX_HP);
- setMercStat(Sp::SP, Attributes::MERC_MP);
- setMercStat(Sp::MAXSP, Attributes::MERC_MAX_MP);
- setMercStat(Sp::MERCKILLS, Attributes::MERC_KILLS);
- setMercStat(Sp::MERCFAITH, Attributes::MERC_FAITH);
- default:
- reportAlways("Unknown mercenary stat %d",
- sp);
- break;
- }
-}
-
-void MercenaryRecv::processMercenaryInfo(Net::MessageIn &msg)
-{
- // +++ need create if need mercenary being and update stats
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- PlayerInfo::setStatBase(Attributes::MERC_ATK,
- msg.readInt16("atk"));
- PlayerInfo::setStatBase(Attributes::MERC_MATK,
- msg.readInt16("matk"));
- PlayerInfo::setStatBase(Attributes::MERC_HIT,
- msg.readInt16("hit"));
- PlayerInfo::setStatBase(Attributes::MERC_CRIT,
- msg.readInt16("crit/10"));
- PlayerInfo::setStatBase(Attributes::MERC_DEF,
- msg.readInt16("def"));
- PlayerInfo::setStatBase(Attributes::MERC_MDEF,
- msg.readInt16("mdef"));
- PlayerInfo::setStatBase(Attributes::MERC_FLEE,
- msg.readInt16("flee"));
- PlayerInfo::setStatBase(Attributes::MERC_ATTACK_DELAY,
- msg.readInt16("attack speed"));
- const std::string name = msg.readString(24, "name");
- const int level = msg.readInt16("level");
- PlayerInfo::setStatBase(Attributes::MERC_LEVEL,
- level);
- PlayerInfo::setStatBase(Attributes::MERC_HP,
- msg.readInt32("hp"));
- PlayerInfo::setStatBase(Attributes::MERC_MAX_HP,
- msg.readInt32("max hp"));
- PlayerInfo::setStatBase(Attributes::MERC_MP,
- msg.readInt32("sp"));
- PlayerInfo::setStatBase(Attributes::MERC_MAX_MP,
- msg.readInt32("max sp"));
- PlayerInfo::setStatBase(Attributes::MERC_EXPIRE,
- msg.readInt32("expire time"));
- PlayerInfo::setStatBase(Attributes::MERC_FAITH,
- msg.readInt16("faith"));
- PlayerInfo::setStatBase(Attributes::MERC_CALLS,
- msg.readInt32("calls"));
- PlayerInfo::setStatBase(Attributes::MERC_KILLS,
- msg.readInt32("kills"));
- const int range = msg.readInt16("attack range");
- PlayerInfo::setStatBase(Attributes::MERC_ATTACK_RANGE,
- range);
- PlayerInfo::updateAttrs();
-
- if ((dstBeing != nullptr) && (localPlayer != nullptr))
- {
- MercenaryInfo *const mercenary = new MercenaryInfo;
- mercenary->id = dstBeing->getId();
- mercenary->name = name;
- mercenary->level = level;
- mercenary->range = range;
- PlayerInfo::setMercenary(mercenary);
- PlayerInfo::setMercenaryBeing(dstBeing);
- }
-}
-
-void MercenaryRecv::processMercenarySkills(Net::MessageIn &msg)
-{
- if (skillDialog != nullptr)
- skillDialog->hideSkills(SkillOwner::Mercenary);
- const int count = (msg.readInt16("len") - 4) / 37;
- for (int f = 0; f < count; f ++)
- {
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Mercenary,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog != nullptr)
- skillDialog->updateModels();
-}
-
-void MercenaryRecv::handleMercenaryMessage(const int cmd)
-{
- PlayerInfo::setMercenary(nullptr);
- if (skillDialog != nullptr)
- {
- skillDialog->hideSkills(SkillOwner::Mercenary);
- skillDialog->updateModels();
- }
-
- switch (cmd)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::MERCENARY_EXPIRED);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::MERCENARY_KILLED);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::MERCENARY_FIRED);
- break;
- case 3:
- NotifyManager::notify(NotifyTypes::MERCENARY_RUN);
- break;
- default:
- NotifyManager::notify(NotifyTypes::MERCENARY_UNKNOWN);
- break;
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/mercenaryrecv.h b/src/net/eathena/mercenaryrecv.h
deleted file mode 100644
index a18314bcd..000000000
--- a/src/net/eathena/mercenaryrecv.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MERCENARYRECV_H
-#define NET_EATHENA_MERCENARYRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace MercenaryRecv
- {
- void handleMercenaryMessage(const int cmd);
- void processMercenaryUpdate(Net::MessageIn &msg);
- void processMercenaryInfo(Net::MessageIn &msg);
- void processMercenarySkills(Net::MessageIn &msg);
- } // namespace MercenaryRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_MERCENARYRECV_H
diff --git a/src/net/eathena/messagein.cpp b/src/net/eathena/messagein.cpp
deleted file mode 100644
index c5cb79fda..000000000
--- a/src/net/eathena/messagein.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/messagein.h"
-
-#include "logger.h"
-
-#include "net/net.h"
-#include "net/packetcounters.h"
-
-#include "utils/cast.h"
-#include "utils/stringutils.h"
-
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#ifndef SDL_BIG_ENDIAN
-#include <SDL_endian.h>
-#endif // SDL_BYTEORDER
-PRAGMA48(GCC diagnostic pop)
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-MessageIn::MessageIn(const char *const data,
- const unsigned int length) :
- Net::MessageIn(data, length)
-{
-}
-
-void MessageIn::postInit(const char *const str,
- const unsigned int version)
-{
- // Read the message ID
- mId = readId();
- mVersion = version;
- IGNOREDEBUGLOG;
- DEBUGLOG2("Receive packet", 0, "MessageIn");
-#ifdef ENABLEDEBUGLOG
- if (mVersion > 0)
- {
- const std::string verStr = toString(mVersion);
- DEBUGLOG2("Version", 0, verStr.c_str());
- }
-#endif // ENABLEDEBUGLOG
-
- readInt16(str);
-}
-
-uint16_t MessageIn::readId() const
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- return value;
-}
-
-int16_t MessageIn::readInt16(const char *const str)
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-uint16_t MessageIn::readUInt16(const char *const str)
-{
- uint16_t value = 0xffU;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- uint16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(uint16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(uint16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readUInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-int32_t MessageIn::readInt32(const char *const str)
-{
- int32_t value = -1;
- if (mPos + 4 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int32_t));
- value = SDL_Swap32(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 4;
- PacketCounters::incInBytes(4);
- return value;
-}
-
-BeingId MessageIn::readBeingId(const char *const str)
-{
- return fromInt(readInt32(str), BeingId);
-}
-
-int64_t MessageIn::readInt64(const char *const str)
-{
- int64_t value = -1;
- if (mPos + 8 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int64_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int64_t));
- value = SDL_Swap64(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int64_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt64: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 8;
- PacketCounters::incInBytes(8);
- return value;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/messagein.h b/src/net/eathena/messagein.h
deleted file mode 100644
index 89fc75d4b..000000000
--- a/src/net/eathena/messagein.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MESSAGEIN_H
-#define NET_EATHENA_MESSAGEIN_H
-
-#include "net/messagein.h"
-
-#include "localconsts.h"
-
-namespace EAthena
-{
-
-/**
- * Used for parsing an incoming message.
- *
- * \ingroup Network
- */
-class MessageIn final : public Net::MessageIn
-{
- public:
- /**
- * Constructor.
- */
- MessageIn(const char *const data,
- const unsigned int length);
-
- A_DELETE_COPY(MessageIn)
-
- void postInit(const char *const str,
- const unsigned int version);
-
- /**< Reads a short. */
- int16_t readInt16(const char *const str) override final;
-
- uint16_t readUInt16(const char *const str) override final;
-
- /**< Reads a long. */
- int32_t readInt32(const char *const str) override final;
-
- int64_t readInt64(const char *const str) override final;
-
- BeingId readBeingId(const char *const str) override final;
-
- uint16_t readId() const;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MESSAGEIN_H
diff --git a/src/net/eathena/messageout.cpp b/src/net/eathena/messageout.cpp
deleted file mode 100644
index 78a242851..000000000
--- a/src/net/eathena/messageout.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/messageout.h"
-
-#include "net/packetcounters.h"
-
-#include "net/eathena/network.h"
-
-#include "logger.h"
-
-#include "debug.h"
-
-#ifndef SDL_BIG_ENDIAN
-#error missing SDL_endian.h
-#endif // SDL_BYTEORDER
-
-namespace EAthena
-{
-
-MessageOut::MessageOut(const int16_t id) :
- Net::MessageOut(id),
- mNetwork(EAthena::Network::instance())
-{
- mNetwork->fixSendBuffer();
- mData = mNetwork->mOutBuffer + CAST_SIZE(mNetwork->mOutSize);
-}
-
-MessageOut::~MessageOut()
-{
- DEBUGLOG2("writeEnd: ", mPos, "position after end of packet");
-}
-
-void MessageOut::expand(const size_t bytes) const
-{
- mNetwork->mOutSize += CAST_U32(bytes);
- PacketCounters::incOutBytes(CAST_S32(bytes));
-}
-
-void MessageOut::writeInt16(const int16_t value, const char *const str)
-{
- expand(2);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap = SDL_Swap16(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incOutBytes(2);
-}
-
-void MessageOut::writeInt32(const int32_t value, const char *const str)
-{
- DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- expand(4);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap = SDL_Swap32(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 4;
- PacketCounters::incOutBytes(4);
-}
-
-void MessageOut::writeInt64(const int64_t value, const char *const str)
-{
- DEBUGLOG2("writeInt64: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- expand(8);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap = SDL_Swap64(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int64_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int64_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 8;
- PacketCounters::incOutBytes(8);
-}
-
-void MessageOut::writeBeingId(const BeingId value, const char *const str)
-{
- writeInt32(toInt(value, int32_t), str);
-}
-
-#define LOBYTE(w) (CAST_U8(w))
-#define HIBYTE(w) (CAST_U8(( \
-CAST_U16(w)) >> 8))
-
-void MessageOut::writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str)
-{
- DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
- CAST_U32(x),
- CAST_U32(y),
- CAST_U32(direction)), mPos, str);
- unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
- + CAST_SIZE(mPos);
- mNetwork->mOutSize += 3;
- mPos += 3;
-
- uint16_t temp = x;
- temp <<= 6;
- data[0] = 0;
- data[1] = 1;
- data[2] = 2;
- data[0] = HIBYTE(temp);
- data[1] = CAST_U8(temp);
- temp = y;
- temp <<= 4;
- data[1] |= HIBYTE(temp);
- data[2] = LOBYTE(temp);
- direction = toServerDirection(direction);
- data[2] |= direction;
- PacketCounters::incOutBytes(3);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/messageout.h b/src/net/eathena/messageout.h
deleted file mode 100644
index 38525bad7..000000000
--- a/src/net/eathena/messageout.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_MESSAGEOUT_H
-#define NET_EATHENA_MESSAGEOUT_H
-
-#include "net/messageout.h"
-
-#include "localconsts.h"
-
-namespace EAthena
-{
-
-class Network;
-
-/**
- * Used for building an outgoing message.
- *
- * \ingroup Network
- */
-class MessageOut final : public Net::MessageOut
-{
- public:
- /**
- * Constructor.
- */
- explicit MessageOut(const int16_t id);
-
- A_DELETE_COPY(MessageOut)
-
- virtual ~MessageOut();
-
- /**< Writes a short. */
- void writeInt16(const int16_t value,
- const char *const str) override final;
-
- /**< Writes a long. */
- void writeInt32(const int32_t value,
- const char *const str) override final;
-
- void writeInt64(const int64_t value,
- const char *const str);
-
- void writeBeingId(const BeingId value,
- const char *const str) override final;
-
- /**
- * Encodes coordinates and direction in 3 bytes.
- */
- void writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str);
-
- void resetPos()
- { mPos = 0; }
-
- private:
- void expand(const size_t size) const override final;
-
- Network *mNetwork;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_MESSAGEOUT_H
diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp
deleted file mode 100644
index 6829c08a6..000000000
--- a/src/net/eathena/network.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/network.h"
-
-#include "net/packetinfo.h"
-
-#include "net/ea/adminrecv.h"
-#include "net/ea/beingrecv.h"
-#include "net/ea/buysellrecv.h"
-#include "net/ea/charserverrecv.h"
-#include "net/ea/chatrecv.h"
-#include "net/ea/gamerecv.h"
-#include "net/ea/inventoryrecv.h"
-#include "net/ea/itemrecv.h"
-#include "net/ea/loginrecv.h"
-#include "net/ea/maprecv.h"
-#include "net/ea/npcrecv.h"
-#include "net/ea/partyrecv.h"
-#include "net/ea/playerrecv.h"
-#include "net/ea/skillrecv.h"
-#include "net/ea/traderecv.h"
-
-#include "net/eathena/adminrecv.h"
-#include "net/eathena/auctionrecv.h"
-#include "net/eathena/bankrecv.h"
-#include "net/eathena/battlegroundrecv.h"
-#include "net/eathena/beingrecv.h"
-#include "net/eathena/buyingstorerecv.h"
-#include "net/eathena/buysellrecv.h"
-#include "net/eathena/cashshoprecv.h"
-#include "net/eathena/charserverrecv.h"
-#include "net/eathena/chatrecv.h"
-#include "net/eathena/elementalrecv.h"
-#include "net/eathena/familyrecv.h"
-#include "net/eathena/friendsrecv.h"
-#include "net/eathena/gamerecv.h"
-#include "net/eathena/generalrecv.h"
-#include "net/eathena/guildrecv.h"
-#include "net/eathena/homunculusrecv.h"
-#include "net/eathena/inventoryrecv.h"
-#include "net/eathena/itemrecv.h"
-#include "net/eathena/loginrecv.h"
-#include "net/eathena/mail2recv.h"
-#include "net/eathena/mailrecv.h"
-#include "net/eathena/maprecv.h"
-#include "net/eathena/marketrecv.h"
-#include "net/eathena/mercenaryrecv.h"
-#include "net/eathena/npcrecv.h"
-#include "net/eathena/partyrecv.h"
-#include "net/eathena/petrecv.h"
-#include "net/eathena/playerrecv.h"
-#include "net/eathena/questrecv.h"
-#include "net/eathena/rouletterecv.h"
-#include "net/eathena/searchstorerecv.h"
-#include "net/eathena/skillrecv.h"
-#include "net/eathena/traderecv.h"
-#include "net/eathena/vendingrecv.h"
-
-#include "net/eathena/messagein.h"
-
-#include "resources/db/networkdb.h"
-
-#include "utils/cast.h"
-#include "utils/checkutils.h"
-#include "utils/foreach.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-extern int evolPacketOffset;
-
-namespace EAthena
-{
-
-static const unsigned int packet_lengths_size = 0xFFFFU;
-static const unsigned int messagesSize = 0xFFFFU;
-Network *Network::mInstance = nullptr;
-
-Network::Network() :
- Ea::Network()
-{
- mInstance = this;
- mPackets = new PacketInfo[messagesSize];
-}
-
-Network::~Network()
-{
- clearHandlers();
- mInstance = nullptr;
-}
-
-void Network::registerHandlers()
-{
-#include "net/eathena/recvpackets.inc"
- RECVPACKETS_VOID
-}
-
-void Network::registerFakeHandlers()
-{
- const NetworkInPacketInfos &packets = NetworkDb::getFakePackets();
- FOR_EACH (NetworkInPacketInfosIter, it, packets)
- {
- const size_t id = (*it).first;
- if (id >= packet_lengths_size)
- {
- reportAlways("Wrong fake packet id %d", CAST_S32(id));
- continue;
- }
- if (mPackets[id].len != 0 ||
- mPackets[id].func != nullptr ||
- mPackets[id].version != 0)
- {
- continue;
- }
- const int32_t len = (*it).second;
- logger->log("Add fake packet: %d, %d",
- CAST_S32(id),
- len);
- mPackets[id].name = "fake";
- mPackets[id].len = len;
- mPackets[id].func = nullptr;
- mPackets[id].version = 0;
- }
-
- const NetworkRemovePacketInfos &removePackets =
- NetworkDb::getRemovePackets();
- FOR_EACH (NetworkRemovePacketInfosIter, it, removePackets)
- {
- const size_t id = *it;
- if (id >= packet_lengths_size)
- {
- reportAlways("Wrong remove packet id %d", CAST_S32(id));
- continue;
- }
- if (mPackets[id].len == 0 &&
- mPackets[id].func == nullptr &&
- mPackets[id].version == 0)
- {
- continue;
- }
- logger->log("Remove packet: %d",
- CAST_S32(id));
- mPackets[id].name = "";
- mPackets[id].len = 0;
- mPackets[id].func = nullptr;
- mPackets[id].version = 0;
- }
-}
-
-void Network::clearHandlers()
-{
- for (size_t f = 0; f < packet_lengths_size; f ++)
- {
- mPackets[f].name = "";
- mPackets[f].len = 0;
- mPackets[f].func = nullptr;
- mPackets[f].version = 0;
- }
-}
-
-void Network::dispatchMessages()
-{
- mPauseDispatch = false;
- while (messageReady())
- {
- SDL_mutexP(mMutexIn);
- const unsigned int msgId = readWord(0);
- int len = -1;
- if (msgId < packet_lengths_size)
- len = mPackets[msgId].len;
- if (len == -1)
- len = readWord(2);
-
- MessageIn msg(mInBuffer, len);
- unsigned int ver = mPackets[msgId].version;
- if (ver == 0)
- ver = packetVersion;
- msg.postInit(mPackets[msgId].name, ver);
- SDL_mutexV(mMutexIn);
-
- if (len == 0)
- {
- // need copy data for safty
- std::string str = strprintf(
- "Wrong packet %u 0x%x received. Exiting.",
- msgId, msgId);
- logger->safeError(str);
- }
-
- if (msgId < messagesSize)
- {
- const PacketFuncPtr func = mPackets[msgId].func;
- if (func != nullptr)
- func(msg);
- else
- logger->log("Unhandled packet: %u 0x%x", msgId, msgId);
- }
-
- skip(len);
- if (mPauseDispatch)
- break;
- }
-}
-
-bool Network::messageReady()
-{
- int len = -1;
-
- SDL_mutexP(mMutexIn);
- if (mInSize >= 2)
- {
- const int msgId = readWord(0);
- if (msgId >= 0 &&
- CAST_U32(msgId) < packet_lengths_size)
- {
- len = mPackets[msgId].len;
- }
-
- if (len == -1 && mInSize > 4)
- len = readWord(2);
- }
-
- const bool ret = (mInSize >= CAST_U32(len));
- SDL_mutexV(mMutexIn);
-
- return ret;
-}
-
-Network *Network::instance()
-{
- return mInstance;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/network.h b/src/net/eathena/network.h
deleted file mode 100644
index acd377be3..000000000
--- a/src/net/eathena/network.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_NETWORK_H
-#define NET_EATHENA_NETWORK_H
-
-#include "net/ea/network.h"
-
-/**
- * Protocol version, reported to the eAthena char and mapserver who can adjust
- * the protocol accordingly.
- */
-#define CLIENT_PROTOCOL_VERSION 23
-
-namespace EAthena
-{
-
-class Network final : public Ea::Network
-{
- public:
- Network();
-
- A_DELETE_COPY(Network)
-
- ~Network();
-
- void clearHandlers();
-
- bool messageReady();
-
- void dispatchMessages();
-
- void registerHandlers();
-
- void registerFakeHandlers();
-
- static Network *mInstance;
-
- protected:
- friend class MessageOut;
-
- static Network *instance() A_WARN_UNUSED;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_NETWORK_H
diff --git a/src/net/eathena/npchandler.cpp b/src/net/eathena/npchandler.cpp
deleted file mode 100644
index 50d076ec4..000000000
--- a/src/net/eathena/npchandler.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/npchandler.h"
-
-#include "being/localplayer.h"
-
-#include "const/net/inventory.h"
-
-#include "gui/windows/npcdialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/messagein.h"
-
-#include "net/ea/npcrecv.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/npcrecv.h"
-
-#include "net/eathena/protocolout.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/shopitem.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-NpcHandler::NpcHandler() :
- Ea::NpcHandler()
-{
- npcHandler = this;
-}
-
-NpcHandler::~NpcHandler()
-{
- npcHandler = nullptr;
-}
-
-void NpcHandler::talk(const Being *const being) const
-{
- if (being == nullptr)
- return;
- createOutPacket(CMSG_NPC_TALK);
- outMsg.writeBeingId(being->getId(), "npc id");
- outMsg.writeInt8(0, "unused");
- EAthena::NpcRecv::mNpcTypeId = being->getSubType();
-}
-
-void NpcHandler::nextDialog(const BeingId npcId) const
-{
- createOutPacket(CMSG_NPC_NEXT_REQUEST);
- outMsg.writeBeingId(npcId, "npc id");
-}
-
-void NpcHandler::closeDialog(const BeingId npcId)
-{
- createOutPacket(CMSG_NPC_CLOSE);
- outMsg.writeBeingId(npcId, "npc id");
-
- const NpcDialogs::iterator it = NpcDialog::mNpcDialogs.find(npcId);
- if (it != NpcDialog::mNpcDialogs.end())
- {
- NpcDialog *const dialog = (*it).second;
- if (dialog != nullptr)
- dialog->close();
- if (dialog == Ea::NpcRecv::mDialog)
- Ea::NpcRecv::mDialog = nullptr;
- NpcDialog::mNpcDialogs.erase(it);
- }
-}
-
-void NpcHandler::listInput(const BeingId npcId,
- const unsigned char value) const
-{
- createOutPacket(CMSG_NPC_LIST_CHOICE);
- outMsg.writeBeingId(npcId, "npc id");
- outMsg.writeInt8(value, "value");
-}
-
-void NpcHandler::integerInput(const BeingId npcId,
- const int value) const
-{
- createOutPacket(CMSG_NPC_INT_RESPONSE);
- outMsg.writeBeingId(npcId, "npc id");
- outMsg.writeInt32(value, "value");
-}
-
-void NpcHandler::stringInput(const BeingId npcId,
- const std::string &value) const
-{
- createOutPacket(CMSG_NPC_STR_RESPONSE);
- if (packetVersion >= 20151029)
- {
- outMsg.writeInt16(CAST_S16(value.length() + 8), "len");
- outMsg.writeBeingId(npcId, "npc id");
- outMsg.writeString(value, CAST_S32(value.length()), "value");
- }
- else
- {
- outMsg.writeInt16(CAST_S16(value.length() + 9), "len");
- outMsg.writeBeingId(npcId, "npc id");
- outMsg.writeString(value, CAST_S32(value.length()), "value");
- outMsg.writeInt8(0, "null byte");
- }
-}
-
-void NpcHandler::buy(const Being *const being) const
-{
- if (being == nullptr)
- return;
- createOutPacket(CMSG_NPC_BUY_SELL_REQUEST);
- outMsg.writeBeingId(being->getId(), "npc id");
- outMsg.writeInt8(0, "action");
- EAthena::NpcRecv::mNpcTypeId = being->getSubType();
-}
-
-void NpcHandler::buy(const BeingId beingId) const
-{
- createOutPacket(CMSG_NPC_BUY_SELL_REQUEST);
- outMsg.writeBeingId(beingId, "npc id");
- outMsg.writeInt8(0, "action");
- EAthena::NpcRecv::mNpcTypeId = BeingTypeId_zero;
-}
-
-void NpcHandler::sell(const BeingId beingId) const
-{
- createOutPacket(CMSG_NPC_BUY_SELL_REQUEST);
- outMsg.writeBeingId(beingId, "npc id");
- outMsg.writeInt8(1, "action");
-}
-
-void NpcHandler::buyItem(const BeingId beingId A_UNUSED,
- const int itemId,
- const ItemColor color A_UNUSED,
- const int amount) const
-{
- createOutPacket(CMSG_NPC_BUY_REQUEST);
- outMsg.writeInt16(8, "len");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- outMsg.writeInt16(CAST_S16(itemId), "item id");
-}
-
-void NpcHandler::buyItems(STD_VECTOR<ShopItem*> &items) const
-{
- int cnt = 0;
- const int pairSize = 4;
-
- FOR_EACH (STD_VECTOR<ShopItem*>::iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- const ItemTypeT type = item->getType();
- if (usedQuantity == 0)
- continue;
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- cnt += item->getUsedQuantity();
- }
- else
- {
- cnt ++;
- }
- }
-
- if (cnt > 100)
- return;
-
- createOutPacket(CMSG_NPC_BUY_REQUEST);
- outMsg.writeInt16(CAST_S16(4 + pairSize * cnt), "len");
- FOR_EACH (STD_VECTOR<ShopItem*>::iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- item->increaseUsedQuantity(-usedQuantity);
- item->update();
- const ItemTypeT type = item->getType();
- if (type == ItemType::Weapon ||
- type == ItemType::Armor ||
- type == ItemType::PetEgg ||
- type == ItemType::PetArmor)
- {
- for (int f = 0; f < usedQuantity; f ++)
- {
- outMsg.writeInt16(CAST_S16(1), "amount");
- outMsg.writeInt16(CAST_S16(item->getId()),
- "item id");
- }
- }
- else
- {
- outMsg.writeInt16(CAST_S16(usedQuantity), "amount");
- outMsg.writeInt16(CAST_S16(item->getId()), "item id");
- }
- }
-}
-
-void NpcHandler::sellItem(const BeingId beingId A_UNUSED,
- const int itemId, const int amount) const
-{
- createOutPacket(CMSG_NPC_SELL_REQUEST);
- outMsg.writeInt16(8, "len");
- outMsg.writeInt16(CAST_S16(itemId + INVENTORY_OFFSET),
- "item index");
- outMsg.writeInt16(CAST_S16(amount), "amount");
-}
-
-void NpcHandler::sellItems(STD_VECTOR<ShopItem*> &items) const
-{
- const int pairSize = 4;
- int cnt = 0;
-
- FOR_EACH (STD_VECTOR<ShopItem*>::iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- cnt ++;
- }
-
- createOutPacket(CMSG_NPC_SELL_REQUEST);
- outMsg.writeInt16(CAST_S16(4 + pairSize * cnt), "len");
- FOR_EACH (STD_VECTOR<ShopItem*>::iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- item->increaseUsedQuantity(-usedQuantity);
- item->update();
- outMsg.writeInt16(CAST_S16(
- item->getCurrentInvIndex() + INVENTORY_OFFSET),
- "item index");
- outMsg.writeInt16(CAST_S16(usedQuantity), "amount");
- }
-}
-
-void NpcHandler::completeProgressBar() const
-{
- createOutPacket(CMSG_NPC_COMPLETE_PROGRESS_BAR);
-}
-
-void NpcHandler::produceMix(const int nameId,
- const int materialId1,
- const int materialId2,
- const int materialId3) const
-{
- createOutPacket(CMSG_NPC_PRODUCE_MIX);
- outMsg.writeInt16(CAST_S16(nameId), "name id");
- outMsg.writeInt16(CAST_S16(materialId1), "material 1");
- outMsg.writeInt16(CAST_S16(materialId2), "material 2");
- outMsg.writeInt16(CAST_S16(materialId3), "material 3");
-}
-
-void NpcHandler::cooking(const CookingTypeT type,
- const int nameId) const
-{
- createOutPacket(CMSG_NPC_COOKING);
- outMsg.writeInt16(CAST_S16(type), "type");
- outMsg.writeInt16(CAST_S16(nameId), "name id");
-}
-
-void NpcHandler::repair(const int index) const
-{
- createOutPacket(CMSG_NPC_REPAIR);
- outMsg.writeInt16(CAST_S16(index), "index");
-}
-
-void NpcHandler::refine(const int index) const
-{
- createOutPacket(CMSG_NPC_REFINE);
- outMsg.writeInt32(index, "index");
-}
-
-void NpcHandler::identify(const int index) const
-{
- createOutPacket(CMSG_NPC_IDENTIFY);
- outMsg.writeInt16(CAST_S16(index), "index");
-}
-
-void NpcHandler::selectArrow(const int nameId) const
-{
- createOutPacket(CMSG_NPC_SELECT_ARROW);
- outMsg.writeInt16(CAST_S16(nameId), "name id");
-}
-
-void NpcHandler::selectAutoSpell(const int skillId) const
-{
- createOutPacket(CMSG_NPC_SELECT_AUTO_SPELL);
- outMsg.writeInt32(CAST_S16(skillId), "skill id");
-}
-
-BeingId NpcHandler::getNpc(Net::MessageIn &msg,
- const NpcActionT action)
-{
- const BeingId npcId = msg.readBeingId("npc id");
-
- const NpcDialogs::const_iterator diag = NpcDialog::mNpcDialogs.find(npcId);
- Ea::NpcRecv::mDialog = nullptr;
-
- if (diag == NpcDialog::mNpcDialogs.end())
- {
- // Empty dialogs don't help
- if (action == NpcAction::Close)
- {
- closeDialog(npcId);
- return npcId;
- }
- else if (action == NpcAction::Next)
- {
- nextDialog(npcId);
- return npcId;
- }
- else
- {
- CREATEWIDGETV(Ea::NpcRecv::mDialog, NpcDialog, npcId);
- Ea::NpcRecv::mDialog->saveCamera();
- if (localPlayer != nullptr)
- localPlayer->stopWalking(false);
- NpcDialog::mNpcDialogs[npcId] = Ea::NpcRecv::mDialog;
- }
- }
- else
- {
- NpcDialog *const dialog = diag->second;
- if (Ea::NpcRecv::mDialog != nullptr && Ea::NpcRecv::mDialog != dialog)
- Ea::NpcRecv::mDialog->restoreCamera();
- Ea::NpcRecv::mDialog = dialog;
- if (Ea::NpcRecv::mDialog != nullptr)
- Ea::NpcRecv::mDialog->saveCamera();
- }
- return npcId;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/npchandler.h b/src/net/eathena/npchandler.h
deleted file mode 100644
index e5177d7c9..000000000
--- a/src/net/eathena/npchandler.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_NPCHANDLER_H
-#define NET_EATHENA_NPCHANDLER_H
-
-#include "net/ea/npchandler.h"
-
-namespace EAthena
-{
-
-class NpcHandler final : public Ea::NpcHandler
-{
- public:
- NpcHandler();
-
- A_DELETE_COPY(NpcHandler)
-
- ~NpcHandler();
-
- void talk(const Being *const being) const override final;
-
- void nextDialog(const BeingId npcId) const override final;
-
- void closeDialog(const BeingId npcId) override final;
-
- void listInput(const BeingId npcId,
- const unsigned char value) const override final;
-
- void integerInput(const BeingId npcId,
- const int value) const override final;
-
- void stringInput(const BeingId npcId,
- const std::string &value) const override final;
-
- void buy(const Being *const being) const override final;
-
- void buy(const BeingId beingId) const override final;
-
- void sell(const BeingId beingId) const override final;
-
- void buyItem(const BeingId beingId,
- const int itemId,
- const ItemColor color,
- const int amount) const override final;
-
- void buyItems(STD_VECTOR<ShopItem*> &items) const
- override final;
-
- void sellItem(const BeingId beingId,
- const int itemId,
- const int amount) const override final;
-
- void sellItems(STD_VECTOR<ShopItem*> &items) const override final;
-
- void completeProgressBar() const override final;
-
- void produceMix(const int nameId,
- const int materialId1,
- const int materialId2,
- const int materialId3) const override final;
-
- void cooking(const CookingTypeT type,
- const int nameId) const override final;
-
- void repair(const int index) const override final;
-
- void refine(const int index) const override final;
-
- BeingId getNpc(Net::MessageIn &msg,
- const NpcActionT action) override final;
-
- void identify(const int index) const override final;
-
- void selectArrow(const int nameId) const override final;
-
- void selectAutoSpell(const int skillId) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_NPCHANDLER_H
diff --git a/src/net/eathena/npcrecv.cpp b/src/net/eathena/npcrecv.cpp
deleted file mode 100644
index 535e57d7c..000000000
--- a/src/net/eathena/npcrecv.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/npcrecv.h"
-
-#include "actormanager.h"
-
-#include "being/being.h"
-
-#include "gui/windows/cutinwindow.h"
-#include "gui/windows/npcdialog.h"
-
-#include "net/messagein.h"
-#include "net/npchandler.h"
-
-#include "net/ea/npcrecv.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace NpcRecv
-{
- BeingTypeId mNpcTypeId = BeingTypeId_zero;
-} // namespace NpcRecv
-
-void NpcRecv::processNpcCutin(Net::MessageIn &msg)
-{
- Ea::NpcRecv::mRequestLang = false;
- if (cutInWindow == nullptr)
- {
- msg.readString(64, "image name");
- msg.readUInt8("type");
- return;
- }
- const std::string image = msg.readString(64, "image name");
- const CutInT cutin = static_cast<CutInT>(msg.readUInt8("type"));
- if (cutInWindow != nullptr)
- cutInWindow->show(image, cutin);
-}
-
-void NpcRecv::processNpcViewPoint(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- Ea::NpcRecv::mRequestLang = false;
- // +++ probably need add nav point and start moving to it
- msg.readInt32("npc id");
- msg.readInt32("type"); // 0 display for 15 sec,
- // 1 display until teleport,
- // 2 remove
- msg.readInt32("x");
- msg.readInt32("y");
- msg.readUInt8("number"); // can be used for scripts
- msg.readInt32("color");
-}
-
-void NpcRecv::processNpcShowProgressBar(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- Ea::NpcRecv::mRequestLang = false;
- // +++ probably need show progress bar in npc dialog
- msg.readInt32("color");
- msg.readInt32("seconds");
-}
-
-void NpcRecv::processNpcCloseTimeout(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- Ea::NpcRecv::mRequestLang = false;
- // this packet send after npc closed by timeout.
- msg.readInt32("npc id");
-}
-
-void NpcRecv::processArea(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- if (len < 12)
- return;
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("npc id"));
- const int area = msg.readInt32("area size");
- if (dstBeing != nullptr)
- dstBeing->setAreaSize(area);
-}
-
-void NpcRecv::processShowDigit(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readUInt8("type");
- msg.readInt32("value");
-}
-
-void NpcRecv::processProgressBarAbort(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-}
-
-void NpcRecv::processNpcSkin(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- npcHandler->getNpc(msg, NpcAction::Other);
- if (Ea::NpcRecv::mDialog != nullptr)
- {
- const std::string skin = msg.readString(len - 8, "skin");
- Ea::NpcRecv::mDialog->setSkin(skin);
- }
- else
- {
- msg.readString(len - 8, "skin");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/npcrecv.h b/src/net/eathena/npcrecv.h
deleted file mode 100644
index c89d5f2f0..000000000
--- a/src/net/eathena/npcrecv.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_NPCRECV_H
-#define NET_EATHENA_NPCRECV_H
-
-#include "enums/simpletypes/beingtypeid.h"
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace NpcRecv
- {
- extern BeingTypeId mNpcTypeId;
-
- void processNpcCutin(Net::MessageIn &msg);
- void processNpcViewPoint(Net::MessageIn &msg);
- void processNpcShowProgressBar(Net::MessageIn &msg);
- void processNpcCloseTimeout(Net::MessageIn &msg);
- void processArea(Net::MessageIn &msg);
- void processShowDigit(Net::MessageIn &msg);
- void processProgressBarAbort(Net::MessageIn &msg);
- void processNpcSkin(Net::MessageIn &msg);
- } // namespace NpcRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_NPCRECV_H
diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc
deleted file mode 100644
index af497c07c..000000000
--- a/src/net/eathena/packetsin.inc
+++ /dev/null
@@ -1,972 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-// very outdated packets
-packet(SMSG_MAP_LOGIN_SUCCESS, 0x0073, 11, &GameRecv::processMapLogin, 1);
-packet(SMSG_BEING_FAKE_NAME, 0x0078, 54, &BeingRecv::processBeingFakeName, 1);
-packet(SMSG_BEING_SPAWN, 0x0079, 53, &BeingRecv::processBeingSpawn, 1);
-packet(SMSG_BEING_MOVE, 0x007b, 60, &BeingRecv::processBeingMove, 1);
-packet(SMSG_BEING_SPAWN_OUTDATED, 0x007c, 41, nullptr, 1);
-packet(SMSG_WHISPER, 0x0097, -1, &ChatRecv::processWhisper, 1);
-packet(SMSG_WHISPER_RESPONSE, 0x0098, 3, &ChatRecv::processWhisperResponse, 1);
-packet(SMSG_ITEM_DROPPED, 0x009e, 17, &ItemRecv::processItemDropped, 1);
-packet(SMSG_PLAYER_INVENTORY_ADD, 0x00a0, 23, &InventoryRecv::processPlayerInventoryAdd, 1);
-packet(SMSG_PLAYER_INVENTORY, 0x00a3, -1, &InventoryRecv::processPlayerInventory, 1);
-packet(SMSG_PLAYER_EQUIPMENT, 0x00a4, -1, &InventoryRecv::processPlayerEquipment, 1);
-packet(SMSG_PLAYER_STORAGE_ITEMS, 0x00a5, -1, &InventoryRecv::processPlayerStorage, 1);
-packet(SMSG_PLAYER_STORAGE_EQUIP, 0x00a6, -1, &InventoryRecv::processPlayerStorageEquip, 1);
-packet(SMSG_PLAYER_EQUIP, 0x00aa, 7, &InventoryRecv::processPlayerEquip, 1);
-packet(SMSG_PLAYER_UNEQUIP, 0x00ac, 7, &InventoryRecv::processPlayerUnEquip, 1);
-packet(SMSG_BEING_CHANGE_LOOKS_OUTDATED, 0x00c3, 8, nullptr, 1);
-packet(SMSG_TRADE_REQUEST, 0x00e5, 26, &TradeRecv::processTradeRequest, 1);
-packet(SMSG_TRADE_ITEM_ADD, 0x00e9, 19, &TradeRecv::processTradeItemAdd, 1);
-packet(SMSG_TRADE_RESPONSE_OUTDATED, 0x00e7, 3, nullptr, 0);
-packet(SMSG_PLAYER_STORAGE_ADD, 0x00f4, 21, &InventoryRecv::processPlayerStorageAdd, 1);
-packet(SMSG_PARTY_INVITED, 0x00fe, 30, &PartyRecv::processPartyInvited, 1);
-packet(SMSG_PLAYER_STATUS_CHANGE, 0x0119, 13, &BeingRecv::processPlayerStatusChange, 1);
-packet(SMSG_SKILL_DAMAGE, 0x0114, 31, &BeingRecv::processSkillDamage, 1);
-packet(SMSG_SKILL_ENTRY, 0x011f, 16, &BeingRecv::processSkillEntry, 1);
-packet(SMSG_PLAYER_CART_EQUIP, 0x0122, -1, &InventoryRecv::processPlayerCartEquip, 1);
-packet(SMSG_PLAYER_CART_ITEMS, 0x0123, -1, &InventoryRecv::processPlayerCartItems, 1);
-packet(SMSG_PLAYER_CART_ADD, 0x0124, 21, &InventoryRecv::processPlayerCartAdd, 1);
-packet(SMSG_VENDING_ITEMS_LIST, 0x0133, -1, &VendingRecv::processItemsList, 1);
-packet(SMSG_VENDING_OPEN, 0x0136, -1, &VendingRecv::processOpen, 1);
-packet(SMSG_SKILL_CASTING, 0x013e, 24, &BeingRecv::processSkillCasting, 1);
-packet(SMSG_BEING_STATUS_CHANGE, 0x0196, 9, &BeingRecv::processBeingStatusChange, 1);
-packet(SMSG_QUEST_LIST, 0x02b1, -1, &QuestRecv::processAddQuests, 1);
-packet(SMSG_BEING_VIEW_EQUIPMENT, 0x02d7, -1, &BeingRecv::processBeingViewEquipment, 1);
-packet(SMSG_PARTY_SETTINGS, 0x0101, 6, &PartyRecv::processPartySettings, 1);
-packet(SMSG_PLAYER_HP, 0x0106, 10, &BeingRecv::processBeingHp, 1);
-packet(SMSG_PET_STATUS, 0x01a2, 35, &PetRecv::processPetStatus, 1);
-
-// fake packets for add packet name
-packet(SMSG_SELECT_CART, 0x0000, 0, nullptr, 0);
-packet(CMSG_NAVIGATE_TO, 0x0000, 0, nullptr, 0);
-packet(SMSG_MERGE_ITEM, 0x0000, 0, nullptr, 0);
-packet(SMSG_ACK_MERGE_ITEMS, 0x0000, 0, nullptr, 0);
-packet(SMSG_RANKS_LIST, 0x0000, 0, nullptr, 0);
-packet(SMSG_CHAR_CHARACTERS, 0x0000, 0, nullptr, 0);
-
-// login server, unknown version
-packet(SMSG_LOGIN_DATA, 0x0069, -1, &LoginRecv::processLoginData, 0);
-packet(SMSG_LOGIN_CODING_KEY, 0x01dc, -1, &LoginRecv::processCondingKey, 0);
-packet(SMSG_LOGIN_ERROR, 0x006a, 23, &Ea::LoginRecv::processLoginError, 0);
-
-// char server, unknown version
-packet(SMSG_CHAR_CHANGE_SLOT, 0x08d5, -1, &CharServerRecv::processCharChangeSlot, 0);
-packet(SMSG_CHAR_CHECK_RENAME, 0x028e, 4, &CharServerRecv::processCharCheckRename, 0);
-packet(SMSG_CHAR_CREATE_FAILED, 0x006e, 3, &Ea::CharServerRecv::processCharCreateFailed, 0);
-packet(SMSG_CHAR_CREATE_SUCCEEDED, 0x006d, 149, &CharServerRecv::processCharCreate, 0);
-packet(SMSG_CHAR_DELETE2_ACCEPT_ACTUAL_ACK, 0x082a, 10, &CharServerRecv::processCharDelete2AcceptActual, 0);
-packet(SMSG_CHAR_DELETE2_ACK, 0x0828, 14, &CharServerRecv::processCharDelete2Ack, 0);
-packet(SMSG_CHAR_DELETE2_CANCEL_ACK, 0x082c, 10, &CharServerRecv::processCharDelete2CancelAck, 0);
-packet(SMSG_CHAR_DELETE_FAILED, 0x0070, 3, &CharServerRecv::processCharDeleteFailed, 0);
-packet(SMSG_CHAR_DELETE_SUCCEEDED, 0x006f, 2, &Ea::CharServerRecv::processCharDelete, 0);
-packet(SMSG_CHAR_LOGIN, 0x006b, -1, &CharServerRecv::processCharLogin, 0);
-packet(SMSG_CHAR_LOGIN2, 0x082d, -1, &CharServerRecv::processCharLogin2, 0);
-packet(SMSG_CHAR_LOGIN_ERROR, 0x006c, 3, &Ea::CharServerRecv::processCharLoginError, 0);
-packet(SMSG_CHAR_MAP_INFO, 0x0071, 28, &CharServerRecv::processCharMapInfo, 0);
-packet(SMSG_CHAR_PINCODE_STATUS, 0x08b9, 12, &CharServerRecv::processPincodeStatus, 0);
-packet(SMSG_CHAR_RENAME, 0x0290, 4, &CharServerRecv::processCharRename, 0);
-packet(SMSG_MAP_NOT_FOUND, 0x0840, -1, &GeneralRecv::processMapNotFound, 0);
-
-// map server, unknown versions
-packet(SMSG_ADMIN_GET_LOGIN_ACK, 0x01e0, 30, &AdminRecv::processAdminGetLoginAck, 0);
-packet(SMSG_ADMIN_KICK_ACK, 0x00cd, 3, &Ea::AdminRecv::processKickAck, 0);
-packet(SMSG_ADMIN_SET_TILE_TYPE, 0x0192, 24, &AdminRecv::processSetTileType, 0);
-packet(SMSG_BATTLE_BEGINS, 0x08df, 50, &BattleGroundRecv::processBattleBegins, 0);
-packet(SMSG_BATTLE_JOINED, 0x08d9, 30, &BattleGroundRecv::processBattleJoined, 0);
-packet(SMSG_BATTLE_NOTICE_DELETE, 0x08db, 27, &BattleGroundRecv::processBattleNoticeDelete, 0);
-packet(SMSG_BATTLE_QUEUE_ACK, 0x08d8, 27, &BattleGroundRecv::processBattleQueueAck, 0);
-packet(SMSG_BEING_ACTION, 0x008a, 29, &Ea::BeingRecv::processBeingAction, 0);
-packet(SMSG_BEING_CHANGE_DIRECTION, 0x009c, 9, &BeingRecv::processBeingChangeDirection, 0);
-packet(SMSG_BEING_CHAT, 0x008d, -1, &ChatRecv::processBeingChat, 0);
-packet(SMSG_BEING_EMOTION, 0x00c0, 7, &Ea::BeingRecv::processBeingEmotion, 0);
-packet(SMSG_BEING_MOVE2, 0x0086, 16, &BeingRecv::processBeingMove2, 0);
-packet(SMSG_BEING_NAME_RESPONSE, 0x0095, 30, &Ea::BeingRecv::processNameResponse, 0);
-packet(SMSG_BEING_REMOVE, 0x0080, 7, &Ea::BeingRecv::processBeingRemove, 0);
-packet(SMSG_BEING_REMOVE_SKILL, 0x0120, 6, &BeingRecv::processBeingRemoveSkill, 0);
-packet(SMSG_BEING_RESURRECT, 0x0148, 8, &BeingRecv::processBeingResurrect, 0);
-packet(SMSG_BEING_SELFEFFECT, 0x019b, 10, &BeingRecv::processBeingSelfEffect, 0);
-packet(SMSG_BEING_SLIDE, 0x01ff, 10, &BeingRecv::processBeingSlide, 0);
-packet(SMSG_BEING_SOUND_EFFECT, 0x01d3, 35, &BeingRecv::processBeingSoundEffect, 0);
-packet(SMSG_BEING_SPECIAL_EFFECT, 0x01f3, 10, &BeingRecv::processBeingSpecialEffect, 0);
-packet(SMSG_BEING_STAT_UPDATE_1, 0x01ab, 12, &BeingRecv::processBeingStatUpdate1, 0);
-packet(SMSG_BIND_ITEM, 0x02d3, 4, &InventoryRecv::processBindItem, 0);
-packet(SMSG_BLADE_STOP, 0x01d1, 14, &BeingRecv::processBladeStop, 0);
-packet(SMSG_CART_INFO, 0x0121, 14, &InventoryRecv::processCartInfo, 0);
-packet(SMSG_CART_REMOVE, 0x012b, 2, &InventoryRecv::processCartRemove, 0);
-packet(SMSG_CHANGE_MAP_SERVER, 0x0092, 28, &CharServerRecv::processChangeMapServer, 0);
-packet(SMSG_CHAR_BAN_CHAR_LIST, 0x020d, -1, &CharServerRecv::processCharBanCharList, 0);
-packet(SMSG_CHAR_SWITCH_RESPONSE, 0x00b3, 3, &Ea::GameRecv::processCharSwitchResponse, 0);
-packet(SMSG_CHAT_DISPLAY, 0x00d7, -1, &ChatRecv::processChatDisplay, 0);
-packet(SMSG_CHAT_IGNORE_LIST, 0x00d4, -1, &ChatRecv::processChatIgnoreList, 0);
-packet(SMSG_CHAT_ROOM_ADD_MEMBER, 0x00dc, 28, &ChatRecv::processChatRoomAddMember, 0);
-packet(SMSG_CHAT_ROOM_CREATE_ACK, 0x00d6, 3, &ChatRecv::processChatRoomCreateAck, 0);
-packet(SMSG_CHAT_ROOM_DESTROY, 0x00d8, 6, &ChatRecv::processChatRoomDestroy, 0);
-packet(SMSG_CHAT_ROOM_JOIN_ACK, 0x00db, -1, &ChatRecv::processChatRoomJoinAck, 0);
-packet(SMSG_CHAT_ROOM_JOIN_FAILED, 0x00da, 3, &ChatRecv::processChatRoomJoinFailed, 0);
-packet(SMSG_CHAT_ROOM_LEAVE, 0x00dd, 29, &ChatRecv::processChatRoomLeave, 0);
-packet(SMSG_CHAT_ROOM_ROLE_CHANGE, 0x00e1, 30, &ChatRecv::processChatRoomRoleChange, 0);
-packet(SMSG_CHAT_ROOM_SETTINGS, 0x00df, -1, &ChatRecv::processChatRoomSettings, 0);
-packet(SMSG_CHAT_SILENCE, 0x014b, 27, &ChatRecv::processChatSilence, 0);
-packet(SMSG_CHAT_TALKIE_BOX, 0x0191, 86, &ChatRecv::processChatTalkieBox, 0);
-packet(SMSG_CLASS_CHANGE, 0x01b0, 11, &BeingRecv::processClassChange, 0);
-packet(SMSG_COMBO_DELAY, 0x01d2, 10, &BeingRecv::processComboDelay, 0);
-packet(SMSG_CONNECTION_PROBLEM, 0x0081, 3, &GeneralRecv::processConnectionProblem, 0);
-packet(SMSG_FAMILY_ASK_FOR_CHILD, 0x01f6, 34, &FamilyRecv::processAskForChild, 0);
-packet(SMSG_FAMILY_CALL_PARTNER, 0x01e6, 26, &FamilyRecv::processCallPartner, 0);
-packet(SMSG_FAMILY_DIVORCED, 0x0205, 26, &FamilyRecv::processDivorced, 0);
-packet(SMSG_FRIENDS_DELETE_PLAYER, 0x020a, 10, &FriendsRecv::processDeletePlayer, 0);
-packet(SMSG_FRIENDS_LIST, 0x0201, -1, &FriendsRecv::processFriendsList, 0);
-packet(SMSG_FRIENDS_PLAYER_ONLINE, 0x0206, 11, &FriendsRecv::processPlayerOnline, 0);
-packet(SMSG_FRIENDS_REQUEST, 0x0207, 34, &FriendsRecv::processRequest, 0);
-packet(SMSG_FRIENDS_REQUEST_ACK, 0x0209, 36, &FriendsRecv::processRequestAck, 0);
-packet(SMSG_GM_CHAT, 0x009a, -1, &ChatRecv::processGmChat, 0);
-packet(SMSG_GM_CHAT2, 0x01c3, -1, &ChatRecv::processGmChat2, 0);
-packet(SMSG_GRAFFITI_VISIBLE, 0x01c9, 97, &BeingRecv::processGraffiti, 0);
-packet(SMSG_GUILD_ALIANCE_INFO, 0x014c, -1, &GuildRecv::processGuildAlianceInfo, 0);
-packet(SMSG_GUILD_ALLIANCE_ADDED_DISABLED, 0x0185, 34, nullptr, 0);
-packet(SMSG_GUILD_BASIC_INFO, 0x01b6, 114, &GuildRecv::processGuildBasicInfo, 0);
-packet(SMSG_GUILD_BROKEN, 0x015e, 6, &GuildRecv::processGuildBroken, 0);
-packet(SMSG_GUILD_CREATE_RESPONSE, 0x0167, 3, &GuildRecv::processGuildCreateResponse, 0);
-packet(SMSG_GUILD_DEL_ALLIANCE, 0x0184, 10, &GuildRecv::processGuildDelAlliance, 0);
-packet(SMSG_GUILD_EMBLEM, 0x01b4, 12, &GuildRecv::processGuildEmblem, 0);
-packet(SMSG_GUILD_EMBLEM_DATA, 0x0152, -1, &GuildRecv::processGuildEmblemData, 0);
-packet(SMSG_GUILD_EXPULSION_LIST, 0x0163, -1, &GuildRecv::processGuildExpulsionList, 0);
-packet(SMSG_GUILD_INVITE, 0x016a, 30, &GuildRecv::processGuildInvite, 0);
-packet(SMSG_GUILD_INVITE_ACK, 0x0169, 3, &GuildRecv::processGuildInviteAck, 0);
-packet(SMSG_GUILD_LEAVE, 0x015a, 66, &GuildRecv::processGuildLeave, 0);
-packet(SMSG_GUILD_MASTER_OR_MEMBER, 0x014e, 6, &GuildRecv::processGuildMasterOrMember, 0);
-packet(SMSG_GUILD_MEMBER_LIST, 0x0154, -1, &GuildRecv::processGuildMemberList, 0);
-packet(SMSG_GUILD_MEMBER_LOGIN, 0x01f2, 20, &GuildRecv::processGuildMemberLogin, 0);
-packet(SMSG_GUILD_MEMBER_POS_CHANGE, 0x0156, -1, &GuildRecv::processGuildMemberPosChange, 0);
-packet(SMSG_GUILD_MESSAGE, 0x017f, -1, &GuildRecv::processGuildMessage, 0);
-packet(SMSG_GUILD_NOTICE, 0x016f, 182, &GuildRecv::processGuildNotice, 0);
-packet(SMSG_GUILD_OPPOSITION_ACK, 0x0181, 3, &GuildRecv::processGuildOppositionAck, 0);
-packet(SMSG_GUILD_POSITION_CHANGED, 0x0174, -1, &GuildRecv::processGuildPositionChanged, 0);
-packet(SMSG_GUILD_POSITION_INFO, 0x016c, 43, &GuildRecv::processGuildPositionInfo, 0);
-packet(SMSG_GUILD_POS_INFO_LIST, 0x0160, -1, &GuildRecv::processGuildPosInfoList, 0);
-packet(SMSG_GUILD_POS_NAME_LIST, 0x0166, -1, &GuildRecv::processGuildPosNameList, 0);
-packet(SMSG_GUILD_REQ_ALLIANCE, 0x0171, 30, &GuildRecv::processGuildReqAlliance, 0);
-packet(SMSG_GUILD_REQ_ALLIANCE_ACK, 0x0173, 3, &GuildRecv::processGuildReqAllianceAck, 0);
-packet(SMSG_GUILD_SKILL_INFO, 0x0162, -1, &GuildRecv::processGuildSkillInfo, 0);
-packet(SMSG_GUILD_SKILL_UP, 0x010e, 11, &GuildRecv::processGuildSkillUp, 0);
-packet(SMSG_GUILD_UPDATE_COORDS, 0x01eb, 10, &GuildRecv::processGuildUpdateCoords, 0);
-packet(SMSG_IGNORE_ALL_RESPONSE, 0x00d2, 4, &Ea::ChatRecv::processIgnoreAllResponse, 0);
-packet(SMSG_IGNORE_NICK_ACK, 0x00d1, 4, &ChatRecv::processIgnoreNickAck, 0);
-packet(SMSG_ITEM_MVP_DROPPED, 0x07fd, 59, &ItemRecv::processItemMvpDropped, 0);
-packet(SMSG_ITEM_REMOVE, 0x00a1, 6, &Ea::ItemRecv::processItemRemove, 0);
-packet(SMSG_ITEM_USE_RESPONSE, 0x00a8, 7, &Ea::InventoryRecv::processItemUseResponse, 0);
-packet(SMSG_ITEM_VISIBLE, 0x009d, 17, &ItemRecv::processItemVisible, 0);
-packet(SMSG_MANNER_MESSAGE, 0x014a, 6, &ChatRecv::processMannerMessage, 0);
-packet(SMSG_MAP_AUTH_REFUSE, 0x0074, 3, &GameRecv::processMapAuthRefuse, 0);
-packet(SMSG_MAP_QUIT_RESPONSE, 0x018b, 4, &Ea::GameRecv::processMapQuitResponse, 0);
-packet(SMSG_MAP_TYPE, 0x01d6, 4, &BeingRecv::processMapType, 0);
-packet(SMSG_MARRIAGE_PROCESS_OUTDATED, 0x01e4, 2, nullptr, 0);
-packet(SMSG_MARRIAGE_PROPOSAL_OUTDATED, 0x01e2, 34, nullptr, 0);
-packet(SMSG_MONSTER_INFO, 0x018c, 29, &BeingRecv::processMonsterInfo, 0);
-packet(SMSG_MVP_ITEM, 0x010a, 4, &ChatRecv::processMVPItem, 0);
-packet(SMSG_MVP_EXP, 0x010b, 6, &ChatRecv::processMVPExp, 0);
-packet(SMSG_MVP_EFFECT, 0x010c, 6, &Ea::ChatRecv::processMVPEffect, 0);
-packet(SMSG_MVP_NO_ITEM, 0x010d, 2, &ChatRecv::processMVPNoItem, 0);
-packet(SMSG_NPC_BUY, 0x00c6, -1, &BuySellRecv::processNpcBuy, 0);
-packet(SMSG_NPC_BUY_RESPONSE, 0x00ca, 3, &BuySellRecv::processNpcBuyResponse, 0);
-packet(SMSG_NPC_BUY_SELL_CHOICE, 0x00c4, 6, &Ea::BuySellRecv::processNpcBuySellChoice, 0);
-packet(SMSG_NPC_CASH_BUY, 0x0849, 16, &CashShopRecv::processCashShopBuy, 0);
-packet(SMSG_NPC_CASH_POINTS, 0x0845, 10, &CashShopRecv::processCashShopPoints, 0);
-packet(SMSG_NPC_CASH_SCHEDULE, 0x08ca, -1, &CashShopRecv::processCashShopSchedule, 0);
-packet(SMSG_NPC_CASH_TAB_PRICE_LIST, 0x08c0, -1, &CashShopRecv::processCashShopTabPriceList, 0);
-packet(SMSG_NPC_CHOICE, 0x00b7, -1, &Ea::NpcRecv::processNpcChoice, 0);
-packet(SMSG_NPC_CLOSE, 0x00b6, 6, &Ea::NpcRecv::processNpcClose, 0);
-packet(SMSG_NPC_CLOSE_TIMEOUT, 0x08d6, 6, &NpcRecv::processNpcCloseTimeout, 0);
-packet(SMSG_NPC_CUTIN, 0x01b3, 67, &NpcRecv::processNpcCutin, 0);
-packet(SMSG_NPC_INT_INPUT, 0x0142, 6, &Ea::NpcRecv::processNpcIntInput, 0);
-packet(SMSG_NPC_MESSAGE, 0x00b4, -1, &Ea::NpcRecv::processNpcMessage, 0);
-packet(SMSG_NPC_NEXT, 0x00b5, 6, &Ea::NpcRecv::processNpcNext, 0);
-packet(SMSG_NPC_SELL, 0x00c7, -1, &Ea::BuySellRecv::processNpcSell, 0);
-packet(SMSG_NPC_SELL_RESPONSE, 0x00cb, 3, &BuySellRecv::processNpcSellResponse, 0);
-packet(SMSG_NPC_SHOW_DIGIT, 0x01b1, 7, &NpcRecv::processShowDigit, 0);
-packet(SMSG_NPC_STR_INPUT, 0x01d4, 6, &Ea::NpcRecv::processNpcStrInput, 0);
-packet(SMSG_NPC_VIEWPOINT, 0x0144, 23, &NpcRecv::processNpcViewPoint, 0);
-packet(SMSG_PARTY_CREATE, 0x00fa, 3, &Ea::PartyRecv::processPartyCreate, 0);
-packet(SMSG_PARTY_INFO, 0x00fb, -1, &PartyRecv::processPartyInfo, 0);
-packet(SMSG_PARTY_INVITE_RESPONSE_OUTDATED, 0x00fd, 27, nullptr, 0);
-packet(SMSG_PARTY_LEADER, 0x07fc, 10, &PartyRecv::processPartyLeader, 0);
-packet(SMSG_PARTY_LEAVE, 0x0105, 31, &Ea::PartyRecv::processPartyLeave, 0);
-packet(SMSG_PARTY_MEMBER_INFO, 0x01e9, 81, &PartyRecv::processPartyMemberInfo, 0);
-packet(SMSG_PARTY_MESSAGE, 0x0109, -1, &PartyRecv::processPartyMessage, 0);
-packet(SMSG_PARTY_UPDATE_COORDS, 0x0107, 10, &Ea::PartyRecv::processPartyUpdateCoords, 0);
-packet(SMSG_PET_CATCH_PROCESS, 0x019e, 2, &PetRecv::processPetCatchProcess, 0);
-packet(SMSG_PET_DATA, 0x01a4, 11, &PetRecv::processPetData, 0);
-packet(SMSG_PET_EGGS_LIST, 0x01a6, -1, &PetRecv::processEggsList, 0);
-packet(SMSG_PET_FOOD, 0x01a3, 5, &PetRecv::processPetFood, 0);
-packet(SMSG_PET_MESSAGE, 0x01aa, 10, &PetRecv::processPetMessage, 0);
-packet(SMSG_PET_ROULETTE, 0x01a0, 3, &PetRecv::processPetRoulette, 0);
-packet(SMSG_PLAYER_ADD_SKILL, 0x0111, 39, &SkillRecv::processSkillAdd, 0);
-packet(SMSG_PLAYER_ARROW_EQUIP, 0x013c, 4, &Ea::InventoryRecv::processPlayerArrowEquip, 0);
-packet(SMSG_PLAYER_ARROW_MESSAGE, 0x013b, 4, &Ea::PlayerRecv::processPlayerArrowMessage, 0);
-packet(SMSG_PLAYER_ATTACK_RANGE, 0x013a, 4, &Ea::InventoryRecv::processPlayerAttackRange, 0);
-packet(SMSG_PLAYER_CART_ADD_ERROR, 0x012c, 3, &InventoryRecv::processCartAddError, 0);
-packet(SMSG_PLAYER_CART_REMOVE, 0x0125, 8, &InventoryRecv::processPlayerCartRemove, 0);
-packet(SMSG_PLAYER_CHAT, 0x008e, -1, &ChatRecv::processChat, 0);
-packet(SMSG_PLAYER_GUILD_PARTY_INFO, 0x0195, 102, &BeingRecv::processPlayerGuilPartyInfo, 0);
-packet(SMSG_PLAYER_HEAL, 0x013d, 6, &PlayerRecv::processPlayerHeal, 0);
-packet(SMSG_PLAYER_IDENTIFIED, 0x0179, 5, &InventoryRecv::processPlayerIdentified, 0);
-packet(SMSG_PLAYER_IDENTIFY_LIST, 0x0177, -1, &InventoryRecv::processPlayerIdentifyList, 0);
-packet(SMSG_PLAYER_INSERT_CARD, 0x017d, 7, &InventoryRecv::processPlayerInsertCard, 0);
-packet(SMSG_PLAYER_INVENTORY_REMOVE, 0x00af, 6, &InventoryRecv::processPlayerInventoryRemove, 0);
-packet(SMSG_PLAYER_MOVE_TO_ATTACK, 0x0139, 16, &Ea::BeingRecv::processPlayerMoveToAttack, 0);
-packet(SMSG_PLAYER_NOTIFY_MAPINFO, 0x0189, 4, &PlayerRecv::processNotifyMapInfo, 0);
-packet(SMSG_PLAYER_REFINE, 0x0188, 8, &InventoryRecv::processPlayerRefine, 0);
-packet(SMSG_PLAYER_REPAIR_EFFECT, 0x01fe, 5, &InventoryRecv::processPlayerRepairEffect, 0);
-packet(SMSG_PLAYER_REPAIR_LIST, 0x01fc, -1, &InventoryRecv::processPlayerRepairList, 0);
-packet(SMSG_PLAYER_SKILLS, 0x010f, -1, &SkillRecv::processPlayerSkills, 0);
-packet(SMSG_PLAYER_SKILL_AUTO_SPELLS, 0x01cd, 30, &SkillRecv::processSkillAutoSpells, 0);
-packet(SMSG_PLAYER_SKILL_PRODUCE_EFFECT, 0x018f, 6, &SkillRecv::processSkillProduceEffect, 0);
-packet(SMSG_PLAYER_SKILL_PRODUCE_MIX_LIST, 0x018d, -1, &SkillRecv::processSkillProduceMixList, 0);
-packet(SMSG_PLAYER_SKILL_UP, 0x010e, 11, &Ea::SkillRecv::processPlayerSkillUp, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_1, 0x00b0, 8, &Ea::PlayerRecv::processPlayerStatUpdate1, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_2, 0x00b1, 8, &Ea::PlayerRecv::processPlayerStatUpdate2, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_3, 0x0141, 14, &Ea::PlayerRecv::processPlayerStatUpdate3, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_4, 0x00bc, 6, &Ea::PlayerRecv::processPlayerStatUpdate4, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_5, 0x00bd, 44, &PlayerRecv::processPlayerStatUpdate5, 0);
-packet(SMSG_PLAYER_STAT_UPDATE_6, 0x00be, 5, &Ea::PlayerRecv::processPlayerStatUpdate6, 0);
-packet(SMSG_PLAYER_STOP, 0x0088, 10, &Ea::BeingRecv::processPlayerStop, 0);
-packet(SMSG_PLAYER_STORAGE_CLOSE, 0x00f8, 2, &Ea::InventoryRecv::processPlayerStorageClose, 0);
-packet(SMSG_PLAYER_STORAGE_REMOVE, 0x00f6, 8, &InventoryRecv::processPlayerStorageRemove, 0);
-packet(SMSG_PLAYER_STORAGE_STATUS, 0x00f2, 6, &Ea::InventoryRecv::processPlayerStorageStatus, 0);
-packet(SMSG_PLAYER_USE_CARD, 0x017b, -1, &InventoryRecv::processPlayerUseCard, 0);
-packet(SMSG_PLAYER_WARP, 0x0091, 22, &Ea::PlayerRecv::processPlayerWarp, 0);
-packet(SMSG_PVP_MAP_MODE, 0x0199, 4, &Ea::BeingRecv::processPvpMapMode, 0);
-packet(SMSG_PVP_SET, 0x019a, 14, &BeingRecv::processPvpSet, 0);
-packet(SMSG_SCRIPT_MESSAGE, 0x08b3, -1, &ChatRecv::processScriptMessage, 0);
-packet(SMSG_SERVER_PING, 0x007f, 6, &GameRecv::processServerTick, 0);
-packet(SMSG_SKILL_ARROW_CREATE_LIST, 0x01ad, -1, &SkillRecv::processSkillArrowCreateList, 0);
-packet(SMSG_SKILL_AUTO_CAST, 0x0147, 39, &BeingRecv::processSkillAutoCast, 0);
-packet(SMSG_SKILL_CAST_CANCEL, 0x01b9, 6, &BeingRecv::processSkillCancel, 0);
-packet(SMSG_SKILL_DEVOTION_EFFECT, 0x01cf, 28, &SkillRecv::processSkillDevotionEffect, 0);
-packet(SMSG_SKILL_FAILED, 0x0110, 10, &SkillRecv::processSkillFailed, 0);
-packet(SMSG_SKILL_GROUND_DAMAGE_UNUSED, 0x0115, 35, nullptr, 0);
-packet(SMSG_SKILL_GROUND_NO_DAMAGE, 0x0117, 18, &BeingRecv::processSkillGroundNoDamage, 0);
-packet(SMSG_SKILL_MEMO_MESSAGE, 0x011e, 3, &SkillRecv::processSkillMemoMessage, 0);
-packet(SMSG_SKILL_NO_DAMAGE, 0x011a, 15, &Ea::BeingRecv::processSkillNoDamage, 1);
-packet(SMSG_SKILL_UNIT_UPDATE, 0x01ac, 6, &SkillRecv::processSkillUnitUpdate, 0);
-packet(SMSG_SKILL_WARP_POINT, 0x011c, 68, &SkillRecv::processSkillWarpPoint, 0);
-packet(SMSG_SOLVE_CHAR_NAME, 0x0194, 30, &BeingRecv::processSolveCharName, 0);
-packet(SMSG_SPIRIT_BALLS, 0x01d0, 8, &BeingRecv::processSpiritBalls, 0);
-packet(SMSG_SPIRIT_BALL_SINGLE, 0x01e1, 8, &BeingRecv::processSpiritBalls, 0);
-packet(SMSG_TRADE_CANCEL, 0x00ee, 2, &Ea::TradeRecv::processTradeCancel, 0);
-packet(SMSG_TRADE_COMPLETE, 0x00f0, 3, &Ea::TradeRecv::processTradeComplete, 0);
-packet(SMSG_TRADE_ITEM_ADD_RESPONSE, 0x00ea, 5, &TradeRecv::processTradeItemAddResponse, 0);
-packet(SMSG_TRADE_OK, 0x00ec, 3, &Ea::TradeRecv::processTradeOk, 0);
-packet(SMSG_TRADE_UNDO, 0x00f1, 2, &TradeRecv::processTradeUndo, 0);
-packet(SMSG_VENDING_BUY_ACK, 0x0135, 7, &VendingRecv::processBuyAck, 0);
-packet(SMSG_VENDING_HIDE_BOARD, 0x0132, 6, &VendingRecv::processHideBoard, 0);
-packet(SMSG_VENDING_OPEN_REQ, 0x012d, 4, &VendingRecv::processOpenReq, 0);
-packet(SMSG_VENDING_REPORT, 0x0137, 6, &VendingRecv::processReport, 0);
-packet(SMSG_VENDING_SHOW_BOARD, 0x0131, 86, &VendingRecv::processShowBoard, 0);
-packet(SMSG_WALK_RESPONSE, 0x0087, 12, &PlayerRecv::processWalkResponse, 0);
-packet(SMSG_WEDDING_EFFECT, 0x01ea, 6, &BeingRecv::processWddingEffect, 0);
-packet(SMSG_WHO_ANSWER, 0x00c2, 6, &Ea::GameRecv::processWhoAnswer, 0);
-packet(SMSG_BOOKING_CANCEL_VOLUNTEER, 0x0909, 6, nullptr, 0);
-packet(SMSG_BOOKING_ADD_FILTERING_LIST, 0x090b, 30, nullptr, 0);
-packet(SMSG_BOOKING_SUB_FILTERING_LIST, 0x090c, 30, nullptr, 0);
-packet(SMSG_ADD_MAP_MARKER, 0x09c1, 10, &MapRecv::processAddMapMarker, 0);
-packet(SMSG_GUILD_ONLINE_INFO, 0x016d, 14, &GuildRecv::processOnlineInfo, 0);
-
-// 3
-if (packetVersion >= 3)
-{
- packet(SMSG_PLAYER_INVENTORY_USE, 0x01c8, 13, &Ea::InventoryRecv::processPlayerInventoryUse, 3);
- packet(SMSG_SKILL_DAMAGE, 0x01de, 33, &BeingRecv::processSkillDamage, 3);
-}
-
-// 4
-if (packetVersion >= 4)
-{
- packet(SMSG_BEING_CHANGE_LOOKS2, 0x01d7, 11, &BeingRecv::processBeingChangeLook2, 4);
- packet(SMSG_BEING_VISIBLE, 0x01d8, 54, &BeingRecv::processBeingVisible, 4);
- packet(SMSG_BEING_SPAWN, 0x01d9, 53, &BeingRecv::processBeingSpawn, 4);
- packet(SMSG_BEING_MOVE, 0x01da, 60, &BeingRecv::processBeingMove, 4);
-}
-
-// 5
-packet(SMSG_PLAYER_STORAGE_ADD, 0x01c4, 22, &InventoryRecv::processPlayerStorageAdd, 5);
-packet(SMSG_PLAYER_CART_ADD, 0x01c5, 22, &InventoryRecv::processPlayerCartAdd, 5);
-
-// 6
-if (packetVersion >= 6)
-{
- packet(SMSG_TRADE_REQUEST, 0x01f4, 32, &TradeRecv::processTradeRequest, 6);
- packet(SMSG_TRADE_RESPONSE, 0x01f5, 9, &TradeRecv::processTradeResponse, 6);
-}
-
-if (packetVersion >= 7)
-{
- packet(SMSG_BEING_VISIBLE, 0x022a, 58, &BeingRecv::processBeingVisible, 7);
- packet(SMSG_BEING_SPAWN, 0x022b, 57, &BeingRecv::processBeingSpawn, 7);
- packet(SMSG_BEING_MOVE, 0x022c, 65, &BeingRecv::processBeingMove, 7);
-}
-
-// 20040816
-packet(SMSG_ADMIN_ACCOUNT_STATS, 0x0214, 42, &AdminRecv::processAccountStats, 20040816);
-
-// 20040817
-packet(SMSG_PVP_INFO, 0x0210, 22, &PlayerRecv::processPvpInfo, 20040817);
-
-// 20041101
-packet(SMSG_PLAYER_SKILL_MESSAGE, 0x0215, 6, &PlayerRecv::processPlayerSkillMessage, 20041101);
-
-// 20041108
-packet(SMSG_FAMILY_ASK_FOR_CHILD_REPLY, 0x0216, 6, &FamilyRecv::processAskForChildReply, 20041108);
-packet(SMSG_BLACKSMITH_RANKS_LIST, 0x0219, 282, &BeingRecv::processBlacksmithRanksList, 20041108);
-packet(SMSG_ALCHEMIST_RANKS_LIST, 0x021a, 282, &BeingRecv::processAlchemistRanksList, 20041108);
-packet(SMSG_PLAYER_FAME_BLACKSMITH, 0x021b, 10, &PlayerRecv::processPlayerFameBlacksmith, 20041108);
-packet(SMSG_PLAYER_FAME_ALCHEMIST, 0x021c, 10, &PlayerRecv::processPlayerFameAlchemist, 20041108);
-
-// 20041129
-packet(SMSG_PLAYER_REFINE_LIST, 0x0221, -1, &InventoryRecv::processPlayerRefineList, 20041129);
-packet(SMSG_PLAYER_UPGRADE_MESSAGE, 0x0223, 8, &PlayerRecv::processPlayerUpgradeMessage, 20041129);
-
-// 20050328
-packet(SMSG_PLAYER_FAME_TAEKWON, 0x0224, 10, &PlayerRecv::processPlayerFameTaekwon, 20050328);
-packet(SMSG_TAEKWON_RANKS_LIST, 0x0226, 282, &BeingRecv::processTaekwonRanksList, 20050328);
-
-// 20050411
-if (packetVersion >= 20050411)
-{
- packet(SMSG_PLAYER_STATUS_CHANGE, 0x0229, 15, &BeingRecv::processPlayerStatusChange, 20050411);
-}
-
-// 20050523
-packet(SMSG_HOMUNCULUS_DATA, 0x0230, 12, &HomunculusRecv::processHomunculusData, 20050523);
-
-// 20050530
-packet(SMSG_HOMUNCULUS_SKILLS, 0x0235, -1, &HomunculusRecv::processHomunculusSkills, 20050530);
-packet(SMSG_PK_RANKS_LIST, 0x0238, 282, &BeingRecv::processPkRanksList, 20050530);
-packet(SMSG_HOMUNCULUS_INFO, 0x022e, 71, &HomunculusRecv::processHomunculusInfo, 20050530);
-
-// 20050531
-packet(SMSG_HOMUNCULUS_SKILL_UP, 0x0239, 11, &HomunculusRecv::processHomunculusSkillUp, 20050531);
-
-// 20050608
-packet(SMSG_HOMUNCULUS_FOOD, 0x022f, 5, &HomunculusRecv::processHomunculusFood, 20050608);
-packet(SMSG_PLAYER_STORAGE_PASSWORD, 0x023a, 4, &InventoryRecv::processPlayerStoragePassword, 20050608);
-packet(SMSG_PLAYER_STORAGE_PASSWORD_RESULT, 0x023c, 6, &InventoryRecv::processPlayerStoragePasswordResult, 20050608);
-
-// 20050718
-packet(SMSG_MAIL_READ_MAIL, 0x0242, -1, &MailRecv::processReadMail, 20050718);
-packet(SMSG_MAIL_SEND_MAIL_ACK, 0x0249, 3, &MailRecv::processSendMailAck, 20050718);
-packet(SMSG_MAIL_NEW_MAIL, 0x024a, 70, &MailRecv::processNewMail, 20050718);
-packet(SMSG_AUCTION_MESSAGE, 0x0250, 3, &AuctionRecv::processAuctionMessage, 20050718);
-packet(SMSG_AUCTION_RESULTS, 0x0252, -1, &AuctionRecv::processAuctionResults, 20050718);
-
-// 20050801
-packet(SMSG_MAIL_GET_ATTACHMENT, 0x0245, 3, &MailRecv::processGetAttachment, 20050801);
-
-// 20050817
-packet(SMSG_GLADIATOR_FEEL_REQUEST, 0x0253, 3, &BeingRecv::processGladiatorFeelRequest, 20050817);
-
-// 20050829
-packet(SMSG_MAIL_MAILS_LIST, 0x0240, -1, &MailRecv::processMailList, 20050829);
-packet(SMSG_MAIL_SET_ATTACHMENT_ACK, 0x0255, 5, &MailRecv::processSetAttachmentAck, 20050829);
-packet(SMSG_MAIL_DELETE_MAIL_ACK, 0x0257, 8, &MailRecv::processDeleteAck, 20050829);
-
-// 20050912
-packet(SMSG_AUCTION_SET_ITEM, 0x0256, 5, &AuctionRecv::processAuctionSetItem, 20050912);
-
-// 20051010
-packet(SMSG_STARS_KILL, 0x020e, 32, &BeingRecv::processStarsKill, 20051010);
-packet(SMSG_PLAYER_COOKING_LIST, 0x025a, -1, &InventoryRecv::processPlayerCookingList, 20051010);
-
-// 20051017
-packet(SMSG_AUCTION_CLOSE, 0x025d, 4, &AuctionRecv::processAuctionClose, 20051017);
-
-// 20051024
-packet(SMSG_AUCTION_OPEN_WINDOW, 0x025f, 6, &AuctionRecv::processOpenWindow, 20051024);
-packet(SMSG_MAIL_OPEN_WINDOW, 0x0260, 6, &MailRecv::processMailOpen, 20051024);
-
-// 20060306
-packet(SMSG_MAIL_RETURN, 0x0274, 8, &MailRecv::processMailReturn, 20060306);
-
-// 20060424
-if (packetVersion >= 20060424)
-{
- packet(SMSG_MAP_ACCOUNT_ID, 0x0283, 6, &GameRecv::processMapAccountId, 20060424);
- packet(SMSG_BEING_SPECIAL_EFFECT_NUM, 0x0284, 14, &BeingRecv::processBeingSpecialEffectNum, 20060424);
- packet(SMSG_NPC_CASH_SHOP_OPEN, 0x0287, -1, &CashShopRecv::processCashShopOpen, 20060424);
- packet(SMSG_NPC_CASH_BUY_ACK, 0x0289, 8, &CashShopRecv::processCashShopBuyAck, 20060424);
- packet(SMSG_PLAYER_STATUS_CHANGE2, 0x028a, 18, &BeingRecv::processPlayerStatusChange2, 20060424);
- packet(SMSG_FORMAT_MESSAGE, 0x0291, 4, &ChatRecv::processFormatMessage, 20060424);
- packet(SMSG_BOSS_MAP_INFO, 0x0293, 70, &BeingRecv::processBossMapInfo, 20060424);
- packet(SMSG_PLAYER_READ_BOOK, 0x0294, 10, &PlayerRecv::processPlayerReadBook, 20060424);
- packet(SMSG_PLAYER_ITEM_RENTAL_TIME, 0x0298, 8, &InventoryRecv::processPlayerItemRentalTime, 20060424);
- packet(SMSG_PLAYER_ITEM_RENTAL_EXPIRED, 0x0299, 6, &InventoryRecv::processPlayerItemRentalExpired, 20060424);
- packet(SMSG_MERCENARY_SKILLS, 0x029d, -1, &MercenaryRecv::processMercenarySkills, 20060424);
- packet(SMSG_MERCENARY_UPDATE, 0x02a2, 8, &MercenaryRecv::processMercenaryUpdate, 20060424);
-}
-
-// 20061218
-if (packetVersion >= 20061218)
-{
- packet(SMSG_PLAYER_INVENTORY_ADD, 0x029a, 27, &InventoryRecv::processPlayerInventoryAdd, 20061218);
-}
-
-// 20070227
-if (packetVersion >= 20070227)
-{
- packet(SMSG_NPC_CASH_BUY_ACK, 0x0289, 12, &CashShopRecv::processCashShopBuyAck, 20070227);
- packet(SMSG_QUEST_LIST_OBJECTIVES, 0x02b2, -1, &QuestRecv::processAddQuestsObjectives, 20070227);
- packet(SMSG_QUEST_ADD, 0x02b3, 107, &QuestRecv::processAddQuest, 20070227);
- packet(SMSG_QUEST_REMOVE, 0x02b4, 6, &QuestRecv::processRemoveQuest, 20070227);
- packet(SMSG_QUEST_UPDATE_OBJECTIVES, 0x02b5, -1, &QuestRecv::processUpdateQuestsObjectives, 20070227);
- packet(SMSG_QUEST_ACTIVATE, 0x02b7, 7, &QuestRecv::processActivateQuest, 20070227);
- packet(SMSG_ITEM_DAMAGED, 0x02bb, 8, &InventoryRecv::processItemDamaged, 20070227);
- packet(SMSG_COLOR_MESSAGE, 0x02c1, -1, &ChatRecv::processColorChat, 20070227);
- packet(SMSG_PARTY_INVITATION_STATS, 0x02c9, 3, &PartyRecv::processPartyInvitationStats, 20070227);
- packet(SMSG_INSTANCE_CREATE, 0x02cc, 4, &MapRecv::processInstanceCreate, 20070227);
- packet(SMSG_INSTANCE_DELETE, 0x02ce, 10, &MapRecv::processInstanceDelete, 20070227);
- packet(SMSG_PLAYER_EQUIP_TICK_ACK, 0x02d9, 10, &PlayerRecv::processPlayerEquipTickAck, 20070227);
- packet(SMSG_PLAYER_SHOW_EQUIP, 0x02da, 3, &PlayerRecv::processPlayerShowEquip, 20070227);
- packet(SMSG_BATTLE_CHAT_MESSAGE, 0x02dc, -1, &ChatRecv::processBattleChatMessage, 20070227);
- packet(SMSG_BATTLE_EMBLEM, 0x02dd, 32, &BattleGroundRecv::processBattleEmblem, 20070227);
- packet(SMSG_BATTLE_UPDATE_SCORE, 0x02de, 6, &BattleGroundRecv::processBattleUpdateScore, 20070227);
- packet(SMSG_BATTLE_UPDATE_COORDS, 0x02df, 36, &BattleGroundRecv::processBattleUpdateCoords, 20070227);
- packet(SMSG_BATTLE_UPDATE_HP, 0x02e0, 34, &BattleGroundRecv::processBattleUpdateHp, 20070227);
-}
-
-// 20070821
-packet(SMSG_PARTY_INVITE_RESPONSE, 0x02c5, 30, &PartyRecv::processPartyInviteResponse, 20070821);
-packet(SMSG_PARTY_INVITED, 0x02c6, 30, &PartyRecv::processPartyInvited, 20070821);
-
-// 20071002
-if (packetVersion >= 20071002)
-{
- packet(SMSG_PLAYER_INVENTORY, 0x01ee, -1, &InventoryRecv::processPlayerInventory, 20071002);
- packet(SMSG_PLAYER_CART_ITEMS, 0x01ef, -1, &InventoryRecv::processPlayerCartItems, 20071002);
- packet(SMSG_PLAYER_STORAGE_ITEMS, 0x0295, -1, &InventoryRecv::processPlayerStorage, 20071002);
- packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0296, -1, &InventoryRecv::processPlayerStorageEquip, 20071002);
- packet(SMSG_PLAYER_CART_EQUIP, 0x0297, -1, &InventoryRecv::processPlayerCartEquip, 20071002);
- packet(SMSG_PARTY_ITEM_PICKUP, 0x02b8, 22, &PartyRecv::processPartyItemPickup, 20071002);
- packet(SMSG_PLAYER_INVENTORY_ADD, 0x02d4, 29, &InventoryRecv::processPlayerInventoryAdd, 20071002);
-}
-
-// 20071023
-packet(SMSG_INSTANCE_START, 0x02cb, 65, &MapRecv::processInstanceStart, 20071023);
-packet(SMSG_INSTANCE_INFO, 0x02cd, 71, &MapRecv::processInstanceInfo, 20071023);
-
-// 20071106
-if (packetVersion >= 20071106)
-{
- packet(SMSG_BEING_FAKE_NAME, 0x0078, 55, &BeingRecv::processBeingFakeName, 20071106);
- packet(SMSG_BEING_SPAWN_OUTDATED, 0x007c, 42, nullptr, 20071106);
- packet(SMSG_BEING_MOVE, 0x022c, 65, &BeingRecv::processBeingMove, 20071106);
- packet(SMSG_MERCENARY_INFO, 0x029b, 80, &MercenaryRecv::processMercenaryInfo, 20071106);
-}
-
-// 20071113
-packet(SMSG_BEING_ACTION2, 0x02e1, 33, &BeingRecv::processBeingAction2, 20071113);
-
-// 20080102
-if (packetVersion >= 20080102)
-{
- packet(SMSG_PLAYER_EQUIPMENT, 0x02d0, -1, &InventoryRecv::processPlayerEquipment, 20080102);
- packet(SMSG_PLAYER_STORAGE_EQUIP, 0x02d1, -1, &InventoryRecv::processPlayerStorageEquip, 20080102);
- packet(SMSG_PLAYER_CART_EQUIP, 0x02d2, -1, &InventoryRecv::processPlayerCartEquip, 20080102);
- packet(SMSG_PLAYER_INVENTORY, 0x02e8, -1, &InventoryRecv::processPlayerInventory, 20080102);
- packet(SMSG_PLAYER_CART_ITEMS, 0x02e9, -1, &InventoryRecv::processPlayerCartItems, 20080102);
- packet(SMSG_PLAYER_STORAGE_ITEMS, 0x02ea, -1, &InventoryRecv::processPlayerStorage, 20080102);
- packet(SMSG_MAP_LOGIN_SUCCESS, 0x02eb, 13, &GameRecv::processMapLogin, 20080102);
- packet(SMSG_BEING_MOVE, 0x02ec, 67, &BeingRecv::processBeingMove, 20080102);
- packet(SMSG_BEING_SPAWN, 0x02ed, 59, &BeingRecv::processBeingSpawn, 20080102);
- packet(SMSG_BEING_VISIBLE, 0x02ee, 60, &BeingRecv::processBeingVisible, 20080102);
- packet(SMSG_BEING_FONT, 0x02ef, 8, &BeingRecv::processBeingFont, 20080102);
-}
-
-// 20080318
-packet(SMSG_NPC_SHOW_PROGRESS_BAR, 0x02f0, 10, &NpcRecv::processNpcShowProgressBar, 20080318);
-packet(SMSG_NPC_PROGRESS_BAR_ABORT, 0x02f2, 2, &NpcRecv::processProgressBarAbort, 20080318);
-
-// 20080827
-if (packetVersion >= 20080827)
-{
- packet(SMSG_BEING_SPAWN_OUTDATED, 0x007c, 44, nullptr, 20080827);
-}
-
-// 20081112
-packet(SMSG_PLAYER_SKILL_COOLDOWN, 0x043d, 8, &SkillRecv::processSkillCoolDown, 20081112);
-
-// 20081113
-if (packetVersion >= 20081113)
-{
- packet(SMSG_PLAYER_SKILL_COOLDOWN_LIST, 0x043e, -1, &SkillRecv::processSkillCoolDownList, 20081113);
-}
-
-// 20081126
-if (packetVersion >= 20081126)
-{
- packet(SMSG_PET_STATUS, 0x01a2, 37, &PetRecv::processPetStatus, 20081126);
-}
-
-// 20081210
-packet(SMSG_AUTOSHADOW_SPELL_LIST, 0x0442, -1, &PlayerRecv::processPlayerAutoShadowSpellList, 20081210);
-
-// 20081217
-packet(SMSG_BEING_MILLENIUM_SHIELD, 0x0440, 10, &BeingRecv::processBeingMilleniumShield, 20081217);
-packet(SMSG_PLAYER_DELETE_SKILL, 0x0441, 4, &SkillRecv::processSkillDelete, 20081217);
-
-// 20090121
-packet(SMSG_BEING_STATUS_CHANGE, 0x043f, 25, &BeingRecv::processBeingStatusChange, 20090121);
-
-// 20090218
-packet(SMSG_QUEST_NPC_EFFECT, 0x0446, 14, &QuestRecv::processNpcQuestEffect, 20090218);
-
-// 20090603
-packet(SMSG_PARTY_SETTINGS, 0x07d8, 8, &PartyRecv::processPartySettings, 20090603);
-packet(SMSG_PLAYER_SHORTCUTS, 0x07d9, 268, &PlayerRecv::processPlayerShortcuts, 20090603);
-
-// 20090715
-packet(SMSG_PLAYER_UPDATE_SKILL, 0x07e1, 15, &SkillRecv::processSkillUpdate, 20090715);
-
-// 20090805
-packet(SMSG_FORMAT_MESSAGE_NUMBER, 0x07e2, 8, &ChatRecv::processFormatMessageNumber, 20090805);
-
-// 20090818
-packet(SMSG_FORMAT_MESSAGE_SKILL, 0x07e6, 8, &ChatRecv::processFormatMessageSkill, 20090818);
-
-// 20090922
-packet(SMSG_SKILL_ITEM_LIST_WINDOW, 0x07e3, 6, &SkillRecv::processSkillItemListWindow, 20090922);
-packet(SMSG_CHAR_CAPTCHA_NOT_SUPPORTED, 0x07e9, 5, &CharServerRecv::processCharCaptchaNotSupported, 20090922);
-
-// 20091027
-packet(SMSG_PLAYER_GET_EXP, 0x07f6, 14, &PlayerRecv::processPlayerGetExp, 20091027);
-
-if (packetVersion >= 20091103)
-{
- packet(SMSG_BEING_MOVE, 0x07f7, -1, &BeingRecv::processBeingMove, 20091103);
- packet(SMSG_BEING_SPAWN, 0x07f8, -1, &BeingRecv::processBeingSpawn, 20091103);
- packet(SMSG_BEING_VISIBLE, 0x07f9, -1, &BeingRecv::processBeingVisible, 20091103);
-}
-
-// 20091104
-if (packetVersion >= 20091104)
-{
- packet(SMSG_WHISPER, 0x0097, -1, &ChatRecv::processWhisper, 20091104);
-}
-
-// 20091117
-packet(SMSG_PLAYER_INVENTORY_REMOVE2, 0x07fa, 8, &InventoryRecv::processPlayerInventoryRemove2, 20091117);
-
-// 20091124
-if (packetVersion >= 20091124)
-{
- packet(SMSG_SKILL_CASTING, 0x07fb, 25, &BeingRecv::processSkillCasting, 20091124);
-}
-
-// 20091201
-packet(SMSG_BATTLE_PLAY, 0x07fe, 26, &BattleGroundRecv::processBattlePlay, 20091201);
-
-// 20091222
-packet(SMSG_BOOKING_REGISTER_ACK, 0x0803, 4, nullptr, 20091222);
-packet(SMSG_BOOKING_SEARCH_ACK, 0x0805, -1, nullptr, 20091222);
-
-// 20091229
-packet(SMSG_BOOKING_DELETE_ACK, 0x0807, 4, nullptr, 20091229);
-packet(SMSG_BOOKING_INSERT_NOTIFY, 0x0809, 50, nullptr, 20091229);
-packet(SMSG_BOOKING_UPDATE_NOTIFY, 0x080a, 18, nullptr, 20091229);
-packet(SMSG_BOOKING_DELETE_NOTIFY, 0x080b, 6, nullptr, 20091229);
-
-// 20100105
-if (packetVersion >= 20100105)
-{
- packet(SMSG_VENDING_ITEMS_LIST, 0x0800, -1, &VendingRecv::processItemsList, 20100105);
-}
-
-// 20100126
-packet(SMSG_PLAYER_HP, 0x080e, 14, &BeingRecv::processBeingHp, 20100126);
-
-// 20100223
-packet(SMSG_TRADE_ITEM_ADD, 0x080f, 20, &TradeRecv::processTradeItemAdd, 20100223);
-
-// 20100303
-packet(SMSG_BUYINGSTORE_OPEN, 0x0810, 3, &BuyingStoreRecv::processBuyingStoreOpen, 20100303);
-
-// 20100309
-packet(SMSG_BUYINGSTORE_OWN_ITEMS, 0x0813, -1, &BuyingStoreRecv::processBuyingStoreOwnItems, 20100309);
-packet(SMSG_BUYINGSTORE_HIDE_BOARD, 0x0816, 6, &BuyingStoreRecv::processBuyingStoreHideBoard, 20100309);
-packet(SMSG_BUYINGSTORE_ITEMS_LIST, 0x0818, -1, &BuyingStoreRecv::processBuyingStoreItemsList, 20100309);
-packet(SMSG_ELEMENTAL_INFO, 0x081d, 22, &ElementalRecv::processElementalInfo, 20100309);
-packet(SMSG_ELEMENTAL_UPDATE_STATUS, 0x081e, 8, &ElementalRecv::processElementalUpdateStatus, 20100309);
-
-// 20100420
-packet(SMSG_BUYINGSTORE_CREATE_FAILED, 0x0812, 8, &BuyingStoreRecv::processBuyingStoreCreateFailed, 20100420);
-packet(SMSG_BUYINGSTORE_SHOW_BOARD, 0x0814, 86, &BuyingStoreRecv::processBuyingStoreShowBoard, 20100420);
-packet(SMSG_BUYINGSTORE_SELL_FAILED, 0x081a, 4, &BuyingStoreRecv::processBuyingStoreSellFailed, 20100420);
-packet(SMSG_BUYINGSTORE_REPORT, 0x081b, 10, &BuyingStoreRecv::processBuyingStoreReport, 20100420);
-packet(SMSG_BUYINGSTORE_DELETE_ITEM, 0x081c, 10, &BuyingStoreRecv::processBuyingStoreDeleteItem, 20100420);
-packet(SMSG_BUYINGSTORE_SELLER_SELL_FAILED, 0x0824, 6, &BuyingStoreRecv::processBuyingStoreSellerSellFailed, 20100420);
-
-// 20100601
-packet(SMSG_SEARCHSTORE_SEARCH_ACK, 0x0836, 0, &SearchStoreRecv::processSearchAck, 20100601);
-packet(SMSG_SEARCHSTORE_SEARCH_FAILED, 0x0837, 3, &SearchStoreRecv::processSearchFailed, 20100601);
-
-// 20100608
-if (packetVersion >= 20100608)
-{
- packet(SMSG_SEARCHSTORE_OPEN, 0x083a, 4, &SearchStoreRecv::processSearchOpen, 20100608);
- packet(SMSG_SEARCHSTORE_CLICK_ACK, 0x083d, 6, &SearchStoreRecv::processSearchClickAck, 20100608);
-}
-
-// 20100629
-if (packetVersion >= 20100629)
-{
- packet(SMSG_PLAYER_EQUIPMENT, 0x02d0, -1, &InventoryRecv::processPlayerEquipment, 20100629);
- packet(SMSG_PLAYER_STORAGE_EQUIP, 0x02d1, -1, &InventoryRecv::processPlayerStorageEquip, 20100629);
- packet(SMSG_PLAYER_CART_EQUIP, 0x02d2, -1, &InventoryRecv::processPlayerCartEquip, 20100629);
- packet(SMSG_PLAYER_EQUIP, 0x00aa, 9, &InventoryRecv::processPlayerEquip, 20100629);
-}
-
-// 20100701
-if (packetVersion >= 20100701)
-{
- packet(SMSG_SEARCHSTORE_OPEN, 0x083a, 5, &SearchStoreRecv::processSearchOpen, 20100701);
-}
-
-// 20100803
-packet(SMSG_GUILD_EXPULSION, 0x0839, 66, &GuildRecv::processGuildExpulsion, 20100803);
-
-// 20101124
-if (packetVersion >= 20101124)
-{
- packet(SMSG_BEING_MOVE, 0x0856, -1, &BeingRecv::processBeingMove, 20101124);
- packet(SMSG_BEING_VISIBLE, 0x0857, -1, &BeingRecv::processBeingVisible, 20101124);
- packet(SMSG_BEING_SPAWN, 0x0858, -1, &BeingRecv::processBeingSpawn, 20101124);
- packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0859, -1, &BeingRecv::processBeingViewEquipment, 20101124);
-}
-
-// 20110718
-if (packetVersion >= 20110718)
-{
- packet(SMSG_SKILL_ENTRY, 0x08c7, -1, &BeingRecv::processSkillEntry, 20110718);
-}
-
-// 20111005
-packet(SMSG_SKILL_SNAP, 0x08d2, 10, &BeingRecv::processBeingSlide, 20111005);
-
-// 20111010
-packet(CMSG_NAVIGATE_TO, 0x08e2, 27, &BeingRecv::processNavigateTo, 20111010);
-
-// 20120000
-packet(SMSG_LOGIN_ERROR2, 0x083e, 26, &LoginRecv::processLoginError2, 20120000);
-
-// 20120221
-if (packetVersion >= 20120221)
-{
- packet(SMSG_BEING_VISIBLE, 0x0915, -1, &BeingRecv::processBeingVisible, 20120221);
- packet(SMSG_BEING_MOVE, 0x0914, -1, &BeingRecv::processBeingMove, 20120221);
- packet(SMSG_BEING_SPAWN, 0x090f, -1, &BeingRecv::processBeingSpawn, 20120221);
-}
-
-// 20120229
-if (packetVersion >= 20120229)
-{
- packet(SMSG_MERGE_ITEM, 0x096d, -1, &InventoryRecv::processMergeItem, 20120229);
- packet(SMSG_ACK_MERGE_ITEMS, 0x096f, 7, &InventoryRecv::processMergeItemResponse, 20120229);
-}
-
-// 20120410
-packet(SMSG_BEING_CHARM, 0x08cf, 10, &BeingRecv::processBeingCharm, 20120410);
-packet(SMSG_RECRUIT_REGISTER_ACK, 0x08e6, 4, nullptr, 20120410);
-packet(SMSG_RECRUIT_SEARCH_ACK, 0x08e8, -1, nullptr, 20120410);
-packet(SMSG_RECRUIT_DELETE_ACK, 0x08ea, 4, nullptr, 20120410);
-packet(SMSG_RECRUIT_INSERT_NOTIFY, 0x08ec, 73, nullptr, 20120410);
-packet(SMSG_RECRUIT_UPDATE_NOTIFY, 0x08ed, 43, nullptr, 20120410);
-packet(SMSG_RECRUIT_DELETE_NOTIFY, 0x08ee, 6, nullptr, 20120410);
-packet(SMSG_BOOKING_VOLUNTEER_INFO, 0x08f2, 36, nullptr, 20120410);
-packet(SMSG_BOOKING_REFUSE_VOLUNTEER, 0x08fa, 6, nullptr, 20120410);
-packet(SMSG_PLAYER_FAVORITE_ITEM, 0x0908, 5, &InventoryRecv::processFavoriteItem, 20120410);
-packet(SMSG_MONSTER_HP, 0x0977, 14, &BeingRecv::processMonsterHp, 20120410);
-
-// 20120419
-if (packetVersion >= 20120419)
-{
- packet(SMSG_CHAR_CHARACTERS, 0x099d, -1, &CharServerRecv::processCharCharacters, 20120419);
-}
-
-// 20120502
-if (packetVersion >= 20120502)
-{
- packet(SMSG_RANKS_LIST, 0x097d, 288, &BeingRecv::processRanksList, 20120502);
-}
-
-// 20120618
-if (packetVersion >= 20120618)
-{
- packet(SMSG_BEING_STATUS_CHANGE, 0x0983, 29, &BeingRecv::processBeingStatusChange, 20120618);
-}
-
-// 20120604
-if (packetVersion >= 20120604)
-{
- packet(SMSG_PLAYER_SKILL_COOLDOWN_LIST, 0x0985, -1, &SkillRecv::processSkillCoolDownList, 20120604);
-}
-
-// 20120925
-if (packetVersion >= 20120925)
-{
- packet(SMSG_PLAYER_INVENTORY_ADD, 0x0990, 31, &InventoryRecv::processPlayerInventoryAdd, 20120925);
- packet(SMSG_PLAYER_INVENTORY, 0x0991, -1, &InventoryRecv::processPlayerInventory, 20120925);
- packet(SMSG_PLAYER_EQUIPMENT, 0x0992, -1, &InventoryRecv::processPlayerEquipment, 20120925);
- packet(SMSG_PLAYER_CART_ITEMS, 0x0993, -1, &InventoryRecv::processPlayerCartItems, 20120925);
- packet(SMSG_PLAYER_CART_EQUIP, 0x0994, -1, &InventoryRecv::processPlayerCartEquip, 20120925);
- packet(SMSG_PLAYER_STORAGE_ITEMS, 0x0995, -1, &InventoryRecv::processPlayerStorage, 20120925);
- packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0996, -1, &InventoryRecv::processPlayerStorageEquip, 20120925);
- packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0997, -1, &BeingRecv::processBeingViewEquipment, 20120925);
- packet(SMSG_PLAYER_EQUIP, 0x0999, 11, &InventoryRecv::processPlayerEquip, 20120925);
- packet(SMSG_PLAYER_UNEQUIP, 0x099a, 9, &InventoryRecv::processPlayerUnEquip, 20120925);
-}
-
-// 20121010
-packet(SMSG_MAP_TYPE_PROPERTY2, 0x099b, 8, &BeingRecv::processMapTypeProperty, 20121010);
-
-// 20121212
-if (packetVersion >= 20121212)
-{
- packet(SMSG_SKILL_ENTRY, 0x099f, -1, &BeingRecv::processSkillEntry, 20121212);
-}
-
-// 20130000
-if (packetVersion >= 20130000)
-{
- packet(SMSG_ITEM_DROPPED, 0x084b, 19, &ItemRecv::processItemDropped, 20130000);
-}
-
-// 20130710
-packet(SMSG_PLAYER_RANK_POINTS, 0x097e, 12, &PlayerRecv::processPlayerRankPoints, 20130710);
-
-// 20130724
-packet(SMSG_BANK_STATUS, 0x09a6, 12, &BankRecv::processBankStatus, 20130724);
-packet(SMSG_BANK_DEPOSIT, 0x09a8, 16, &BankRecv::processBankDeposit, 20130724);
-packet(SMSG_BANK_WITHDRAW, 0x09aa, 16, &BankRecv::processBankWithdraw, 20130724);
-
-// 20130731
-if (packetVersion >= 20130731)
-{
- packet(SMSG_SKILL_ENTRY, 0x09ca, -1, &BeingRecv::processSkillEntry, 20130731);
-}
-
-// 20131218
-packet(SMSG_MAIL2_MAIL_LIST_PAGE, 0x09f0, -1, &Mail2Recv::processMailListPage, 20131218);
-packet(SMSG_MAIL2_MAIL_DELETE, 0x09f6, 11, &Mail2Recv::processMailDelete, 20131218);
-
-// 20131223
-if (packetVersion >= 20131223)
-{
- packet(SMSG_BEING_ACTION2, 0x08c8, 34, &BeingRecv::processBeingAction2, 20131223);
- packet(SMSG_NPC_MARKET_OPEN, 0x09d5, -1, &MarketRecv::processMarketOpen, 20131223);
- packet(SMSG_NPC_MARKET_BUY_ACK, 0x09d7, -1, &MarketRecv::processMarketBuyAck, 20131223);
- packet(SMSG_BEING_MOVE, 0x09db, -1, &BeingRecv::processBeingMove, 20131223);
- packet(SMSG_BEING_SPAWN, 0x09dc, -1, &BeingRecv::processBeingSpawn, 20131223);
- packet(SMSG_BEING_VISIBLE, 0x09dd, -1, &BeingRecv::processBeingVisible, 20131223);
- packet(SMSG_WHISPER_RESPONSE, 0x09df, 7, &ChatRecv::processWhisperResponse, 20131223);
- packet(SMSG_SKILL_NO_DAMAGE, 0x09cb, 17, &Ea::BeingRecv::processSkillNoDamage, 20131223);
-}
-
-// 20131230
-packet(SMSG_MAIL2_SEND_RESULT, 0x09ed, 3, &Mail2Recv::processSendResult, 20131230);
-
-// 20140409
-packet(SMSG_MAIL2_REQUEST_MONEY, 0x09f2, 12, &Mail2Recv::processRequestMoney, 20140409);
-packet(SMSG_MAIL2_REQUEST_ITEMS, 0x09f4, 12, &Mail2Recv::processRequestItems, 20140409);
-
-// 20140115
-packet(SMSG_MAIL2_READ_MAIL, 0x09eb, -1, &Mail2Recv::processReadMail, 20140115);
-
-// 20140416
-packet(SMSG_MAIL2_OPEN_NEW_MAIL_WINDOW, 0x0a12, 27, &Mail2Recv::processOpenNewMailWindow, 20140416);
-
-// 20140521
-packet(SMSG_MAIL2_REMOVE_ITEM_RESULT, 0x0a07, 9, &Mail2Recv::processRemoveItemResult, 20140521);
-packet(SMSG_MAIL2_CHECK_NAME_RESULT, 0x0a14, 10, &Mail2Recv::processCheckNameResult, 20140521);
-
-// 20140613
-if (packetVersion >= 20140613)
-{
- packet(SMSG_BATTLE_UPDATE_HP, 0x0a0e, 14, &BattleGroundRecv::processBattleUpdateHp, 20140613);
-}
-
-// 20141016
-packet(SMSG_ROULETTE_OPEN_ACK, 0x0a1a, 23, &RouletteRecv::processRouletteOpenAck, 20141016);
-packet(SMSG_ROULETTE_INFO_ACK_TYPE, 0x0a1c, -1, &RouletteRecv::processRouletteInfoAckType, 20141016);
-packet(SMSG_ROULETTE_GENERATE_ACK_TYPE, 0x0a20, 21, &RouletteRecv::processRouletteGenerateAckType, 20141016);
-packet(SMSG_ROULETTE_RECV_ITEM_ACK, 0x0a22, 5, &RouletteRecv::processRouletteItemAck, 20141016);
-if (packetVersion >= 20141016)
-{
- packet(SMSG_VENDING_REPORT, 0x09e5, 18, &VendingRecv::processReport, 20141016);
- packet(SMSG_BUYINGSTORE_REPORT, 0x09e6, 22, &BuyingStoreRecv::processBuyingStoreReport, 20141016);
-}
-
-// 20141022
-if (packetVersion >= 20141022)
-{
- packet(SMSG_QUEST_LIST, 0x097a, -1, &QuestRecv::processAddQuests, 20141022);
- packet(SMSG_PLAYER_SHORTCUTS, 0x0a00, 269, &PlayerRecv::processPlayerShortcuts, 20141022);
- packet(SMSG_MAP_LOGIN_SUCCESS, 0x0a18, 14, &GameRecv::processMapLogin, 20141022);
- packet(SMSG_VENDING_OPEN_STATUS, 0x0a28, 3, &VendingRecv::processOpenStatus, 20141022);
-}
-
-// 20141112
-packet(SMSG_MAIL2_ICON, 0x09e7, 3, &Mail2Recv::processMailIcon, 20141112);
-
-// 20141119
-packet(SMSG_MAIL2_ADD_ITEM_RESULT, 0x0a05, 53, &Mail2Recv::processAddItemResult, 20141119);
-
-// 0
-// evol packets
-if (serverVersion > 0)
-{
- packet2(SMSG_NPC_COMMAND, 0x0b00, 16, &Ea::NpcRecv::processNpcCommand, 0);
- packet2(SMSG_BEING_NAME_RESPONSE2, 0x0b01, -1, &BeingRecv::processNameResponse2, 0);
- packet2(SMSG_MAP_MASK, 0x0b02, 10, &Ea::PlayerRecv::processMapMask, 0);
- packet2(SMSG_MOB_INFO, 0x0b03, -1, &BeingRecv::processMobInfo, 0);
- packet2(SMSG_BEING_MOVE3, 0x0b04, -1, &Ea::BeingRecv::processBeingMove3, 0);
- packet2(SMSG_MAP_MUSIC, 0x0b05, -1, &Ea::PlayerRecv::processMapMusic, 0);
- packet2(SMSG_NPC_CHANGETITLE, 0x0b06, -1, &Ea::NpcRecv::processChangeTitle, 0);
- packet2(SMSG_CHAT_JOIN_CHANNEL, 0x0b08, 27, &ChatRecv::processJoinChannel, 0);
- packet2(SMSG_BEING_ATTRS, 0x0b0a, -1, &BeingRecv::processBeingAttrs, 0);
- packet2(SMSG_NPC_AREA, 0x0b0b, -1, &NpcRecv::processArea, 0);
- packet2(SMSG_ONLINE_LIST, 0x0b10, -1, &PlayerRecv::processOnlineList, 0);
- packet2(SMSG_PLAYER_CLIENT_COMMAND, 0x0b16, -1, &Ea::PlayerRecv::processPlayerClientCommand, 0);
- packet2(SMSG_BEING_CHANGE_LOOKS_CARDS, 0x0b17, 19, &BeingRecv::processBeingChangeLookCards, 0);
- packet2(SMSG_ITEM_VISIBLE2, 0x0b18, 28, &ItemRecv::processItemVisible2, 0);
- packet2(SMSG_ITEM_DROPPED2, 0x0b19, 28, &ItemRecv::processItemDropped2, 0);
- packet2(SMSG_BATTLE_EMBLEM2, 0x0b1a, 34, &BattleGroundRecv::processBattleEmblem2, 0);
- packet2(SMSG_MAP_SET_TILES_TYPE, 0x0b1b, 34, &Ea::MapRecv::processSetTilesType, 0);
- packet2(SMSG_NPC_SKIN, 0x0b1c, -1, &NpcRecv::processNpcSkin, 0);
- packet2(SMSG_PLAYER_KILLED_BY, 0x0b1d, 6, &PlayerRecv::processKilledBy, 0);
- packet2(SMSG_SKILL_CASTING2, 0x0b1e, -1, &BeingRecv::processSkillCasting2, 0);
- packet2(SMSG_PLAYER_ADD_SKILL2, 0x0b1f, -1, &SkillRecv::processSkillAdd2, 0);
- packet2(SMSG_PLAYER_UPDATE_SKILL2, 0x0b20, -1, &SkillRecv::processSkillUpdate2, 0);
- packet2(SMSG_WALK_ERROR, 0x0b21, 10, &PlayerRecv::processWalkError, 0);
- packet2(SMSG_HOMUNCULUS_EXP, 0x0b22, 10, &HomunculusRecv::processHomunculusExp, 0);
- packet2(SMSG_QUEST_LIST2, 0x0b23, -1, &QuestRecv::processAddQuests2, 0);
- packet2(SMSG_QUEST_ADD2, 0x0b24, 23, &QuestRecv::processAddQuest2, 0);
- packet2(SMSG_PLAYER_ATTRS, 0x0b25, -1, &PlayerRecv::processPlayerAttrs, 0);
-
- // char server
- packet2(SMSG_CHAR_PASSWORD_RESPONSE, 0x0062, 3, &LoginRecv::processCharPasswordResponse, 0);
-}
-
-// 20150226
-if ((serverVersion >= 8 || serverVersion == 0) && packetVersion >= 20150226)
-{
- packet(SMSG_VENDING_OPEN, 0x0136, -1, &VendingRecv::processOpen, 20150226);
- packet(SMSG_VENDING_ITEMS_LIST, 0x0800, -1, &VendingRecv::processItemsList, 20150226);
- packet(SMSG_TRADE_ITEM_ADD, 0x0a09, 45, &TradeRecv::processTradeItemAdd, 20150226);
- packet(SMSG_PLAYER_STORAGE_ADD, 0x0a0a, 47, &InventoryRecv::processPlayerStorageAdd, 20150226);
- packet(SMSG_PLAYER_CART_ADD, 0x0a0b, 47, &InventoryRecv::processPlayerCartAdd, 20150226);
- packet(SMSG_PLAYER_INVENTORY_ADD, 0x0a0c, 56, &InventoryRecv::processPlayerInventoryAdd, 20150226);
- packet(SMSG_PLAYER_EQUIPMENT, 0x0a0d, -1, &InventoryRecv::processPlayerEquipment, 20150226);
- packet(SMSG_PLAYER_CART_EQUIP, 0x0a0f, -1, &InventoryRecv::processPlayerCartEquip, 20150226);
- packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0a10, -1, &InventoryRecv::processPlayerStorageEquip, 20150226);
- packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0a2d, -1, &BeingRecv::processBeingViewEquipment, 20150226);
-}
-
-// 20150513
-if (packetVersion >= 20150513)
-{
- packet(SMSG_DRESS_ROOM_OPEN, 0x0a02, 4, &PlayerRecv::processDressRoomOpen, 20150513);
- packet(SMSG_BEING_VISIBLE, 0x09ff, -1, &BeingRecv::processBeingVisible, 20150513);
- packet(SMSG_BEING_SPAWN, 0x09fe, -1, &BeingRecv::processBeingSpawn, 20150513);
- packet(SMSG_BEING_MOVE, 0x09fd, -1, &BeingRecv::processBeingMove, 20150513);
- packet(SMSG_PLAYER_HEAL, 0x0a27, 8, &PlayerRecv::processPlayerHeal, 20150513);
- packet(SMSG_HOMUNCULUS_INFO, 0x09f7, 75, &HomunculusRecv::processHomunculusInfo, 20150513);
-}
-
-// 20150805
-if (packetVersion >= 20150805)
-{
- packet(SMSG_SELECT_CART, 0x097f, -1, &InventoryRecv::processSelectCart, 20150805);
-}
-
-// 20160330
-if (packetVersion >= 20160330)
-{
- packet(SMSG_MAP_LOGIN_SUCCESS, 0x02eb, 13, &GameRecv::processMapLogin, 20160330);
-}
-
-// 20160622
-if (packetVersion >= 20160622)
-{
- packet(SMSG_GUILD_BASIC_INFO, 0x0a84, 94, &GuildRecv::processGuildBasicInfo, 20160622);
-}
-
-// 20160921
-if (packetVersion >= 20160921)
-{
- packet(SMSG_PLAYER_INVENTORY_ADD, 0x0a37, 59, &InventoryRecv::processPlayerInventoryAdd, 20160921);
- packet(SMSG_VENDING_ITEMS_LIST, 0x0800, -1, &VendingRecv::processItemsList, 20160921);
-}
-
-// 20161026
-if (packetVersion >= 20161026)
-{
- packet(SMSG_GUILD_MEMBER_LIST, 0x0aa5, -1, &GuildRecv::processGuildMemberList, 20161026);
-}
-
-// 20170315
-if (packetVersion >= 20170315)
-{
- packet(SMSG_LOGIN_DATA, 0x0ac4, -1, &LoginRecv::processLoginData, 20170315);
-}
-
-// 20160316
-if (packetVersion >= 20160316)
-{
- packet(SMSG_MAIL2_CHECK_NAME_RESULT, 0x0a51, 34, &Mail2Recv::processCheckNameResult, 20160316);
-}
-
-// 20160601
-if (packetVersion >= 20160601)
-{
- packet(SMSG_MAIL2_MAIL_LIST_PAGE, 0x0a7d, -1, &Mail2Recv::processMailListPage, 20160601);
-}
-
-// 20170329
-if (packetVersion >= 20170329)
-{
- packet(SMSG_CHAR_MAP_INFO, 0x0ac5, 156, &CharServerRecv::processCharMapInfo, 20170329);
-}
-
-// 20170502
-if (packetVersion >= 20170502)
-{
- packet(SMSG_PARTY_MEMBER_INFO, 0x0a43, 85, &PartyRecv::processPartyMemberInfo, 20170502);
- packet(SMSG_PARTY_INFO, 0x0a44, -1, &PartyRecv::processPartyInfo, 20170502);
- packet(SMSG_PARTY_MEMBER_JOB_LEVEL, 0x0abd, 10, &PartyRecv::processPartyMemberJobLevel, 20170502);
-}
-
-// 0
-// evol always packets
-packet(SMSG_SERVER_VERSION_RESPONSE, 0x7531, -1, &LoginRecv::processServerVersion, 0);
-packet(SMSG_UPDATE_HOST, 0x0063, -1, &Ea::LoginRecv::processUpdateHost, 0);
diff --git a/src/net/eathena/packetsout.inc b/src/net/eathena/packetsout.inc
deleted file mode 100644
index 3ce489a09..000000000
--- a/src/net/eathena/packetsout.inc
+++ /dev/null
@@ -1,8044 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define PACKETSOUT_VOID
-
-// 0
-packet(CMSG_SERVER_VERSION_REQUEST, 0x7530, 0, nullptr);
-
-packet(CMSG_LOGIN_REGISTER, 0x0064, 0, lclif->p->parse_CA_LOGIN);
-packet(CMSG_LOGIN_REGISTER2, 0x01dd, 0, lclif->p->parse_CA_LOGIN2);
-packet(CMSG_LOGIN_REGISTER3, 0x01fa, 0, lclif->p->parse_CA_LOGIN3);
-packet(CMSG_LOGIN_REGISTER4, 0x027c, 0, lclif->p->parse_CA_LOGIN4);
-packet(CMSG_LOGIN_REGISTER_PCBANG, 0x0277, 0, lclif->p->parse_CA_LOGIN_PCBANG);
-packet(CMSG_LOGIN_REGISTER_HAN, 0x02b0, 0, lclif->p->parse_CA_LOGIN_HAN);
-packet(CMSG_LOGIN_REGISTER_SSO, 0x0825, -1, lclif->p->parse_CA_SSO_LOGIN_REQ);
-packet(CMSG_LOGIN_REGISTER_KEY, 0x01db, 0, lclif->p->parse_CA_REQ_HASH);
-
-packet(CMSG_NAME_REQUEST, 0x0094, 6, clif->pGetCharNameRequest);
-
-packet(CMSG_CHAR_PASSWORD_CHANGE, 0x0061, 0, nullptr);
-packet(CMSG_CHAR_SERVER_CONNECT, 0x0065, 0, chr->parse_char_connect);
-packet(CMSG_CHAR_SELECT, 0x0066, 3, chr->parse_char_select);
-packet(CMSG_CHAR_CREATE, 0x0067, 0, chr->parse_make_char_0067);
-packet(CMSG_CHAR_DELETE, 0x0068, 56, chr->parse_char_delete_char_0068);
-packet(CMSG_CHAR_DELETE2_REQ, 0x0827, 6, chr->parse_char_delete2_req);
-packet(CMSG_CHAR_DELETE2_ACCEPT, 0x0829, 12, chr->parse_char_delete2_accept);
-packet(CMSG_CHAR_DELETE2_CANCEL, 0x082b, 6, chr->parse_char_delete2_cancel);
-packet(CMSG_CHAR_CREATE_PIN, 0x08ba, 10, chr->parse_char_pincode_first_pin);
-packet(CMSG_CHAR_PIN_CHECK, 0x08b8, 10, chr->parse_char_pincode_check);
-packet(CMSG_CHAR_PIN_CHANGE, 0x08be, 14, chr->parse_char_pincode_change);
-packet(CMSG_CHAR_PIN_WINDOW, 0x08c5, 6, chr->parse_char_pincode_window);
-packet(CMSG_CHAR_REQUEST_CHARS, 0x09a1, 2, chr->parse_char_request_chars);
-packet(CMSG_CHAR_CHECK_RENAME, 0x08fc, 30, chr->parse_char_rename_char);
-packet(CMSG_CHAR_CHECK_RENAME2, 0x028d, 34, chr->parse_char_rename_char2);
-packet(CMSG_CHAR_RENAME, 0x028f, 6, chr->parse_char_rename_char_confirm);
-packet(CMSG_CHAR_CHANGE_SLOT, 0x08d4, 8, chr->parse_char_move_character);
-packet(CMSG_CHAR_REQUEST_CAPTCHA, 0x07e5, 8, chr->parse_char_request_captcha);
-packet(CMSG_CHAR_CHECK_CAPTCHA, 0x07e7, 32, chr->parse_char_check_captcha);
-
-packet(CMSG_MAP_SERVER_CONNECT, 0x0072, 19, clif->pWantToConnection);
-packet(CMSG_MAP_PING, 0x007e, 6, clif->pTickSend);
-packet(CMSG_LOGIN_PING, 0x0200, 0, lclif->p->parse_CA_CONNECT_INFO_CHANGED);
-packet(CMSG_LOGIN_HASH_CHECK, 0x0204, 0, lclif->p->parse_CA_EXE_HASHCHECK);
-
-packet(CMSG_CHAR_PING, 0x0187, 56, chr->parse_char_ping);
-packet(CMSG_MAP_LOADED, 0x007d, 2, clif->pLoadEndAck);
-packet(CMSG_CLIENT_QUIT, 0x018A, 4, clif->pQuitGame);
-
-packet(CMSG_CHAT_MESSAGE, 0x008c, -1, clif->pGlobalMessage);
-packet(CMSG_CHAT_WHISPER, 0x0096, -1, clif->pWisMessage);
-packet(CMSG_CHAT_ROOM_JOIN, 0x00d9, 14, clif->pChatAddMember);
-packet2(CMSG_CHAT_JOIN_CHANNEL, 0x0b07, 0, nullptr);
-packet2(CMSG_CHAT_PART_CHANNEL, 0x0b09, 0, nullptr);
-packet(CMSG_BATTLE_CHAT_MESSAGE, 0x02db, -1, clif->pBattleChat);
-
-packet(CMSG_CREAYE_CHAT_ROOM, 0x00d5, -1, clif->pCreateChatRoom);
-packet(CMSG_LEAVE_CHAT_ROOM, 0x00e3, 2, clif->pChatLeave);
-packet(CMSG_SET_CHAT_ROOM_OPTIONS, 0x00de, -1, clif->pChatRoomStatusChange);
-packet(CMSG_SET_CHAT_ROOM_OWNER, 0x00e0, 30, clif->pChangeChatOwner);
-packet(CMSG_KICK_FROM_CHAT_ROOM, 0x00e2, 26, clif->pKickFromChat);
-
-packet(CMSG_SKILL_LEVELUP_REQUEST, 0x0112, 4, clif->pSkillUp);
-packet(CMSG_STAT_UPDATE_REQUEST, 0x00bb, 5, clif->pStatusUp);
-packet(CMSG_SKILL_USE_BEING, 0x0113, 10, clif->pUseSkillToId);
-packet(CMSG_SKILL_USE_POSITION, 0x0116, 10, clif->pUseSkillToPos);
-packet(CMSG_SKILL_USE_POSITION_MORE, 0x0190, 90, clif->pUseSkillToPosMoreInfo);
-packet(CMSG_SKILL_USE_MAP, 0x011b, 20, clif->pUseSkillMap);
-
-packet(CMSG_PLAYER_INVENTORY_USE, 0x0439, 8, clif->pUseItem);
-packet(CMSG_PLAYER_INVENTORY_DROP, 0x00a2, 6, clif->pDropItem);
-packet(CMSG_PLAYER_EQUIP, 0x00a9, 6, clif->pEquipItem);
-packet(CMSG_PLAYER_UNEQUIP, 0x00ab, 4, clif->pUnequipItem);
-packet(CMSG_PLAYER_USE_CARD, 0x017a, 4, clif->pUseCard);
-packet(CMSG_PLAYER_INSERT_CARD, 0x017c, 6, clif->pInsertCard);
-packet(CMSG_PLAYER_VIEW_EQUIPMENT, 0x02d6, 6, clif->pViewPlayerEquip);
-packet(CMSG_PLAYER_SET_EQUIPMENT_VISIBLE, 0x02d8, 10, clif->pEquipTick);
-
-packet(CMSG_ITEM_PICKUP, 0x009f, 6, clif->pTakeItem);
-packet(CMSG_PLAYER_CHANGE_DIR, 0x009b, 5, clif->pChangeDir);
-packet(CMSG_PLAYER_CHANGE_DEST, 0x0085, 5, clif->pWalkToXY);
-packet(CMSG_PLAYER_CHANGE_ACT, 0x0089, 7, clif->pActionRequest);
-packet(CMSG_PLAYER_RESTART, 0x00b2, 3, clif->pRestart);
-packet(CMSG_PLAYER_EMOTE, 0x00bf, 3, clif->pEmotion);
-packet(CMSG_PLAYER_STOP_ATTACK, 0x0118, 2, clif->pStopAttack);
-packet(CMSG_WHO_REQUEST, 0x00c1, 2, clif->pHowManyConnections);
-
-packet(CMSG_NPC_TALK, 0x0090, 7, clif->pNpcClicked);
-packet(CMSG_NPC_NEXT_REQUEST, 0x00b9, 6, clif->pNpcNextClicked);
-packet(CMSG_NPC_CLOSE, 0x0146, 6, clif->pNpcCloseClicked);
-packet(CMSG_NPC_LIST_CHOICE, 0x00b8, 7, clif->pNpcSelectMenu);
-packet(CMSG_NPC_INT_RESPONSE, 0x0143, 10, clif->pNpcAmountInput);
-packet(CMSG_NPC_STR_RESPONSE, 0x01d5, -1, clif->pNpcStringInput);
-packet(CMSG_NPC_BUY_SELL_REQUEST, 0x00c5, 7, clif->pNpcBuySellSelected);
-packet(CMSG_NPC_BUY_REQUEST, 0x00c8, -1, clif->pNpcBuyListSend);
-packet(CMSG_NPC_SELL_REQUEST, 0x00c9, -1, clif->pNpcSellListSend);
-
-packet(CMSG_TRADE_REQUEST, 0x00e4, 6, clif->pTradeRequest);
-packet(CMSG_TRADE_RESPONSE, 0x00e6, 3, clif->pTradeAck);
-packet(CMSG_TRADE_ITEM_ADD_REQUEST, 0x00e8, 8, clif->pTradeAddItem);
-packet(CMSG_TRADE_CANCEL_REQUEST, 0x00ed, 2, clif->pTradeCancel);
-packet(CMSG_TRADE_ADD_COMPLETE, 0x00eb, 2, clif->pTradeOk);
-packet(CMSG_TRADE_OK, 0x00ef, 2, clif->pTradeCommit);
-
-packet(CMSG_PARTY_CREATE, 0x00f9, 26, clif->pCreateParty);
-packet(CMSG_PARTY_CREATE2, 0x01e8, 28, clif->pCreateParty2);
-packet(CMSG_PARTY_INVITE, 0x00fc, 6, clif->pPartyInvite);
-packet(CMSG_PARTY_INVITED, 0x00ff, 10, clif->pReplyPartyInvite);
-packet(CMSG_PARTY_INVITED2, 0x02c7, 7, clif->pReplyPartyInvite2);
-packet(CMSG_PARTY_LEAVE, 0x0100, 2, clif->pLeaveParty);
-packet(CMSG_PARTY_SETTINGS, 0x0102, 6, clif->pPartyChangeOption);
-packet(CMSG_PARTY_KICK, 0x0103, 30, clif->pRemovePartyMember);
-packet(CMSG_PARTY_MESSAGE, 0x0108, -1, clif->pPartyMessage);
-packet(CMSG_PARTY_CHANGE_LEADER, 0x07da, 6, clif->pPartyChangeLeader);
-packet(CMSG_PARTY_ALLOW_INVITES, 0x02c8, 3, clif->pPartyTick);
-
-packet(CMSG_MOVE_TO_STORAGE, 0x00f3, 8, clif->pMoveToKafra);
-packet(CMSG_MOVE_FROM_STORAGE, 0x00f5, 8, clif->pMoveFromKafra);
-packet(CMSG_CLOSE_STORAGE, 0x00f7, 2, clif->pCloseKafra);
-
-packet(CMSG_MOVE_TO_CART, 0x0126, 8, clif->pPutItemToCart);
-packet(CMSG_MOVE_FROM_CART, 0x0127, 8, clif->pGetItemFromCart);
-packet(CMSG_CHANGE_CART, 0x01af, 4, clif->pChangeCart);
-packet(CMSG_MOVE_FROM_STORAGE_TO_CART, 0x0128, 8, clif->pMoveFromKafraToCart);
-packet(CMSG_MOVE_FROM_CART_TO_STORAGE, 0x0129, 8, clif->pMoveToKafraFromCart);
-
-packet(CMSG_ADMIN_ANNOUNCE, 0x0099, -1, clif->pBroadcast);
-packet(CMSG_ADMIN_LOCAL_ANNOUNCE, 0x019C, -1, clif->pLocalBroadcast);
-packet(CMSG_ADMIN_HIDE, 0x019D, 6, clif->pGMHide);
-packet(CMSG_ADMIN_KICK, 0x00CC, 6, clif->pGMKick);
-packet(CMSG_ADMIN_KICK_ALL, 0x00ce, 2, clif->pGMKickAll);
-packet(CMSG_ADMIN_RESET_PLAYER, 0x0197, 4, clif->pResetChar);
-packet(CMSG_ADMIN_GOTO, 0x01bb, 26, clif->pGMShift);
-packet(CMSG_ADMIN_RECALL, 0x01bd, 26, clif->pGMRecall);
-packet(CMSG_ADMIN_MUTE, 0x0149, 9, clif->pGMReqNoChat);
-packet(CMSG_ADMIN_MUTE_NAME, 0x0212, 26, clif->pGMRc);
-packet(CMSG_ADMIN_ID_TO_LOGIN, 0x01df, 6, clif->pGMReqAccountName);
-packet(CMSG_ADMIN_SET_TILE_TYPE, 0x0198, 8, clif->pGMChangeMapType);
-packet(CMSG_ADMIN_UNEQUIP_ALL, 0x07f5, 6, clif->pGMFullStrip);
-packet(CMSG_ADMIN_REQUEST_STATS, 0x0213, 26, clif->pCheck);
-packet(CMSG_ADMIN_MONSTER_ITEM, 0x013f, 26, clif->pGM_Monster_Item);
-
-packet(CMSG_GUILD_CHECK_MASTER, 0x014d, 2, clif->pGuildCheckMaster);
-packet(CMSG_GUILD_REQUEST_INFO, 0x014f, 6, clif->pGuildRequestInfo);
-packet(CMSG_GUILD_REQUEST_EMBLEM, 0x0151, 6, clif->pGuildRequestEmblem);
-packet(CMSG_GUILD_CHANGE_EMBLEM, 0x0153, -1, clif->pGuildChangeEmblem);
-packet(CMSG_GUILD_CHANGE_MEMBER_POS, 0x0155, -1, clif->pGuildChangeMemberPosition);
-packet(CMSG_GUILD_LEAVE, 0x0159, 54, clif->pGuildLeave);
-packet(CMSG_GUILD_EXPULSION, 0x015b, 54, clif->pGuildExpulsion);
-packet(CMSG_GUILD_BREAK, 0x015d, 42, clif->pGuildBreak);
-packet(CMSG_GUILD_CHANGE_POS_INFO, 0x0161, -1, clif->pGuildChangePositionInfo);
-packet(CMSG_GUILD_CREATE, 0x0165, 30, clif->pCreateGuild);
-packet(CMSG_GUILD_INVITE, 0x0168, 14, clif->pGuildInvite);
-packet(CMSG_GUILD_INVITE_REPLY, 0x016b, 10, clif->pGuildReplyInvite);
-packet(CMSG_GUILD_CHANGE_NOTICE, 0x016e, 186, clif->pGuildChangeNotice);
-packet(CMSG_GUILD_ALLIANCE_REQUEST, 0x0170, 14, clif->pGuildRequestAlliance);
-packet(CMSG_GUILD_ALLIANCE_REPLY, 0x0172, 10, clif->pGuildReplyAlliance);
-packet(CMSG_GUILD_MESSAGE, 0x017e, -1, clif->pGuildMessage);
-packet(CMSG_GUILD_OPPOSITION, 0x0180, 6, clif->pGuildOpposition);
-packet(CMSG_GUILD_ALLIANCE_DELETE, 0x0183, 10, clif->pGuildDelAlliance);
-
-packet(CMSG_SOLVE_CHAR_NAME, 0x0193, 6, clif->pSolveCharName);
-packet(CMSG_IGNORE_ALL, 0x00d0, 3, clif->pPMIgnoreAll);
-packet(CMSG_IGNORE_NICK, 0x00cf, 27, clif->pPMIgnore);
-packet(CMSG_REQUEST_IGNORE_LIST, 0x00d3, 2, clif->pPMIgnoreList);
-packet(CMSG_SET_SHORTCUTS, 0x02ba, 11, clif->pHotkey);
-packet(CMSG_NPC_COMPLETE_PROGRESS_BAR, 0x02f1, 2, clif->pProgressbar);
-packet(CMSG_NPC_PRODUCE_MIX, 0x018e, 10, clif->pProduceMix);
-packet(CMSG_NPC_COOKING, 0x025b, 6, clif->pCooking);
-packet(CMSG_NPC_REPAIR, 0x01fd, 15, clif->pRepairItem);
-packet(CMSG_NPC_REFINE, 0x0222, 6, clif->pWeaponRefine);
-packet(CMSG_NPC_IDENTIFY, 0x0178, 4, clif->pItemIdentify);
-packet(CMSG_NPC_SELECT_ARROW, 0x01ae, 4, clif->pSelectArrow);
-packet(CMSG_NPC_SELECT_AUTO_SPELL, 0x01ce, 6, clif->pAutoSpell);
-
-packet(CMSG_PLAYER_MAPMOVE, 0x0140, 22, clif->pMapMove);
-packet(CMSG_REMOVE_OPTION, 0x012a, 2, clif->pRemoveOption);
-packet(CMSG_PLAYER_SET_MEMO, 0x011d, 2, clif->pRequestMemo);
-
-packet(CMSG_PET_CATCH, 0x019f, 6, clif->pCatchPet);
-packet(CMSG_PET_SEND_MESSAGE, 0x01a9, 6, clif->pSendEmotion);
-packet(CMSG_PET_SET_NAME, 0x01a5, 26, clif->pChangePetName);
-packet(CMSG_PET_SELECT_EGG, 0x01a7, 4, clif->pSelectEgg);
-packet(CMSG_PET_MENU_ACTION, 0x01a1, 3, clif->pPetMenu);
-packet2(CMSG_PET_TALK, 0x0b0c, 0, nullptr);
-packet2(CMSG_PET_EMOTE, 0x0b0d, 0, nullptr);
-packet2(CMSG_PET_MOVE_TO, 0x0b11, 0, nullptr);
-packet2(CMSG_PET_DIRECTION, 0x0b12, 0, nullptr);
-
-packet(CMSG_MERCENARY_ACTION, 0x029f, 3, clif->pmercenary_action);
-packet(CMSG_HOMUNCULUS_SET_NAME, 0x0231, 26, clif->pChangeHomunculusName);
-packet(CMSG_HOMMERC_MOVE_TO_MASTER, 0x0234, 6, clif->pHomMoveToMaster);
-packet(CMSG_HOMMERC_MOVE_TO, 0x0232, 9, clif->pHomMoveTo);
-packet(CMSG_HOMMERC_ATTACK, 0x0233, 11, clif->pHomAttack);
-packet2(CMSG_HOMMERC_TALK, 0x0b13, 0, nullptr);
-packet2(CMSG_HOMMERC_EMOTE, 0x0b14, 0, nullptr);
-packet2(CMSG_HOMMERC_DIRECTION, 0x0b15, 0, nullptr);
-
-packet(CMSG_DORI_DORI, 0x01e7, 2, clif->pNoviceDoriDori);
-packet(CMSG_EXPLOSION_SPIRITS, 0x01ed, 2, clif->pNoviceExplosionSpirits);
-packet(CMSG_PVP_INFO, 0x020f, 10, clif->pPVPInfo);
-packet(CMSG_PLAYER_AUTO_REVIVE, 0x0292, 2, clif->pAutoRevive);
-packet(CMSG_QUEST_ACTIVATE, 0x02b6, 7, clif->pquestStateAck);
-
-packet(CMSG_MAIL_REFRESH_INBOX, 0x023f, 2, clif->pMail_refreshinbox);
-packet(CMSG_MAIL_READ_MESSAGE, 0x0241, 6, clif->pMail_read);
-packet(CMSG_MAIL_GET_ATTACH, 0x0244, 6, clif->pMail_getattach);
-packet(CMSG_MAIL_DELETE_MESSAGE, 0x0243, 6, clif->pMail_delete);
-packet(CMSG_MAIL_RETURN_MESSAGE, 0x0273, 30, clif->pMail_return);
-packet(CMSG_MAIL_SET_ATTACH, 0x0247, 8, clif->pMail_setattach);
-packet(CMSG_MAIL_RESET_ATTACH, 0x0246, 4, clif->pMail_winopen);
-packet(CMSG_MAIL_SEND, 0x0248, -1, clif->pMail_send);
-
-packet(CMSG_FAMILY_ASK_FOR_CHILD, 0x01f9, 6, clif->pAdopt_request);
-packet(CMSG_FAMILY_ASK_FOR_CHILD_REPLY, 0x01f7, 14, clif->pAdopt_reply);
-
-packet(CMSG_FRIENDS_ADD_PLAYER, 0x0202, 26, clif->pFriendsListAdd);
-packet(CMSG_FRIENDS_REQUEST_ACK, 0x0208, 14, clif->pFriendsListReply);
-packet(CMSG_FRIENDS_DELETE_PLAYER, 0x0203, 10, clif->pFriendsListRemove);
-
-packet(CMSG_AUCTION_CANCEL_REG, 0x024b, 4, clif->pAuction_cancelreg);
-packet(CMSG_AUCTION_SET_ITEM, 0x024c, 8, clif->pAuction_setitem);
-packet(CMSG_AUCTION_REGISTER, 0x024d, 12, clif->pAuction_register);
-packet(CMSG_AUCTION_CANCEL, 0x024e, 6, clif->pAuction_cancel);
-packet(CMSG_AUCTION_CLOSE, 0x025d, 6, clif->pAuction_close);
-packet(CMSG_AUCTION_BID, 0x024f, 10, clif->pAuction_bid);
-packet(CMSG_AUCTION_SEARCH, 0x0251, 34, clif->pAuction_search);
-packet(CMSG_AUCTION_BUY_SELL, 0x025c, 4, clif->pAuction_buysell);
-
-packet(CMSG_VENDING_CLOSE, 0x012e, 2, clif->pCloseVending);
-packet(CMSG_VENDING_LIST_REQ, 0x0130, 6, clif->pVendingListReq);
-packet(CMSG_VENDING_BUY, 0x0134, -1, clif->pPurchaseReq);
-packet(CMSG_VENDING_BUY2, 0x0801, -1, clif->pPurchaseReq2);
-packet(CMSG_VENDING_CREATE_SHOP, 0x01b2, -1, clif->pOpenVending);
-
-
-packet(CMSG_MERGE_ITEM_ACK, 0x096e, -1, clif->ackmergeitems);
-packet(CMSG_MERGE_ITEM_CANCEL, 0x0974, 2, clif->cancelmergeitem);
-
-packet2(CMSG_SET_STATUS, 0x0b0e, 0, nullptr);
-
-packet2(CMSG_ONLINE_LIST, 0x0b0f, 0, nullptr);
-
-packet2(CMSG_PLAYER_INVENTORY_USE2, 0x0b26, 6, nullptr);
-
-#ifndef PACKETS_UPDATE
-// 0
-packet(CMSG_ALCHEMIST_RANKS, 0x0000, 0, nullptr);
-packet(CMSG_BLACKSMITH_RANKS, 0x0000, 0, nullptr);
-packet(CMSG_PK_RANKS, 0x0000, 0, nullptr);
-packet(CMSG_TAEKWON_RANKS, 0x0000, 0, nullptr);
-packet(CMSG_BUYINGSTORE_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_BUYINGSTORE_CREATE, 0x0000, 0, nullptr);
-packet(CMSG_BUYINGSTORE_SELL, 0x0000, 0, nullptr);
-packet(CMSG_SEARCHSTORE_SEARCH, 0x0000, 0, nullptr);
-packet(CMSG_SEARCHSTORE_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_HOMUNCULUS_MENU, 0x0000, 0, nullptr);
-packet(CMSG_SEARCHSTORE_CLICK, 0x0000, 0, nullptr);
-packet(CMSG_BUYINGSTORE_OPEN, 0x0000, 0, nullptr);
-packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0000, 0, nullptr);
-packet(CMSG_QUICK_IDENTIFY_ITEM, 0x0000, 0, nullptr);
-packet(CMSG_PARTY_INVITE2, 0x0000, 0, nullptr);
-packet(CMSG_SKILL_FEEL_SAVE_OK, 0x0000, 0, nullptr);
-packet(CMSG_SKILL_SELECT_MENU, 0x0000, 0, nullptr);
-packet(CMSG_PLAYER_LESS_EFFECTS, 0x0000, 0, nullptr);
-packet(CMSG_SHORTCUTS_ROW_SHIFT, 0x0000, 0, nullptr);
-packet(CMSG_NPC_SHOP_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_NPC_MARKET_BUY, 0x0000, 0, nullptr);
-packet(CMSG_NPC_MARKET_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_BANK_DEPOSIT, 0x0000, 0, nullptr);
-packet(CMSG_BANK_WITHDRAW, 0x0000, 0, nullptr);
-packet(CMSG_BANK_CHECK, 0x0000, 0, nullptr);
-packet(CMSG_BANK_OPEN, 0x0000, 0, nullptr);
-packet(CMSG_BANK_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_REQUEST_RANKS, 0x0000, 0, nullptr);
-packet(CMSG_PLAYER_FAVORITE_ITEM, 0x0000, 0, nullptr);
-packet(CMSG_BATTLE_REGISTER, 0x0000, 0, nullptr);
-packet(CMSG_BATTLE_REVOKE, 0x0000, 0, nullptr);
-packet(CMSG_BATTLE_BEGIN_ACK, 0x0000, 0, nullptr);
-packet(CMSG_BATTLE_CHECK_STATE, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_BUY, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_BUY1, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_OPEN, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_REQUEST_TAB, 0x0000, 0, nullptr);
-packet(CMSG_NPC_CASH_SHOP_SCHEDULE, 0x0000, 0, nullptr);
-packet(CMSG_GUILD_INVITE2, 0x0000, 0, nullptr);
-packet(CMSG_STORAGE_PASSWORD, 0x0000, 0, nullptr);
-packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0000, 0, nullptr);
-packet(CMSG_SELECT_CART, 0x0000, 0, nullptr);
-packet(CMSG_ROULETTE_INFO, 0x0000, 0, nullptr);
-packet(CMSG_ROULETTE_GENERATE, 0x0000, 0, nullptr);
-packet(CMSG_ROULETTE_OPEN, 0x0000, 0, nullptr);
-packet(CMSG_ROULETTE_CLOSE, 0x0000, 0, nullptr);
-packet(CMSG_ROULETTE_RECV_ITEM, 0x0000, 0, nullptr);
-packet(CMSG_ADMIN_RECALL2, 0x0000, 0, nullptr);
-packet(CMSG_ADMIN_REMOVE2, 0x0000, 0, nullptr);
-packet(CMSG_BOOKING_REGISTER_REQ, 0x0000, 0, nullptr);
-packet(CMSG_BOOKING_SEARCH_REQ, 0x0000, 0, nullptr);
-packet(CMSG_BOOKING_DELETE_REQ, 0x0000, 0, nullptr);
-packet(CMSG_BOOKING_UPDATE_REQ, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_CHECK_NAME, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_OPEN_WRITE_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_ADD_ITEM_TO_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_REMOVE_ITEM_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_SEND_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_NEXT_PAGE, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_READ_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_DELETE_MAIL, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_REQUEST_MONEY, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_REQUEST_ITEMS, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_REFRESH_MAIL_LIST, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_OPEN_MAILBOX, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_CLOSE_MAILBOX, 0x0000, 0, nullptr);
-packet(CMSG_MAIL2_CANCEL_WRITE_MAIL, 0x0000, 0, nullptr);
-#else
-// 20040713
-if (packetVersion >= 20040713)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x009b, 13, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x009f, 10, clif->pTakeItem);
-}
-
-// 20040726
-if (packetVersion >= 20040726)
-{
- packet(CMSG_CHAT_MESSAGE, 0x00f3, -1, clif->pGlobalMessage);
- packet(CMSG_MAP_PING, 0x00f7, 10, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x009f, 13, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0094, 10, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0072, 14, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0113, 16, clif->pMoveToKafra);
-}
-
-// 20040809
-if (packetVersion >= 20040809)
-{
- packet(CMSG_MAP_PING, 0x00f7, 13, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x009f, 12, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0094, 13, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0072, 17, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0113, 23, clif->pMoveToKafra);
-}
-
-// 20040906
-if (packetVersion >= 20040906)
-{
- packet(CMSG_CHAT_MESSAGE, 0x009f, -1, clif->pGlobalMessage);
- packet(CMSG_MAP_PING, 0x0116, 11, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x00f3, 10, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0113, 11, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0094, 17, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x007e, 19, clif->pMoveToKafra);
-}
-
-// 20040920
-if (packetVersion >= 20040920)
-{
- packet(CMSG_MAP_PING, 0x0116, 14, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x00f3, 18, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0113, 14, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0094, 19, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x007e, 25, clif->pMoveToKafra);
-}
-
-// 20041005
-if (packetVersion >= 20041005)
-{
- packet(CMSG_MAP_PING, 0x0116, 10, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x00f3, 13, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0113, 10, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0094, 14, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x007e, 16, clif->pMoveToKafra);
-}
-
-// 20041025
-if (packetVersion >= 20041025)
-{
- packet(CMSG_MAP_PING, 0x0116, 9, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x00f3, 15, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0113, 9, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0094, 12, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x007e, 13, clif->pMoveToKafra);
-}
-
-// 20041108
-if (packetVersion >= 20041108)
-{
- packet(CMSG_ALCHEMIST_RANKS, 0x0218, 2, clif->pAlchemist);
- packet(CMSG_BLACKSMITH_RANKS, 0x0217, 2, clif->pBlacksmith);
-}
-
-// 20041115
-if (packetVersion >= 20041115)
-{
- packet(CMSG_PLAYER_LESS_EFFECTS, 0x021d, 6, clif->pLessEffect);
-}
-
-// 20041129
-if (packetVersion >= 20041129)
-{
- packet(CMSG_CHAT_MESSAGE, 0x0085, -1, clif->pGlobalMessage);
- packet(CMSG_MAP_PING, 0x0089, 7, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x00f3, 8, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00a2, 7, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 12, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 14, clif->pMoveToKafra);
-}
-
-// 20050110
-if (packetVersion >= 20050110)
-{
- packet(CMSG_CHAT_MESSAGE, 0x00f3, -1, clif->pGlobalMessage);
- packet(CMSG_CLOSE_STORAGE, 0x0193, 2, clif->pCloseKafra);
- packet(CMSG_MAP_PING, 0x0089, 9, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 23, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 9, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 20, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 20, clif->pMoveToKafra);
-}
-
-// 20050328
-if (packetVersion >= 20050328)
-{
- packet(CMSG_TAEKWON_RANKS, 0x0225, 2, clif->pTaekwon);
-}
-
-// 20050425
-if (packetVersion >= 20050425)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x022d, 5, clif->pHomMenu);
-}
-
-// 20050509
-if (packetVersion >= 20050509)
-{
- packet(CMSG_MAP_PING, 0x0089, 8, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 11, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 8, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 10, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 14, clif->pMoveToKafra);
-}
-
-// 20050530
-if (packetVersion >= 20050530)
-{
- packet(CMSG_PK_RANKS, 0x0237, 2, clif->pRankingPk);
-}
-
-// 20050628
-if (packetVersion >= 20050628)
-{
- packet(CMSG_MAP_PING, 0x0089, 13, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 17, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 13, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 12, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 31, clif->pMoveToKafra);
-}
-
-// 20050718
-if (packetVersion >= 20050718)
-{
- packet(CMSG_MAP_PING, 0x0089, 7, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 11, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 7, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 21, clif->pMoveToKafra);
-}
-
-// 20050719
-if (packetVersion >= 20050719)
-{
- packet(CMSG_MAP_PING, 0x0089, 13, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 17, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 13, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 31, clif->pMoveToKafra);
-}
-
-// 20050817
-if (packetVersion >= 20050817)
-{
- packet(CMSG_SKILL_FEEL_SAVE_OK, 0x0254, 3, clif->pFeelSaveOk);
-}
-
-// 20060327
-if (packetVersion >= 20060327)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 12, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 17, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 23, clif->pMoveToKafra);
-}
-
-// 20070108
-if (packetVersion >= 20070108)
-{
- packet(CMSG_MAP_PING, 0x0089, 11, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 14, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 11, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 19, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 17, clif->pMoveToKafra);
-}
-
-// 20070212
-if (packetVersion >= 20070212)
-{
- packet(CMSG_MAP_PING, 0x0089, 8, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 11, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 8, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 10, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 14, clif->pMoveToKafra);
-}
-
-// 20070227
-if (packetVersion >= 20070227)
-{
- packet(CMSG_PARTY_INVITE2, 0x02c4, 26, clif->pPartyInvite2);
-}
-
-// 20080827
-if (packetVersion >= 20080827)
-{
- packet(CMSG_MAP_PING, 0x0089, 11, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0085, 10, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x00f5, 11, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0116, 17, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0094, 19, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x00a7, 9, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x008c, 14, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0113, 25, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x00a2, 14, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x00f7, 17, clif->pMoveFromKafra);
-}
-
-// 20080910
-if (packetVersion >= 20080910)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x0436, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0437, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0438, 10, clif->pUseSkillToId);
-}
-
-// 20081210
-if (packetVersion >= 20081210)
-{
- packet(CMSG_SKILL_SELECT_MENU, 0x0443, 8, clif->pSkillSelectMenu);
-}
-
-// 20090603
-if (packetVersion >= 20090603)
-{
- packet(CMSG_PARTY_SETTINGS, 0x07d7, 8, clif->pPartyChangeOption);
-}
-
-// 20091222
-if (packetVersion >= 20091222)
-{
- packet(CMSG_BOOKING_DELETE_REQ, 0x0806, 4, clif->pPartyBookingDeleteReq);
-}
-
-// 20091229
-if (packetVersion >= 20091229)
-{
- packet(CMSG_BOOKING_SEARCH_REQ, 0x0803, 14, clif->pPartyBookingSearchReq);
- packet(CMSG_BOOKING_DELETE_REQ, 0x0806, 2, clif->pPartyBookingDeleteReq);
- packet(CMSG_BOOKING_UPDATE_REQ, 0x0808, 14, clif->pPartyBookingUpdateReq);
-}
-
-// 20100303
-if (packetVersion >= 20100303)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x0811, -1, clif->pReqOpenBuyingStore);
-}
-
-// 20100420
-if (packetVersion >= 20100420)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0815, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0819, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0817, 6, clif->pReqClickBuyingStore);
-}
-
-// 20100601
-if (packetVersion >= 20100601)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0835, -1, clif->pSearchStoreInfo);
-}
-
-// 20100608
-if (packetVersion >= 20100608)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x083c, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0838, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLOSE, 0x083b, 2, clif->pCloseSearchStoreInfo);
-}
-
-// 20100803
-if (packetVersion >= 20100803)
-{
- packet(CMSG_ADMIN_RECALL2, 0x0842, 6, clif->pGMRecall2);
- packet(CMSG_ADMIN_REMOVE2, 0x0843, 6, clif->pGMRemove2);
-}
-
-// 20101124
-if (packetVersion >= 20101124)
-{
- packet(CMSG_MAP_PING, 0x0360, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0361, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0362, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0363, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0364, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0367, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x035f, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x0368, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0366, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0369, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0365, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0436, 19, clif->pWantToConnection);
- packet(CMSG_NPC_CASH_SHOP_BUY, 0x0288, -1, clif->pcashshop_buy);
-}
-
-// 20110614
-if (packetVersion >= 20110614)
-{
- packet(CMSG_NPC_CASH_SHOP_SCHEDULE, 0x08c9, 2, clif->pCashShopSchedule);
-}
-
-// 20110718
-if (packetVersion >= 20110718)
-{
- packet(CMSG_NPC_CASH_SHOP_CLOSE, 0x084a, 2, clif->pCashShopClose);
- packet(CMSG_NPC_CASH_SHOP_OPEN, 0x0844, 2, clif->pCashShopOpen);
- packet(CMSG_NPC_CASH_SHOP_REQUEST_TAB, 0x0846, 4, clif->pCashShopReqTab);
- packet(CMSG_NPC_CASH_SHOP_BUY1, 0x0848, -1, clif->pCashShopBuy);
-}
-
-// 20111005
-if (packetVersion >= 20111005)
-{
- packet(CMSG_NAME_REQUEST, 0x088a, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x0817, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0366, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0815, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0885, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0893, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08ad, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0364, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0369, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0838, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0897, 8, clif->pMoveFromKafra);
- packet(CMSG_BATTLE_REGISTER, 0x08d7, 28, clif->pBGQueueRegister);
- packet(CMSG_BATTLE_REVOKE, 0x08da, 26, clif->pBGQueueRevokeReq);
- packet(CMSG_BATTLE_BEGIN_ACK, 0x08e0, 51, clif->pBGQueueBattleBeginAck);
- packet(CMSG_BATTLE_CHECK_STATE, 0x090a, 26, clif->pBGQueueCheckState);
-}
-
-// 20111102
-if (packetVersion >= 20111102)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x08ab, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0835, 19, clif->pWantToConnection); // non PACKETVER_RE
- packet(CMSG_MAP_SERVER_CONNECT, 0x083c, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0899, 6, clif->pTickSend); // non PACKETVER_RE
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x088b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0892, 5, clif->pWalkToXY); // non PACKETVER_RE
- packet(CMSG_BUYINGSTORE_CLOSE, 0x089b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08aa, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x089e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0436, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a2, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a1, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0898, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0835, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x02c4, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x088d, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0281, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0811, -1, clif->pItemListWindowSelected);
-}
-
-// 20120307
-if (packetVersion >= 20120307)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0884, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086A, 19, clif->pWantToConnection);
- packet(CMSG_CHAR_CREATE, 0x0970, 31, chr->parse_char_create_new_char);
- packet(CMSG_MAP_PING, 0x0887, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0890, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0865, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x02c4, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x093b, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0885, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0369, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0963, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0863, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x0889, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0929, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0861, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0870, -1, clif->pItemListWindowSelected);
-}
-
-// 20120410
-if (packetVersion >= 20120410)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094b, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0886, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0871, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0938, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0891, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x086c, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x0889, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0884, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089c, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a6, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0885, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_FAVORITE_ITEM, 0x0907, 5, clif->pMoveItem);
- packet(CMSG_PARTY_INVITE2, 0x091c, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0961, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0945, -1, clif->pItemListWindowSelected);
-}
-
-// 20120418
-if (packetVersion >= 20120418)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_GUILD_INVITE2, 0x0916, 26, clif->pGuildInvite2);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x08a8, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
-}
-
-// 20120502
-if (packetVersion >= 20120502)
-{
- packet(CMSG_SELECT_CART, 0x0980, 7, clif->pSelectCart);
-}
-
-// 20120702
-if (packetVersion >= 20120702)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x0363, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0364, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0960, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x089f, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089e, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a0, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0889, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0953, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x094a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085a, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0863, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0886, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0861, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0862, 10, clif->pUseSkillToId);
-}
-
-// 20120710
-if (packetVersion >= 20120710)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0886, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
-}
-
-// 20120716
-if (packetVersion >= 20120716)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0811, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0940, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0819, 36, clif->pStoragePassword);
-}
-
-// 20120925
-if (packetVersion >= 20120925)
-{
- packet(CMSG_PLAYER_EQUIP, 0x0998, 8, clif->pEquipItem);
-}
-
-// 20130320
-if (packetVersion >= 20130320)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x094e, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0888, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0363, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0897, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0933, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0438, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ac, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085a, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092e, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0881, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0886, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0898, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x088e, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0959, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0922, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094c, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x086f, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0365, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0874, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x035f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x093f, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0938, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x089b, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x086d, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0947, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0868, -1, clif->pItemListWindowSelected);
-}
-
-// 20130320
-if (packetVersion >= 20130320)
-{
- packet(CMSG_BANK_DEPOSIT, 0x09a7, 10, clif->pBankDeposit);
- packet(CMSG_BANK_WITHDRAW, 0x09a9, 10, clif->pBankWithdraw);
- packet(CMSG_BANK_CHECK, 0x09ab, 6, clif->pBankCheck);
-}
-
-// 20130417
-if (packetVersion >= 20130417)
-{
- packet(CMSG_BANK_OPEN, 0x09b6, 6, clif->pBankOpen);
- packet(CMSG_BANK_CLOSE, 0x09b8, 6, clif->pBankClose);
-}
-
-// 20130515
-if (packetVersion >= 20130515)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0943, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0362, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x08a1, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0944, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0887, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0962, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08ac, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0931, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0947, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x093e, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0963, -1, clif->pItemListWindowSelected);
-}
-
-// 20130522
-if (packetVersion >= 20130522)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x095b, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a9, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x07ec, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0925, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x095e, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089c, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a3, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0964, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x08aa, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0360, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x086e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x08a6, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08a2, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0811, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0952, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0369, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0362, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x093e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x087e, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0368, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0926, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0874, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x095c, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0950, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x088e, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x086a, -1, clif->pItemListWindowSelected);
-}
-
-// 20130529
-if (packetVersion >= 20130529)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0918, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0919, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0897, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0951, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0895, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0938, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0941, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0876, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0964, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0863, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0890, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0917, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0936, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0937, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0877, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x085a, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0957, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0892, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x023b, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08a7, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0869, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0438, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x08a8, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0956, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0958, -1, clif->pItemListWindowSelected);
-}
-
-// 20130605
-if (packetVersion >= 20130605)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_REQUEST_RANKS, 0x097c, 4, clif->pRanklist);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0883, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
-}
-
-// 20130612
-if (packetVersion >= 20130612)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x0919, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x087e, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0940, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x093a, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0964, 36, clif->pStoragePassword);
-}
-
-// 20130618
-if (packetVersion >= 20130618)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0281, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095b, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0930, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a6, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0962, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0885, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x094f, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0363, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x088e, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085a, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0944, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0889, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x096a, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0891, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0945, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0953, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0890, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0936, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0862, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x02c4, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0917, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0932, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0951, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0887, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0864, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0942, -1, clif->pItemListWindowSelected);
-}
-
-// 20130626
-if (packetVersion >= 20130626)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088c, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094d, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x088b, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0921, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0365, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08ab, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0817, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0960, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0952, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0895, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0930, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08a5, -1, clif->pItemListWindowSelected);
-}
-
-// 20130703
-if (packetVersion >= 20130703)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0930, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0360, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0202, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x094a, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0873, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
-}
-
-// 20130807
-if (packetVersion >= 20130807)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0887, 36, clif->pStoragePassword);
-}
-
-// 20130814
-if (packetVersion >= 20130814)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0889, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0368, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x088a, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x088c, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0926, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0202, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0962, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0941, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x093a, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0937, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0874, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0887, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0835, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0923, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0281, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0868, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0873, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0895, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0958, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x095f, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0936, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0947, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0927, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0885, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08a4, -1, clif->pItemListWindowSelected);
-}
-
-// 20130814
-if (packetVersion >= 20130814)
-{
- packet(CMSG_ADMIN_MONSTER_ITEM, 0x09ce, 102, clif->pGM_Monster_Item);
-}
-
-// 20131211
-if (packetVersion >= 20131211)
-{
- packet(CMSG_MAIL2_CLOSE_MAILBOX, 0x09e9, 2, clif->pRodexCloseMailbox);
-}
-
-// 20131218
-if (packetVersion >= 20131218)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x092f, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0947, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x022d, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08ab, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0811, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_NPC_SHOP_CLOSE, 0x09d4, 2, clif->pNPCShopClosed);
- packet(CMSG_NPC_MARKET_BUY, 0x09d6, -1, clif->pNPCMarketPurchase);
- packet(CMSG_NPC_MARKET_CLOSE, 0x09d8, 2, clif->pNPCMarketClosed);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x085c, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
-}
-if (packetVersion >= 20131218)
-{
- packet(CMSG_MAIL2_NEXT_PAGE, 0x09ee, 11, clif->pRodexNextMaillist);
- packet(CMSG_MAIL2_DELETE_MAIL, 0x09f5, 11, clif->pRodexDeleteMail);
- packet(CMSG_MAIL2_REFRESH_MAIL_LIST, 0x09ef, 11, clif->pRodexRefreshMaillist);
-}
-
-// 20131223
-if (packetVersion >= 20131223)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x08a4, 36, clif->pStoragePassword);
-}
-
-if (packetVersion >= 20131223)
-{
- packet(CMSG_MAIL2_READ_MAIL, 0x09ea, 11, clif->pRodexReadMail);
-}
-
-// 20131230
-if (packetVersion >= 20131230)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x0365, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x087f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093d, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0949, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087b, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0969, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x02C4, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x0926, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094A, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0860, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION, 0x091E, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x092A, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0369, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_TO_STORAGE, 0x0968, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x035f, 5, clif->pWalkToXY);
- packet(CMSG_MAP_PING, 0x0438, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0895, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0871, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x089c, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x08a9, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0943, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x096a, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0898, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x091d, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x022d, -1, clif->pItemListWindowSelected);
-}
-if (packetVersion >= 20131230)
-{
- packet(CMSG_MAIL2_SEND_MAIL, 0x09ec, -1, clif->pRodexSendMail);
-}
-
-// 20140108
-if (packetVersion == 20140108)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0936, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140115
-if (packetVersion == 20140115)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0361, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0367, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x0802, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0865, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x0887, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x088a, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x088e, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a7, 5, clif->pChangeDir);
- packet(CMSG_HOMUNCULUS_MENU, 0x092d, 5, clif->pHomMenu);
- packet(CMSG_ITEM_PICKUP, 0x0940, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x095b, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x095d, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0965, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0966, 19, clif->pWantToConnection);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x096a, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20140122
-if (packetVersion == 20140122)
-{
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0360, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x07ec, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0811, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0863, 5, clif->pHomMenu);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0870, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0871, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x0872, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x088c, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0890, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0893, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0899, -1, clif->pSearchStoreInfo);
- packet(CMSG_NAME_REQUEST, 0x089d, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x08a2, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08aa, 6, clif->pDropItem);
- packet(CMSG_MAP_PING, 0x0917, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x091a, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0925, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x092f, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0940, 10, clif->pUseSkillToId);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0941, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_PICKUP, 0x0942, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x094b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094c, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0950, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0952, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0955, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0957, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x095d, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x095f, -1, clif->pReqOpenBuyingStore);
-}
-
-// 20140129
-if (packetVersion == 20140129)
-{
- packet(CMSG_SKILL_USE_BEING, 0x0281, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0361, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0367, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07ec, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0802, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x083c, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0884, 5, clif->pHomMenu);
- packet(CMSG_ITEM_PICKUP, 0x0885, 6, clif->pTakeItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0889, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0921, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0924, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x092c, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x094d, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0958, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0961, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140129
-if (packetVersion >= 20140129)
-{
- packet(CMSG_SHORTCUTS_ROW_SHIFT, 0x0a01, 3, clif->pHotkeyRowShift);
-}
-
-// 20140205
-if (packetVersion == 20140205)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0938, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140212
-if (packetVersion == 20140212)
-{
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x02c4, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0369, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0438, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x086e, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x0874, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0877, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0878, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087e, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0888, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x088c, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x089d, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x089e, -1, clif->pSearchStoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x08a0, 36, clif->pStoragePassword);
- packet(CMSG_PARTY_INVITE2, 0x08a1, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08a7, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ac, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08ad, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0919, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091b, 26, clif->pFriendsListAdd);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0928, 6, clif->pSolveCharName);
- packet(CMSG_MAP_PING, 0x0930, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0934, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0936, 4, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x093d, 19, clif->pWantToConnection);
- packet(CMSG_HOMUNCULUS_MENU, 0x0944, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x094e, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0952, 6, clif->pGetCharNameRequest);
- packet(CMSG_ITEM_PICKUP, 0x0953, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0960, 2, clif->pReqCloseBuyingStore);
-}
-
-// 20140212
-if (packetVersion >= 20140212)
-{
- packet(CMSG_MAIL2_OPEN_MAILBOX, 0x09e8, 11, clif->pRodexOpenMailbox);
-}
-
-// 20140219
-if (packetVersion == 20140219)
-{
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0202, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0360, 4, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0364, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_PICKUP, 0x0802, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0838, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x085c, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085d, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x085f, 6, clif->pGetCharNameRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0860, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0868, 36, clif->pStoragePassword);
- packet(CMSG_PARTY_INVITE2, 0x086f, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x087c, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x0889, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0897, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0898, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089f, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a6, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08aa, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08ac, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0921, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0927, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0939, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0946, 19, clif->pWantToConnection);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0949, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0953, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x095a, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_PING, 0x0961, 6, clif->pTickSend);
-}
-
-// 20140226
-if (packetVersion == 20140226)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0361, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0362, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0364, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0811, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_HOMUNCULUS_MENU, 0x0867, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0877, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0887, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0894, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0895, 8, clif->pMoveFromKafra);
- packet(CMSG_MOVE_TO_STORAGE, 0x091a, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0921, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0931, 4, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0941, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0962, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0964, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0969, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140305
-if (packetVersion == 20140305)
-{
- packet(CMSG_ITEM_PICKUP, 0x0202, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0361, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0436, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0438, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x07e4, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0815, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0878, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0934, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x095e, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140312
-if (packetVersion == 20140312)
-{
- packet(CMSG_SKILL_USE_BEING, 0x0202, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x023b, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0366, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085e, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x086f, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0889, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x088c, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088d, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x088e, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0891, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0894, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x089b, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x089d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089e, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x08a6, 4, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a9, 26, clif->pFriendsListAdd);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08ad, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x091b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x091c, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x091e, 5, clif->pHomMenu);
- packet(CMSG_ITEM_PICKUP, 0x092a, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0948, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x094a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x094b, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094c, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0957, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x095d, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x095e, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x0966, 8, clif->pMoveToKafra);
-}
-
-// 20140326
-if (packetVersion == 20140326)
-{
- packet(CMSG_NAME_REQUEST, 0x0362, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0365, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x07ec, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x083c, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0865, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0867, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0869, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086b, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087c, 5, clif->pWalkToXY);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x087e, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION, 0x087f, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0887, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0898, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x08aa, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08ac, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08ad, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0918, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0928, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_STORAGE_PASSWORD, 0x092a, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x093d, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0942, 5, clif->pHomMenu);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0945, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0946, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0956, 5, clif->pChangeDir);
- packet(CMSG_MOVE_TO_STORAGE, 0x0959, 8, clif->pMoveToKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x095a, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x095c, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0969, 10, clif->pUseSkillToId);
-}
-
-// 20140326
-if (packetVersion >= 20140326)
-{
- packet(CMSG_MAIL2_REQUEST_MONEY, 0x09f1, 11, clif->pRodexRequestZeny);
- packet(CMSG_MAIL2_REQUEST_ITEMS, 0x09f3, 11, clif->pRodexRequestItems);
- packet(CMSG_MAIL2_CANCEL_WRITE_MAIL, 0x0a03, 2, clif->pRodexCancelWriteMail);
-}
-
-// 20140402
-if (packetVersion == 20140402)
-{
- packet(CMSG_BUYINGSTORE_OPEN, 0x023b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0360, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION, 0x0364, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x07ec, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x085b, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x085d, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0867, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0868, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0882, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0883, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x088a, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x088c, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0890, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x0896, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089a, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08ac, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_SELL, 0x091f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0920, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0926, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x092d, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0933, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x093f, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0944, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0946, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x094c, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x0950, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x0958, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x095c, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0965, 12, clif->pSearchStoreInfoListItemClick);
-}
-
-// 20140409
-if (packetVersion == 20140409)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x0819, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085b, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0868, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x086a, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x086d, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0873, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0875, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_PING, 0x087e, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0883, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x0884, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x088a, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0890, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0893, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0896, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0897, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0899, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x08a2, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x08a4, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x08a6, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a7, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x08a9, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0918, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x091c, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x092e, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x0942, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0947, 5, clif->pHomMenu);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x094c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095e, 19, clif->pWantToConnection);
-}
-
-// 20140416
-if (packetVersion == 20140416)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x095c, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-if (packetVersion >= 20140416)
-{
- packet(CMSG_MAIL2_OPEN_WRITE_MAIL, 0x0a08, 26, clif->pRodexOpenWriteMail);
- packet(CMSG_MAIL2_ADD_ITEM_TO_MAIL, 0x0a04, 6, clif->pRodexAddItem);
- packet(CMSG_MAIL2_REMOVE_ITEM_MAIL, 0x0a06, 6, clif->pRodexRemoveItem);
-}
-
-// 20140423
-if (packetVersion == 20140423)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x022d, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_STORAGE_PASSWORD, 0x0360, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0436, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0811, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x083c, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x085a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085b, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x0862, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x0863, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0866, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x086b, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x086f, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0873, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x088b, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x0890, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0895, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0896, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0897, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0898, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_OPEN, 0x089b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x089d, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x089f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x08a8, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x08ad, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x091a, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0920, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_CLICK, 0x094f, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x095e, 4, clif->pDull);
-}
-
-// 20140423
-if (packetVersion >= 20140423)
-{
- packet(CMSG_MAIL2_CHECK_NAME, 0x0a13, 26, clif->pRodexCheckName);
-}
-
-// 20140508
-if (packetVersion == 20140508)
-{
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0202, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x022d, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x023b, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0281, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x02c4, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x035f, 5, clif->pWalkToXY);
- packet(CMSG_MAP_PING, 0x0360, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0361, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0362, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0363, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0364, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0365, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0366, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0367, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_NAME_REQUEST, 0x0368, 6, clif->pGetCharNameRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0369, 6, clif->pSolveCharName);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0436, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0437, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0438, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x07e4, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x07ec, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0802, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0811, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0815, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0817, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0819, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0835, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0838, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x083c, 12, clif->pSearchStoreInfoListItemClick);
-}
-
-// 20140514
-if (packetVersion == 20140514)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0437, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x0817, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0865, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0867, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0868, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0876, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0877, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087d, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x0885, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x0886, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x088a, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x088b, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_PICKUP, 0x0895, 6, clif->pTakeItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x089a, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089c, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x08a5, 6, clif->pGetCharNameRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0918, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_SERVER_CONNECT, 0x091d, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0921, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0925, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x092c, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x092f, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094e, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0958, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x095f, 5, clif->pWalkToXY);
- packet(CMSG_PARTY_INVITE2, 0x0962, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0965, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x096a, 6, clif->pDropItem);
-}
-
-// 20140521
-if (packetVersion == 20140521)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0869, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x088b, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x088d, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089c, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08ac, 19, clif->pWantToConnection);
- packet(CMSG_HOMUNCULUS_MENU, 0x0968, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140528
-if (packetVersion == 20140528)
-{
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0202, 5, clif->pWalkToXY);
- packet(CMSG_STORAGE_PASSWORD, 0x0360, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x085f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0862, 6, clif->pSolveCharName);
- packet(CMSG_HOMUNCULUS_MENU, 0x0872, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0875, 6, clif->pDropItem);
- packet(CMSG_MAP_PING, 0x0877, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0879, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x087e, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x088a, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x088f, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x0894, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0896, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x089d, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x08a4, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x08a8, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x08ab, 4, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091d, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0929, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0930, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0938, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x093a, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x093f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_OPEN, 0x094a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094b, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x095f, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0963, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0964, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0966, -1, clif->pReqTradeBuyingStore);
-}
-
-// 20140605
-if (packetVersion == 20140605)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0361, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0368, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0369, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0817, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0921, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x0931, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0940, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094c, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140605
-if (packetVersion >= 20140605)
-{
- packet(CMSG_ROULETTE_OPEN, 0x0a19, -1, clif->pRouletteOpen);
- packet(CMSG_ROULETTE_INFO, 0x0a1b, 2, clif->pRouletteInfo);
- packet(CMSG_ROULETTE_CLOSE, 0x0a1d, 14, clif->pRouletteClose);
-}
-
-// 20140611
-if (packetVersion == 20140611)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0364, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0438, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x07e4, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0838, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0864, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0867, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x086c, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0874, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x0878, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x088c, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0891, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0893, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0894, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_BEING, 0x08a1, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x08a2, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0924, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0936, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_STORAGE_PASSWORD, 0x0941, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x094a, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094f, 6, clif->pSolveCharName);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0950, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0951, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0952, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0957, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0958, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0963, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0965, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0969, 2, clif->pSearchStoreInfoNextPage);
-}
-
-if (packetVersion >= 20140611)
-{
-// new packets
- packet(CMSG_ROULETTE_GENERATE, 0x0a1f, 2, clif->pRouletteGenerate);
- packet(CMSG_ROULETTE_RECV_ITEM, 0x0a21, 6, clif->pRouletteRecvItem);
-// changed packets
- packet(CMSG_ROULETTE_OPEN, 0x0a19, 2, clif->pRouletteOpen);
- packet(CMSG_ROULETTE_CLOSE, 0x0a1d, 2, clif->pRouletteClose);
-}
-
-// 20140612
-if (packetVersion == 20140612)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0364, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0438, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x07e4, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0838, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0864, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0867, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x086c, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0874, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x0878, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x088c, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0891, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0893, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0894, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_BEING, 0x08a1, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x08a2, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0924, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0936, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_STORAGE_PASSWORD, 0x0941, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x094a, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094f, 6, clif->pSolveCharName);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0950, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0951, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0952, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0957, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0958, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0963, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0965, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0969, 2, clif->pSearchStoreInfoNextPage);
-}
-
-// 20140613
-if (packetVersion == 20140613)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0364, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0438, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x07e4, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0838, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0864, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0867, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x086c, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0874, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x0878, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x088c, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0891, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0893, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0894, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_BEING, 0x08a1, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x08a2, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0924, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0936, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_STORAGE_PASSWORD, 0x0941, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x094a, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094f, 6, clif->pSolveCharName);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0950, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0951, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0952, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0957, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0958, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0963, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0965, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0969, 2, clif->pSearchStoreInfoNextPage);
-}
-
-// 20140618
-if (packetVersion == 20140618)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x085d, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x085f, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MAP_PING, 0x0860, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0861, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x086c, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0878, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_SELL, 0x0884, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0885, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0886, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0890, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_BEING, 0x0892, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a6, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a7, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x08ac, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x0917, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x091f, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0929, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_PICKUP, 0x0935, 6, clif->pTakeItem);
- packet(CMSG_PARTY_INVITE2, 0x0938, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0939, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x093b, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0945, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0954, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0957, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x095d, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095e, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0962, 8, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0967, 5, clif->pHomMenu);
-}
-
-if (packetVersion >= 20140618)
-{
- packet(CMSG_ROULETTE_RECV_ITEM, 0x0a21, 3, clif->pRouletteRecvItem);
-}
-
-// 20140625
-if (packetVersion == 20140625)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x0202, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x023b, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0815, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0817, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0835, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x085a, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0861, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x086b, 26, clif->pPartyInvite2);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0875, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION, 0x087b, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0885, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0886, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0888, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088a, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088e, 19, clif->pWantToConnection);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0897, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x08a1, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a2, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x091a, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0923, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0928, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0940, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0946, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x094e, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0959, 7, clif->pActionRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x0960, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0968, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0969, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140702
-if (packetVersion == 20140702)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x022d, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x023b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0364, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0437, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0438, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x07e4, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0815, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0819, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0835, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x085a, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0887, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0892, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0895, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x08a0, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x08a2, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0925, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x092c, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0933, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0940, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140709
-if (packetVersion == 20140709)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0364, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0437, 7, clif->pActionRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x0860, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0866, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0869, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0875, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_BEING, 0x0877, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x0879, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x087a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_TO_STORAGE, 0x0887, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x0888, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x088b, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0894, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0897, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0898, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08ad, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x091a, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0925, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_POSITION, 0x092f, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0931, 6, clif->pSolveCharName);
- packet(CMSG_MAP_PING, 0x0934, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_SELL, 0x0939, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x093f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0940, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x094d, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094e, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094f, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x095f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x0961, 6, clif->pTakeItem);
-}
-
-// 20140716
-if (packetVersion == 20140716)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0362, -1, clif->pSearchStoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x07e4, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0811, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x085c, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x085f, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x0868, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x0871, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0881, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x088b, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x088d, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x088f, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0896, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x089a, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_SELL, 0x089f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x08a2, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a4, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x08ac, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0918, 5, clif->pWalkToXY);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0926, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x092c, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x092f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0938, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x093b, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0947, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0952, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0958, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x0959, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0969, -1, clif->pItemListWindowSelected);
-}
-
-// 20140723
-if (packetVersion == 20140723)
-{
- packet(CMSG_MAP_PING, 0x02c4, 6, clif->pTickSend);
- packet(CMSG_STORAGE_PASSWORD, 0x0364, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x0368, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0436, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0819, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0838, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x085a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085f, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x0869, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x086d, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x087d, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0888, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0891, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0896, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0898, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x089e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a2, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08ad, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0927, 6, clif->pSolveCharName);
- packet(CMSG_MAP_SERVER_CONNECT, 0x092f, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0934, 26, clif->pFriendsListAdd);
- packet(CMSG_PARTY_INVITE2, 0x0935, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0939, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x093d, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0945, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0947, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0948, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x095f, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0960, 5, clif->pChangeDir);
-}
-
-// 20140730
-if (packetVersion == 20140730)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x022d, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x0364, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0366, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x0367, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0437, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x07ec, 4, clif->pDull);
-// packet(UNKNOWN, 0x0802, 8, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0815, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0817, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085e, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x087d, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x087e, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x087f, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0889, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x088b, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_CLICK, 0x088d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x0892, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08a0, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a6, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08a7, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08a9, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x08ad, 36, clif->pStoragePassword);
- packet(CMSG_PARTY_INVITE2, 0x091e, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0924, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_PICKUP, 0x092a, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0934, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0940, 5, clif->pChangeDir);
- packet(CMSG_HOMUNCULUS_MENU, 0x0946, 5, clif->pHomMenu);
-}
-
-// 20140806
-if (packetVersion == 20140806)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0948, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140813
-if (packetVersion == 20140813)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0365, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x07e4, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0802, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0819, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_HOMUNCULUS_MENU, 0x0868, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0878, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x087c, 26, clif->pPartyInvite2);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0882, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0895, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0897, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0899, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x08a3, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x08a7, 8, clif->pDull);
-// packet(UNKNOWN, 0x08ab, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0967, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140814
-if (packetVersion == 20140814)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0365, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x07e4, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0802, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0819, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_HOMUNCULUS_MENU, 0x0868, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0878, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x087c, 26, clif->pPartyInvite2);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0882, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0895, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0897, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0899, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x08a3, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x08a7, 8, clif->pDull);
-// packet(UNKNOWN, 0x08ab, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0967, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140820
-if (packetVersion == 20140820)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x035f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x07ec, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0835, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0861, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0864, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0869, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x086c, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x086e, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0872, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0876, 6, clif->pDropItem);
- packet(CMSG_NAME_REQUEST, 0x0891, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0899, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x089a, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x089b, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a3, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a7, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091d, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x092f, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0936, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_HOMUNCULUS_MENU, 0x0937, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x093a, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_OPEN, 0x093e, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094a, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0951, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0952, 7, clif->pActionRequest);
- packet(CMSG_MOVE_TO_STORAGE, 0x0956, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x0958, 4, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0961, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20140827
-if (packetVersion == 20140827)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0943, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140903
-if (packetVersion == 20140903)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088f, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0931, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0941, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0943, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0945, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20140917
-if (packetVersion == 20140917)
-{
- packet(CMSG_PARTY_INVITE2, 0x022d, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0364, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_TO_STORAGE, 0x0365, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0366, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0367, -1, clif->pSearchStoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0369, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0838, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0864, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x086d, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0889, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0895, 5, clif->pHomMenu);
- packet(CMSG_MAP_PING, 0x0897, 6, clif->pTickSend);
- packet(CMSG_NAME_REQUEST, 0x0898, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x089c, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x08a8, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x0919, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x091e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x092a, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0930, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0949, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x094f, 10, clif->pUseSkillToPos);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0951, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0955, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0956, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x0957, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x095a, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x095c, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x095e, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x0966, 4, clif->pDull);
-}
-
-// 20140924
-if (packetVersion == 20140924)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x0366, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0367, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x07e4, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0802, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0815, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0862, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0864, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0865, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0867, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x086b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x086d, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x086e, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x0886, 6, clif->pGetCharNameRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088b, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0894, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0898, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x089c, 8, clif->pMoveToKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08a5, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x08a7, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0918, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x091b, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0925, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x0926, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0928, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_OPEN, 0x092b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x092d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0934, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0949, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0952, 26, clif->pFriendsListAdd);
-}
-
-// 20141001
-if (packetVersion == 20141001)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0361, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0365, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0838, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x087c, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0884, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x0885, 6, clif->pGetCharNameRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089d, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ad, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x091c, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x092a, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0937, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x0939, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x093f, 6, clif->pTakeItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094b, 19, clif->pWantToConnection);
- packet(CMSG_HOMUNCULUS_MENU, 0x0952, 5, clif->pHomMenu);
-}
-
-// 20141008
-if (packetVersion == 20141008)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0942, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141015
-if (packetVersion == 20141015)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x022d, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0364, 5, clif->pHomMenu);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086e, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0922, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0936, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094b, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0967, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141016
-if (packetVersion == 20141016)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x022d, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0364, 5, clif->pHomMenu);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086e, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0922, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0936, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094b, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0967, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141022
-if (packetVersion == 20141022)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x023b, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_STORAGE_PASSWORD, 0x0438, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0835, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x0878, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x087d, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x0896, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x0899, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08aa, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x08ab, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ad, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091a, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x092b, 8, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x093b, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0940, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_PICKUP, 0x094e, 6, clif->pTakeItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0955, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141029
-if (packetVersion == 20141029)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0369, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0437, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0940, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141105
-if (packetVersion == 20141105)
-{
-// packet(UNKNOWN, 0x022d, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x035f, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0360, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x085c, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x0863, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x0864, 6, clif->pTickSend);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0865, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0871, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0874, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0875, 7, clif->pActionRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0877, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0879, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0887, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0892, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0898, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a0, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a5, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x08a7, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ad, 8, clif->pMoveToKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091d, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_OPEN, 0x091e, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x092b, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093e, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0944, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0948, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x0950, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0957, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_SELL, 0x095f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0968, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20141112
-if (packetVersion == 20141112)
-{
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0362, 26, clif->pFriendsListAdd);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0438, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x07e4, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0835, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0838, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_TO_STORAGE, 0x083c, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x085f, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0863, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x0869, 6, clif->pGetCharNameRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0871, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0885, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0886, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0887, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x088d, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a0, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a1, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x08ab, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0919, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_HOMUNCULUS_MENU, 0x0926, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0929, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0943, 6, clif->pDropItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094b, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x094c, 4, clif->pDull);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0955, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x095d, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x0960, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0962, 10, clif->pUseSkillToPos);
-}
-
-// 20141119
-if (packetVersion == 20141119)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0202, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0861, 26, clif->pFriendsListAdd);
- packet(CMSG_PARTY_INVITE2, 0x0865, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0866, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0872, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0873, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x0875, 6, clif->pGetCharNameRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087c, 6, clif->pSolveCharName);
-// packet(UNKNOWN, 0x0885, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0887, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0888, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CREATE, 0x088d, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0895, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x08a8, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08aa, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION, 0x0918, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0920, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0921, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0929, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x092f, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0933, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x0938, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0940, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_TO_STORAGE, 0x0941, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0942, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0948, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x094c, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0963, 90, clif->pUseSkillToPosMoreInfo);
-}
-
-// 20141119
-if (packetVersion >= 20141119)
-{
- packet(CMSG_QUICK_IDENTIFY_ITEM, 0x0a35, 4, clif->pOneClick_ItemIdentify);
-}
-
-// 20141126
-if (packetVersion == 20141126)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x0367, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0802, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0819, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086e, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0871, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0884, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0896, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a4, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x08ad, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0920, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0942, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_PICKUP, 0x095a, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x095b, 5, clif->pHomMenu);
- packet(CMSG_MOVE_TO_STORAGE, 0x095f, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0965, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141203
-if (packetVersion == 20141203)
-{
- packet(CMSG_SOLVE_CHAR_NAME, 0x0202, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_SELL, 0x0281, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0362, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0367, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x0368, 8, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0802, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_TO_STORAGE, 0x0861, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x086c, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086d, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_PICKUP, 0x086e, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087b, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087e, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0880, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0889, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0898, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION, 0x089c, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_CLICK, 0x089d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08a5, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08aa, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0917, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x091d, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_PING, 0x0928, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x092a, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0936, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0952, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0957, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095c, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0962, 10, clif->pUseSkillToId);
-}
-
-// 20141210
-if (packetVersion == 20141210)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0436, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07e4, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x087b, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x0885, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08ac, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0917, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0927, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092b, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0947, 4, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0954, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0955, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0958, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0961, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0963, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x0967, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20141224
-if (packetVersion == 20141224)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x0361, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0438, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0835, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x085a, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0865, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0867, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x086c, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0870, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x087a, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x087b, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x089a, 5, clif->pWalkToXY);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x08a3, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x08a4, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a8, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08ac, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0930, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0932, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x093a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MAP_PING, 0x0945, 6, clif->pTickSend);
- packet(CMSG_NAME_REQUEST, 0x0946, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0949, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094f, 19, clif->pWantToConnection);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0950, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0953, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0956, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_BEING, 0x095b, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x095f, 7, clif->pActionRequest);
-}
-
-// 20141231
-if (packetVersion == 20141231)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x086d, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150107
-if (packetVersion == 20150107)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x087c, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0895, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x092d, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0943, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0947, 19, clif->pWantToConnection);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150114
-if (packetVersion == 20150114)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0436, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MAP_SERVER_CONNECT, 0x083c, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0868, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0899, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0946, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0955, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0957, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150121
-if (packetVersion == 20150121)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0281, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x07e4, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x087c, 4, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x088b, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x089d, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089e, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x08ab, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0918, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0919, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x091d, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0955, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0959, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0963, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x0967, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150128
-if (packetVersion == 20150128)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x023b, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x035f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0365, -1, clif->pSearchStoreInfo);
-// packet(UNKNOWN, 0x0368, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0838, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x085a, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0864, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x086d, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0870, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x0874, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0875, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0876, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0888, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x08ab, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x091f, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0927, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0929, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092d, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0938, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x093a, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0944, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094e, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0952, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0963, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0968, 6, clif->pDropItem);
-}
-
-// 20150129
-if (packetVersion == 20150129)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x023b, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x035f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0365, -1, clif->pSearchStoreInfo);
-// packet(UNKNOWN, 0x0368, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0838, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x085a, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0864, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x086d, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0870, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x0874, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0875, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0876, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0888, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x08ab, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x091f, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0927, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0929, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092d, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0938, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x093a, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0944, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094e, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0952, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0963, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0968, 6, clif->pDropItem);
-}
-
-// 20150130
-if (packetVersion == 20150130)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x023b, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x035f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0365, -1, clif->pSearchStoreInfo);
-// packet(UNKNOWN, 0x0368, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0838, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x085a, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0864, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x086d, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0870, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x0874, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0875, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0876, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0888, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x08ab, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x091f, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0927, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0929, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092d, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0938, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x093a, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0944, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094e, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0952, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0963, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0968, 6, clif->pDropItem);
-}
-
-// 20150204
-if (packetVersion == 20150204)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0966, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150211
-if (packetVersion == 20150211)
-{
-// packet(UNKNOWN, 0x023b, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0368, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0369, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0436, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0437, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x07e4, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0817, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0819, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x0835, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0862, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0863, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x0870, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0873, 5, clif->pWalkToXY);
- packet(CMSG_NAME_REQUEST, 0x087b, 6, clif->pGetCharNameRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x087f, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0882, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0883, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x0885, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0886, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a0, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a4, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08aa, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0919, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0920, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0944, -1, clif->pSearchStoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0951, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0957, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x0958, 8, clif->pMoveToKafra);
-}
-
-// 20150217
-if (packetVersion == 20150217)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x085b, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150225
-if (packetVersion == 20150225)
-{
- packet(CMSG_BUYINGSTORE_OPEN, 0x02c4, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0360, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0362, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x0436, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0817, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0819, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0867, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0885, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0896, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x089b, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x089c, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x08a4, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0940, -1, clif->pSearchStoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0946, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0948, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x094f, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0952, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0955, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x096a, 19, clif->pWantToConnection);
-}
-
-// 20150226
-if (packetVersion == 20150226)
-{
- packet(CMSG_BUYINGSTORE_OPEN, 0x02c4, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0360, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0362, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x0436, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0817, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0819, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0867, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0885, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0896, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x089b, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x089c, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x08a4, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0940, -1, clif->pSearchStoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0946, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0948, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x094f, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0952, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0955, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x096a, 19, clif->pWantToConnection);
-}
-
-// 20150304
-if (packetVersion == 20150304)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x0363, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0802, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0862, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x086d, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0879, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x087e, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0892, 36, clif->pStoragePassword);
- packet(CMSG_PARTY_INVITE2, 0x089a, 26, clif->pPartyInvite2);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x093a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x0947, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x095d, 8, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0960, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0961, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150311
-if (packetVersion == 20150311)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x023b, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0360, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0436, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0438, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0815, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x0838, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x086a, 6, clif->pGetCharNameRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x086c, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x087b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0883, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0886, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0888, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0896, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x08a1, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x08a3, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a5, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a6, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x091c, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0928, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x092a, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x092e, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x093b, 26, clif->pPartyInvite2);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0943, 6, clif->pSolveCharName);
-// packet(UNKNOWN, 0x0946, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0957, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x0958, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x095b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0963, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0964, 8, clif->pMoveToKafra);
-}
-
-// 20150318
-if (packetVersion == 20150318)
-{
-// packet(UNKNOWN, 0x0202, 4, clif->pDull);
- packet(CMSG_MAP_PING, 0x023b, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x0281, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0367, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x07e4, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0802, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0811, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0862, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0863, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0873, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0885, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0889, 7, clif->pActionRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x088c, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x089c, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a4, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x091d, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0920, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0927, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0928, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_BEING, 0x0936, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x0937, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0938, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x093a, 5, clif->pWalkToXY);
- packet(CMSG_SOLVE_CHAR_NAME, 0x093c, 6, clif->pSolveCharName);
- packet(CMSG_HOMUNCULUS_MENU, 0x094c, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x0951, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0958, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0959, -1, clif->pSearchStoreInfo);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0960, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20150325
-if (packetVersion == 20150325)
-{
- packet(CMSG_PARTY_INVITE2, 0x0202, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0363, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_BEING, 0x0365, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0438, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0802, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0819, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085d, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x086f, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x087c, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x087e, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0883, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION, 0x0885, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x0891, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x0893, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0897, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0899, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08a1, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08a7, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x0919, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_PICKUP, 0x092c, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0931, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0932, 5, clif->pWalkToXY);
- packet(CMSG_HOMUNCULUS_MENU, 0x0938, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0940, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0947, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094a, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0950, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x0954, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0969, 8, clif->pMoveFromKafra);
-}
-
-// 20150401
-if (packetVersion == 20150401)
-{
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0362, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x0367, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0437, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x083c, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x085e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x086f, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0875, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x087e, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088c, 6, clif->pDropItem);
- packet(CMSG_MAP_PING, 0x088f, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0895, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0898, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x089c, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a5, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x091b, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x091c, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0922, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0924, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0938, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0939, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x093a, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x093b, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x093e, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0946, 4, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0949, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_BEING, 0x094b, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0953, 26, clif->pFriendsListAdd);
- packet(CMSG_SOLVE_CHAR_NAME, 0x095f, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0964, 5, clif->pChangeDir);
-}
-
-// 20150408
-if (packetVersion == 20150408)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x0819, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x085a, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_BEING, 0x085c, 10, clif->pUseSkillToId);
- packet(CMSG_HOMUNCULUS_MENU, 0x085e, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0865, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0868, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x086b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x086e, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0878, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x087e, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x087f, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x0888, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0889, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0891, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0898, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x089c, 5, clif->pWalkToXY);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08a2, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a4, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x091b, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x091e, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0922, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x092a, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0946, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x094f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0955, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0957, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_PICKUP, 0x0959, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0963, 2, clif->pSearchStoreInfoNextPage);
-}
-
-// 20150415
-if (packetVersion == 20150415)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x0361, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0364, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0366, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0368, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0802, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_PICKUP, 0x0817, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0835, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x085e, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0863, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0867, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION, 0x0868, 10, clif->pUseSkillToPos);
- packet(CMSG_HOMUNCULUS_MENU, 0x0869, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x086c, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0880, 8, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x088e, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x0891, 6, clif->pGetCharNameRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0898, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a0, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0922, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x092e, 6, clif->pSolveCharName);
- packet(CMSG_MAP_PING, 0x093c, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_CLICK, 0x093e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0941, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0946, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094d, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0953, -1, clif->pSearchStoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x095c, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0960, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0961, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20150422
-if (packetVersion == 20150422)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0955, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150429
-if (packetVersion == 20150429)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0363, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0867, 36, clif->pStoragePassword);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086a, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x0886, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x088f, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0894, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0899, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x089f, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x08a6, 8, clif->pDull);
-// packet(UNKNOWN, 0x08a8, 4, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08ad, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0929, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093d, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_PICKUP, 0x0943, 6, clif->pTakeItem);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150507
-if (packetVersion == 20150507)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x023b, 5, clif->pHomMenu);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0362, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0817, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x085a, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0864, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0887, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0889, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0924, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x092e, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x093b, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0941, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0942, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0953, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0955, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0958, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150513
-if (packetVersion == 20150513)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x022d, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x02c4, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0363, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0817, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0864, 8, clif->pMoveFromKafra);
- packet(CMSG_MOVE_TO_STORAGE, 0x0879, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0883, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0885, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a8, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0923, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0924, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x0927, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x094a, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x0958, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0960, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150520
-if (packetVersion == 20150520)
-{
- packet(CMSG_MAP_PING, 0x0202, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_SELL, 0x0361, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0835, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085e, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0865, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0868, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PARTY_INVITE2, 0x0880, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0882, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x088c, -1, clif->pSearchStoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x089c, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089e, 6, clif->pDropItem);
- packet(CMSG_NAME_REQUEST, 0x08a2, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ad, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x091c, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x091d, 7, clif->pActionRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0924, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x092b, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0931, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0936, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093d, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0940, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0945, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION, 0x094e, 10, clif->pUseSkillToPos);
- packet(CMSG_HOMUNCULUS_MENU, 0x095b, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x095f, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0960, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0961, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x096a, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20150527
-if (packetVersion == 20150527)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_BEING, 0x0838, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x083c, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0940, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150603
-if (packetVersion == 20150603)
-{
- packet(CMSG_PARTY_INVITE2, 0x0361, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0437, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0811, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0819, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0860, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0864, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0867, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086a, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0873, 7, clif->pActionRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0877, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x0881, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x0884, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088b, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0897, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x089a, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_CREATE, 0x089d, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_PING, 0x089e, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION, 0x08a1, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08ad, 19, clif->pWantToConnection);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091b, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x0922, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_PICKUP, 0x092d, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x093b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x093f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0955, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0956, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0960, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x0969, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x096a, 5, clif->pWalkToXY);
-}
-
-// 20150610
-if (packetVersion == 20150610)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x022d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0438, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x07e4, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x0835, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0870, 26, clif->pPartyInvite2);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0872, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0877, 6, clif->pReqClickBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x087e, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0884, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0885, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0888, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_TO_STORAGE, 0x088c, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x088d, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x088f, 5, clif->pWalkToXY);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0897, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x08a0, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08ac, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x0925, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x092b, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x092c, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x092e, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0932, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x093e, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0940, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0946, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0949, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x0957, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0964, 5, clif->pChangeDir);
-}
-
-// 20150617
-if (packetVersion == 20150617)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x0360, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0362, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0363, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0365, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0436, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x07ec, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x0811, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0869, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x086b, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x0870, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x087a, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0886, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0894, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094e, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150618
-if (packetVersion == 20150618)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x0360, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0362, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0363, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0365, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0436, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x07ec, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x0811, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0869, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x086b, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x0870, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x087a, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0886, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0894, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094e, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150624
-if (packetVersion == 20150624)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0364, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0365, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0870, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0940, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0941, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0966, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150702
-if (packetVersion == 20150702)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x023b, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0281, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_FROM_STORAGE, 0x07e4, 8, clif->pMoveFromKafra);
- packet(CMSG_NAME_REQUEST, 0x0802, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x086d, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x087d, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087e, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0883, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x088e, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x0893, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08a0, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a4, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x08a5, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_BEING, 0x08a6, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x08ad, 10, clif->pUseSkillToPos);
- packet(CMSG_STORAGE_PASSWORD, 0x0919, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0923, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0928, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x092c, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x093e, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x093f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_PICKUP, 0x0946, 6, clif->pTakeItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094e, 6, clif->pSolveCharName);
- packet(CMSG_HOMUNCULUS_MENU, 0x0954, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0956, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0958, 7, clif->pActionRequest);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x095f, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0960, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0968, 5, clif->pChangeDir);
-}
-
-// 20150708
-if (packetVersion == 20150708)
-{
- packet(CMSG_SOLVE_CHAR_NAME, 0x022d, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x02c4, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0366, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x0368, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0436, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0811, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x085e, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_PICKUP, 0x0872, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x087f, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0884, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089d, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08a5, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x08ad, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x092a, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093c, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x095b, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0962, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150715
-if (packetVersion == 20150715)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x023b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0362, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0364, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0436, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x0437, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0438, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_SELL, 0x0835, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x083c, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x085c, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086f, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x0873, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0879, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x087c, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x087f, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0886, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0895, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0896, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x0897, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0899, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x089a, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x08a4, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ac, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0917, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_HOMUNCULUS_MENU, 0x093e, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0944, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0950, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0956, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x0961, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0965, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20150729
-if (packetVersion == 20150729)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0437, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0438, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x085b, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0860, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x086c, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086d, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x086e, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086f, 8, clif->pMoveFromKafra);
- packet(CMSG_NAME_REQUEST, 0x0870, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0880, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0881, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0886, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION, 0x089a, 10, clif->pUseSkillToPos);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089b, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x08a3, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a4, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x08ac, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08ad, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0920, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x092b, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x092f, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x093a, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x093f, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094f, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0955, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x095e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0961, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x096a, 2, clif->pReqCloseBuyingStore);
-}
-
-// 20150805
-if (packetVersion == 20150805)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x088a, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150812
-if (packetVersion == 20150812)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x087f, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150819
-if (packetVersion == 20150819)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0202, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_BEING, 0x022d, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x0281, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x085d, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0862, 8, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0865, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0871, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0888, 5, clif->pHomMenu);
- packet(CMSG_MOVE_TO_STORAGE, 0x0919, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x091e, 36, clif->pStoragePassword);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0927, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x0961, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0967, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20150826
-if (packetVersion == 20150826)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x0362, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0368, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0436, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x07ec, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0819, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0861, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0865, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x086b, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0870, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087b, 6, clif->pSolveCharName);
- packet(CMSG_PARTY_INVITE2, 0x088b, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x088d, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0890, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_BEING, 0x0891, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a0, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a1, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_PICKUP, 0x08a4, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a8, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0924, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0928, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x092e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_NAME_REQUEST, 0x093b, 6, clif->pGetCharNameRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0945, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094f, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0951, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0959, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0964, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0968, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0969, -1, clif->pSearchStoreInfo);
-}
-
-// 20150902
-if (packetVersion == 20150902)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x023b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0360, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_PING, 0x0367, 6, clif->pTickSend);
- packet(CMSG_STORAGE_PASSWORD, 0x0802, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x083c, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085b, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085d, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x0863, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x086f, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087b, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x087f, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0886, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x0887, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0889, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x088d, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0892, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_TO_STORAGE, 0x0897, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x0899, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08a9, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0923, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_PICKUP, 0x0928, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x092a, 5, clif->pHomMenu);
- packet(CMSG_PARTY_INVITE2, 0x092d, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0941, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0947, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_OPEN, 0x094f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0953, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095b, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0960, 2, clif->pSearchStoreInfoNextPage);
-}
-
-// 20150909
-if (packetVersion == 20150909)
-{
- packet(CMSG_PLAYER_CHANGE_ACT, 0x023b, 7, clif->pActionRequest);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0360, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0361, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0365, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x0369, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0437, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0861, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0871, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x087b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x0883, 6, clif->pTakeItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0886, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x088f, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0895, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0928, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0940, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0941, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x095e, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0962, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x096a, 5, clif->pChangeDir);
-}
-
-// 20150916
-if (packetVersion == 20150916)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x022d, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0817, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0835, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x085e, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0869, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0873, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0877, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_SELL, 0x0881, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x089c, 6, clif->pTakeItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x089e, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_PING, 0x08ac, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0920, -1, clif->pSearchStoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x0924, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x092e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x092f, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x0934, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0936, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x0938, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x093e, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0941, 36, clif->pStoragePassword);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0942, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0948, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x095a, 6, clif->pGetCharNameRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0960, 5, clif->pHomMenu);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0961, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0969, 19, clif->pWantToConnection);
-}
-
-// 20150923
-if (packetVersion == 20150923)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0361, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0366, -1, clif->pSearchStoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x07e4, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x0817, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085c, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x085d, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0864, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x086e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x086f, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0870, 5, clif->pChangeDir);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0879, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x087f, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0886, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_OPEN, 0x088e, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0892, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x0895, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x089b, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x089f, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_PING, 0x08a0, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a2, 19, clif->pWantToConnection);
- packet(CMSG_NAME_REQUEST, 0x08a5, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a6, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x091e, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x092b, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0930, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0936, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x093b, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0951, 7, clif->pActionRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0961, -1, clif->pItemListWindowSelected);
-}
-
-// 20151001
-if (packetVersion == 20151001)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0960, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-if (packetVersion >= 20151001)
-{
- packet(CMSG_CHAR_CREATE, 0x0a39, 36, chr->parse_char_create_new_char);
-}
-
-// 20151007
-if (packetVersion == 20151007)
-{
- packet(CMSG_BUYINGSTORE_SELL, 0x0202, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0811, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0862, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x093f, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x095f, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0961, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0967, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151014
-if (packetVersion == 20151014)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0202, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0817, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0838, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x085a, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085c, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0860, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0863, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_SELL, 0x0867, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0872, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION, 0x0874, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0881, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x0883, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0884, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0889, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x088e, 8, clif->pDull);
-// packet(UNKNOWN, 0x089a, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x089b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x089f, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_PICKUP, 0x08aa, 6, clif->pTakeItem);
- packet(CMSG_PARTY_INVITE2, 0x091c, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x091d, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0930, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0934, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0944, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x094f, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0956, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_TO_STORAGE, 0x095e, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x0961, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0964, 19, clif->pWantToConnection);
-}
-
-// 20151021
-if (packetVersion == 20151021)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x023b, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x02c4, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x0361, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07ec, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x086a, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x091d, 5, clif->pHomMenu);
- packet(CMSG_PARTY_INVITE2, 0x0940, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151022
-if (packetVersion == 20151022)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x023b, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x02c4, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x0361, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07ec, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x086a, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x091d, 5, clif->pHomMenu);
- packet(CMSG_PARTY_INVITE2, 0x0940, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151028
-if (packetVersion == 20151028)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0860, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151029
-if (packetVersion == 20151029)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0860, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151104
-if (packetVersion == 20151104)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x023b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0360, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0363, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0436, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0437, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x07ec, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0811, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_SELL, 0x0815, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x0886, 6, clif->pTickSend);
- packet(CMSG_NAME_REQUEST, 0x0887, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_TO_STORAGE, 0x088b, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x088d, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x08a3, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x08a5, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0928, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x0939, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x093a, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x0940, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_PICKUP, 0x0964, 6, clif->pTakeItem);
-}
-
-// 20151111
-if (packetVersion == 20151111)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x02c4, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0362, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_TO_STORAGE, 0x0369, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0802, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0815, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x085d, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0862, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0871, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0885, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089c, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0942, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x094a, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0958, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0966, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0967, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0969, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151118
-if (packetVersion == 20151118)
-{
- packet(CMSG_MAP_PING, 0x022d, 6, clif->pTickSend);
- packet(CMSG_HOMUNCULUS_MENU, 0x035f, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0365, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x086b, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x088b, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08ab, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0921, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0925, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x092e, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x092f, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x093c, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x0943, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0946, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x0957, 4, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x095c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151125
-if (packetVersion == 20151125)
-{
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0361, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0365, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0366, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0368, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x0438, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0802, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0838, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_NAME_REQUEST, 0x085e, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_TO_STORAGE, 0x085f, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0863, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0883, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x0884, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0885, 4, clif->pDull);
- packet(CMSG_MAP_PING, 0x088c, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0899, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089c, 7, clif->pActionRequest);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x089f, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08a9, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x08ad, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0920, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x092a, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x092e, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0939, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x093e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_HOMUNCULUS_MENU, 0x0951, 5, clif->pHomMenu);
- packet(CMSG_PARTY_INVITE2, 0x0956, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0957, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0959, 90, clif->pUseSkillToPosMoreInfo);
-}
-
-// 20151202
-if (packetVersion == 20151202)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0870, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20151209
-if (packetVersion == 20151209)
-{
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0365, 5, clif->pWalkToXY);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0369, 6, clif->pSolveCharName);
- packet(CMSG_PARTY_INVITE2, 0x07e4, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x07ec, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x0811, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0819, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x085b, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x085d, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x085e, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0861, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0866, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0875, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087a, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_OPEN, 0x087f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x088e, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x088f, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x0894, 10, clif->pUseSkillToPos);
- packet(CMSG_HOMUNCULUS_MENU, 0x08a1, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_SELL, 0x0920, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x092d, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0930, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0932, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_TO_STORAGE, 0x093b, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0948, 19, clif->pWantToConnection);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x094a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0956, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x095c, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0961, 7, clif->pActionRequest);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0964, 26, clif->pFriendsListAdd);
-}
-
-// 20151216
-if (packetVersion == 20151216)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x022d, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0361, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0362, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0364, 4, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0436, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x083c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_PING, 0x085b, 6, clif->pTickSend);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0864, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0865, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x086a, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x086e, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0870, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0874, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x0885, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x088b, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089d, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x089e, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a2, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_PICKUP, 0x08a9, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ac, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091d, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0944, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0947, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0949, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x0954, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0960, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0966, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_BEING, 0x0968, 10, clif->pUseSkillToId);
-}
-
-// 20151223
-if (packetVersion == 20151223)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x02c4, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x0362, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0364, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0802, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0815, -1, clif->pSearchStoreInfo);
- packet(CMSG_NAME_REQUEST, 0x0864, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0866, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x086e, 10, clif->pUseSkillToPos);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0872, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_BEING, 0x0875, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0876, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0881, 7, clif->pActionRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0884, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x0886, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x088d, 5, clif->pHomMenu);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0890, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0891, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0898, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x08aa, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0918, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_OPEN, 0x091a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091b, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0920, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0923, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0924, 6, clif->pTickSend);
- packet(CMSG_SOLVE_CHAR_NAME, 0x095e, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x095f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0965, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0967, 12, clif->pSearchStoreInfoListItemClick);
-}
-
-// 20151230
-if (packetVersion == 20151230)
-{
- packet(CMSG_MOVE_TO_STORAGE, 0x02c4, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0366, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0436, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x07ec, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0815, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x085b, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0861, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0869, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION, 0x0886, 10, clif->pUseSkillToPos);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x088e, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0897, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x091d, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0923, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x093a, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0949, 5, clif->pHomMenu);
- packet(CMSG_ITEM_PICKUP, 0x094e, 6, clif->pTakeItem);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160106
-if (packetVersion == 20160106)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_HOMUNCULUS_MENU, 0x07ec, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x0861, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x086a, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x086c, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0878, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x087a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_SERVER_CONNECT, 0x087f, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_TO_STORAGE, 0x0885, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0889, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x088a, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0891, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a0, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x091d, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x0940, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160113
-if (packetVersion == 20160113)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x022d, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x023b, 5, clif->pWalkToXY);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x035f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_STORAGE_PASSWORD, 0x0815, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085b, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0864, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x086d, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0873, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0875, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0888, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x088b, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x088c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0892, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x0893, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0899, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089a, 7, clif->pActionRequest);
- packet(CMSG_MAP_PING, 0x08a0, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x08a6, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x08aa, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0919, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_NAME_REQUEST, 0x091b, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0924, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0930, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_TO_STORAGE, 0x0932, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x093c, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0941, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094d, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0967, -1, clif->pReqOpenBuyingStore);
-}
-
-// 20160120
-if (packetVersion == 20160120)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0865, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160127
-if (packetVersion == 20160127)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085e, 5, clif->pChangeDir);
- packet(CMSG_HOMUNCULUS_MENU, 0x0922, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x095a, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0961, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160203
-if (packetVersion == 20160203)
-{
- packet(CMSG_BUYINGSTORE_SELL, 0x0202, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0361, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0436, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_PING, 0x0437, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x07e4, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0811, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0819, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0835, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0872, 5, clif->pHomMenu);
- packet(CMSG_STORAGE_PASSWORD, 0x0873, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x088c, 4, clif->pDull);
-// packet(UNKNOWN, 0x0918, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x093e, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0940, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0947, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0954, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_PICKUP, 0x095a, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x095d, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160211
-if (packetVersion == 20160211)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x023b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0365, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x086c, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0870, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0886, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160217
-if (packetVersion == 20160217)
-{
- packet(CMSG_BUYINGSTORE_SELL, 0x0202, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x023b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0362, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0365, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x0864, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0870, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0873, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x087a, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0888, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x088d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088f, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0899, 4, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a0, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x08a9, 26, clif->pPartyInvite2);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08ac, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x08ad, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x091d, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0920, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0926, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x092e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x093b, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093e, -1, clif->pSearchStoreInfo);
- packet(CMSG_ITEM_PICKUP, 0x0941, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x094a, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x095e, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x0966, 6, clif->pGetCharNameRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0967, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0969, -1, clif->pReqOpenBuyingStore);
-}
-
-// 20160224
-if (packetVersion == 20160224)
-{
- packet(CMSG_PARTY_INVITE2, 0x022d, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_BEING, 0x0364, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0369, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0436, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x083c, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0861, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x086b, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0884, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0885, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0888, 5, clif->pWalkToXY);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a9, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0920, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0929, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x092f, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x0936, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_PICKUP, 0x0938, 6, clif->pTakeItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x094c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0961, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160302
-if (packetVersion == 20160302)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x022d, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0367, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0802, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0819, 5, clif->pWalkToXY);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x085b, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0864, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0865, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0867, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0868, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0873, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0875, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION, 0x087a, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x087d, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_BEING, 0x0883, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x08a6, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a9, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x091a, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x0927, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x092d, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x092f, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_NAME_REQUEST, 0x0945, 6, clif->pGetCharNameRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x094e, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0950, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0957, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x095a, 6, clif->pTickSend);
- packet(CMSG_MOVE_TO_STORAGE, 0x0960, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0961, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0967, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0968, 7, clif->pActionRequest);
-}
-
-// 20160309
-if (packetVersion == 20160309)
-{
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x023b, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0281, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0361, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x0364, 36, clif->pStoragePassword);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION, 0x0819, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0838, 5, clif->pWalkToXY);
- packet(CMSG_PARTY_INVITE2, 0x083c, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x085a, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_BEING, 0x085f, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0866, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x086a, -1, clif->pSearchStoreInfo);
-// packet(UNKNOWN, 0x0873, 8, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x087c, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x087e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x089b, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089d, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a7, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_NAME_REQUEST, 0x091d, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0920, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0922, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x0929, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x092a, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x092e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0932, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x094f, 7, clif->pActionRequest);
- packet(CMSG_MAP_PING, 0x0956, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_PICKUP, 0x096a, 6, clif->pTakeItem);
-}
-
-// 20160316
-if (packetVersion == 20160316)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0922, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160318
-if (packetVersion == 20160318)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0922, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160323
-if (packetVersion == 20160323)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0365, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0867, 8, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x0869, 6, clif->pTakeItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086a, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0872, 36, clif->pStoragePassword);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0878, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x0883, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0896, -1, clif->pItemListWindowSelected);
- packet(CMSG_HOMUNCULUS_MENU, 0x089a, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x091b, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0926, 8, clif->pMoveToKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0927, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0933, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x093c, 6, clif->pDropItem);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160330
-if (packetVersion == 20160330)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0365, 36, clif->pStoragePassword);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0867, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x086d, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0878, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x087f, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0889, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x088b, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x088d, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0918, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0925, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x092a, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0930, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0939, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093b, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-if (packetVersion >= 20160330)
-{
- packet(CMSG_MAIL2_SEND_MAIL, 0x0a6e, -1, clif->pRodexSendMail);
-}
-
-// 20160406
-if (packetVersion == 20160406)
-{
- packet(CMSG_SOLVE_CHAR_NAME, 0x0364, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x07e4, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0819, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x085a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION, 0x085c, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0869, -1, clif->pSearchStoreInfo);
- packet(CMSG_ITEM_PICKUP, 0x0877, 6, clif->pTakeItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0878, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0879, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0884, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0892, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0895, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x0898, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x089b, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x089e, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08a1, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x08a9, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x08ac, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0927, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x092d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0933, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_BEING, 0x0934, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x0940, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0949, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_OPEN, 0x094d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0953, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x095d, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x095f, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0962, 4, clif->pDull);
-}
-
-// 20160414
-if (packetVersion == 20160414)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0362, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x0363, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0862, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x087a, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0880, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0885, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x089e, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0918, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0922, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x0927, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0931, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0934, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0945, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0953, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160420
-if (packetVersion == 20160420)
-{
- packet(CMSG_SEARCHSTORE_SEARCH, 0x022d, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_PING, 0x02c4, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x035f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0819, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x0864, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0870, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0872, 5, clif->pChangeDir);
- packet(CMSG_MOVE_TO_STORAGE, 0x0874, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0884, 6, clif->pDropItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0888, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x088b, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x08a5, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0935, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x094e, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x095c, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160504
-if (packetVersion == 20160504)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x0202, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0363, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x0365, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x083c, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085f, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x086b, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x087f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0884, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x0886, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0887, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x088a, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_BEING, 0x088d, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088f, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0890, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0893, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0898, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x089d, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ad, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0918, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0921, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_NAME_REQUEST, 0x0922, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0924, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093e, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0940, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0941, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0948, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0952, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0969, 36, clif->pStoragePassword);
-}
-
-// 20160511
-if (packetVersion == 20160511)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085e, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0894, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x089b, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0918, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0920, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0940, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160518
-if (packetVersion == 20160518)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x086c, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0874, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x089a, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a9, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0928, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160525
-if (packetVersion == 20160525)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x085a, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x085e, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0867, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086a, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_PICKUP, 0x0899, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089c, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x091d, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0937, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0945, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_TO_STORAGE, 0x094a, 8, clif->pMoveToKafra);
-// packet(UNKNOWN, 0x094e, 8, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0951, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0956, 8, clif->pMoveFromKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160601
-if (packetVersion == 20160601)
-{
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0202, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x02c4, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0817, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x0863, 6, clif->pTakeItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0870, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087d, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088d, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x088f, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x0895, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x08a7, 8, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08ac, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0924, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x095b, 5, clif->pChangeDir);
- packet(CMSG_STORAGE_PASSWORD, 0x095f, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0961, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160608
-if (packetVersion == 20160608)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x022d, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x02c4, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x035f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0436, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0437, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07ec, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0802, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x085c, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0885, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0889, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0899, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x089b, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a6, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x093b, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x094d, 6, clif->pDropItem);
- packet(CMSG_STORAGE_PASSWORD, 0x0958, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x095b, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0969, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160609
-if (packetVersion == 20160609)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x022d, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x02c4, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x035f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0436, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0437, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x07ec, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x0802, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x085c, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0885, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0889, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0899, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x089b, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a6, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x093b, 4, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x094d, 6, clif->pDropItem);
- packet(CMSG_STORAGE_PASSWORD, 0x0958, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x095b, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0969, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160615
-if (packetVersion == 20160615)
-{
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0281, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0363, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0364, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x0369, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x083c, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0866, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0870, 4, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_PICKUP, 0x087e, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x087f, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x0884, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x0887, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0888, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_PING, 0x088a, 6, clif->pTickSend);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088d, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION, 0x0891, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0898, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092f, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x093e, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0947, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0948, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x094a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x094b, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0954, 5, clif->pChangeDir);
- packet(CMSG_MOVE_TO_STORAGE, 0x0957, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0958, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x095c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CREATE, 0x095e, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0961, 12, clif->pSearchStoreInfoListItemClick);
-}
-
-// 20160622
-if (packetVersion == 20160622)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x023b, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_FROM_STORAGE, 0x035f, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x0361, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_HOMUNCULUS_MENU, 0x07e4, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_SELL, 0x0861, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x0865, 4, clif->pDull);
-// packet(UNKNOWN, 0x0867, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0880, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0887, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0890, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0891, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0892, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x089a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089e, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08a2, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x08a8, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_PICKUP, 0x091c, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x092d, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_BEING, 0x092f, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0936, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0937, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x093b, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x093f, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0946, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x0959, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0965, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0969, 6, clif->pDropItem);
-}
-
-// 20160629
-if (packetVersion == 20160629)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x022d, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x035f, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0363, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0368, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085c, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x085e, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0860, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0861, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0863, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x0867, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0881, 19, clif->pWantToConnection);
- packet(CMSG_HOMUNCULUS_MENU, 0x0885, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x088e, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x0893, 6, clif->pTickSend);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091e, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0922, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0925, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0926, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x093e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0946, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0948, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094a, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0957, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x095a, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0968, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x0969, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x096a, 8, clif->pMoveToKafra);
-}
-
-// 20160630
-if (packetVersion == 20160630)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x022d, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x035f, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0363, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0368, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085c, 90, clif->pUseSkillToPosMoreInfo);
-// packet(UNKNOWN, 0x085e, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0860, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0861, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0863, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x0867, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0881, 19, clif->pWantToConnection);
- packet(CMSG_HOMUNCULUS_MENU, 0x0885, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x088e, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x0893, 6, clif->pTickSend);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091e, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0922, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_BEING, 0x0925, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0926, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x093e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0946, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0948, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094a, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0957, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x095a, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0968, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x0969, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x096a, 8, clif->pMoveToKafra);
-}
-
-// 20160706
-if (packetVersion == 20160706)
-{
- packet(CMSG_SOLVE_CHAR_NAME, 0x0362, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0436, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x085f, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0860, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0869, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x086b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0884, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0886, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0889, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0892, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x0899, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a4, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a5, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x08a8, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0918, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x091b, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION, 0x0924, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0926, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0927, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0929, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x092d, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x0939, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x093d, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0944, 8, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0945, 6, clif->pGetCharNameRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x094c, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0952, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0957, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_PICKUP, 0x0958, 6, clif->pTakeItem);
-}
-
-// 20160713
-if (packetVersion == 20160713)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x022d, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0363, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0364, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x0838, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0860, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0865, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0869, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0875, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION, 0x0877, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_PING, 0x087b, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0883, -1, clif->pSearchStoreInfo);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x088d, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0892, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PARTY_INVITE2, 0x089a, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x089f, 4, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a2, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a4, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x091c, 5, clif->pWalkToXY);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091d, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0921, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0922, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x092c, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0931, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0939, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0944, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0945, 7, clif->pActionRequest);
- packet(CMSG_MOVE_TO_STORAGE, 0x0947, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0957, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x095b, 8, clif->pDull);
-}
-
-// 20160720
-if (packetVersion == 20160720)
-{
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0362, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0363, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0365, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x07e4, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0819, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0838, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_OPEN, 0x086d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x087f, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0883, 10, clif->pUseSkillToPos);
- packet(CMSG_NAME_REQUEST, 0x0887, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0897, -1, clif->pSearchStoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x089a, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x089c, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x089e, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a0, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08aa, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x0917, 4, clif->pDull);
- packet(CMSG_ITEM_PICKUP, 0x091c, 6, clif->pTakeItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x092a, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x093b, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CREATE, 0x093e, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_PING, 0x0946, 6, clif->pTickSend);
- packet(CMSG_SOLVE_CHAR_NAME, 0x094d, 6, clif->pSolveCharName);
-// packet(UNKNOWN, 0x0953, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x095b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x0960, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0969, 26, clif->pPartyInvite2);
-}
-
-// 20160727
-if (packetVersion == 20160727)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x023b, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0362, -1, clif->pSearchStoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0363, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0436, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_PING, 0x0438, 6, clif->pTickSend);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x07ec, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0866, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0868, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0869, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0874, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0877, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0883, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0887, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_BEING, 0x088e, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x0891, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x089f, 10, clif->pUseSkillToPos);
- packet(CMSG_STORAGE_PASSWORD, 0x08a2, 36, clif->pStoragePassword);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08a4, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_PICKUP, 0x08a7, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x092e, 5, clif->pWalkToXY);
- packet(CMSG_HOMUNCULUS_MENU, 0x0936, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0941, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_NAME_REQUEST, 0x0946, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0949, 8, clif->pMoveFromKafra);
- packet(CMSG_MOVE_TO_STORAGE, 0x0951, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x095f, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0966, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0969, -1, clif->pItemListWindowSelected);
-}
-
-// 20160803
-if (packetVersion == 20160803)
-{
- packet(CMSG_MAP_SERVER_CONNECT, 0x0364, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085d, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0878, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087f, 5, clif->pWalkToXY);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0881, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x0886, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x0887, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0888, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x088b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0891, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0895, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089c, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x089e, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a1, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x091b, 6, clif->pTakeItem);
- packet(CMSG_STORAGE_PASSWORD, 0x0929, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0930, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x0932, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0934, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0937, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x093a, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x093e, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093f, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0952, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0955, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0956, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0959, 6, clif->pSolveCharName);
- packet(CMSG_PARTY_INVITE2, 0x095a, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x096a, -1, clif->pReqTradeBuyingStore);
-}
-
-// 20160810
-if (packetVersion == 20160810)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x0361, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION, 0x0819, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0838, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_CLICK, 0x085d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x085e, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x085f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0860, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x086f, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0875, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0879, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x087a, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0885, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0888, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0890, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089d, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x089f, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a9, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_PICKUP, 0x091a, 6, clif->pTakeItem);
- packet(CMSG_NAME_REQUEST, 0x091b, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_BEING, 0x091c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x0926, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_SELL, 0x092b, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x092d, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0935, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_PING, 0x0943, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x094b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0959, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x095b, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0967, 8, clif->pDull);
-}
-
-// 20160831
-if (packetVersion == 20160831)
-{
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x022d, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0366, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x07ec, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0835, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0865, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x086d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0870, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x0874, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0876, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0878, 7, clif->pActionRequest);
- packet(CMSG_NAME_REQUEST, 0x087c, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a8, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x08a9, 6, clif->pTickSend);
- packet(CMSG_STORAGE_PASSWORD, 0x0917, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x091b, 4, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x092c, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x092e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0938, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_HOMUNCULUS_MENU, 0x093a, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0946, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x094a, 5, clif->pChangeDir);
- packet(CMSG_MOVE_TO_STORAGE, 0x094f, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0950, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0954, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0957, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x095e, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_PICKUP, 0x0960, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION, 0x0964, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_BEING, 0x0967, 10, clif->pUseSkillToId);
-}
-
-// 20160907
-if (packetVersion == 20160907)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x091c, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160913
-if (packetVersion == 20160913)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0361, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x0817, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x085b, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_NAME_REQUEST, 0x0865, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0874, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x0875, 6, clif->pTickSend);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0879, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x087a, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x087b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0887, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x0889, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_BEING, 0x088e, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_SELL, 0x088f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0891, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION, 0x0892, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_FROM_STORAGE, 0x089b, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x089c, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a5, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0928, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0935, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x093a, 5, clif->pHomMenu);
- packet(CMSG_PARTY_INVITE2, 0x0949, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x094a, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0950, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0952, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0954, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0962, 4, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0963, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0968, 2, clif->pReqCloseBuyingStore);
-}
-
-// 20160921
-if (packetVersion == 20160921)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x094a, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20160928
-if (packetVersion == 20160928)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0202, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x035f, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0366, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0436, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0811, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x0838, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0864, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0866, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x086d, 6, clif->pDropItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0872, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0878, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0889, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x088e, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0897, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089a, 7, clif->pActionRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x08a2, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a9, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0919, 5, clif->pWalkToXY);
- packet(CMSG_MAP_PING, 0x091e, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_BEING, 0x0927, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x092d, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0944, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x094d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094e, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_SELL, 0x0953, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0955, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x0957, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x095a, 4, clif->pDull);
-}
-
-// 20161005
-if (packetVersion == 20161005)
-{
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0202, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0368, 7, clif->pActionRequest);
- packet(CMSG_STORAGE_PASSWORD, 0x0838, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x0863, 6, clif->pGetCharNameRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0886, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_FROM_STORAGE, 0x088e, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0891, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0892, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PARTY_INVITE2, 0x089b, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x089c, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x08a0, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x08ac, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x08ad, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0918, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0919, 6, clif->pSolveCharName);
-// packet(UNKNOWN, 0x091e, 8, clif->pDull);
- packet(CMSG_MAP_PING, 0x092b, 6, clif->pTickSend);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0931, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0932, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION, 0x093b, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0942, 6, clif->pDropItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0944, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0945, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CREATE, 0x094a, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x094d, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0952, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095b, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_BEING, 0x0967, 10, clif->pUseSkillToId);
-}
-
-// 20161012
-if (packetVersion == 20161012)
-{
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x023b, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0364, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x0365, 6, clif->pTickSend);
- packet(CMSG_PARTY_INVITE2, 0x0369, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CREATE, 0x07ec, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0819, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x085b, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085e, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0863, 7, clif->pActionRequest);
- packet(CMSG_ITEM_PICKUP, 0x0868, 6, clif->pTakeItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086d, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0872, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0875, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION, 0x0880, 10, clif->pUseSkillToPos);
- packet(CMSG_MOVE_TO_STORAGE, 0x0893, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a0, 5, clif->pChangeDir);
- packet(CMSG_SOLVE_CHAR_NAME, 0x092d, 6, clif->pSolveCharName);
- packet(CMSG_NAME_REQUEST, 0x0936, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0937, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0939, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0943, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0944, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0951, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x095c, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x0962, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0966, 5, clif->pWalkToXY);
- packet(CMSG_STORAGE_PASSWORD, 0x0967, 36, clif->pStoragePassword);
-}
-
-// 20161019
-if (packetVersion == 20161019)
-{
- packet(CMSG_BUYINGSTORE_OPEN, 0x022d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_HOMUNCULUS_MENU, 0x0360, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0361, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0437, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0889, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0892, 4, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0946, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0963, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20161026
-if (packetVersion == 20161026)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x0363, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0438, 5, clif->pWalkToXY);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0802, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x085a, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085f, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_SELL, 0x0861, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0862, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086a, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x086c, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x086e, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x087a, -1, clif->pSearchStoreInfo);
-// packet(UNKNOWN, 0x087c, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION, 0x087f, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0886, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0891, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x0894, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0898, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x091a, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_PICKUP, 0x091b, 6, clif->pTakeItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0926, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x092c, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x092e, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x092f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0930, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094b, 8, clif->pMoveFromKafra);
- packet(CMSG_PARTY_INVITE2, 0x0953, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x095c, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x095e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0962, 5, clif->pChangeDir);
-}
-
-// 20161102
-if (packetVersion == 20161102)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x0361, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0367, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0436, 7, clif->pActionRequest);
- packet(CMSG_ITEM_PICKUP, 0x0802, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0838, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x083c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_BEING, 0x085f, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x0869, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086c, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x086f, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0874, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0886, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x088f, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0890, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x089f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a2, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08aa, 5, clif->pWalkToXY);
- packet(CMSG_STORAGE_PASSWORD, 0x091b, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0922, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0925, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0928, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x092f, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0936, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0946, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0949, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0964, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION, 0x0965, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_PING, 0x0966, 6, clif->pTickSend);
-}
-
-// 20161103
-if (packetVersion == 20161103)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x0361, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0367, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0436, 7, clif->pActionRequest);
- packet(CMSG_ITEM_PICKUP, 0x0802, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0838, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x083c, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_BEING, 0x085f, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x0869, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x086c, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x086f, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0874, -1, clif->pSearchStoreInfo);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0886, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x088f, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0890, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x089f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x08a2, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08aa, 5, clif->pWalkToXY);
- packet(CMSG_STORAGE_PASSWORD, 0x091b, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0922, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0925, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0928, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x092f, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0936, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0946, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0949, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0964, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION, 0x0965, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_PING, 0x0966, 6, clif->pTickSend);
-}
-
-// 20161109
-if (packetVersion == 20161109)
-{
- packet(CMSG_BOOKING_REGISTER_REQ, 0x02c4, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0361, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0362, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x0365, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0366, -1, clif->pSearchStoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0835, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0865, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x086a, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x086d, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0870, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0876, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x087a, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0881, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088e, -1, clif->pItemListWindowSelected);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0891, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_PICKUP, 0x0898, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089a, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x089d, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x089f, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x08a7, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_SELL, 0x08ad, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0927, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0937, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x093c, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x093f, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_BEING, 0x0954, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0956, 5, clif->pChangeDir);
-}
-
-// 20161116
-if (packetVersion == 20161116)
-{
- packet(CMSG_MAP_PING, 0x0368, 6, clif->pTickSend);
- packet(CMSG_MOVE_TO_STORAGE, 0x0369, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0835, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x085f, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x0864, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x086f, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0885, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x088b, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x088d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088f, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0890, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0892, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0893, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a1, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a2, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08aa, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08ac, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0920, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_POSITION, 0x0925, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_BEING, 0x092a, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0931, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x093c, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x094a, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0952, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0957, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x095b, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x095d, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x095f, 2, clif->pSearchStoreInfoNextPage);
-// packet(UNKNOWN, 0x0967, 8, clif->pDull);
-}
-
-// 20161123
-if (packetVersion == 20161123)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x035f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0362, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_PING, 0x0437, 6, clif->pTickSend);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085c, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0861, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0862, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0866, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x086f, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0871, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x087f, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0880, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x0882, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x088b, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x089c, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION, 0x08a9, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08aa, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MOVE_TO_STORAGE, 0x091a, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0926, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_OPEN, 0x092a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x092f, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x0930, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0941, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_BEING, 0x094d, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CREATE, 0x094f, -1, clif->pReqOpenBuyingStore);
-// packet(UNKNOWN, 0x095a, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x095b, 7, clif->pActionRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0962, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x096a, 6, clif->pSolveCharName);
-}
-
-// 20161130
-if (packetVersion == 20161130)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x035f, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x0361, 6, clif->pTickSend);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
-// packet(UNKNOWN, 0x088f, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0931, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0943, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0954, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0959, 26, clif->pFriendsListAdd);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20161207
-if (packetVersion == 20161207)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x023b, 5, clif->pHomMenu);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0361, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0867, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0868, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0875, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087e, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0886, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a1, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x08a2, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08ad, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0918, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x091d, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x0943, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x095d, 36, clif->pStoragePassword);
- packet(CMSG_PARTY_INVITE2, 0x0965, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20161214
-if (packetVersion == 20161214)
-{
- packet(CMSG_BUYINGSTORE_OPEN, 0x022d, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0281, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x02c4, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_HOMUNCULUS_MENU, 0x0360, 5, clif->pHomMenu);
- packet(CMSG_MOVE_TO_STORAGE, 0x0364, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0369, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0436, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x0819, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x085a, -1, clif->pItemListWindowSelected);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0862, 26, clif->pFriendsListAdd);
- packet(CMSG_PARTY_INVITE2, 0x086d, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0887, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0895, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0899, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a6, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x092e, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x093d, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20161221
-if (packetVersion == 20161221)
-{
- packet(CMSG_ITEM_PICKUP, 0x035f, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0366, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0438, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x0817, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085b, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0866, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0876, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_NAME_REQUEST, 0x0881, 6, clif->pGetCharNameRequest);
-// packet(UNKNOWN, 0x0884, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0885, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_SELL, 0x088c, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0890, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0899, 4, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x089a, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089b, 7, clif->pActionRequest);
- packet(CMSG_MAP_PING, 0x08aa, 6, clif->pTickSend);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x091e, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x0926, 26, clif->pPartyInvite2);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0928, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x092c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092e, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_HOMUNCULUS_MENU, 0x0930, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x0943, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x0946, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_CREATE, 0x094b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0964, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0965, 5, clif->pChangeDir);
-}
-
-// 20161228
-if (packetVersion == 20161228)
-{
- packet(CMSG_BUYINGSTORE_SELL, 0x0362, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x085a, 6, clif->pGetCharNameRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x085e, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0865, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x086a, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x086c, 6, clif->pTakeItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086d, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0870, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0871, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0875, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x087f, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0886, 5, clif->pWalkToXY);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0889, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0893, 6, clif->pDropItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x089f, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_BEING, 0x08a2, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a3, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a5, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08ab, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x08ac, 6, clif->pSolveCharName);
- packet(CMSG_STORAGE_PASSWORD, 0x08ad, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091c, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION, 0x0929, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092c, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x0934, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0935, 8, clif->pDull);
-// packet(UNKNOWN, 0x0938, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x093d, 7, clif->pActionRequest);
- packet(CMSG_MAP_PING, 0x0944, 6, clif->pTickSend);
-}
-
-// 20170104
-if (packetVersion == 20170104)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0438, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION, 0x083c, 10, clif->pUseSkillToPos);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x085a, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x087f, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0896, 5, clif->pChangeDir);
- packet(CMSG_HOMUNCULUS_MENU, 0x091b, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_BEING, 0x0940, 10, clif->pUseSkillToId);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170111
-if (packetVersion == 20170111)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_HOMUNCULUS_MENU, 0x085d, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0877, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x087f, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x088a, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a1, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x08a3, 6, clif->pTakeItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a6, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_STORAGE_PASSWORD, 0x091a, 36, clif->pStoragePassword);
- packet(CMSG_MAP_SERVER_CONNECT, 0x091b, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094c, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0961, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0969, 26, clif->pPartyInvite2);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170118
-if (packetVersion == 20170118)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x022d, 10, clif->pUseSkillToPos);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0364, 6, clif->pGetCharNameRequest);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0436, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0438, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0862, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0865, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x086f, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0873, 4, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x089e, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08ad, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x091f, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0927, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0933, 6, clif->pDropItem);
- packet(CMSG_STORAGE_PASSWORD, 0x0958, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0962, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x096a, 8, clif->pMoveToKafra);
-}
-
-// 20170125
-if (packetVersion == 20170125)
-{
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0438, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0811, 19, clif->pWantToConnection);
- packet(CMSG_PARTY_INVITE2, 0x086e, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x0876, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0877, 6, clif->pDropItem);
- packet(CMSG_SKILL_USE_BEING, 0x0879, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x087b, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x087d, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0881, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x0884, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0893, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0894, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0895, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0898, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x089b, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a5, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x091b, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x091c, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x091d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0920, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0929, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION, 0x092b, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0930, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x093c, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_PING, 0x0943, 6, clif->pTickSend);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0944, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x095c, 8, clif->pMoveFromKafra);
- packet(CMSG_NAME_REQUEST, 0x0965, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0968, 2, clif->pSearchStoreInfoNextPage);
-}
-
-// 20170201
-if (packetVersion == 20170201)
-{
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0815, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x085d, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085e, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0875, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x0879, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x0881, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0884, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0885, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_STORAGE_PASSWORD, 0x0886, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088b, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x08a4, 8, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0919, 26, clif->pFriendsListAdd);
- packet(CMSG_PARTY_INVITE2, 0x0920, 26, clif->pPartyInvite2);
- packet(CMSG_HOMUNCULUS_MENU, 0x0938, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0940, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094c, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0966, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0969, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170208
-if (packetVersion == 20170208)
-{
-// packet(UNKNOWN, 0x02c4, 4, clif->pDull);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0367, -1, clif->pItemListWindowSelected);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x085c, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0860, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x087a, 8, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x088c, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0892, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a1, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ac, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0921, 6, clif->pDropItem);
- packet(CMSG_ITEM_PICKUP, 0x0923, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x092d, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0932, 8, clif->pMoveFromKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0937, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170215
-if (packetVersion == 20170215)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x02c4, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_SELL, 0x035f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0360, 6, clif->pTickSend);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0811, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x083c, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x085c, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0876, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x087c, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x087d, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_BEING, 0x087e, 10, clif->pUseSkillToId);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0883, 6, clif->pSolveCharName);
-// packet(UNKNOWN, 0x0884, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x088a, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x088b, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CREATE, 0x088c, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0890, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0896, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x089b, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a2, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a8, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x091c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0925, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x092b, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092d, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_PICKUP, 0x0942, 6, clif->pTakeItem);
- packet(CMSG_NAME_REQUEST, 0x094e, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x095f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0962, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0969, 5, clif->pWalkToXY);
-}
-
-// 20170222
-if (packetVersion == 20170222)
-{
- packet(CMSG_HOMUNCULUS_MENU, 0x0202, 5, clif->pHomMenu);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x085f, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0866, 6, clif->pDropItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0870, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0871, 4, clif->pDull);
-// packet(UNKNOWN, 0x0877, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0889, -1, clif->pSearchStoreInfo);
- packet(CMSG_ITEM_PICKUP, 0x0894, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08a3, 5, clif->pChangeDir);
- packet(CMSG_PARTY_INVITE2, 0x08a8, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0937, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0939, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x0943, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_TO_STORAGE, 0x095d, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0962, 8, clif->pMoveFromKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170228
-if (packetVersion == 20170228)
-{
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x022d, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0360, 7, clif->pActionRequest);
- packet(CMSG_HOMUNCULUS_MENU, 0x0362, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0819, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x085e, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0863, -1, clif->pSearchStoreInfo);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086b, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0873, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0874, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0876, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0883, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0884, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0889, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x0893, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_TO_STORAGE, 0x089e, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a0, 26, clif->pFriendsListAdd);
- packet(CMSG_STORAGE_PASSWORD, 0x08a2, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x08a6, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a7, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x091f, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_PICKUP, 0x092a, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x092e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0937, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x093e, 4, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0944, 8, clif->pMoveFromKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0947, 6, clif->pSolveCharName);
- packet(CMSG_PARTY_INVITE2, 0x0948, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION, 0x0952, 10, clif->pUseSkillToPos);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0955, 18, clif->pPartyBookingRegisterReq);
-}
-
-// 20170308
-if (packetVersion == 20170308)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x087d, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170315
-if (packetVersion == 20170315)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x02c4, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x035f, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0360, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0366, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0367, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0436, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x07ec, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x085c, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0863, 5, clif->pHomMenu);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086a, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0872, 26, clif->pFriendsListAdd);
- packet(CMSG_PARTY_INVITE2, 0x087b, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0884, 7, clif->pActionRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x088b, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x088d, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x088f, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_BEING, 0x0892, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x089c, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x08aa, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x091a, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CREATE, 0x091b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x091d, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0920, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0922, -1, clif->pItemListWindowSelected);
- packet(CMSG_NAME_REQUEST, 0x0944, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x094a, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x094e, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0950, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_STORAGE_PASSWORD, 0x0952, 36, clif->pStoragePassword);
-}
-
-// 20170322
-if (packetVersion == 20170322)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x091a, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170329
-if (packetVersion == 20170329)
-{
- packet(CMSG_PARTY_INVITE2, 0x0281, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0362, 5, clif->pHomMenu);
- packet(CMSG_MOVE_TO_STORAGE, 0x0363, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x085d, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x087a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0888, -1, clif->pSearchStoreInfo);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x08a8, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0917, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0926, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x0929, 6, clif->pTakeItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x092e, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0937, -1, clif->pItemListWindowSelected);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0939, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0949, 8, clif->pMoveFromKafra);
-// packet(UNKNOWN, 0x095f, 4, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170405
-if (packetVersion == 20170405)
-{
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x022d, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0281, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0362, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0363, 4, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_ITEM_PICKUP, 0x0369, 6, clif->pTakeItem);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x0835, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x085f, 8, clif->pMoveToKafra);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0860, -1, clif->pItemListWindowSelected);
- packet(CMSG_PARTY_INVITE2, 0x0864, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0865, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x086f, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0893, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a5, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x094c, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x094f, 8, clif->pDull);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0964, 6, clif->pDropItem);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170412
-if (packetVersion == 20170412)
-{
- packet(CMSG_SKILL_USE_POSITION, 0x023b, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0365, 6, clif->pReqClickBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0863, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0869, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_FROM_STORAGE, 0x086d, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0878, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x0879, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x087b, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x088b, -1, clif->pSearchStoreInfo);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0890, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0893, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0898, 6, clif->pSolveCharName);
- packet(CMSG_HOMUNCULUS_MENU, 0x089a, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089c, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x08a1, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x091a, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x091e, 19, clif->pWantToConnection);
- packet(CMSG_MAP_PING, 0x0929, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x092e, 8, clif->pDull);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0938, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0942, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0945, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0949, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PARTY_INVITE2, 0x094f, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0952, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0959, 6, clif->pTakeItem);
- packet(CMSG_NAME_REQUEST, 0x095b, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x095c, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_STORAGE_PASSWORD, 0x095d, 36, clif->pStoragePassword);
-}
-
-// 20170419
-if (packetVersion == 20170419)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0811, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0819, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_NAME_REQUEST, 0x0838, 6, clif->pGetCharNameRequest);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085a, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085e, 5, clif->pWalkToXY);
- packet(CMSG_PARTY_INVITE2, 0x0862, 26, clif->pPartyInvite2);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0868, -1, clif->pSearchStoreInfo);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x086a, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0872, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0881, 36, clif->pStoragePassword);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x088d, -1, clif->pItemListWindowSelected);
- packet(CMSG_HOMUNCULUS_MENU, 0x088f, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0897, 6, clif->pDropItem);
- packet(CMSG_MAP_PING, 0x0898, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x089d, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x08aa, 8, clif->pMoveToKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091b, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_BEING, 0x0920, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0922, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0930, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0931, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0935, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093a, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION, 0x093f, 10, clif->pUseSkillToPos);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0942, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_PICKUP, 0x095c, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x095d, -1, clif->pReqTradeBuyingStore);
-// packet(UNKNOWN, 0x0963, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0965, 6, clif->pReqClickBuyingStore);
-}
-
-// 20170426
-if (packetVersion == 20170426)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x0281, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0866, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x086f, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x087a, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0887, 6, clif->pSolveCharName);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0899, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x089c, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a2, 19, clif->pWantToConnection);
- packet(CMSG_ITEM_PICKUP, 0x08a4, 6, clif->pTakeItem);
-// packet(UNKNOWN, 0x091f, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0927, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0940, 6, clif->pDropItem);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0958, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0963, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170502
-if (packetVersion == 20170502)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0875, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0894, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x089c, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x093c, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x0950, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170517
-if (packetVersion == 20170517)
-{
-// packet(UNKNOWN, 0x0364, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0367, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0437, 7, clif->pActionRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0802, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_BEING, 0x0815, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION, 0x0817, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0868, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0875, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087b, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x087d, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x088c, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x088d, 5, clif->pChangeDir);
- packet(CMSG_NAME_REQUEST, 0x0894, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0896, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PARTY_INVITE2, 0x0899, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x089e, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x089f, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_MAP_PING, 0x08a2, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a8, 5, clif->pWalkToXY);
- packet(CMSG_MOVE_TO_STORAGE, 0x08aa, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x091b, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0923, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x093b, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0945, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0946, 6, clif->pReqClickBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0947, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x0958, 5, clif->pHomMenu);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0960, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_PICKUP, 0x0964, 6, clif->pTakeItem);
-}
-
-// 20170524
-if (packetVersion == 20170524)
-{
- packet(CMSG_PARTY_INVITE2, 0x0364, 26, clif->pPartyInvite2);
- packet(CMSG_STORAGE_PASSWORD, 0x0368, 36, clif->pStoragePassword);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0802, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x085e, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x085f, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MAP_PING, 0x0860, 6, clif->pTickSend);
- packet(CMSG_ITEM_PICKUP, 0x0864, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0866, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x0868, 8, clif->pMoveToKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x086d, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0873, 19, clif->pWantToConnection);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0874, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_CREATE, 0x087d, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_SELL, 0x0882, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_BEING, 0x088d, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0894, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x089c, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_CLICK, 0x08a1, 12, clif->pSearchStoreInfoListItemClick);
-// packet(UNKNOWN, 0x091e, 8, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0923, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0925, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0934, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION, 0x0946, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0958, 4, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x095a, 6, clif->pGetCharNameRequest);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x095b, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0964, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0967, 26, clif->pFriendsListAdd);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0968, 6, clif->pSolveCharName);
-}
-
-// 20170531
-if (packetVersion == 20170531)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0361, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_BEING, 0x0369, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x07e4, 5, clif->pWalkToXY);
- packet(CMSG_BUYINGSTORE_SELL, 0x07ec, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_MAP_PING, 0x0819, 6, clif->pTickSend);
-// packet(UNKNOWN, 0x085b, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085f, 6, clif->pSolveCharName);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0861, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x0868, 4, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0873, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x0875, 10, clif->pUseSkillToPos);
- packet(CMSG_PARTY_INVITE2, 0x0878, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x087b, 7, clif->pActionRequest);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0885, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x088b, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x088d, 6, clif->pDropItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0894, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x089a, 36, clif->pStoragePassword);
- packet(CMSG_HOMUNCULUS_MENU, 0x089c, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x08a2, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08ac, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x08ad, 8, clif->pMoveToKafra);
- packet(CMSG_NAME_REQUEST, 0x092d, 6, clif->pGetCharNameRequest);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0933, 8, clif->pMoveFromKafra);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0937, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0940, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0945, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0963, 6, clif->pTakeItem);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0968, -1, clif->pSearchStoreInfo);
-}
-
-// 20170607
-if (packetVersion == 20170607)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0361, -1, clif->pItemListWindowSelected);
- packet(CMSG_STORAGE_PASSWORD, 0x0364, 36, clif->pStoragePassword);
- packet(CMSG_MAP_PING, 0x07e4, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085a, 5, clif->pChangeDir);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x085e, -1, clif->pSearchStoreInfo);
- packet(CMSG_NAME_REQUEST, 0x0862, 6, clif->pGetCharNameRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0863, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0864, 6, clif->pDropItem);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0871, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0873, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0875, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0885, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_FROM_STORAGE, 0x088a, 8, clif->pMoveFromKafra);
- packet(CMSG_ITEM_PICKUP, 0x0897, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x089d, 8, clif->pMoveToKafra);
- packet(CMSG_SKILL_USE_BEING, 0x08a9, 10, clif->pUseSkillToId);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x08ab, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0917, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0918, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_BUYINGSTORE_SELL, 0x0919, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0925, 26, clif->pPartyInvite2);
- packet(CMSG_SKILL_USE_POSITION, 0x0927, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x0931, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0934, 5, clif->pWalkToXY);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0938, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x093d, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0942, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0944, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0949, -1, clif->pReqOpenBuyingStore);
-}
-
-// 20170614
-if (packetVersion == 20170614)
-{
- packet(CMSG_MOVE_FROM_STORAGE, 0x023b, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0361, 5, clif->pWalkToXY);
- packet(CMSG_HOMUNCULUS_MENU, 0x0364, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0367, 6, clif->pDropItem);
- packet(CMSG_STORAGE_PASSWORD, 0x0437, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION, 0x0838, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x083c, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0860, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x0865, 4, clif->pDull);
- packet(CMSG_MAP_PING, 0x0866, 6, clif->pTickSend);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0867, 26, clif->pFriendsListAdd);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x086b, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x086c, -1, clif->pSearchStoreInfo);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0877, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MOVE_TO_STORAGE, 0x0879, 8, clif->pMoveToKafra);
- packet(CMSG_SOLVE_CHAR_NAME, 0x087d, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x087e, 5, clif->pChangeDir);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0889, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PARTY_INVITE2, 0x0899, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x089d, -1, clif->pItemListWindowSelected);
- packet(CMSG_BUYINGSTORE_CREATE, 0x08a2, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x08ad, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_BEING, 0x091b, 10, clif->pUseSkillToId);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0928, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BUYINGSTORE_SELL, 0x092f, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x0936, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0944, 19, clif->pWantToConnection);
-// packet(UNKNOWN, 0x0957, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0963, 12, clif->pSearchStoreInfoListItemClick);
-}
-
-// 20170621
-if (packetVersion == 20170621)
-{
- packet(CMSG_SEARCHSTORE_CLICK, 0x0202, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0361, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0365, -1, clif->pItemListWindowSelected);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0366, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x07e4, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0802, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x085d, 5, clif->pChangeDir);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x087d, 6, clif->pDropItem);
- packet(CMSG_PARTY_INVITE2, 0x0885, 26, clif->pPartyInvite2);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0889, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x08a8, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0956, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0957, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x095b, 4, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x095c, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0961, 19, clif->pWantToConnection);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170628
-if (packetVersion == 20170628)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0863, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170705
-if (packetVersion == 20170705)
-{
- packet(CMSG_STORAGE_PASSWORD, 0x0202, 36, clif->pStoragePassword);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x02c4, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MOVE_TO_STORAGE, 0x0879, 8, clif->pMoveToKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0886, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x088d, 8, clif->pDull);
- packet(CMSG_PARTY_INVITE2, 0x088e, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_SERVER_CONNECT, 0x089a, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x089d, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x091a, 5, clif->pChangeDir);
-// packet(UNKNOWN, 0x092f, 4, clif->pDull);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0930, -1, clif->pItemListWindowSelected);
- packet(CMSG_ITEM_PICKUP, 0x0932, 6, clif->pTakeItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0934, 8, clif->pMoveFromKafra);
- packet(CMSG_HOMUNCULUS_MENU, 0x094c, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170712
-if (packetVersion == 20170712)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0202, 5, clif->pChangeDir);
- packet(CMSG_MAP_SERVER_CONNECT, 0x022d, 19, clif->pWantToConnection);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x023b, 26, clif->pFriendsListAdd);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x0361, 5, clif->pHomMenu);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0944, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170719
-if (packetVersion == 20170719)
-{
- packet(CMSG_PLAYER_CHANGE_ACT, 0x022d, 7, clif->pActionRequest);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0367, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x0368, 4, clif->pDull);
- packet(CMSG_HOMUNCULUS_MENU, 0x0369, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x07e4, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x085a, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_CREATE, 0x085e, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0863, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x086e, 26, clif->pPartyInvite2);
- packet(CMSG_ITEM_PICKUP, 0x087d, 6, clif->pTakeItem);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0881, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0882, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0885, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION, 0x0891, 10, clif->pUseSkillToPos);
- packet(CMSG_SKILL_USE_BEING, 0x0898, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x089a, 36, clif->pStoragePassword);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x089d, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a6, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x08a8, 19, clif->pWantToConnection);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x091b, 6, clif->pDropItem);
- packet(CMSG_SOLVE_CHAR_NAME, 0x091f, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_SELL, 0x092c, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x092e, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x092f, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x093d, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x093e, 8, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0944, 5, clif->pChangeDir);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0946, 26, clif->pFriendsListAdd);
- packet(CMSG_MOVE_TO_STORAGE, 0x0966, 8, clif->pMoveToKafra);
-}
-
-// 20170726
-if (packetVersion == 20170726)
-{
- packet(CMSG_BUYINGSTORE_CREATE, 0x0363, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_MOVE_TO_STORAGE, 0x0364, 8, clif->pMoveToKafra);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0366, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_BEING, 0x0369, 10, clif->pUseSkillToId);
- packet(CMSG_PARTY_INVITE2, 0x0438, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0838, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0873, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0874, -1, clif->pItemListWindowSelected);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0878, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0881, 4, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0888, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x088e, 5, clif->pWalkToXY);
-// packet(UNKNOWN, 0x08a3, 8, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x08a7, 36, clif->pStoragePassword);
- packet(CMSG_NAME_REQUEST, 0x08aa, 6, clif->pGetCharNameRequest);
- packet(CMSG_ITEM_PICKUP, 0x08ab, 6, clif->pTakeItem);
- packet(CMSG_MAP_PING, 0x08ac, 6, clif->pTickSend);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x091d, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_CLICK, 0x091e, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_HOMUNCULUS_MENU, 0x091f, 5, clif->pHomMenu);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0921, 6, clif->pSolveCharName);
- packet(CMSG_BUYINGSTORE_SELL, 0x0923, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0943, 6, clif->pDropItem);
- packet(CMSG_MOVE_FROM_STORAGE, 0x094f, 8, clif->pMoveFromKafra);
- packet(CMSG_SKILL_USE_POSITION, 0x0950, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0952, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0954, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x095a, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0963, -1, clif->pSearchStoreInfo);
-}
-
-// 20170801
-if (packetVersion == 20170801)
-{
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x022d, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0281, 5, clif->pChangeDir);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0361, -1, clif->pItemListWindowSelected);
- packet(CMSG_HOMUNCULUS_MENU, 0x0362, 5, clif->pHomMenu);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PARTY_INVITE2, 0x0802, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x087d, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x08a6, 4, clif->pDull);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x094f, 26, clif->pFriendsListAdd);
- packet(CMSG_MAP_SERVER_CONNECT, 0x095a, 19, clif->pWantToConnection);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170816
-if (packetVersion == 20170816)
-{
- packet(CMSG_NAME_REQUEST, 0x022d, 6, clif->pGetCharNameRequest);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x035f, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0361, -1, clif->pItemListWindowSelected);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0362, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0438, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x085a, 6, clif->pSolveCharName);
- packet(CMSG_SKILL_USE_POSITION, 0x0862, 10, clif->pUseSkillToPos);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0864, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x087e, 6, clif->pTakeItem);
- packet(CMSG_BUYINGSTORE_SELL, 0x0881, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_STORAGE_PASSWORD, 0x0882, 36, clif->pStoragePassword);
-// packet(UNKNOWN, 0x0884, 8, clif->pDull);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0888, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_MAP_PING, 0x0889, 6, clif->pTickSend);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a3, 26, clif->pFriendsListAdd);
-// packet(UNKNOWN, 0x08a7, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x08a9, 5, clif->pWalkToXY);
- packet(CMSG_HOMUNCULUS_MENU, 0x08ac, 5, clif->pHomMenu);
- packet(CMSG_SEARCHSTORE_CLICK, 0x091c, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0921, 6, clif->pReqClickBuyingStore);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0925, 8, clif->pMoveFromKafra);
- packet(CMSG_BUYINGSTORE_CREATE, 0x092c, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x093a, 26, clif->pPartyInvite2);
- packet(CMSG_MAP_SERVER_CONNECT, 0x093d, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_BEING, 0x0940, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0941, 6, clif->pDropItem);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0950, 5, clif->pChangeDir);
- packet(CMSG_MOVE_TO_STORAGE, 0x0959, 8, clif->pMoveToKafra);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0960, -1, clif->pSearchStoreInfo);
-}
-
-// 20170823
-if (packetVersion == 20170823)
-{
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0281, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0361, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0362, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x0363, 8, clif->pDull);
- packet(CMSG_MOVE_FROM_STORAGE, 0x0364, 8, clif->pMoveFromKafra);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0365, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0366, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
-// packet(UNKNOWN, 0x0436, 4, clif->pDull);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_ITEM_PICKUP, 0x07e4, 6, clif->pTakeItem);
- packet(CMSG_MOVE_TO_STORAGE, 0x07ec, 8, clif->pMoveToKafra);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0802, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_MAP_SERVER_CONNECT, 0x086c, 19, clif->pWantToConnection);
- packet(CMSG_STORAGE_PASSWORD, 0x086d, 36, clif->pStoragePassword);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08ac, 26, clif->pFriendsListAdd);
- packet(CMSG_HOMUNCULUS_MENU, 0x095b, 5, clif->pHomMenu);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170830
-if (packetVersion == 20170830)
-{
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0281, 5, clif->pChangeDir);
- packet(CMSG_ITEM_PICKUP, 0x02c4, 6, clif->pTakeItem);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0363, 18, clif->pPartyBookingRegisterReq);
-// packet(UNKNOWN, 0x0364, 8, clif->pDull);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0860, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0865, 5, clif->pWalkToXY);
- packet(CMSG_PARTY_INVITE2, 0x086a, 26, clif->pPartyInvite2);
-// packet(UNKNOWN, 0x0875, 4, clif->pDull);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0884, 19, clif->pWantToConnection);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0885, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SKILL_USE_BEING, 0x0888, 10, clif->pUseSkillToId);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0897, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0899, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x089a, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_TO_STORAGE, 0x089e, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x08a2, 36, clif->pStoragePassword);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a8, 8, clif->pMoveFromKafra);
- packet(CMSG_MAP_PING, 0x091e, 6, clif->pTickSend);
- packet(CMSG_HOMUNCULUS_MENU, 0x0921, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0925, 6, clif->pReqClickBuyingStore);
- packet(CMSG_NAME_REQUEST, 0x092e, 6, clif->pGetCharNameRequest);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0939, 26, clif->pFriendsListAdd);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x093e, 7, clif->pActionRequest);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0940, 6, clif->pSolveCharName);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0942, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0943, -1, clif->pSearchStoreInfo);
- packet(CMSG_BUYINGSTORE_SELL, 0x0947, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0951, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SKILL_USE_POSITION, 0x0959, 10, clif->pUseSkillToPos);
-}
-
-// 20170906
-if (packetVersion == 20170906)
-{
-// packet(UNKNOWN, 0x0202, 4, clif->pDull);
- packet(CMSG_STORAGE_PASSWORD, 0x0281, 36, clif->pStoragePassword);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x02c4, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MAP_PING, 0x035f, 6, clif->pTickSend);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0360, 6, clif->pReqClickBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x0366, 26, clif->pPartyInvite2);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0368, 6, clif->pSolveCharName);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0369, 7, clif->pActionRequest);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0437, 5, clif->pWalkToXY);
- packet(CMSG_SKILL_USE_POSITION, 0x0438, 10, clif->pUseSkillToPos);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0802, 5, clif->pChangeDir);
- packet(CMSG_BUYINGSTORE_SELL, 0x0811, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0815, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0817, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0819, -1, clif->pSearchStoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0835, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0838, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_SKILL_USE_BEING, 0x083c, 10, clif->pUseSkillToId);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x0860, 6, clif->pDropItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0866, -1, clif->pItemListWindowSelected);
-// packet(UNKNOWN, 0x086c, 8, clif->pDull);
- packet(CMSG_MOVE_TO_STORAGE, 0x087b, 8, clif->pMoveToKafra);
- packet(CMSG_MOVE_FROM_STORAGE, 0x08a2, 8, clif->pMoveFromKafra);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x08a3, 26, clif->pFriendsListAdd);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08a7, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_ITEM_PICKUP, 0x091a, 6, clif->pTakeItem);
- packet(CMSG_HOMUNCULUS_MENU, 0x091e, 5, clif->pHomMenu);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0953, 19, clif->pWantToConnection);
- packet(CMSG_NAME_REQUEST, 0x096a, 6, clif->pGetCharNameRequest);
-}
-
-// 20170913
-if (packetVersion == 20170913)
-{
- packet(CMSG_NAME_REQUEST, 0x0281, 6, clif->pGetCharNameRequest);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x035f, 26, clif->pFriendsListAdd);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x0437, -1, clif->pSearchStoreInfo);
- packet(CMSG_MOVE_FROM_STORAGE, 0x07e4, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x0817, 7, clif->pActionRequest);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0835, 19, clif->pWantToConnection);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x085a, 2, clif->pReqCloseBuyingStore);
- packet(CMSG_ITEM_PICKUP, 0x0860, 6, clif->pTakeItem);
- packet(CMSG_PARTY_INVITE2, 0x0865, 26, clif->pPartyInvite2);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0866, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_HOMUNCULUS_MENU, 0x088c, 5, clif->pHomMenu);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0890, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_MOVE_TO_STORAGE, 0x0891, 8, clif->pMoveToKafra);
- packet(CMSG_STORAGE_PASSWORD, 0x0892, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_OPEN, 0x08a6, 6, clif->pReqClickBuyingStore);
-// packet(UNKNOWN, 0x08a7, 4, clif->pDull);
- packet(CMSG_SKILL_USE_BEING, 0x08aa, 10, clif->pUseSkillToId);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x08ab, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x08ac, 5, clif->pChangeDir);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x08ad, -1, clif->pItemListWindowSelected);
- packet(CMSG_MAP_PING, 0x091b, 6, clif->pTickSend);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x091d, 6, clif->pDropItem);
-// packet(UNKNOWN, 0x091e, 8, clif->pDull);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x0920, 2, clif->pSearchStoreInfoNextPage);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x0923, 5, clif->pWalkToXY);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0925, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_BUYINGSTORE_SELL, 0x0927, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SKILL_USE_POSITION, 0x095a, 10, clif->pUseSkillToPos);
- packet(CMSG_SOLVE_CHAR_NAME, 0x095c, 6, clif->pSolveCharName);
-}
-
-// 20170920
-if (packetVersion == 20170920)
-{
- packet(CMSG_ITEM_PICKUP, 0x0369, 6, clif->pTakeItem);
- packet(CMSG_ITEM_LIST_WINDOW_SELECT, 0x0436, -1, clif->pItemListWindowSelected);
- packet(CMSG_MOVE_FROM_STORAGE, 0x07ec, 8, clif->pMoveFromKafra);
- packet(CMSG_PLAYER_CHANGE_DEST, 0x085a, 5, clif->pWalkToXY);
- packet(CMSG_FRIENDS_ADD_PLAYER, 0x0861, 26, clif->pFriendsListAdd);
- packet(CMSG_SKILL_USE_BEING, 0x0862, 10, clif->pUseSkillToId);
- packet(CMSG_STORAGE_PASSWORD, 0x0864, 36, clif->pStoragePassword);
- packet(CMSG_BUYINGSTORE_CREATE, 0x0865, -1, clif->pReqOpenBuyingStore);
- packet(CMSG_PARTY_INVITE2, 0x086a, 26, clif->pPartyInvite2);
- packet(CMSG_PLAYER_INVENTORY_DROP, 0x086c, 6, clif->pDropItem);
- packet(CMSG_BUYINGSTORE_CLOSE, 0x0874, 2, clif->pReqCloseBuyingStore);
-// packet(UNKNOWN, 0x0875, 4, clif->pDull);
- packet(CMSG_NAME_REQUEST, 0x0889, 6, clif->pGetCharNameRequest);
- packet(CMSG_MAP_PING, 0x088e, 6, clif->pTickSend);
- packet(CMSG_PLAYER_CHANGE_ACT, 0x089b, 7, clif->pActionRequest);
- packet(CMSG_SKILL_USE_POSITION, 0x0919, 10, clif->pUseSkillToPos);
-// packet(UNKNOWN, 0x091e, 8, clif->pDull);
- packet(CMSG_SOLVE_CHAR_NAME, 0x0921, 6, clif->pSolveCharName);
- packet(CMSG_MAP_SERVER_CONNECT, 0x0923, 19, clif->pWantToConnection);
- packet(CMSG_MOVE_TO_STORAGE, 0x0926, 8, clif->pMoveToKafra);
- packet(CMSG_BUYINGSTORE_SELL, 0x092e, -1, clif->pReqTradeBuyingStore);
- packet(CMSG_SEARCHSTORE_CLICK, 0x0937, 12, clif->pSearchStoreInfoListItemClick);
- packet(CMSG_PLAYER_CHANGE_DIR, 0x0939, 5, clif->pChangeDir);
- packet(CMSG_BOOKING_REGISTER_REQ, 0x0945, 18, clif->pPartyBookingRegisterReq);
- packet(CMSG_SEARCHSTORE_SEARCH, 0x094c, -1, clif->pSearchStoreInfo);
- packet(CMSG_HOMUNCULUS_MENU, 0x095d, 5, clif->pHomMenu);
- packet(CMSG_BUYINGSTORE_OPEN, 0x0961, 6, clif->pReqClickBuyingStore);
- packet(CMSG_SKILL_USE_POSITION_MORE, 0x0966, 90, clif->pUseSkillToPosMoreInfo);
- packet(CMSG_SEARCHSTORE_NEXT_PAGE, 0x096a, 2, clif->pSearchStoreInfoNextPage);
-}
-
-#endif
diff --git a/src/net/eathena/partyhandler.cpp b/src/net/eathena/partyhandler.cpp
deleted file mode 100644
index 07482dce7..000000000
--- a/src/net/eathena/partyhandler.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 Lloyd Bryant <lloyd_bryant@netzero.net>
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/partyhandler.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/localplayer.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "net/ea/partyrecv.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/partyrecv.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-PartyHandler::PartyHandler() :
- Ea::PartyHandler()
-{
- partyHandler = this;
-}
-
-PartyHandler::~PartyHandler()
-{
- partyHandler = nullptr;
-}
-
-void PartyHandler::create(const std::string &name) const
-{
- createOutPacket(CMSG_PARTY_CREATE);
- outMsg.writeString(name.substr(0, 23), 24, "party name");
-}
-
-void PartyHandler::invite(const std::string &name) const
-{
- if (actorManager == nullptr)
- return;
- const Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being != nullptr)
- {
- createOutPacket(CMSG_PARTY_INVITE);
- outMsg.writeBeingId(being->getId(), "account id");
- }
- else
- {
- if (packetVersion < 20070227)
- return;
- createOutPacket(CMSG_PARTY_INVITE2);
- outMsg.writeString(name, 24, "nick");
- }
-}
-
-void PartyHandler::inviteResponse(const int partyId,
- const bool accept) const
-{
- if (localPlayer != nullptr)
- {
- createOutPacket(CMSG_PARTY_INVITED2);
- outMsg.writeInt32(partyId, "party id");
- outMsg.writeInt8(CAST_S8(accept ? 1 : 0), "accept");
- }
-}
-
-void PartyHandler::leave() const
-{
- createOutPacket(CMSG_PARTY_LEAVE);
-}
-
-void PartyHandler::kick(const Being *const being) const
-{
- if (being != nullptr)
- {
- createOutPacket(CMSG_PARTY_KICK);
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeString(being->getName(), 24, "player name");
- }
-}
-
-void PartyHandler::kick(const std::string &name) const
-{
- if (Ea::taParty == nullptr)
- return;
-
- const PartyMember *const m = Ea::taParty->getMember(name);
- if (m == nullptr)
- {
- NotifyManager::notify(NotifyTypes::PARTY_USER_NOT_IN_PARTY, name);
- return;
- }
-
- createOutPacket(CMSG_PARTY_KICK);
- outMsg.writeBeingId(m->getID(), "account id");
- outMsg.writeString(name, 24, "player name");
-}
-
-void PartyHandler::chat(const std::string &text) const
-{
- createOutPacket(CMSG_PARTY_MESSAGE);
- const std::string mes = std::string(localPlayer->getName()).append(
- " : ").append(text);
- if (packetVersion >= 20151001)
- {
- outMsg.writeInt16(CAST_S16(mes.length() + 4), "len");
- outMsg.writeString(mes, CAST_S32(mes.length()), "nick : message");
- }
- else
- {
- outMsg.writeInt16(CAST_S16(mes.length() + 4 + 1), "len");
- outMsg.writeString(mes, CAST_S32(mes.length()), "nick : message");
- outMsg.writeInt8(0, "null char");
- }
-}
-
-// +++ must be 3 types item, exp, pickup
-void PartyHandler::setShareExperience(const PartyShareT share) const
-{
- if (share == PartyShare::NOT_POSSIBLE)
- return;
-
- createOutPacket(CMSG_PARTY_SETTINGS);
- if (packetVersion >= 20090603)
- {
- outMsg.writeInt32(CAST_S32(share), "share exp");
- outMsg.writeInt16(CAST_S16(Ea::PartyRecv::mShareItems),
- "share items");
- }
- else
- {
- outMsg.writeInt32(CAST_S32(share), "share exp");
- }
-}
-
-// +++ must be 3 types item, exp, pickup
-void PartyHandler::setShareItems(const PartyShareT share) const
-{
- if (share == PartyShare::NOT_POSSIBLE)
- return;
-
- createOutPacket(CMSG_PARTY_SETTINGS);
- if (packetVersion >= 20090603)
- {
- outMsg.writeInt32(CAST_S32(Ea::PartyRecv::mShareExp),
- "share exp");
- outMsg.writeInt16(CAST_S16(share), "share items");
- }
-}
-
-void PartyHandler::changeLeader(const std::string &name) const
-{
- const Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being == nullptr)
- return;
- createOutPacket(CMSG_PARTY_CHANGE_LEADER);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void PartyHandler::allowInvite(const bool allow) const
-{
- createOutPacket(CMSG_PARTY_ALLOW_INVITES);
- outMsg.writeInt8(CAST_S8(allow ? 1 : 0), "allow");
-}
-
-PartyShareT PartyHandler::getShareAutoItems() const
-{
- return PartyRecv::mShareAutoItems;
-}
-
-void PartyHandler::setShareAutoItems(const PartyShareT share) const
-{
- PartyRecv::mShareAutoItems = share;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/partyhandler.h b/src/net/eathena/partyhandler.h
deleted file mode 100644
index 4b87f09fd..000000000
--- a/src/net/eathena/partyhandler.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 Lloyd Bryant <lloyd_bryant@netzero.net>
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PARTYHANDLER_H
-#define NET_EATHENA_PARTYHANDLER_H
-
-#include "net/ea/partyhandler.h"
-
-namespace EAthena
-{
-
-class PartyHandler final : public Ea::PartyHandler
-{
- public:
- PartyHandler();
-
- A_DELETE_COPY(PartyHandler)
-
- ~PartyHandler();
-
- void create(const std::string &name) const override final;
-
- void invite(const std::string &name) const override final;
-
- void inviteResponse(const int partyId,
- const bool accept) const override final;
-
- void leave() const override final;
-
- void kick(const Being *const being) const override final;
-
- void kick(const std::string &name) const override final;
-
- void chat(const std::string &text) const override final;
-
- void setShareExperience(const PartyShareT share) const override final;
-
- void setShareItems(const PartyShareT share) const override final;
-
- void changeLeader(const std::string &name) const override final;
-
- void allowInvite(const bool allow) const override final;
-
- void setShareAutoItems(const PartyShareT share) const override final;
-
- PartyShareT getShareAutoItems() const override final A_WARN_UNUSED;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_PARTYHANDLER_H
diff --git a/src/net/eathena/partyrecv.cpp b/src/net/eathena/partyrecv.cpp
deleted file mode 100644
index 9ce0dbdce..000000000
--- a/src/net/eathena/partyrecv.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 Lloyd Bryant <lloyd_bryant@netzero.net>
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/partyrecv.h"
-
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/localplayer.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/chatwindow.h"
-#include "gui/windows/socialwindow.h"
-
-#include "gui/widgets/tabs/chat/partytab.h"
-
-#include "net/messagein.h"
-
-#include "net/ea/partyrecv.h"
-
-#include "utils/checkutils.h"
-#include "utils/foreach.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-namespace PartyRecv
-{
- PartyShareT mShareAutoItems = PartyShare::UNKNOWN;
-} // namespace PartyRecv
-
-void PartyRecv::processPartyInvitationStats(Net::MessageIn &msg)
-{
- // +++ for now server allow only switch this option but not using it.
- msg.readUInt8("allow party");
-}
-
-void PartyRecv::processPartyMemberInfo(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("account id");
- const bool leader = msg.readInt32("leader") == 0U;
- int level = 0;
- if (msg.getVersion() >= 20170502)
- {
- msg.readInt16("class");
- level = msg.readInt16("level");
- }
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const bool online = msg.readInt8("online") == 0U;
- msg.readString(24, "party name");
- const std::string nick = msg.readString(24, "player name");
- const std::string map = msg.readString(16, "map name");
- msg.readInt8("pickup item share (&1)");
- msg.readInt8("get item share (&2)");
-
- if (Ea::taParty == nullptr)
- return;
-
- PartyMember *const member = Ea::taParty->addMember(id, nick);
- if (member != nullptr)
- {
- if ((partyTab != nullptr) && member->getOnline() != online)
- partyTab->showOnline(nick, fromBool(online, Online));
- member->setLeader(leader);
- member->setOnline(online);
- member->setMap(map);
- member->setX(x);
- member->setY(y);
- if (level != 0)
- member->setLevel(level);
- }
-}
-
-void PartyRecv::processPartyMemberJobLevel(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("account id");
- msg.readInt16("class");
- const int level = msg.readInt16("level");
-
- if (Ea::taParty == nullptr)
- return;
-
- PartyMember *const member = Ea::taParty->getMember(id);
- if (member != nullptr)
- {
- member->setOnline(true);
- if (level != 0)
- member->setLevel(level);
- }
- else
- {
- reportAlways("processPartyMemberJobLevel: party member not exists.");
- }
-}
-
-void PartyRecv::processPartySettings(Net::MessageIn &msg)
-{
- if (partyTab == nullptr)
- {
- if (chatWindow == nullptr)
- return;
-
- Ea::PartyRecv::createTab();
- }
-
- const PartyShareT exp = static_cast<PartyShareT>(
- msg.readInt32("party exp"));
- Ea::PartyRecv::processPartyExpSettingsContinue(msg, exp);
- if (msg.getVersion() >= 20090603)
- {
- const PartyShareT item = static_cast<PartyShareT>(
- msg.readInt8("pickup item share (&1)"));
- Ea::PartyRecv::processPartyItemSettingsContinue(msg, item);
- const PartyShareT autoItem = static_cast<PartyShareT>(
- msg.readInt8("get auto item share (&2)"));
- processPartyAutoItemSettingsContinue(msg, autoItem);
- }
-}
-
-void PartyRecv::processPartyInfo(Net::MessageIn &msg)
-{
- bool isOldParty = false;
- std::set<std::string> names;
- std::set<std::string> onlineNames;
- if (Ea::taParty == nullptr)
- {
- logger->log1("error: party empty in SMSG_PARTY_INFO");
- Ea::taParty = Party::getParty(1);
- }
- if (partyTab == nullptr)
- Ea::PartyRecv::createTab();
-
- if (Ea::taParty != nullptr)
- {
- if (Ea::taParty->getNumberOfElements() > 1)
- {
- isOldParty = true;
- Ea::taParty->getNamesSet(names);
- const Party::MemberList *const members = Ea::taParty->getMembers();
- FOR_EACHP (Party::MemberList::const_iterator, it, members)
- {
- if ((*it)->getOnline())
- onlineNames.insert((*it)->getName());
- }
- if (localPlayer != nullptr)
- onlineNames.insert(localPlayer->getName());
- }
- }
-
- if (localPlayer == nullptr)
- logger->log1("error: localPlayer==0 in SMSG_PARTY_INFO");
-
- if (Ea::taParty != nullptr)
- Ea::taParty->clearMembers();
-
- const int length = msg.readInt16("len");
- if (Ea::taParty != nullptr)
- {
- const std::string name = msg.readString(24, "party name");
- Ea::taParty->setName(name);
- }
- else
- {
- msg.readString(24, "party name");
- }
-
- int partySize = 0;
- int offset = 0;
- if (msg.getVersion() >= 20170502)
- {
- partySize = 50;
- offset = 28 + 6;
- }
- else
- {
- partySize = 46;
- offset = 28;
- }
-
- const int count = (length - offset) / partySize;
- if (localPlayer != nullptr &&
- Ea::taParty != nullptr)
- {
- localPlayer->setParty(Ea::taParty);
- localPlayer->setPartyName(Ea::taParty->getName());
- }
-
- for (int i = 0; i < count; i++)
- {
- const BeingId id = msg.readBeingId("account id");
- std::string nick = msg.readString(24, "nick");
- std::string map = msg.readString(16, "map name");
- const bool leader = msg.readUInt8("leader") == 0U;
- const bool online = msg.readUInt8("online") == 0U;
- int level = 0;
- if (msg.getVersion() >= 20170502)
- {
- msg.readInt16("class");
- level = msg.readInt16("level");
- }
-
- if (Ea::taParty != nullptr)
- {
- bool joined(false);
-
- if (isOldParty)
- {
- if (names.find(nick) == names.end())
- {
- NotifyManager::notify(NotifyTypes::PARTY_USER_JOINED,
- nick);
- joined = true;
- }
- }
- PartyMember *const member = Ea::taParty->addMember(id, nick);
- if (member != nullptr)
- {
- if (!joined && (partyTab != nullptr))
- {
- if (!names.empty() && ((onlineNames.find(nick)
- == onlineNames.end() && online)
- || (onlineNames.find(nick) != onlineNames.end()
- && !online)))
- {
- partyTab->showOnline(nick, fromBool(online, Online));
- }
- }
- member->setLeader(leader);
- member->setOnline(online);
- member->setMap(map);
- if (level != 0)
- member->setLevel(level);
- }
- }
- }
-
- if (msg.getVersion() >= 20170502)
- {
- msg.readInt8("pickup item share (&1)");
- msg.readInt8("get item share (&2)");
- msg.readInt32("unknown");
- }
-
- if (Ea::taParty != nullptr)
- Ea::taParty->sort();
-
- if ((localPlayer != nullptr) && (Ea::taParty != nullptr))
- {
- localPlayer->setParty(Ea::taParty);
- localPlayer->setPartyName(Ea::taParty->getName());
- if (socialWindow != nullptr)
- socialWindow->updateParty();
- }
-}
-
-void PartyRecv::processPartyMessage(Net::MessageIn &msg)
-{
- const int msgLength = msg.readInt16("len") - 8;
- if (msgLength <= 0)
- return;
-
- const BeingId id = msg.readBeingId("id");
- std::string chatMsg = msg.readString(msgLength, "message");
-
- const size_t pos = chatMsg.find(" : ", 0);
- if (pos != std::string::npos)
- chatMsg.erase(0, pos + 3);
-
- if ((Ea::taParty != nullptr) && (partyTab != nullptr))
- {
- const PartyMember *const member = Ea::taParty->getMember(id);
- if (member != nullptr)
- {
- partyTab->chatLog(member->getName(), chatMsg);
- }
- else
- {
- NotifyManager::notify(NotifyTypes::PARTY_UNKNOWN_USER_MSG,
- chatMsg);
- }
- }
-}
-
-void PartyRecv::processPartyInviteResponse(Net::MessageIn &msg)
-{
- if (partyTab == nullptr)
- return;
-
- const std::string nick = msg.readString(24, "nick");
-
- switch (msg.readInt32("result"))
- {
- case 0:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_ALREADY_MEMBER,
- nick);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_REFUSED, nick);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_DONE, nick);
- break;
- case 3:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_PARTY_FULL,
- nick);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_PARTY_SAME_ACCOUNT,
- nick);
- break;
- case 5:
- NotifyManager::notify(
- NotifyTypes::PARTY_INVITE_PARTY_BLOCKED_INVITE,
- nick);
- break;
- case 7:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_PARTY_NOT_ONLINE,
- nick);
- break;
- default:
- NotifyManager::notify(NotifyTypes::PARTY_INVITE_ERROR, nick);
- break;
- }
-}
-
-void PartyRecv::processPartyItemPickup(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ probably need add option to show pickup notifications
- // in party tab
- msg.readBeingId("account id");
- msg.readInt16("item id");
- msg.readUInt8("identify");
- msg.readUInt8("attribute");
- msg.readUInt8("refine");
- for (int f = 0; f < maxCards; f++)
- msg.readUInt16("card");
- msg.readInt16("equip location");
- msg.readUInt8("item type");
- // for color can be used ItemColorManager
-}
-
-void PartyRecv::processPartyLeader(Net::MessageIn &msg)
-{
- PartyMember *const oldMember = Ea::taParty->getMember(
- msg.readBeingId("old leder id"));
- PartyMember *const newMember = Ea::taParty->getMember(
- msg.readBeingId("new leder id"));
- if (oldMember != nullptr)
- oldMember->setLeader(false);
- if (newMember != nullptr)
- newMember->setLeader(true);
-}
-
-void PartyRecv::processPartyInvited(Net::MessageIn &msg)
-{
- if (socialWindow == nullptr)
- {
- msg.readInt32("party id");
- msg.readString(24, "party name");
- return;
- }
- const int id = msg.readInt32("party id");
- const std::string partyName = msg.readString(24, "party name");
-
- if (socialWindow != nullptr)
- socialWindow->showPartyInvite(partyName, std::string(), id);
-}
-
-void PartyRecv::processPartyAutoItemSettingsContinue(Net::MessageIn &msg,
- const PartyShareT item)
-{
- switch (item)
- {
- case PartyShare::YES:
- if (mShareAutoItems == PartyShare::YES)
- break;
- mShareAutoItems = PartyShare::YES;
- NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ON);
- break;
- case PartyShare::NO:
- if (mShareAutoItems == PartyShare::NO)
- break;
- mShareAutoItems = PartyShare::NO;
- NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_OFF);
- break;
- case PartyShare::NOT_POSSIBLE:
- if (mShareAutoItems == PartyShare::NOT_POSSIBLE)
- break;
- mShareAutoItems = PartyShare::NOT_POSSIBLE;
- NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ERROR);
- break;
- default:
- case PartyShare::UNKNOWN:
- UNIMPLEMENTEDPACKETFIELD(CAST_S32(item));
- break;
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/partyrecv.h b/src/net/eathena/partyrecv.h
deleted file mode 100644
index d89413297..000000000
--- a/src/net/eathena/partyrecv.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 Lloyd Bryant <lloyd_bryant@netzero.net>
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PARTYRECV_H
-#define NET_EATHENA_PARTYRECV_H
-
-#include "enums/net/partyshare.h"
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace PartyRecv
- {
- extern PartyShareT mShareAutoItems;
-
- void processPartySettings(Net::MessageIn &msg);
- void processPartyInvitationStats(Net::MessageIn &msg);
- void processPartyMemberInfo(Net::MessageIn &msg);
- void processPartyInfo(Net::MessageIn &msg);
- void processPartyMessage(Net::MessageIn &msg);
- void processPartyInviteResponse(Net::MessageIn &msg);
- void processPartyItemPickup(Net::MessageIn &msg);
- void processPartyLeader(Net::MessageIn &msg);
- void processPartyInvited(Net::MessageIn &msg);
- void processPartyMemberJobLevel(Net::MessageIn &msg);
-
- void processPartyAutoItemSettingsContinue(Net::MessageIn &msg,
- const PartyShareT item);
- } // namespace PartyRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_PARTYRECV_H
diff --git a/src/net/eathena/pethandler.cpp b/src/net/eathena/pethandler.cpp
deleted file mode 100644
index 28624e285..000000000
--- a/src/net/eathena/pethandler.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/pethandler.h"
-
-#include "being/playerinfo.h"
-
-#include "net/serverfeatures.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-PetHandler::PetHandler()
-{
- petHandler = this;
-}
-
-PetHandler::~PetHandler()
-{
- petHandler = nullptr;
-}
-
-void PetHandler::move(const int x,
- const int y) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_PET_MOVE_TO);
- outMsg.writeInt32(0, "pet id");
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(CAST_S16(y), "y");
-}
-
-void PetHandler::emote(const uint8_t emoteId)
-{
- createOutPacket(CMSG_PET_EMOTE);
- outMsg.writeInt8(emoteId, "emote id");
-}
-
-void PetHandler::catchPet(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_PET_CATCH);
- outMsg.writeBeingId(being->getId(), "monster id");
-}
-
-void PetHandler::sendPetMessage(const int data) const
-{
- createOutPacket(CMSG_PET_SEND_MESSAGE);
- outMsg.writeInt32(data, "param");
-}
-
-void PetHandler::setName(const std::string &name) const
-{
- createOutPacket(CMSG_PET_SET_NAME);
- outMsg.writeString(name, 24, "name");
-}
-
-void PetHandler::requestStatus() const
-{
- createOutPacket(CMSG_PET_MENU_ACTION);
- outMsg.writeInt8(0, "action");
-}
-
-void PetHandler::feed() const
-{
- createOutPacket(CMSG_PET_MENU_ACTION);
- outMsg.writeInt8(1, "action");
-}
-
-void PetHandler::dropLoot() const
-{
- createOutPacket(CMSG_PET_MENU_ACTION);
- outMsg.writeInt8(2, "action"); // performance
-}
-
-void PetHandler::returnToEgg() const
-{
- createOutPacket(CMSG_PET_MENU_ACTION);
- outMsg.writeInt8(3, "action");
- PlayerInfo::setPet(nullptr);
-}
-
-void PetHandler::unequip() const
-{
- createOutPacket(CMSG_PET_MENU_ACTION);
- outMsg.writeInt8(4, "action");
-}
-
-void PetHandler::setDirection(const unsigned char type) const
-{
- if (!serverFeatures->haveMovePet())
- return;
- createOutPacket(CMSG_PET_DIRECTION);
- outMsg.writeInt32(0, "pet id");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(type),
- "pet direction");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/pethandler.h b/src/net/eathena/pethandler.h
deleted file mode 100644
index 9785ade7d..000000000
--- a/src/net/eathena/pethandler.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PETHANDLER_H
-#define NET_EATHENA_PETHANDLER_H
-
-#include "net/pethandler.h"
-
-namespace EAthena
-{
-
-class PetHandler final : public Net::PetHandler
-{
- public:
- PetHandler();
-
- A_DELETE_COPY(PetHandler)
-
- ~PetHandler();
-
- void move(const int x,
- const int y) const override final;
-
- void emote(const uint8_t emoteId) override final;
-
- void catchPet(const Being *const being) const override final;
-
- void sendPetMessage(const int data) const override final;
-
- void setName(const std::string &name) const override final;
-
- void requestStatus() const override final;
-
- void feed() const override final;
-
- void dropLoot() const override final;
-
- void returnToEgg() const override final;
-
- void unequip() const override final;
-
- void setDirection(const unsigned char type) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_PETHANDLER_H
diff --git a/src/net/eathena/petrecv.cpp b/src/net/eathena/petrecv.cpp
deleted file mode 100644
index f2cf65a28..000000000
--- a/src/net/eathena/petrecv.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/petrecv.h"
-
-#include "actormanager.h"
-#include "notifymanager.h"
-
-#include "being/petinfo.h"
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/eggselectiondialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "net/inventoryhandler.h"
-#include "net/messagein.h"
-
-#include "net/eathena/menu.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void PetRecv::processPetMessage(Net::MessageIn &msg)
-{
- // techinally this is hercules pet emote,
- // but it may send also hungry level on connect
- // for both exists other packets.
- msg.readBeingId("pet id");
- msg.readInt32("param");
-}
-
-void PetRecv::processPetRoulette(Net::MessageIn &msg)
-{
- const uint8_t data = msg.readUInt8("data");
- switch (data)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::PET_CATCH_FAILED);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::PET_CATCH_SUCCESS);
- break;
- default:
- NotifyManager::notify(NotifyTypes::PET_CATCH_UNKNOWN, data);
- break;
- }
-}
-
-void PetRecv::processEggsList(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 4) / 2;
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- return;
- menu = MenuType::Eggs;
-
- if (count == 1)
- {
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const Item *const item = inv->getItem(index);
- inventoryHandler->selectEgg(item);
- return;
- }
- SellDialog *const dialog = CREATEWIDGETR0(EggSelectionDialog);
-
- for (int f = 0; f < count; f ++)
- {
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const Item *const item = inv->getItem(index);
-
- if (item != nullptr)
- dialog->addItem(item, 0);
- }
-}
-
-void PetRecv::processPetData(Net::MessageIn &msg)
-{
- const int cmd = msg.readUInt8("type");
- const BeingId id = msg.readBeingId("pet id");
- Being *const dstBeing = actorManager->findBeing(id);
- const int data = msg.readInt32("data");
- if (cmd == 0) // pre init
- {
- PetInfo *const info = new PetInfo;
- info->id = id;
- PlayerInfo::setPet(info);
- PlayerInfo::setPetBeing(dstBeing);
- return;
- }
- PetInfo *const info = PlayerInfo::getPet();
- if (info == nullptr)
- return;
- switch (cmd)
- {
- case 1: // intimacy
- info->intimacy = data;
- break;
- case 2: // hunger
- info->hungry = data;
- break;
- case 3: // accesory
- info->equip = data;
- break;
- case 4: // performance
- info->performance = data;
- break;
- case 5: // hair style
- info->hairStyle = data;
- break;
- default:
- break;
- }
-}
-
-void PetRecv::processPetStatus(Net::MessageIn &msg)
-{
- const std::string name = msg.readString(24, "pet name");
- msg.readUInt8("rename flag");
- const int level = msg.readInt16("level");
- const int hungry = msg.readInt16("hungry");
- const int intimacy = msg.readInt16("intimacy");
- const int equip = msg.readInt16("equip");
-
-// Being *const being = PlayerInfo::getPetBeing();
-// if (being)
-// being->setLevel(level);
-
- PetInfo *const info = PlayerInfo::getPet();
- if (info == nullptr)
- return;
- info->name = name;
- info->level = level;
- info->hungry = hungry;
- info->intimacy = intimacy;
- info->equip = equip;
- if (msg.getVersion() >= 20081126)
- info->race = msg.readInt16("class");
- else
- info->race = 0;
-}
-
-void PetRecv::processPetFood(Net::MessageIn &msg)
-{
- const int result = msg.readUInt8("result");
- msg.readInt16("food id");
- if (result != 0)
- NotifyManager::notify(NotifyTypes::PET_FEED_OK);
- else
- NotifyManager::notify(NotifyTypes::PET_FEED_ERROR);
-}
-
-void PetRecv::processPetCatchProcess(Net::MessageIn &msg A_UNUSED)
-{
- NotifyManager::notify(NotifyTypes::PET_CATCH_PROCESS);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/petrecv.h b/src/net/eathena/petrecv.h
deleted file mode 100644
index a520ca107..000000000
--- a/src/net/eathena/petrecv.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PETRECV_H
-#define NET_EATHENA_PETRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace PetRecv
- {
- void processPetMessage(Net::MessageIn &msg);
- void processPetRoulette(Net::MessageIn &msg);
- void processEggsList(Net::MessageIn &msg);
- void processPetData(Net::MessageIn &msg);
- void processPetStatus(Net::MessageIn &msg);
- void processPetFood(Net::MessageIn &msg);
- void processPetCatchProcess(Net::MessageIn &msg);
- } // namespace PetRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_PETRECV_H
diff --git a/src/net/eathena/playerhandler.cpp b/src/net/eathena/playerhandler.cpp
deleted file mode 100644
index a16984cfa..000000000
--- a/src/net/eathena/playerhandler.cpp
+++ /dev/null
@@ -1,718 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/playerhandler.h"
-
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "const/net/nostat.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/statuswindow.h"
-
-#include "net/ea/inventoryhandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-#include "net/eathena/sp.h"
-
-#include "resources/db/unitsdb.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-namespace EAthena
-{
-
-PlayerHandler::PlayerHandler() :
- Ea::PlayerHandler()
-{
- playerHandler = this;
-}
-
-PlayerHandler::~PlayerHandler()
-{
- playerHandler = nullptr;
-}
-
-void PlayerHandler::attack(const BeingId id,
- const Keep keep) const
-{
- createOutPacket(CMSG_PLAYER_CHANGE_ACT);
- outMsg.writeBeingId(id, "target id");
- if (keep == Keep_true)
- outMsg.writeInt8(7, "action");
- else
- outMsg.writeInt8(0, "action");
-}
-
-void PlayerHandler::stopAttack() const
-{
- createOutPacket(CMSG_PLAYER_STOP_ATTACK);
-}
-
-void PlayerHandler::emote(const uint8_t emoteId) const
-{
- createOutPacket(CMSG_PLAYER_EMOTE);
- outMsg.writeInt8(emoteId, "emote id");
-}
-
-void PlayerHandler::increaseAttribute(const AttributesT attr,
- const int amount) const
-{
- if (attr >= Attributes::PLAYER_STR && attr <= Attributes::PLAYER_LUK)
- {
- createOutPacket(CMSG_STAT_UPDATE_REQUEST);
- outMsg.writeInt16(CAST_S16(attr), "attribute id");
- outMsg.writeInt8(CAST_S8(amount), "increase");
- }
-}
-
-void PlayerHandler::increaseSkill(const uint16_t skillId) const
-{
- if (PlayerInfo::getAttribute(Attributes::PLAYER_SKILL_POINTS) <= 0)
- return;
-
- createOutPacket(CMSG_SKILL_LEVELUP_REQUEST);
- outMsg.writeInt16(skillId, "skill id");
-}
-
-void PlayerHandler::pickUp(const FloorItem *const floorItem) const
-{
- if (floorItem == nullptr)
- return;
-
- createOutPacket(CMSG_ITEM_PICKUP);
- const BeingId id = floorItem->getId();
- if (packetVersion >= 20101124)
- {
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20080827)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20070212)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20070108)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20050719)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20050718)
- {
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20050628)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20050509)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20050110)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20041129)
- {
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20041025)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20041005)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20040920)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20040906)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20040809)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else if (packetVersion >= 20040713)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeBeingId(id, "object id");
- }
- else
- {
- outMsg.writeBeingId(id, "object id");
- }
-
- Ea::InventoryHandler::pushPickup(floorItem->getId());
-}
-
-void PlayerHandler::setDirection(const unsigned char direction) const
-{
- createOutPacket(CMSG_PLAYER_CHANGE_DIR);
- if (packetVersion >= 20101124)
- {
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20080827)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20070212)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20070108)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20060327)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20050719)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20050718)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20050628)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20050509)
- {
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20050110)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20041129)
- {
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20041025)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20041005)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20040920)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20040906)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20040809)
- {
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else if (packetVersion >= 20040713)
- {
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
- else
- {
- outMsg.writeInt8(0, "head direction");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt8(MessageOut::toServerDirection(direction),
- "player direction");
- }
-}
-
-void PlayerHandler::setDestination(const int x, const int y,
- const int direction) const
-{
- createOutPacket(CMSG_PLAYER_CHANGE_DEST);
- if (packetVersion >= 20080827 && packetVersion < 20101124)
- outMsg.writeInt32(0, "unused");
- outMsg.writeCoordinates(CAST_U16(x),
- CAST_U16(y),
- CAST_U8(direction), "destination");
-}
-
-void PlayerHandler::changeAction(const BeingActionT &action) const
-{
- unsigned char type;
- switch (action)
- {
- case BeingAction::SIT:
- type = 2;
- break;
- case BeingAction::STAND:
- case BeingAction::PRESTAND:
- type = 3;
- break;
- default:
- case BeingAction::MOVE:
- case BeingAction::ATTACK:
- case BeingAction::DEAD:
- case BeingAction::HURT:
- case BeingAction::SPAWN:
- case BeingAction::CAST:
- return;
- }
-
- createOutPacket(CMSG_PLAYER_CHANGE_ACT);
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt8(type, "action");
-}
-
-void PlayerHandler::respawn() const
-{
- createOutPacket(CMSG_PLAYER_RESTART);
- outMsg.writeInt8(0, "action");
-}
-
-void PlayerHandler::requestOnlineList() const
-{
- createOutPacket(CMSG_ONLINE_LIST);
-}
-
-void PlayerHandler::updateStatus(const uint8_t status) const
-{
- createOutPacket(CMSG_SET_STATUS);
- outMsg.writeInt8(status, "status");
- outMsg.writeInt8(0, "unused");
-}
-
-void PlayerHandler::setShortcut(const int idx,
- const uint8_t type,
- const int id,
- const int level) const
-{
- createOutPacket(CMSG_SET_SHORTCUTS);
- outMsg.writeInt16(CAST_S16(idx), "index");
- outMsg.writeInt8(CAST_S8(type), "type");
- outMsg.writeInt32(id, "id");
- outMsg.writeInt16(CAST_S16(level), "level");
-}
-
-void PlayerHandler::shortcutShiftRow(const int row) const
-{
- if (packetVersion < 20140129)
- return;
- createOutPacket(CMSG_SHORTCUTS_ROW_SHIFT);
- outMsg.writeInt8(CAST_S8(row), "row");
-}
-
-void PlayerHandler::removeOption() const
-{
- createOutPacket(CMSG_REMOVE_OPTION);
-}
-
-void PlayerHandler::changeCart(const int type) const
-{
- createOutPacket(CMSG_CHANGE_CART);
- outMsg.writeInt16(CAST_S16(type), "type");
-}
-
-void PlayerHandler::setMemo() const
-{
- createOutPacket(CMSG_PLAYER_SET_MEMO);
-}
-
-void PlayerHandler::doriDori() const
-{
- createOutPacket(CMSG_DORI_DORI);
-}
-
-void PlayerHandler::explosionSpirits() const
-{
- createOutPacket(CMSG_EXPLOSION_SPIRITS);
-}
-
-void PlayerHandler::requestPvpInfo() const
-{
- createOutPacket(CMSG_PVP_INFO);
- outMsg.writeInt32(0, "char id");
- outMsg.writeInt32(0, "account id");
-}
-
-void PlayerHandler::revive() const
-{
- createOutPacket(CMSG_PLAYER_AUTO_REVIVE);
-}
-
-void PlayerHandler::setViewEquipment(const bool allow) const
-{
- createOutPacket(CMSG_PLAYER_SET_EQUIPMENT_VISIBLE);
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(allow ? 1 : 0, "allow");
-}
-
-#define setStatComplex(stat) \
- PlayerInfo::setStatBase(stat, base, notify); \
- if (mod != NoStat) \
- PlayerInfo::setStatMod(stat, mod)
-
-void PlayerHandler::setStat(Net::MessageIn &msg,
- const int type,
- const int base,
- const int mod,
- const Notify notify) const
-{
- switch (type)
- {
- case Sp::SPEED:
- localPlayer->setWalkSpeed(base);
- PlayerInfo::setStatBase(Attributes::PLAYER_WALK_SPEED, base);
- PlayerInfo::setStatMod(Attributes::PLAYER_WALK_SPEED, 0);
- break;
- case Sp::BASEEXP:
- PlayerInfo::setAttribute(Attributes::PLAYER_EXP, base);
- break;
- case Sp::JOBEXP:
- PlayerInfo::setAttribute(Attributes::PLAYER_JOB_EXP, base);
- break;
- case Sp::KARMA:
- PlayerInfo::setStatBase(Attributes::PLAYER_KARMA, base);
- PlayerInfo::setStatMod(Attributes::PLAYER_KARMA, 0);
- break;
- case Sp::MANNER:
- PlayerInfo::setStatBase(Attributes::PLAYER_MANNER, base);
- PlayerInfo::setStatMod(Attributes::PLAYER_MANNER, 0);
- break;
- case Sp::HP:
- PlayerInfo::setAttribute(Attributes::PLAYER_HP, base);
- if (localPlayer->isInParty() && (Party::getParty(1) != nullptr))
- {
- PartyMember *const m = Party::getParty(1)
- ->getMember(localPlayer->getId());
- if (m != nullptr)
- {
- m->setHp(base);
- m->setMaxHp(PlayerInfo::getAttribute(
- Attributes::PLAYER_MAX_HP));
- }
- }
- break;
- case Sp::MAXHP:
- PlayerInfo::setAttribute(Attributes::PLAYER_MAX_HP, base);
-
- if (localPlayer->isInParty() && (Party::getParty(1) != nullptr))
- {
- PartyMember *const m = Party::getParty(1)->getMember(
- localPlayer->getId());
- if (m != nullptr)
- {
- m->setHp(PlayerInfo::getAttribute(Attributes::PLAYER_HP));
- m->setMaxHp(base);
- }
- }
- break;
- case Sp::SP:
- PlayerInfo::setAttribute(Attributes::PLAYER_MP, base);
- break;
- case Sp::MAXSP:
- PlayerInfo::setAttribute(Attributes::PLAYER_MAX_MP, base);
- break;
- case Sp::STATUSPOINT:
- PlayerInfo::setAttribute(Attributes::PLAYER_CHAR_POINTS, base);
- break;
- case Sp::BASELEVEL:
- PlayerInfo::setAttribute(Attributes::PLAYER_BASE_LEVEL, base);
- if (localPlayer != nullptr)
- {
- localPlayer->setLevel(base);
- localPlayer->updateName();
- }
- break;
- case Sp::SKILLPOINT:
- PlayerInfo::setAttribute(Attributes::PLAYER_SKILL_POINTS, base);
- if (skillDialog != nullptr)
- skillDialog->update();
- break;
- case Sp::STR:
- setStatComplex(Attributes::PLAYER_STR);
- break;
- case Sp::AGI:
- setStatComplex(Attributes::PLAYER_AGI);
- break;
- case Sp::VIT:
- setStatComplex(Attributes::PLAYER_VIT);
- break;
- case Sp::INT:
- setStatComplex(Attributes::PLAYER_INT);
- break;
- case Sp::DEX:
- setStatComplex(Attributes::PLAYER_DEX);
- break;
- case Sp::LUK:
- setStatComplex(Attributes::PLAYER_LUK);
- break;
- case Sp::ZENY:
- {
- const int oldMoney = PlayerInfo::getAttribute(Attributes::MONEY);
- const int newMoney = base;
- if (newMoney > oldMoney)
- {
- NotifyManager::notify(NotifyTypes::MONEY_GET,
- UnitsDb::formatCurrency(newMoney - oldMoney));
- }
- else if (newMoney < oldMoney)
- {
- NotifyManager::notify(NotifyTypes::MONEY_SPENT,
- UnitsDb::formatCurrency(oldMoney - newMoney).c_str());
- }
-
- PlayerInfo::setAttribute(Attributes::MONEY, newMoney);
- break;
- }
- case Sp::NEXTBASEEXP:
- PlayerInfo::setAttribute(Attributes::PLAYER_EXP_NEEDED, base);
- break;
- case Sp::NEXTJOBEXP:
- PlayerInfo::setAttribute(Attributes::PLAYER_JOB_EXP_NEEDED, base);
- break;
- case Sp::WEIGHT:
- PlayerInfo::setAttribute(Attributes::TOTAL_WEIGHT, base);
- break;
- case Sp::MAXWEIGHT:
- PlayerInfo::setAttribute(Attributes::MAX_WEIGHT, base);
- break;
- case Sp::USTR:
- statusWindow->setPointsNeeded(Attributes::PLAYER_STR, base);
- break;
- case Sp::UAGI:
- statusWindow->setPointsNeeded(Attributes::PLAYER_AGI, base);
- break;
- case Sp::UVIT:
- statusWindow->setPointsNeeded(Attributes::PLAYER_VIT, base);
- break;
- case Sp::UINT:
- statusWindow->setPointsNeeded(Attributes::PLAYER_INT, base);
- break;
- case Sp::UDEX:
- statusWindow->setPointsNeeded(Attributes::PLAYER_DEX, base);
- break;
- case Sp::ULUK:
- statusWindow->setPointsNeeded(Attributes::PLAYER_LUK, base);
- break;
-
- case Sp::ATK1:
- PlayerInfo::setStatBase(Attributes::PLAYER_ATK, base);
- PlayerInfo::updateAttrs();
- break;
- case Sp::ATK2:
- PlayerInfo::setStatMod(Attributes::PLAYER_ATK, base);
- PlayerInfo::updateAttrs();
- break;
- case Sp::MATK1:
- PlayerInfo::setStatBase(Attributes::PLAYER_MATK, base);
- break;
- case Sp::MATK2:
- PlayerInfo::setStatMod(Attributes::PLAYER_MATK, base);
- break;
- case Sp::DEF1:
- PlayerInfo::setStatBase(Attributes::PLAYER_DEF, base);
- break;
- case Sp::DEF2:
- PlayerInfo::setStatMod(Attributes::PLAYER_DEF, base);
- break;
- case Sp::MDEF1:
- PlayerInfo::setStatBase(Attributes::PLAYER_MDEF, base);
- break;
- case Sp::MDEF2:
- PlayerInfo::setStatMod(Attributes::PLAYER_MDEF, base);
- break;
- case Sp::HIT:
- PlayerInfo::setStatBase(Attributes::PLAYER_HIT, base);
- break;
- case Sp::FLEE1:
- PlayerInfo::setStatBase(Attributes::PLAYER_FLEE, base);
- break;
- case Sp::FLEE2:
- PlayerInfo::setStatMod(Attributes::PLAYER_FLEE, base);
- break;
- case Sp::CRITICAL:
- PlayerInfo::setStatBase(Attributes::PLAYER_CRIT, base);
- break;
- case Sp::ASPD:
- localPlayer->setAttackSpeed(base);
- PlayerInfo::setStatBase(Attributes::PLAYER_ATTACK_DELAY, base);
- PlayerInfo::setStatMod(Attributes::PLAYER_ATTACK_DELAY, 0);
- PlayerInfo::updateAttrs();
- break;
- case Sp::JOBLEVEL:
- PlayerInfo::setAttribute(Attributes::PLAYER_JOB_LEVEL, base);
- break;
-
- default:
- UNIMPLEMENTEDPACKETFIELD(type);
- break;
- }
-}
-
-#undef setStatComplex
-
-} // namespace EAthena
diff --git a/src/net/eathena/playerhandler.h b/src/net/eathena/playerhandler.h
deleted file mode 100644
index 1b000025c..000000000
--- a/src/net/eathena/playerhandler.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PLAYERHANDLER_H
-#define NET_EATHENA_PLAYERHANDLER_H
-
-#include "net/ea/playerhandler.h"
-
-namespace EAthena
-{
-
-class PlayerHandler final : public Ea::PlayerHandler
-{
- public:
- PlayerHandler();
-
- A_DELETE_COPY(PlayerHandler)
-
- ~PlayerHandler();
-
- void attack(const BeingId id,
- const Keep keep) const override final;
- void stopAttack() const override final;
- void emote(const uint8_t emoteId) const override final;
-
- void increaseAttribute(const AttributesT attr,
- const int amount) const override final;
- void increaseSkill(const uint16_t skillId) const override final;
-
- void pickUp(const FloorItem *const floorItem) const override final;
- void setDirection(const unsigned char direction) const override final;
- void setDestination(const int x, const int y,
- const int direction) const override final;
- void changeAction(const BeingActionT &action)
- const override final;
- void updateStatus(const uint8_t status) const override final;
-
- void requestOnlineList() const override final;
- void respawn() const override final;
- void setShortcut(const int idx,
- const uint8_t type,
- const int id,
- const int level) const override final;
- void shortcutShiftRow(const int row) const override final;
- void removeOption() const override final;
- void changeCart(const int type) const override final;
- void setMemo() const override final;
- void doriDori() const override final;
- void explosionSpirits() const override final;
- void requestPvpInfo() const override final;
- void revive() const override final;
- void setViewEquipment(const bool allow) const override final;
-
- void setStat(Net::MessageIn &msg,
- const int type,
- const int base,
- const int mod,
- const Notify notify) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_PLAYERHANDLER_H
diff --git a/src/net/eathena/playerrecv.cpp b/src/net/eathena/playerrecv.cpp
deleted file mode 100644
index a630bf9b7..000000000
--- a/src/net/eathena/playerrecv.cpp
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/playerrecv.h"
-
-#include "actormanager.h"
-#include "configuration.h"
-#include "notifymanager.h"
-#include "party.h"
-
-#include "being/beingflag.h"
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/onlineplayer.h"
-
-#include "gui/windows/statuswindow.h"
-#include "gui/windows/whoisonline.h"
-
-#include "gui/widgets/tabs/chat/chattab.h"
-
-#include "net/eathena/sp.h"
-#include "net/messagein.h"
-
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void PlayerRecv::processPlayerShortcuts(Net::MessageIn &msg)
-{
- // +++ player shortcuts ignored. It also disabled on server side.
- // may be in future better use it?
- if (msg.getVersion() >= 20141022)
- msg.readUInt8("rotate");
- for (int f = 0; f < 27; f ++)
- {
- msg.readUInt8("type 0: item, 1: skill");
- msg.readInt32("item or skill id");
- msg.readInt16("skill level");
- }
- msg.skip(77, "unused");
-}
-
-void PlayerRecv::processPlayerShowEquip(Net::MessageIn &msg)
-{
- // +++ for now server allow only switch this option but not using it.
- msg.readUInt8("show equip"); // 1 mean need open "equipment" window
-}
-
-void PlayerRecv::processPlayerStatUpdate5(Net::MessageIn &msg)
-{
- BLOCK_START("PlayerRecv::processPlayerStatUpdate5")
- PlayerInfo::setAttribute(Attributes::PLAYER_CHAR_POINTS,
- msg.readInt16("char points"));
-
- unsigned int val = msg.readUInt8("str");
- PlayerInfo::setStatBase(Attributes::PLAYER_STR, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_STR,
- msg.readUInt8("str cost"));
- }
- else
- {
- msg.readUInt8("str need");
- }
-
- val = msg.readUInt8("agi");
- PlayerInfo::setStatBase(Attributes::PLAYER_AGI, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_AGI,
- msg.readUInt8("agi cost"));
- }
- else
- {
- msg.readUInt8("agi cost");
- }
-
- val = msg.readUInt8("vit");
- PlayerInfo::setStatBase(Attributes::PLAYER_VIT, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_VIT,
- msg.readUInt8("vit cost"));
- }
- else
- {
- msg.readUInt8("vit cost");
- }
-
- val = msg.readUInt8("int");
- PlayerInfo::setStatBase(Attributes::PLAYER_INT, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_INT,
- msg.readUInt8("int cost"));
- }
- else
- {
- msg.readUInt8("int cost");
- }
-
- val = msg.readUInt8("dex");
- PlayerInfo::setStatBase(Attributes::PLAYER_DEX, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_DEX,
- msg.readUInt8("dex cost"));
- }
- else
- {
- msg.readUInt8("dex cost");
- }
-
- val = msg.readUInt8("luk");
- PlayerInfo::setStatBase(Attributes::PLAYER_LUK, val);
- if (statusWindow != nullptr)
- {
- statusWindow->setPointsNeeded(Attributes::PLAYER_LUK,
- msg.readUInt8("luk cost"));
- }
- else
- {
- msg.readUInt8("luk cost");
- }
-
- PlayerInfo::setStatBase(Attributes::PLAYER_ATK,
- msg.readInt16("left atk"), Notify_false);
- PlayerInfo::setStatMod(Attributes::PLAYER_ATK,
- msg.readInt16("right atk"));
- PlayerInfo::updateAttrs();
-
- val = msg.readInt16("right matk");
- PlayerInfo::setStatBase(Attributes::PLAYER_MATK, val, Notify_false);
-
- val = msg.readInt16("left matk");
- PlayerInfo::setStatMod(Attributes::PLAYER_MATK, val);
-
- PlayerInfo::setStatBase(Attributes::PLAYER_DEF,
- msg.readInt16("left def"), Notify_false);
- PlayerInfo::setStatMod(Attributes::PLAYER_DEF,
- msg.readInt16("right def"));
-
- PlayerInfo::setStatBase(Attributes::PLAYER_MDEF,
- msg.readInt16("left mdef"), Notify_false);
- PlayerInfo::setStatMod(Attributes::PLAYER_MDEF,
- msg.readInt16("right mdef"));
-
- PlayerInfo::setStatBase(Attributes::PLAYER_HIT,
- msg.readInt16("hit"));
-
- PlayerInfo::setStatBase(Attributes::PLAYER_FLEE,
- msg.readInt16("flee"), Notify_false);
- PlayerInfo::setStatMod(Attributes::PLAYER_FLEE,
- msg.readInt16("flee2/10"));
-
- PlayerInfo::setStatBase(Attributes::PLAYER_CRIT,
- msg.readInt16("crit/10"));
-
- PlayerInfo::setAttribute(Attributes::PLAYER_ATTACK_DELAY,
- msg.readInt16("attack speed"));
- msg.readInt16("plus speed = 0");
-
- BLOCK_END("PlayerRecv::processPlayerStatUpdate5")
-}
-
-void PlayerRecv::processPlayerGetExp(Net::MessageIn &msg)
-{
- if (localPlayer == nullptr)
- return;
- const BeingId id = msg.readBeingId("player id");
- const int exp = msg.readInt32("exp amount");
- const int stat = msg.readInt16("exp type");
- const bool fromQuest = msg.readInt16("is from quest") != 0;
- if (!fromQuest && id == localPlayer->getId())
- {
- if (stat == 1)
- localPlayer->addXpMessage(exp);
- else if (stat == 2)
- localPlayer->addJobMessage(exp);
- else
- UNIMPLEMENTEDPACKETFIELD(stat);
- }
- // need show particle depend on isQuest flag, for now ignored
-}
-
-void PlayerRecv::processWalkResponse(Net::MessageIn &msg)
-{
- BLOCK_START("PlayerRecv::processWalkResponse")
- /*
- * This client assumes that all walk messages succeed,
- * and that the server will send a correction notice
- * otherwise.
- */
- uint16_t srcX, srcY, dstX, dstY;
- msg.readInt32("tick");
- msg.readCoordinatePair(srcX, srcY, dstX, dstY, "move path");
- msg.readUInt8("(sx<<4) | (sy&0x0f)");
- if (localPlayer != nullptr)
- localPlayer->setRealPos(dstX, dstY);
- BLOCK_END("PlayerRecv::processWalkResponse")
-}
-
-void PlayerRecv::processWalkError(Net::MessageIn &msg)
-{
- msg.readInt32("tick");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- if (localPlayer != nullptr)
- localPlayer->failMove(x, y);
-}
-
-void PlayerRecv::processPvpInfo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("char id");
- msg.readBeingId("account id");
- msg.readInt32("pvp won");
- msg.readInt32("pvp lost");
- msg.readInt32("pvp point");
-}
-
-void PlayerRecv::processPlayerHeal(Net::MessageIn &msg)
-{
- if (localPlayer == nullptr)
- return;
-
- const int type = msg.readInt16("var id");
- int amount;
- if (msg.getVersion() >= 20150513)
- amount = msg.readInt32("value");
- else
- amount = msg.readInt16("value");
- if (type == Sp::HP)
- {
- const int base = PlayerInfo::getAttribute(Attributes::PLAYER_HP) +
- amount;
- PlayerInfo::setAttribute(Attributes::PLAYER_HP, base);
- if (localPlayer->isInParty() && (Party::getParty(1) != nullptr))
- {
- PartyMember *const m = Party::getParty(1)
- ->getMember(localPlayer->getId());
- if (m != nullptr)
- {
- m->setHp(base);
- m->setMaxHp(PlayerInfo::getAttribute(
- Attributes::PLAYER_MAX_HP));
- }
- }
- localPlayer->addHpMessage(amount);
- }
- else if (type == Sp::SP)
- {
- localPlayer->addSpMessage(amount);
- }
-}
-
-void PlayerRecv::processPlayerSkillMessage(Net::MessageIn &msg)
-{
- const int message = msg.readInt32("type");
- switch (message)
- {
- case 0x15:
- NotifyManager::notify(NotifyTypes::SKILL_END_ALL_NEGATIVE_STATUS);
- break;
- case 0x16:
- NotifyManager::notify(NotifyTypes::SKILL_IMMUNITY_TO_ALL_STATUSES);
- break;
- case 0x17:
- NotifyManager::notify(NotifyTypes::SKILL_MAX_HP);
- break;
- case 0x18:
- NotifyManager::notify(NotifyTypes::SKILL_MAX_SP);
- break;
- case 0x19:
- NotifyManager::notify(NotifyTypes::SKILL_ALL_STATUS_PLUS_20);
- break;
- case 0x1c:
- NotifyManager::notify(NotifyTypes::SKILL_ENCHANT_WEAPON_HOLY);
- break;
- case 0x1d:
- NotifyManager::notify(NotifyTypes::SKILL_ENCHANT_ARMOR_HOLY);
- break;
- case 0x1e:
- NotifyManager::notify(NotifyTypes::SKILL_DEF_PLUS_25);
- break;
- case 0x1f:
- NotifyManager::notify(NotifyTypes::SKILL_ATTACK_PLUS_100);
- break;
- case 0x20:
- NotifyManager::notify(NotifyTypes::SKILL_FLEE_PLUS_50);
- break;
- case 0x28:
- NotifyManager::notify(NotifyTypes::SKILL_FULL_STRIP_FAILED);
- break;
- default:
- NotifyManager::notify(NotifyTypes::SKILL_MESSAGE_UNKNOWN);
- break;
- }
-}
-
-void PlayerRecv::processNotifyMapInfo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("type");
-}
-
-void PlayerRecv::processPlayerFameBlacksmith(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("points");
- msg.readInt32("total points");
-}
-
-void PlayerRecv::processPlayerFameAlchemist(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("points");
- msg.readInt32("total points");
-}
-
-void PlayerRecv::processPlayerUpgradeMessage(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("result");
- msg.readInt16("item id");
-}
-
-void PlayerRecv::processPlayerFameTaekwon(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("points");
- msg.readInt32("total points");
-}
-
-void PlayerRecv::processPlayerReadBook(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("book id");
- msg.readInt32("page");
-}
-
-void PlayerRecv::processPlayerEquipTickAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt32("unused");
- msg.readInt32("flag");
-}
-
-void PlayerRecv::processPlayerAutoShadowSpellList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 8) / 2;
- for (int f = 0; f < count; f ++)
- msg.readInt16("skill id");
-}
-
-void PlayerRecv::processPlayerRankPoints(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("type");
- msg.readInt32("points");
- msg.readInt32("fame");
-}
-
-void PlayerRecv::processOnlineList(Net::MessageIn &msg)
-{
- if (whoIsOnline == nullptr)
- return;
-
- BLOCK_START("PlayerRecv::processOnlineList")
- const int size = msg.readInt16("len") - 4;
- STD_VECTOR<OnlinePlayer*> arr;
-
- if (size == 0)
- {
- if (whoIsOnline != nullptr)
- whoIsOnline->loadList(arr);
- BLOCK_END("PlayerRecv::processOnlineList")
- return;
- }
-
- char *const start = reinterpret_cast<char*>(msg.readBytes(size, "nicks"));
- if (start == nullptr)
- {
- BLOCK_END("PlayerRecv::processOnlineList")
- return;
- }
-
- const char *buf = start;
-
- int addVal = 3;
-
- while (buf - start + 1 < size
- && (*(buf + CAST_SIZE(addVal)) != 0))
- {
- const unsigned char status = *buf;
- buf ++;
- const unsigned char level = *buf;
- buf ++;
- const unsigned char ver = *buf;
- buf ++;
-
- GenderT gender = Gender::UNSPECIFIED;
- if (config.getBoolValue("showgender"))
- {
- if ((status & BeingFlag::GENDER_MALE) != 0)
- gender = Gender::MALE;
- else if ((status & BeingFlag::GENDER_OTHER) != 0)
- gender = Gender::OTHER;
- else
- gender = Gender::FEMALE;
- }
- arr.push_back(new OnlinePlayer(static_cast<const char*>(buf),
- status, level, gender, ver));
- buf += strlen(buf) + 1;
- }
-
- if (whoIsOnline != nullptr)
- whoIsOnline->loadList(arr);
- delete [] start;
- BLOCK_END("PlayerRecv::processOnlineList")
-}
-
-void PlayerRecv::processDressRoomOpen(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("view");
-}
-
-void PlayerRecv::processKilledBy(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("killer id");
- const Being *const dstBeing = actorManager->findBeing(id);
- if (id == BeingId_zero)
- {
- debugMsg(
- // TRANSLATORS: player killed message
- _("You were killed by unknown source."));
- }
- else
- {
- std::string name;
- if (dstBeing != nullptr)
- name = dstBeing->getName();
- else
- name = strprintf("?%u", CAST_U32(id));
- debugMsg(strprintf(
- // TRANSLATORS: player killed message
- _("You were killed by %s."),
- name.c_str()));
- }
-}
-
-void PlayerRecv::processPlayerAttrs(Net::MessageIn &msg)
-{
- const int len = msg.readInt16("len");
- if (len < 8)
- return;
-
- const int groupId = msg.readInt32("group id");
-
- if (localPlayer == nullptr)
- return;
-
- localPlayer->setGroupId(groupId);
- if (groupId > 0)
- localPlayer->setGM(true);
- else
- localPlayer->setGM(false);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/playerrecv.h b/src/net/eathena/playerrecv.h
deleted file mode 100644
index eb38684b8..000000000
--- a/src/net/eathena/playerrecv.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PLAYERRECV_H
-#define NET_EATHENA_PLAYERRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace PlayerRecv
- {
- void processPlayerShortcuts(Net::MessageIn &msg);
- void processPlayerShowEquip(Net::MessageIn &msg);
- void processPlayerStatUpdate5(Net::MessageIn &msg);
- void processPlayerGetExp(Net::MessageIn &msg);
- void processPvpInfo(Net::MessageIn &msg);
- void processPlayerHeal(Net::MessageIn &msg);
- void processPlayerSkillMessage(Net::MessageIn &msg);
- void processWalkResponse(Net::MessageIn &msg);
- void processWalkError(Net::MessageIn &msg);
- void processNotifyMapInfo(Net::MessageIn &msg);
- void processPlayerFameBlacksmith(Net::MessageIn &msg);
- void processPlayerFameAlchemist(Net::MessageIn &msg);
- void processPlayerUpgradeMessage(Net::MessageIn &msg);
- void processPlayerFameTaekwon(Net::MessageIn &msg);
- void processPlayerReadBook(Net::MessageIn &msg);
- void processPlayerEquipTickAck(Net::MessageIn &msg);
- void processPlayerAutoShadowSpellList(Net::MessageIn &msg);
- void processPlayerRankPoints(Net::MessageIn &msg);
- void processOnlineList(Net::MessageIn &msg);
- void processDressRoomOpen(Net::MessageIn &msg);
- void processKilledBy(Net::MessageIn &msg);
- void processPlayerAttrs(Net::MessageIn &msg);
- } // namespace PlayerRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_PLAYERRECV_H
diff --git a/src/net/eathena/protocolout.cpp b/src/net/eathena/protocolout.cpp
deleted file mode 100644
index 154dacf6c..000000000
--- a/src/net/eathena/protocolout.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-extern int evolPacketOffset;
-
-namespace EAthena
-{
-#include "net/protocoloutdefine.h"
-#include "net/eathena/packetsout.inc"
-#undef packet
-PROTOCOLOUT_VOID
-PACKETSOUT_VOID
-} // namespace EAthena
-
-#include "debug.h"
diff --git a/src/net/eathena/protocolout.h b/src/net/eathena/protocolout.h
deleted file mode 100644
index d6be65703..000000000
--- a/src/net/eathena/protocolout.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_PROTOCOLOUT_H
-#define NET_EATHENA_PROTOCOLOUT_H
-
-#include "net/protocoloutinclude.h"
-
-#define PROTOCOLOUT_VOID
-
-namespace EAthena
-{
-#include "net/eathena/packetsout.inc"
-PACKETSOUT_VOID
-} // namespace EAthena
-
-#undef packet
-#undef packet2
-#undef startCondition
-#undef endCondition
-#undef PACKETSOUT_VOID
-
-#endif // NET_EATHENA_PROTOCOLOUT_H
diff --git a/src/net/eathena/questhandler.cpp b/src/net/eathena/questhandler.cpp
deleted file mode 100644
index 0db26ebf4..000000000
--- a/src/net/eathena/questhandler.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/questhandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-QuestHandler::QuestHandler() :
- Net::QuestHandler()
-{
- questHandler = this;
-}
-
-QuestHandler::~QuestHandler()
-{
- questHandler = nullptr;
-}
-
-void QuestHandler::setQeustActiveState(const int questId,
- const bool active) const
-{
- createOutPacket(CMSG_QUEST_ACTIVATE);
- outMsg.writeInt32(questId, "quest id");
- outMsg.writeInt8(CAST_S8(active ? 1 : 0), "activate");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/questhandler.h b/src/net/eathena/questhandler.h
deleted file mode 100644
index 2c5f18b67..000000000
--- a/src/net/eathena/questhandler.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_QUESTHANDLER_H
-#define NET_EATHENA_QUESTHANDLER_H
-
-#include "net/questhandler.h"
-
-namespace EAthena
-{
-
-class QuestHandler final : public Net::QuestHandler
-{
- public:
- QuestHandler();
-
- A_DELETE_COPY(QuestHandler)
-
- ~QuestHandler();
-
- void setQeustActiveState(const int questId,
- const bool active) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_QUESTHANDLER_H
diff --git a/src/net/eathena/questrecv.cpp b/src/net/eathena/questrecv.cpp
deleted file mode 100644
index 69ad93541..000000000
--- a/src/net/eathena/questrecv.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/questrecv.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/questswindow.h"
-
-#include "net/messagein.h"
-
-#include "const/resources/skill.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void QuestRecv::processAddQuest(Net::MessageIn &msg)
-{
- const int var = msg.readInt32("quest id");
- const int val = msg.readUInt8("state");
- msg.readUInt8("time diff");
- msg.readInt32("time");
- const int num = msg.readInt16("objectives count");
- for (int f = 0; f < num; f ++)
- {
- // need use in quests kills list
- msg.readInt32("monster id");
- msg.readInt16("count");
- msg.readString(24, "monster name");
- }
-
- msg.skipToEnd("unused");
-
- if (questsWindow != nullptr)
- {
- questsWindow->updateQuest(var, val, 0, 0, 0);
- questsWindow->rebuild(true);
- }
- if (skillDialog != nullptr)
- {
- skillDialog->updateQuest(var, val, 0, 0, 0);
- skillDialog->playUpdateEffect(var + SKILL_VAR_MIN_ID);
- }
-}
-
-void QuestRecv::processAddQuest2(Net::MessageIn &msg)
-{
- const int var = msg.readInt32("quest id");
- msg.readUInt8("state");
- const int val1 = msg.readInt32("count1");
- const int val2 = msg.readInt32("count2");
- const int val3 = msg.readInt32("count3");
- const int time = msg.readInt32("time");
-
- if (questsWindow != nullptr)
- {
- questsWindow->updateQuest(var, val1, val2, val3, time);
- questsWindow->rebuild(true);
- }
- if (skillDialog != nullptr)
- {
- skillDialog->updateQuest(var, val1, val2, val3, time);
- skillDialog->playUpdateEffect(var + SKILL_VAR_MIN_ID);
- }
-}
-
-void QuestRecv::processAddQuests(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const int num = msg.readInt32("quests count");
- for (int f = 0; f < num; f ++)
- {
- const int var = msg.readInt32("quest id");
- const int val = msg.readUInt8("state");
- if (msg.getVersion() >= 20141022)
- {
- msg.readInt32("time diff");
- msg.readInt32("time");
- msg.readInt16("objectives count");
- }
- if (questsWindow != nullptr)
- questsWindow->updateQuest(var, val, 0, 0, 0);
- if (skillDialog != nullptr)
- skillDialog->updateQuest(var, val, 0, 0, 0);
- }
-
- if (questsWindow != nullptr)
- questsWindow->rebuild(false);
-}
-
-void QuestRecv::processAddQuests2(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const int num = msg.readInt32("quests count");
- for (int f = 0; f < num; f ++)
- {
- const int var = msg.readInt32("quest id");
- msg.readUInt8("state");
- const int val1 = msg.readInt32("count1");
- const int val2 = msg.readInt32("count2");
- const int val3 = msg.readInt32("count3");
- const int time = msg.readInt32("time");
- if (questsWindow != nullptr)
- questsWindow->updateQuest(var, val1, val2, val3, time);
- if (skillDialog != nullptr)
- skillDialog->updateQuest(var, val1, val2, val3, time);
- }
-
- if (questsWindow != nullptr)
- questsWindow->rebuild(false);
-}
-
-void QuestRecv::processAddQuestsObjectives(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const int quests = msg.readInt32("quests count");
- for (int f = 0; f < quests; f ++)
- {
- msg.readInt32("quest id");
- msg.readInt32("time diff");
- msg.readInt32("time");
- const int num = msg.readInt16("objectives count");
- for (int d = 0; d < num; d ++)
- {
- // need use in quests kills list
- msg.readInt32("monster id");
- msg.readInt16("count");
- msg.readString(24, "monster name");
- }
- }
- msg.skipToEnd("unused");
-}
-
-void QuestRecv::processUpdateQuestsObjectives(Net::MessageIn &msg)
-{
- // ignored
- msg.readInt16("len");
- const int num = msg.readInt16("objectives count");
- for (int f = 0; f < num; f ++)
- {
- msg.readInt32("quest id");
- msg.readInt32("monster id");
- msg.readInt16("count old");
- msg.readInt16("count new");
- }
-}
-
-void QuestRecv::processRemoveQuest(Net::MessageIn &msg)
-{
- const int var = msg.readInt32("quest id");
- const int val = -1;
-
- // not removing quest, because this is impossible,
- // but changing status to -1
- if (questsWindow != nullptr)
- {
- questsWindow->updateQuest(var, val, 0, 0, 0);
- questsWindow->rebuild(true);
- }
- if (skillDialog != nullptr)
- {
- skillDialog->updateQuest(var, val, 0, 0, 0);
- skillDialog->playUpdateEffect(var + SKILL_VAR_MIN_ID);
- }
-}
-
-void QuestRecv::processActivateQuest(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ need enable/disable quests depend on this packet
- msg.readInt32("quest id");
- msg.readUInt8("activate");
-}
-
-void QuestRecv::processNpcQuestEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // this packed mostly useless, because manaplus can show any
- // kind of effects based on quest states.
- msg.readInt32("npc id");
- msg.readInt16("x");
- msg.readInt16("y");
- msg.readInt16("state");
- msg.readInt16("color");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/questrecv.h b/src/net/eathena/questrecv.h
deleted file mode 100644
index aff969a59..000000000
--- a/src/net/eathena/questrecv.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_QUESTRECV_H
-#define NET_EATHENA_QUESTRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace QuestRecv
- {
- void processAddQuest(Net::MessageIn &msg);
- void processAddQuest2(Net::MessageIn &msg);
- void processAddQuests(Net::MessageIn &msg);
- void processAddQuests2(Net::MessageIn &msg);
- void processAddQuestsObjectives(Net::MessageIn &msg);
- void processUpdateQuestsObjectives(Net::MessageIn &msg);
- void processRemoveQuest(Net::MessageIn &msg);
- void processActivateQuest(Net::MessageIn &msg);
- void processNpcQuestEffect(Net::MessageIn &msg);
- } // namespace QuestRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_QUESTRECV_H
diff --git a/src/net/eathena/recvpackets.inc b/src/net/eathena/recvpackets.inc
deleted file mode 100644
index 32032296c..000000000
--- a/src/net/eathena/recvpackets.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_RECVPACKETS_H
-#define NET_EATHENA_RECVPACKETS_H
-
-#define RECVPACKETS_VOID
-
-#include "net/recvpacketdefine.h"
-
-#include "net/eathena/packetsin.inc"
-
-#undef packet
-
-#endif // NET_EATHENA_RECVPACKETS_H
diff --git a/src/net/eathena/roulettehandler.cpp b/src/net/eathena/roulettehandler.cpp
deleted file mode 100644
index b0d9d2829..000000000
--- a/src/net/eathena/roulettehandler.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/roulettehandler.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-RouletteHandler::RouletteHandler() :
- Net::RouletteHandler()
-{
- rouletteHandler = this;
-}
-
-RouletteHandler::~RouletteHandler()
-{
- rouletteHandler = nullptr;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/roulettehandler.h b/src/net/eathena/roulettehandler.h
deleted file mode 100644
index 861f54582..000000000
--- a/src/net/eathena/roulettehandler.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ROULETTEHANDLER_H
-#define NET_EATHENA_ROULETTEHANDLER_H
-
-#include "net/roulettehandler.h"
-
-namespace EAthena
-{
-class RouletteHandler final : public Net::RouletteHandler
-{
- public:
- RouletteHandler();
-
- A_DELETE_COPY(RouletteHandler)
-
- ~RouletteHandler();
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_ROULETTEHANDLER_H
diff --git a/src/net/eathena/rouletterecv.cpp b/src/net/eathena/rouletterecv.cpp
deleted file mode 100644
index 2422fbcda..000000000
--- a/src/net/eathena/rouletterecv.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/rouletterecv.h"
-
-#include "logger.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void RouletteRecv::processRouletteInfoAckType(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 8) / 8;
- msg.readInt32("serial");
-
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("row");
- msg.readInt16("position");
- msg.readInt16("item id");
- msg.readInt16("count");
- }
-}
-
-void RouletteRecv::processRouletteItemAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("result");
- msg.readInt16("item id");
-}
-
-void RouletteRecv::processRouletteGenerateAckType(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("result");
- msg.readInt16("step");
- msg.readInt16("idx");
- msg.readInt16("item id");
- msg.readInt32("remain gold");
- msg.readInt32("remain silver");
- msg.readInt32("remain bronze");
-}
-
-void RouletteRecv::processRouletteOpenAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("result");
- msg.readInt32("serial");
- msg.readUInt8("step");
- msg.readUInt8("idx");
- msg.readInt16("additional item id");
- msg.readInt32("gold point");
- msg.readInt32("silver point");
- msg.readInt32("bronze point");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/rouletterecv.h b/src/net/eathena/rouletterecv.h
deleted file mode 100644
index e922a8b02..000000000
--- a/src/net/eathena/rouletterecv.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_ROULETTERECV_H
-#define NET_EATHENA_ROULETTERECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace RouletteRecv
- {
- void processRouletteInfoAckType(Net::MessageIn &msg);
- void processRouletteItemAck(Net::MessageIn &msg);
- void processRouletteGenerateAckType(Net::MessageIn &msg);
- void processRouletteOpenAck(Net::MessageIn &msg);
- } // namespace RouletteRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_ROULETTERECV_H
diff --git a/src/net/eathena/searchstorehandler.cpp b/src/net/eathena/searchstorehandler.cpp
deleted file mode 100644
index c8cd43d2d..000000000
--- a/src/net/eathena/searchstorehandler.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/searchstorehandler.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-SearchStoreHandler::SearchStoreHandler() :
- Net::SearchStoreHandler()
-{
- searchStoreHandler = this;
-}
-
-SearchStoreHandler::~SearchStoreHandler()
-{
- searchStoreHandler = nullptr;
-}
-
-void SearchStoreHandler::search(const StoreSearchTypeT type,
- const int minPrice,
- const int maxPrice,
- const int itemId) const
-{
- if (packetVersion < 20100601)
- return;
-
- createOutPacket(CMSG_SEARCHSTORE_SEARCH);
- outMsg.writeInt16(23, "len");
- outMsg.writeInt8(CAST_U8(type), "search type");
- outMsg.writeInt32(maxPrice, "max price");
- outMsg.writeInt32(minPrice, "min price");
- outMsg.writeInt32(1, "items count");
- outMsg.writeInt32(0, "cards count");
- outMsg.writeInt16(CAST_S16(itemId), "item id");
-}
-
-void SearchStoreHandler::nextPage() const
-{
- if (packetVersion < 20100608)
- return;
- createOutPacket(CMSG_SEARCHSTORE_NEXT_PAGE);
-}
-
-void SearchStoreHandler::close() const
-{
- if (packetVersion < 20100608)
- return;
- createOutPacket(CMSG_SEARCHSTORE_CLOSE);
-}
-
-void SearchStoreHandler::select(const int accountId,
- const int storeId,
- const int itemId) const
-{
- if (packetVersion < 20100608)
- return;
- createOutPacket(CMSG_SEARCHSTORE_CLICK);
- outMsg.writeInt32(accountId, "account id");
- outMsg.writeInt32(storeId, "store id");
- outMsg.writeInt16(CAST_S16(itemId), "item id");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/searchstorehandler.h b/src/net/eathena/searchstorehandler.h
deleted file mode 100644
index 5e425e6e5..000000000
--- a/src/net/eathena/searchstorehandler.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SEARCHSTOREHANDLER_H
-#define NET_EATHENA_SEARCHSTOREHANDLER_H
-
-#include "net/searchstorehandler.h"
-
-namespace EAthena
-{
-class SearchStoreHandler final : public Net::SearchStoreHandler
-{
- public:
- SearchStoreHandler();
-
- A_DELETE_COPY(SearchStoreHandler)
-
- ~SearchStoreHandler();
-
- void search(const StoreSearchTypeT type,
- const int minPrice,
- const int maxPrice,
- const int itemId) const override final;
-
- void nextPage() const override final;
-
- void close() const override final;
-
- void select(const int accountId,
- const int storeId,
- const int itemId) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_SEARCHSTOREHANDLER_H
diff --git a/src/net/eathena/searchstorerecv.cpp b/src/net/eathena/searchstorerecv.cpp
deleted file mode 100644
index 9f8904f7c..000000000
--- a/src/net/eathena/searchstorerecv.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/searchstorerecv.h"
-
-#include "logger.h"
-#include "notifymanager.h"
-
-#include "const/resources/item/cards.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "net/messagein.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-void SearchStoreRecv::processSearchAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int count = (msg.readInt16("len") - 7) / 106;
- msg.readUInt8("is first page");
- msg.readUInt8("is next page");
- msg.readUInt8("remain uses");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("store id");
- msg.readInt32("aoount id");
- msg.readString(80, "store name");
- msg.readInt16("item id");
- msg.readUInt8("item type");
- msg.readInt32("price");
- msg.readInt16("amount");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d++)
- msg.readUInt16("card");
-
- // +++ need use ItemColorManager for colors
- }
-}
-
-void SearchStoreRecv::processSearchFailed(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- const int result = msg.readUInt8("result");
- switch (result)
- {
- case 0:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED_NO_STORES);
- break;
- case 1:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED_MANY_RESULTS);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED_CANT_SEARCH_ANYMORE);
- break;
- case 3:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED_CANT_SEARCH_YET);
- break;
- case 4:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED_NO_INFORMATION);
- break;
- default:
- NotifyManager::notify(
- NotifyTypes::SEARCH_STORE_FAILED);
- break;
- }
-}
-
-void SearchStoreRecv::processSearchOpen(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("effect");
- if (msg.getVersion() >= 20100701)
- msg.readUInt8("uses");
-}
-
-void SearchStoreRecv::processSearchClickAck(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readInt16("x");
- msg.readInt16("y");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/searchstorerecv.h b/src/net/eathena/searchstorerecv.h
deleted file mode 100644
index 916c26ad2..000000000
--- a/src/net/eathena/searchstorerecv.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SEARCHSTORERECV_H
-#define NET_EATHENA_SEARCHSTORERECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace SearchStoreRecv
- {
- void processSearchAck(Net::MessageIn &msg);
- void processSearchFailed(Net::MessageIn &msg);
- void processSearchOpen(Net::MessageIn &msg);
- void processSearchClickAck(Net::MessageIn &msg);
- } // namespace SearchStoreRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_SEARCHSTORERECV_H
diff --git a/src/net/eathena/serverfeatures.cpp b/src/net/eathena/serverfeatures.cpp
deleted file mode 100644
index ff6133eb1..000000000
--- a/src/net/eathena/serverfeatures.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/serverfeatures.h"
-
-#include "net/net.h"
-
-#include "debug.h"
-
-extern int serverVersion;
-
-namespace EAthena
-{
-
-ServerFeatures::ServerFeatures() :
- Net::ServerFeatures()
-{
- serverFeatures = this;
-}
-
-bool ServerFeatures::haveServerOnlineList() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveServerHp() const
-{
- return true;
-}
-
-bool ServerFeatures::havePlayerStatusUpdate() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveIncompleteChatMessages() const
-{
- return false;
-}
-
-bool ServerFeatures::haveRaceSelection() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveLookSelection() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveMove3() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveCharOtherGender() const
-{
- return true;
-}
-
-bool ServerFeatures::haveMonsterAttackRange() const
-{
- return false;
-}
-
-bool ServerFeatures::haveEmailOnRegister() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveEmailOnDelete() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveServerVersion() const
-{
- return Net::getNetworkType() == ServerType::EVOL2;
-}
-
-bool ServerFeatures::haveMapServerVersion() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveNpcGender() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveJoinChannel() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveCreateCharGender() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveTalkPet() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveMovePet() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveServerWarpNames() const
-{
- return serverVersion == 0;
-}
-
-bool ServerFeatures::haveExtendedRiding() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveExtendedDropsPosition() const
-{
- return serverVersion >= 12;
-}
-
-bool ServerFeatures::haveMoveWhileSit() const
-{
- return serverVersion > 0;
-}
-
-bool ServerFeatures::haveKillerId() const
-{
- return serverVersion >= 14;
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/serverfeatures.h b/src/net/eathena/serverfeatures.h
deleted file mode 100644
index f60f6e741..000000000
--- a/src/net/eathena/serverfeatures.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SERVERFEATURES_H
-#define NET_EATHENA_SERVERFEATURES_H
-
-#include "net/serverfeatures.h"
-
-#include "localconsts.h"
-
-namespace EAthena
-{
-class ServerFeatures final : public Net::ServerFeatures
-{
- public:
- ServerFeatures();
-
- A_DELETE_COPY(ServerFeatures)
-
- bool haveServerOnlineList() const override final;
-
- bool haveServerHp() const override final A_CONST;
-
- bool havePlayerStatusUpdate() const override final;
-
- bool haveIncompleteChatMessages() const override final A_CONST;
-
- bool haveRaceSelection() const override final;
-
- bool haveLookSelection() const override final;
-
- bool haveMove3() const override final;
-
- bool haveCharOtherGender() const override final;
-
- bool haveMonsterAttackRange() const override final A_CONST;
-
- bool haveEmailOnRegister() const override final;
-
- bool haveEmailOnDelete() const override final;
-
- bool haveServerVersion() const override final;
-
- bool haveMapServerVersion() const override final;
-
- bool haveNpcGender() const override final;
-
- bool haveJoinChannel() const override final;
-
- bool haveCreateCharGender() const override final;
-
- bool haveTalkPet() const override final;
-
- bool haveMovePet() const override final;
-
- bool haveServerWarpNames() const override final;
-
- bool haveExtendedRiding() const override final;
-
- bool haveExtendedDropsPosition() const override final;
-
- bool haveMoveWhileSit() const override final;
-
- bool haveKillerId() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_SERVERFEATURES_H
diff --git a/src/net/eathena/skillhandler.cpp b/src/net/eathena/skillhandler.cpp
deleted file mode 100644
index ec8176eef..000000000
--- a/src/net/eathena/skillhandler.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/skillhandler.h"
-
-#include "net/eathena/menu.h"
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-
-namespace EAthena
-{
-
-SkillHandler::SkillHandler() :
- Ea::SkillHandler()
-{
- skillHandler = this;
-}
-
-SkillHandler::~SkillHandler()
-{
- skillHandler = nullptr;
-}
-
-void SkillHandler::useBeing(const int id, const int level,
- const BeingId beingId) const
-{
- createOutPacket(CMSG_SKILL_USE_BEING);
- outMsg.writeInt16(CAST_S16(level), "skill level");
- outMsg.writeInt16(CAST_S16(id), "skill id");
- outMsg.writeInt32(toInt(beingId, int), "target id");
-}
-
-void SkillHandler::usePos(const int id, const int level,
- const int x, const int y) const
-{
- createOutPacket(CMSG_SKILL_USE_POSITION);
- if (packetVersion >= 20080827 && packetVersion < 20101124)
- {
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt32(0, "unused");
- outMsg.writeInt16(CAST_S16(level), "skill level");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(CAST_S16(id), "skill id");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(0, "unused");
- outMsg.writeInt8(0, "unused");
- outMsg.writeInt16(CAST_S16(y), "y");
- }
- else
- {
- outMsg.writeInt16(CAST_S16(level), "skill level");
- outMsg.writeInt16(CAST_S16(id), "skill id");
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(CAST_S16(y), "y");
- }
-}
-
-void SkillHandler::usePos(const int id, const int level,
- const int x, const int y,
- const std::string &text) const
-{
- createOutPacket(CMSG_SKILL_USE_POSITION_MORE);
- outMsg.writeInt16(CAST_S16(level), "level");
- outMsg.writeInt16(CAST_S16(id), "id");
- outMsg.writeInt16(CAST_S16(x), "x");
- outMsg.writeInt16(CAST_S16(y), "y");
- outMsg.writeString(text, 80, "text");
-}
-
-void SkillHandler::useMap(const int id, const std::string &map) const
-{
- createOutPacket(CMSG_SKILL_USE_MAP);
- outMsg.writeInt16(CAST_S16(id), "skill id");
- outMsg.writeString(map, 16, "map name");
-}
-
-void SkillHandler::getAlchemistRanks() const
-{
- if (packetVersion >= 20041108)
- {
- createOutPacket(CMSG_ALCHEMIST_RANKS);
- }
-}
-
-void SkillHandler::getBlacksmithRanks() const
-{
- if (packetVersion >= 20041108)
- {
- createOutPacket(CMSG_BLACKSMITH_RANKS);
- }
-}
-
-void SkillHandler::getPkRanks() const
-{
- if (packetVersion >= 20050530)
- {
- createOutPacket(CMSG_PK_RANKS);
- }
-}
-
-void SkillHandler::getTaekwonRanks() const
-{
- if (packetVersion >= 20050328)
- {
- createOutPacket(CMSG_TAEKWON_RANKS);
- }
-}
-
-void SkillHandler::feelSaveOk(const int which) const
-{
- if (packetVersion >= 20050817)
- {
- createOutPacket(CMSG_SKILL_FEEL_SAVE_OK);
- outMsg.writeInt8(CAST_S8(which), "which");
- menu = MenuType::Unknown;
- }
-}
-
-void SkillHandler::lessEffects(const bool isLess) const
-{
- if (packetVersion >= 20041115)
- {
- createOutPacket(CMSG_PLAYER_LESS_EFFECTS);
- outMsg.writeInt32(isLess ? 1 : 0, "state");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/skillhandler.h b/src/net/eathena/skillhandler.h
deleted file mode 100644
index d615dac77..000000000
--- a/src/net/eathena/skillhandler.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SKILLHANDLER_H
-#define NET_EATHENA_SKILLHANDLER_H
-
-#include "net/ea/skillhandler.h"
-
-namespace EAthena
-{
-
-class SkillHandler final : public Ea::SkillHandler
-{
- public:
- SkillHandler();
-
- A_DELETE_COPY(SkillHandler)
-
- ~SkillHandler();
-
- void useBeing(const int id,
- const int level,
- const BeingId beingId) const override final;
-
- void usePos(const int id,
- const int level,
- const int x, const int y) const override final;
-
- void usePos(const int id,
- const int level,
- const int x, const int y,
- const std::string &text) const override final;
-
- void useMap(const int id, const std::string &map) const override final;
-
- void getAlchemistRanks() const override final;
-
- void getBlacksmithRanks() const override final;
-
- void getPkRanks() const override final;
-
- void getTaekwonRanks() const override final;
-
- void feelSaveOk(const int which) const override final;
-
- void lessEffects(const bool isLess) const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_SKILLHANDLER_H
diff --git a/src/net/eathena/skillrecv.cpp b/src/net/eathena/skillrecv.cpp
deleted file mode 100644
index e4b71a076..000000000
--- a/src/net/eathena/skillrecv.cpp
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/skillrecv.h"
-
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "const/net/skill.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/textselectdialog.h"
-
-#include "listeners/skillwarplistener.h"
-
-#include "net/messagein.h"
-
-#include "net/eathena/menu.h"
-
-#include "resources/iteminfo.h"
-
-#include "resources/db/itemdb.h"
-
-#include "resources/skill/skillinfo.h"
-
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-static const unsigned int RFAIL = 10;
-static const unsigned int RFAIL_SUMMON = 19;
-static const unsigned int RFAIL_NEED_ITEM = 71;
-static const unsigned int RFAIL_NEED_EQUIPMENT = 72;
-static const unsigned int RFAIL_SPIRITS = 74;
-
-extern int serverVersion;
-
-namespace EAthena
-{
-
-void SkillRecv::processPlayerSkills(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const int sz = (serverVersion >= 15) ? 41 : 37;
- const int skillCount = (msg.getLength() - 4) / sz;
- int updateSkill = 0;
-
- if (skillDialog != nullptr)
- skillDialog->hideSkills(SkillOwner::Player);
- for (int k = 0; k < skillCount; k++)
- {
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- if (serverVersion >= 15)
- msg.readInt32("inf2");
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if ((oldLevel != 0) && oldLevel != level)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Player,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog != nullptr)
- {
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playUpdateEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillAdd(Net::MessageIn &msg)
-{
- int updateSkill = 0;
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if ((oldLevel != 0) && oldLevel != level)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Player,
- skillId, name, level, range, up, inf, sp);
- }
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playUpdateEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillAdd2(Net::MessageIn &msg)
-{
- int updateSkill = 0;
- msg.readInt16("len"); // for now unused
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- msg.readInt32("inf2");
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if ((oldLevel != 0) && oldLevel != level)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Player,
- skillId, name, level, range, up, inf, sp);
- }
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playUpdateEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillUpdate(Net::MessageIn &msg)
-{
- int updateSkill = 0;
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if ((oldLevel != 0) && oldLevel != level)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Player,
- skillId, "", level, range, up, inf, sp);
- }
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playUpdateEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillUpdate2(Net::MessageIn &msg)
-{
- int updateSkill = 0;
- msg.readInt16("len"); // for now unused
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- msg.readInt32("inf2");
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if ((oldLevel != 0) && oldLevel != level)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog != nullptr)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Player,
- skillId, "", level, range, up, inf, sp);
- }
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playUpdateEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillDelete(Net::MessageIn &msg)
-{
- int updateSkill = 0;
- const int skillId = msg.readInt16("skill id");
- const int oldLevel = PlayerInfo::getSkillLevel(skillId);
- if (oldLevel != 0)
- updateSkill = skillId;
- PlayerInfo::setSkillLevel(skillId, 0);
- if (skillDialog != nullptr)
- {
- skillDialog->removeSkill(skillId);
- skillDialog->update();
- if (updateSkill != 0)
- skillDialog->playRemoveEffect(updateSkill);
- }
-}
-
-void SkillRecv::processSkillCoolDown(Net::MessageIn &msg)
-{
- const int skillId = msg.readInt16("skill id");
- const int duration = msg.readInt32("duration");
- if (skillDialog != nullptr)
- skillDialog->setSkillDuration(SkillOwner::Player, skillId, duration);
-}
-
-void SkillRecv::processSkillCoolDownList(Net::MessageIn &msg)
-{
- int packetLen;
- if (msg.getVersion() >= 20120604)
- packetLen = 10;
- else
- packetLen = 6;
- const int count = (msg.readInt16("len") - 4) / packetLen;
- for (int f = 0; f < count; f ++)
- {
- const int skillId = msg.readInt16("skill id");
- if (msg.getVersion() >= 20120604)
- msg.readInt32("total");
- const int duration = msg.readInt32("duration");
- if (skillDialog != nullptr)
- {
- skillDialog->setSkillDuration(SkillOwner::Player,
- skillId, duration);
- }
- }
-}
-
-void SkillRecv::processSkillFailed(Net::MessageIn &msg)
-{
- // Action failed (ex. sit because you have not reached the
- // right level)
- const int skillId = msg.readInt16("skill id");
- const int bskill = msg.readInt32("btype");
- const signed char success = msg.readUInt8("success");
- const signed char reason = msg.readUInt8("reason");
- if (success != CAST_S32(SKILL_FAILED)
- && bskill == CAST_S32(BSKILL_EMOTE))
- {
- logger->log("Action: %d/%d", bskill, success);
- }
-
- if (localPlayer != nullptr)
- localPlayer->stopCast(true);
- std::string txt;
- if (success == CAST_S32(SKILL_FAILED) && bskill != 0)
- {
- if ((localPlayer != nullptr) && bskill == CAST_S32(BSKILL_EMOTE)
- && reason == CAST_S32(RFAIL_SKILLDEP))
- {
- localPlayer->stopAdvert();
- }
-
- const SkillInfo *const info = skillDialog->getSkill(bskill);
- if (info != nullptr)
- {
- txt = info->errorText;
- }
- else
- {
- // TRANSLATORS: skill error message
- txt = strprintf(_("Unknown skill error: %d"), bskill);
- }
- }
- else
- {
- const SkillInfo *const info = skillDialog->getSkill(skillId);
- if (info != nullptr)
- {
- txt = info->errorText + ".";
- }
- else
- {
- // TRANSLATORS: skill error message
- txt = strprintf(_("Unknown skill error: %d."), skillId);
- }
- }
-
- txt.append(" ");
- switch (reason)
- {
- case RFAIL_SKILLDEP:
- // TRANSLATORS: error message
- txt.append(_("You have not yet reached a high enough lvl!"));
- break;
- case RFAIL_INSUFHP:
- // TRANSLATORS: error message
- txt.append(_("Insufficient HP!"));
- break;
- case RFAIL_INSUFSP:
- // TRANSLATORS: error message
- txt.append(_("Insufficient SP!"));
- break;
- case RFAIL_NOMEMO:
- // TRANSLATORS: error message
- txt.append(_("You have no memos!"));
- break;
- case RFAIL_SKILLDELAY:
- // TRANSLATORS: error message
- txt.append(_("You cannot do that right now!"));
- break;
- case RFAIL_ZENY:
- // TRANSLATORS: error message
- txt.append(_("Seems you need more money... ;-)"));
- break;
- case RFAIL_WEAPON:
- // TRANSLATORS: error message
- txt.append(_("You cannot use this skill with that "
- "kind of weapon!"));
- break;
- case RFAIL_REDGEM:
- // TRANSLATORS: error message
- txt.append(_("You need another red gem!"));
- break;
- case RFAIL_BLUEGEM:
- // TRANSLATORS: error message
- txt.append(_("You need another blue gem!"));
- break;
- case RFAIL_OVERWEIGHT:
- // TRANSLATORS: error message
- txt.append(_("You're carrying to much to do this!"));
- break;
- case RFAIL_SUMMON:
- // TRANSLATORS: error message
- txt.append(_("Fail summon."));
- break;
- case RFAIL_SPIRITS:
- // TRANSLATORS: error message
- txt.append(_("Need spirits."));
- break;
- case RFAIL_NEED_EQUIPMENT:
- {
- const int itemId = bskill >> 16U;
- const int amount = bskill & 0xFFFFU;
- const ItemInfo &info = ItemDB::get(itemId);
- if (amount == 1)
- {
- // TRANSLATORS: skill error message
- txt.append(strprintf(_("Need equipment %s."),
- info.getLink().c_str()));
- }
- else
- {
- // TRANSLATORS: skill error message
- txt.append(strprintf(_("Need equipment %s and amount %d"),
- info.getLink().c_str(),
- amount));
- }
- break;
- }
- case RFAIL_NEED_ITEM:
- {
- const int itemId = bskill >> 16U;
- const int amount = bskill & 0xFFFFU;
- const ItemInfo &info = ItemDB::get(itemId);
- if (amount == 1)
- {
- // TRANSLATORS: skill error message
- txt.append(strprintf(_("Need item %s."),
- info.getLink().c_str()));
- }
- else
- {
- // TRANSLATORS: skill error message
- txt.append(strprintf(_("Need item %s and amount %d"),
- info.getLink().c_str(),
- amount));
- }
- break;
- }
- case RFAIL:
- {
- // TRANSLATORS: error message
- txt.append(_("Skill failed!"));
- break;
- }
-
- default:
- UNIMPLEMENTEDPACKETFIELD(reason);
- break;
- }
-
- NotifyManager::notify(NotifyTypes::SKILL_FAIL_MESSAGE, txt);
-}
-
-void SkillRecv::processSkillWarpPoint(Net::MessageIn &msg)
-{
- const int skillId = msg.readInt16("skill id");
-
- TextSelectDialog *const dialog = CREATEWIDGETR(TextSelectDialog,
- // TRANSLATORS: warp select window name
- _("Select warp target"),
- // TRANSLATORS: warp select button
- _("Warp"),
- AllowQuit_false);
- skillWarpListener.setDialog(dialog);
- skillWarpListener.setSkill(skillId);
- dialog->addActionListener(&skillWarpListener);
- for (int f = 0; f < 4; f ++)
- dialog->addText(msg.readString(16, "map name"));
-}
-
-void SkillRecv::processSkillMemoMessage(Net::MessageIn &msg)
-{
- const int type = msg.readUInt8("type");
- switch (type)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::SKILL_MEMO_SAVED);
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::SKILL_MEMO_ERROR_LEVEL);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::SKILL_MEMO_ERROR_SKILL);
- break;
- default:
- UNIMPLEMENTEDPACKETFIELD(type);
- break;
- }
-}
-
-void SkillRecv::processSkillProduceMixList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 8) / 8;
- for (int f = 0; f < count; f ++)
- {
- msg.readInt16("item id");
- for (int d = 0; d < 3; d ++)
- msg.readInt16("material id");
- }
-}
-
-void SkillRecv::processSkillProduceEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt16("flag");
- msg.readInt16("item id");
-}
-
-void SkillRecv::processSkillUnitUpdate(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("being id");
-}
-
-void SkillRecv::processSkillArrowCreateList(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- const int count = (msg.readInt16("len") - 4) / 2;
- for (int f = 0; f < count; f ++)
- msg.readInt16("item id");
-}
-
-void SkillRecv::processSkillAutoSpells(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- for (int f = 0; f < 7; f ++)
- msg.readInt32("skill id");
-
- menu = MenuType::AutoSpell;
-}
-
-void SkillRecv::processSkillDevotionEffect(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readBeingId("being id");
- for (int f = 0; f < 5; f ++)
- msg.readInt32("devotee id");
- msg.readInt16("range");
-}
-
-void SkillRecv::processSkillItemListWindow(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
-
- msg.readInt32("skill level");
- msg.readInt32("unused");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/skillrecv.h b/src/net/eathena/skillrecv.h
deleted file mode 100644
index 5facd510d..000000000
--- a/src/net/eathena/skillrecv.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SKILLRECV_H
-#define NET_EATHENA_SKILLRECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace SkillRecv
- {
- void processSkillFailed(Net::MessageIn &msg);
- void processPlayerSkills(Net::MessageIn &msg);
- void processSkillCoolDown(Net::MessageIn &msg);
- void processSkillCoolDownList(Net::MessageIn &msg);
- void processSkillAdd(Net::MessageIn &msg);
- void processSkillAdd2(Net::MessageIn &msg);
- void processSkillUpdate(Net::MessageIn &msg);
- void processSkillUpdate2(Net::MessageIn &msg);
- void processSkillDelete(Net::MessageIn &msg);
- void processSkillWarpPoint(Net::MessageIn &msg);
- void processSkillMemoMessage(Net::MessageIn &msg);
- void processSkillProduceMixList(Net::MessageIn &msg);
- void processSkillProduceEffect(Net::MessageIn &msg);
- void processSkillUnitUpdate(Net::MessageIn &msg);
- void processSkillArrowCreateList(Net::MessageIn &msg);
- void processSkillAutoSpells(Net::MessageIn &msg);
- void processSkillDevotionEffect(Net::MessageIn &msg);
- void processSkillItemListWindow(Net::MessageIn &msg);
- } // namespace SkillRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_SKILLRECV_H
diff --git a/src/net/eathena/sp.h b/src/net/eathena/sp.h
deleted file mode 100644
index 1d983e0ea..000000000
--- a/src/net/eathena/sp.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SP_H
-#define NET_EATHENA_SP_H
-
-namespace Sp
-{
- enum
- {
- SPEED = 0,
- BASEEXP = 1,
- JOBEXP = 2,
- KARMA = 3,
- MANNER = 4,
- HP = 5,
- MAXHP = 6,
- SP = 7,
- MAXSP = 8,
- STATUSPOINT = 9,
- VAL10 = 10,
- BASELEVEL = 11,
- SKILLPOINT = 12,
- STR = 13,
- AGI = 14,
- VIT = 15,
- INT = 16,
- DEX = 17,
- LUK = 18,
- CLASS = 19,
- ZENY = 20,
- SEX = 21,
- NEXTBASEEXP = 22,
- NEXTJOBEXP = 23,
- WEIGHT = 24,
- MAXWEIGHT = 25,
- VAL26 = 26,
- VAL27 = 27,
- VAL28 = 28,
- VAL29 = 29,
- VAL30 = 30,
- VAL31 = 31,
- USTR = 32,
- UAGI = 33,
- UVIT = 34,
- UINT = 35,
- UDEX = 36,
- ULUK = 37,
- VAL38 = 38,
- VAL39 = 39,
- VAL40 = 40,
- ATK1 = 41,
- ATK2 = 42,
- MATK1 = 43,
- MATK2 = 44,
- DEF1 = 45,
- DEF2 = 46,
- MDEF1 = 47,
- MDEF2 = 48,
- HIT = 49,
- FLEE1 = 50,
- FLEE2 = 51,
- CRITICAL = 52,
- ASPD = 53,
- VAL54 = 54,
- JOBLEVEL = 55,
- UPPER = 56,
- PARTNER = 57,
- CART = 58,
- FAME = 59,
- UNBREAKABLE = 60,
-
- CARTINFO = 99,
-
- BASEJOB = 119,
- BASECLASS = 120,
- KILLERRID = 121,
- KILLEDRID = 122,
- SLOTCHANGE = 123,
- CHARRENAME = 124,
- MOD_EXP = 125,
- MOD_DROP = 126,
- MOD_DEATH = 127,
-
- MERCFLEE = 165,
-
- MERCKILLS = 189,
- MERCFAITH = 190,
-
- ATTACKRANGE = 1000,
- ATKELE = 1001,
- DEFELE = 1002,
- CASTRATE = 1003,
- MAXHPRATE = 1004,
- MAXSPRATE = 1005,
- SPRATE = 1006,
-
- ADDELE = 1007,
- ADDRACE = 1008,
- ADDSIZE = 1009,
- SUBELE = 1010,
- SUBRACE = 1011,
- ADDEFF = 1012,
- RESEFF = 1013,
- BASE_ATK = 1014,
- ASPD_RATE = 1015,
- HP_RECOV_RATE = 1016,
- RECOV_RATE = 1017,
- SPEED_RATE = 1018,
- CRITICAL_DEF = 1019,
- NEAR_ATK_DEF = 1020,
- LONG_ATK_DEF = 1021,
- DOUBLE_RATE = 1022,
- DOUBLE_ADD_RATE = 1023,
- SKILL_HEAL = 1024,
- MATK_RATE = 1025,
- IGNORE_DEF_ELE = 1026,
- IGNORE_DEF_RACE = 1027,
- ATK_RATE = 1028,
- SPEED_ADDRATE = 1029,
- REGEN_RATE = 1030,
- MAGIC_ATK_DEF = 1031,
- MISC_ATK_DEF = 1032,
- IGNORE_MDEF_ELE = 1033,
- IGNORE_MDEF_RACE = 1034,
- MAGIC_ADDELE = 1035,
- MAGIC_ADDRACE = 1036,
- MAGIC_ADDSIZE = 1037,
- PERFECT_HIT_RATE = 1038,
- PERFECT_HIT_ADD_RATE = 1039,
- CRITICAL_RATE = 1040,
- GET_ZENY_NUM = 1041,
- ADD_GET_ZENY_NUM = 1042,
- ADD_DAMAGE_CLASS = 1043,
- ADD_MAGIC_DAMAGE_CLASS = 1044,
- ADD_DEF_CLASS = 1045,
- ADD_MDEF_CLASS = 1046,
- ADD_MONSTER_DROP_ITEM = 1047,
- DEF_RATIO_ATK_ELE = 1048,
- DEF_RATIO_ATK_RACE = 1049,
- UNBREAKABLE_GARMENT = 1050,
- HIT_RATE = 1051,
- FLEE_RATE = 1052,
- FLEE2_RATE = 1053,
- DEF_RATE = 1054,
- DEF2_RATE = 1055,
- MDEF_RATE = 1056,
- MDEF2_RATE = 1057,
- SPLASH_RANGE = 1058,
- SPLASH_ADD_RANGE = 1059,
- AUTOSPELL = 1060,
- HP_DRAIN_RATE = 1061,
- DRAIN_RATE = 1062,
- SHORT_WEAPON_DAMAGE_RETURN = 1063,
- LONG_WEAPON_DAMAGE_RETURN = 1064,
- WEAPON_COMA_ELE = 1065,
- WEAPON_COMA_RACE = 1066,
- ADDEFF2 = 1067,
- BREAK_WEAPON_RATE = 1068,
- BREAK_ARMOR_RATE = 1069,
- ADD_STEAL_RATE = 1070,
- MAGIC_DAMAGE_RETURN = 1071,
-
- ALL_STATS = 1073,
- AGI_VIT = 1074,
- AGI_DEX_STR = 1075,
- PERFECT_HIDE = 1076,
- NO_KNOCKBACK = 1077,
- CLASSCHANGE = 1078,
- HP_DRAIN_VALUE = 1079,
- DRAIN_VALUE = 1080,
- WEAPON_ATK = 1081,
- WEAPON_ATK_RATE = 1082,
- DELAYRATE = 1083,
- HP_DRAIN_RATE_RACE = 1084,
- DRAIN_RATE_RACE = 1085,
- IGNORE_MDEF_RATE = 1086,
- IGNORE_DEF_RATE = 1087,
- SKILL_HEAL2 = 1088,
- ADDEFF_ONSKILL = 1089,
- ADD_HEAL_RATE = 1090,
- ADD_HEAL2_RATE = 1091,
- HP_VANISH_RATE = 1092,
-
- RESTART_FULL_RECOVER = 2000,
- NO_CASTCANCEL = 2001,
- NO_SIZEFIX = 2002,
- NO_MAGIC_DAMAGE = 2003,
- NO_WEAPON_DAMAGE = 2004,
- NO_GEMSTONE = 2005,
- NO_CASTCANCEL2 = 2006,
- NO_MISC_DAMAGE = 2007,
- UNBREAKABLE_WEAPON = 2008,
- UNBREAKABLE_ARMOR = 2009,
- UNBREAKABLE_HELM = 2010,
- UNBREAKABLE_SHIELD = 2011,
- LONG_ATK_RATE = 2012,
-
- CRIT_ATK_RATE = 2013,
- CRITICAL_ADDRACE = 2014,
- NO_REGEN = 2015,
- ADDEFF_WHENHIT = 2016,
- AUTOSPELL_WHENHIT = 2017,
- SKILL_ATK = 2018,
- UNSTRIPABLE = 2019,
- AUTOSPELL_ONSKILL = 2020,
- GAIN_VALUE = 2021,
- HP_REGEN_RATE = 2022,
- HP_LOSS_RATE = 2023,
- ADDRACE2 = 2024,
- HP_GAIN_VALUE = 2025,
- SUBSIZE = 2026,
- HP_DRAIN_VALUE_RACE = 2027,
- ADD_ITEM_HEAL_RATE = 2028,
- DRAIN_VALUE_RACE = 2029,
- EXP_ADDRACE = 2030,
- GAIN_RACE = 2031,
- SUBRACE2 = 2032,
- UNBREAKABLE_SHOES = 2033,
- UNSTRIPABLE_WEAPON = 2034,
- UNSTRIPABLE_ARMOR = 2035,
- UNSTRIPABLE_HELM = 2036,
- UNSTRIPABLE_SHIELD = 2037,
- INTRAVISION = 2038,
- ADD_MONSTER_DROP_CHAINITEM = 2039,
- LOSS_RATE = 2040,
- ADD_SKILL_BLOW = 2041,
- VANISH_RATE = 2042,
- MAGIC_GAIN_VALUE = 2043,
- MAGIC_HP_GAIN_VALUE = 2044,
- ADD_CLASS_DROP_ITEM = 2045,
- EMATK = 2046,
- GAIN_RACE_ATTACK = 2047,
- HP_GAIN_RACE_ATTACK = 2048,
- SKILL_USE_RATE = 2049,
- SKILL_COOLDOWN = 2050,
- SKILL_FIXEDCAST = 2051,
- SKILL_VARIABLECAST = 2052,
- FIXCASTRATE = 2053,
- VARCASTRATE = 2054,
- SKILL_USE_SP = 2055,
- MAGIC_ATK_ELE = 2056,
- ADD_FIXEDCAST = 2057,
- ADD_VARIABLECAST = 2058,
- SET_DEF_RACE = 2059,
- SET_MDEF_RACE = 2060,
- RACE_TOLERANCE = 2061,
- ADDMAXWEIGHT = 2062
- };
-} // namespace Sp
-
-#endif // NET_EATHENA_SP_H
diff --git a/src/net/eathena/sprite.h b/src/net/eathena/sprite.h
deleted file mode 100644
index ff259251b..000000000
--- a/src/net/eathena/sprite.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_SPRITE_H
-#define NET_EATHENA_SPRITE_H
-
-enum
-{
- SPRITE_BASE = 0,
- SPRITE_HAIR = 1,
- SPRITE_WEAPON = 2,
- SPRITE_HEAD_BOTTOM = 3,
- SPRITE_HEAD_TOP = 4,
- SPRITE_HEAD_MID = 5,
- SPRITE_HAIR_COLOR = 6,
- SPRITE_CLOTHES_COLOR = 7,
- SPRITE_SHIELD = 8,
- SPRITE_SHOES = 9,
- SPRITE_BODY = 10,
- SPRITE_FLOOR = 11,
- SPRITE_ROBE = 12,
- SPRITE_EVOL2 = 13, // in new versions also BODY2
- SPRITE_EVOL3 = 14,
- SPRITE_EVOL4 = 15,
- SPRITE_EVOL5 = 16,
- SPRITE_EVOL6 = 17,
- SPRITE_VECTOREND
-};
-
-#endif // NET_EATHENA_SPRITE_H
diff --git a/src/net/eathena/tradehandler.cpp b/src/net/eathena/tradehandler.cpp
deleted file mode 100644
index 5c6877f5e..000000000
--- a/src/net/eathena/tradehandler.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/tradehandler.h"
-
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-#include "net/eathena/traderecv.h"
-
-#include "resources/item/item.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-TradeHandler::TradeHandler() :
- Ea::TradeHandler()
-{
- tradeHandler = this;
- TradeRecv::mItemIndex = -1;
- TradeRecv::mQuantity = 0;
-}
-
-TradeHandler::~TradeHandler()
-{
- tradeHandler = nullptr;
-}
-
-void TradeHandler::request(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_TRADE_REQUEST);
- outMsg.writeBeingId(being->getId(), "player id");
-}
-
-void TradeHandler::respond(const bool accept) const
-{
- if (!accept)
- PlayerInfo::setTrading(Trading_false);
-
- createOutPacket(CMSG_TRADE_RESPONSE);
- outMsg.writeInt8(CAST_S8(accept ? 3 : 4), "accept");
-}
-
-void TradeHandler::addItem(const Item *const item, const int amount) const
-{
- if (item == nullptr)
- return;
-
- TradeRecv::mItemIndex = item->getInvIndex();
- TradeRecv::mQuantity = amount;
- createOutPacket(CMSG_TRADE_ITEM_ADD_REQUEST);
- outMsg.writeInt16(CAST_S16(
- TradeRecv::mItemIndex + INVENTORY_OFFSET),
- "index");
- outMsg.writeInt32(amount, "amount");
-}
-
-void TradeHandler::setMoney(const int amount) const
-{
- createOutPacket(CMSG_TRADE_ITEM_ADD_REQUEST);
- outMsg.writeInt16(0, "index");
- outMsg.writeInt32(amount, "amount");
-}
-
-void TradeHandler::confirm() const
-{
- createOutPacket(CMSG_TRADE_ADD_COMPLETE);
-}
-
-void TradeHandler::finish() const
-{
- createOutPacket(CMSG_TRADE_OK);
-}
-
-void TradeHandler::cancel() const
-{
- createOutPacket(CMSG_TRADE_CANCEL_REQUEST);
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/tradehandler.h b/src/net/eathena/tradehandler.h
deleted file mode 100644
index 0bf5b2eb2..000000000
--- a/src/net/eathena/tradehandler.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_TRADEHANDLER_H
-#define NET_EATHENA_TRADEHANDLER_H
-
-#include "net/ea/tradehandler.h"
-
-namespace EAthena
-{
-
-class TradeHandler final : public Ea::TradeHandler
-{
- public:
- TradeHandler();
-
- A_DELETE_COPY(TradeHandler)
-
- ~TradeHandler();
-
- void request(const Being *const being) const override final;
-
- void respond(const bool accept) const override final;
-
- void addItem(const Item *const item,
- const int amount) const override final;
-
- void setMoney(const int amount) const override final;
-
- void confirm() const override final;
-
- void finish() const override final;
-
- void cancel() const override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_TRADEHANDLER_H
diff --git a/src/net/eathena/traderecv.cpp b/src/net/eathena/traderecv.cpp
deleted file mode 100644
index ac64d4fb0..000000000
--- a/src/net/eathena/traderecv.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/traderecv.h"
-
-#include "itemcolormanager.h"
-#include "notifymanager.h"
-
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/tradewindow.h"
-
-#include "net/messagein.h"
-
-#include "net/ea/traderecv.h"
-
-#include "resources/inventory/inventory.h"
-
-#include "resources/item/item.h"
-#include "resources/item/itemoptionslist.h"
-
-#include "debug.h"
-
-extern int serverVersion;
-
-namespace EAthena
-{
-
-namespace TradeRecv
-{
- int mQuantity = 0;
- int mItemIndex = -1;
-} // namespace TradeRecv
-
-void TradeRecv::processTradeRequest(Net::MessageIn &msg)
-{
- const std::string &partner = msg.readString(24, "name");
- if (msg.getVersion() >= 6)
- {
- msg.readInt32("char id");
- msg.readInt16("base level");
- }
- Ea::TradeRecv::processTradeRequestContinue(partner);
-}
-
-void TradeRecv::processTradeResponse(Net::MessageIn &msg)
-{
- const uint8_t type = msg.readUInt8("type");
- msg.readInt32("char id");
- msg.readInt16("base level");
- Ea::TradeRecv::processTradeResponseContinue(type);
-}
-
-void TradeRecv::processTradeItemAdd(Net::MessageIn &msg)
-{
- const int type = msg.readInt16("type");
- ItemTypeT itemType = ItemType::Unknown;
- if (msg.getVersion() >= 20100223)
- {
- itemType = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- }
- const int amount = msg.readInt32("amount");
- const uint8_t identify = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[maxCards];
- for (int f = 0; f < maxCards; f++)
- cards[f] = msg.readUInt16("card");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList;
- for (int f = 0; f < 5; f ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
-
- if (tradeWindow != nullptr)
- {
- if (type == 0)
- {
- tradeWindow->setMoney(amount);
- }
- else
- {
- tradeWindow->addItem2(type,
- itemType,
- cards,
- options,
- 4,
- false,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identify, Identified),
- damaged,
- Favorite_false,
- Equipm_false);
- }
- }
- delete options;
-}
-
-void TradeRecv::processTradeItemAddResponse(Net::MessageIn &msg)
-{
- msg.readInt16("index");
- const uint8_t res = msg.readUInt8("fail");
- switch (res)
- {
- case 0: // Successfully added item
- case 9: // silent added item
- {
- Item *const item = PlayerInfo::getInventory()->getItem(
- mItemIndex);
- if (item == nullptr)
- return;
- if (tradeWindow != nullptr)
- {
- tradeWindow->addItem2(item->getId(),
- item->getType(),
- item->getCards(),
- item->getOptions(),
- 4,
- true,
- mQuantity,
- item->getRefine(),
- item->getColor(),
- item->getIdentified(),
- item->getDamaged(),
- item->getFavorite(),
- item->isEquipment());
- }
- item->increaseQuantity(-mQuantity);
- mItemIndex = -1;
- mQuantity = 0;
- break;
- }
- case 1:
- // Add item failed - player overweighted
- NotifyManager::notify(NotifyTypes::
- TRADE_ADD_PARTNER_OVER_WEIGHT);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR);
- break;
- default:
- NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR);
- UNIMPLEMENTEDPACKETFIELD(res);
- break;
- }
-}
-
-void TradeRecv::processTradeUndo(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- // +++ here need clear trade window from partner side?
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/traderecv.h b/src/net/eathena/traderecv.h
deleted file mode 100644
index 2c06db5ae..000000000
--- a/src/net/eathena/traderecv.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_TRADERECV_H
-#define NET_EATHENA_TRADERECV_H
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace TradeRecv
- {
- extern int mQuantity;
- extern int mItemIndex;
-
- void processTradeRequest(Net::MessageIn &msg);
- void processTradeResponse(Net::MessageIn &msg);
- void processTradeUndo(Net::MessageIn &msg);
- void processTradeItemAdd(Net::MessageIn &msg);
- void processTradeItemAddResponse(Net::MessageIn &msg);
- } // namespace TradeRecv
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_TRADERECV_H
diff --git a/src/net/eathena/updateprotocol.cpp b/src/net/eathena/updateprotocol.cpp
deleted file mode 100644
index ce9148d1e..000000000
--- a/src/net/eathena/updateprotocol.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/updateprotocol.h"
-
-#include "logger.h"
-
-#include "net/eathena/network.h"
-#include "net/eathena/protocolout.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-extern int evolPacketOffset;
-
-namespace EAthena
-{
-
-void updateProtocol()
-{
- logger->log("packet version: %d", packetVersion);
-#define PACKETS_UPDATE
-#include "net/protocoloutupdate.h"
-#include "net/eathena/packetsout.inc"
-#undef packet
- Network *const network = Network::mInstance;
- if (network != nullptr)
- {
- network->clearHandlers();
- network->registerHandlers();
- network->registerFakeHandlers();
- }
-}
-
-PACKETSOUT_VOID
-PROTOCOLOUTUPDATE_VOID
-PROTOCOLOUT_VOID
-
-} // namespace EAthena
diff --git a/src/net/eathena/updateprotocol.h b/src/net/eathena/updateprotocol.h
deleted file mode 100644
index 17960d0e6..000000000
--- a/src/net/eathena/updateprotocol.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_UPDATEPROTOCOL_H
-#define NET_EATHENA_UPDATEPROTOCOL_H
-
-namespace EAthena
-{
- void updateProtocol();
-} // namespace EAthena
-
-#endif // NET_EATHENA_UPDATEPROTOCOL_H
diff --git a/src/net/eathena/vendinghandler.cpp b/src/net/eathena/vendinghandler.cpp
deleted file mode 100644
index 73fa5d12b..000000000
--- a/src/net/eathena/vendinghandler.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/vendinghandler.h"
-
-#include "being/being.h"
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "net/eathena/messageout.h"
-#include "net/eathena/protocolout.h"
-#include "net/eathena/vendingrecv.h"
-
-#include "utils/foreach.h"
-
-#include "resources/item/shopitem.h"
-
-#include "debug.h"
-
-namespace EAthena
-{
-
-VendingHandler::VendingHandler()
-{
- vendingHandler = this;
- VendingRecv::mBuyDialog = nullptr;
-}
-
-VendingHandler::~VendingHandler()
-{
- vendingHandler = nullptr;
-}
-
-void VendingHandler::close() const
-{
- createOutPacket(CMSG_VENDING_CLOSE);
- PlayerInfo::enableVending(false);
-}
-
-void VendingHandler::open(const Being *const being) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_VENDING_LIST_REQ);
- outMsg.writeBeingId(being->getId(), "account id");
-}
-
-void VendingHandler::buy(const Being *const being,
- const int index,
- const int amount) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_VENDING_BUY);
- outMsg.writeInt16(12, "len");
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- outMsg.writeInt16(CAST_S16(index), "index");
-}
-
-void VendingHandler::buyItems(const Being *const being,
- const STD_VECTOR<ShopItem*> &items) const
-{
- int cnt = 0;
- const int pairSize = 4;
-
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- cnt ++;
- }
-
- if (cnt > 100)
- return;
-
- createOutPacket(CMSG_VENDING_BUY);
- outMsg.writeInt16(CAST_S16(4 + 4 + pairSize * cnt), "len");
- outMsg.writeBeingId(being->getId(), "account id");
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- ShopItem *const item = *it;
- const int usedQuantity = item->getUsedQuantity();
- if (usedQuantity == 0)
- continue;
- item->increaseQuantity(usedQuantity);
- item->increaseUsedQuantity(-usedQuantity);
- item->update();
- outMsg.writeInt16(CAST_S16(usedQuantity), "amount");
- outMsg.writeInt16(CAST_S16(item->getInvIndex()), "index");
- }
-}
-
-void VendingHandler::buy2(const Being *const being,
- const int vendId,
- const int index,
- const int amount) const
-{
- if (being == nullptr)
- return;
-
- createOutPacket(CMSG_VENDING_BUY2);
- outMsg.writeInt16(16, "len");
- outMsg.writeBeingId(being->getId(), "account id");
- outMsg.writeInt32(vendId, "vend id");
- outMsg.writeInt16(CAST_S16(amount), "amount");
- outMsg.writeInt16(CAST_S16(index), "index");
-}
-
-void VendingHandler::createShop(const std::string &name,
- const bool flag,
- const STD_VECTOR<ShopItem*> &items) const
-{
- createOutPacket(CMSG_VENDING_CREATE_SHOP);
- outMsg.writeInt16(CAST_S16(85 + items.size() * 8), "len");
- outMsg.writeString(name, 80, "shop name");
- outMsg.writeInt8(CAST_S8(flag ? 1 : 0), "flag");
- FOR_EACH (STD_VECTOR<ShopItem*>::const_iterator, it, items)
- {
- const ShopItem *const item = *it;
- outMsg.writeInt16(CAST_S16(
- item->getInvIndex() + INVENTORY_OFFSET), "index");
- outMsg.writeInt16(CAST_S16(item->getQuantity()), "amount");
- outMsg.writeInt32(item->getPrice(), "price");
- }
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/vendinghandler.h b/src/net/eathena/vendinghandler.h
deleted file mode 100644
index 7929a6d19..000000000
--- a/src/net/eathena/vendinghandler.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_VENDINGHANDLER_H
-#define NET_EATHENA_VENDINGHANDLER_H
-
-#include "net/vendinghandler.h"
-
-namespace EAthena
-{
-class VendingHandler final : public Net::VendingHandler
-{
- public:
- VendingHandler();
-
- A_DELETE_COPY(VendingHandler)
-
- ~VendingHandler();
-
- void close() const override final;
-
- void open(const Being *const being) const override final;
-
- void buy(const Being *const being,
- const int index,
- const int amount) const override final;
-
- void buy2(const Being *const being,
- const int vendId,
- const int index,
- const int amount) const override final;
-
- void buyItems(const Being *const being,
- const STD_VECTOR<ShopItem*> &items) const
- override final;
-
- void createShop(const std::string &name,
- const bool flag,
- const STD_VECTOR<ShopItem*> &items) const
- override final;
-};
-
-} // namespace EAthena
-
-#endif // NET_EATHENA_VENDINGHANDLER_H
diff --git a/src/net/eathena/vendingrecv.cpp b/src/net/eathena/vendingrecv.cpp
deleted file mode 100644
index d4f14bc87..000000000
--- a/src/net/eathena/vendingrecv.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "net/eathena/vendingrecv.h"
-
-#include "actormanager.h"
-#include "itemcolormanager.h"
-#include "notifymanager.h"
-
-#include "const/resources/currency.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "const/net/inventory.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/buydialog.h"
-
-#include "gui/widgets/createwidget.h"
-
-#include "listeners/vendingmodelistener.h"
-#include "listeners/vendingslotslistener.h"
-
-#include "net/messagein.h"
-
-#include "resources/iteminfo.h"
-
-#include "resources/db/unitsdb.h"
-
-#include "resources/inventory/inventory.h"
-
-#include "resources/item/itemoptionslist.h"
-#include "resources/item/shopitem.h"
-
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-extern int packetVersion;
-extern int serverVersion;
-
-namespace EAthena
-{
-
-namespace VendingRecv
-{
- BuyDialog *mBuyDialog = nullptr;
-} // namespace VendingRecv
-
-void VendingRecv::processOpenReq(Net::MessageIn &msg)
-{
- VendingSlotsListener::distributeEvent(msg.readInt16("slots allowed"));
-}
-
-void VendingRecv::processShowBoard(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("owner id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- {
- dstBeing->setSellBoard(msg.readString(80, "shop name"));
- }
- else
- {
- msg.readString(80, "shop name");
- }
-}
-
-void VendingRecv::processHideBoard(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("owner id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing != nullptr)
- dstBeing->setSellBoard(std::string());
- if (dstBeing == localPlayer)
- {
- PlayerInfo::enableVending(false);
- VendingModeListener::distributeEvent(false);
- }
-}
-
-void VendingRecv::processItemsList(Net::MessageIn &msg)
-{
- int packetLen = 22;
- if (msg.getVersion() >= 20160921)
- packetLen = 53;
- else if (msg.getVersion() >= 20150226)
- packetLen = 47;
- int offset = 8;
- if (msg.getVersion() >= 20100105)
- offset += 4;
-
- const int count = (msg.readInt16("len") - offset) / packetLen;
- const BeingId id = msg.readBeingId("id");
- const Being *const being = actorManager->findBeing(id);
- if (being == nullptr)
- return;
- int cards[maxCards];
- CREATEWIDGETV(mBuyDialog, BuyDialog, being, DEFAULT_CURRENCY);
- mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
- if (msg.getVersion() >= 20100105)
- msg.readInt32("vender id");
- for (int f = 0; f < count; f ++)
- {
- const int value = msg.readInt32("price");
- const int amount = msg.readInt16("amount");
- const int index = msg.readInt16("inv index");
- const ItemTypeT type = static_cast<ItemTypeT>(
- msg.readUInt8("item type"));
- const int itemId = msg.readInt16("item id");
- msg.readUInt8("identify");
- msg.readUInt8("attribute");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- cards[d] = msg.readUInt16("card");
- ItemOptionsList *options = nullptr;
- if (msg.getVersion() >= 20150226)
- {
- options = new ItemOptionsList;
- for (int d = 0; d < 5; d ++)
- {
- const uint16_t idx = msg.readInt16("option index");
- const uint16_t val = msg.readInt16("option value");
- msg.readUInt8("option param");
- options->add(idx, val);
- }
- }
- if (msg.getVersion() >= 20160921)
- {
- msg.readInt32("equip type?");
- msg.readInt16("look");
- }
-
- const ItemColor color = ItemColorManager::getColorFromCards(&cards[0]);
- ShopItem *const item = mBuyDialog->addItem(itemId, type,
- color, amount, value);
- if (item != nullptr)
- {
- item->setInvIndex(index);
- item->setOptions(options);
- }
- delete options;
- }
- mBuyDialog->sort();
-}
-
-void VendingRecv::processBuyAck(Net::MessageIn &msg)
-{
- msg.readInt16("inv index");
- msg.readInt16("amount");
- const int flag = msg.readUInt8("flag");
- switch (flag)
- {
- case 0:
- break;
- case 1:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_NO_MONEY);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_OVERWEIGHT);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::BUY_FAILED_TOO_MANY_ITEMS);
- break;
- case 5:
- NotifyManager::notify(NotifyTypes::BUY_TRADE_FAILED);
- break;
- case 6: // +++ probably need show exact error messages?
- case 7:
- NotifyManager::notify(NotifyTypes::BUY_FAILED);
- break;
- default:
- NotifyManager::notify(NotifyTypes::BUY_FAILED);
- UNIMPLEMENTEDPACKETFIELD(flag);
- break;
- }
-}
-
-void VendingRecv::processOpen(Net::MessageIn &msg)
-{
- int packetLen = 22;
- if (msg.getVersion() >= 20150226)
- packetLen += 25;
-
- const int count = (msg.readInt16("len") - 8) / packetLen;
- msg.readInt32("id");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("price");
- msg.readInt16("inv index");
- msg.readInt16("amount");
- msg.readUInt8("item type");
- msg.readInt16("item id");
- msg.readUInt8("identify");
- msg.readUInt8("attribute");
- msg.readUInt8("refine");
- for (int d = 0; d < maxCards; d ++)
- msg.readUInt16("card");
- if (msg.getVersion() >= 20150226)
- {
- for (int d = 0; d < 5; d ++)
- {
- msg.readInt16("option index");
- msg.readInt16("option value");
- msg.readUInt8("option param");
- }
- }
- }
- PlayerInfo::enableVending(true);
- VendingModeListener::distributeEvent(true);
-}
-
-void VendingRecv::processReport(Net::MessageIn &msg)
-{
- const int index = msg.readInt16("inv index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
- int money = 0;
- if (msg.getVersion() >= 20141016)
- {
- msg.readInt32("char id");
- msg.readInt32("time");
- money = msg.readInt32("zeny");
- }
- const Inventory *const inventory = PlayerInfo::getCartInventory();
- if (inventory == nullptr)
- return;
- const Item *const item = inventory->getItem(index);
- if (item == nullptr)
- return;
-
- const ItemInfo &info = item->getInfo();
- std::string str;
- if (money != 0)
- {
- // TRANSLATORS: vending sold item message
- str = strprintf(_("Sold item %s amount %d. You got: %s"),
- info.getLink().c_str(),
- amount,
- UnitsDb::formatCurrency(money).c_str());
- }
- else
- {
- // TRANSLATORS: vending sold item message
- str = strprintf(_("Sold item %s amount %d"),
- info.getLink().c_str(),
- amount);
- }
- NotifyManager::notify(NotifyTypes::VENDING_SOLD_ITEM, str);
-}
-
-void VendingRecv::processOpenStatus(Net::MessageIn &msg)
-{
- UNIMPLEMENTEDPACKET;
- msg.readUInt8("result");
-}
-
-} // namespace EAthena
diff --git a/src/net/eathena/vendingrecv.h b/src/net/eathena/vendingrecv.h
deleted file mode 100644
index 1424cd3be..000000000
--- a/src/net/eathena/vendingrecv.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NET_EATHENA_VENDINGRECV_H
-#define NET_EATHENA_VENDINGRECV_H
-
-class BuyDialog;
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-namespace EAthena
-{
- namespace VendingRecv
- {
- extern BuyDialog *mBuyDialog;
-
- void processOpenReq(Net::MessageIn &msg);
- void processShowBoard(Net::MessageIn &msg);
- void processHideBoard(Net::MessageIn &msg);
- void processItemsList(Net::MessageIn &msg);
- void processBuyAck(Net::MessageIn &msg);
- void processOpen(Net::MessageIn &msg);
- void processReport(Net::MessageIn &msg);
- void processOpenStatus(Net::MessageIn &msg);
- } // namespace VendingRecv
-} // namespace EAthena
-
-#endif // NET_EATHENA_VENDINGRECV_H