diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-03-28 11:22:46 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-03-28 11:22:46 -0600 |
commit | df095c66fdf7af74849454dbf8c4c2284616ecd7 (patch) | |
tree | d078ea9ecffd75ab1b526993c5e18846bf501867 /src/net | |
parent | 42a095de15649f0f00ef6c681268d6623205900c (diff) | |
download | mana-client-df095c66fdf7af74849454dbf8c4c2284616ecd7.tar.gz mana-client-df095c66fdf7af74849454dbf8c4c2284616ecd7.tar.bz2 mana-client-df095c66fdf7af74849454dbf8c4c2284616ecd7.tar.xz mana-client-df095c66fdf7af74849454dbf8c4c2284616ecd7.zip |
Remove #ifdefs related to Being creation
Also move the Monster type offset handling into the eAthena netcode.
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/ea/beinghandler.cpp | 43 | ||||
-rw-r--r-- | src/net/tmwserv/beinghandler.cpp | 5 |
2 files changed, 41 insertions, 7 deletions
diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index 237c9f1f..0ad15d7d 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -24,6 +24,7 @@ #include "net/ea/protocol.h" #include "net/messagein.h" +#include "net/messageout.h" #include "being.h" #include "beingmanager.h" @@ -37,7 +38,6 @@ #include "gui/npc_text.h" #include <iostream> -#include <SDL_types.h> extern NpcTextDialog *npcTextDialog; @@ -69,10 +69,34 @@ BeingHandler::BeingHandler(bool enableSync): handledMessages = _messages; } +Being *createBeing(int id, short job) +{ + Being::Type type = Being::UNKNOWN; + if (job <= 25 || (job >= 4001 && job <= 4049)) + type = Being::PLAYER; + else if (job >= 46 && job <= 1000) + type = Being::NPC; + else if (job > 1000 && job <= 2000) + { + type = Being::MONSTER; + job -= 1002; + } + + Being *being = beingManager->createBeing(id, type, job); + + if (type == Being::PLAYER || type == Being::NPC) + { + MessageOut outMsg(0x0094); + outMsg.writeInt32(id);//readLong(2)); + } + + return being; +} + void BeingHandler::handleMessage(MessageIn &msg) { int id; - Uint16 job, speed; + short job, speed; Uint16 headTop, headMid, headBottom; Uint16 shoes, gloves; Uint16 weapon, shield; @@ -108,9 +132,14 @@ void BeingHandler::handleMessage(MessageIn &msg) break; } - dstBeing = beingManager->createBeing(id, job); + dstBeing = createBeing(id, job); } - else if (msg.getId() == 0x0078) + else if (dstBeing->getType() == Being::MONSTER) + { + job -= 1002; + } + + if (msg.getId() == 0x0078) { dstBeing->clearPath(); dstBeing->mFrame = 0; @@ -399,7 +428,11 @@ void BeingHandler::handleMessage(MessageIn &msg) if (!dstBeing) { - dstBeing = beingManager->createBeing(id, job); + dstBeing = createBeing(id, job); + } + else if (dstBeing->getType() == Being::MONSTER) + { + job -= 1002; } dstBeing->setWalkSpeed(speed); diff --git a/src/net/tmwserv/beinghandler.cpp b/src/net/tmwserv/beinghandler.cpp index 1a1744cc..08847d7d 100644 --- a/src/net/tmwserv/beinghandler.cpp +++ b/src/net/tmwserv/beinghandler.cpp @@ -139,7 +139,7 @@ void BeingHandler::handleBeingEnterMessage(MessageIn &msg) } else { - being = beingManager->createBeing(id, type, 0); + being = beingManager->createBeing(id, Being::PLAYER, 0); being->setName(name); } Player *p = static_cast< Player * >(being); @@ -154,7 +154,8 @@ void BeingHandler::handleBeingEnterMessage(MessageIn &msg) case OBJECT_NPC: { int subtype = msg.readInt16(); - being = beingManager->createBeing(id, type, subtype); + being = beingManager->createBeing(id, type == OBJECT_MONSTER ? + Being::MONSTER : Being::NPC, subtype); std::string name = msg.readString(); if (name.length() > 0) being->setName(name); } break; |