From 02a1c92ea7a1f5f20104cddb95b0e64fb92bbeff Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 9 Sep 2014 20:35:23 +0100 Subject: Remove seaforium depth charge Remove cpp script for seaforium depth charge ((Bury those cockroaches)). --- .../scripts/Northrend/zone_borean_tundra.cpp | 60 ---------------------- 1 file changed, 60 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 45b640f27be..9634dc89236 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -2111,65 +2111,6 @@ public: } }; -/*###### -## Quest 11608: Bury Those Cockroaches! -######*/ - -enum BuryThoseCockroaches -{ - // Quest - QUEST_BURY_THOSE_COCKROACHES = 11608, - - // Spells - SPELL_SEAFORIUM_DEPTH_CHARGE_EXPLOSION = 45502 - -}; - -class npc_seaforium_depth_charge : public CreatureScript -{ -public: - npc_seaforium_depth_charge() : CreatureScript("npc_seaforium_depth_charge") { } - - struct npc_seaforium_depth_chargeAI : public ScriptedAI - { - npc_seaforium_depth_chargeAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 uiExplosionTimer; - - void Reset() override - { - uiExplosionTimer = urand(5000, 10000); - } - - void UpdateAI(uint32 diff) override - { - if (uiExplosionTimer < diff) - { - DoCast(SPELL_SEAFORIUM_DEPTH_CHARGE_EXPLOSION); - for (uint8 i = 0; i < 4; ++i) - { - if (Creature* cCredit = me->FindNearestCreature(25402 + i, 10.0f))//25402-25405 credit markers - { - if (Unit* uOwner = me->GetOwner()) - { - Player* owner = uOwner->ToPlayer(); - if (owner && owner->GetQuestStatus(QUEST_BURY_THOSE_COCKROACHES) == QUEST_STATUS_INCOMPLETE) - owner->KilledMonsterCredit(cCredit->GetEntry(), cCredit->GetGUID()); - } - } - } - me->Kill(me); - return; - } else uiExplosionTimer -= diff; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_seaforium_depth_chargeAI(creature); - } -}; - /*###### ## Help Those That Cannot Help Themselves, Quest 11876 ######*/ @@ -2593,7 +2534,6 @@ void AddSC_borean_tundra() new npc_bonker_togglevolt(); new npc_trapped_mammoth_calf(); new npc_magmoth_crusher(); - new npc_seaforium_depth_charge(); new npc_valiance_keep_cannoneer(); new npc_warmage_coldarra(); new npc_hidden_cultist(); -- cgit v1.2.3 From 29951ba394fb6c289259cad633868895b80f7376 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 9 Sep 2014 21:38:05 +0100 Subject: Remove CPP script for Jenny/Jezzix Geartwist --- .../scripts/Northrend/zone_borean_tundra.cpp | 122 --------------------- 1 file changed, 122 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 9634dc89236..f02edbb5584 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -26,7 +26,6 @@ EndScriptData */ /* ContentData npc_iruk npc_corastrasza -npc_jenny npc_sinkhole_kill_credit npc_khunok_the_behemoth npc_nerubar_victim @@ -406,125 +405,6 @@ public: } }; -/*###### -## npc_jenny -######*/ - -enum Jenny -{ - QUEST_LOADER_UP = 11881, - - NPC_FEZZIX_GEARTWIST = 25849, - NPC_JENNY = 25969, - - SPELL_GIVE_JENNY_CREDIT = 46358, - SPELL_CRATES_CARRIED = 46340, - SPELL_DROP_CRATE = 46342 -}; - -class npc_jenny : public CreatureScript -{ -public: - npc_jenny() : CreatureScript("npc_jenny") { } - - struct npc_jennyAI : public ScriptedAI - { - npc_jennyAI(Creature* creature) : ScriptedAI(creature) - { - setCrateNumber = false; - } - - bool setCrateNumber; - - void Reset() override - { - if (!setCrateNumber) - setCrateNumber = true; - - me->SetReactState(REACT_PASSIVE); - - if (!me->GetOwner()) - return; - - switch (me->GetOwner()->ToPlayer()->GetTeamId()) - { - case TEAM_ALLIANCE: - me->setFaction(FACTION_ESCORT_A_NEUTRAL_ACTIVE); - break; - default: - case TEAM_HORDE: - me->setFaction(FACTION_ESCORT_H_NEUTRAL_ACTIVE); - break; - } - } - - void DamageTaken(Unit* /*pDone_by*/, uint32& /*uiDamage*/) override - { - DoCast(me, SPELL_DROP_CRATE, true); - } - - void UpdateAI(uint32 /*diff*/) override - { - if (setCrateNumber) - { - me->AddAura(SPELL_CRATES_CARRIED, me); - setCrateNumber = false; - } - - if (!setCrateNumber && !me->HasAura(SPELL_CRATES_CARRIED)) - me->DisappearAndDie(); - - if (!UpdateVictim()) - return; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_jennyAI(creature); - } -}; - -/*###### -## npc_fezzix_geartwist -######*/ - -class npc_fezzix_geartwist : public CreatureScript -{ -public: - npc_fezzix_geartwist() : CreatureScript("npc_fezzix_geartwist") { } - - struct npc_fezzix_geartwistAI : public ScriptedAI - { - npc_fezzix_geartwistAI(Creature* creature) : ScriptedAI(creature) { } - - void MoveInLineOfSight(Unit* who) override - - { - ScriptedAI::MoveInLineOfSight(who); - - if (who->GetEntry() != NPC_JENNY || !who->HasAura(SPELL_CRATES_CARRIED)) - return; - - Unit* owner = who->GetOwner(); - if (!owner || !me->IsWithinDistInMap(who, 10.0f)) - return; - - if (Player* player = owner->ToPlayer()) - { - owner->CastSpell(owner, SPELL_GIVE_JENNY_CREDIT, true); // Maybe is not working. - player->CompleteQuest(QUEST_LOADER_UP); - who->ToCreature()->DisappearAndDie(); - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_fezzix_geartwistAI(creature); - } -}; - /*###### ## npc_nesingwary_trapper ######*/ @@ -2518,8 +2398,6 @@ void AddSC_borean_tundra() new npc_corastrasza(); new npc_iruk(); new npc_nerubar_victim(); - new npc_jenny(); - new npc_fezzix_geartwist(); new npc_nesingwary_trapper(); new npc_lurgglbr(); new npc_nexus_drake_hatchling(); -- cgit v1.2.3 From 08b2cf6cba451d5cb95bd8c3682b07406d48367d Mon Sep 17 00:00:00 2001 From: dkmbasura Date: Tue, 9 Sep 2014 22:57:57 +0100 Subject: Scripts/The Barrens: Make BIG WILL attackable in quest id 1719 (the affray) Closes #13072 Ref #4764 --- src/server/scripts/Kalimdor/zone_the_barrens.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index ced964048c2..03507c77efb 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -492,6 +492,14 @@ public: Talk(SAY_TWIGGY_FLATHEAD_OVER); Reset(); } + else if (creature) // Makes BIG WILL attackable. + { + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); + creature->setFaction(14); + creature->AI()->AttackStart(warrior); + } } } else WaveTimer -= diff; } -- cgit v1.2.3 From 561cc47a0021d23d2a2f3106002a8ef44735ec65 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Wed, 10 Sep 2014 03:45:44 -0300 Subject: Scripts/AV: Captain Galvangar updated to EventMaps --- .../AlteracValley/boss_galvangar.cpp | 133 ++++++++++----------- 1 file changed, 65 insertions(+), 68 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp index e422975bd1a..0c029537add 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp @@ -27,11 +27,20 @@ enum Spells SPELL_MORTAL_STRIKE = 16856 }; -enum Yells +enum Texts { - YELL_AGGRO = 0, - YELL_EVADE = 1, - YELL_BUFF = 2 + SAY_AGGRO = 0, + SAY_EVADE = 1, + SAY_BUFF = 2 +}; + +enum Events +{ + EVENT_CLEAVE = 1, + EVENT_FRIGHTENING_SHOUT, + EVENT_WHIRLWIND1, + EVENT_WHIRLWIND2, + EVENT_MORTAL_STRIKE }; enum Action @@ -46,97 +55,85 @@ public: struct boss_galvangarAI : public ScriptedAI { - boss_galvangarAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - } - - void Initialize() - { - CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS); - FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS); - Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS); - Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - ResetTimer = 5 * IN_MILLISECONDS; - } - - uint32 CleaveTimer; - uint32 FrighteningShoutTimer; - uint32 Whirlwind1Timer; - uint32 Whirlwind2Timer; - uint32 MortalStrikeTimer; - uint32 ResetTimer; + boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { } void Reset() override { - Initialize(); + events.Reset(); } void EnterCombat(Unit* /*who*/) override { - Talk(YELL_AGGRO); - } - - void JustRespawned() override - { - Reset(); + Talk(SAY_AGGRO); + events.ScheduleEvent(EVENT_CLEAVE, urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_WHIRLWIND1, urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_WHIRLWIND2, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); } void DoAction(int32 actionId) override { if (actionId == ACTION_BUFF_YELL) - Talk(YELL_BUFF); + Talk(SAY_BUFF); } - void UpdateAI(uint32 diff) override + bool CheckInRoom() { - if (!UpdateVictim()) - return; - - if (CleaveTimer <= diff) + if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50) { - DoCastVictim(SPELL_CLEAVE); - CleaveTimer = urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS); - } else CleaveTimer -= diff; + EnterEvadeMode(); + Talk(SAY_EVADE); + return false; + } - if (FrighteningShoutTimer <= diff) - { - DoCastVictim(SPELL_FRIGHTENING_SHOUT); - FrighteningShoutTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); - } else FrighteningShoutTimer -= diff; + return true; + } - if (Whirlwind1Timer <= diff) - { - DoCastVictim(SPELL_WHIRLWIND1); - Whirlwind1Timer = urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS); - } else Whirlwind1Timer -= diff; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim() || !CheckInRoom()) + return; - if (Whirlwind2Timer <= diff) - { - DoCastVictim(SPELL_WHIRLWIND2); - Whirlwind2Timer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS); - } else Whirlwind2Timer -= diff; + events.Update(diff); - if (MortalStrikeTimer <= diff) - { - DoCastVictim(SPELL_MORTAL_STRIKE); - MortalStrikeTimer = urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); - } else MortalStrikeTimer -= diff; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - // check if creature is not outside of building - if (ResetTimer <= diff) + while (uint32 eventId = events.ExecuteEvent()) { - if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50) + switch (eventId) { - EnterEvadeMode(); - Talk(YELL_EVADE); + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS)); + break; + case EVENT_FRIGHTENING_SHOUT: + DoCastVictim(SPELL_FRIGHTENING_SHOUT); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS)); + break; + case EVENT_WHIRLWIND1: + DoCastVictim(SPELL_WHIRLWIND1); + events.ScheduleEvent(EVENT_WHIRLWIND1, urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS)); + break; + case EVENT_WHIRLWIND2: + DoCastVictim(SPELL_WHIRLWIND2); + events.ScheduleEvent(EVENT_WHIRLWIND2, urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS)); + break; + case EVENT_MORTAL_STRIKE: + DoCastVictim(SPELL_MORTAL_STRIKE); + events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS)); + break; + default: + break; } - ResetTimer = 5 * IN_MILLISECONDS; - } else ResetTimer -= diff; + } DoMeleeAttackIfReady(); } + + private: + EventMap events; }; CreatureAI* GetAI(Creature* creature) const override -- cgit v1.2.3 From ce97e9194c5be3b02c24b4e095bb219f41874011 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Thu, 11 Sep 2014 02:39:57 -0300 Subject: Scripts/Gundrak: Eck the Ferocious updated to EventMap/BossAI - Moved his spawn handling to instance script --- .../world/2014_09_11_00_world_conditions.sql | 2 +- .../2014_09_11_01_world_creature_template.sql | 1 + src/server/scripts/Northrend/Gundrak/boss_eck.cpp | 153 +++++++-------------- src/server/scripts/Northrend/Gundrak/gundrak.h | 6 +- .../scripts/Northrend/Gundrak/instance_gundrak.cpp | 19 ++- 5 files changed, 68 insertions(+), 113 deletions(-) create mode 100644 sql/updates/world/2014_09_11_01_world_creature_template.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2014_09_11_00_world_conditions.sql b/sql/updates/world/2014_09_11_00_world_conditions.sql index 17052ef159f..bd788917487 100644 --- a/sql/updates/world/2014_09_11_00_world_conditions.sql +++ b/sql/updates/world/2014_09_11_00_world_conditions.sql @@ -1 +1 @@ -UPDATE `conditions` SET `ConditionValue1` = 46 WHERE `SourceEntry` IN (63989, 63997, 63998); +UPDATE `conditions` SET `ConditionValue1` = 46 WHERE `SourceEntry` AND `SourceTypeOrReferenceId` = 18 IN (63989, 63997, 63998); diff --git a/sql/updates/world/2014_09_11_01_world_creature_template.sql b/sql/updates/world/2014_09_11_01_world_creature_template.sql new file mode 100644 index 00000000000..59d0bf9d3dd --- /dev/null +++ b/sql/updates/world/2014_09_11_01_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 29920; diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index 0783a79b381..4803cb4934f 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -28,146 +28,93 @@ enum Spells SPELL_ECK_SPRING_2 = 55837 //Eck leaps at a distant target. }; -static Position EckSpawnPoint = { 1643.877930f, 936.278015f, 107.204948f, 0.668432f }; +enum Events +{ + EVENT_BITE = 1, + EVENT_SPIT, + EVENT_SPRING, + EVENT_BERSERK +}; class boss_eck : public CreatureScript { public: boss_eck() : CreatureScript("boss_eck") { } - CreatureAI* GetAI(Creature* creature) const override + struct boss_eckAI : public BossAI { - return GetInstanceAI(creature); - } - - struct boss_eckAI : public ScriptedAI - { - boss_eckAI(Creature* creature) : ScriptedAI(creature) + boss_eckAI(Creature* creature) : BossAI(creature, DATA_ECK_THE_FEROCIOUS_EVENT) { - Initialize(); - instance = creature->GetInstanceScript(); - } - - void Initialize() - { - uiBerserkTimer = urand(60 * IN_MILLISECONDS, 90 * IN_MILLISECONDS); //60-90 secs according to wowwiki - uiBiteTimer = 5 * IN_MILLISECONDS; - uiSpitTimer = 10 * IN_MILLISECONDS; - uiSpringTimer = 8 * IN_MILLISECONDS; - - bBerserk = false; + Berserk = false; } - uint32 uiBerserkTimer; - uint32 uiBiteTimer; - uint32 uiSpitTimer; - uint32 uiSpringTimer; - - bool bBerserk; - - InstanceScript* instance; - void Reset() override { - Initialize(); - - instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED); + _Reset(); + Berserk = false; } void EnterCombat(Unit* /*who*/) override { - instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, IN_PROGRESS); + _EnterCombat(); + events.ScheduleEvent(EVENT_BITE, 5 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SPIT, 10 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SPRING, 8 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_BERSERK, urand(60 * IN_MILLISECONDS, 90 * IN_MILLISECONDS)); //60-90 secs according to wowwiki } - void UpdateAI(uint32 diff) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - //Return since we have no target - if (!UpdateVictim()) - return; - - if (uiBiteTimer <= diff) + if (me->HealthBelowPctDamaged(20, damage) && !Berserk) { - DoCastVictim(SPELL_ECK_BITE); - uiBiteTimer = urand(8*IN_MILLISECONDS, 12*IN_MILLISECONDS); - } else uiBiteTimer -= diff; - - if (uiSpitTimer <= diff) - { - DoCastVictim(SPELL_ECK_SPIT); - uiSpitTimer = urand(6*IN_MILLISECONDS, 14*IN_MILLISECONDS); - } else uiSpitTimer -= diff; - - if (uiSpringTimer <= diff) - { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1); - if (target && target->GetTypeId() == TYPEID_PLAYER) - { - DoCast(target, RAND(SPELL_ECK_SPRING_1, SPELL_ECK_SPRING_2)); - uiSpringTimer = urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS); - } - } else uiSpringTimer -= diff; + events.RescheduleEvent(EVENT_BERSERK, 1000); + Berserk = true; + } + } - //Berserk on timer or 20% of health - if (!bBerserk) + void ExecuteEvent(uint32 eventId) override + { + switch (eventId) { - if (uiBerserkTimer <= diff) - { + case EVENT_BITE: + DoCastVictim(SPELL_ECK_BITE); + events.ScheduleEvent(EVENT_BITE, urand(8 * IN_MILLISECONDS, 12 * IN_MILLISECONDS)); + break; + case EVENT_SPIT: + DoCastVictim(SPELL_ECK_SPIT); + events.ScheduleEvent(EVENT_SPIT, urand(6 * IN_MILLISECONDS, 14 * IN_MILLISECONDS)); + break; + case EVENT_SPRING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) + if (target->GetTypeId() == TYPEID_PLAYER) + DoCast(target, RAND(SPELL_ECK_SPRING_1, SPELL_ECK_SPRING_2)); + events.ScheduleEvent(EVENT_SPRING, urand(5 * IN_MILLISECONDS, 10 * IN_MILLISECONDS)); + break; + case EVENT_BERSERK: DoCast(me, SPELL_ECK_BERSERK); - bBerserk = true; - } - else - { - uiBerserkTimer -= diff; - if (HealthBelowPct(20)) - { - DoCast(me, SPELL_ECK_BERSERK); - bBerserk = true; - } - } + Berserk = true; + break; + default: + break; } - - DoMeleeAttackIfReady(); } void JustDied(Unit* /*killer*/) override { - instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, DONE); + _JustDied(); } - }; - -}; -class npc_ruins_dweller : public CreatureScript -{ -public: - npc_ruins_dweller() : CreatureScript("npc_ruins_dweller") { } + private: + bool Berserk; + }; CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI(creature); + return GetInstanceAI(creature); } - - struct npc_ruins_dwellerAI : public ScriptedAI - { - npc_ruins_dwellerAI(Creature* creature) : ScriptedAI(creature) - { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - - void JustDied(Unit* /*killer*/) override - { - instance->SetData64(DATA_RUIN_DWELLER_DIED, me->GetGUID()); - if (instance->GetData(DATA_ALIVE_RUIN_DWELLERS) == 0) - me->SummonCreature(CREATURE_ECK, EckSpawnPoint, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300*IN_MILLISECONDS); - } - }; - }; void AddSC_boss_eck() { new boss_eck(); - new npc_ruins_dweller(); } diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index 8f269705a45..fffeca82f39 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -26,8 +26,7 @@ enum Data DATA_MOORABI_EVENT, DATA_DRAKKARI_COLOSSUS_EVENT, DATA_GAL_DARAH_EVENT, - DATA_ECK_THE_FEROCIOUS_EVENT, - DATA_ALIVE_RUIN_DWELLERS + DATA_ECK_THE_FEROCIOUS_EVENT }; enum Data64 @@ -39,8 +38,7 @@ enum Data64 DATA_MOORABI_STATUE, DATA_DRAKKARI_COLOSSUS_STATUE, DATA_DRAKKARI_COLOSSUS, - DATA_RUIN_DWELLER_DIED, - DATA_STATUE_ACTIVATE, + DATA_STATUE_ACTIVATE }; enum mainCreatures diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index e5efdad27f3..ee3069b5eb2 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -31,6 +31,8 @@ 4 - Eck the Ferocious */ +static Position EckSpawnPoint = {1643.877930f, 936.278015f, 107.204948f, 0.668432f}; + class instance_gundrak : public InstanceMapScript { public: @@ -274,6 +276,17 @@ public: } } + void OnUnitDeath(Unit* unit) override + { + if (unit->GetEntry() == CREATURE_RUIN_DWELLER) + { + DwellerGUIDs.erase(unit->GetGUID()); + + if (DwellerGUIDs.empty()) + unit->SummonCreature(CREATURE_ECK, EckSpawnPoint, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300 * IN_MILLISECONDS); + } + } + void SetData(uint32 type, uint32 data) override { switch (type) @@ -329,9 +342,7 @@ public: void SetData64(uint32 type, uint64 data) override { - if (type == DATA_RUIN_DWELLER_DIED) - DwellerGUIDs.erase(data); - else if (type == DATA_STATUE_ACTIVATE) + if (type == DATA_STATUE_ACTIVATE) { toActivate = data; timer = 3500; @@ -353,8 +364,6 @@ public: return m_auiEncounter[3]; case DATA_ECK_THE_FEROCIOUS_EVENT: return m_auiEncounter[4]; - case DATA_ALIVE_RUIN_DWELLERS: - return DwellerGUIDs.size(); } return 0; -- cgit v1.2.3 From b35edcabb6023683a3459112ce76214cad095277 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Thu, 11 Sep 2014 03:25:15 -0300 Subject: Scripts/AV: Drekthar updated to EventMaps --- .../AlteracValley/boss_drekthar.cpp | 130 +++++++++++---------- 1 file changed, 66 insertions(+), 64 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 49c5a61b7d0..d9b0c1490b5 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -30,12 +30,21 @@ enum Spells SPELL_STORMPIKE = 51876 // not sure }; -enum Yells +enum Texts { - YELL_AGGRO = 0, - YELL_EVADE = 1, - YELL_RESPAWN = 2, - YELL_RANDOM = 3 + SAY_AGGRO = 0, + SAY_EVADE = 1, + SAY_RESPAWN = 2, + SAY_RANDOM = 3 +}; + +enum Events +{ + EVENT_WHIRLWIND = 1, + EVENT_WHIRLWIND2, + EVENT_KNOCKDOWN, + EVENT_FRENZY, + EVENT_RANDOM_YELL }; class boss_drekthar : public CreatureScript @@ -45,92 +54,85 @@ public: struct boss_drektharAI : public ScriptedAI { - boss_drektharAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - } - - void Initialize() - { - WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - KnockdownTimer = 12 * IN_MILLISECONDS; - FrenzyTimer = 6 * IN_MILLISECONDS; - ResetTimer = 5 * IN_MILLISECONDS; - YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds - } - - uint32 WhirlwindTimer; - uint32 Whirlwind2Timer; - uint32 KnockdownTimer; - uint32 FrenzyTimer; - uint32 YellTimer; - uint32 ResetTimer; + boss_drektharAI(Creature* creature) : ScriptedAI(creature) { } void Reset() override { - Initialize(); + events.Reset(); } void EnterCombat(Unit* /*who*/) override { - Talk(YELL_AGGRO); + Talk(SAY_AGGRO); + events.ScheduleEvent(EVENT_WHIRLWIND, urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_WHIRLWIND2, urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_KNOCKDOWN, 12 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_FRENZY, 6 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_RANDOM_YELL, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS)); //20 to 30 seconds } void JustRespawned() override { Reset(); - Talk(YELL_RESPAWN); + Talk(SAY_RESPAWN); } - void UpdateAI(uint32 diff) override + bool CheckInRoom() { - if (!UpdateVictim()) - return; - - if (WhirlwindTimer <= diff) + if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50) { - DoCastVictim(SPELL_WHIRLWIND); - WhirlwindTimer = urand(8 * IN_MILLISECONDS, 18 * IN_MILLISECONDS); - } else WhirlwindTimer -= diff; + EnterEvadeMode(); + Talk(SAY_EVADE); + return false; + } - if (Whirlwind2Timer <= diff) - { - DoCastVictim(SPELL_WHIRLWIND2); - Whirlwind2Timer = urand(7 * IN_MILLISECONDS, 25 * IN_MILLISECONDS); - } else Whirlwind2Timer -= diff; + return true; + } - if (KnockdownTimer <= diff) - { - DoCastVictim(SPELL_KNOCKDOWN); - KnockdownTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); - } else KnockdownTimer -= diff; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim() || !CheckInRoom()) + return; - if (FrenzyTimer <= diff) - { - DoCastVictim(SPELL_FRENZY); - FrenzyTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); - } else FrenzyTimer -= diff; + events.Update(diff); - if (YellTimer <= diff) - { - Talk(YELL_RANDOM); - YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds - } else YellTimer -= diff; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - // check if creature is not outside of building - if (ResetTimer <= diff) + while (uint32 eventId = events.ExecuteEvent()) { - if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50) + switch (eventId) { - EnterEvadeMode(); - Talk(YELL_EVADE); + case EVENT_WHIRLWIND: + DoCastVictim(SPELL_WHIRLWIND); + events.ScheduleEvent(EVENT_WHIRLWIND, urand(8 * IN_MILLISECONDS, 18 * IN_MILLISECONDS)); + break; + case EVENT_WHIRLWIND2: + DoCastVictim(SPELL_WHIRLWIND2); + events.ScheduleEvent(EVENT_WHIRLWIND2, urand(7 * IN_MILLISECONDS, 25 * IN_MILLISECONDS)); + break; + case EVENT_KNOCKDOWN: + DoCastVictim(SPELL_KNOCKDOWN); + events.ScheduleEvent(EVENT_KNOCKDOWN, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS)); + break; + case EVENT_FRENZY: + DoCastVictim(SPELL_FRENZY); + events.ScheduleEvent(EVENT_FRENZY, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS)); + break; + case EVENT_RANDOM_YELL: + Talk(SAY_RANDOM); + events.ScheduleEvent(EVENT_RANDOM_YELL, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS)); + break; + default: + break; } - ResetTimer = 5 * IN_MILLISECONDS; - } else ResetTimer -= diff; + } DoMeleeAttackIfReady(); } + + private: + EventMap events; }; CreatureAI* GetAI(Creature* creature) const override -- cgit v1.2.3 From 1e3aa97098bb04e8f1312dc40e692d1a2f90b5ae Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 11 Sep 2014 15:12:28 +0200 Subject: Scripts/Misc: some small changes after recent commits --- .../EasternKingdoms/AlteracValley/boss_balinda.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_jandice_barov.cpp | 4 ++-- .../Scholomance/boss_ras_frostwhisper.cpp | 2 +- .../scripts/EasternKingdoms/Scholomance/boss_vectus.cpp | 1 - src/server/scripts/Northrend/Gundrak/boss_eck.cpp | 17 ++++++++--------- .../scripts/Northrend/Gundrak/instance_gundrak.cpp | 4 ++-- .../Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp | 3 +-- .../HellfireCitadel/BloodFurnace/boss_broggok.cpp | 1 - 8 files changed, 15 insertions(+), 19 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index ca46ff36079..651e487522d 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -72,7 +72,7 @@ public: void Reset() override { Initialize(); - + events.Reset(); summons.DespawnAll(); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index b218e3f2978..c5f7a5da6d7 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -21,7 +21,7 @@ enum Spells { SPELL_CURSE_OF_BLOOD = 24673, - SPELL_ILLUSION = 17773, + SPELL_ILLUSION = 17773 }; enum Events @@ -113,7 +113,7 @@ public: CreatureAI* GetAI(Creature* creature) const override { - return new boss_jandicebarovAI(creature); + return GetInstanceAI(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp index 897799a708c..348e2212870 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp @@ -81,7 +81,7 @@ public: events.ScheduleEvent(EVENT_ICE_ARMOR, 180000); break; case EVENT_FROSTBOLT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) DoCast(target, SPELL_FROSTBOLT); events.ScheduleEvent(EVENT_FROSTBOLT, 8000); break; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp index 792649f2998..dcb212eead8 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp @@ -106,7 +106,6 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const override { return new boss_vectusAI(creature); diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index 4803cb4934f..9f8cc818958 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -44,6 +44,11 @@ public: struct boss_eckAI : public BossAI { boss_eckAI(Creature* creature) : BossAI(creature, DATA_ECK_THE_FEROCIOUS_EVENT) + { + Initialize(); + } + + void Initialize() { Berserk = false; } @@ -51,7 +56,7 @@ public: void Reset() override { _Reset(); - Berserk = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -85,9 +90,8 @@ public: events.ScheduleEvent(EVENT_SPIT, urand(6 * IN_MILLISECONDS, 14 * IN_MILLISECONDS)); break; case EVENT_SPRING: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) - if (target->GetTypeId() == TYPEID_PLAYER) - DoCast(target, RAND(SPELL_ECK_SPRING_1, SPELL_ECK_SPRING_2)); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 35.0f, true)) + DoCast(target, RAND(SPELL_ECK_SPRING_1, SPELL_ECK_SPRING_2)); events.ScheduleEvent(EVENT_SPRING, urand(5 * IN_MILLISECONDS, 10 * IN_MILLISECONDS)); break; case EVENT_BERSERK: @@ -99,11 +103,6 @@ public: } } - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - } - private: bool Berserk; }; diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index ee3069b5eb2..388d43e8dca 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -31,7 +31,7 @@ 4 - Eck the Ferocious */ -static Position EckSpawnPoint = {1643.877930f, 936.278015f, 107.204948f, 0.668432f}; +Position const EckSpawnPoint = { 1643.877930f, 936.278015f, 107.204948f, 0.668432f }; class instance_gundrak : public InstanceMapScript { @@ -136,7 +136,7 @@ public: memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - bool IsEncounterInProgress() const override + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp index d9a66f7b420..8bc0ba1722a 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp @@ -39,7 +39,6 @@ enum Events EVENT_DARK_SHELL }; - class boss_pandemonius : public CreatureScript { public: @@ -81,7 +80,7 @@ public: switch (eventId) { case EVENT_VOID_BLAST: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) { DoCast(target, SPELL_VOID_BLAST); ++VoidBlastCounter; diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index bd16fe9edd2..15c660b4ad7 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -114,7 +114,6 @@ class boss_broggok : public CreatureScript break; } } - }; CreatureAI* GetAI(Creature* creature) const override -- cgit v1.2.3 From 4331c714d75ed43613ca3d6a791de8e2dcba7127 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 11 Sep 2014 20:46:00 +0100 Subject: Remove a Gossip Script which is already in DB Remove script for Khadgar all of the gossip menus and options are already in db and this is only a gossip script, will deal with db stuff in next commit --- src/server/scripts/Outland/zone_shattrath_city.cpp | 71 +--------------------- 1 file changed, 1 insertion(+), 70 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 9a62cde005c..6d7261551e3 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -30,7 +30,6 @@ npc_shattrathflaskvendors npc_zephyr npc_kservant npc_ishanah -npc_khadgar EndContentData */ #include "ScriptMgr.h" @@ -469,73 +468,6 @@ public: } }; -/*###### -# npc_khadgar -######*/ - -#define KHADGAR_GOSSIP_1 "I've heard your name spoken only in whispers, mage. Who are you?" -#define KHADGAR_GOSSIP_2 "Go on, please." -#define KHADGAR_GOSSIP_3 "I see." //6th too this -#define KHADGAR_GOSSIP_4 "What did you do then?" -#define KHADGAR_GOSSIP_5 "What happened next?" -#define KHADGAR_GOSSIP_7 "There was something else I wanted to ask you." - -class npc_khadgar : public CreatureScript -{ -public: - npc_khadgar() : CreatureScript("npc_khadgar") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(9876, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); - player->SEND_GOSSIP_MENU(9877, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); - player->SEND_GOSSIP_MENU(9878, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+4: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); - player->SEND_GOSSIP_MENU(9879, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+5: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); - player->SEND_GOSSIP_MENU(9880, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+6: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7); - player->SEND_GOSSIP_MENU(9881, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+7: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(9243, creature->GetGUID()); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(10211) != QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, KHADGAR_GOSSIP_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(9243, creature->GetGUID()); - - return true; - } -}; - void AddSC_shattrath_city() { new npc_raliq_the_drunk(); @@ -544,5 +476,4 @@ void AddSC_shattrath_city() new npc_zephyr(); new npc_kservant(); new npc_ishanah(); - new npc_khadgar(); -} + } -- cgit v1.2.3 From cec2cc806b418997f387bf1324454b7b76b9f0fa Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 11 Sep 2014 20:50:37 +0100 Subject: a correction --- src/server/scripts/Outland/zone_shattrath_city.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 6d7261551e3..d94c97f1487 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -476,4 +476,4 @@ void AddSC_shattrath_city() new npc_zephyr(); new npc_kservant(); new npc_ishanah(); - } +-} -- cgit v1.2.3 From dd687592ca810e03e4adf88dc3ad9a3302d337d9 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Thu, 11 Sep 2014 21:54:10 +0200 Subject: Core: Fix typo in cec2cc806b418997f387bf1324454b7b76b9f0fa --- src/server/scripts/Outland/zone_shattrath_city.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index d94c97f1487..c2e7df19ca1 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -476,4 +476,4 @@ void AddSC_shattrath_city() new npc_zephyr(); new npc_kservant(); new npc_ishanah(); --} +} -- cgit v1.2.3 From cc00d2f181e74b6e9e0faa6241a9017435cbca8a Mon Sep 17 00:00:00 2001 From: MitchesD Date: Fri, 12 Sep 2014 14:18:42 +0200 Subject: Scripts/CoS: implemented Infinite Corruptor, improvements in instance script and Meathook converted to BossAI Guardian of Time should have some text, but I have not found anything in sniff. Also the whole event needs to be rewritten and improved. --- sql/updates/world/2014_09_12_02_world_misc.sql | 9 + .../CullingOfStratholme/boss_chrono_lord_epoch.cpp | 6 +- .../boss_infinite_corruptor.cpp | 98 ++++--- .../CullingOfStratholme/boss_mal_ganis.cpp | 18 +- .../CullingOfStratholme/boss_meathook.cpp | 142 ++++------- .../boss_salramm_the_fleshcrafter.cpp | 6 +- .../CullingOfStratholme/culling_of_stratholme.cpp | 129 ++++++---- .../CullingOfStratholme/culling_of_stratholme.h | 70 +++-- .../instance_culling_of_stratholme.cpp | 282 ++++++++++++--------- 9 files changed, 417 insertions(+), 343 deletions(-) create mode 100644 sql/updates/world/2014_09_12_02_world_misc.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2014_09_12_02_world_misc.sql b/sql/updates/world/2014_09_12_02_world_misc.sql new file mode 100644 index 00000000000..535ecb90367 --- /dev/null +++ b/sql/updates/world/2014_09_12_02_world_misc.sql @@ -0,0 +1,9 @@ +DELETE FROM `creature_text` WHERE `entry`=26527; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(26527, 0, 0, 'Oh, no! Adventurers, something awful has happened! A colleague of mine has been captured by the Infinite Dragonflight, and they''re doing something horrible to him! Keeping Arthas is still your highest priority, but if you act fast you could help save a Guardian of Time!', 15, 0, 100, 0, 0, 0, 'Chromie', 32670), +(26527, 1, 0, 'Adventurers, you must hurry! The Guardian of Time cannot last for much longer!', 15, 0, 100, 0, 0, 0, 'Chromie', 32678), +(26527, 2, 0, 'I can barely sense the Guardian of Time! His timeline is fading quickly!', 15, 0, 100, 0, 0, 0, 'Chromie', 32679); + +DELETE FROM `conditions` WHERE `SourceEntry`=60422; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `Comment`) VALUES +(13, 1, 60422, 0, 0, 31, 1, 3, 32281, 0, 0, 0, 0, 'Corruption of Time (60422) can hit only Guardian of Time'); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index 0a666488e84..fa87247f19f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -87,14 +87,14 @@ public: { Initialize(); - instance->SetData(DATA_EPOCH_EVENT, NOT_STARTED); + instance->SetBossState(DATA_EPOCH, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_EPOCH_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_EPOCH, IN_PROGRESS); } void UpdateAI(uint32 diff) override @@ -136,7 +136,7 @@ public: { Talk(SAY_DEATH); - instance->SetData(DATA_EPOCH_EVENT, DONE); + instance->SetBossState(DATA_EPOCH, DONE); } void KilledUnit(Unit* victim) override diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index f3333c0b0b6..d693ec38e44 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -22,7 +22,9 @@ enum Spells { SPELL_CORRUPTING_BLIGHT = 60588, - SPELL_VOID_STRIKE = 60590 + SPELL_VOID_STRIKE = 60590, + SPELL_CORRUPTION_OF_TIME_CHANNEL = 60422, + SPELL_CORRUPTION_OF_TIME_TARGET = 60451 }; enum Yells @@ -32,52 +34,78 @@ enum Yells SAY_FAIL = 2 }; -class boss_infinite_corruptor : public CreatureScript +enum Events { -public: - boss_infinite_corruptor() : CreatureScript("boss_infinite_corruptor") { } + EVENT_CORRUPTING_BLIGHT = 1, + EVENT_VOID_STRIKE +}; - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI(creature); - } +class boss_infinite_corruptor : public CreatureScript +{ + public: + boss_infinite_corruptor() : CreatureScript("boss_infinite_corruptor") { } - struct boss_infinite_corruptorAI : public ScriptedAI - { - boss_infinite_corruptorAI(Creature* creature) : ScriptedAI(creature) + struct boss_infinite_corruptorAI : public BossAI { - instance = creature->GetInstanceScript(); - } + boss_infinite_corruptorAI(Creature* creature) : BossAI(creature, DATA_INFINITE) { } - InstanceScript* instance; + void Reset() override + { + _Reset(); - void Reset() override - { - instance->SetData(DATA_INFINITE_EVENT, NOT_STARTED); - } + if (Creature* guardian = me->FindNearestCreature(NPC_GUARDIAN_OF_TIME, 100.0f)) + { + DoCast((Unit*)NULL, SPELL_CORRUPTION_OF_TIME_CHANNEL, false); + guardian->CastSpell(guardian, SPELL_CORRUPTION_OF_TIME_TARGET, false); + } + } - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - instance->SetData(DATA_INFINITE_EVENT, IN_PROGRESS); - } + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _EnterCombat(); + events.ScheduleEvent(EVENT_CORRUPTING_BLIGHT, 7000); + events.ScheduleEvent(EVENT_VOID_STRIKE, 5000); + } - void UpdateAI(uint32 /*diff*/) override - { - //Return since we have no target - if (!UpdateVictim()) - return; + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); - DoMeleeAttackIfReady(); - } + if (Creature* guardian = me->FindNearestCreature(NPC_GUARDIAN_OF_TIME, 100.0f)) + { + guardian->RemoveAurasDueToSpell(SPELL_CORRUPTION_OF_TIME_TARGET); + guardian->DespawnOrUnsummon(5000); + } - void JustDied(Unit* /*killer*/) override + if (Creature* rift = me->FindNearestCreature(NPC_TIME_RIFT, 100.0f)) + rift->DespawnOrUnsummon(); + } + + void ExecuteEvent(uint32 eventId) override + { + switch (eventId) + { + case EVENT_CORRUPTING_BLIGHT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true)) + DoCast(target, SPELL_CORRUPTING_BLIGHT); + events.ScheduleEvent(EVENT_CORRUPTING_BLIGHT, 17000); + break; + case EVENT_VOID_STRIKE: + DoCastVictim(SPELL_VOID_STRIKE); + events.ScheduleEvent(EVENT_VOID_STRIKE, 5000); + break; + default: + break; + } + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - Talk(SAY_DEATH); - instance->SetData(DATA_INFINITE_EVENT, DONE); + return GetInstanceAI(creature); } - }; - }; void AddSC_boss_infinite_corruptor() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index d9356b724c0..3d1e9363cd8 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -26,15 +26,13 @@ Script Data End */ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "culling_of_stratholme.h" +#include "Player.h" enum Spells { SPELL_CARRION_SWARM = 52720, //A cresting wave of chaotic magic splashes over enemies in front of the caster, dealing 3230 to 3570 Shadow damage and 380 to 420 Shadow damage every 3 sec. for 15 sec. - H_SPELL_CARRION_SWARM = 58852, SPELL_MIND_BLAST = 52722, //Inflicts 4163 to 4837 Shadow damage to an enemy. - H_SPELL_MIND_BLAST = 58850, SPELL_SLEEP = 52721, //Puts an enemy to sleep for up to 10 sec. Any damage caused will awaken the target. - H_SPELL_SLEEP = 58849, SPELL_VAMPIRIC_TOUCH = 52723, //Heals the caster for half the damage dealt by a melee attack. SPELL_MAL_GANIS_KILL_CREDIT = 58124, // Quest credit SPELL_KILL_CREDIT = 58630 // Non-existing spell as encounter credit, created in spell_dbc @@ -75,7 +73,6 @@ public: { Initialize(); instance = creature->GetInstanceScript(); - uiOutroStep = 0; } void Initialize() @@ -108,14 +105,13 @@ public: void Reset() override { Initialize(); - - instance->SetData(DATA_MAL_GANIS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_MAL_GANIS, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_MAL_GANIS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_MAL_GANIS, IN_PROGRESS); } void DamageTaken(Unit* done_by, uint32 &damage) override @@ -159,7 +155,7 @@ public: { EnterEvadeMode(); me->DisappearAndDie(); - instance->SetData(DATA_MAL_GANIS_EVENT, FAIL); + instance->SetBossState(DATA_MAL_GANIS, FAIL); } if (uiCarrionSwarmTimer < diff) @@ -197,7 +193,7 @@ public: switch (uiOutroStep) { case 1: - Talk(SAY_ESCAPE_SPEECH_1); + Talk(SAY_OUTRO); me->GetMotionMaster()->MoveTargetedHome(); ++uiOutroStep; uiOutroTimer = 8000; @@ -212,7 +208,7 @@ public: case 3: Talk(SAY_OUTRO); ++uiOutroStep; - uiOutroTimer = 16000; + //uiOutroTimer = 16000; break; case 4: me->HandleEmoteCommand(33); @@ -232,7 +228,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(DATA_MAL_GANIS_EVENT, DONE); + instance->SetBossState(DATA_MAL_GANIS, DONE); DoCastAOE(SPELL_MAL_GANIS_KILL_CREDIT); // give achievement credit and LFG rewards to players. criteria use spell 58630 which doesn't exist, but it was created in spell_dbc DoCastAOE(SPELL_KILL_CREDIT); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index c961bf9b2c6..143f901ec0b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -15,14 +15,6 @@ * with this program. If not, see . */ -/* Script Data Start -SDName: Boss meathook -SDAuthor: Tartalo -SD%Complete: 100 -SDComment: It may need timer adjustment -SDCategory: -Script Data End */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "culling_of_stratholme.h" @@ -30,9 +22,7 @@ Script Data End */ enum Spells { SPELL_CONSTRICTING_CHAINS = 52696, //Encases the targets in chains, dealing 1800 Physical damage every 1 sec. and stunning the target for 5 sec. - H_SPELL_CONSTRICTING_CHAINS = 58823, SPELL_DISEASE_EXPULSION = 52666, //Meathook belches out a cloud of disease, dealing 1710 to 1890 Nature damage and interrupting the spell casting of nearby enemy targets for 4 sec. - H_SPELL_DISEASE_EXPULSION = 58824, SPELL_FRENZY = 58841 //Increases the caster's Physical damage by 10% for 30 sec. }; @@ -44,96 +34,72 @@ enum Yells SAY_DEATH = 3 }; -class boss_meathook : public CreatureScript +enum Events { -public: - boss_meathook() : CreatureScript("boss_meathook") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI(creature); - } - - struct boss_meathookAI : public ScriptedAI - { - boss_meathookAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = creature->GetInstanceScript(); - Talk(SAY_SPAWN); - } - - void Initialize() - { - uiChainTimer = urand(12000, 17000); //seen on video 13, 17, 15, 12, 16 - uiDiseaseTimer = urand(2000, 4000); //approx 3s - uiFrenzyTimer = urand(21000, 26000); //made it up - } - - uint32 uiChainTimer; - uint32 uiDiseaseTimer; - uint32 uiFrenzyTimer; - - InstanceScript* instance; - - void Reset() override - { - Initialize(); - - instance->SetData(DATA_MEATHOOK_EVENT, NOT_STARTED); - } - - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); + EVENT_CHAIN = 1, + EVENT_DISEASE, + EVENT_FRENZY +}; - instance->SetData(DATA_MEATHOOK_EVENT, IN_PROGRESS); - } +class boss_meathook : public CreatureScript +{ + public: + boss_meathook() : CreatureScript("boss_meathook") { } - void UpdateAI(uint32 diff) override + struct boss_meathookAI : public BossAI { - //Return since we have no target - if (!UpdateVictim()) - return; - - if (uiDiseaseTimer <= diff) + boss_meathookAI(Creature* creature) : BossAI(creature, DATA_MEATHOOK) { - DoCastAOE(SPELL_DISEASE_EXPULSION); - uiDiseaseTimer = urand(1500, 4000); - } else uiDiseaseTimer -= diff; + Talk(SAY_SPAWN); + } - if (uiFrenzyTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCast(me, SPELL_FRENZY); - uiFrenzyTimer = urand(21000, 26000); - } else uiFrenzyTimer -= diff; - - if (uiChainTimer <= diff) + Talk(SAY_AGGRO); + _EnterCombat(); + events.ScheduleEvent(EVENT_CHAIN, urand(12000, 17000)); + events.ScheduleEvent(EVENT_DISEASE, urand(2000, 4000)); + events.ScheduleEvent(EVENT_FRENZY, urand(21000, 26000)); + } + + void ExecuteEvent(uint32 eventId) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CONSTRICTING_CHAINS); //anyone but the tank - uiChainTimer = urand(2000, 4000); - } else uiChainTimer -= diff; - - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); + switch (eventId) + { + case EVENT_CHAIN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_CONSTRICTING_CHAINS); + events.ScheduleEvent(EVENT_CHAIN, urand(2000, 4000)); + case EVENT_DISEASE: + DoCastAOE(SPELL_DISEASE_EXPULSION); + events.ScheduleEvent(EVENT_DISEASE, urand(1500, 4000)); + break; + case EVENT_FRENZY: + DoCast(me, SPELL_FRENZY); + events.ScheduleEvent(EVENT_FRENZY, urand(21000, 26000)); + break; + default: + break; + } + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); + } - instance->SetData(DATA_MEATHOOK_EVENT, DONE); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + }; - void KilledUnit(Unit* victim) override + CreatureAI* GetAI(Creature* creature) const override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + return GetInstanceAI(creature); } - }; - }; void AddSC_boss_meathook() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp index 1c35a38a5e3..6925badf272 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp @@ -89,14 +89,14 @@ public: { Initialize(); - instance->SetData(DATA_SALRAMM_EVENT, NOT_STARTED); + instance->SetBossState(DATA_SALRAMM, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_SALRAMM_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_SALRAMM, IN_PROGRESS); } void UpdateAI(uint32 diff) override @@ -145,7 +145,7 @@ public: { Talk(SAY_DEATH); - instance->SetData(DATA_SALRAMM_EVENT, DONE); + instance->SetBossState(DATA_SALRAMM, DONE); } void KilledUnit(Unit* victim) override diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index b8a9b295161..3c80be2734a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -103,7 +103,7 @@ enum Says //Drakonian SAY_PHASE302 = 0, - SAY_PHASE305 = 1, + SAY_PHASE305 = 1 }; enum NPCs @@ -111,7 +111,6 @@ enum NPCs NPC_INFINITE_ADVERSARY = 27742, NPC_INFINITE_HUNTER = 27743, NPC_INFINITE_AGENT = 27744, - NPC_TIME_RIFT = 28409, NPC_ZOMBIE = 27737, NPC_GHOUL = 28249, NPC_NECROMANCER = 28200, @@ -128,7 +127,7 @@ enum NPCs NPC_CITY_MAN = 28167, NPC_CITY_MAN2 = 28169, NPC_CITY_MAN3 = 31126, - NPC_CITY_MAN4 = 31127, + NPC_CITY_MAN4 = 31127 }; enum Spells @@ -138,7 +137,7 @@ enum Spells SPELL_EXORCISM_N = 52445, SPELL_EXORCISM_H = 58822, SPELL_HOLY_LIGHT = 52444, - SPELL_ARCANE_DISRUPTION = 49590, + SPELL_ARCANE_DISRUPTION = 49590 }; enum GossipMenuArthas @@ -392,6 +391,7 @@ public: uint32 gossipStep; uint32 bossEvent; uint32 wave; + uint32 WavesCounter; uint64 utherGUID; uint64 jainaGUID; @@ -411,17 +411,19 @@ public: { Initialize(); - instance->SetData(DATA_ARTHAS_EVENT, NOT_STARTED); - switch (instance->GetData(DATA_ARTHAS_EVENT)) - { - case NOT_STARTED: - bStepping = true; - step = 0; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - bossEvent = DATA_MEATHOOK_EVENT; - gossipStep = 0; - break; - } + instance->SetBossState(DATA_ARTHAS, NOT_STARTED); + + bStepping = true; + step = 0; + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + bossEvent = DATA_MEATHOOK; + gossipStep = 0; + } + + void AttackStart(Unit* who) + { + if (who && !who->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + npc_escortAI::AttackStart(who); } void EnterCombat(Unit* /*who*/) override @@ -431,7 +433,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(DATA_ARTHAS_EVENT, FAIL); + instance->SetBossState(DATA_ARTHAS, FAIL); } void SpawnTimeRift(uint32 timeRiftID, uint64* guidVector) @@ -488,16 +490,15 @@ public: case 11: case 22: case 23: - case 26: case 55: case 56: SetHoldState(true); bStepping = true; break; case 7: - if (Unit* cityman0 = me->SummonCreature(NPC_CITY_MAN, 2091.977f, 1275.021f, 140.757f, 0.558f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000)) + if (Unit* cityman0 = me->FindNearestCreature(NPC_CITY_MAN, 160.0f)) citymenGUID[0] = cityman0->GetGUID(); - if (Unit* cityman1 = me->SummonCreature(NPC_CITY_MAN2, 2093.514f, 1275.842f, 140.408f, 3.801f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000)) + if (Unit* cityman1 = me->FindNearestCreature(NPC_CITY_MAN2, 160.0f)) citymenGUID[1] = cityman1->GetGUID(); break; case 8: @@ -534,10 +535,12 @@ public: case 21: Talk(SAY_PHASE301); break; - case 25: + case 26: SetRun(false); SpawnTimeRift(0, &infiniteDraconianGUID[0]); Talk(SAY_PHASE307); + SetHoldState(true); + bStepping = true; break; case 29: SetRun(false); @@ -565,8 +568,8 @@ public: Talk(SAY_PHASE403); break; case 36: - if (GameObject* pGate = instance->instance->GetGameObject(instance->GetData64(DATA_SHKAF_GATE))) - pGate->SetGoState(GO_STATE_ACTIVE); + if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_SHKAF_GATE))) + gate->SetGoState(GO_STATE_ACTIVE); break; case 45: SetRun(true); @@ -575,18 +578,18 @@ public: me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); SetHoldState(true); break; - case 47: + case 48: SetRun(false); Talk(SAY_PHASE405); break; - case 48: + case 49: SetRun(true); Talk(SAY_PHASE406); break; - case 53: + case 50: Talk(SAY_PHASE407); break; - case 54: + case 51: gossipStep = 5; me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); SetHoldState(true); @@ -598,8 +601,6 @@ public: { npc_escortAI::UpdateAI(diff); - DoMeleeAttackIfReady(); - if (bStepping) { if (phaseTimer <= diff) @@ -765,6 +766,9 @@ public: stalkerGUID = pStalker->GetGUID(); me->SetTarget(stalkerGUID); } + + instance->DoUpdateWorldState(WORLDSTATE_WAVE_COUNT, 0); + JumpToNextStep(1000); break; case 25: @@ -892,14 +896,15 @@ public: } Talk(SAY_PHASE209); - bossEvent = DATA_MEATHOOK_EVENT; - instance->SetData(DATA_ARTHAS_EVENT, IN_PROGRESS); + bossEvent = DATA_MEATHOOK; + instance->SetBossState(DATA_ARTHAS, IN_PROGRESS); me->SetReactState(REACT_DEFENSIVE); SetDespawnAtFar(false); JumpToNextStep(5000); break; - case 41: //Summon wave group + // Summon wave groups - start the Infinite Corruptor timer + case 41: case 43: case 45: case 47: @@ -907,10 +912,15 @@ public: case 53: case 55: case 57: - if (instance->GetData(bossEvent) != DONE) + if (!wave && IsHeroic() && instance->GetData(DATA_INFINITE_COUNTER) == NOT_STARTED) + instance->SetData(DATA_INFINITE_COUNTER, IN_PROGRESS); + + if (instance->GetBossState(bossEvent) != DONE) { SpawnWaveGroup(wave, waveGUID); wave++; + WavesCounter++; + instance->DoUpdateWorldState(WORLDSTATE_WAVE_COUNT, WavesCounter); } JumpToNextStep(500); break; @@ -922,7 +932,7 @@ public: case 54: case 56: case 58: - if (instance->GetData(bossEvent) != DONE) + if (instance->GetBossState(bossEvent) != DONE) { uint32 mobCounter = 0; uint32 deadCounter = 0; @@ -946,12 +956,14 @@ public: break; case 49: //Summon Boss case 59: - if (instance->GetData(bossEvent) != DONE) + if (instance->GetBossState(bossEvent) != DONE) { + WavesCounter++; + instance->DoUpdateWorldState(WORLDSTATE_WAVE_COUNT, WavesCounter); uint32 uiBossID = 0; - if (bossEvent == DATA_MEATHOOK_EVENT) + if (bossEvent == DATA_MEATHOOK) uiBossID = NPC_MEATHOOK; - else if (bossEvent == DATA_SALRAMM_EVENT) + else if (bossEvent == DATA_SALRAMM) uiBossID = NPC_SALRAMM; if (Unit* pBoss = me->SummonCreature(uiBossID, 2232.19f, 1331.933f, 126.662f, 3.15f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900000)) @@ -965,19 +977,19 @@ public: break; case 50: //Wait Boss death case 60: - if (instance->GetData(bossEvent) == DONE) + if (instance->GetBossState(bossEvent) == DONE) { JumpToNextStep(1000); - if (bossEvent == DATA_MEATHOOK_EVENT) - bossEvent = DATA_SALRAMM_EVENT; - else if (bossEvent == DATA_SALRAMM_EVENT) + if (bossEvent == DATA_MEATHOOK) + bossEvent = DATA_SALRAMM; + else if (bossEvent == DATA_SALRAMM) { SetHoldState(false); bStepping = false; - bossEvent = DATA_EPOCH_EVENT; + bossEvent = DATA_EPOCH; } } - else if (instance->GetData(bossEvent) == FAIL) + else if (instance->GetBossState(bossEvent) == FAIL) npc_escortAI::EnterEvadeMode(); else phaseTimer = 10000; @@ -1074,9 +1086,12 @@ public: phaseTimer = 1000; else { - if (step == 72) Talk(SAY_PHASE308); - if (step == 74) Talk(SAY_PHASE308); - if (step == 76) Talk(SAY_PHASE310); + if (step == 72) + Talk(SAY_PHASE308); + if (step == 74) + Talk(SAY_PHASE308); + if (step == 76) + Talk(SAY_PHASE310); SetHoldState(false); bStepping = false; SetRun(true); @@ -1097,7 +1112,7 @@ public: JumpToNextStep(1000); break; case 80: - if (instance->GetData(DATA_EPOCH_EVENT) != DONE) + if (instance->GetBossState(DATA_EPOCH) != DONE) { SpawnTimeRift(17, &epochGUID); if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID)) @@ -1107,12 +1122,12 @@ public: JumpToNextStep(18000); break; case 81: - if (instance->GetData(DATA_EPOCH_EVENT) != DONE) + if (instance->GetBossState(DATA_EPOCH) != DONE) Talk(SAY_PHASE315); JumpToNextStep(6000); break; case 82: - if (instance->GetData(DATA_EPOCH_EVENT) != DONE) + if (instance->GetBossState(DATA_EPOCH) != DONE) { if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID)) { @@ -1126,15 +1141,15 @@ public: JumpToNextStep(1000); break; case 83: - if (instance->GetData(DATA_EPOCH_EVENT) == DONE) + if (instance->GetBossState(DATA_EPOCH) == DONE) { gossipStep = 3; me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); bStepping = false; - bossEvent = DATA_MAL_GANIS_EVENT; + bossEvent = DATA_MAL_GANIS; JumpToNextStep(15000); } - else if (instance->GetData(DATA_EPOCH_EVENT) == FAIL) + else if (instance->GetBossState(DATA_EPOCH) == FAIL) npc_escortAI::EnterEvadeMode(); else phaseTimer = 10000; @@ -1153,8 +1168,8 @@ public: malganisGUID = malganis->GetGUID(); malganis->SetReactState(REACT_PASSIVE); } - if (GameObject* pGate = instance->instance->GetGameObject(instance->GetData64(DATA_MAL_GANIS_GATE_1))) - pGate->SetGoState(GO_STATE_ACTIVE); + if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MAL_GANIS_GATE_1))) + gate->SetGoState(GO_STATE_ACTIVE); SetHoldState(false); bStepping = false; JumpToNextStep(0); @@ -1174,12 +1189,12 @@ public: JumpToNextStep(1000); break; case 88: - if (instance->GetData(DATA_MAL_GANIS_EVENT) == DONE) + if (instance->GetBossState(DATA_MAL_GANIS) == DONE) { SetHoldState(false); JumpToNextStep(1000); } - else if (instance->GetData(DATA_MAL_GANIS_EVENT) == FAIL) + else if (instance->GetBossState(DATA_MAL_GANIS) == FAIL) npc_escortAI::EnterEvadeMode(); else phaseTimer = 10000; @@ -1192,7 +1207,7 @@ public: JumpToNextStep(7000); break; case 90: - instance->SetData(DATA_ARTHAS_EVENT, DONE); //Rewards: Achiev & Chest ;D + instance->SetBossState(DATA_ARTHAS, DONE); //Rewards: Achiev & Chest ;D me->SetTarget(instance->GetData64(DATA_MAL_GANIS_GATE_2)); //Look behind Talk(SAY_PHASE504); bStepping = false; @@ -1214,6 +1229,8 @@ public: if (HealthBelowPct(40)) DoCast(me, SPELL_HOLY_LIGHT); + + DoMeleeAttackIfReady(); } }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h index e7d1033e55f..192654c87f1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h @@ -19,19 +19,10 @@ #define DEF_CULLING_OF_STRATHOLME_H #define DataHeader "CS" +#define CoSScriptName "instance_culling_of_stratholme" +uint32 const EncounterCount = 5; -enum Data -{ - DATA_MEATHOOK_EVENT, - DATA_SALRAMM_EVENT, - DATA_EPOCH_EVENT, - DATA_MAL_GANIS_EVENT, - DATA_INFINITE_EVENT, - DATA_ARTHAS_EVENT, - DATA_CRATE_COUNT, -}; - -enum Data64 +enum DataTypes { DATA_ARTHAS, DATA_MEATHOOK, @@ -39,28 +30,35 @@ enum Data64 DATA_EPOCH, DATA_MAL_GANIS, DATA_INFINITE, + DATA_CRATE_COUNT, DATA_SHKAF_GATE, DATA_MAL_GANIS_GATE_1, DATA_MAL_GANIS_GATE_2, DATA_EXIT_GATE, - DATA_MAL_GANIS_CHEST + DATA_MAL_GANIS_CHEST, + DATA_INFINITE_COUNTER }; -enum Creatures +enum CreatureIds { - NPC_MEATHOOK = 26529, - NPC_SALRAMM = 26530, - NPC_EPOCH = 26532, - NPC_MAL_GANIS = 26533, - NPC_INFINITE = 32273, - NPC_ARTHAS = 26499, - NPC_JAINA = 26497, - NPC_UTHER = 26528, - NPC_CHROMIE_2 = 27915, - NPC_GENERIC_BUNNY = 28960, + NPC_MEATHOOK = 26529, + NPC_SALRAMM = 26530, + NPC_EPOCH = 26532, + NPC_MAL_GANIS = 26533, + NPC_INFINITE = 32273, + NPC_ARTHAS = 26499, + NPC_JAINA = 26497, + NPC_UTHER = 26528, + NPC_CHROMIE = 26527, + NPC_CHROMIE_2 = 27915, + NPC_CHROMIE_3 = 30997, + NPC_GENERIC_BUNNY = 28960, + + NPC_TIME_RIFT = 28409, + NPC_GUARDIAN_OF_TIME = 32281 }; -enum GameObjects +enum GameObjectIds { GO_SHKAF_GATE = 188686, GO_MALGANIS_GATE_1 = 187711, @@ -69,7 +67,7 @@ enum GameObjects GO_MALGANIS_CHEST_N = 190663, GO_MALGANIS_CHEST_H = 193597, GO_SUSPICIOUS_CRATE = 190094, - GO_PLAGUED_CRATE = 190095, + GO_PLAGUED_CRATE = 190095 }; enum WorldStatesCoT @@ -78,12 +76,28 @@ enum WorldStatesCoT WORLDSTATE_CRATES_REVEALED = 3480, WORLDSTATE_WAVE_COUNT = 3504, WORLDSTATE_TIME_GUARDIAN = 3931, - WORLDSTATE_TIME_GUARDIAN_SHOW = 3932, + WORLDSTATE_TIME_GUARDIAN_SHOW = 3932 }; enum CrateSpells { - SPELL_CRATES_CREDIT = 58109, + SPELL_CRATES_CREDIT = 58109 +}; + +enum Texts +{ + SAY_CRATES_COMPLETED = 0, + // Chromie + SAY_INFINITE_START = 0, // On Infinite Corruptor event start + SAY_INFINITE = 1, // On Infinite Corruptor event at 5 minutes + SAY_INFINITE_FAIL = 2, // On Infinite Corruptor event fail + // Infinite Corruptor + SAY_FAIL_EVENT = 2 // On Infinite Corruptor event fail +}; + +enum InstanceEvents +{ + EVENT_INFINITE_TIMER = 1 }; #endif diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 7af2b3f63aa..b3e8d88bc2a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -23,8 +23,6 @@ #include "TemporarySummon.h" #include "SpellInfo.h" -#define MAX_ENCOUNTER 5 - /* Culling of Stratholme encounters: 0 - Meathook 1 - Salramm the Fleshcrafter @@ -33,51 +31,51 @@ 4 - Infinite Corruptor (Heroic only) */ -enum Texts +Position const ChromieSummonPos[] = { - SAY_CRATES_COMPLETED = 0, + { 1813.298f, 1283.578f, 142.3258f, 3.878161f }, + { 2273.725f, 1483.684f, 128.7205f, 6.057528f } }; -Position const ChromieSummonPos = {1813.298f, 1283.578f, 142.3258f, 3.878161f}; +Position const InfiniteCorruptorPos = { 2335.47f, 1262.04f, 132.921f, 1.42079f }; +Position const TimeRiftPos = { 2334.626f, 1280.45f, 133.0066f, 1.727876f }; +Position const GuardianOfTimePos = { 2321.489f, 1268.383f, 132.8507f, 0.418879f }; + +DoorData const doorData[] = +{ + { GO_MALGANIS_GATE_2, DATA_MAL_GANIS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, + { GO_EXIT_GATE, DATA_MAL_GANIS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END +}; class instance_culling_of_stratholme : public InstanceMapScript { public: - instance_culling_of_stratholme() : InstanceMapScript("instance_culling_of_stratholme", 595) { } - - InstanceScript* GetInstanceScript(InstanceMap* map) const override - { - return new instance_culling_of_stratholme_InstanceMapScript(map); - } + instance_culling_of_stratholme() : InstanceMapScript(CoSScriptName, 595) { } struct instance_culling_of_stratholme_InstanceMapScript : public InstanceScript { instance_culling_of_stratholme_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); - _arthasGUID = 0; - _meathookGUID = 0; - _salrammGUID = 0; - _epochGUID = 0; - _malGanisGUID = 0; - _infiniteGUID = 0; - _shkafGateGUID = 0; + SetBossNumber(EncounterCount); + LoadDoorData(doorData); + + _chromieGUID = 0; + _arthasGUID = 0; + _meathookGUID = 0; + _salrammGUID = 0; + _epochGUID = 0; + _malGanisGUID = 0; + _infiniteGUID = 0; + _shkafGateGUID = 0; _malGanisGate1GUID = 0; _malGanisGate2GUID = 0; - _exitGateGUID = 0; + _exitGateGUID = 0; _malGanisChestGUID = 0; - _genericBunnyGUID = 0; - memset(&_encounterState[0], 0, sizeof(uint32) * MAX_ENCOUNTER); - _crateCount = 0; - } - - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (_encounterState[i] == IN_PROGRESS) - return true; - - return false; + _genericBunnyGUID = 0; + _crateCount = 0; + _eventTimer = 0; } void FillInitialWorldStates(WorldPacket& data) override @@ -93,6 +91,9 @@ class instance_culling_of_stratholme : public InstanceMapScript { switch (creature->GetEntry()) { + case NPC_CHROMIE: + _chromieGUID = creature->GetGUID(); + break; case NPC_ARTHAS: _arthasGUID = creature->GetGUID(); break; @@ -110,10 +111,13 @@ class instance_culling_of_stratholme : public InstanceMapScript break; case NPC_INFINITE: _infiniteGUID = creature->GetGUID(); + DoUpdateWorldState(WORLDSTATE_TIME_GUARDIAN_SHOW, 1); break; case NPC_GENERIC_BUNNY: _genericBunnyGUID = creature->GetGUID(); break; + default: + break; } } @@ -129,55 +133,38 @@ class instance_culling_of_stratholme : public InstanceMapScript break; case GO_MALGANIS_GATE_2: _malGanisGate2GUID = go->GetGUID(); + AddDoor(go, true); break; case GO_EXIT_GATE: _exitGateGUID = go->GetGUID(); - if (_encounterState[3] == DONE) - HandleGameObject(_exitGateGUID, true); + AddDoor(go, true); break; case GO_MALGANIS_CHEST_N: case GO_MALGANIS_CHEST_H: _malGanisChestGUID = go->GetGUID(); - if (_encounterState[3] == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + break; + default: break; } } - void SetData(uint32 type, uint32 data) override + void OnGameObjectRemove(GameObject* go) override { - switch (type) + switch (go->GetEntry()) { - case DATA_MEATHOOK_EVENT: - _encounterState[0] = data; - break; - case DATA_SALRAMM_EVENT: - _encounterState[1] = data; + case GO_MALGANIS_GATE_2: + case GO_EXIT_GATE: + AddDoor(go, false); break; - case DATA_EPOCH_EVENT: - _encounterState[2] = data; + default: break; - case DATA_MAL_GANIS_EVENT: - _encounterState[3] = data; + } + } - switch (_encounterState[3]) - { - case NOT_STARTED: - HandleGameObject(_malGanisGate2GUID, true); - break; - case IN_PROGRESS: - HandleGameObject(_malGanisGate2GUID, false); - break; - case DONE: - HandleGameObject(_exitGateGUID, true); - if (GameObject* go = instance->GetGameObject(_malGanisChestGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - break; - } - break; - case DATA_INFINITE_EVENT: - _encounterState[4] = data; - break; + void SetData(uint32 type, uint32 data) override + { + switch (type) + { case DATA_CRATE_COUNT: _crateCount = data; if (_crateCount == 5) @@ -186,34 +173,70 @@ class instance_culling_of_stratholme : public InstanceMapScript bunny->CastSpell(bunny, SPELL_CRATES_CREDIT, true); // Summon Chromie and global whisper - if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos)) + if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos[0])) if (!instance->GetPlayers().isEmpty()) chromie->AI()->TalkToMap(SAY_CRATES_COMPLETED); } DoUpdateWorldState(WORLDSTATE_CRATES_REVEALED, _crateCount); break; + case DATA_INFINITE_COUNTER: + _infiniteCouterState = data; + if (data == IN_PROGRESS) + { + if (!_infiniteGUID) + { + _eventTimer = 25; + instance->SummonCreature(NPC_INFINITE, InfiniteCorruptorPos); + instance->SummonCreature(NPC_TIME_RIFT, TimeRiftPos); + instance->SummonCreature(NPC_GUARDIAN_OF_TIME, GuardianOfTimePos); + events.ScheduleEvent(EVENT_INFINITE_TIMER, 1); + } + } + break; + default: + break; + } + } + + bool SetBossState(uint32 type, EncounterState state) override + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_INFINITE: + if (state == DONE) + { + DoUpdateWorldState(WORLDSTATE_TIME_GUARDIAN_SHOW, 0); + DoUpdateWorldState(WORLDSTATE_TIME_GUARDIAN, 0); + } + break; + case DATA_MAL_GANIS: + if (state == DONE) + { + if (GameObject* go = instance->GetGameObject(_malGanisChestGUID)) + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + instance->SummonCreature(NPC_CHROMIE_3, ChromieSummonPos[1]); + } + break; + default: + break; } - if (data == DONE) - SaveToDB(); + return true; } uint32 GetData(uint32 type) const override { switch (type) { - case DATA_MEATHOOK_EVENT: - return _encounterState[0]; - case DATA_SALRAMM_EVENT: - return _encounterState[1]; - case DATA_EPOCH_EVENT: - return _encounterState[2]; - case DATA_MAL_GANIS_EVENT: - return _encounterState[3]; - case DATA_INFINITE_EVENT: - return _encounterState[4]; case DATA_CRATE_COUNT: return _crateCount; + case DATA_INFINITE_COUNTER: + return _infiniteCouterState; + default: + break; } return 0; } @@ -244,58 +267,70 @@ class instance_culling_of_stratholme : public InstanceMapScript return _exitGateGUID; case DATA_MAL_GANIS_CHEST: return _malGanisChestGUID; + default: + break; } return 0; } - std::string GetSaveData() override + void Update(uint32 diff) override { - OUT_SAVE_INST_DATA; + events.Update(diff); - std::ostringstream saveStream; - saveStream << "C S " << _encounterState[0] << ' ' << _encounterState[1] << ' ' - << _encounterState[2] << ' ' << _encounterState[3] << ' ' << _encounterState[4]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* in) override - { - if (!in) + while (uint32 eventId = events.ExecuteEvent()) { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0, data1, data2, data3, data4; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4; - - if (dataHead1 == 'C' && dataHead2 == 'S') - { - _encounterState[0] = data0; - _encounterState[1] = data1; - _encounterState[2] = data2; - _encounterState[3] = data3; - _encounterState[4] = data4; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (_encounterState[i] == IN_PROGRESS) - _encounterState[i] = NOT_STARTED; - + switch (eventId) + { + case EVENT_INFINITE_TIMER: + DoUpdateWorldState(WORLDSTATE_TIME_GUARDIAN, _eventTimer); + + switch (_eventTimer) + { + case 25: + if (instance->HavePlayers()) + if (Creature* chromie = instance->GetCreature(_chromieGUID)) + chromie->AI()->TalkToMap(SAY_INFINITE_START); + break; + case 5: + if (instance->HavePlayers()) + if (Creature* chromie = instance->GetCreature(_chromieGUID)) + chromie->AI()->TalkToMap(SAY_INFINITE); + break; + case 0: + if (instance->HavePlayers()) + if (Creature* chromie = instance->GetCreature(_chromieGUID)) + chromie->AI()->TalkToMap(SAY_INFINITE_FAIL); + + if (Creature* infinite = instance->GetCreature(_infiniteGUID)) + { + if (Creature* guardian = infinite->FindNearestCreature(NPC_GUARDIAN_OF_TIME, 100.0f)) + infinite->Kill(guardian); + + if (Creature* rift = infinite->FindNearestCreature(NPC_TIME_RIFT, 100.0f)) + { + infinite->GetMotionMaster()->MovePoint(0, rift->GetPositionX(), rift->GetPositionY(), rift->GetPositionZ()); + rift->DespawnOrUnsummon(3000); + } + + infinite->DespawnOrUnsummon(3000); + infinite->AI()->Talk(SAY_FAIL_EVENT); + } + DoUpdateWorldState(WORLDSTATE_TIME_GUARDIAN_SHOW, 0); + return; + default: + break; + } + events.ScheduleEvent(EVENT_INFINITE_TIMER, 60000); + --_eventTimer; + break; + default: + break; + } } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; } private: + uint64 _chromieGUID; uint64 _arthasGUID; uint64 _meathookGUID; uint64 _salrammGUID; @@ -308,9 +343,18 @@ class instance_culling_of_stratholme : public InstanceMapScript uint64 _exitGateGUID; uint64 _malGanisChestGUID; uint64 _genericBunnyGUID; - uint32 _encounterState[MAX_ENCOUNTER]; + uint32 _crateCount; + uint32 _eventTimer; + uint32 _infiniteCouterState; + + EventMap events; }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_culling_of_stratholme_InstanceMapScript(map); + } }; void AddSC_instance_culling_of_stratholme() -- cgit v1.2.3 From 4e25304a6688cfc153a2c8238fd571e9bb3ad49f Mon Sep 17 00:00:00 2001 From: Dr-J Date: Fri, 12 Sep 2014 13:48:51 +0100 Subject: Remove mount vendor cpp script --- src/server/scripts/World/npcs_special.cpp | 97 ------------------------------- 1 file changed, 97 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 944ebe27b7b..ff42743c496 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -33,7 +33,6 @@ npc_guardian 100% guardianAI used to prevent players from accessin npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565 npc_injured_patient 100% patients for triage-quests (6622 and 6624) npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage) -npc_mount_vendor 100% Regular mount vendors all over the world. Display gossip if player doesn't meet the requirements to buy npc_sayge 100% Darkmoon event fortune teller, buff player based on answers given npc_snake_trap_serpents 80% AI for snakes that summoned by Snake Trap npc_shadowfiend 100% restore 5% of owner's mana when shadowfiend die from damage @@ -1175,101 +1174,6 @@ public: } }; -/*###### -## npc_mount_vendor -######*/ - -class npc_mount_vendor : public CreatureScript -{ -public: - npc_mount_vendor() : CreatureScript("npc_mount_vendor") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - bool canBuy = false; - uint32 vendor = creature->GetEntry(); - uint8 race = player->getRace(); - - switch (vendor) - { - case 384: //Katie Hunter - case 1460: //Unger Statforth - case 2357: //Merideth Carlson - case 4885: //Gregor MacVince - if (player->GetReputationRank(72) != REP_EXALTED && race != RACE_HUMAN) - player->SEND_GOSSIP_MENU(5855, creature->GetGUID()); - else canBuy = true; - break; - case 1261: //Veron Amberstill - if (player->GetReputationRank(47) != REP_EXALTED && race != RACE_DWARF) - player->SEND_GOSSIP_MENU(5856, creature->GetGUID()); - else canBuy = true; - break; - case 3362: //Ogunaro Wolfrunner - if (player->GetReputationRank(76) != REP_EXALTED && race != RACE_ORC) - player->SEND_GOSSIP_MENU(5841, creature->GetGUID()); - else canBuy = true; - break; - case 3685: //Harb Clawhoof - if (player->GetReputationRank(81) != REP_EXALTED && race != RACE_TAUREN) - player->SEND_GOSSIP_MENU(5843, creature->GetGUID()); - else canBuy = true; - break; - case 4730: //Lelanai - if (player->GetReputationRank(69) != REP_EXALTED && race != RACE_NIGHTELF) - player->SEND_GOSSIP_MENU(5844, creature->GetGUID()); - else canBuy = true; - break; - case 4731: //Zachariah Post - if (player->GetReputationRank(68) != REP_EXALTED && race != RACE_UNDEAD_PLAYER) - player->SEND_GOSSIP_MENU(5840, creature->GetGUID()); - else canBuy = true; - break; - case 7952: //Zjolnir - if (player->GetReputationRank(530) != REP_EXALTED && race != RACE_TROLL) - player->SEND_GOSSIP_MENU(5842, creature->GetGUID()); - else canBuy = true; - break; - case 7955: //Milli Featherwhistle - if (player->GetReputationRank(54) != REP_EXALTED && race != RACE_GNOME) - player->SEND_GOSSIP_MENU(5857, creature->GetGUID()); - else canBuy = true; - break; - case 16264: //Winaestra - if (player->GetReputationRank(911) != REP_EXALTED && race != RACE_BLOODELF) - player->SEND_GOSSIP_MENU(10305, creature->GetGUID()); - else canBuy = true; - break; - case 17584: //Torallius the Pack Handler - if (player->GetReputationRank(930) != REP_EXALTED && race != RACE_DRAENEI) - player->SEND_GOSSIP_MENU(10239, creature->GetGUID()); - else canBuy = true; - break; - } - - if (canBuy) - { - if (creature->IsVendor()) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - } - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_TRADE) - player->GetSession()->SendListInventory(creature->GetGUID()); - - return true; - } -}; - - /*###### ## npc_sayge ######*/ @@ -2490,7 +2394,6 @@ void AddSC_npcs_special() new npc_injured_patient(); new npc_garments_of_quests(); new npc_guardian(); - new npc_mount_vendor(); new npc_sayge(); new npc_steam_tonk(); new npc_tonk_mine(); -- cgit v1.2.3