diff options
Diffstat (limited to 'src/bindings/scripts')
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) |
