diff options
author | David Athay <ko2fan@gmail.com> | 2009-05-20 15:07:41 +0100 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2009-05-20 15:07:41 +0100 |
commit | 2e1b6ac8453cd1579908f8712ca9a0069787b82f (patch) | |
tree | 38f44262a47cc8789fe70a6dc2a9d118ab76224a | |
parent | d75912b44b311a0d6734d558f494f1d2ce1649e2 (diff) | |
download | manaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.tar.gz manaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.tar.xz manaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.zip |
Fix crash caused by non-removal of target.
-rw-r--r-- | gameserver.cbp | 5 | ||||
-rw-r--r-- | src/game-server/mapcomposite.cpp | 29 |
2 files changed, 19 insertions, 15 deletions
diff --git a/gameserver.cbp b/gameserver.cbp index 9af1aa7..6ff1d14 100644 --- a/gameserver.cbp +++ b/gameserver.cbp @@ -61,6 +61,8 @@ <Unit filename="src/defines.h" /> <Unit filename="src/game-server/accountconnection.cpp" /> <Unit filename="src/game-server/accountconnection.hpp" /> + <Unit filename="src/game-server/actor.cpp" /> + <Unit filename="src/game-server/actor.hpp" /> <Unit filename="src/game-server/attackzone.cpp" /> <Unit filename="src/game-server/attackzone.hpp" /> <Unit filename="src/game-server/being.cpp" /> @@ -97,11 +99,8 @@ <Unit filename="src/game-server/monster.hpp" /> <Unit filename="src/game-server/monstermanager.cpp" /> <Unit filename="src/game-server/monstermanager.hpp" /> - <Unit filename="src/game-server/movingobject.cpp" /> - <Unit filename="src/game-server/movingobject.hpp" /> <Unit filename="src/game-server/npc.cpp" /> <Unit filename="src/game-server/npc.hpp" /> - <Unit filename="src/game-server/object.hpp" /> <Unit filename="src/game-server/postman.hpp" /> <Unit filename="src/game-server/quest.cpp" /> <Unit filename="src/game-server/quest.hpp" /> diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index df25276..448b3e4 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -512,6 +512,23 @@ bool MapComposite::insert(Thing *ptr) void MapComposite::remove(Thing *ptr) { + for (std::vector<Thing*>::iterator i = mContent->things.begin(), + i_end = mContent->things.end(); i != i_end; ++i) + { + if ((*i)->canFight()) + { + Being *being = static_cast<Being*>(*i); + if (being->getTarget() == ptr) + { + being->setTarget(NULL); + } + } + if (*i == ptr) + { + i = mContent->things.erase(i); + } + } + if (ptr->isVisible()) { Actor *obj = static_cast< Actor * >(ptr); @@ -525,18 +542,6 @@ void MapComposite::remove(Thing *ptr) mContent->deallocate(static_cast< Being * >(ptr)); } } - - for (std::vector< Thing * >::iterator i = mContent->things.begin(), - i_end = mContent->things.end(); i != i_end; ++i) - { - if (*i == ptr) - { - *i = *(i_end - 1); - mContent->things.pop_back(); - return; - } - } - assert(false); } void MapComposite::setMap(Map *m) |