diff options
author | Yohann Ferreira <bertram@cegetel.net> | 2005-12-18 00:38:30 +0000 |
---|---|---|
committer | Yohann Ferreira <bertram@cegetel.net> | 2005-12-18 00:38:30 +0000 |
commit | ca9f3f98a9d8bd718f11806a33e7a9a2ab284de5 (patch) | |
tree | 9625123c35209b2d42d9b85dac225b90b3be990a /src/state.cpp | |
parent | b40a31f6c21ffc2f2e3acdbcd56b544ddfef6096 (diff) | |
download | manaserv-ca9f3f98a9d8bd718f11806a33e7a9a2ab284de5.tar.gz manaserv-ca9f3f98a9d8bd718f11806a33e7a9a2ab284de5.tar.bz2 manaserv-ca9f3f98a9d8bd718f11806a33e7a9a2ab284de5.tar.xz manaserv-ca9f3f98a9d8bd718f11806a33e7a9a2ab284de5.zip |
Made the handlers use the countedPtr for Beings as they should. Fixed a segfault when removing a being from the world.
Diffstat (limited to 'src/state.cpp')
-rw-r--r-- | src/state.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/state.cpp b/src/state.cpp index ec027531..3177131d 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -75,31 +75,33 @@ void State::update(ConnectionHandler &connectionHandler) msg.writeLong(b2->get()->getX());// x msg.writeLong(b2->get()->getY());// y - connectionHandler.sendTo(b->get(), msg); + connectionHandler.sendTo(*b, msg); } } } } } -void State::addBeing(Being *being, const std::string &map) { - if (!beingExists(being)) { +void State::addBeing(BeingPtr beingPtr, const std::string &map) { + if (!beingExists(beingPtr)) { if (!mapExists(map)) if (!loadMap(map)) return; - - maps[map].beings.push_back(tmwserv::BeingPtr(being)); + // WARNING: We should pass a copy there. + // Otherwise, remove being will erase one character + // from the account object. + maps[map].beings.push_back(beingPtr); } } -void State::removeBeing(Being *being) { +void State::removeBeing(BeingPtr beingPtr) { for (std::map<std::string, MapComposite>::iterator i = maps.begin(); i != maps.end(); i++) { for (Beings::iterator b = i->second.beings.begin(); b != i->second.beings.end(); b++) { - if (b->get() == being) { + if (b->get() == beingPtr.get()) { i->second.beings.erase(b); return; } @@ -114,14 +116,14 @@ bool State::mapExists(const std::string &map) { return true; } -bool State::beingExists(Being *being) { +bool State::beingExists(BeingPtr beingPtr) { for (std::map<std::string, MapComposite>::iterator i = maps.begin(); i != maps.end(); i++) { for (Beings::iterator b = i->second.beings.begin(); b != i->second.beings.end(); b++) { - if (b->get() == being) + if (b->get() == beingPtr.get()) return true; } } @@ -139,7 +141,7 @@ bool State::loadMap(const std::string &map) { // will need to load extra map related resources here also - return true; + return true; // We let true for testing on beings } void State::addObject(Object *object, const std::string &map) { @@ -166,7 +168,7 @@ void State::removeObject(Object *object) { } } -bool State::objectExists(Object *object) { +bool State::objectExists(const Object *object) { for (std::map<std::string, MapComposite>::iterator i = maps.begin(); i != maps.end(); i++) { @@ -180,14 +182,14 @@ bool State::objectExists(Object *object) { return false; } -const std::string State::findPlayer(Being *being) { +const std::string State::findPlayer(BeingPtr beingPtr) { for (std::map<std::string, MapComposite>::iterator i = maps.begin(); i != maps.end(); i++) { for (Beings::iterator b = i->second.beings.begin(); b != i->second.beings.end(); b++) { - if (b->get() == being) + if (b->get() == beingPtr.get()) return i->first; } } |