From 37432edac65a6b85c7a3414a421f2afd3e67a14e Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Tue, 31 Mar 2009 15:11:26 -0600 Subject: Add first draft of net handlers eAthena NPC handler has been implemented and is being used for NPC interraction. --- src/gui/buy.cpp | 9 ++--- src/gui/buysell.cpp | 14 +++----- src/gui/npc_text.cpp | 11 +++---- src/gui/npcintegerdialog.cpp | 8 ++--- src/gui/npclistdialog.cpp | 8 ++--- src/gui/npcstringdialog.cpp | 10 ++---- src/gui/sell.cpp | 9 ++--- src/net/adminhandler.h | 53 ++++++++++++++++++++++++++++++ src/net/charhandler.h | 40 +++++++++++++++++++++++ src/net/chathandler.h | 56 +++++++++++++++++++++++++++++++ src/net/ea/npchandler.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++ src/net/ea/npchandler.h | 25 +++++++++++++- src/net/generalhandler.h | 35 ++++++++++++++++++++ src/net/guildhandler.h | 57 ++++++++++++++++++++++++++++++++ src/net/inventoryhandler.h | 60 ++++++++++++++++++++++++++++++++++ src/net/loginhandler.h | 46 ++++++++++++++++++++++++++ src/net/maphandler.h | 41 +++++++++++++++++++++++ src/net/net.h | 67 +++++++++++++++++++++++++++++++++++++ src/net/npchandler.h | 60 ++++++++++++++++++++++++++++++++++ src/net/partyhandler.h | 53 ++++++++++++++++++++++++++++++ src/net/playerhandler.h | 58 ++++++++++++++++++++++++++++++++ src/net/skillhandler.h | 38 +++++++++++++++++++++ src/net/tradehandler.h | 51 +++++++++++++++++++++++++++++ src/npc.cpp | 9 +++-- 24 files changed, 846 insertions(+), 50 deletions(-) create mode 100644 src/net/adminhandler.h create mode 100644 src/net/charhandler.h create mode 100644 src/net/chathandler.h create mode 100644 src/net/generalhandler.h create mode 100644 src/net/guildhandler.h create mode 100644 src/net/inventoryhandler.h create mode 100644 src/net/loginhandler.h create mode 100644 src/net/maphandler.h create mode 100644 src/net/net.h create mode 100644 src/net/npchandler.h create mode 100644 src/net/partyhandler.h create mode 100644 src/net/playerhandler.h create mode 100644 src/net/skillhandler.h create mode 100644 src/net/tradehandler.h diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp index 6d336e4c..7cefa3e5 100644 --- a/src/gui/buy.cpp +++ b/src/gui/buy.cpp @@ -37,8 +37,7 @@ #ifdef TMWSERV_SUPPORT #include "net/tmwserv/gameserver/player.h" #else -#include "net/messageout.h" -#include "net/ea/protocol.h" +#include "net/ea/npchandler.h" #endif #include "resources/iteminfo.h" @@ -188,14 +187,12 @@ void BuyDialog::action(const gcn::ActionEvent &event) else if (event.getId() == "buy" && mAmountItems > 0 && mAmountItems <= mMaxItems) { + // Net::getNpcHandler()->buyItem(current_npc, mShopItems->at(selectedItem)->getId(), mAmountItems); #ifdef TMWSERV_SUPPORT Net::GameServer::Player::tradeWithNPC (mShopItems->at(selectedItem)->getId(), mAmountItems); #else - MessageOut outMsg(CMSG_NPC_BUY_REQUEST); - outMsg.writeInt16(8); - outMsg.writeInt16(mAmountItems); - outMsg.writeInt16(mShopItems->at(selectedItem)->getId()); + npcHandler->buyItem(current_npc, mShopItems->at(selectedItem)->getId(), mAmountItems); #endif // Update money and adjust the max number of items that can be bought diff --git a/src/gui/buysell.cpp b/src/gui/buysell.cpp index a0e2fc93..33e12e87 100644 --- a/src/gui/buysell.cpp +++ b/src/gui/buysell.cpp @@ -25,8 +25,7 @@ #include "gui/button.h" -#include "net/messageout.h" -#include "net/ea/protocol.h" +#include "net/ea/npchandler.h" #include "utils/gettext.h" @@ -77,25 +76,22 @@ void BuySellDialog::setVisible(bool visible) void BuySellDialog::action(const gcn::ActionEvent &event) { setVisible(false); - int action = 0; NPC::isTalking = false; if (event.getId() == "Buy") { - action = 0; + // Net::getNpcHandler()->buy(current_npc); + npcHandler->buy(current_npc); } else if (event.getId() == "Sell") { - action = 1; + // Net::getNpcHandler()->buy(current_npc); + npcHandler->sell(current_npc); } else if (event.getId() == "Cancel") { current_npc = 0; return; } - - MessageOut outMsg(CMSG_NPC_BUY_SELL_REQUEST); - outMsg.writeInt32(current_npc); - outMsg.writeInt8(action); } diff --git a/src/gui/npc_text.cpp b/src/gui/npc_text.cpp index 31f48486..b33b9970 100644 --- a/src/gui/npc_text.cpp +++ b/src/gui/npc_text.cpp @@ -28,11 +28,10 @@ #include "../npc.h" -#include "../net/messageout.h" #ifdef TMWSERV_SUPPORT #include "../net/tmwserv/gameserver/player.h" #else -#include "../net/ea/protocol.h" +#include "../net/ea/npchandler.h" #endif #include "../utils/gettext.h" @@ -126,19 +125,19 @@ void NpcTextDialog::action(const gcn::ActionEvent &event) void NpcTextDialog::nextDialog(int npcID) { + // Net::getNpcHandler()->nextDialog(npcID); #ifdef TMWSERV_SUPPORT Net::GameServer::Player::talkToNPC(npcID, false); #else - MessageOut outMsg(CMSG_NPC_NEXT_REQUEST); - outMsg.writeInt32(npcID); + npcHandler->nextDialog(npcID); #endif } void NpcTextDialog::closeDialog(int npcID) { + // Net::getNpcHandler()->closeDialog(npcID); #ifdef EATHENA_SUPPORT - MessageOut outMsg(CMSG_NPC_CLOSE); - outMsg.writeInt32(npcID); + npcHandler->closeDialog(npcID); #endif } diff --git a/src/gui/npcintegerdialog.cpp b/src/gui/npcintegerdialog.cpp index 4d2ae1ce..86dad4ab 100644 --- a/src/gui/npcintegerdialog.cpp +++ b/src/gui/npcintegerdialog.cpp @@ -28,9 +28,8 @@ #include "../npc.h" -#include "../net/messageout.h" #ifdef EATHENA_SUPPORT -#include "../net/ea/protocol.h" +#include "../net/ea/npchandler.h" #endif #include "../utils/gettext.h" @@ -119,10 +118,9 @@ void NpcIntegerDialog::action(const gcn::ActionEvent &event) setVisible(false); NPC::isTalking = false; + // Net::getNpcHandler()->integerInput(current_npc, mValueField->getValue()); #ifdef EATHENA_SUPPORT - MessageOut outMsg(CMSG_NPC_INT_RESPONSE); - outMsg.writeInt32(current_npc); - outMsg.writeInt32(mValueField->getValue()); + npcHandler->integerInput(current_npc, mValueField->getValue()); #endif mValueField->reset(); diff --git a/src/gui/npclistdialog.cpp b/src/gui/npclistdialog.cpp index efac8954..8b0128d5 100644 --- a/src/gui/npclistdialog.cpp +++ b/src/gui/npclistdialog.cpp @@ -31,11 +31,10 @@ #include "../npc.h" -#include "../net/messageout.h" #ifdef TMWSERV_SUPPORT #include "../net/tmwserv/gameserver/player.h" #else -#include "../net/ea/protocol.h" +#include "../net/ea/npchandler.h" #endif #include "../utils/gettext.h" @@ -133,12 +132,11 @@ void NpcListDialog::action(const gcn::ActionEvent &event) saveWindowState(); reset(); + // Net::getNpcHandler()->listInput(current_npc, choice); #ifdef TMWSERV_SUPPORT Net::GameServer::Player::selectFromNPC(current_npc, choice); #else - MessageOut outMsg(CMSG_NPC_LIST_CHOICE); - outMsg.writeInt32(current_npc); - outMsg.writeInt8(choice); + npcHandler->listInput(current_npc, choice); #endif } } diff --git a/src/gui/npcstringdialog.cpp b/src/gui/npcstringdialog.cpp index e5137d9c..8d45e332 100644 --- a/src/gui/npcstringdialog.cpp +++ b/src/gui/npcstringdialog.cpp @@ -28,9 +28,8 @@ #include "../npc.h" -#include "../net/messageout.h" #ifdef EATHENA_SUPPORT -#include "../net/ea/protocol.h" +#include "../net/ea/npchandler.h" #endif #include "../utils/gettext.h" @@ -87,12 +86,9 @@ void NpcStringDialog::action(const gcn::ActionEvent &event) std::string text = mValueField->getText(); mValueField->setText(""); + // Net::getNpcHandler()->stringInput(current_npc, text); #ifdef EATHENA_SUPPORT - MessageOut outMsg(CMSG_NPC_STR_RESPONSE); - outMsg.writeInt16(text.length() + 9); - outMsg.writeInt32(current_npc); - outMsg.writeString(text, text.length()); - outMsg.writeInt8(0); + npcHandler->stringInput(current_npc, text); #endif } diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp index 1057c2e9..3b4e9982 100644 --- a/src/gui/sell.cpp +++ b/src/gui/sell.cpp @@ -34,11 +34,10 @@ #include "shopitem.h" #include "units.h" -#include "net/messageout.h" #ifdef TMWSERV_SUPPORT #include "net/tmwserv/gameserver/player.h" #else -#include "net/ea/protocol.h" +#include "net/ea/npchandler.h" #endif #include "resources/iteminfo.h" @@ -207,14 +206,12 @@ void SellDialog::action(const gcn::ActionEvent &event) mAmountItems * mShopItems->at(selectedItem)->getPrice(); mMaxItems -= mAmountItems; while (mAmountItems > 0) { - MessageOut outMsg(CMSG_NPC_SELL_REQUEST); - outMsg.writeInt16(8); - outMsg.writeInt16(item->getCurrentInvIndex() + 2); // This order is important, item->getCurrentInvIndex() would return // the inventory index of the next Duplicate otherwise. sellCount = item->sellCurrentDuplicate(mAmountItems); mAmountItems -= sellCount; - outMsg.writeInt16(sellCount); + // Net::getNpcHandler()->sellItem(current_npc, item->getCurrentInvIndex(), sellCount); + npcHandler->sellItem(current_npc, item->getCurrentInvIndex(), sellCount); } #endif diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h new file mode 100644 index 00000000..df013eb3 --- /dev/null +++ b/src/net/adminhandler.h @@ -0,0 +1,53 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef ADMINHANDLER_H +#define ADMINHANDLER_H + +#include + +namespace Net { + class AdminHandler + { + public: + void announce(const std::string &text) {} + + void localAnnounce(const std::string &text) {} + + void hide(bool hide) {} + + void kick(int playerId) {} + + void kick(const std::string &name) {} + + void ban(int playerId) {} + + void ban(const std::string &name) {} + + void unban(int playerId) {} + + void unban(const std::string &name) {} + + // TODO + }; +} + +#endif // ADMINHANDLER_H diff --git a/src/net/charhandler.h b/src/net/charhandler.h new file mode 100644 index 00000000..f1535ac3 --- /dev/null +++ b/src/net/charhandler.h @@ -0,0 +1,40 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef CHARHANDLER_H +#define CHARHANDLER_H + +#include + +namespace Net { + class CharHandler + { + public: + void ChooseCharacter(int slot); + + void NewCharacter(const std::string &name, bool gender, + int hairstyle, int hairColor); + + void DeleteCharacter(int slot); + }; +} + +#endif // CHARHANDLER_H diff --git a/src/net/chathandler.h b/src/net/chathandler.h new file mode 100644 index 00000000..237ab929 --- /dev/null +++ b/src/net/chathandler.h @@ -0,0 +1,56 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef CHATHANDLER_H +#define CHATHANDLER_H + +#include + +namespace Net { + class ChatHandler + { + public: + void talk(const std::string &text); + + void me(const std::string &text); + + void privateMessage(const std::string &recipient, + const std::string &text); + + void channelList() {} + + void enterChannel(int channelId, const std::string &password) {} + + void quitChannel(int channelId) {} + + void sendToChannel(int channelId, const std::string &text) {} + + void userList(int channelId) {} + + void setChannelTopic(int channelId, const std::string &text) {} + + void setUserMode(int channelId, const std::string &name, int mode) {} + + void kickUser(int channelId, const std::string &name) {} + }; +} + +#endif // CHATHANDLER_H diff --git a/src/net/ea/npchandler.cpp b/src/net/ea/npchandler.cpp index 0e0bc53d..136f07fd 100644 --- a/src/net/ea/npchandler.cpp +++ b/src/net/ea/npchandler.cpp @@ -24,6 +24,7 @@ #include "net/ea/protocol.h" #include "net/messagein.h" +#include "net/messageout.h" #include "beingmanager.h" #include "localplayer.h" @@ -36,6 +37,8 @@ #include +NPCHandler *npcHandler; + NPCHandler::NPCHandler() { static const Uint16 _messages[] = { @@ -48,6 +51,7 @@ NPCHandler::NPCHandler() 0 }; handledMessages = _messages; + npcHandler = this; } void NPCHandler::handleMessage(MessageIn &msg) @@ -114,3 +118,77 @@ void NPCHandler::handleMessage(MessageIn &msg) break; } } + +void NPCHandler::talk(int npcId) +{ + MessageOut outMsg(CMSG_NPC_TALK); + outMsg.writeInt32(npcId); + outMsg.writeInt8(0); // Unused +} + +void NPCHandler::nextDialog(int npcId) +{ + MessageOut outMsg(CMSG_NPC_NEXT_REQUEST); + outMsg.writeInt32(npcId); +} + +void NPCHandler::closeDialog(int npcId) +{ + MessageOut outMsg(CMSG_NPC_CLOSE); + outMsg.writeInt32(npcId); +} + +void NPCHandler::listInput(int npcId, int value) +{ + MessageOut outMsg(CMSG_NPC_LIST_CHOICE); + outMsg.writeInt32(npcId); + outMsg.writeInt8(value); +} + +void NPCHandler::integerInput(int npcId, int value) +{ + MessageOut outMsg(CMSG_NPC_INT_RESPONSE); + outMsg.writeInt32(npcId); + outMsg.writeInt32(value); +} + +void NPCHandler::stringInput(int npcId, const std::string &value) +{ + MessageOut outMsg(CMSG_NPC_STR_RESPONSE); + outMsg.writeInt16(value.length() + 9); + outMsg.writeInt32(npcId); + outMsg.writeString(value, value.length()); + outMsg.writeInt8(0); // Prevent problems with string reading +} + +void NPCHandler::buy(int beingId) +{ + + MessageOut outMsg(CMSG_NPC_BUY_SELL_REQUEST); + outMsg.writeInt32(beingId); + outMsg.writeInt8(0); // Buy +} + +void NPCHandler::sell(int beingId) +{ + + MessageOut outMsg(CMSG_NPC_BUY_SELL_REQUEST); + outMsg.writeInt32(beingId); + outMsg.writeInt8(1); // Sell +} + +void NPCHandler::buyItem(int beingId, int itemId, int amount) +{ + MessageOut outMsg(CMSG_NPC_BUY_REQUEST); + outMsg.writeInt16(8); // One item (length of packet) + outMsg.writeInt16(amount); + outMsg.writeInt16(itemId); +} + +void NPCHandler::sellItem(int beingId, int itemId, int amount) +{ + MessageOut outMsg(CMSG_NPC_SELL_REQUEST); + outMsg.writeInt16(8); // One item (length of packet) + outMsg.writeInt16(itemId + 2); + outMsg.writeInt16(amount); +} diff --git a/src/net/ea/npchandler.h b/src/net/ea/npchandler.h index 8c252175..71e15e02 100644 --- a/src/net/ea/npchandler.h +++ b/src/net/ea/npchandler.h @@ -23,13 +23,36 @@ #define NET_EA_NPCHANDLER_H #include "net/messagehandler.h" +#include "net/net.h" -class NPCHandler : public MessageHandler +class NPCHandler : public MessageHandler, public Net::NpcHandler { public: NPCHandler(); void handleMessage(MessageIn &msg); + + void talk(int npcId); + + void nextDialog(int npcId); + + void closeDialog(int npcId); + + void listInput(int npcId, int value); + + void integerInput(int npcId, int value); + + void stringInput(int npcId, const std::string &value); + + void buy(int beingId); + + void sell(int beingId); + + void buyItem(int beingId, int itemId, int amount); + + void sellItem(int beingId, int itemId, int amount); }; +extern NPCHandler *npcHandler; + #endif // NET_EA_NPCHANDLER_H diff --git a/src/net/generalhandler.h b/src/net/generalhandler.h new file mode 100644 index 00000000..dd823240 --- /dev/null +++ b/src/net/generalhandler.h @@ -0,0 +1,35 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef GENERALHANDLER_H +#define GENERALHANDLER_H + +namespace Net { + class GeneralHandler + { + public: + virtual void load(); + virtual void unload(); + virtual void guiWindowsLoaded() {} + }; +} + +#endif // GENERALHANDLER_H diff --git a/src/net/guildhandler.h b/src/net/guildhandler.h new file mode 100644 index 00000000..2385819a --- /dev/null +++ b/src/net/guildhandler.h @@ -0,0 +1,57 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef GUILDHANDLER_H +#define GUILDHANDLER_H + +#include + +namespace Net { + class GuildHandler + { + public: + void create(const std::string &name) {} + + void join(int guildId) {} + + void invite(int guidId, int playerId) {} + + void inviteResponse(int guidId, bool response) {} + + void leave(int guidId) {} + + void kick(int guidId, int playerId) {} + + void chat(int guidId, const std::string &text) {} + + void memberList(int guidId) {} + + void changeMemberPostion(int guildId, int playerId, int level) {} + + void requestAlliance(int guildId, int otherGuildId) {} + + void requestAllianceResponse(int guildId, int otherGuildId, bool response) {} + + void endAlliance(int guildId, int otherGuildId) {} + }; +} + +#endif // GUILDHANDLER_H diff --git a/src/net/inventoryhandler.h b/src/net/inventoryhandler.h new file mode 100644 index 00000000..22427099 --- /dev/null +++ b/src/net/inventoryhandler.h @@ -0,0 +1,60 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef INVENTORYHANDLER_H +#define INVENTORYHANDLER_H + +#include "item.h" + +#include + +namespace Net { + class InvyHandler + { + public: + void equipItem(Item *item); + + void unequipItem(Item *item); + + void useItem(int slot, Item *item); + + void dropItem(int slot, int amount); + + void splitItem(int slot, int amount) {} + + void openStorage() {} + + void closeStorage() {} + + //void changeCart() {} + + enum StorageType { + INVENTORY, + STORAGE, + CART + }; + + void moveItem(StorageType source, int slot, int amount, + StorageType destination) {} + }; +} + +#endif // INVENTORYHANDLER_H diff --git a/src/net/loginhandler.h b/src/net/loginhandler.h new file mode 100644 index 00000000..ca72248a --- /dev/null +++ b/src/net/loginhandler.h @@ -0,0 +1,46 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef LOGINHANDLER_H +#define LOGINHANDLER_H + +#include + +namespace Net { + class LoginHandler + { + public: + virtual void loginAccount(const std::string &username, + const std::string &password); + virtual void changeEmail(const std::string &email) {} + virtual void changePassword(const std::string &username, + const std::string &oldPassword, + const std::string &newPassword) {} + virtual void chooseServer(int server) {} + virtual void registerAccount(const std::string &username, + const std::string &password, + const std::string &email = ""); + virtual void unregisterAccount(const std::string &username, + const std::string &password); + }; +} + +#endif // LOGINHANDLER_H diff --git a/src/net/maphandler.h b/src/net/maphandler.h new file mode 100644 index 00000000..e5157fc6 --- /dev/null +++ b/src/net/maphandler.h @@ -0,0 +1,41 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef MAPHANDLER_H +#define MAPHANDLER_H + +#include + +namespace Net { + class MapHandler + { + public: + void connect() {} + + void mapLoaded(const std::string &mapName) {} + + void who() {} + + void quit() {} + }; +} + +#endif // MAPHANDLER_H diff --git a/src/net/net.h b/src/net/net.h new file mode 100644 index 00000000..0d2beffc --- /dev/null +++ b/src/net/net.h @@ -0,0 +1,67 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_H +#define NET_H + +#include "net/adminhandler.h" +#include "net/charhandler.h" +#include "net/chathandler.h" +#include "net/generalhandler.h" +#include "net/guildhandler.h" +#include "net/inventoryhandler.h" +#include "net/loginhandler.h" +#include "net/maphandler.h" +#include "net/npchandler.h" +#include "net/partyhandler.h" +#include "net/playerhandler.h" +#include "net/skillhandler.h" +#include "net/tradehandler.h" + +namespace Net { + Net::AdminHandler *getAdminHandler(); + + Net::CharHandler *getCharHandler(); + + Net::ChatHandler *getChatHandler(); + + Net::GeneralHandler *getGeneralHandler(); + + Net::GuildHandler *getGuildHandler(); + + Net::InvyHandler *getInvyHandler(); + + Net::LoginHandler *getLoginHandler(); + + Net::MapHandler *getMapHandler(); + + Net::NpcHandler *getNpcHandler(); + + Net::PartyHandler *getPartyHandler(); + + Net::PlayerHandler *getPlayerHandler(); + + Net::SkillHandler *getSkillHandler(); + + Net::TradeHandler *getTradeHandler(); +} + +#endif // NET_H diff --git a/src/net/npchandler.h b/src/net/npchandler.h new file mode 100644 index 00000000..9ff02f28 --- /dev/null +++ b/src/net/npchandler.h @@ -0,0 +1,60 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NPCHANDLER_H +#define NPCHANDLER_H + +#include + +namespace Net { + class NpcHandler + { + public: + void talk(int npcId); + + void nextDialog(int npcId); + + void closeDialog(int npcId); + + void listInput(int npcId, int value) {} + + void integerInput(int npcId, int value){} + + void stringInput(int npcId, const std::string &value) {} + + void sendLetter(int npcId, const std::string &recipient, + const std::string &text) {} + + void startShoping(int beingId) {} + + void buy(int beingId) {} + + void sell(int beingId) {} + + void buyItem(int beingId, int itemId, int ammount) {} + + void sellItem(int beingId, int itemId, int ammount) {} + + void endShoping(int beingId) {} + }; +} + +#endif // NPCHANDLER_H diff --git a/src/net/partyhandler.h b/src/net/partyhandler.h new file mode 100644 index 00000000..6c400bf1 --- /dev/null +++ b/src/net/partyhandler.h @@ -0,0 +1,53 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PARTYHANDLER_H +#define PARTYHANDLER_H + +#include + +namespace Net { + class PartyHandler + { + public: + void create(const std::string &name="") {} + + void join(int partyId) {} + + void invite(int playerId) {} + + void inviteResponse(bool accept) {} + + void leave() {} + + void kick(int playerId) {} + + void chat(const std::string &text) {} + + void partyMembers() {} + + // void options() {} + + // void message() {} + }; +} + +#endif // PARTYHANDLER_H diff --git a/src/net/playerhandler.h b/src/net/playerhandler.h new file mode 100644 index 00000000..df5e341e --- /dev/null +++ b/src/net/playerhandler.h @@ -0,0 +1,58 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PLAYERHANDLER_H +#define PLAYERHANDLER_H + +#include "being.h" +#include "floor_item.h" + +#include + +namespace Net { + class PlayerHandler + { + public: + void attack(Being *being); + + void emote(int emoteId) {} + + void increaseStat(int statId) {} + + void decreaseStat(int statId) {} + + void pickUp(FloorItem *floorItem) {} + + void setDirection(int direction) {} + + void setDestination(int x, int y, int direction = -1); + + void sit() {} + + void respawn() {} + + void ingorePlayer(const std::string &player, bool ignore) {} + + void ingoreAll(bool ignore) {} + }; +} + +#endif // PLAYERHANDLER_H diff --git a/src/net/skillhandler.h b/src/net/skillhandler.h new file mode 100644 index 00000000..1ab16f05 --- /dev/null +++ b/src/net/skillhandler.h @@ -0,0 +1,38 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef SKILLHANDLER_H +#define SKILLHANDLER_H + +#include + +namespace Net { + class SkillHandler + { + public: + void up(int skillId) {} + void use(int skillId, int level, int beingId) {} + void use(int skillId, int level, int x, int y) {} + void use(int skillId, const std::string &map) {} + }; +} + +#endif // SKILLHANDLER_H diff --git a/src/net/tradehandler.h b/src/net/tradehandler.h new file mode 100644 index 00000000..84de3196 --- /dev/null +++ b/src/net/tradehandler.h @@ -0,0 +1,51 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef TRADEHANDLER_H +#define TRADEHANDLER_H + +#include "being.h" + +#include + +namespace Net { + class TradeHandler + { + public: + void request(Being *being) {} + + void respond(bool accepet) {} + + void addItem(int slotNum, int amount) {} + + void removeItem(int slotNum, int amount) {} + + void setMoney(int amount) {} + + void confirm() {} + + void finish() {} + + void cancel() {} + }; +} + +#endif // TRADEHANDLER_H diff --git a/src/npc.cpp b/src/npc.cpp index 359546e2..b3f14e8c 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -28,11 +28,11 @@ #include "gui/npc_text.h" #include "gui/palette.h" +#include "net/net.h" #ifdef TMWSERV_SUPPORT #include "net/tmwserv/gameserver/player.h" #else -#include "net/messageout.h" -#include "net/ea/protocol.h" +#include "net/ea/npchandler.h" #endif #include "resources/npcdb.h" @@ -117,12 +117,11 @@ void NPC::talk() isTalking = true; + // Net::getNpcHandler()->talk(mId); #ifdef TMWSERV_SUPPORT Net::GameServer::Player::talkToNPC(mId, true); #else - MessageOut outMsg(CMSG_NPC_TALK); - outMsg.writeInt32(mId); - outMsg.writeInt8(0); + npcHandler->talk(mId); #endif } -- cgit v1.2.3-70-g09d2