diff options
Diffstat (limited to 'src/server/scripts/World')
| -rw-r--r-- | src/server/scripts/World/boss_emerald_dragons.cpp | 44 | ||||
| -rw-r--r-- | src/server/scripts/World/guards.cpp | 36 | ||||
| -rw-r--r-- | src/server/scripts/World/mob_generic_creature.cpp | 16 | ||||
| -rw-r--r-- | src/server/scripts/World/npcs_special.cpp | 113 |
4 files changed, 162 insertions, 47 deletions
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 950b4cd10e9..23e373312cb 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -170,13 +170,19 @@ class npc_dream_fog : public CreatureScript { npc_dream_fogAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _roamTimer = 0; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -247,11 +253,17 @@ class boss_ysondre : public CreatureScript { boss_ysondreAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000); } @@ -335,11 +347,17 @@ class boss_lethon : public CreatureScript { boss_lethonAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_SHADOW_BOLT_WHIRL, 10000); } @@ -457,11 +475,17 @@ class boss_emeriss : public CreatureScript { boss_emerissAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000); } @@ -549,16 +573,22 @@ class boss_taerar : public CreatureScript { boss_taerarAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { - me->RemoveAurasDueToSpell(SPELL_SHADE); _stage = 1; - _shades = 0; _banished = false; _banishedTimer = 0; + } + + void Reset() override + { + me->RemoveAurasDueToSpell(SPELL_SHADE); + + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000); diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index a156a41fcef..bd953a285ab 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -54,14 +54,22 @@ public: struct guard_genericAI : public GuardAI { - guard_genericAI(Creature* creature) : GuardAI(creature) { } + guard_genericAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { globalCooldown = 0; buffTimer = 0; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* who) override { if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY) @@ -263,9 +271,12 @@ public: struct guard_shattrath_scryerAI : public GuardAI { - guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { } + guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { banishTimer = 5000; exileTimer = 8500; @@ -273,6 +284,11 @@ public: canTeleport = false; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -328,9 +344,12 @@ public: struct guard_shattrath_aldorAI : public GuardAI { - guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { } + guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { banishTimer = 5000; exileTimer = 8500; @@ -338,6 +357,11 @@ public: canTeleport = false; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index a27a78a5338..eb6fbea170e 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -36,7 +36,17 @@ public: struct generic_creatureAI : public ScriptedAI { - generic_creatureAI(Creature* creature) : ScriptedAI(creature) { } + generic_creatureAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + GlobalCooldown = 0; + BuffTimer = 0; //Rebuff as soon as we can + IsSelfRooted = false; + } uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) uint32 BuffTimer; //This variable keeps track of buffs @@ -44,9 +54,7 @@ public: void Reset() override { - GlobalCooldown = 0; - BuffTimer = 0; //Rebuff as soon as we can - IsSelfRooted = false; + Initialize(); } void EnterCombat(Unit* who) override diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index aa289e82698..ea90c13f747 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -329,13 +329,21 @@ public: struct npc_chicken_cluckAI : public ScriptedAI { - npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) { } + npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ResetFlagTimer = 120000; + } uint32 ResetFlagTimer; void Reset() override { - ResetFlagTimer = 120000; + Initialize(); me->setFaction(FACTION_CHICKEN); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); } @@ -424,15 +432,23 @@ public: struct npc_dancing_flamesAI : public ScriptedAI { - npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) { } + npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Active = true; + CanIteract = 3500; + } bool Active; uint32 CanIteract; void Reset() override { - Active = true; - CanIteract = 3500; + Initialize(); DoCast(me, SPELL_BRAZIER, true); DoCast(me, SPELL_FIERY_AURA, false); float x, y, z; @@ -569,7 +585,25 @@ public: struct npc_doctorAI : public ScriptedAI { - npc_doctorAI(Creature* creature) : ScriptedAI(creature) { } + npc_doctorAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + PlayerGUID = 0; + + SummonPatientTimer = 10000; + SummonPatientCount = 0; + PatientDiedCount = 0; + PatientSavedCount = 0; + + Patients.clear(); + Coordinates.clear(); + + Event = false; + } uint64 PlayerGUID; @@ -585,18 +619,7 @@ public: void Reset() override { - PlayerGUID = 0; - - SummonPatientTimer = 10000; - SummonPatientCount = 0; - PatientDiedCount = 0; - PatientSavedCount = 0; - - Patients.clear(); - Coordinates.clear(); - - Event = false; - + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } @@ -714,15 +737,23 @@ public: struct npc_injured_patientAI : public ScriptedAI { - npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) { } + npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + DoctorGUID = 0; + Coord = NULL; + } uint64 DoctorGUID; Location* Coord; void Reset() override { - DoctorGUID = 0; - Coord = NULL; + Initialize(); //no select me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -1447,14 +1478,20 @@ public: { npc_tonk_mineAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); me->SetReactState(REACT_PASSIVE); } + void Initialize() + { + ExplosionTimer = 3000; + } + uint32 ExplosionTimer; void Reset() override { - ExplosionTimer = 3000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -1649,13 +1686,21 @@ class npc_wormhole : public CreatureScript struct npc_wormholeAI : public PassiveAI { - npc_wormholeAI(Creature* creature) : PassiveAI(creature) { } + npc_wormholeAI(Creature* creature) : PassiveAI(creature) + { + Initialize(); + } - void InitializeAI() override + void Initialize() { _showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though } + void InitializeAI() override + { + Initialize(); + } + uint32 GetData(uint32 type) const override { return (type == DATA_SHOW_UNDERGROUND && _showUnderground) ? 1 : 0; @@ -2303,7 +2348,19 @@ public: struct npc_spring_rabbitAI : public ScriptedAI { - npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature) { } + npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + inLove = false; + rabbitGUID = 0; + jumpTimer = urand(5000, 10000); + bunnyTimer = urand(10000, 20000); + searchTimer = urand(5000, 10000); + } bool inLove; uint32 jumpTimer; @@ -2313,11 +2370,7 @@ public: void Reset() override { - inLove = false; - rabbitGUID = 0; - jumpTimer = urand(5000, 10000); - bunnyTimer = urand(10000, 20000); - searchTimer = urand(5000, 10000); + Initialize(); if (Unit* owner = me->GetOwner()) me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } |
