From 9234bf25b145995d5395f98a1f5dd030783d25d6 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 24 Jul 2012 21:37:03 +0300 Subject: Add quests netcode and quests window. --- src/net/tmwa/generalhandler.cpp | 5 ++- src/net/tmwa/generalhandler.h | 1 + src/net/tmwa/network.cpp | 2 +- src/net/tmwa/network.h | 2 +- src/net/tmwa/protocol.h | 2 + src/net/tmwa/questhandler.cpp | 97 +++++++++++++++++++++++++++++++++++++++++ src/net/tmwa/questhandler.h | 50 +++++++++++++++++++++ 7 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 src/net/tmwa/questhandler.cpp create mode 100644 src/net/tmwa/questhandler.h (limited to 'src/net') diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp index 0006d724d..c5ca7b529 100644 --- a/src/net/tmwa/generalhandler.cpp +++ b/src/net/tmwa/generalhandler.cpp @@ -59,6 +59,7 @@ #include "net/tmwa/protocol.h" #include "net/tmwa/tradehandler.h" #include "net/tmwa/specialhandler.h" +#include "net/tmwa/questhandler.h" #include "net/tmwa/gui/guildtab.h" #include "net/tmwa/gui/partytab.h" @@ -94,7 +95,8 @@ GeneralHandler::GeneralHandler(): mPartyHandler(new PartyHandler), mPlayerHandler(new PlayerHandler), mSpecialHandler(new SpecialHandler), - mTradeHandler(new TradeHandler) + mTradeHandler(new TradeHandler), + mQuestHandler(new QuestHandler) { static const uint16_t _messages[] = { @@ -192,6 +194,7 @@ void GeneralHandler::load() mNetwork->registerHandler(mSpecialHandler.get()); mNetwork->registerHandler(mTradeHandler.get()); mNetwork->registerHandler(mPartyHandler.get()); + mNetwork->registerHandler(mQuestHandler.get()); } void GeneralHandler::reload() diff --git a/src/net/tmwa/generalhandler.h b/src/net/tmwa/generalhandler.h index f938ddd1d..88a0331d7 100644 --- a/src/net/tmwa/generalhandler.h +++ b/src/net/tmwa/generalhandler.h @@ -73,6 +73,7 @@ class GeneralHandler : public MessageHandler, public Net::GeneralHandler, MessageHandlerPtr mPlayerHandler; MessageHandlerPtr mSpecialHandler; MessageHandlerPtr mTradeHandler; + MessageHandlerPtr mQuestHandler; }; } // namespace TmwAthena diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp index c1020ebeb..c6e31af3c 100644 --- a/src/net/tmwa/network.cpp +++ b/src/net/tmwa/network.cpp @@ -86,7 +86,7 @@ short packet_lengths[] = -1, -1, 20, 10, 32, 9, 34, 14, 2, 6, 48, 56, -1, 4, 5, 10, // #0x0200 26, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 10, 0, 0, 0, - 2, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, -1, 16, 0, 8, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; diff --git a/src/net/tmwa/network.h b/src/net/tmwa/network.h index 03f24839b..2c9e0de0d 100644 --- a/src/net/tmwa/network.h +++ b/src/net/tmwa/network.h @@ -39,7 +39,7 @@ * Protocol version, reported to the eAthena char and mapserver who can adjust * the protocol accordingly. */ -#define CLIENT_PROTOCOL_VERSION 6 +#define CLIENT_PROTOCOL_VERSION 7 #define CLIENT_TMW_PROTOCOL_VERSION 1 namespace TmwAthena diff --git a/src/net/tmwa/protocol.h b/src/net/tmwa/protocol.h index 130268b82..72952cdd0 100644 --- a/src/net/tmwa/protocol.h +++ b/src/net/tmwa/protocol.h @@ -337,6 +337,8 @@ enum #define SMSG_ONLINE_LIST 0x0211 #define SMSG_NPC_COMMAND 0x0212 #define CMSG_SET_STATUS 0x0213 +#define CMSG_QUEST_SET_VAR 0x0214 +#define CMSG_QUEST_PLAYER_VARS 0x0215 #define CMSG_SEND_CLIENT_INFO 0x7533 #define SMSG_UPDATE_HOST2 0x7534 diff --git a/src/net/tmwa/questhandler.cpp b/src/net/tmwa/questhandler.cpp new file mode 100644 index 000000000..b3cec9fe2 --- /dev/null +++ b/src/net/tmwa/questhandler.cpp @@ -0,0 +1,97 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012 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 . + */ + +#include "net/tmwa/questhandler.h" + +#include "localplayer.h" + +#include "gui/questswindow.h" + +#include "net/messagein.h" +#include "net/net.h" + +#include "net/tmwa/protocol.h" + +#include "net/ea/eaprotocol.h" + +#include "utils/langs.h" + +#include "debug.h" + +//extern Net::QuestHandler *questHandler; + +namespace TmwAthena +{ + +QuestHandler::QuestHandler() +{ + static const uint16_t _messages[] = + { + CMSG_QUEST_SET_VAR, + CMSG_QUEST_PLAYER_VARS, + 0 + }; + handledMessages = _messages; +// questHandler = this; +} + +void QuestHandler::handleMessage(Net::MessageIn &msg) +{ + switch (msg.getId()) + { + case CMSG_QUEST_SET_VAR: + processSetQuestVar(msg); + break; + + case CMSG_QUEST_PLAYER_VARS: + processPlayerQuests(msg); + break; + + default: + break; + } +} + +void QuestHandler::processSetQuestVar(Net::MessageIn &msg A_UNUSED) +{ + int var = msg.readInt16(); // variable + int val = msg.readInt32(); // value + if (questsWindow) + { + questsWindow->updateQuest(var, val); + questsWindow->rebuild(); + } +} + +void QuestHandler::processPlayerQuests(Net::MessageIn &msg A_UNUSED) +{ + int count = (msg.readInt16() - 4) / 6; + for (int f = 0; f < count; f ++) + { + int var = msg.readInt16(); // variable + int val = msg.readInt32(); // value + if (questsWindow) + questsWindow->updateQuest(var, val); + } + if (questsWindow) + questsWindow->rebuild(); +} + +} // namespace TmwAthena diff --git a/src/net/tmwa/questhandler.h b/src/net/tmwa/questhandler.h new file mode 100644 index 000000000..aa2534ddb --- /dev/null +++ b/src/net/tmwa/questhandler.h @@ -0,0 +1,50 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012 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 . + */ + +#ifndef NET_TA_QUESTHANDLER_H +#define NET_TA_QUESTHANDLER_H + +#include "net/net.h" +#include "net/npchandler.h" + +#include "net/ea/npchandler.h" + +#include "net/tmwa/messagehandler.h" + +#include + +namespace TmwAthena +{ + +class QuestHandler : public MessageHandler +{ + public: + QuestHandler(); + + void handleMessage(Net::MessageIn &msg); + + void processSetQuestVar(Net::MessageIn &msg); + + void processPlayerQuests(Net::MessageIn &msg); +}; + +} // namespace TmwAthena + +#endif // NET_TA_QUESTHANDLER_H -- cgit v1.2.3-60-g2f50