mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
[11202] Schedule AI notify at adding to world
This fixes the problem, that creatures, added at grid loading, do not start attack each other More shedule -> schedule fixes added, removed unused Map::PlayerRelocationNotify function
This commit is contained in:
parent
6529e69924
commit
fcc09483ad
5 changed files with 10 additions and 48 deletions
|
|
@ -199,23 +199,6 @@ void Map::DeleteFromWorld(Player* pl)
|
||||||
delete pl;
|
delete pl;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void Map::AddNotifier(T* , Cell const& , CellPair const& )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
void Map::AddNotifier(Player* obj, Cell const& cell, CellPair const& cellpair)
|
|
||||||
{
|
|
||||||
obj->ScheduleAINotify(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
void Map::AddNotifier(Creature* obj, Cell const&, CellPair const&)
|
|
||||||
{
|
|
||||||
obj->ScheduleAINotify(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Map::EnsureGridCreated(const GridPair &p)
|
Map::EnsureGridCreated(const GridPair &p)
|
||||||
{
|
{
|
||||||
|
|
@ -317,8 +300,6 @@ bool Map::Add(Player *player)
|
||||||
player->GetViewPoint().Event_AddedToWorld(&(*grid)(cell.CellX(), cell.CellY()));
|
player->GetViewPoint().Event_AddedToWorld(&(*grid)(cell.CellX(), cell.CellY()));
|
||||||
UpdateObjectVisibility(player,cell,p);
|
UpdateObjectVisibility(player,cell,p);
|
||||||
|
|
||||||
AddNotifier(player,cell,p);
|
|
||||||
|
|
||||||
if (i_data)
|
if (i_data)
|
||||||
i_data->OnPlayerEnter(player);
|
i_data->OnPlayerEnter(player);
|
||||||
|
|
||||||
|
|
@ -359,8 +340,6 @@ Map::Add(T *obj)
|
||||||
|
|
||||||
obj->GetViewPoint().Event_AddedToWorld(&(*grid)(cell.CellX(), cell.CellY()));
|
obj->GetViewPoint().Event_AddedToWorld(&(*grid)(cell.CellX(), cell.CellY()));
|
||||||
UpdateObjectVisibility(obj,cell,p);
|
UpdateObjectVisibility(obj,cell,p);
|
||||||
|
|
||||||
AddNotifier(obj,cell,p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self)
|
void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self)
|
||||||
|
|
@ -953,19 +932,6 @@ void Map::UpdateObjectVisibility( WorldObject* obj, Cell cell, CellPair cellpair
|
||||||
cell.Visit(cellpair, player_notifier, *this, *obj, GetVisibilityDistance());
|
cell.Visit(cellpair, player_notifier, *this, *obj, GetVisibilityDistance());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map::PlayerRelocationNotify( Player* player, Cell cell, CellPair cellpair )
|
|
||||||
{
|
|
||||||
MaNGOS::PlayerRelocationNotifier relocationNotifier(*player);
|
|
||||||
|
|
||||||
TypeContainerVisitor<MaNGOS::PlayerRelocationNotifier, GridTypeMapContainer > p2grid_relocation(relocationNotifier);
|
|
||||||
TypeContainerVisitor<MaNGOS::PlayerRelocationNotifier, WorldTypeMapContainer > p2world_relocation(relocationNotifier);
|
|
||||||
|
|
||||||
float radius = MAX_CREATURE_ATTACK_RADIUS * sWorld.getConfig(CONFIG_FLOAT_RATE_CREATURE_AGGRO);
|
|
||||||
|
|
||||||
cell.Visit(cellpair, p2grid_relocation, *this, *player, radius);
|
|
||||||
cell.Visit(cellpair, p2world_relocation, *this, *player, radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Map::SendInitSelf( Player * player )
|
void Map::SendInitSelf( Player * player )
|
||||||
{
|
{
|
||||||
DETAIL_LOG("Creating player data for himself %u", player->GetGUIDLow());
|
DETAIL_LOG("Creating player data for himself %u", player->GetGUIDLow());
|
||||||
|
|
|
||||||
|
|
@ -263,8 +263,6 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>
|
||||||
void SendInitTransports( Player * player );
|
void SendInitTransports( Player * player );
|
||||||
void SendRemoveTransports( Player * player );
|
void SendRemoveTransports( Player * player );
|
||||||
|
|
||||||
void PlayerRelocationNotify(Player* player, Cell cell, CellPair cellpair);
|
|
||||||
|
|
||||||
bool CreatureCellRelocation(Creature *creature, Cell new_cell);
|
bool CreatureCellRelocation(Creature *creature, Cell new_cell);
|
||||||
|
|
||||||
bool loaded(const GridPair &) const;
|
bool loaded(const GridPair &) const;
|
||||||
|
|
@ -337,9 +335,6 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>
|
||||||
template<class T>
|
template<class T>
|
||||||
void AddToGrid(T*, NGridType *, Cell const&);
|
void AddToGrid(T*, NGridType *, Cell const&);
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void AddNotifier(T*, Cell const&, CellPair const&);
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void RemoveFromGrid(T*, NGridType *, Cell const&);
|
void RemoveFromGrid(T*, NGridType *, Cell const&);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,7 @@ Unit::Unit()
|
||||||
m_AuraFlags = 0;
|
m_AuraFlags = 0;
|
||||||
|
|
||||||
m_Visibility = VISIBILITY_ON;
|
m_Visibility = VISIBILITY_ON;
|
||||||
m_AINotifySheduled = false;
|
m_AINotifyScheduled = false;
|
||||||
|
|
||||||
m_detectInvisibilityMask = 0;
|
m_detectInvisibilityMask = 0;
|
||||||
m_invisibilityMask = 0;
|
m_invisibilityMask = 0;
|
||||||
|
|
@ -9355,6 +9355,7 @@ uint32 Unit::GetCreatePowers( Powers power ) const
|
||||||
void Unit::AddToWorld()
|
void Unit::AddToWorld()
|
||||||
{
|
{
|
||||||
Object::AddToWorld();
|
Object::AddToWorld();
|
||||||
|
ScheduleAINotify(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unit::RemoveFromWorld()
|
void Unit::RemoveFromWorld()
|
||||||
|
|
@ -10831,7 +10832,7 @@ class RelocationNotifyEvent : public BasicEvent
|
||||||
public:
|
public:
|
||||||
RelocationNotifyEvent(Unit& owner) : BasicEvent(), m_owner(owner)
|
RelocationNotifyEvent(Unit& owner) : BasicEvent(), m_owner(owner)
|
||||||
{
|
{
|
||||||
m_owner._SetAINotifySheduled(true);
|
m_owner._SetAINotifyScheduled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
bool Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
||||||
|
|
@ -10847,13 +10848,13 @@ public:
|
||||||
MaNGOS::CreatureRelocationNotifier notify((Creature&)m_owner);
|
MaNGOS::CreatureRelocationNotifier notify((Creature&)m_owner);
|
||||||
Cell::VisitAllObjects(&m_owner,notify,radius);
|
Cell::VisitAllObjects(&m_owner,notify,radius);
|
||||||
}
|
}
|
||||||
m_owner._SetAINotifySheduled(false);
|
m_owner._SetAINotifyScheduled(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Abort(uint64)
|
void Abort(uint64)
|
||||||
{
|
{
|
||||||
m_owner._SetAINotifySheduled(false);
|
m_owner._SetAINotifyScheduled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -10862,7 +10863,7 @@ private:
|
||||||
|
|
||||||
void Unit::ScheduleAINotify(uint32 delay)
|
void Unit::ScheduleAINotify(uint32 delay)
|
||||||
{
|
{
|
||||||
if (!IsAINotifySheduled())
|
if (!IsAINotifyScheduled())
|
||||||
m_Events.AddEvent(new RelocationNotifyEvent(*this), m_Events.CalculateTime(delay));
|
m_Events.AddEvent(new RelocationNotifyEvent(*this), m_Events.CalculateTime(delay));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1955,8 +1955,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
MovementInfo m_movementInfo;
|
MovementInfo m_movementInfo;
|
||||||
|
|
||||||
void ScheduleAINotify(uint32 delay);
|
void ScheduleAINotify(uint32 delay);
|
||||||
bool IsAINotifySheduled() const { return m_AINotifySheduled;}
|
bool IsAINotifyScheduled() const { return m_AINotifyScheduled;}
|
||||||
void _SetAINotifySheduled(bool on) { m_AINotifySheduled = on;} // only for call from RelocationNotifyEvent class code
|
void _SetAINotifyScheduled(bool on) { m_AINotifyScheduled = on;} // only for call from RelocationNotifyEvent code
|
||||||
void OnRelocated();
|
void OnRelocated();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -2026,7 +2026,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
UnitVisibility m_Visibility;
|
UnitVisibility m_Visibility;
|
||||||
Position m_last_notified_position;
|
Position m_last_notified_position;
|
||||||
bool m_AINotifySheduled;
|
bool m_AINotifyScheduled;
|
||||||
|
|
||||||
Diminishing m_Diminishing;
|
Diminishing m_Diminishing;
|
||||||
// Manage all Units threatening us
|
// Manage all Units threatening us
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11201"
|
#define REVISION_NR "11202"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue