From 45350f5f5207e4b1cdda37622b44857189490c30 Mon Sep 17 00:00:00 2001 From: raczman Date: Fri, 27 Mar 2009 10:59:53 +0100 Subject: Fixed exploit with summoning Epoch Hunter more than once. --HG-- branch : trunk --- .../zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h | 1 + .../zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp | 8 ++++++++ .../scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h index b49e671339a..01c0e1334ac 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h @@ -13,6 +13,7 @@ #define TYPE_THRALL_PART4 6 #define DATA_THRALL 7 #define DATA_TARETHA 8 +#define DATA_EPOCH 9 #define WORLD_STATE_OH 2436 #endif diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp index 9e713cf8fcf..9ec75c06e0c 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp @@ -28,6 +28,7 @@ EndScriptData */ #define THRALL_ENTRY 17876 #define TARETHA_ENTRY 18887 +#define EPOCH_ENTRY 18096 #define DRAKE_ENTRY 17848 @@ -44,6 +45,7 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance uint64 ThrallGUID; uint64 TarethaGUID; + uint64 EpochGUID; void Initialize() { @@ -51,6 +53,7 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance mThrallEventCount = 0; ThrallGUID = 0; TarethaGUID = 0; + EpochGUID = 0; for(uint8 i = 0; i < ENCOUNTERS; i++) Encounter[i] = NOT_STARTED; @@ -103,6 +106,9 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance case TARETHA_ENTRY: TarethaGUID = creature->GetGUID(); break; + case EPOCH_ENTRY: + EpochGUID = creature->GetGUID(); + break; } } @@ -216,6 +222,8 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance return ThrallGUID; case DATA_TARETHA: return TarethaGUID; + case DATA_EPOCH: + return EpochGUID; } return 0; } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index 675cc78f8a5..3dbed97a084 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -819,7 +819,8 @@ bool GossipSelect_npc_taretha(Player *player, Creature *_Creature, uint32 sender if( pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS ) { pInstance->SetData(TYPE_THRALL_PART4,IN_PROGRESS); - _Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000); + if(pInstance->GetData64(DATA_EPOCH) == 0) + _Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000); if (uint64 ThrallGUID = pInstance->GetData64(DATA_THRALL)) { -- cgit v1.2.3 From 6a0677fd03861ca11c619593df05abd07cda25af Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 27 Mar 2009 09:06:26 -0600 Subject: *Fix the bug of visibility. --HG-- branch : trunk --- src/game/Map.cpp | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/game/Map.cpp b/src/game/Map.cpp index c1cd4da191a..fb7664616dc 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -471,6 +471,7 @@ bool Map::Add(Player *player) player->m_IsInNotifyList = false; player->m_Notified = false; + player->m_clientGUIDs.clear(); AddNotifier(player); return true; @@ -616,24 +617,12 @@ void Map::RelocationNotify() for(std::vector::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter) { Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL); - if(!unit || unit->GetMapId() != GetId()) + if(!unit || !unit->IsInWorld() || unit->GetMapId() != GetId()) { *iter = 0; continue; } - if(!unit->IsInWorld()) - { - //other objs are done during remove - if(unit->GetTypeId() == TYPEID_PLAYER) - { - Trinity::VisibleChangesNotifier notifier(*unit); - VisitWorld(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), notifier); - } - *iter = 0; - continue; - } - unit->m_Notified = true; if(unit->GetTypeId() == TYPEID_PLAYER) @@ -812,8 +801,6 @@ void Map::Update(const uint32 &t_diff) void Map::Remove(Player *player, bool remove) { - AddUnitToNotify(player); - // this may be called during Map::Update // after decrement+unlink, ++m_mapRefIter will continue correctly // when the first element of the list is being removed @@ -850,6 +837,7 @@ void Map::Remove(Player *player, bool remove) RemoveFromGrid(player,grid,cell); SendRemoveTransports(player); + UpdateObjectVisibility(player,cell,p); if( remove ) DeleteFromWorld(player); -- cgit v1.2.3