[10616] Simplified trade distance checks, GROUP_UPDATE_FLAG_POSITION flag handling moved out of Map

note: need avoid Map::PlayerRelocation calls now and use Player::SetPosition instead
This commit is contained in:
SilverIce 2010-10-17 19:19:47 +03:00
parent 608815855f
commit c4ddbead04
6 changed files with 6 additions and 26 deletions

View file

@ -150,7 +150,6 @@ namespace MaNGOS
Player &i_player;
PlayerRelocationNotifier(Player &pl) : i_player(pl) {}
template<class T> void Visit(GridRefManager<T> &) {}
void Visit(PlayerMapType &);
void Visit(CreatureMapType &);
};
@ -1170,7 +1169,6 @@ namespace MaNGOS
#ifndef WIN32
template<> void PlayerRelocationNotifier::Visit<Creature>(CreatureMapType &);
template<> void PlayerRelocationNotifier::Visit<Player>(PlayerMapType &);
template<> void CreatureRelocationNotifier::Visit<Player>(PlayerMapType &);
template<> void CreatureRelocationNotifier::Visit<Creature>(CreatureMapType &);
template<> inline void DynamicObjectUpdater::Visit<Creature>(CreatureMapType &);

View file

@ -44,23 +44,6 @@ inline void MaNGOS::ObjectUpdater::Visit(CreatureMapType &m)
iter->getSource()->Update(i_timeDiff);
}
inline void MaNGOS::PlayerRelocationNotifier::Visit(PlayerMapType &m)
{
for(PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
if (&i_player==iter->getSource())
continue;
// visibility for players updated by ObjectAccessor::UpdateVisibilityFor calls in appropriate places
// Cancel Trade
if (i_player.GetTrader()==iter->getSource())
// iteraction distance
if (!i_player.IsWithinDistInMap(iter->getSource(), INTERACTION_DISTANCE))
i_player.GetSession()->SendCancelTrade(); // will clode both side trade windows
}
}
inline void PlayerCreatureRelocationWorker(Player* pl, WorldObject const* viewPoint, Creature* c)
{
// update creature visibility at player/creature move

View file

@ -755,10 +755,6 @@ Map::PlayerRelocation(Player *player, float x, float y, float z, float orientati
{
DEBUG_FILTER_LOG(LOG_FILTER_PLAYER_MOVES, "Player %s relocation grid[%u,%u]cell[%u,%u]->grid[%u,%u]cell[%u,%u]", player->GetName(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
// update player position for group at taxi flight
if(player->GetGroup() && player->IsTaxiFlying())
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
NGridType* oldGrid = getNGrid(old_cell.GridX(), old_cell.GridY());
RemoveFromGrid(player, oldGrid,old_cell);
if( !old_cell.DiffGrid(new_cell) )

View file

@ -6055,8 +6055,11 @@ bool Player::SetPosition(float x, float y, float z, float orientation, bool tele
z = GetPositionZ();
// group update
if(GetGroup() && (old_x != x || old_y != y))
if (GetGroup() && (old_x != x || old_y != y))
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
GetSession()->SendCancelTrade(); // will clode both side trade windows
}
// code block for underwater state update

View file

@ -141,7 +141,7 @@ inline float Traveller<Player>::GetMoveDestinationTo(float x, float y, float z)
template<>
inline void Traveller<Player>::Relocation(float x, float y, float z, float orientation)
{
i_traveller.GetMap()->PlayerRelocation(&i_traveller, x, y, z, orientation);
i_traveller.SetPosition(x, y, z, orientation);
}
template<>

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "10615"
#define REVISION_NR "10616"
#endif // __REVISION_NR_H__