summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2009-05-20 15:07:41 +0100
committerDavid Athay <ko2fan@gmail.com>2009-05-20 15:07:41 +0100
commit2e1b6ac8453cd1579908f8712ca9a0069787b82f (patch)
tree38f44262a47cc8789fe70a6dc2a9d118ab76224a
parentd75912b44b311a0d6734d558f494f1d2ce1649e2 (diff)
downloadmanaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.tar.gz
manaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.tar.xz
manaserv-2e1b6ac8453cd1579908f8712ca9a0069787b82f.zip
Fix crash caused by non-removal of target.
-rw-r--r--gameserver.cbp5
-rw-r--r--src/game-server/mapcomposite.cpp29
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)