aboutsummaryrefslogtreecommitdiff
path: root/src/bindings/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/bindings/scripts')
-rw-r--r--src/bindings/scripts/include/sc_creature.cpp29
-rw-r--r--src/bindings/scripts/include/sc_creature.h3
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp56
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp8
4 files changed, 44 insertions, 52 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp
index fe644b85a60..1320fdb4776 100644
--- a/src/bindings/scripts/include/sc_creature.cpp
+++ b/src/bindings/scripts/include/sc_creature.cpp
@@ -70,12 +70,13 @@ void SummonList::DespawnAll()
else
{
erase(begin());
- summon->SetVisibility(VISIBILITY_OFF);
- if(summon->isSummon() && !summon->isPet())
+ if(summon->isSummon())
+ {
+ summon->DestroyForNearbyPlayers();
CAST_SUM(summon)->UnSummon();
+ }
else
- summon->setDeathState(JUST_DIED);
- summon->RemoveCorpse();
+ summon->DisappearAndDie();
}
}
}
@@ -163,26 +164,6 @@ Creature* ScriptedAI::DoSpawnCreature(uint32 uiId, float fX, float fY, float fZ,
return m_creature->SummonCreature(uiId, m_creature->GetPositionX()+fX, m_creature->GetPositionY()+fY, m_creature->GetPositionZ()+fZ, fAngle, (TempSummonType)uiType, uiDespawntime);
}
-Creature *ScriptedAI::DoSummon(uint32 uiEntry, const float fPos[4], uint32 uiDespawntime, TempSummonType uiType)
-{
- return me->SummonCreature(uiEntry, fPos[0], fPos[1], fPos[2], fPos[3], uiType, uiDespawntime);
-}
-
-Creature *ScriptedAI::DoSummon(uint32 uiEntry, WorldObject* pGo, float fRadius, uint32 uiDespawntime, TempSummonType uiType)
-{
- float fX, fY, fZ;
- pGo->GetGroundPointAroundUnit(fX, fY, fZ, fRadius * rand_norm(), rand_norm()*2*M_PI);
- return me->SummonCreature(uiEntry, fX, fY, fZ, me->GetOrientation(), uiType, uiDespawntime);
-}
-
-Creature *ScriptedAI::DoSummonFlyer(uint32 uiEntry, WorldObject *obj, float _fZ, float fRadius, uint32 uiDespawntime, TempSummonType uiType)
-{
- float fX, fY, fZ;
- obj->GetGroundPointAroundUnit(fX, fY, fZ, fRadius * rand_norm(), rand_norm()*2*M_PI);
- return me->SummonCreature(uiEntry, fX, fY, fZ + _fZ, me->GetOrientation(), uiType, uiDespawntime);
-}
-
-
Unit* ScriptedAI::SelectUnit(SelectAggroTarget target, uint32 uiPosition)
{
//ThreatList m_threatlist;
diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h
index c4066a95598..91073bf4032 100644
--- a/src/bindings/scripts/include/sc_creature.h
+++ b/src/bindings/scripts/include/sc_creature.h
@@ -151,9 +151,6 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
//Spawns a creature relative to m_creature
Creature* DoSpawnCreature(uint32 uiId, float fX, float fY, float fZ, float fAngle, uint32 uiType, uint32 uiDespawntime);
- Creature *DoSummon(uint32 uiEntry, const float fPos[4], uint32 uiDespawntime = 30000, TempSummonType uiType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
- Creature *DoSummon(uint32 uiEntry, WorldObject *obj, float fRadius = 5.0f, uint32 uiDespawntime = 30000, TempSummonType uiType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
- Creature *DoSummonFlyer(uint32 uiEntry, WorldObject *obj, float fZ, float fRadius = 5.0f, uint32 uiDespawntime = 30000, TempSummonType uiType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
//Selects a unit from the creature's current aggro list
Unit* SelectUnit(SelectAggroTarget target, uint32 uiPosition);
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
index 71746299d9b..98238022d36 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
@@ -111,24 +111,6 @@ struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI
vehicle->InstallAllAccessories();
}
- void JustSummoned(Creature *summon)
- {
- if(summon->GetEntry() == MOB_MECHANOLIFT)
- {
- summons.Summon(summon);
- }
- }
-
- void SummonedCreatureDespawn(Creature *summon)
- {
- if(summon->GetEntry() == MOB_MECHANOLIFT)
- {
- summons.Despawn(summon);
- //if(Creature* container = DoSummon(MOB_CONTAINER, summon, 0, 0))
- // container->GetMotionMaster()->MovePoint(1, container->GetPositionX(), container->GetPositionY(), me->GetPositionZ());
- }
- }
-
void UpdateAI(const uint32 diff)
{
if (!me->isInCombat())
@@ -174,7 +156,7 @@ struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI
events.RepeatEvent(15000);
return;
case EVENT_SUMMON:
- if(summons.size() < 10)
+ if(summons.size() < 15) // 4seat+1turret+10lift
if(Creature *lift = DoSummonFlyer(MOB_MECHANOLIFT, me, rand()%20 + 20, 50, 0))
lift->GetMotionMaster()->MoveRandom(100);
events.RepeatEvent(2000);
@@ -296,6 +278,32 @@ struct TRINITY_DLL_DECL boss_flame_leviathan_overload_deviceAI : public PassiveA
}
};
+struct TRINITY_DLL_DECL boss_flame_leviathan_safety_containerAI : public PassiveAI
+{
+ boss_flame_leviathan_safety_containerAI(Creature *c) : PassiveAI(c) {}
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if(id == me->GetEntry())
+ {
+ if(Creature *liquid = DoSummon(MOB_LIQUID, me, 0))
+ liquid->CastSpell(liquid, 62494, true);
+ me->DisappearAndDie(); // this will relocate creature to sky
+ }
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if(!me->GetVehicle() && me->isSummon() && me->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE)
+ {
+ //me->AddUnitMovementFlag(MOVEMENTFLAG_FALLING);
+ me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ me->SendMovementFlagUpdate();
+ me->GetMotionMaster()->MovePoint(me->GetEntry(), me->GetPositionX(), me->GetPositionY(), 409.8f);
+ }
+ }
+};
+
struct TRINITY_DLL_DECL spell_pool_of_tarAI : public TriggerAI
{
spell_pool_of_tarAI(Creature *c) : TriggerAI(c)
@@ -335,6 +343,11 @@ CreatureAI* GetAI_boss_flame_leviathan_overload_device(Creature* pCreature)
return new boss_flame_leviathan_overload_deviceAI (pCreature);
}
+CreatureAI* GetAI_boss_flame_leviathan_safety_containerAI(Creature* pCreature)
+{
+ return new boss_flame_leviathan_safety_containerAI(pCreature);
+}
+
CreatureAI* GetAI_spell_pool_of_tar(Creature* pCreature)
{
return new spell_pool_of_tarAI (pCreature);
@@ -364,6 +377,11 @@ void AddSC_boss_flame_leviathan()
newscript->RegisterSelf();
newscript = new Script;
+ newscript->Name="boss_flame_leviathan_safety_container";
+ newscript->GetAI = &GetAI_boss_flame_leviathan_safety_containerAI;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
newscript->Name="spell_pool_of_tar";
newscript->GetAI = &GetAI_spell_pool_of_tar;
newscript->RegisterSelf();
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
index 775456e875e..b17682a9104 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
@@ -35,12 +35,7 @@ struct TRINITY_DLL_DECL boss_kologarnAI : public BossAI
leftArm(NULL), rightArm(NULL)
{
assert(vehicle);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
- }
-
- void Reset()
- {
- _Reset();
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
@@ -58,6 +53,7 @@ struct TRINITY_DLL_DECL boss_kologarnAI : public BossAI
leftArm = apply ? CAST_CRE(who) : NULL;
else if(who->GetEntry() == 32934)
rightArm = apply ? CAST_CRE(who) : NULL;
+ who->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
void UpdateAI(const uint32 diff)