*Move object's field\visibility update functions to object from accessor
removed useless SendUpdateObjectToAllExcept - anyway fields will be updated, there is no sense to force update them --HG-- branch : trunk
This commit is contained in:
@@ -246,7 +246,7 @@ void Creature::RemoveCorpse()
|
||||
|
||||
m_deathTimer = 0;
|
||||
setDeathState(DEAD);
|
||||
ObjectAccessor::UpdateObjectVisibility(this);
|
||||
UpdateObjectVisibility();
|
||||
loot.clear();
|
||||
uint32 respawnDelay = m_respawnDelay;
|
||||
if (IsAIEnabled)
|
||||
|
||||
@@ -718,7 +718,6 @@ bool ChatHandler::HandleDebugSetVehicleId(const char *args)
|
||||
|
||||
uint32 id = (uint32)atoi(i);
|
||||
//target->SetVehicleId(id);
|
||||
target->SendUpdateObjectToAllExcept(NULL);
|
||||
PSendSysMessage("Vehicle id set to %u", id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1206,8 +1206,6 @@ void GameEventMgr::UpdateEventNPCFlags(uint16 event_id)
|
||||
cr->SetUInt32Value(UNIT_NPC_FLAGS,npcflag);
|
||||
// reset gossip options, since the flag change might have added / removed some
|
||||
//cr->ResetGossipOptions();
|
||||
// update to world
|
||||
cr->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
// if we didn't find it, then the npcflag will be updated when the creature is loaded
|
||||
}
|
||||
|
||||
@@ -478,7 +478,7 @@ void GameObject::Update(uint32 /*p_time*/)
|
||||
if(!m_spawnedByDefault)
|
||||
{
|
||||
m_respawnTime = 0;
|
||||
ObjectAccessor::UpdateObjectVisibility(this);
|
||||
UpdateObjectVisibility();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -488,7 +488,7 @@ void GameObject::Update(uint32 /*p_time*/)
|
||||
if(sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
SaveRespawnTime();
|
||||
|
||||
ObjectAccessor::UpdateObjectVisibility(this);
|
||||
UpdateObjectVisibility();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1018,3 +1018,10 @@ bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void Item::BuildUpdate(UpdateDataMapType& data_map)
|
||||
{
|
||||
if(Player *owner = GetOwner())
|
||||
BuildFieldsUpdate(owner, data_map);
|
||||
ClearUpdateMask(false);
|
||||
}
|
||||
|
||||
@@ -332,6 +332,8 @@ class TRINITY_DLL_SPEC Item : public Object
|
||||
m_paidExtendedCostCount[pos] = count;
|
||||
}
|
||||
|
||||
void BuildUpdate(UpdateDataMapType& );
|
||||
|
||||
private:
|
||||
uint8 m_slot;
|
||||
Bag *m_container;
|
||||
|
||||
+3
-3
@@ -634,7 +634,7 @@ bool ChatHandler::HandleGameObjectTurnCommand(const char* args)
|
||||
obj->Relocate(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), o);
|
||||
obj->UpdateRotationFields();
|
||||
obj->DestroyForNearbyPlayers();
|
||||
ObjectAccessor::UpdateObjectVisibility(obj);
|
||||
obj->UpdateObjectVisibility();
|
||||
|
||||
obj->SaveToDB();
|
||||
obj->Refresh();
|
||||
@@ -678,7 +678,7 @@ bool ChatHandler::HandleGameObjectMoveCommand(const char* args)
|
||||
Player *chr = m_session->GetPlayer();
|
||||
obj->Relocate(chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), obj->GetOrientation());
|
||||
obj->DestroyForNearbyPlayers();
|
||||
ObjectAccessor::UpdateObjectVisibility(obj);
|
||||
obj->UpdateObjectVisibility();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -698,7 +698,7 @@ bool ChatHandler::HandleGameObjectMoveCommand(const char* args)
|
||||
|
||||
obj->Relocate(x, y, z, obj->GetOrientation());
|
||||
obj->DestroyForNearbyPlayers();
|
||||
ObjectAccessor::UpdateObjectVisibility(obj);
|
||||
obj->UpdateObjectVisibility();
|
||||
}
|
||||
|
||||
obj->SaveToDB();
|
||||
|
||||
+93
-17
@@ -233,12 +233,6 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) c
|
||||
data->AddUpdateBlock(buf);
|
||||
}
|
||||
|
||||
void Object::BuildUpdate(UpdateDataMapType &update_players)
|
||||
{
|
||||
ObjectAccessor::_buildUpdateObject(this,update_players);
|
||||
ClearUpdateMask(true);
|
||||
}
|
||||
|
||||
void Object::SendUpdateToPlayer(Player* player)
|
||||
{
|
||||
// send create update to player
|
||||
@@ -275,7 +269,7 @@ void Object::DestroyForPlayer( Player *target, bool anim ) const
|
||||
{
|
||||
ASSERT(target);
|
||||
|
||||
WorldPacket data(SMSG_DESTROY_OBJECT, 8);
|
||||
WorldPacket data(SMSG_DESTROY_OBJECT, 8 + 1);
|
||||
data << uint64(GetGUID());
|
||||
data << uint8(anim ? 1 : 0); // WotLK (bool), may be despawn animation
|
||||
target->GetSession()->SendPacket( &data );
|
||||
@@ -726,18 +720,18 @@ void Object::ClearUpdateMask(bool remove)
|
||||
}
|
||||
}
|
||||
|
||||
// Send current value fields changes to all viewers
|
||||
void Object::SendUpdateObjectToAllExcept(Player* exceptPlayer)
|
||||
void Object::BuildFieldsUpdate(Player *pl, UpdateDataMapType &data_map) const
|
||||
{
|
||||
// changes will be send in create packet
|
||||
if(!IsInWorld())
|
||||
return;
|
||||
UpdateDataMapType::iterator iter = data_map.find(pl);
|
||||
|
||||
// nothing do
|
||||
if(!m_objectUpdated)
|
||||
return;
|
||||
if( iter == data_map.end() )
|
||||
{
|
||||
std::pair<UpdateDataMapType::iterator, bool> p = data_map.insert( UpdateDataMapType::value_type(pl, UpdateData()) );
|
||||
assert(p.second);
|
||||
iter = p.first;
|
||||
}
|
||||
|
||||
ObjectAccessor::UpdateObject(this,exceptPlayer);
|
||||
BuildValuesUpdateBlockForPlayer(&iter->second, iter->first);
|
||||
}
|
||||
|
||||
bool Object::LoadValues(const char* data)
|
||||
@@ -2224,7 +2218,7 @@ void WorldObject::SetPhaseMask(uint32 newPhaseMask, bool update)
|
||||
m_phaseMask = newPhaseMask;
|
||||
|
||||
if(update && IsInWorld())
|
||||
ObjectAccessor::UpdateObjectVisibility(this);
|
||||
UpdateObjectVisibility();
|
||||
}
|
||||
|
||||
void WorldObject::PlayDistanceSound( uint32 sound_id, Player* target /*= NULL*/ )
|
||||
@@ -2276,3 +2270,85 @@ void WorldObject::DestroyForNearbyPlayers()
|
||||
plr->m_clientGUIDs.erase(GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void WorldObject::UpdateObjectVisibility()
|
||||
{
|
||||
CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
|
||||
Cell cell(p);
|
||||
|
||||
GetMap()->UpdateObjectVisibility(this, cell, p);
|
||||
}
|
||||
|
||||
struct WorldObjectChangeAccumulator
|
||||
{
|
||||
UpdateDataMapType &i_updateDatas;
|
||||
WorldObject &i_object;
|
||||
std::set<uint64> plr_list;
|
||||
WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d) : i_updateDatas(d), i_object(obj) {}
|
||||
void Visit(PlayerMapType &m)
|
||||
{
|
||||
for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
BuildPacket(iter->getSource());
|
||||
if (!iter->getSource()->GetSharedVisionList().empty())
|
||||
{
|
||||
SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
|
||||
for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
|
||||
BuildPacket(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Visit(CreatureMapType &m)
|
||||
{
|
||||
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
if (!iter->getSource()->GetSharedVisionList().empty())
|
||||
{
|
||||
SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
|
||||
for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
|
||||
BuildPacket(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
void Visit(DynamicObjectMapType &m)
|
||||
{
|
||||
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
uint64 guid = iter->getSource()->GetCasterGUID();
|
||||
if(IS_PLAYER_GUID(guid))
|
||||
{
|
||||
//Caster may be NULL if DynObj is in removelist
|
||||
if(Player *caster = ObjectAccessor::FindPlayer(guid))
|
||||
if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID())
|
||||
BuildPacket(caster);
|
||||
}
|
||||
}
|
||||
}
|
||||
void BuildPacket(Player* plr)
|
||||
{
|
||||
// Only send update once to a player
|
||||
if (plr_list.find(plr->GetGUID()) == plr_list.end() && plr->HaveAtClient(&i_object))
|
||||
{
|
||||
i_object.BuildFieldsUpdate(plr, i_updateDatas);
|
||||
plr_list.insert(plr->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
template<class SKIP> void Visit(GridRefManager<SKIP> &) {}
|
||||
};
|
||||
|
||||
void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
|
||||
{
|
||||
CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
|
||||
Cell cell(p);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
cell.SetNoCreate();
|
||||
WorldObjectChangeAccumulator notifier(*this, data_map);
|
||||
TypeContainerVisitor<WorldObjectChangeAccumulator, WorldTypeMapContainer > player_notifier(notifier);
|
||||
Map& map = *GetMap();
|
||||
//we must build packets for all visible players
|
||||
cell.Visit(p, player_notifier, map, *this, map.GetVisibilityDistance());
|
||||
|
||||
ClearUpdateMask(false);
|
||||
}
|
||||
|
||||
+4
-2
@@ -165,7 +165,6 @@ class TRINITY_DLL_SPEC Object
|
||||
void BuildValuesUpdateBlockForPlayer( UpdateData *data, Player *target ) const;
|
||||
void BuildOutOfRangeUpdateBlock( UpdateData *data ) const;
|
||||
void BuildMovementUpdateBlock( UpdateData * data, uint32 flags = 0 ) const;
|
||||
void BuildUpdate(UpdateDataMapType &);
|
||||
|
||||
virtual void DestroyForPlayer( Player *target, bool anim = false ) const;
|
||||
|
||||
@@ -307,7 +306,6 @@ class TRINITY_DLL_SPEC Object
|
||||
}
|
||||
|
||||
void ClearUpdateMask(bool remove);
|
||||
void SendUpdateObjectToAllExcept(Player* exceptPlayer);
|
||||
|
||||
bool LoadValues(const char* data);
|
||||
|
||||
@@ -315,6 +313,8 @@ class TRINITY_DLL_SPEC Object
|
||||
|
||||
virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
|
||||
virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
|
||||
virtual void BuildUpdate(UpdateDataMapType& ) {}
|
||||
void BuildFieldsUpdate(Player *, UpdateDataMapType &) const;
|
||||
|
||||
// FG: some hacky helpers
|
||||
void ForceValuesUpdateAtIndex(uint32);
|
||||
@@ -637,6 +637,8 @@ class TRINITY_DLL_SPEC WorldObject : public Object, public WorldLocation
|
||||
void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange);
|
||||
|
||||
void DestroyForNearbyPlayers();
|
||||
void UpdateObjectVisibility();
|
||||
void BuildUpdate(UpdateDataMapType& );
|
||||
|
||||
//new relocation and visibility system functions
|
||||
void AddToNotify(uint16 f) { m_notifyflags |= f;}
|
||||
|
||||
+1
-125
@@ -184,65 +184,6 @@ ObjectAccessor::SaveAllPlayers()
|
||||
itr->second->SaveToDB();
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::UpdateObject(Object* obj, Player* exceptPlayer)
|
||||
{
|
||||
UpdateDataMapType update_players;
|
||||
obj->BuildUpdate(update_players);
|
||||
|
||||
WorldPacket packet;
|
||||
for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter)
|
||||
{
|
||||
if(iter->first == exceptPlayer)
|
||||
continue;
|
||||
|
||||
iter->second.BuildPacket(&packet);
|
||||
iter->first->GetSession()->SendPacket(&packet);
|
||||
packet.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::_buildUpdateObject(Object *obj, UpdateDataMapType &update_players)
|
||||
{
|
||||
if(obj->isType(TYPEMASK_ITEM))
|
||||
{
|
||||
if(Player *owner = ((Item*)obj)->GetOwner())
|
||||
_buildPacket(owner, obj, update_players);
|
||||
}
|
||||
else
|
||||
_buildChangeObjectForPlayer((WorldObject*)obj, update_players);
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::_buildPacket(Player *pl, Object *obj, UpdateDataMapType &update_players)
|
||||
{
|
||||
UpdateDataMapType::iterator iter = update_players.find(pl);
|
||||
|
||||
if( iter == update_players.end() )
|
||||
{
|
||||
std::pair<UpdateDataMapType::iterator, bool> p = update_players.insert( UpdateDataValueType(pl, UpdateData()) );
|
||||
assert(p.second);
|
||||
iter = p.first;
|
||||
}
|
||||
|
||||
obj->BuildValuesUpdateBlockForPlayer(&iter->second, iter->first);
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::_buildChangeObjectForPlayer(WorldObject *obj, UpdateDataMapType &update_players)
|
||||
{
|
||||
CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
|
||||
Cell cell(p);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
cell.SetNoCreate();
|
||||
WorldObjectChangeAccumulator notifier(*obj, update_players);
|
||||
TypeContainerVisitor<WorldObjectChangeAccumulator, WorldTypeMapContainer > player_notifier(notifier);
|
||||
Map& map = *obj->GetMap();
|
||||
//we must build packets for all visible players
|
||||
cell.Visit(p, player_notifier, map, *obj, map.GetVisibilityDistance());
|
||||
}
|
||||
|
||||
Pet*
|
||||
ObjectAccessor::GetPet(uint64 guid)
|
||||
{
|
||||
@@ -408,8 +349,7 @@ ObjectAccessor::Update(uint32 diff)
|
||||
Object* obj = *i_objects.begin();
|
||||
assert(obj && obj->IsInWorld());
|
||||
i_objects.erase(i_objects.begin());
|
||||
_buildUpdateObject(obj, update_players);
|
||||
obj->ClearUpdateMask(false);
|
||||
obj->BuildUpdate(update_players);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -422,70 +362,6 @@ ObjectAccessor::Update(uint32 diff)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::WorldObjectChangeAccumulator::Visit(PlayerMapType &m)
|
||||
{
|
||||
for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
BuildPacket(iter->getSource());
|
||||
if (!iter->getSource()->GetSharedVisionList().empty())
|
||||
{
|
||||
SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
|
||||
for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
|
||||
BuildPacket(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::WorldObjectChangeAccumulator::Visit(CreatureMapType &m)
|
||||
{
|
||||
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
if (!iter->getSource()->GetSharedVisionList().empty())
|
||||
{
|
||||
SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
|
||||
for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
|
||||
BuildPacket(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::WorldObjectChangeAccumulator::Visit(DynamicObjectMapType &m)
|
||||
{
|
||||
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
uint64 guid = iter->getSource()->GetCasterGUID();
|
||||
if(IS_PLAYER_GUID(guid))
|
||||
{
|
||||
//Caster may be NULL if DynObj is in removelist
|
||||
if(Player *caster = FindPlayer(guid))
|
||||
if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID())
|
||||
BuildPacket(caster);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::WorldObjectChangeAccumulator::BuildPacket(Player* plr)
|
||||
{
|
||||
// Only send update once to a player
|
||||
if (plr_list.find(plr->GetGUID()) == plr_list.end() && plr->HaveAtClient(&i_object))
|
||||
{
|
||||
ObjectAccessor::_buildPacket(plr, &i_object, i_updateDatas);
|
||||
plr_list.insert(plr->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectAccessor::UpdateObjectVisibility(WorldObject *obj)
|
||||
{
|
||||
CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
|
||||
Cell cell(p);
|
||||
|
||||
obj->GetMap()->UpdateObjectVisibility(obj, cell, p);
|
||||
}
|
||||
|
||||
/*void ObjectAccessor::UpdateVisibilityForPlayer( Player* player )
|
||||
{
|
||||
|
||||
@@ -232,26 +232,9 @@ class TRINITY_DLL_DECL ObjectAccessor : public Trinity::Singleton<ObjectAccessor
|
||||
void AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* map);
|
||||
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
|
||||
|
||||
static void UpdateObject(Object* obj, Player* exceptPlayer);
|
||||
static void _buildUpdateObject(Object* obj, UpdateDataMapType &);
|
||||
|
||||
static void UpdateObjectVisibility(WorldObject* obj);
|
||||
//static void UpdateVisibilityForPlayer(Player* player);
|
||||
private:
|
||||
struct WorldObjectChangeAccumulator
|
||||
{
|
||||
UpdateDataMapType &i_updateDatas;
|
||||
WorldObject &i_object;
|
||||
std::set<uint64> plr_list;
|
||||
WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d) : i_updateDatas(d), i_object(obj) {}
|
||||
void Visit(PlayerMapType &);
|
||||
void Visit(CreatureMapType &);
|
||||
void Visit(DynamicObjectMapType &);
|
||||
void BuildPacket(Player* plr);
|
||||
template<class SKIP> void Visit(GridRefManager<SKIP> &) {}
|
||||
};
|
||||
|
||||
friend struct WorldObjectChangeAccumulator;
|
||||
Player2CorpsesMapType i_player2corpse;
|
||||
|
||||
typedef ACE_Thread_Mutex LockType;
|
||||
|
||||
@@ -93,12 +93,10 @@ void OPvPCapturePointEP_EWT::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
if(flag2)
|
||||
{
|
||||
flag2->SetGoArtKit(artkit);
|
||||
flag2->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateTowerState();
|
||||
@@ -248,12 +246,10 @@ void OPvPCapturePointEP_NPT::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
if(flag2)
|
||||
{
|
||||
flag2->SetGoArtKit(artkit);
|
||||
flag2->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateTowerState();
|
||||
@@ -395,12 +391,10 @@ void OPvPCapturePointEP_CGT::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
if(flag2)
|
||||
{
|
||||
flag2->SetGoArtKit(artkit);
|
||||
flag2->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateTowerState();
|
||||
@@ -541,12 +535,10 @@ void OPvPCapturePointEP_PWT::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
if(flag2)
|
||||
{
|
||||
flag2->SetGoArtKit(artkit);
|
||||
flag2->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateTowerState();
|
||||
|
||||
@@ -249,12 +249,10 @@ void OPvPCapturePointHP::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
if(flag2)
|
||||
{
|
||||
flag2->SetGoArtKit(artkit2);
|
||||
flag2->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
// send world state update
|
||||
|
||||
@@ -608,7 +608,6 @@ void OPvPCapturePointNA::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateHalaaWorldState();
|
||||
|
||||
@@ -290,7 +290,6 @@ void OPvPCapturePointTF::ChangeState()
|
||||
if(flag)
|
||||
{
|
||||
flag->SetGoArtKit(artkit);
|
||||
flag->SendUpdateObjectToAllExcept(NULL);
|
||||
}
|
||||
|
||||
UpdateTowerState();
|
||||
|
||||
+1
-1
@@ -4528,7 +4528,7 @@ void Player::KillPlayer()
|
||||
// don't create corpse at this moment, player might be falling
|
||||
|
||||
// update visibility
|
||||
ObjectAccessor::UpdateObjectVisibility(this);
|
||||
UpdateObjectVisibility();
|
||||
}
|
||||
|
||||
void Player::CreateCorpse()
|
||||
|
||||
Reference in New Issue
Block a user