diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp | 234 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp | 31 |
2 files changed, 108 insertions, 157 deletions
diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp index 50d6dff6849..c7327376ae1 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp @@ -28,14 +28,14 @@ EndScriptData */ #include "Spell.h" #include "Weather.h" -#define SPELL_STATIC_DISRUPTION 43622 -#define SPELL_STATIC_VISUAL 45265 -#define SPELL_CALL_LIGHTNING 43661 //Missing timer -#define SPELL_GUST_OF_WIND 43621 -#define SPELL_ELECTRICAL_STORM 43648 -#define SPELL_BERSERK 45078 - -#define SPELL_EAGLE_SWOOP 44732 +#define SPELL_STATIC_DISRUPTION 43622 +#define SPELL_STATIC_VISUAL 45265 +#define SPELL_CALL_LIGHTNING 43661 //Missing timer +#define SPELL_GUST_OF_WIND 43621 +#define SPELL_ELECTRICAL_STORM 43648 +#define SPELL_BERSERK 45078 +#define SPELL_ELECTRICAL_OVERLOAD 43658 +#define SPELL_EAGLE_SWOOP 44732 //"Your death gonna be quick, strangers. You shoulda never have come to this place..." #define SAY_ONAGGRO "I be da predator! You da prey..." @@ -63,11 +63,15 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI { boss_akilzonAI(Creature *c) : ScriptedAI(c) { + SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_ELECTRICAL_STORM); + if(TempSpell) + TempSpell->Effect[1] = 0;//disable bugged lightning until fixed in core pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; + uint64 BirdGUIDs[8]; uint64 TargetGUID; uint64 CycloneGUID; uint64 CloudGUID; @@ -76,7 +80,6 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI uint32 GustOfWind_Timer; uint32 CallLighting_Timer; uint32 ElectricalStorm_Timer; - uint32 SDisruptAOEVisual_Timer; uint32 SummonEagles_Timer; uint32 Enrage_Timer; @@ -95,19 +98,20 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI CallLighting_Timer = (10+rand()%10)*1000; //totaly random timer. can't find any info on this ElectricalStorm_Timer = 60*1000; //60 seconds(bosskillers) Enrage_Timer = 10*60*1000; //10 minutes till enrage(bosskillers) - SDisruptAOEVisual_Timer = 99999; SummonEagles_Timer = 99999; TargetGUID = 0; CloudGUID = 0; CycloneGUID = 0; + DespawnSummons(); + for(uint8 i = 0; i < 8; i++) + BirdGUIDs[i] = 0; StormCount = 0; StormSequenceTimer = 0; isRaining = false; - - DespawnSummons(MOB_SOARING_EAGLE); + SetWeather(WEATHER_STATE_FINE, 0.0f); } @@ -115,7 +119,7 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI { DoYell(SAY_ONAGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature, SOUND_ONAGGRO); - DoZoneInCombat(); + //DoZoneInCombat(); if(pInstance) pInstance->SetData(DATA_AKILZONEVENT, IN_PROGRESS); } @@ -126,7 +130,7 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI DoPlaySoundToSet(m_creature, SOUND_ONDEATH); if(pInstance) pInstance->SetData(DATA_AKILZONEVENT, DONE); - DespawnSummons(MOB_SOARING_EAGLE); + DespawnSummons(); } void KilledUnit(Unit* victim) @@ -144,52 +148,17 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI } } - void DespawnSummons(uint32 entry) + void DespawnSummons() { - std::list<Creature*> templist; - float x, y, z; - m_creature->GetPosition(x, y, z); - + for (uint8 i = 0; i < 8; i++) { - CellPair pair(Trinity::ComputeCellPair(x, y)); - Cell cell(pair); - cell.data.Part.reserved = ALL_DISTRICT; - cell.SetNoCreate(); - - Trinity::AllCreaturesOfEntryInRange check(m_creature, entry, 100); - Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(templist, check); - - TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); - - CellLock<GridReadGuard> cell_lock(cell, pair); - cell_lock->Visit(cell_lock, cSearcher, *(m_creature->GetMap())); - } - - for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) - { - (*i)->SetVisibility(VISIBILITY_OFF); - (*i)->setDeathState(JUST_DIED); - } - } - - Player* SelectRandomPlayer(float range = 0.0f, bool alive = true) - { - Map *map = m_creature->GetMap(); - if (!map->IsDungeon()) return NULL; - - InstanceMap::PlayerList PlayerList = ((InstanceMap*)map)->GetPlayers(); - InstanceMap::PlayerList::iterator i; - while(PlayerList.size()) - { - i = PlayerList.begin(); - advance(i, rand()%PlayerList.size()); - if((range == 0.0f || m_creature->IsWithinDistInMap(*i, range)) - && (!alive || (*i)->isTargetableForAttack())) - return *i; - else - PlayerList.erase(i); - } - return NULL; + Unit* bird = Unit::GetUnit(*m_creature,BirdGUIDs[i]); + if(bird && bird->isAlive()) + { + bird->SetVisibility(VISIBILITY_OFF); + bird->setDeathState(JUST_DIED); + } + } } void SetWeather(uint32 weather, float grade) @@ -230,66 +199,44 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI cell_lock->Visit(cell_lock, world_unit_searcher, *(m_creature->GetMap())); cell_lock->Visit(cell_lock, grid_unit_searcher, *(m_creature->GetMap())); } - - for(std::list<Unit*>::iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i) + //dealdamege + for(std::list<Unit*>::iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i) { - if(!Cloud->IsWithinDistInMap(*i, 15)) + if(Cloud->GetDistance2d(*i)>= 6) { - float x, y, z; - (*i)->GetPosition(x, y, z); - x = rand()%2 ? x + rand()%5 : x - rand()%5; - y = rand()%2 ? y + rand()%5 : y - rand()%5; - z = Cloud->GetPositionZ() + 2 - rand()%4; - if(Unit *trigger = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 2000)) - { - trigger->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); - trigger->StopMoving(); - trigger->CastSpell(trigger, 37248, true); - trigger->CastCustomSpell(*i, 43137, &bp0, NULL, NULL, true, 0, 0, m_creature->GetGUID()); - } + Cloud->CastCustomSpell(*i, 43137, &bp0, NULL, NULL, true, 0, 0, m_creature->GetGUID()); } - } - + } // visual - float x, y, z; - for(uint8 i = 0; i < StormCount; ++i) - { - Cloud->GetPosition(x, y, z); - x = rand()%2 ? x + rand()%10 : x - rand()%10; - y = rand()%2 ? y + rand()%10 : y - rand()%10; - z = z + 2 - rand()%4; + float x,y,z; + z = m_creature->GetPositionZ(); + for(uint8 i = 0; i < 5+rand()%5; ++i) + { + x = 343+rand()%60; + y = 1380+rand()%60; if(Unit *trigger = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 2000)) { - trigger->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); - trigger->StopMoving(); - trigger->CastSpell(trigger, 37248, true); + trigger->setFaction(35); + trigger->SetMaxHealth(100000); + trigger->SetHealth(100000); + trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + if (Cloud) + Cloud->CastCustomSpell(trigger, /*43661*/43137, &bp0, NULL, NULL,true, 0, 0, Cloud->GetGUID()); } - Cloud->GetPosition(x, y, z); - x = rand()%2 ? x + 10 + rand()%10 : x - 10 - rand()%10; - y = rand()%2 ? y + 10 + rand()%10 : y - 10 - rand()%10; - if(Unit *trigger = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 2000)) - { - trigger->SetMaxHealth(9999999); - trigger->SetHealth(9999999); - trigger->CastSpell(trigger, 43661, true); - } - } + } } - StormCount++; if(StormCount > 10) { StormCount = 0; // finish SummonEagles_Timer = 5000; m_creature->InterruptNonMeleeSpells(false); - Cloud->RemoveAurasDueToSpell(45213); CloudGUID = 0; - if(Unit* Cyclone = Unit::GetUnit(*m_creature, CycloneGUID)) - Cyclone->RemoveAurasDueToSpell(25160); + if (Cloud) + Cloud->DealDamage(Cloud, Cloud->GetHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); SetWeather(WEATHER_STATE_FINE, 0.0f); isRaining = false; } - StormSequenceTimer = 1000; } @@ -330,19 +277,11 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI m_creature->SetInFront(m_creature->getVictim()); StaticDisruption_Timer = (10+rand()%8)*1000; // < 20s - float dist = m_creature->GetDistance(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); + /*float dist = m_creature->GetDistance(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); if (dist < 5.0f) dist = 5.0f; - SDisruptAOEVisual_Timer = 1000 + floor(dist / 30 * 1000.0f); + SDisruptAOEVisual_Timer = 1000 + floor(dist / 30 * 1000.0f);*/ }else StaticDisruption_Timer -= diff; - if (SDisruptAOEVisual_Timer < diff) { - Unit* SDVictim = Unit::GetUnit((*m_creature), TargetGUID); - if(SDVictim && SDVictim->isAlive()) - SDVictim->CastSpell(SDVictim, SPELL_STATIC_VISUAL, true); - SDisruptAOEVisual_Timer = 99999; - TargetGUID = 0; - }else SDisruptAOEVisual_Timer -= diff; - if (GustOfWind_Timer < diff) { Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1); if(!target) target = m_creature->getVictim(); @@ -361,30 +300,32 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI } if (ElectricalStorm_Timer < diff) { - Unit* target = SelectRandomPlayer(50); - if(!target) target = m_creature->getVictim(); - float x, y, z; - target->GetPosition(x, y, z); - Unit *Cloud = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, m_creature->GetPositionZ() + 10, 0, TEMPSUMMON_TIMED_DESPAWN, 15000); + Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 50, true); + if(!target) + { + EnterEvadeMode(); + return; + } + target->CastSpell(target, 44007, true);//cloud visual + m_creature->CastSpell(target, SPELL_ELECTRICAL_STORM, false);//storm cyclon + visual + float x,y,z; + target->GetPosition(x,y,z); + if (target) + { + target->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); + target->SendMonsterMove(x,y,m_creature->GetPositionZ()+15,0,0,0); + } + Unit *Cloud = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, m_creature->GetPositionZ()+16, 0, TEMPSUMMON_TIMED_DESPAWN, 15000); if(Cloud) { - CloudGUID = Cloud->GetGUID(); - Cloud->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); + CloudGUID = Cloud->GetGUID(); + Cloud->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); Cloud->StopMoving(); - Cloud->SetFloatValue(OBJECT_FIELD_SCALE_X, 3.0f); - Cloud->setFaction(35); + Cloud->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f); + Cloud->setFaction(35); Cloud->SetMaxHealth(9999999); Cloud->SetHealth(9999999); - Cloud->CastSpell(Cloud, 45213, true); // cloud visual - m_creature->StopMoving(); Cloud->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - m_creature->CastSpell(Cloud, 43501, false); // siphon soul - } - Unit *Cyclone = m_creature->SummonCreature(MOB_TEMP_TRIGGER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 15000); - if(Cyclone) - { - Cyclone->CastSpell(Cyclone, 25160, true); // wind visual - CycloneGUID = Cyclone->GetGUID(); } ElectricalStorm_Timer = 60000; //60 seconds(bosskillers) StormCount = 1; @@ -398,23 +339,28 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI float x, y, z; m_creature->GetPosition(x, y, z); - for (uint8 i = 0; i < 6 + rand()%3; i++) - { - if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) - { - x = target->GetPositionX() + 10 - rand()%20; - y = target->GetPositionY() + 10 - rand()%20; - z = target->GetPositionZ() + 6 + rand()%5 + 10; - if(z > 95) z = 95 - rand()%5; - } - Creature *pCreature = m_creature->SummonCreature(MOB_SOARING_EAGLE, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); - if (pCreature) - { - pCreature->AddThreat(m_creature->getVictim(), 1.0f); - pCreature->AI()->AttackStart(m_creature->getVictim()); - } - } + for (uint8 i = 0; i < 8; i++) + { + Unit* bird = Unit::GetUnit(*m_creature,BirdGUIDs[i]); + if(!bird)//they despawned on die + { + if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + { + x = target->GetPositionX() + 10 - rand()%20; + y = target->GetPositionY() + 10 - rand()%20; + z = target->GetPositionZ() + 6 + rand()%5 + 10; + if(z > 95) z = 95 - rand()%5; + } + Creature *pCreature = m_creature->SummonCreature(MOB_SOARING_EAGLE, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); + if (pCreature) + { + pCreature->AddThreat(m_creature->getVictim(), 1.0f); + pCreature->AI()->AttackStart(m_creature->getVictim()); + BirdGUIDs[i] = pCreature->GetGUID(); + } + } + } SummonEagles_Timer = 999999; } else SummonEagles_Timer -= diff; diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp index 77b1be54906..8daab23c6b2 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp @@ -18,7 +18,7 @@ SDName: boss_Halazzi SD%Complete: 80 SDComment: -SDCategory: Zul¡äAman +SDCategory: Zul'Aman EndScriptData */ #include "precompiled.h" @@ -179,7 +179,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI break; case PHASE_HUMAN: //DoCast(m_creature, SPELL_SUMMON_LYNX, true); - DoSpawnCreature(MOB_SPIRIT_LYNX, 0,0,0,0, TEMPSUMMON_CORPSE_DESPAWN, 0); + DoSpawnCreature(MOB_SPIRIT_LYNX, 5,5,0,0, TEMPSUMMON_CORPSE_DESPAWN, 0); m_creature->SetMaxHealth(400000); m_creature->SetHealth(400000); ShockTimer = 10000; @@ -265,12 +265,12 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI if(Phase == PHASE_HUMAN) if(CheckTimer < diff) { - if(m_creature->GetHealth() * 10 < m_creature->GetMaxHealth()) + if( ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 20)/*m_creature->GetHealth() * 10 < m_creature->GetMaxHealth()*/) EnterPhase(PHASE_MERGE); else { Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID); - if(Lynx && Lynx->GetHealth() * 10 < Lynx->GetMaxHealth()) + if(Lynx && ((Lynx->GetHealth()*100) / Lynx->GetMaxHealth() <= 20)/*Lynx->GetHealth() * 10 < Lynx->GetMaxHealth()*/) EnterPhase(PHASE_MERGE); } CheckTimer = 1000; @@ -282,13 +282,18 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI if(CheckTimer < diff) { Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID); - if(Lynx && m_creature->IsWithinDistInMap(Lynx, 6.0f)) - { - if(TransformCount < 3) - EnterPhase(PHASE_LYNX); - else - EnterPhase(PHASE_ENRAGE); - } + if(Lynx) + { + Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); + m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); + if(m_creature->IsWithinDistInMap(Lynx, 6.0f)) + { + if(TransformCount < 3) + EnterPhase(PHASE_LYNX); + else + EnterPhase(PHASE_ENRAGE); + } + } CheckTimer = 1000; }else CheckTimer -= diff; } @@ -349,7 +354,7 @@ struct TRINITY_DLL_DECL boss_spiritlynxAI : public ScriptedAI ScriptedAI::AttackStart(who); } - void Aggro(Unit *who) {DoZoneInCombat();} + void Aggro(Unit *who) {/*DoZoneInCombat();*/} void UpdateAI(const uint32 diff) { @@ -395,4 +400,4 @@ void AddSC_boss_halazzi() newscript->Name="mob_halazzi_lynx"; newscript->GetAI = GetAI_boss_spiritlynxAI; m_scripts[nrscripts++] = newscript; -}
\ No newline at end of file +} |