aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/AchievementMgr.cpp3
-rw-r--r--src/game/LootHandler.cpp2
-rw-r--r--src/game/MiscHandler.cpp2
-rw-r--r--src/game/Object.cpp10
-rw-r--r--src/game/Object.h2
-rw-r--r--src/game/Spell.h4
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: