aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2014-05-10 21:38:58 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2014-05-10 21:38:58 +0200
commit066e55729f2d32ae76667994f3c532242cdf04e7 (patch)
tree5bc5c814ed2d449036caab086b198f83335454d7 /src/server/game
parentc861e64a56e58795e61616e01ca0be08944b8dff (diff)
parent8e7cf15dd1a5aea0b4b77fc7853f0fdc21f7a8d9 (diff)
Merge pull request #11960 from MitchesD/hor
Scripts/HallsOfReflection: Major changes
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp1
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp2
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp15
-rw-r--r--src/server/game/Maps/Map.cpp44
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp12
-rw-r--r--src/server/game/Spells/SpellMgr.cpp12
7 files changed, 47 insertions, 42 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 8bf34527769..9631b75fe06 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -28,7 +28,6 @@
void UnitAI::AttackStart(Unit* victim)
{
-
if (victim && me->Attack(victim, true))
me->GetMotionMaster()->MoveChase(victim);
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 36c1d384693..c205dd908c7 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -478,10 +478,7 @@ void BossAI::_JustDied()
events.Reset();
summons.DespawnAll();
if (instance)
- {
instance->SetBossState(_bossId, DONE);
- instance->SaveToDB();
- }
}
void BossAI::_EnterCombat()
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 8051c757bf2..49fe0a35b98 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -526,7 +526,7 @@ void GameObject::Update(uint32 diff)
{
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
- if (GetGOInfo()->GetAutoCloseTime() && (m_cooldownTime < time(NULL)))
+ if (m_cooldownTime && (m_cooldownTime < time(NULL)))
ResetDoorOrButton();
break;
case GAMEOBJECT_TYPE_GOOBER:
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index fd45c3fc596..8bc07732bb6 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -85,8 +85,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa
_triggeredDepartureEvent = false;
m_goValue.Transport.PathProgress = 0;
- SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size);
- SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction);
+ SetObjectScale(goinfo->size);
+ SetFaction(goinfo->faction);
SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags);
SetPeriod(tInfo->pathTime);
SetEntry(goinfo->entry);
@@ -210,8 +210,14 @@ void Transport::Update(uint32 diff)
3. transport moves from active to inactive grid
4. the grid that transport is currently in unloads
*/
- if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2.
+ bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY());
+
+ if (_staticPassengers.empty() && gridActive) // 2.
LoadStaticPassengers();
+ else if (!_staticPassengers.empty() && !gridActive)
+ // 4. - if transports stopped on grid edge, some passengers can remain in active grids
+ // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active
+ UnloadStaticPassengers();
}
}
@@ -450,6 +456,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
void Transport::UpdatePosition(float x, float y, float z, float o)
{
bool newActive = GetMap()->IsGridLoaded(x, y);
+ Cell oldCell(GetPositionX(), GetPositionY());
Relocate(x, y, z, o);
UpdateModelPosition();
@@ -464,7 +471,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o)
*/
if (_staticPassengers.empty() && newActive) // 1.
LoadStaticPassengers();
- else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
+ else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
UnloadStaticPassengers();
else
UpdatePassengerPositions(_staticPassengers);
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index cd391299785..ba271235330 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1544,11 +1544,8 @@ void Map::UnloadAll()
Transport* transport = *itr;
++itr;
- transport->RemoveFromWorld();
- delete transport;
+ RemoveFromMap<Transport>(transport, true);
}
-
- _transports.clear();
}
// *****************************
@@ -2648,24 +2645,27 @@ void Map::RemoveAllObjectsInRemoveList()
RemoveFromMap(corpse, true);
break;
}
- case TYPEID_DYNAMICOBJECT:
- RemoveFromMap((DynamicObject*)obj, true);
- break;
- case TYPEID_GAMEOBJECT:
- if (Transport* transport = obj->ToGameObject()->ToTransport())
- RemoveFromMap(transport, true);
- else
- RemoveFromMap(obj->ToGameObject(), true);
- break;
- case TYPEID_UNIT:
- // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
- // make sure that like sources auras/etc removed before destructor start
- obj->ToCreature()->CleanupsBeforeDelete();
- RemoveFromMap(obj->ToCreature(), true);
- break;
- default:
- TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
- break;
+ case TYPEID_DYNAMICOBJECT:
+ RemoveFromMap(obj->ToDynObject(), true);
+ break;
+ case TYPEID_GAMEOBJECT:
+ {
+ GameObject* go = obj->ToGameObject();
+ if (Transport* transport = go->ToTransport())
+ RemoveFromMap(transport, true);
+ else
+ RemoveFromMap(go, true);
+ break;
+ }
+ case TYPEID_UNIT:
+ // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
+ // make sure that like sources auras/etc removed before destructor start
+ obj->ToCreature()->CleanupsBeforeDelete();
+ RemoveFromMap(obj->ToCreature(), true);
+ break;
+ default:
+ TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
+ break;
}
i_objectsToRemove.erase(itr);
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 8e7edfc5355..3e1763e6c5b 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1343,17 +1343,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (target->HasAura(61988) && !target->HasAura(25771))
target->RemoveAura(61988);
break;
- case 72368: // Shared Suffering
- case 72369:
- if (caster)
- {
- if (AuraEffect* aurEff = GetEffect(0))
- {
- int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
- if (remainingDamage > 0)
- caster->CastCustomSpell(caster, 72373, NULL, &remainingDamage, NULL, true);
- }
- }
+ default:
break;
}
break;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index ba5b8856323..501cb1e77f2 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3375,6 +3375,18 @@ void SpellMgr::LoadSpellInfoCorrections()
break;
// ENDOF TRIAL OF THE CRUSADER SPELLS
//
+ // HALLS OF REFLECTION SPELLS
+ //
+ case 72435: // Defiling Horror
+ case 72452: // Defiling Horror
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ break;
+ case 72900: // Start Halls of Reflection Quest AE
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ break;
+ // ENDOF HALLS OF REFLECTION SPELLS
+ //
// ICECROWN CITADEL SPELLS
//
// THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK