summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorIra Rice <irarice@gmail.com>2009-02-25 19:04:39 -0700
committerIra Rice <irarice@gmail.com>2009-02-25 19:04:39 -0700
commit0dde31c3db09113639fa443142995b6efcff6646 (patch)
tree9e91488f812067dae7a91f84393a930ffe31b626 /src/net
parent6cd131052c78af04e794409189a0d7e16dcc0c51 (diff)
downloadmana-client-0dde31c3db09113639fa443142995b6efcff6646.tar.gz
mana-client-0dde31c3db09113639fa443142995b6efcff6646.tar.bz2
mana-client-0dde31c3db09113639fa443142995b6efcff6646.tar.xz
mana-client-0dde31c3db09113639fa443142995b6efcff6646.zip
Fix NPC handling to not need a handle on the NPC
Loosely based on TMW commit f04a8713ffc83db8b3dc4a472b28aad25a2b2bd1 Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/beinghandler.cpp13
-rw-r--r--src/net/buysellhandler.cpp25
-rw-r--r--src/net/npchandler.cpp22
-rw-r--r--src/net/playerhandler.cpp2
4 files changed, 33 insertions, 29 deletions
diff --git a/src/net/beinghandler.cpp b/src/net/beinghandler.cpp
index c11d22e7..bae14a05 100644
--- a/src/net/beinghandler.cpp
+++ b/src/net/beinghandler.cpp
@@ -196,7 +196,11 @@ void BeingHandler::handleMessage(MessageIn *msg)
case SMSG_BEING_REMOVE:
// A being should be removed or has died
- dstBeing = beingManager->findBeing(msg->readInt32());
+ id = msg->readInt32();
+ dstBeing = beingManager->findBeing(id);
+
+ if (id == current_npc)
+ current_npc = 0;
if (!dstBeing)
break;
@@ -205,12 +209,7 @@ void BeingHandler::handleMessage(MessageIn *msg)
if (dstBeing == player_node->getTarget())
player_node->stopAttack();
- if (dstBeing == current_npc)
- current_npc = NULL;
-
- if (msg->readInt8() == 1)
- dstBeing->setAction(Being::DEAD);
- else
+ if (!(msg->readInt8() == 1))
beingManager->destroyBeing(dstBeing);
break;
diff --git a/src/net/buysellhandler.cpp b/src/net/buysellhandler.cpp
index 245b8a50..e9255540 100644
--- a/src/net/buysellhandler.cpp
+++ b/src/net/buysellhandler.cpp
@@ -66,7 +66,7 @@ void BuySellHandler::handleMessage(MessageIn *msg)
sellDialog->setVisible(false);
sellDialog->reset();
buySellDialog->setVisible(true);
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(msg->readInt32()));
+ current_npc = msg->readInt32();
break;
case SMSG_NPC_BUY:
@@ -89,7 +89,8 @@ void BuySellHandler::handleMessage(MessageIn *msg)
case SMSG_NPC_SELL:
msg->readInt16(); // length
n_items = (msg->getLength() - 4) / 10;
- if (n_items > 0) {
+ if (n_items > 0)
+ {
sellDialog->setMoney(player_node->mGp);
sellDialog->reset();
sellDialog->setVisible(true);
@@ -101,21 +102,25 @@ void BuySellHandler::handleMessage(MessageIn *msg)
msg->readInt32(); // OCvalue
Item *item = player_node->getInventory()->getItem(index);
- if (item && !(item->isEquipped())) {
+
+ if (item && !(item->isEquipped()))
sellDialog->addItem(item, value);
- }
}
}
- else {
+ else
+ {
chatWindow->chatLog(_("Nothing to sell"), BY_SERVER);
current_npc = 0;
}
break;
case SMSG_NPC_BUY_RESPONSE:
- if (msg->readInt8() == 0) {
+ if (msg->readInt8() == 0)
+ {
chatWindow->chatLog(_("Thanks for buying"), BY_SERVER);
- } else {
+ }
+ else
+ {
// Reset player money since buy dialog already assumed purchase
// would go fine
buyDialog->setMoney(player_node->mGp);
@@ -124,11 +129,11 @@ void BuySellHandler::handleMessage(MessageIn *msg)
break;
case SMSG_NPC_SELL_RESPONSE:
- if (msg->readInt8() == 0) {
+ if (msg->readInt8() == 0)
chatWindow->chatLog(_("Thanks for selling"), BY_SERVER);
- } else {
+ else
chatWindow->chatLog(_("Unable to sell"), BY_SERVER);
- }
+
break;
}
}
diff --git a/src/net/npchandler.cpp b/src/net/npchandler.cpp
index a59ee814..1067a57e 100644
--- a/src/net/npchandler.cpp
+++ b/src/net/npchandler.cpp
@@ -20,6 +20,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <SDL_types.h>
+
#include "messagein.h"
#include "npchandler.h"
#include "protocol.h"
@@ -49,15 +51,14 @@ NPCHandler::NPCHandler()
void NPCHandler::handleMessage(MessageIn *msg)
{
- int id;
+ Uint32 id;
switch (msg->getId())
{
case SMSG_NPC_CHOICE:
msg->readInt16(); // length
- id = msg->readInt32();
+ current_npc = msg->readInt32();
player_node->setAction(LocalPlayer::STAND);
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(id));
npcListDialog->parseItems(msg->readString(msg->getLength() - 8));
npcListDialog->setVisible(true);
npcListDialog->requestFocus();
@@ -65,17 +66,16 @@ void NPCHandler::handleMessage(MessageIn *msg)
case SMSG_NPC_MESSAGE:
msg->readInt16(); // length
- id = msg->readInt32();
+ current_npc = msg->readInt32();
player_node->setAction(LocalPlayer::STAND);
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(id));
npcTextDialog->addText(msg->readString(msg->getLength() - 8));
npcTextDialog->setVisible(true);
break;
case SMSG_NPC_CLOSE:
id = msg->readInt32();
- if (current_npc == dynamic_cast<NPC*>(beingManager->findBeing(id)))
- current_npc = NULL;
+ if (current_npc == id)
+ current_npc = 0;
break;
case SMSG_NPC_NEXT:
@@ -84,8 +84,8 @@ void NPCHandler::handleMessage(MessageIn *msg)
case SMSG_NPC_INT_INPUT:
// Request for an integer
- id = msg->readInt32();
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(id));
+ current_npc = msg->readInt32();
+ player_node->setAction(LocalPlayer::STAND);
npcIntegerDialog->setRange(0, 2147483647);
npcIntegerDialog->setVisible(true);
npcIntegerDialog->requestFocus();
@@ -93,8 +93,8 @@ void NPCHandler::handleMessage(MessageIn *msg)
case SMSG_NPC_STR_INPUT:
// Request for a string
- id = msg->readInt32();
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(id));
+ current_npc = msg->readInt32();
+ player_node->setAction(LocalPlayer::STAND);
npcStringDialog->setValue("");
npcStringDialog->setVisible(true);
npcStringDialog->requestFocus();
diff --git a/src/net/playerhandler.cpp b/src/net/playerhandler.cpp
index f18c5d82..ffeb3fab 100644
--- a/src/net/playerhandler.cpp
+++ b/src/net/playerhandler.cpp
@@ -92,7 +92,7 @@ namespace {
buyDialog->setVisible(false);
sellDialog->setVisible(false);
buySellDialog->setVisible(false);
- current_npc = NULL;
+ current_npc = 0;
}
} deathListener;
}