diff options
author | n0n4m3 <none@none> | 2009-12-17 19:09:40 +0100 |
---|---|---|
committer | n0n4m3 <none@none> | 2009-12-17 19:09:40 +0100 |
commit | 3e133c47865d57816132300df2749b297f97bce0 (patch) | |
tree | 306c46fe0dd82f3909f65ef3cfccd3426bc049da | |
parent | 6b405c63cc291f979abbb8939dd3b129fa664584 (diff) |
[9012] fix crash when achievement is completed and player isn't in world
--HG--
branch : trunk
-rw-r--r-- | src/game/AchievementMgr.cpp | 3 | ||||
-rw-r--r-- | src/game/LootHandler.cpp | 2 | ||||
-rw-r--r-- | src/game/MiscHandler.cpp | 2 | ||||
-rw-r--r-- | src/game/Object.cpp | 10 | ||||
-rw-r--r-- | src/game/Object.h | 2 | ||||
-rw-r--r-- | src/game/Spell.h | 4 |
6 files changed, 18 insertions, 5 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 37fc507dd89..afd51d1f55e 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -592,7 +592,8 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) data << uint32(0); // 1=link supplied string as player name, 0=display plain string sWorld.SendGlobalMessage(&data); } - else + // if player is in world he can tell his friends about new achievement + else if (GetPlayer()->IsInWorld()) { CellPair p = MaNGOS::ComputeCellPair(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY()); diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp index de464cf050e..74b9730691f 100644 --- a/src/game/LootHandler.cpp +++ b/src/game/LootHandler.cpp @@ -222,7 +222,7 @@ void WorldSession::HandleLootMoneyOpcode( WorldPacket & /*recv_data*/ ) Player* playerGroup = itr->getSource(); if(!playerGroup) continue; - if (player->IsWithinDist(playerGroup,sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE),false)) + if (player->IsWithinDistInMap(playerGroup,sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE),false)) playersNear.push_back(playerGroup); } diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index c843bd27fe0..85e1a497a25 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -736,7 +736,7 @@ void WorldSession::HandleReclaimCorpseOpcode(WorldPacket &recv_data) if(corpse->GetGhostTime() + GetPlayer()->GetCorpseReclaimDelay(corpse->GetType()==CORPSE_RESURRECTABLE_PVP) > time(NULL)) return; - if (!corpse->IsWithinDist(GetPlayer(), CORPSE_RECLAIM_RADIUS, true)) + if (!corpse->IsWithinDistInMap(GetPlayer(), CORPSE_RECLAIM_RADIUS, true)) return; uint64 guid; diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 3e619104272..f3cff243e93 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1398,6 +1398,16 @@ bool WorldObject::IsInBetween(const WorldObject *obj1, const WorldObject *obj2, return abs(sin(angle)) * GetExactDist2d(obj1->GetPositionX(), obj1->GetPositionY()) < size; } +bool WorldObject::isInFront(WorldObject const* target, float distance, float arc) const +{ + return IsWithinDist(target, distance) && HasInArc( arc, target ); +} + +bool WorldObject::isInBack(WorldObject const* target, float distance, float arc) const +{ + return IsWithinDist(target, distance) && !HasInArc( 2 * M_PI - arc, target ); +} + void WorldObject::GetRandomPoint(const Position &pos, float distance, float &rand_x, float &rand_y, float &rand_z) const { if(!distance) diff --git a/src/game/Object.h b/src/game/Object.h index cc876f1c756..83189f30b23 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -548,6 +548,8 @@ class TRINITY_DLL_SPEC WorldObject : public Object, public WorldLocation bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const; bool IsInRange2d(float x, float y, float minRange, float maxRange) const; bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const; + bool isInFront(WorldObject const* target,float distance, float arc = M_PI) const; + bool isInBack(WorldObject const* target, float distance, float arc = M_PI) const; bool IsInBetween(const WorldObject *obj1, const WorldObject *obj2, float size = 0) const; diff --git a/src/game/Spell.h b/src/game/Spell.h index 2e12a909d99..dc640438032 100644 --- a/src/game/Spell.h +++ b/src/game/Spell.h @@ -734,11 +734,11 @@ namespace Trinity i_data->push_back(target); break; case PUSH_IN_FRONT: - if(i_source->isInFrontInMap(target, i_radius, M_PI/3)) + if(i_source->isInFront(target, i_radius, M_PI/3)) i_data->push_back(target); break; case PUSH_IN_BACK: - if(i_source->isInBackInMap(target, i_radius, M_PI/3)) + if(i_source->isInBack(target, i_radius, M_PI/3)) i_data->push_back(target); break; case PUSH_IN_LINE: |