summaryrefslogtreecommitdiff
path: root/src/net/eathena/mercenaryhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/eathena/mercenaryhandler.cpp')
-rw-r--r--src/net/eathena/mercenaryhandler.cpp109
1 files changed, 4 insertions, 105 deletions
diff --git a/src/net/eathena/mercenaryhandler.cpp b/src/net/eathena/mercenaryhandler.cpp
index 3d5f0a72c..c4c6741a7 100644
--- a/src/net/eathena/mercenaryhandler.cpp
+++ b/src/net/eathena/mercenaryhandler.cpp
@@ -33,6 +33,7 @@
#include "net/serverfeatures.h"
+#include "net/eathena/mercenaryrecv.h"
#include "net/eathena/messageout.h"
#include "net/eathena/protocol.h"
@@ -62,15 +63,15 @@ void MercenaryHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_MERCENARY_UPDATE:
- processMercenaryUpdate(msg);
+ MercenaryRecv::processMercenaryUpdate(msg);
break;
case SMSG_MERCENARY_INFO:
- processMercenaryInfo(msg);
+ MercenaryRecv::processMercenaryInfo(msg);
break;
case SMSG_MERCENARY_SKILLS:
- processMercenarySkills(msg);
+ MercenaryRecv::processMercenarySkills(msg);
break;
default:
@@ -78,108 +79,6 @@ void MercenaryHandler::handleMessage(Net::MessageIn &msg)
}
}
-void MercenaryHandler::processMercenaryUpdate(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- // +++ need create if need mercenary being and update stats
- msg.readInt16("type");
- msg.readInt32("value");
-}
-
-void MercenaryHandler::processMercenaryInfo(Net::MessageIn &msg)
-{
- // +++ need create if need mercenary being and update stats
- Being *const dstBeing = actorManager->findBeing(
- msg.readBeingId("being id"));
- msg.readInt16("atk");
- msg.readInt16("matk");
- msg.readInt16("hit");
- msg.readInt16("crit/10");
- msg.readInt16("def");
- msg.readInt16("mdef");
- msg.readInt16("flee");
- msg.readInt16("attack speed");
- const std::string name = msg.readString(24, "name");
- const int level = msg.readInt16("level");
- msg.readInt32("hp");
- msg.readInt32("max hp");
- msg.readInt32("sp");
- msg.readInt32("max sp");
- msg.readInt32("expire time");
- msg.readInt16("faith");
- msg.readInt32("calls");
- msg.readInt32("kills");
- const int range = msg.readInt16("attack range");
- if (dstBeing && localPlayer)
- {
- 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 MercenaryHandler::processMercenarySkills(Net::MessageIn &msg)
-{
- if (skillDialog)
- 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)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Mercenary,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog)
- skillDialog->updateModels();
-}
-
-void MercenaryHandler::handleMercenaryMessage(const int cmd)
-{
- PlayerInfo::setMercenary(nullptr);
- if (skillDialog)
- {
- 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;
- }
-}
-
void MercenaryHandler::fire()
{
createOutPacket(CMSG_MERCENARY_ACTION);