From ba07ca55476c488504a8d8bf9318f15aab687f12 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 21 Sep 2014 14:44:03 +0300 Subject: Fix mercenary removing. --- src/actormanager.cpp | 14 -------------- src/net/eathena/chathandler.cpp | 7 ++++++- src/net/eathena/mercenaryhandler.cpp | 32 ++++++++++++++++++++++++++++++++ src/net/eathena/mercenaryhandler.h | 2 ++ src/net/mercenaryhandler.h | 2 ++ src/net/tmwa/mercenaryhandler.cpp | 4 ++++ src/net/tmwa/mercenaryhandler.h | 2 ++ src/resources/notifications.h | 20 ++++++++++++++++++++ src/resources/notifytypes.h | 5 +++++ 9 files changed, 73 insertions(+), 15 deletions(-) diff --git a/src/actormanager.cpp b/src/actormanager.cpp index 5bb9c64aa..0f30fa215 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -813,20 +813,6 @@ void ActorManager::logic() if (beingEquipmentWindow) beingEquipmentWindow->resetBeing(being); } -/* - else if (localPlayer && type == ActorType::Mercenary) - { - if (actor->getId() == localPlayer->getMercenary()) - { - localPlayer->setMercenary(0); - if (skillDialog) - { - skillDialog->hideSkills(SkillOwner::Mercenary); - skillDialog->updateModels(); - } - } - } -*/ if (localPlayer) { if (localPlayer->getTarget() == actor) diff --git a/src/net/eathena/chathandler.cpp b/src/net/eathena/chathandler.cpp index 028cc68a8..758bd37d4 100644 --- a/src/net/eathena/chathandler.cpp +++ b/src/net/eathena/chathandler.cpp @@ -32,6 +32,8 @@ #include "gui/windows/chatwindow.h" +#include "net/mercenaryhandler.h" + #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" @@ -332,7 +334,10 @@ void ChatHandler::processFormatMessage(Net::MessageIn &msg) int msgId = msg.readInt16("msg id"); // +++ here need load message from configuration file const std::string chatMsg = strprintf("Message #%d", msgId); - processChatContinue(chatMsg); + if (msgId >= 1266 && msgId <= 1269) + mercenaryHandler->handleMercenaryMessage(msgId - 1266); + else + processChatContinue(chatMsg); } void ChatHandler::processFormatMessageNumber(Net::MessageIn &msg) diff --git a/src/net/eathena/mercenaryhandler.cpp b/src/net/eathena/mercenaryhandler.cpp index a614cf429..0726f5281 100644 --- a/src/net/eathena/mercenaryhandler.cpp +++ b/src/net/eathena/mercenaryhandler.cpp @@ -22,6 +22,7 @@ #include "actormanager.h" #include "logger.h" +#include "notifymanager.h" #include "being/being.h" #include "being/localplayer.h" @@ -35,6 +36,8 @@ #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" +#include "resources/notifytypes.h" + #include "debug.h" extern Net::MercenaryHandler *mercenaryHandler; @@ -152,4 +155,33 @@ void MercenaryHandler::processMercenarySkills(Net::MessageIn &msg) skillDialog->update(); } +void MercenaryHandler::handleMercenaryMessage(const int cmd) +{ + PlayerInfo::setMercenary(nullptr); + if (skillDialog) + { + skillDialog->hideSkills(SkillOwner::Mercenary); + skillDialog->update(); + } + + 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/mercenaryhandler.h b/src/net/eathena/mercenaryhandler.h index 8a1ea03d9..39af9605b 100644 --- a/src/net/eathena/mercenaryhandler.h +++ b/src/net/eathena/mercenaryhandler.h @@ -39,6 +39,8 @@ class MercenaryHandler final : public MessageHandler, void handleMessage(Net::MessageIn &msg) override final; + void handleMercenaryMessage(const int cmd) override final; + protected: void processMercenaryUpdate(Net::MessageIn &msg); diff --git a/src/net/mercenaryhandler.h b/src/net/mercenaryhandler.h index 55ad14818..69ad75cb6 100644 --- a/src/net/mercenaryhandler.h +++ b/src/net/mercenaryhandler.h @@ -33,6 +33,8 @@ class MercenaryHandler notfinal public: virtual ~MercenaryHandler() { } + + virtual void handleMercenaryMessage(const int cmd) = 0; }; } // namespace Net diff --git a/src/net/tmwa/mercenaryhandler.cpp b/src/net/tmwa/mercenaryhandler.cpp index f6b722326..b0afca919 100644 --- a/src/net/tmwa/mercenaryhandler.cpp +++ b/src/net/tmwa/mercenaryhandler.cpp @@ -42,4 +42,8 @@ void MercenaryHandler::handleMessage(Net::MessageIn &msg A_UNUSED) { } +void MercenaryHandler::handleMercenaryMessage(const int cmd A_UNUSED) +{ +} + } // namespace TmwAthena diff --git a/src/net/tmwa/mercenaryhandler.h b/src/net/tmwa/mercenaryhandler.h index e44d98ad1..0e795d347 100644 --- a/src/net/tmwa/mercenaryhandler.h +++ b/src/net/tmwa/mercenaryhandler.h @@ -37,6 +37,8 @@ class MercenaryHandler final : public MessageHandler, A_DELETE_COPY(MercenaryHandler) void handleMessage(Net::MessageIn &msg) override final; + + void handleMercenaryMessage(const int cmd) override final; }; } // namespace TmwAthena diff --git a/src/resources/notifications.h b/src/resources/notifications.h index 952bc0a9e..b4439ada8 100644 --- a/src/resources/notifications.h +++ b/src/resources/notifications.h @@ -334,6 +334,26 @@ namespace NotifyManager // TRANSLATORS: notification message N_("Pet catch unkown error: %d."), NotifyFlags::INT}, + {"mercenary expired", + // TRANSLATORS: notification message + N_("Your mercenary duty hour is over."), + NotifyFlags::EMPTY}, + {"mercenary killed", + // TRANSLATORS: notification message + N_("Your mercenary was killed."), + NotifyFlags::EMPTY}, + {"mercenary fired", + // TRANSLATORS: notification message + N_("Your mercenary was fired."), + NotifyFlags::EMPTY}, + {"mercenary run", + // TRANSLATORS: notification message + N_("Your mercenary run away."), + NotifyFlags::EMPTY}, + {"mercenary unknown", + // TRANSLATORS: notification message + N_("Mercenary unknown state."), + NotifyFlags::EMPTY} }; } // namespace NotifyManager #endif // RESOURCES_NOTIFICATIONS_H diff --git a/src/resources/notifytypes.h b/src/resources/notifytypes.h index 36b1f3047..14ff47265 100644 --- a/src/resources/notifytypes.h +++ b/src/resources/notifytypes.h @@ -103,6 +103,11 @@ namespace NotifyTypes PET_CATCH_FAILED, PET_CATCH_SUCCESS, PET_CATCH_UNKNOWN, + MERCENARY_EXPIRED, + MERCENARY_KILLED, + MERCENARY_FIRED, + MERCENARY_RUN, + MERCENARY_UNKNOWN, TYPE_END }; -- cgit v1.2.3-60-g2f50