From 7b67351208827fb1398dd3b4d991dff3e6ddf893 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 14:10:26 -0230 Subject: Script: Update Grizzly Hills Zone Script to use Events. --- .../scripts/Northrend/zone_grizzly_hills.cpp | 520 ++++++++++----------- 1 file changed, 259 insertions(+), 261 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 0f3a312c1bc..543514122f6 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -27,33 +27,34 @@ ## Quest 12027: Mr. Floppy's Perilous Adventure ######*/ -enum eFloppy +enum Floppy { + // Creature NPC_MRFLOPPY = 26589, NPC_HUNGRY_WORG = 26586, - NPC_RAVENOUS_WORG = 26590, //RWORG + NPC_RAVENOUS_WORG = 26590, // RWORG NPC_EMILY = 26588, - + // Quest QUEST_PERILOUS_ADVENTURE = 12027, - - SPELL_MRFLOPPY = 47184, //vehicle aura - - SAY_WORGHAGGRO1 = 0, //Um... I think one of those wolves is back... - SAY_WORGHAGGRO2 = 1, //He's going for Mr. Floppy! - SAY_WORGRAGGRO3 = 2, //Oh, no! Look, it's another wolf, and it's a biiiiiig one! - SAY_WORGRAGGRO4 = 3, //He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta! - SAY_RANDOMAGGRO = 4, //There's a big meanie attacking Mr. Floppy! Help! - SAY_VICTORY1 = 5, //Let's get out of here before more wolves find us! - SAY_VICTORY2 = 6, //Don't go toward the light, Mr. Floppy! - SAY_VICTORY3 = 7, //Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy! - SAY_VICTORY4 = 8, //I think I see the camp! We're almost home, Mr. Floppy! Let's go! - TEXT_EMOTE_WP1 = 9, //Mr. Floppy revives - TEXT_EMOTE_AGGRO = 10, //The Ravenous Worg chomps down on Mr. Floppy - SAY_QUEST_ACCEPT = 11, //Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves! - SAY_QUEST_COMPLETE = 12 //Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! + // Spell + SPELL_MRFLOPPY = 47184, // vehicle aura + // Text + SAY_WORGHAGGRO1 = 0, // Um... I think one of those wolves is back... + SAY_WORGHAGGRO2 = 1, // He's going for Mr. Floppy! + SAY_WORGRAGGRO3 = 2, // Oh, no! Look, it's another wolf, and it's a biiiiiig one! + SAY_WORGRAGGRO4 = 3, // He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta! + SAY_RANDOMAGGRO = 4, // There's a big meanie attacking Mr. Floppy! Help! + SAY_VICTORY1 = 5, // Let's get out of here before more wolves find us! + SAY_VICTORY2 = 6, // Don't go toward the light, Mr. Floppy! + SAY_VICTORY3 = 7, // Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy! + SAY_VICTORY4 = 8, // I think I see the camp! We're almost home, Mr. Floppy! Let's go! + TEXT_EMOTE_WP1 = 9, // Mr. Floppy revives + TEXT_EMOTE_AGGRO = 10, // The Ravenous Worg chomps down on Mr. Floppy + SAY_QUEST_ACCEPT = 11, // Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves! + SAY_QUEST_COMPLETE = 12 // Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! }; -//emily +// emily class npc_emily : public CreatureScript { public: @@ -63,13 +64,6 @@ public: { npc_emilyAI(Creature* creature) : npc_escortAI(creature) { } - uint32 m_uiChatTimer; - - uint64 RWORGGUID; - uint64 MrfloppyGUID; - - bool Completed; - void JustSummoned(Creature* summoned) { if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 50.0f)) @@ -88,55 +82,55 @@ public: { case 9: if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f)) - MrfloppyGUID = Mrfloppy->GetGUID(); + _mrfloppyGUID = Mrfloppy->GetGUID(); break; case 10: - if (Unit::GetCreature(*me, MrfloppyGUID)) + if (Unit::GetCreature(*me, _mrfloppyGUID)) { Talk(SAY_WORGHAGGRO1); me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); } break; case 11: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); break; case 17: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); Talk(SAY_WORGRAGGRO3); if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000)) { RWORG->setFaction(35); - RWORGGUID = RWORG->GetGUID(); + _RavenousworgGUID = RWORG->GetGUID(); } break; case 18: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) { - if (Creature* RWORG = Unit::GetCreature(*me, RWORGGUID)) + if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); DoCast(Mrfloppy, SPELL_MRFLOPPY); } break; case 19: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0)) { - if (Creature* RWORG = Unit::GetCreature(*me, RWORGGUID)) + if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) Mrfloppy->EnterVehicle(RWORG); } } break; case 20: - if (Creature* RWORG = Unit::GetCreature(*me, RWORGGUID)) + if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) RWORG->HandleEmoteCommand(34); break; case 21: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) { - if (Creature* RWORG = Unit::GetCreature(*me, RWORGGUID)) + if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) { RWORG->Kill(Mrfloppy); Mrfloppy->ExitVehicle(); @@ -147,11 +141,11 @@ public: } break; case 22: - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->isDead()) { - if (Creature* RWORG = Unit::GetCreature(*me, RWORGGUID)) + if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) RWORG->DisappearAndDie(); me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); Mrfloppy->setDeathState(ALIVE); @@ -163,7 +157,6 @@ public: case 24: if (player) { - Completed = true; player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me); Talk(SAY_QUEST_COMPLETE, player->GetGUID()); } @@ -174,7 +167,7 @@ public: break; case 27: me->DisappearAndDie(); - if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) + if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->DisappearAndDie(); break; } @@ -187,23 +180,13 @@ public: void Reset() { - m_uiChatTimer = 4000; - MrfloppyGUID = 0; - RWORGGUID = 0; + _mrfloppyGUID = 0; + _RavenousworgGUID = 0; } - void UpdateAI(uint32 uiDiff) - { - npc_escortAI::UpdateAI(uiDiff); - - if (HasEscortState(STATE_ESCORT_ESCORTING)) - { - if (m_uiChatTimer <= uiDiff) - m_uiChatTimer = 12000; - else - m_uiChatTimer -= uiDiff; - } - } + private: + uint64 _RavenousworgGUID; + uint64 _mrfloppyGUID; }; bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) @@ -226,7 +209,7 @@ public: } }; -//mrfloppy +// mrfloppy class npc_mrfloppy : public CreatureScript { public: @@ -236,10 +219,6 @@ public: { npc_mrfloppyAI(Creature* creature) : ScriptedAI(creature) {} - uint64 EmilyGUID; - uint64 RWORGGUID; - uint64 HWORGGUID; - void Reset() {} void EnterCombat(Unit* Who) @@ -277,21 +256,21 @@ public: } }; -// Outhouse Bunny +/*###### +## Quest 12227: Doing Your Duty +######*/ -enum eOuthouseBunny +enum Outhouse { + // Sound + SOUND_FEMALE = 12671, + SOUND_MALE = 12670, + // Spell SPELL_OUTHOUSE_GROANS = 48382, SPELL_CAMERA_SHAKE = 47533, SPELL_DUST_FIELD = 48329 }; -enum eSounds -{ - SOUND_FEMALE = 12671, - SOUND_MALE = 12670 -}; - class npc_outhouse_bunny : public CreatureScript { public: @@ -301,32 +280,29 @@ public: { npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) {} - uint8 m_counter; - uint8 m_gender; - void Reset() { - m_counter = 0; - m_gender = 0; + _counter = 0; + _gender = 0; } - void SetData(uint32 uiType, uint32 uiData) + void SetData(uint32 Type, uint32 Data) { - if (uiType == 1) - m_gender = uiData; + if (Type == 1) + _gender = Data; } - void SpellHit(Unit* pCaster, const SpellInfo* pSpell) + void SpellHit(Unit* Caster, const SpellInfo* Spell) { - if (pSpell->Id == SPELL_OUTHOUSE_GROANS) + if (Spell->Id == SPELL_OUTHOUSE_GROANS) { - ++m_counter; - if (m_counter < 5) - DoCast(pCaster, SPELL_CAMERA_SHAKE, true); + ++_counter; + if (_counter < 5) + DoCast(Caster, SPELL_CAMERA_SHAKE, true); else - m_counter = 0; + _counter = 0; DoCast(me, SPELL_DUST_FIELD, true); - switch (m_gender) + switch (_gender) { case GENDER_FEMALE: DoPlaySoundToSet(me, SOUND_FEMALE); @@ -338,6 +314,9 @@ public: } } } + private: + uint8 _counter; + uint8 _gender; }; CreatureAI* GetAI(Creature* creature) const @@ -348,8 +327,9 @@ public: // Tallhorn Stage -enum etallhornstage +enum TallhornStage { + //Gameobject OBJECT_HAUNCH = 188665 }; @@ -362,16 +342,14 @@ public: { npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) {} - uint8 m_uiPhase; - void Reset() { - m_uiPhase = 1; + _phase = 1; } - void UpdateAI(uint32 /*uiDiff*/) + void UpdateAI(uint32 /*diff*/) { - if (m_uiPhase == 1) + if (_phase == 1) { if (me->FindNearestGameObject(OBJECT_HAUNCH, 2.0f)) { @@ -379,10 +357,12 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); } - m_uiPhase = 0; + _phase = 0; } DoMeleeAttackIfReady(); } + private: + uint8 _phase; }; CreatureAI* GetAI(Creature* creature) const @@ -393,9 +373,16 @@ public: // Amberpine Woodsman -enum eamberpinewoodsman +enum AmberpineWoodsman { - TALLHORN_STAG = 26363 + // Creature + NPC_TALLHORN_STAG = 26363 +}; + +enum AmberpineWoodsmanEvents +{ + EVENT_WOODSMAN_1 = 1, + EVENT_WOODSMAN_2 = 2 }; class npc_amberpine_woodsman : public CreatureScript @@ -407,48 +394,40 @@ public: { npc_amberpine_woodsmanAI(Creature* creature) : ScriptedAI(creature) {} - uint8 m_uiPhase; - uint32 m_uiTimer; - void Reset() { - m_uiTimer = 0; - m_uiPhase = 1; - } - - void UpdateAI(uint32 uiDiff) - { - // call this each update tick? - if (me->FindNearestCreature(TALLHORN_STAG, 0.2f)) + if (me->FindNearestCreature(NPC_TALLHORN_STAG, 0.2f)) { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); } else - if (m_uiPhase) + _events.ScheduleEvent(EVENT_WOODSMAN_1, 0); + } + + void UpdateAI(uint32 diff) + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) { - if (m_uiTimer <= uiDiff) - { - switch (m_uiPhase) - { - case 1: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT); - m_uiTimer = 3000; - m_uiPhase = 2; - break; - case 2: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); - m_uiTimer = 4000; - m_uiPhase = 1; - break; - } - } - else - m_uiTimer -= uiDiff; + case EVENT_WOODSMAN_1: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT); + _events.ScheduleEvent(EVENT_WOODSMAN_2, 3000); + break; + case EVENT_WOODSMAN_2: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); + _events.ScheduleEvent(EVENT_WOODSMAN_1, 4000); + break; + default: + break; } - ScriptedAI::UpdateAI(uiDiff); - + } UpdateVictim(); } + private: + EventMap _events; }; CreatureAI* GetAI(Creature* creature) const @@ -456,16 +435,21 @@ public: return new npc_amberpine_woodsmanAI(creature); } }; + /*###### ## Quest 12288: Overwhelmed! ######*/ -enum eSkirmisher +enum Skirmisher { + // Creature + NPC_CREDIT = 27466, + // Quest + QUEST_OVERWHELMED = 12288, + // Spell SPELL_RENEW_SKIRMISHER = 48812, - CREDIT_NPC = 27466, - - RANDOM_SAY = 0, + // Text + SAY_RANDOM = 0 }; class npc_wounded_skirmisher : public CreatureScript @@ -477,35 +461,31 @@ public: { npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) {} - uint64 uiPlayerGUID; - - uint32 DespawnTimer; - void Reset() { - DespawnTimer = 5000; - uiPlayerGUID = 0; + _despawnTimer = 5000; + _playerGUID = 0; } void MovementInform(uint32, uint32 id) { if (id == 1) - me->DespawnOrUnsummon(DespawnTimer); + me->DespawnOrUnsummon(_despawnTimer); } void SpellHit(Unit* caster, const SpellInfo* spell) { if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER - && caster->ToPlayer()->GetQuestStatus(12288) == QUEST_STATUS_INCOMPLETE) + && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) { - caster->ToPlayer()->KilledMonsterCredit(CREDIT_NPC, 0); - sCreatureTextMgr->SendChat(me, RANDOM_SAY, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, caster->ToPlayer()); + caster->ToPlayer()->KilledMonsterCredit(NPC_CREDIT, 0); + Talk(SAY_RANDOM); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); else { me->SetStandState(UNIT_STAND_STATE_STAND); - me->DespawnOrUnsummon(DespawnTimer); + me->DespawnOrUnsummon(_despawnTimer); } } } @@ -517,6 +497,9 @@ public: DoMeleeAttackIfReady(); } + private: + uint64 _playerGUID; + uint32 _despawnTimer; }; CreatureAI* GetAI(Creature* creature) const @@ -526,15 +509,21 @@ public: }; /*Lightning Sentry - if you kill it when you have your Minion with you, you will get a quest credit*/ -enum eSentry +enum Sentry { - QUEST_OR_MAYBE_WE_DONT_A = 12138, - QUEST_OR_MAYBE_WE_DONT_H = 12198, - - NPC_LIGHTNING_SENTRY = 26407, - NPC_WAR_GOLEM = 27017, + //Creature + NPC_LIGHTNING_SENTRY = 26407, + NPC_WAR_GOLEM = 27017, + // Quest + QUEST_OR_MAYBE_WE_DONT_A = 12138, + QUEST_OR_MAYBE_WE_DONT_H = 12198, + // Spell + SPELL_CHARGED_SENTRY_TOTEM = 52703 +}; - SPELL_CHARGED_SENTRY_TOTEM = 52703, +enum SentryEvents +{ + EVENT_SENTRY = 1 }; class npc_lightning_sentry : public CreatureScript @@ -542,34 +531,37 @@ class npc_lightning_sentry : public CreatureScript public: npc_lightning_sentry() : CreatureScript("npc_lightning_sentry") { } - CreatureAI* GetAI(Creature* creature) const - { - return new npc_lightning_sentryAI(creature); - } - struct npc_lightning_sentryAI : public ScriptedAI { npc_lightning_sentryAI(Creature* creature) : ScriptedAI(creature) { } - uint32 uiChargedSentryTotem; - void Reset() { - uiChargedSentryTotem = urand(10000, 12000); + _events.ScheduleEvent(EVENT_SENTRY, 4000); } - void UpdateAI(uint32 uiDiff) + void UpdateAI(uint32 diff) { if (!UpdateVictim()) return; - if (uiChargedSentryTotem <= uiDiff) + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) { - DoCast(SPELL_CHARGED_SENTRY_TOTEM); - uiChargedSentryTotem = urand(10000, 12000); + switch (eventId) + { + case EVENT_WOODSMAN_1: + DoCast(SPELL_CHARGED_SENTRY_TOTEM); + _events.ScheduleEvent(EVENT_SENTRY, urand(10000, 12000)); + break; + default: + break; + } } - else - uiChargedSentryTotem -= uiDiff; + + if (!UpdateVictim()) + return; DoMeleeAttackIfReady(); } @@ -586,104 +578,113 @@ public: } } } + private: + EventMap _events; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_lightning_sentryAI(creature); + } }; /*Venture co. Straggler - when you cast Smoke Bomb, he will yell and run away*/ -enum eSmokeEmOut +enum SmokeEmOut { - SAY_SEO = 0, + // Quest QUEST_SMOKE_EM_OUT_A = 12323, QUEST_SMOKE_EM_OUT_H = 12324, + // Spell SPELL_SMOKE_BOMB = 49075, SPELL_CHOP = 43410, SPELL_VENTURE_STRAGGLER_CREDIT = 49093, + // Text + SAY_SEO = 0 +}; + +enum StragglerEvents +{ + EVENT_STRAGGLER_1 = 1, + EVENT_STRAGGLER_2 = 2, + EVENT_STRAGGLER_3 = 3, + EVENT_STRAGGLER_4 = 4, + EVENT_CHOP = 5 }; class npc_venture_co_straggler : public CreatureScript { - public: - npc_venture_co_straggler() : CreatureScript("npc_venture_co_straggler") { } +public: + npc_venture_co_straggler() : CreatureScript("npc_venture_co_straggler") { } + + struct npc_venture_co_stragglerAI : public ScriptedAI + { + npc_venture_co_stragglerAI(Creature* creature) : ScriptedAI(creature) { } - struct npc_venture_co_stragglerAI : public ScriptedAI + void Reset() { - npc_venture_co_stragglerAI(Creature* creature) : ScriptedAI(creature) { } + _playerGUID = 0; - uint64 uiPlayerGUID; - uint32 uiRunAwayTimer; - uint32 uiTimer; - uint32 uiChopTimer; + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->SetReactState(REACT_AGGRESSIVE); + } - void Reset() - { - uiPlayerGUID = 0; - uiTimer = 0; - uiRunAwayTimer = 0; - uiChopTimer = urand(10000, 12500); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); - me->SetReactState(REACT_AGGRESSIVE); - } + void UpdateAI(uint32 diff) + { + _events.Update(diff); - void UpdateAI(uint32 uiDiff) + while (uint32 eventId = _events.ExecuteEvent()) { - if (uiPlayerGUID && uiRunAwayTimer <= uiDiff) + switch (eventId) { - if (Player* player = Unit::GetPlayer(*me, uiPlayerGUID)) - { - switch (uiTimer) - { - case 0: - DoCast(player, SPELL_VENTURE_STRAGGLER_CREDIT); - me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-7, me->GetPositionY()+7, me->GetPositionZ()); - uiRunAwayTimer = 2500; - ++uiTimer; - break; - case 1: - Talk(SAY_SEO); - me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-7, me->GetPositionY()-5, me->GetPositionZ()); - uiRunAwayTimer = 2500; - ++uiTimer; - break; - case 2: - me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-5, me->GetPositionY()-5, me->GetPositionZ()); - uiRunAwayTimer = 2500; - ++uiTimer; - break; - case 3: - me->DisappearAndDie(); - uiTimer = 0; - break; - } - } + case EVENT_STRAGGLER_1: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + DoCast(player, SPELL_VENTURE_STRAGGLER_CREDIT); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-7, me->GetPositionY()+7, me->GetPositionZ()); + _events.ScheduleEvent(EVENT_STRAGGLER_2, 2500); + break; + case EVENT_STRAGGLER_2: + Talk(SAY_SEO); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-7, me->GetPositionY()-5, me->GetPositionZ()); + _events.ScheduleEvent(EVENT_STRAGGLER_3, 2500); + break; + case EVENT_STRAGGLER_3: + me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-5, me->GetPositionY()-5, me->GetPositionZ()); + _events.ScheduleEvent(EVENT_STRAGGLER_4, 2500); + break; + case EVENT_STRAGGLER_4: + me->DisappearAndDie(); + break; + case EVENT_CHOP: + if (UpdateVictim()) + DoCast(me->GetVictim(), SPELL_CHOP); + _events.ScheduleEvent(EVENT_CHOP, 10000, 12000); + break; + default: + break; } - else if (uiRunAwayTimer) - uiRunAwayTimer -= uiDiff; - - if (!UpdateVictim()) - return; + } - if (uiChopTimer <= uiDiff) - { - DoCast(me->GetVictim(), SPELL_CHOP); - uiChopTimer = urand(10000, 12000); - } - else - uiChopTimer -= uiDiff; + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } + DoMeleeAttackIfReady(); + } - void SpellHit(Unit* caster, SpellInfo const* spell) + void SpellHit(Unit* caster, SpellInfo const* spell) + { + if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { - if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) - { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); - me->SetReactState(REACT_PASSIVE); - me->CombatStop(false); - uiPlayerGUID = caster->GetGUID(); - uiRunAwayTimer = 3500; - } + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->SetReactState(REACT_PASSIVE); + me->CombatStop(false); + _playerGUID = caster->GetGUID(); + _events.ScheduleEvent(EVENT_STRAGGLER_1, 3500); } + } + + private: + EventMap _events; + uint64 _playerGUID; }; CreatureAI* GetAI(Creature* creature) const @@ -693,26 +694,23 @@ class npc_venture_co_straggler : public CreatureScript }; /*###### -## Quest A Blade Fit For A Champion +## Quest: A Blade Fit For A Champion ######*/ enum LakeFrog { + // Creature + NPC_LAKE_FROG = 33211, + NPC_LAKE_FROG_QUEST = 33224, + NPC_MAIDEN_OF_ASHWOOD_LAKE = 33220, + // Items + ITEM_WARTS_B_GONE_LIP_BALM = 44986, // Spells SPELL_WARTSBGONE_LIP_BALM = 62574, SPELL_FROG_LOVE = 62537, // for 1 minute ! SPELL_WARTS = 62581, SPELL_MAIDEN_OF_ASHWOOD_LAKE_TRANSFORM = 62550, SPELL_SUMMON_ASHWOOD_BRAND = 62554, - - // Items - ITEM_WARTS_B_GONE_LIP_BALM = 44986, - - // Creature - NPC_LAKE_FROG = 33211, - NPC_LAKE_FROG_QUEST = 33224, - NPC_MAIDEN_OF_ASHWOOD_LAKE = 33220, - // Text SAY_MAIDEN_0 = 0, SAY_MAIDEN_1 = 1 @@ -720,17 +718,17 @@ enum LakeFrog enum LakeFrogEvents { - EVENT_SCRIPT_1 = 1, - EVENT_SCRIPT_2 = 2, - EVENT_SCRIPT_3 = 3, - EVENT_SCRIPT_4 = 4, - EVENT_SCRIPT_5 = 5 + EVENT_LAKEFROG_1 = 1, + EVENT_LAKEFROG_2 = 2, + EVENT_LAKEFROG_3 = 3, + EVENT_LAKEFROG_4 = 4, + EVENT_LAKEFROG_5 = 5 }; class npc_lake_frog : public CreatureScript { - public: - npc_lake_frog() : CreatureScript("npc_lake_frog") { } +public: + npc_lake_frog() : CreatureScript("npc_lake_frog") { } struct npc_lake_frogAI : public ScriptedAI { @@ -756,24 +754,24 @@ class npc_lake_frog : public CreatureScript { switch (eventId) { - case EVENT_SCRIPT_1: + case EVENT_LAKEFROG_1: DoCast(me, SPELL_MAIDEN_OF_ASHWOOD_LAKE_TRANSFORM); me->SetEntry(NPC_MAIDEN_OF_ASHWOOD_LAKE); - _events.ScheduleEvent(EVENT_SCRIPT_2, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_2, 2000); break; - case EVENT_SCRIPT_2: + case EVENT_LAKEFROG_2: Talk(SAY_MAIDEN_0); - _events.ScheduleEvent(EVENT_SCRIPT_3, 3000); + _events.ScheduleEvent(EVENT_LAKEFROG_3, 3000); break; - case EVENT_SCRIPT_3: + case EVENT_LAKEFROG_3: me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - _events.ScheduleEvent(EVENT_SCRIPT_4, 25000); + _events.ScheduleEvent(EVENT_LAKEFROG_4, 25000); break; - case EVENT_SCRIPT_4: + case EVENT_LAKEFROG_4: me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - _events.ScheduleEvent(EVENT_SCRIPT_5, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_5, 2000); break; - case EVENT_SCRIPT_5: + case EVENT_LAKEFROG_5: Talk(SAY_MAIDEN_1); me->DespawnOrUnsummon(4000); break; @@ -807,7 +805,7 @@ class npc_lake_frog : public CreatureScript me->GetMotionMaster()->MoveIdle(); me->SetFacingToObject(player); _runningScript = true; - _events.ScheduleEvent(EVENT_SCRIPT_1, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_1, 2000); } } } -- cgit v1.2.3 From 08e7b15d9f8d05c01d26ab191d7f9f4b8b1a49ac Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 14:19:29 -0230 Subject: Script: Fix errors in previous commit. --- src/server/scripts/Northrend/zone_grizzly_hills.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 543514122f6..a1990b7a26b 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -537,7 +537,7 @@ public: void Reset() { - _events.ScheduleEvent(EVENT_SENTRY, 4000); + _events.ScheduleEvent(EVENT_SENTRY, urand(10000, 12000)); } void UpdateAI(uint32 diff) @@ -551,7 +551,7 @@ public: { switch (eventId) { - case EVENT_WOODSMAN_1: + case EVENT_SENTRY: DoCast(SPELL_CHARGED_SENTRY_TOTEM); _events.ScheduleEvent(EVENT_SENTRY, urand(10000, 12000)); break; -- cgit v1.2.3 From fd0b9ebb8eb0647c142cf0b336454c4892d7226c Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 14:39:22 -0230 Subject: Script: Fix a couple quest credit hacks. --- src/server/scripts/Northrend/zone_grizzly_hills.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index a1990b7a26b..6ea83a6cd2a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -442,12 +442,11 @@ public: enum Skirmisher { - // Creature - NPC_CREDIT = 27466, // Quest QUEST_OVERWHELMED = 12288, // Spell SPELL_RENEW_SKIRMISHER = 48812, + SPELL_KILL_CREDIT = 48813, // Text SAY_RANDOM = 0 }; @@ -478,7 +477,7 @@ public: if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) { - caster->ToPlayer()->KilledMonsterCredit(NPC_CREDIT, 0); + DoCast(caster, SPELL_KILL_CREDIT); Talk(SAY_RANDOM); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); @@ -518,7 +517,8 @@ enum Sentry QUEST_OR_MAYBE_WE_DONT_A = 12138, QUEST_OR_MAYBE_WE_DONT_H = 12198, // Spell - SPELL_CHARGED_SENTRY_TOTEM = 52703 + SPELL_CHARGED_SENTRY_TOTEM = 52703, + SPELL_WAR_GOLEM_CHARGE_CREDIT = 47797, }; enum SentryEvents @@ -574,7 +574,7 @@ public: { if (killer->ToPlayer()->GetQuestStatus(QUEST_OR_MAYBE_WE_DONT_A) == QUEST_STATUS_INCOMPLETE || killer->ToPlayer()->GetQuestStatus(QUEST_OR_MAYBE_WE_DONT_H) == QUEST_STATUS_INCOMPLETE) - killer->ToPlayer()->KilledMonsterCredit(NPC_WAR_GOLEM, 0); + DoCast(killer, SPELL_WAR_GOLEM_CHARGE_CREDIT); } } } -- cgit v1.2.3 From f0cc3b13909f0f717449a235146b9a774abdd18c Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sun, 16 Jun 2013 12:26:44 +0300 Subject: Fix sql naming on previous files. Correct faction template for Nexus Drake Hatchling and initialize a variable in script. --- sql/updates/world/2013_06_15_00_world_creature.sql | 2 + sql/updates/world/2013_06_15_01_world_gossip.sql | 47 ++++++++++++++++++++++ .../2013_06_15_02_world_spelldifficulty_dbc.sql | 5 +++ .../2013_06_15_03_world_creature_template.sql | 2 + sql/updates/world/2013_06_15_06_world_creature.sql | 2 - sql/updates/world/2013_06_15_07_world_gossip.sql | 47 ---------------------- .../2013_06_15_08_world_spelldifficulty_dbc.sql | 5 --- .../2013_06_15_09_world_creature_template.sql | 2 - sql/updates/world/2013_06_16_00_world_misc.sql | 1 + .../scripts/Northrend/zone_borean_tundra.cpp | 5 ++- 10 files changed, 61 insertions(+), 57 deletions(-) create mode 100644 sql/updates/world/2013_06_15_00_world_creature.sql create mode 100644 sql/updates/world/2013_06_15_01_world_gossip.sql create mode 100644 sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql create mode 100644 sql/updates/world/2013_06_15_03_world_creature_template.sql delete mode 100644 sql/updates/world/2013_06_15_06_world_creature.sql delete mode 100644 sql/updates/world/2013_06_15_07_world_gossip.sql delete mode 100644 sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql delete mode 100644 sql/updates/world/2013_06_15_09_world_creature_template.sql create mode 100644 sql/updates/world/2013_06_16_00_world_misc.sql (limited to 'src/server/scripts/Northrend') diff --git a/sql/updates/world/2013_06_15_00_world_creature.sql b/sql/updates/world/2013_06_15_00_world_creature.sql new file mode 100644 index 00000000000..a9db8f93583 --- /dev/null +++ b/sql/updates/world/2013_06_15_00_world_creature.sql @@ -0,0 +1,2 @@ +-- Update Void Traveler Scriptname +UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler'; diff --git a/sql/updates/world/2013_06_15_01_world_gossip.sql b/sql/updates/world/2013_06_15_01_world_gossip.sql new file mode 100644 index 00000000000..14da6211f93 --- /dev/null +++ b/sql/updates/world/2013_06_15_01_world_gossip.sql @@ -0,0 +1,47 @@ +-- Arathandris Silversky +UPDATE `creature_template` SET `gossip_menu_id`=2208 WHERE `entry` IN (9528); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2844; -- Before Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2844); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2845; -- After Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2845); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2848; -- If Horde +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2848); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=2208; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(2208,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(2208,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,2208,2844,0,8,3781,0,0,1,0,'','Arathandris Silversky - Show gossip text if player has not been rewarded quest 4101'), +(14,2208,2845,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip text if player has been rewarded quest 4101'), +(14,2208,2848,0,6,67,0,0,0,0,'','Arathandris Silversky - Show gossip text if player is horde'); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,2208,0,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'), +(15,2208,0,1,2,11511,1,1,1,0,'','Arathandris Silversky - Show gossip option if player does not have Cenarion Beacon'), +(15,2208,1,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'); + +-- Maybess Riverbreeze +UPDATE `creature_template` SET `gossip_menu_id`=21400 WHERE `entry` IN (9529); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2842; -- Before Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2842); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2843; -- After Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2843); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2849; -- If Alliance +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2849); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=21400; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(21400,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(21400,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (21400); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,21400,0,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'), +(15,21400,0,1,2,11511,1,1,1,0,'','Maybess Riverbreeze - Show gossip option if player does not have Cenarion Beacon'), +(15,21400,1,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'); diff --git a/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql new file mode 100644 index 00000000000..3c68f4e5b33 --- /dev/null +++ b/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql @@ -0,0 +1,5 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (33923,33666,33711); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(33923,33923,38796), +(33666,33666,38795), +(33711,33711,38794); diff --git a/sql/updates/world/2013_06_15_03_world_creature_template.sql b/sql/updates/world/2013_06_15_03_world_creature_template.sql new file mode 100644 index 00000000000..d4673e08a15 --- /dev/null +++ b/sql/updates/world/2013_06_15_03_world_creature_template.sql @@ -0,0 +1,2 @@ +-- Fix cosmetic-drakkari-bat-ph +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=27490; diff --git a/sql/updates/world/2013_06_15_06_world_creature.sql b/sql/updates/world/2013_06_15_06_world_creature.sql deleted file mode 100644 index a9db8f93583..00000000000 --- a/sql/updates/world/2013_06_15_06_world_creature.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Update Void Traveler Scriptname -UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler'; diff --git a/sql/updates/world/2013_06_15_07_world_gossip.sql b/sql/updates/world/2013_06_15_07_world_gossip.sql deleted file mode 100644 index 14da6211f93..00000000000 --- a/sql/updates/world/2013_06_15_07_world_gossip.sql +++ /dev/null @@ -1,47 +0,0 @@ --- Arathandris Silversky -UPDATE `creature_template` SET `gossip_menu_id`=2208 WHERE `entry` IN (9528); --- Add Any Missing Gossip Menu item -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2844; -- Before Quest 4101 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2844); -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2845; -- After Quest 4101 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2845); -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2848; -- If Horde -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2848); --- Add Any Missing Gossip Option -DELETE FROM `gossip_menu_option` WHERE menu_id=2208; -INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES -(2208,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), -(2208,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup` IN (2208); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(14,2208,2844,0,8,3781,0,0,1,0,'','Arathandris Silversky - Show gossip text if player has not been rewarded quest 4101'), -(14,2208,2845,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip text if player has been rewarded quest 4101'), -(14,2208,2848,0,6,67,0,0,0,0,'','Arathandris Silversky - Show gossip text if player is horde'); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (2208); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(15,2208,0,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'), -(15,2208,0,1,2,11511,1,1,1,0,'','Arathandris Silversky - Show gossip option if player does not have Cenarion Beacon'), -(15,2208,1,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'); - --- Maybess Riverbreeze -UPDATE `creature_template` SET `gossip_menu_id`=21400 WHERE `entry` IN (9529); --- Add Any Missing Gossip Menu item -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2842; -- Before Quest 4102 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2842); -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2843; -- After Quest 4102 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2843); -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2849; -- If Alliance -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2849); --- Add Any Missing Gossip Option -DELETE FROM `gossip_menu_option` WHERE menu_id=21400; -INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES -(21400,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), -(21400,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (21400); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(15,21400,0,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'), -(15,21400,0,1,2,11511,1,1,1,0,'','Maybess Riverbreeze - Show gossip option if player does not have Cenarion Beacon'), -(15,21400,1,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'); diff --git a/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql deleted file mode 100644 index 3c68f4e5b33..00000000000 --- a/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql +++ /dev/null @@ -1,5 +0,0 @@ -DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (33923,33666,33711); -INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES -(33923,33923,38796), -(33666,33666,38795), -(33711,33711,38794); diff --git a/sql/updates/world/2013_06_15_09_world_creature_template.sql b/sql/updates/world/2013_06_15_09_world_creature_template.sql deleted file mode 100644 index d4673e08a15..00000000000 --- a/sql/updates/world/2013_06_15_09_world_creature_template.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Fix cosmetic-drakkari-bat-ph -UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=27490; diff --git a/sql/updates/world/2013_06_16_00_world_misc.sql b/sql/updates/world/2013_06_16_00_world_misc.sql new file mode 100644 index 00000000000..49f8d4cab6e --- /dev/null +++ b/sql/updates/world/2013_06_16_00_world_misc.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction_A`=103,`faction_H`=103 WHERE `entry`=26127; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 0e59f1d517a..a4572f43563 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -812,7 +812,10 @@ public: struct npc_nexus_drake_hatchlingAI : public FollowerAI //The spell who makes the npc follow the player is missing, also we can use FollowerAI! { - npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature) {} + npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature) + { + HarpoonerGUID = 0; + } uint64 HarpoonerGUID; bool WithRedDragonBlood; -- cgit v1.2.3 From 86f2c84ee587cd35274fbab2cc5052871a305cd1 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 08:58:37 -0230 Subject: Script: Add proper spell to Lake Frog script. --- src/server/scripts/Northrend/zone_grizzly_hills.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 6ea83a6cd2a..560ab86e3e4 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -711,6 +711,7 @@ enum LakeFrog SPELL_WARTS = 62581, SPELL_MAIDEN_OF_ASHWOOD_LAKE_TRANSFORM = 62550, SPELL_SUMMON_ASHWOOD_BRAND = 62554, + SPELL_FROG_KISS = 62536, // Text SAY_MAIDEN_0 = 0, SAY_MAIDEN_1 = 1 @@ -792,7 +793,7 @@ public: player->AddAura(SPELL_WARTS, player); else { - player->RemoveAura(SPELL_WARTSBGONE_LIP_BALM); + DoCast(player, SPELL_FROG_KISS); // Removes SPELL_WARTSBGONE_LIP_BALM if (me->GetEntry() == NPC_LAKE_FROG) { -- cgit v1.2.3 From 14695b056acfa89edb0f4acf198b4fdf3228aaa1 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 17 Jun 2013 20:52:41 -0230 Subject: Scripting: Quest: Troll Patrol: The Alchemist's Apprentice --- .../world/2013_06_16_04_world_creature_text.sql | 41 +- sql/updates/world/2013_06_17_02_world_misc.sql | 86 +++ src/server/scripts/Northrend/zone_zuldrak.cpp | 699 ++++++++++++++++++++- 3 files changed, 801 insertions(+), 25 deletions(-) create mode 100644 sql/updates/world/2013_06_17_02_world_misc.sql (limited to 'src/server/scripts/Northrend') diff --git a/sql/updates/world/2013_06_16_04_world_creature_text.sql b/sql/updates/world/2013_06_16_04_world_creature_text.sql index d6333628a0e..3f08495f884 100644 --- a/sql/updates/world/2013_06_16_04_world_creature_text.sql +++ b/sql/updates/world/2013_06_16_04_world_creature_text.sql @@ -2,23 +2,23 @@ DELETE FROM `creature_text` WHERE `entry`=28205; INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES -- Events 1,2,3 -(28205,0,0,'Quickly, get me some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,1,'I think it needs...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,2,'Find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,3,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,4,'We need some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,5,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 4 -(28205,1,0,'I think it''s time for...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,1,'Next, we''ll need...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,2,'Tastes like it needs more....',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,3,'Alright, now find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 5 -(28205,2,0,'Coming along nicely, but still needs...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,2,1,'Before it thickens, we must add...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 6 -(28205,3,0,'Before it boils over, I need...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Fail (28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'), @@ -38,10 +38,9 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr (28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,20,0,'Burning Ice!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,21,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,22,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,23,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,24,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,25,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,26,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); +(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); diff --git a/sql/updates/world/2013_06_17_02_world_misc.sql b/sql/updates/world/2013_06_17_02_world_misc.sql new file mode 100644 index 00000000000..b938ea45e95 --- /dev/null +++ b/sql/updates/world/2013_06_17_02_world_misc.sql @@ -0,0 +1,86 @@ +-- Add option conditions for Alchemist Finklestein +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (9668) AND `SourceEntry` IN (0) AND `ConditionValue1` IN (51216); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,9668,0,1,1,51216,0,0,1,0,'','Alchemist Finklestein - Show gossip option only if player does not have aura 51216'); + +UPDATE `creature_template` SET `AIName`= '',`ScriptName`= 'npc_alchemist_finklestein' WHERE `entry`=28205; +UPDATE `gameobject_template` SET `ScriptName`= 'go_finklesteins_cauldron' WHERE `entry`=190498; + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (51134,51105,51107,51015,51154,51157,51046,51018,51055,51057, +51059,51062,51064,51067,51069,51072,51077,51079,51081,51083,51085,51087,51091,51093,51095,51097,51100,51102); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(51134,'spell_random_ingredient_easy'), +(51105,'spell_random_ingredient_medium'), +(51107,'spell_random_ingredient_hard'), +(51015,'spell_random_ingredient_aura'), +(51154,'spell_random_ingredient_aura'), +(51157,'spell_random_ingredient_aura'), +(51046,'spell_pot_check'), +(51018,'spell_fetch_ingredient_aura'), +(51055,'spell_fetch_ingredient_aura'), +(51057,'spell_fetch_ingredient_aura'), +(51059,'spell_fetch_ingredient_aura'), +(51062,'spell_fetch_ingredient_aura'), +(51064,'spell_fetch_ingredient_aura'), +(51067,'spell_fetch_ingredient_aura'), +(51069,'spell_fetch_ingredient_aura'), +(51072,'spell_fetch_ingredient_aura'), +(51077,'spell_fetch_ingredient_aura'), +(51079,'spell_fetch_ingredient_aura'), +(51081,'spell_fetch_ingredient_aura'), +(51083,'spell_fetch_ingredient_aura'), +(51085,'spell_fetch_ingredient_aura'), +(51087,'spell_fetch_ingredient_aura'), +(51091,'spell_fetch_ingredient_aura'), +(51093,'spell_fetch_ingredient_aura'), +(51095,'spell_fetch_ingredient_aura'), +(51097,'spell_fetch_ingredient_aura'), +(51100,'spell_fetch_ingredient_aura'), +(51102,'spell_fetch_ingredient_aura'); + +-- Add texts for Alchemist Finklestein +DELETE FROM `creature_text` WHERE `entry`=28205; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +-- Events 1,2,3 +(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 4 +(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 5 +(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 6 +(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Fail +(28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Item request +(28205,5,0,'Knotroot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,6,0,'Pickled Eagle Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,7,0,'Speckled Guano!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,8,0,'Withered Batwing!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,9,0,'Seasoned Slider Cider!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,10,0,'Pulverized Gargoyle Teeth!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,11,0,'Muddy Mire Maggot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,12,0,'Spiky Spider Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,13,0,'Hairy Herring Head!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,14,0,'Putrid Pirate Perspiration!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,15,0,'Icecrown Bottled Water!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,16,0,'Wasp''s Wings!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index e8b4127f24c..4f7c865f3ac 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -21,12 +21,15 @@ #include "ScriptedEscortAI.h" #include "Player.h" #include "SpellInfo.h" +#include "SpellScript.h" +#include "SpellAuras.h" +#include "SpellAuraEffects.h" /*#### ## npc_drakuru_shackles ####*/ -enum eDrakuruShackles +enum DrakuruShackles { SPELL_LEFT_CHAIN = 59951, SPELL_RIGHT_CHAIN = 59952, @@ -34,7 +37,7 @@ enum eDrakuruShackles SPELL_FREE_RAGECLAW = 55223, NPC_RAGECLAW = 29686, - QUEST_TROLLS_IS_GONE_CRAZY = 12861, + QUEST_TROLLS_IS_GONE_CRAZY = 12861 }; class npc_drakuru_shackles : public CreatureScript @@ -115,7 +118,7 @@ public: ## npc_captured_rageclaw ####*/ -enum eRageclaw +enum Rageclaw { SPELL_UNSHACKLED = 55085, SPELL_KNEEL = 39656 @@ -1385,7 +1388,7 @@ public: ## go_scourge_enclosure ######*/ -enum eScourgeEnclosure +enum ScourgeEnclosure { QUEST_OUR_ONLY_HOPE = 12916, NPC_GYMER_DUMMY = 29928 //from quest template @@ -1413,6 +1416,686 @@ public: } }; +/*###### +## Quest: Troll Patrol: The Alchemist's Apprentice +######*/ + +enum Finklestein +{ + // Creatre + NPC_FINKLESTEIN = 28205, + // Quest + QUEST_THE_ALCHEMIST_APPRENTICE_DAILY = 12541, + // Spells + SPELL_ALCHEMIST_APPRENTICE_INVISBUFF = 51216, + SPELL_RANDOM_INGREDIENT_EASY_AURA = 51015, + SPELL_RANDOM_INGREDIENT_MEDIUM_AURA = 51154, + SPELL_RANDOM_INGREDIENT_HARD_AURA = 51157, + SPELL_RANDOM_INGREDIENT_EASY = 51134, + SPELL_RANDOM_INGREDIENT_MEDIUM = 51105, + SPELL_RANDOM_INGREDIENT_HARD = 51107, + SPELL_NEXT_INGREDIENT = 51049, + SPELL_POT_CHECK = 51046, + SPELL_THROW_INGREDIENT = 51025, + SPELL_KILL_CREDIT = 51111, + // Spell Fetch Easy + SPELL_FETCH_KNOTROOT = 51018, + SPELL_FETCH_PICKLED_EAGLE_EGG = 51055, + SPELL_FETCH_SPECKLED_GUANO = 51057, + SPELL_FETCH_WITHERED_BATWING = 51059, + SPELL_FETCH_SEASONED_SLIDER_CIDER = 51062, + SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH = 51064, + SPELL_FETCH_MUDDY_MIRE_MAGGOT = 51067, + SPELL_FETCH_SPIKY_SPIDER_EGG = 51069, + SPELL_FETCH_HAIRY_HERRING_HEAD = 51072, + SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION = 51077, + SPELL_FETCH_ICECROWN_BOTTLED_WATER = 51079, + // Spell Have Easy + SPELL_HAVE_KNOTROOT = 51047, + SPELL_HAVE_PICKLED_EAGLE_EGG = 51056, + SPELL_HAVE_SPECKLED_GUANO = 51058, + SPELL_HAVE_WITHERED_BATWING = 51060, + SPELL_HAVE_SEASONED_SLIDER_CIDER = 51063, + SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH = 51065, + SPELL_HAVE_MUDDY_MIRE_MAGGOT = 51068, + SPELL_HAVE_SPIKY_SPIDER_EGG = 51070, + SPELL_HAVE_HAIRY_HERRING_HEAD = 51075, + SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION = 51078, + SPELL_HAVE_ICECROWN_BOTTLED_WATER = 51080, + // Spell Fetch Medium + SPELL_FETCH_WASPS_WINGS = 51081, + SPELL_FETCH_PRISMATIC_MOJO = 51083, + SPELL_FETCH_RAPTOR_CLAW = 51085, + SPELL_FETCH_AMBERSEED = 51087, + SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW = 51091, + // Spell Have Medium + SPELL_HAVE_WASPS_WINGS = 51082, + SPELL_HAVE_PRISMATIC_MOJO = 51084, + SPELL_HAVE_RAPTOR_CLAW = 51086, + SPELL_HAVE_AMBERSEED = 51088, + SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW = 51092, + // Spell Fetch Hard + SPELL_FETCH_CHILLED_SERPENT_MUCUS = 51093, + SPELL_FETCH_CRYSTALLIZED_HOGSNOT = 51095, + SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS = 51097, + SPELL_FETCH_TROLLBANE = 51100, + SPELL_FETCH_FROZEN_SPIDER_ICHOR = 51102, + // Spell Have Hard + SPELL_HAVE_CHILLED_SERPENT_MUCUS = 51094, + SPELL_HAVE_CRYSTALLIZED_HOGSNOT = 51096, + SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS = 51098, + SPELL_HAVE_TROLLBANE = 51101, + SPELL_HAVE_FROZEN_SPIDER_ICHOR = 51104, + // Text + SAY_EASY_123 = 0, + SAY_MEDIUM_4 = 1, + SAY_MEDIUM_5 = 2, + SAY_HARD_6 = 3, + SAY_RUINED = 4, + // Text Easy + SAY_KNOTROOT = 5, + SAY_PICKLED_EAGLE_EGG = 6, + SAY_SPECKLED_GUANO = 7, + SAY_WITHERED_BATWING = 8, + SAY_SEASONED_SLIDER_CIDER = 9, + SAY_PULVERIZED_GARGOYLE_TEETH = 10, + SAY_MUDDY_MIRE_MAGGOT = 11, + SAY_SPIKY_SPIDER_EGG = 12, + SAY_HAIRY_HERRING_HEAD = 13, + SAY_PUTRID_PIRATE_PERSPIRATION = 14, + SAY_ICECROWN_BOTTLED_WATER = 15, + // Text Medium + SAY_WASPS_WINGS = 16, + SAY_PRISMATIC_MOJO = 17, + SAY_RAPTOR_CLAW = 18, + SAY_AMBERSEED = 19, + SAY_SHRUNKEN_DRAGONS_CLAW = 20, + // Text Hard + SAY_CHILLED_SERPENT_MUCUS = 21, + SAY_CRYSTALLIZED_HOGSNOT = 22, + SAY_CRUSHED_BASILISK_CRYSTALS = 23, + SAY_TROLLBANE = 24, + SAY_FROZEN_SPIDER_ICHOR = 25 +}; + +enum FinklesteinEvents +{ + EVENT_TURN_TO_POT = 1, + EVENT_TURN_BACK = 2, + EVENT_EASY_123 = 3, + EVENT_MEDIUM_4 = 4, + EVENT_MEDIUM_5 = 5, + EVENT_HARD_6 = 6 +}; + +class npc_alchemist_finklestein : public CreatureScript +{ +public: + npc_alchemist_finklestein() : CreatureScript("npc_alchemist_finklestein") { } + + struct npc_alchemist_finklesteinAI : public ScriptedAI + { + npc_alchemist_finklesteinAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() + { + _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000)); + } + + void SetData(uint32 Type, uint32 Data) + { + if (Type == 1 && Data == 1) + switch (_getingredienttry) + { + case 2: + case 3: + _events.ScheduleEvent(EVENT_EASY_123, 100); + break; + case 4: + _events.ScheduleEvent(EVENT_MEDIUM_4, 100); + break; + case 5: + _events.ScheduleEvent(EVENT_MEDIUM_5, 100); + break; + case 6: + _events.ScheduleEvent(EVENT_HARD_6, 100); + break; + default: + break; + } + } + + void UpdateAI(uint32 diff) + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_TURN_TO_POT: + me->SetFacingTo(6.230825f); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING_NO_SHEATHE); + _events.ScheduleEvent(EVENT_TURN_BACK, 11000); + break; + case EVENT_TURN_BACK: + me->SetFacingTo(4.886922f); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(25000, 41000)); + break; + case EVENT_EASY_123: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_EASY_123, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_EASY_AURA); + ++_getingredienttry; + } + break; + case EVENT_MEDIUM_4: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_MEDIUM_4, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); + ++_getingredienttry; + } + break; + case EVENT_MEDIUM_5: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_MEDIUM_5, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); + ++_getingredienttry; + } + break; + case EVENT_HARD_6: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_HARD_6, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_HARD_AURA); + ++_getingredienttry; + } + break; + default: + break; + } + } + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) + { + player->CLOSE_GOSSIP_MENU(); + DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + _playerGUID = player->GetGUID(); + _getingredienttry = 1; + _events.ScheduleEvent(EVENT_EASY_123, 100); + } + + private: + EventMap _events; + uint64 _playerGUID; + uint8 _getingredienttry; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_alchemist_finklesteinAI(creature); + } +}; + +class go_finklesteins_cauldron : public GameObjectScript +{ +public: + go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { } + + bool OnGossipHello(Player* player, GameObject* go) + { + player->CastSpell(player, SPELL_POT_CHECK); + return true; + } +}; + +/*##### +# spell_random_ingredient_aura +#####*/ + +class spell_random_ingredient_aura : public SpellScriptLoader +{ + public: spell_random_ingredient_aura() : SpellScriptLoader("spell_random_ingredient_aura") { } + + class spell_random_ingredient_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_random_ingredient_aura_AuraScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_EASY) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_MEDIUM) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_HARD)) + return false; + return true; + } + + void PeriodicTick(AuraEffect const* aurEff) + { + switch (GetSpellInfo()->Id) + { + case SPELL_RANDOM_INGREDIENT_EASY_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_EASY); + break; + case SPELL_RANDOM_INGREDIENT_MEDIUM_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_MEDIUM); + break; + case SPELL_RANDOM_INGREDIENT_HARD_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_HARD); + break; + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_random_ingredient_aura_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_random_ingredient_aura_AuraScript(); + } +}; + +/*##### +# spell_random_ingredient_easy +#####*/ + +class spell_random_ingredient_easy : public SpellScriptLoader +{ + public: spell_random_ingredient_easy() : SpellScriptLoader("spell_random_ingredient_easy") { } + + class spell_random_ingredient_easy_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_easy_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 11); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_KNOTROOT, true, NULL); + finklestein->AI()->Talk(SAY_KNOTROOT, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_PICKLED_EAGLE_EGG, true, NULL); + finklestein->AI()->Talk(SAY_PICKLED_EAGLE_EGG, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_SPECKLED_GUANO, true, NULL); + finklestein->AI()->Talk(SAY_SPECKLED_GUANO, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_WITHERED_BATWING, true, NULL); + finklestein->AI()->Talk(SAY_WITHERED_BATWING, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_SEASONED_SLIDER_CIDER, true, NULL); + finklestein->AI()->Talk(SAY_SEASONED_SLIDER_CIDER, player->GetGUID()); + break; + case 6: + finklestein->CastSpell(player, SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, true, NULL); + finklestein->AI()->Talk(SAY_PULVERIZED_GARGOYLE_TEETH, player->GetGUID()); + break; + case 7: + finklestein->CastSpell(player, SPELL_FETCH_MUDDY_MIRE_MAGGOT, true, NULL); + finklestein->AI()->Talk(SAY_MUDDY_MIRE_MAGGOT, player->GetGUID()); + break; + case 8: + finklestein->CastSpell(player, SPELL_FETCH_SPIKY_SPIDER_EGG, true, NULL); + finklestein->AI()->Talk(SAY_SPIKY_SPIDER_EGG, player->GetGUID()); + break; + case 9: + finklestein->CastSpell(player, SPELL_FETCH_HAIRY_HERRING_HEAD, true, NULL); + finklestein->AI()->Talk(SAY_HAIRY_HERRING_HEAD, player->GetGUID()); + break; + case 10: + finklestein->CastSpell(player, SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, true, NULL); + finklestein->AI()->Talk(SAY_PUTRID_PIRATE_PERSPIRATION, player->GetGUID()); + break; + case 11: + finklestein->CastSpell(player, SPELL_FETCH_ICECROWN_BOTTLED_WATER, true, NULL); + finklestein->AI()->Talk(SAY_ICECROWN_BOTTLED_WATER, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_easy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_easy_SpellScript(); + } +}; + +/*##### +# spell_random_ingredient_medium +#####*/ + +class spell_random_ingredient_medium : public SpellScriptLoader +{ + public: spell_random_ingredient_medium() : SpellScriptLoader("spell_random_ingredient_medium") { } + + class spell_random_ingredient_medium_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_medium_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 5); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_WASPS_WINGS, true, NULL); + finklestein->AI()->Talk(SAY_WASPS_WINGS, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_PRISMATIC_MOJO, true, NULL); + finklestein->AI()->Talk(SAY_PRISMATIC_MOJO, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_RAPTOR_CLAW, true, NULL); + finklestein->AI()->Talk(SAY_RAPTOR_CLAW, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_AMBERSEED, true, NULL); + finklestein->AI()->Talk(SAY_AMBERSEED, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, true, NULL); + finklestein->AI()->Talk(SAY_SHRUNKEN_DRAGONS_CLAW, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_medium_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_medium_SpellScript(); + } +}; + +/*##### +# spell_random_ingredient_hard +#####*/ + +class spell_random_ingredient_hard : public SpellScriptLoader +{ + public: spell_random_ingredient_hard() : SpellScriptLoader("spell_random_ingredient_hard") { } + + class spell_random_ingredient_hard_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_hard_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 5); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_CHILLED_SERPENT_MUCUS, true, NULL); + finklestein->AI()->Talk(SAY_CHILLED_SERPENT_MUCUS, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_CRYSTALLIZED_HOGSNOT, true, NULL); + finklestein->AI()->Talk(SAY_CRYSTALLIZED_HOGSNOT, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, true, NULL); + finklestein->AI()->Talk(SAY_CRUSHED_BASILISK_CRYSTALS, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_TROLLBANE, true, NULL); + finklestein->AI()->Talk(SAY_TROLLBANE, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_FROZEN_SPIDER_ICHOR, true, NULL); + finklestein->AI()->Talk(SAY_FROZEN_SPIDER_ICHOR, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_hard_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_hard_SpellScript(); + } +}; + +/*##### +# spell_pot_check +#####*/ + +uint32 const FetchSpells[21] [4] = +{ + // { Fetch spell, Have spell, Item, Text } + { 51018, 51047, 38338, 6 }, // Knotroot + { 51055, 51056, 38341, 7 }, // Pickled Eagle Egg + { 51057, 51058, 38337, 8 }, // Speckled Guano + { 51059, 51060, 38339, 9 }, // Withered Batwing + { 51062, 51063, 38381, 10 }, // Seasoned Slider Cider + { 51064, 51065, 38384, 11 }, // Pulverized Gargoyle Teeth + { 51067, 51068, 38386, 12 }, // Muddy Mire Maggot + { 51069, 51070, 38393, 13 }, // Spiky Spider Egg + { 51072, 51075, 38396, 14 }, // Hairy Herring Head + { 51077, 51078, 38397, 15 }, // Putrid Pirate Perspiration + { 51079, 51080, 38398, 16 }, // Icecrown Bottled Water + { 51081, 51082, 38369, 17 }, // Wasp's Wings + { 51083, 51084, 38343, 18 }, // Prismatic Mojo + { 51085, 51086, 38370, 19 }, // Raptor Claw + { 51087, 51088, 38340, 20 }, // Amberseed + { 51091, 51092, 38344, 21 }, // Shrunken Dragon's Claw + { 51093, 51094, 38346, 22 }, // Chilled Serpent Mucus + { 51095, 51096, 38336, 23 }, // Crystallized Hogsnot + { 51097, 51098, 38379, 24 }, // Crushed Basilisk Crystals + { 51100, 51101, 38342, 25 }, // Trollbane + { 51102, 51104, 38345, 26 } // Frozen Spider Ichor +}; + +class spell_pot_check : public SpellScriptLoader +{ + public: spell_pot_check() : SpellScriptLoader("spell_pot_check") { } + + class spell_pot_check_SpellScript : public SpellScript + { + PrepareSpellScript(spell_pot_check_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_FROZEN_SPIDER_ICHOR)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + for (uint8 i = 0; i < 21; ++i) + { + if(player->HasAura(FetchSpells[i] [0])) + { + player->CastSpell(player, SPELL_THROW_INGREDIENT); + player->RemoveAura(FetchSpells[i] [0]); + if(player->HasAura(FetchSpells[i] [1])) + { + player->RemoveAura(FetchSpells[i] [1]); + player->DestroyItemCount(FetchSpells[i] [2], 1, true); + if (i < 15) + { + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) + finklestein->AI()->SetData(1, 1); + return; + } + else + { + if (player->GetQuestStatus(QUEST_THE_ALCHEMIST_APPRENTICE_DAILY) == QUEST_STATUS_INCOMPLETE) + { + player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + player->CastSpell(player, SPELL_KILL_CREDIT); + } + } + } + else + { + RemoveItems(player); + player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) + finklestein->AI()->Talk(SAY_RUINED, player->GetGUID()); + return; + } + } + } + } + } + + void RemoveItems(Player* player) + { + for (uint8 i = 0; i < 21; ++i) + if (player->HasItemCount(FetchSpells[i] [2], 1, true)) + player->DestroyItemCount(FetchSpells[i] [2], 1, true); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_pot_check_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_pot_check_SpellScript(); + } +}; + +/*##### +# spell_fetch_ingredient_aura +#####*/ + +class spell_fetch_ingredient_aura : public SpellScriptLoader +{ + public: spell_fetch_ingredient_aura() : SpellScriptLoader("spell_fetch_ingredient_aura") { } + + class spell_fetch_ingredient_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_fetch_ingredient_aura_AuraScript); + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + if (Unit* target = GetTarget()) + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + if (target->HasAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF)) + if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f)) + { + target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + finklestein->AI()->Talk(SAY_RUINED, target->GetGUID()); + } + } + + void Register() + { + OnEffectRemove += AuraEffectRemoveFn(spell_fetch_ingredient_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_fetch_ingredient_aura_AuraScript(); + } +}; + void AddSC_zuldrak() { new npc_drakuru_shackles; @@ -1428,4 +2111,12 @@ void AddSC_zuldrak() new npc_elemental_lord; new npc_fiend_elemental; new go_scourge_enclosure; + new npc_alchemist_finklestein; + new go_finklesteins_cauldron; + new spell_random_ingredient_aura; + new spell_random_ingredient_easy; + new spell_random_ingredient_medium; + new spell_random_ingredient_hard; + new spell_pot_check; + new spell_fetch_ingredient_aura; } -- cgit v1.2.3 From 2d892465d0e74bd1819f09745e5a3a75c3fe33f9 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 17 Jun 2013 21:36:52 -0230 Subject: Core/Scripting: Remove double check. Thanks joschiwald --- src/server/scripts/Northrend/zone_zuldrak.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 4f7c865f3ac..842805416ee 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -2075,13 +2075,12 @@ class spell_fetch_ingredient_aura : public SpellScriptLoader { if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) if (Unit* target = GetTarget()) - if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) - if (target->HasAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF)) - if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f)) - { - target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); - finklestein->AI()->Talk(SAY_RUINED, target->GetGUID()); - } + if (target->HasAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF)) + if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f)) + { + target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + finklestein->AI()->Talk(SAY_RUINED, target->GetGUID()); + } } void Register() -- cgit v1.2.3 From 779f3c2f08a2bb46a86659ead6502672590386ed Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 18 Jun 2013 11:47:24 -0230 Subject: Core/Scripting: Updated Quest: Troll Patrol: The Alchemist's Apprentice scripting --- .../2013_06_18_04_world_spell_script_names.sql | 5 + src/server/scripts/Northrend/zone_zuldrak.cpp | 313 ++++++--------------- 2 files changed, 84 insertions(+), 234 deletions(-) create mode 100644 sql/updates/world/2013_06_18_04_world_spell_script_names.sql (limited to 'src/server/scripts/Northrend') diff --git a/sql/updates/world/2013_06_18_04_world_spell_script_names.sql b/sql/updates/world/2013_06_18_04_world_spell_script_names.sql new file mode 100644 index 00000000000..8c749c485cf --- /dev/null +++ b/sql/updates/world/2013_06_18_04_world_spell_script_names.sql @@ -0,0 +1,5 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (51134,51105,51107); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(51134,'spell_random_ingredient'), +(51105,'spell_random_ingredient'), +(51107,'spell_random_ingredient'); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 842805416ee..f506570888b 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1422,8 +1422,30 @@ public: enum Finklestein { - // Creatre + // Creature NPC_FINKLESTEIN = 28205, + // Item + ITEM_KNOTROOT = 38338, + ITEM_PICKLED_EAGLE_EGG = 38341, + ITEM_SPECKLED_GUANO = 38337, + ITEM_WITHERED_BATWING = 38339, + ITEM_SEASONED_SLIDER_CIDER = 38381, + ITEM_PULVERIZED_GARGOYLE_TEETH = 38384, + ITEM_MUDDY_MIRE_MAGGOT = 38386, + ITEM_SPIKY_SPIDER_EGG = 38393, + ITEM_HAIRY_HERRING_HEAD = 38396, + ITEM_PUTRID_PIRATE_PERSPIRATION = 38397, + ITEM_ICECROWN_BOTTLED_WATER = 38398, + ITEM_WASPS_WINGS = 38369, + ITEM_PRISMATIC_MOJO = 38343, + ITEM_RAPTOR_CLAW = 38370, + ITEM_AMBERSEED = 38340, + ITEM_SHRUNKEN_DRAGONS_CLAW = 38344, + ITEM_CHILLED_SERPENT_MUCUS = 38346, + ITEM_CRYSTALLIZED_HOGSNOT = 38336, + ITEM_CRUSHED_BASILISK_CRYSTALS = 38379, + ITEM_TROLLBANE = 38342, + ITEM_FROZEN_SPIDER_ICHOR = 38345, // Quest QUEST_THE_ALCHEMIST_APPRENTICE_DAILY = 12541, // Spells @@ -1654,6 +1676,31 @@ public: } }; +uint32 const FetchIngredients[21] [4] = +{ + { SPELL_FETCH_KNOTROOT, SPELL_HAVE_KNOTROOT, ITEM_KNOTROOT, SAY_KNOTROOT }, + { SPELL_FETCH_PICKLED_EAGLE_EGG, SPELL_HAVE_PICKLED_EAGLE_EGG, ITEM_PICKLED_EAGLE_EGG, SAY_PICKLED_EAGLE_EGG }, + { SPELL_FETCH_SPECKLED_GUANO, SPELL_HAVE_SPECKLED_GUANO, ITEM_SPECKLED_GUANO, SAY_SPECKLED_GUANO }, + { SPELL_FETCH_WITHERED_BATWING, SPELL_HAVE_WITHERED_BATWING, ITEM_WITHERED_BATWING, SAY_WITHERED_BATWING }, + { SPELL_FETCH_SEASONED_SLIDER_CIDER, SPELL_HAVE_SEASONED_SLIDER_CIDER, ITEM_SEASONED_SLIDER_CIDER, SAY_SEASONED_SLIDER_CIDER }, + { SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH, ITEM_PULVERIZED_GARGOYLE_TEETH, SAY_PULVERIZED_GARGOYLE_TEETH }, + { SPELL_FETCH_MUDDY_MIRE_MAGGOT, SPELL_HAVE_MUDDY_MIRE_MAGGOT, ITEM_MUDDY_MIRE_MAGGOT, SAY_MUDDY_MIRE_MAGGOT }, + { SPELL_FETCH_SPIKY_SPIDER_EGG, SPELL_HAVE_SPIKY_SPIDER_EGG, ITEM_SPIKY_SPIDER_EGG, SAY_SPIKY_SPIDER_EGG }, + { SPELL_FETCH_HAIRY_HERRING_HEAD, SPELL_HAVE_HAIRY_HERRING_HEAD, ITEM_HAIRY_HERRING_HEAD, SAY_HAIRY_HERRING_HEAD }, + { SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION, ITEM_PUTRID_PIRATE_PERSPIRATION, SAY_PUTRID_PIRATE_PERSPIRATION }, + { SPELL_FETCH_ICECROWN_BOTTLED_WATER, SPELL_HAVE_ICECROWN_BOTTLED_WATER, ITEM_ICECROWN_BOTTLED_WATER, SAY_ICECROWN_BOTTLED_WATER }, + { SPELL_FETCH_WASPS_WINGS, SPELL_HAVE_WASPS_WINGS, ITEM_WASPS_WINGS, SAY_WASPS_WINGS }, + { SPELL_FETCH_PRISMATIC_MOJO, SPELL_HAVE_PRISMATIC_MOJO, ITEM_PRISMATIC_MOJO, SAY_PRISMATIC_MOJO }, + { SPELL_FETCH_RAPTOR_CLAW, SPELL_HAVE_RAPTOR_CLAW, ITEM_RAPTOR_CLAW, SAY_RAPTOR_CLAW }, + { SPELL_FETCH_AMBERSEED, SPELL_HAVE_AMBERSEED, ITEM_AMBERSEED, SAY_AMBERSEED }, + { SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW, ITEM_SHRUNKEN_DRAGONS_CLAW, SAY_SHRUNKEN_DRAGONS_CLAW }, + { SPELL_FETCH_CHILLED_SERPENT_MUCUS, SPELL_HAVE_CHILLED_SERPENT_MUCUS, ITEM_CHILLED_SERPENT_MUCUS, SAY_CHILLED_SERPENT_MUCUS }, + { SPELL_FETCH_CRYSTALLIZED_HOGSNOT, SPELL_HAVE_CRYSTALLIZED_HOGSNOT, ITEM_CRYSTALLIZED_HOGSNOT, SAY_CRYSTALLIZED_HOGSNOT }, + { SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS, ITEM_CRUSHED_BASILISK_CRYSTALS, SAY_CRUSHED_BASILISK_CRYSTALS }, + { SPELL_FETCH_TROLLBANE, SPELL_HAVE_TROLLBANE, ITEM_TROLLBANE, SAY_TROLLBANE }, + { SPELL_FETCH_FROZEN_SPIDER_ICHOR, SPELL_HAVE_FROZEN_SPIDER_ICHOR, ITEM_FROZEN_SPIDER_ICHOR, SAY_FROZEN_SPIDER_ICHOR } +}; + /*##### # spell_random_ingredient_aura #####*/ @@ -1702,118 +1749,26 @@ class spell_random_ingredient_aura : public SpellScriptLoader }; /*##### -# spell_random_ingredient_easy +# spell_random_ingredient #####*/ -class spell_random_ingredient_easy : public SpellScriptLoader +class spell_random_ingredient : public SpellScriptLoader { - public: spell_random_ingredient_easy() : SpellScriptLoader("spell_random_ingredient_easy") { } + public: spell_random_ingredient() : SpellScriptLoader("spell_random_ingredient") { } - class spell_random_ingredient_easy_SpellScript : public SpellScript + class spell_random_ingredient_SpellScript : public SpellScript { - PrepareSpellScript(spell_random_ingredient_easy_SpellScript); + PrepareSpellScript(spell_random_ingredient_SpellScript); bool Validate(SpellInfo const* /*spellEntry*/) { if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER)) - return false; - return true; - } - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (Player* player = GetHitPlayer()) - { - uint8 spelltocast = urand(1, 11); - - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - - if (!finklestein) - return; - - switch (spelltocast) - { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_KNOTROOT, true, NULL); - finklestein->AI()->Talk(SAY_KNOTROOT, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_PICKLED_EAGLE_EGG, true, NULL); - finklestein->AI()->Talk(SAY_PICKLED_EAGLE_EGG, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_SPECKLED_GUANO, true, NULL); - finklestein->AI()->Talk(SAY_SPECKLED_GUANO, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_WITHERED_BATWING, true, NULL); - finklestein->AI()->Talk(SAY_WITHERED_BATWING, player->GetGUID()); - break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_SEASONED_SLIDER_CIDER, true, NULL); - finklestein->AI()->Talk(SAY_SEASONED_SLIDER_CIDER, player->GetGUID()); - break; - case 6: - finklestein->CastSpell(player, SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, true, NULL); - finklestein->AI()->Talk(SAY_PULVERIZED_GARGOYLE_TEETH, player->GetGUID()); - break; - case 7: - finklestein->CastSpell(player, SPELL_FETCH_MUDDY_MIRE_MAGGOT, true, NULL); - finklestein->AI()->Talk(SAY_MUDDY_MIRE_MAGGOT, player->GetGUID()); - break; - case 8: - finklestein->CastSpell(player, SPELL_FETCH_SPIKY_SPIDER_EGG, true, NULL); - finklestein->AI()->Talk(SAY_SPIKY_SPIDER_EGG, player->GetGUID()); - break; - case 9: - finklestein->CastSpell(player, SPELL_FETCH_HAIRY_HERRING_HEAD, true, NULL); - finklestein->AI()->Talk(SAY_HAIRY_HERRING_HEAD, player->GetGUID()); - break; - case 10: - finklestein->CastSpell(player, SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, true, NULL); - finklestein->AI()->Talk(SAY_PUTRID_PIRATE_PERSPIRATION, player->GetGUID()); - break; - case 11: - finklestein->CastSpell(player, SPELL_FETCH_ICECROWN_BOTTLED_WATER, true, NULL); - finklestein->AI()->Talk(SAY_ICECROWN_BOTTLED_WATER, player->GetGUID()); - break; - default: - break; - } - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_easy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_random_ingredient_easy_SpellScript(); - } -}; - -/*##### -# spell_random_ingredient_medium -#####*/ - -class spell_random_ingredient_medium : public SpellScriptLoader -{ - public: spell_random_ingredient_medium() : SpellScriptLoader("spell_random_ingredient_medium") { } - - class spell_random_ingredient_medium_SpellScript : public SpellScript - { - PrepareSpellScript(spell_random_ingredient_medium_SpellScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW)) + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) return false; return true; } @@ -1822,121 +1777,39 @@ class spell_random_ingredient_medium : public SpellScriptLoader { if (Player* player = GetHitPlayer()) { - uint8 spelltocast = urand(1, 5); - - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - if (!finklestein) - return; + uint8 ingredient = 0; - switch (spelltocast) + switch (GetSpellInfo()->Id) { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_WASPS_WINGS, true, NULL); - finklestein->AI()->Talk(SAY_WASPS_WINGS, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_PRISMATIC_MOJO, true, NULL); - finklestein->AI()->Talk(SAY_PRISMATIC_MOJO, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_RAPTOR_CLAW, true, NULL); - finklestein->AI()->Talk(SAY_RAPTOR_CLAW, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_AMBERSEED, true, NULL); - finklestein->AI()->Talk(SAY_AMBERSEED, player->GetGUID()); + case SPELL_RANDOM_INGREDIENT_EASY: + ingredient = urand(0, 10); break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, true, NULL); - finklestein->AI()->Talk(SAY_SHRUNKEN_DRAGONS_CLAW, player->GetGUID()); + case SPELL_RANDOM_INGREDIENT_MEDIUM: + ingredient = urand(11, 15); break; - default: + case SPELL_RANDOM_INGREDIENT_HARD: + ingredient = urand(16, 20); break; } - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_medium_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_random_ingredient_medium_SpellScript(); - } -}; - -/*##### -# spell_random_ingredient_hard -#####*/ - -class spell_random_ingredient_hard : public SpellScriptLoader -{ - public: spell_random_ingredient_hard() : SpellScriptLoader("spell_random_ingredient_hard") { } - - class spell_random_ingredient_hard_SpellScript : public SpellScript - { - PrepareSpellScript(spell_random_ingredient_hard_SpellScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) - return false; - return true; - } - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (Player* player = GetHitPlayer()) - { - uint8 spelltocast = urand(1, 5); - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - - if (!finklestein) - return; - - switch (spelltocast) + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_CHILLED_SERPENT_MUCUS, true, NULL); - finklestein->AI()->Talk(SAY_CHILLED_SERPENT_MUCUS, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_CRYSTALLIZED_HOGSNOT, true, NULL); - finklestein->AI()->Talk(SAY_CRYSTALLIZED_HOGSNOT, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, true, NULL); - finklestein->AI()->Talk(SAY_CRUSHED_BASILISK_CRYSTALS, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_TROLLBANE, true, NULL); - finklestein->AI()->Talk(SAY_TROLLBANE, player->GetGUID()); - break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_FROZEN_SPIDER_ICHOR, true, NULL); - finklestein->AI()->Talk(SAY_FROZEN_SPIDER_ICHOR, player->GetGUID()); - break; - default: - break; + finklestein->CastSpell(player, FetchIngredients[ingredient] [0], true, NULL); + finklestein->AI()->Talk(FetchIngredients[ingredient] [3], player->GetGUID()); } } } void Register() { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_hard_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } - }; + }; SpellScript* GetSpellScript() const { - return new spell_random_ingredient_hard_SpellScript(); + return new spell_random_ingredient_SpellScript(); } }; @@ -1944,32 +1817,6 @@ class spell_random_ingredient_hard : public SpellScriptLoader # spell_pot_check #####*/ -uint32 const FetchSpells[21] [4] = -{ - // { Fetch spell, Have spell, Item, Text } - { 51018, 51047, 38338, 6 }, // Knotroot - { 51055, 51056, 38341, 7 }, // Pickled Eagle Egg - { 51057, 51058, 38337, 8 }, // Speckled Guano - { 51059, 51060, 38339, 9 }, // Withered Batwing - { 51062, 51063, 38381, 10 }, // Seasoned Slider Cider - { 51064, 51065, 38384, 11 }, // Pulverized Gargoyle Teeth - { 51067, 51068, 38386, 12 }, // Muddy Mire Maggot - { 51069, 51070, 38393, 13 }, // Spiky Spider Egg - { 51072, 51075, 38396, 14 }, // Hairy Herring Head - { 51077, 51078, 38397, 15 }, // Putrid Pirate Perspiration - { 51079, 51080, 38398, 16 }, // Icecrown Bottled Water - { 51081, 51082, 38369, 17 }, // Wasp's Wings - { 51083, 51084, 38343, 18 }, // Prismatic Mojo - { 51085, 51086, 38370, 19 }, // Raptor Claw - { 51087, 51088, 38340, 20 }, // Amberseed - { 51091, 51092, 38344, 21 }, // Shrunken Dragon's Claw - { 51093, 51094, 38346, 22 }, // Chilled Serpent Mucus - { 51095, 51096, 38336, 23 }, // Crystallized Hogsnot - { 51097, 51098, 38379, 24 }, // Crushed Basilisk Crystals - { 51100, 51101, 38342, 25 }, // Trollbane - { 51102, 51104, 38345, 26 } // Frozen Spider Ichor -}; - class spell_pot_check : public SpellScriptLoader { public: spell_pot_check() : SpellScriptLoader("spell_pot_check") { } @@ -2004,14 +1851,14 @@ class spell_pot_check : public SpellScriptLoader { for (uint8 i = 0; i < 21; ++i) { - if(player->HasAura(FetchSpells[i] [0])) + if(player->HasAura(FetchIngredients[i] [0])) { player->CastSpell(player, SPELL_THROW_INGREDIENT); - player->RemoveAura(FetchSpells[i] [0]); - if(player->HasAura(FetchSpells[i] [1])) + player->RemoveAura(FetchIngredients[i] [0]); + if(player->HasAura(FetchIngredients[i] [1])) { - player->RemoveAura(FetchSpells[i] [1]); - player->DestroyItemCount(FetchSpells[i] [2], 1, true); + player->RemoveAura(FetchIngredients[i] [1]); + player->DestroyItemCount(FetchIngredients[i] [2], 1, true); if (i < 15) { if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) @@ -2043,8 +1890,8 @@ class spell_pot_check : public SpellScriptLoader void RemoveItems(Player* player) { for (uint8 i = 0; i < 21; ++i) - if (player->HasItemCount(FetchSpells[i] [2], 1, true)) - player->DestroyItemCount(FetchSpells[i] [2], 1, true); + if (player->HasItemCount(FetchIngredients[i] [2], 1, true)) + player->DestroyItemCount(FetchIngredients[i] [2], 1, true); } void Register() @@ -2113,9 +1960,7 @@ void AddSC_zuldrak() new npc_alchemist_finklestein; new go_finklesteins_cauldron; new spell_random_ingredient_aura; - new spell_random_ingredient_easy; - new spell_random_ingredient_medium; - new spell_random_ingredient_hard; + new spell_random_ingredient; new spell_pot_check; new spell_fetch_ingredient_aura; } -- cgit v1.2.3 From b6aadc6698875fb9a706483b3db9e524faf5e65b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 18 Jun 2013 16:48:46 +0200 Subject: Scripts/Misc: Use new movement flag setting methods in scripts --- src/server/game/AI/SmartScripts/SmartAI.cpp | 13 ++----------- .../ScarletMonastery/boss_headless_horseman.cpp | 4 ++-- .../scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp | 2 +- .../EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp | 4 ++-- src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp | 6 +++--- src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp | 2 +- .../scripts/EasternKingdoms/zone_redridge_mountains.cpp | 2 +- src/server/scripts/Kalimdor/zone_azshara.cpp | 6 ++++-- .../ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp | 3 +-- .../FrozenHalls/HallsOfReflection/halls_of_reflection.cpp | 6 +++--- src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp | 2 +- .../UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp | 6 +----- src/server/scripts/Northrend/zone_howling_fjord.cpp | 2 +- src/server/scripts/Northrend/zone_sholazar_basin.cpp | 6 +++--- src/server/scripts/Outland/BlackTemple/boss_illidan.cpp | 2 +- .../CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp | 3 ++- .../SerpentShrine/instance_serpent_shrine.cpp | 3 ++- src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp | 6 +++--- 18 files changed, 34 insertions(+), 44 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 22710739b62..f43a7f91f32 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -724,27 +724,18 @@ uint64 SmartAI::GetGUID(int32 /*id*/) const void SmartAI::SetRun(bool run) { - if (run) - me->SetWalk(false); - else - me->SetWalk(true); - + me->SetWalk(!run); mRun = run; } void SmartAI::SetFly(bool fly) { me->SetDisableGravity(fly); - me->SendMovementFlagUpdate(); } void SmartAI::SetSwim(bool swim) { - if (swim) - me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING); - else - me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); - me->SendMovementFlagUpdate(); + me->SetSwim(swim); } void SmartAI::sGossipHello(Player* player) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 3c10d952f77..7b833b07abb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -443,7 +443,7 @@ public: { me->SetVisible(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); me->SetSpeed(MOVE_WALK, 5.0f, true); wp_reached = false; count = 0; @@ -476,7 +476,7 @@ public: instance->SetData(GAMEOBJECT_PUMPKIN_SHRINE, 0); //hide gameobject break; case 19: - me->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(false); break; case 20: { diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index ea8509ffc7c..1d85c8b4617 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -258,7 +258,7 @@ public: events.ScheduleEvent(EVENT_FLIGHT, 60000); break; case PHASE_FLIGHT: - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 1000); uiFlightCount = 0; uiBreathCount = 0; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 4247096bcbc..a051274d1b1 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -254,7 +254,7 @@ public: { OrbsEmpowered = 0; EmpowerCount = 0; - me->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->setActive(true); @@ -442,7 +442,7 @@ public: summoned->CastSpell(summoned, SPELL_SHADOW_CHANNELING, false); break; case CREATURE_ANVEENA: - summoned->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_DISABLE_GRAVITY); + summoned->SetDisableGravity(true); summoned->CastSpell(summoned, SPELL_ANVEENA_PRISON, true); summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); break; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 20d3df4b17f..3cd2587affe 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -318,14 +318,14 @@ class boss_akilzon : public CreatureScript target->GetPosition(x, y, z); if (target) { - target->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + target->SetDisableGravity(true); target->MonsterMoveWithSpeed(x, y, me->GetPositionZ()+15, 0); } Unit* Cloud = me->SummonTrigger(x, y, me->GetPositionZ()+16, 0, 15000); if (Cloud) { CloudGUID = Cloud->GetGUID(); - Cloud->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + Cloud->SetDisableGravity(true); Cloud->StopMoving(); Cloud->SetObjectScale(1.0f); Cloud->setFaction(35); @@ -398,7 +398,7 @@ class mob_akilzon_eagle : public CreatureScript EagleSwoop_Timer = urand(5000, 10000); arrived = true; TargetGUID = 0; - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); } void EnterCombat(Unit* /*who*/) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 51645b07158..9fac48c10a1 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -636,7 +636,7 @@ class mob_janalai_hatchling : public CreatureScript else me->GetMotionMaster()->MovePoint(0, hatcherway[1][3][0]+rand()%4-2, 1150.0f+rand()%4-2, hatcherway[1][3][2]); - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); } void EnterCombat(Unit* /*who*/) {/*DoZoneInCombat();*/} diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index bd0071f4cb6..bf3040d5d03 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -84,7 +84,7 @@ public: if (!player) return; - if (waypointId >= 65 && me->GetUnitMovementFlags() == MOVEMENTFLAG_WALKING) + if (waypointId >= 65) me->SetWalk(false); switch (waypointId) diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index ce85db66615..611936b5ff1 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -377,7 +377,8 @@ public: Talk(MSG_ESCAPE_NOTICE, player->GetGUID()); DoCast(me, SPELL_PERIODIC_DEPTH_CHARGE); - me->SetUnitMovementFlags(MOVEMENTFLAG_HOVER | MOVEMENTFLAG_SWIMMING); + me->SetHover(true); + me->SetSwim(true); me->SetSpeed(MOVE_RUN, 0.85f, true); me->GetMotionMaster()->MovementExpired(); me->GetMotionMaster()->MovePoint(CurrWP, WPs[CurrWP]); @@ -492,7 +493,8 @@ public: void Reset() { - me->SetUnitMovementFlags(MOVEMENTFLAG_HOVER | MOVEMENTFLAG_SWIMMING); + me->SetHover(true); + me->SetSwim(true); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); WeMustDie = false; WeMustDieTimer = 1000; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 2b1cc2590ca..a4749d63cb2 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -479,8 +479,7 @@ public: { if (temp->IsAlive() && !temp->GetVictim()) { - if (temp->HasUnitMovementFlag(MOVEMENTFLAG_WALKING)) - temp->SetWalk(false); + temp->SetWalk(false); if (temp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index abdd5db9d6f..efe9697a358 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -431,7 +431,7 @@ class npc_jaina_or_sylvanas_hor : public CreatureScript // Spawn LK in front of door, and make him move to the sword. if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) { - lichking->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + lichking->SetWalk(true); lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); //lichking->SetReactState(REACT_PASSIVE); lichkingGUID = lichking->GetGUID(); @@ -494,7 +494,7 @@ class npc_jaina_or_sylvanas_hor : public CreatureScript if (Creature* lichking = me->GetCreature(*me, lichkingGUID)) { lichking->AI()->Talk(SAY_LK_INTRO_3); - lichking->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + lichking->SetWalk(true); lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); } events.ScheduleEvent(EVENT_INTRO_LK_7, 10000); @@ -554,7 +554,7 @@ class npc_jaina_or_sylvanas_hor : public CreatureScript /// @todo Loralen/Koreln shall run also if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) { - lichking->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + lichking->SetWalk(true); lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); lichking->SetReactState(REACT_PASSIVE); lichkingGUID = lichking->GetGUID(); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index bf513b51855..1f1954cb00c 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -277,7 +277,7 @@ public: me->NearTeleportTo(pPos.GetPositionX(), pPos.GetPositionY(), pPos.GetPositionZ(), pPos.GetOrientation()); me->GetMotionMaster()->MoveChase(me->GetVictim(), 0, 0); - me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + me->SetWalk(true); Talk(EMOTE_ARCANE_EXPLOSION); Talk(SAY_ARCANE_EXPLOSION); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 023ef126dd3..51d3913a084 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -311,11 +311,7 @@ public: void Reset() { //! HACK: Creature's can't have MOVEMENTFLAG_FLYING - me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_HOVER); - me->SetSpeed(MOVE_SWIM, 1.0f); - me->SetSpeed(MOVE_RUN, 1.0f); - me->SetSpeed(MOVE_WALK, 1.0f); - //me->SetSpeed(MOVE_FLIGHT, 1.0f); + me->SetHover(true); me->GetPosition(x, y, z); DoTeleportTo(x+1, y, z+30); diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 32bc2f6e424..4cb52f6360f 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -186,7 +186,7 @@ public: if (!summonerGUID) return; - me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + me->SetWalk(true); Start(false, false, summonerGUID); } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index adf709ee304..0587d46c071 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -98,13 +98,13 @@ public: case 16: case 17: case 18: - me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); me->RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING); me->SetSpeed(MOVE_SWIM, 0.85f, true); - me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetSwim(true); + me->SetDisableGravity(true); break; case 19: - me->SetUnitMovementFlags(MOVEMENTFLAG_FALLING); + me->GetMotionMaster()->MoveFall(); break; case 28: player->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me); diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 59419f6dcbd..7cac1128815 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -810,7 +810,7 @@ public: { case 1: // lift off me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); me->StopMoving(); me->MonsterYell(SAY_TAKEOFF, LANG_UNIVERSAL, 0); DoPlaySoundToSet(me, SOUND_TAKEOFF); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 8ca61395f3a..13e6a1abd05 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -112,7 +112,8 @@ public: } void Reset() { - me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetSwim(true); + me->SetDisableGravity(true); SpoutAnimTimer = 1000; RotTimer = 0; WaterboltTimer = 15000; // give time to get in range when fight starts diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 439edefae8c..27134a3a740 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -156,7 +156,8 @@ class instance_serpent_shrine : public InstanceMapScript if (Creature* frenzy = player->SummonCreature(MOB_COILFANG_FRENZY, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000)) { frenzy->Attack(player, false); - frenzy->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_DISABLE_GRAVITY); + frenzy->SetSwim(true); + frenzy->SetDisableGravity(true); } DoSpawnFrenzy = false; } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 530e811f8cd..61cccc7ae24 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -132,7 +132,7 @@ class boss_alar : public CreatureScript //me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); //me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + me->SetDisableGravity(true); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->setActive(false); } @@ -142,7 +142,7 @@ class boss_alar : public CreatureScript if (instance) instance->SetData(DATA_ALAREVENT, IN_PROGRESS); - me->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); // after enterevademode will be set walk movement + me->SetDisableGravity(true); // after enterevademode will be set walk movement DoZoneInCombat(); me->setActive(true); } @@ -472,7 +472,7 @@ class mob_ember_of_alar : public CreatureScript mob_ember_of_alarAI(Creature* creature) : ScriptedAI(creature) { instance = creature->GetInstanceScript(); - creature->SetUnitMovementFlags(MOVEMENTFLAG_DISABLE_GRAVITY); + creature->SetDisableGravity(true); creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); } -- cgit v1.2.3 From 09eea66ee12a44295c0734cc55a1532440a11170 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Tue, 18 Jun 2013 16:51:13 +0200 Subject: Core: Fix warnings --- src/server/game/Entities/GameObject/GameObject.cpp | 2 ++ src/server/scripts/Northrend/zone_zuldrak.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 2a4c0b1c1c9..f6fd332e6a4 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2126,6 +2126,8 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t if (ActivateToQuest(target)) dynFlags |= GO_DYNFLAG_LO_SPARKLE; break; + default: + break; } fieldBuffer << uint16(dynFlags); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index f506570888b..8fdcf807cb7 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1669,7 +1669,7 @@ class go_finklesteins_cauldron : public GameObjectScript public: go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { } - bool OnGossipHello(Player* player, GameObject* go) + bool OnGossipHello(Player* player, GameObject* /*go*/) { player->CastSpell(player, SPELL_POT_CHECK); return true; @@ -1720,7 +1720,7 @@ class spell_random_ingredient_aura : public SpellScriptLoader return true; } - void PeriodicTick(AuraEffect const* aurEff) + void PeriodicTick(AuraEffect const* /*aurEff*/) { switch (GetSpellInfo()->Id) { -- cgit v1.2.3 From 89ec90753914ae89b2dbbc7a343cd8a667410af3 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 18 Jun 2013 18:15:33 +0200 Subject: Core/Objects: Refactored MovementInfo structure --- .../game/Battlegrounds/Zones/BattlegroundIC.cpp | 8 +-- src/server/game/Entities/Object/Object.cpp | 18 +++---- src/server/game/Entities/Object/Object.h | 59 ++++++++++++++-------- src/server/game/Entities/Player/Player.cpp | 28 +++++----- src/server/game/Entities/Transport/Transport.cpp | 14 ++--- src/server/game/Entities/Unit/Unit.cpp | 12 ++--- src/server/game/Entities/Unit/Unit.h | 12 ++--- src/server/game/Entities/Vehicle/Vehicle.cpp | 12 ++--- src/server/game/Handlers/GroupHandler.cpp | 4 +- src/server/game/Handlers/MovementHandler.cpp | 26 +++++----- src/server/game/Server/WorldSession.cpp | 38 +++++++------- .../SunwellPlateau/boss_felmyst.cpp | 2 +- .../scripts/Northrend/zone_sholazar_basin.cpp | 1 - src/server/scripts/World/npcs_special.cpp | 2 +- 14 files changed, 127 insertions(+), 109 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index a71fa2c071b..983c690523e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -101,10 +101,10 @@ void BattlegroundIC::DoAction(uint32 action, uint64 var) player->SetTransport(player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde); - player->m_movementInfo.t_pos.m_positionX = TransportMovementInfo.GetPositionX(); - player->m_movementInfo.t_pos.m_positionY = TransportMovementInfo.GetPositionY(); - player->m_movementInfo.t_pos.m_positionZ = TransportMovementInfo.GetPositionZ(); - player->m_movementInfo.t_guid = (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID(); + player->m_movementInfo.transport.pos.m_positionX = TransportMovementInfo.GetPositionX(); + player->m_movementInfo.transport.pos.m_positionY = TransportMovementInfo.GetPositionY(); + player->m_movementInfo.transport.pos.m_positionZ = TransportMovementInfo.GetPositionZ(); + player->m_movementInfo.transport.guid = (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID(); if (player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(), TeleportToTransportPosition.GetPositionY(), diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 5ddc632e573..ec6a3e518c4 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1078,12 +1078,12 @@ void MovementInfo::OutDebug() if (flags & MOVEMENTFLAG_ONTRANSPORT) { TC_LOG_INFO(LOG_FILTER_GENERAL, "TRANSPORT:"); - TC_LOG_INFO(LOG_FILTER_GENERAL, "guid: " UI64FMTD, t_guid); - TC_LOG_INFO(LOG_FILTER_GENERAL, "position: `%s`", t_pos.ToString().c_str()); - TC_LOG_INFO(LOG_FILTER_GENERAL, "seat: %i", t_seat); - TC_LOG_INFO(LOG_FILTER_GENERAL, "time: %u", t_time); + TC_LOG_INFO(LOG_FILTER_GENERAL, "guid: " UI64FMTD, transport.guid); + TC_LOG_INFO(LOG_FILTER_GENERAL, "position: `%s`", transport.pos.ToString().c_str()); + TC_LOG_INFO(LOG_FILTER_GENERAL, "seat: %i", transport.seat); + TC_LOG_INFO(LOG_FILTER_GENERAL, "time: %u", transport.time); if (flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT) - TC_LOG_INFO(LOG_FILTER_GENERAL, "time2: %u", t_time2); + TC_LOG_INFO(LOG_FILTER_GENERAL, "time2: %u", transport.time2); } if ((flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) @@ -1091,7 +1091,7 @@ void MovementInfo::OutDebug() TC_LOG_INFO(LOG_FILTER_GENERAL, "fallTime: %u", fallTime); if (flags & MOVEMENTFLAG_FALLING) - TC_LOG_INFO(LOG_FILTER_GENERAL, "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", j_zspeed, j_sinAngle, j_cosAngle, j_xyspeed); + TC_LOG_INFO(LOG_FILTER_GENERAL, "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", jump.zspeed, jump.sinAngle, jump.cosAngle, jump.xyspeed); if (flags & MOVEMENTFLAG_SPLINE_ELEVATION) TC_LOG_INFO(LOG_FILTER_GENERAL, "splineElevation: %f", splineElevation); @@ -1216,12 +1216,12 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == m_transport->GetGUIDLow()) { - float dtx = m_movementInfo.t_pos.m_positionX - obj->m_movementInfo.t_pos.m_positionX; - float dty = m_movementInfo.t_pos.m_positionY - obj->m_movementInfo.t_pos.m_positionY; + float dtx = m_movementInfo.transport.pos.m_positionX - obj->m_movementInfo.transport.pos.m_positionX; + float dty = m_movementInfo.transport.pos.m_positionY - obj->m_movementInfo.transport.pos.m_positionY; float disttsq = dtx * dtx + dty * dty; if (is3D) { - float dtz = m_movementInfo.t_pos.m_positionZ - obj->m_movementInfo.t_pos.m_positionZ; + float dtz = m_movementInfo.transport.pos.m_positionZ - obj->m_movementInfo.transport.pos.m_positionZ; disttsq += dtz * dtz; } return disttsq < (maxdist * maxdist); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 25f71deabe9..2bfb9633066 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -407,26 +407,54 @@ struct MovementInfo uint16 flags2; Position pos; uint32 time; + // transport - uint64 t_guid; - Position t_pos; - int8 t_seat; - uint32 t_time; - uint32 t_time2; + struct TransportInfo + { + void Reset() + { + guid = 0; + pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f); + seat = -1; + time = 0; + time2 = 0; + } + + uint64 guid; + Position pos; + int8 seat; + uint32 time; + uint32 time2; + } transport; + // swimming/flying float pitch; + // falling uint32 fallTime; - // jumping - float j_zspeed, j_sinAngle, j_cosAngle, j_xyspeed; + + // jumping + struct JumpInfo + { + void Reset() + { + zspeed = sinAngle = cosAngle = xyspeed = 0.0f; + } + + float zspeed, sinAngle, cosAngle, xyspeed; + + } jump; + // spline float splineElevation; MovementInfo() : - guid(), flags(), flags2(), pos(), time(), t_guid(), t_pos(), - t_seat(-1), t_time(), t_time2(), pitch(), fallTime(), - j_zspeed(), j_sinAngle(), j_cosAngle(), j_xyspeed() - { } + guid(0), flags(0), flags2(0), time(0), pitch(0.0f) + { + pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f); + transport.Reset(); + jump.Reset(); + } uint32 GetMovementFlags() const { return flags; } void SetMovementFlags(uint32 flag) { flags = flag; } @@ -440,15 +468,6 @@ struct MovementInfo void SetFallTime(uint32 time) { fallTime = time; } - void ClearTransport() - { - t_guid = 0; - t_pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f); - t_seat = -1; - t_time = 0; - t_time2 = 0; - } - void OutDebug(); }; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c1fad6c175f..6ff4fe09876 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2115,7 +2115,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati { m_transport->RemovePassenger(this); m_transport = NULL; - m_movementInfo.ClearTransport(); + m_movementInfo.transport.Reset(); RepopAtGraveyard(); // teleport to near graveyard if on transport, looks blizz like :) } @@ -2141,7 +2141,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati { m_transport->RemovePassenger(this); m_transport = NULL; - m_movementInfo.ClearTransport(); + m_movementInfo.transport.Reset(); } } @@ -2294,10 +2294,10 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (m_transport) { - final_x += m_movementInfo.t_pos.GetPositionX(); - final_y += m_movementInfo.t_pos.GetPositionY(); - final_z += m_movementInfo.t_pos.GetPositionZ(); - final_o += m_movementInfo.t_pos.GetOrientation(); + final_x += m_movementInfo.transport.pos.GetPositionX(); + final_y += m_movementInfo.transport.pos.GetPositionY(); + final_z += m_movementInfo.transport.pos.GetPositionZ(); + final_o += m_movementInfo.transport.pos.GetOrientation(); } m_teleport_dest = WorldLocation(mapid, final_x, final_y, final_z, final_o); @@ -2310,7 +2310,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati WorldPacket data(SMSG_NEW_WORLD, 4 + 4 + 4 + 4 + 4); data << uint32(mapid); if (m_transport) - data << m_movementInfo.t_pos.PositionXYZOStream(); + data << m_movementInfo.transport.pos.PositionXYZOStream(); else data << m_teleport_dest.PositionXYZOStream(); @@ -17145,18 +17145,18 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) // currently we do not support transport in bg else if (transGUID) { - m_movementInfo.t_guid = MAKE_NEW_GUID(transGUID, 0, HIGHGUID_MO_TRANSPORT); - m_movementInfo.t_pos.Relocate(fields[26].GetFloat(), fields[27].GetFloat(), fields[28].GetFloat(), fields[29].GetFloat()); + m_movementInfo.transport.guid = MAKE_NEW_GUID(transGUID, 0, HIGHGUID_MO_TRANSPORT); + m_movementInfo.transport.pos.Relocate(fields[26].GetFloat(), fields[27].GetFloat(), fields[28].GetFloat(), fields[29].GetFloat()); if (!Trinity::IsValidMapCoord( - GetPositionX()+m_movementInfo.t_pos.m_positionX, GetPositionY()+m_movementInfo.t_pos.m_positionY, - GetPositionZ()+m_movementInfo.t_pos.m_positionZ, GetOrientation()+m_movementInfo.t_pos.m_orientation) || + GetPositionX()+m_movementInfo.transport.pos.m_positionX, GetPositionY()+m_movementInfo.transport.pos.m_positionY, + GetPositionZ()+m_movementInfo.transport.pos.m_positionZ, GetOrientation()+m_movementInfo.transport.pos.m_orientation) || // transport size limited - m_movementInfo.t_pos.m_positionX > 250 || m_movementInfo.t_pos.m_positionY > 250 || m_movementInfo.t_pos.m_positionZ > 250) + m_movementInfo.transport.pos.m_positionX > 250 || m_movementInfo.transport.pos.m_positionY > 250 || m_movementInfo.transport.pos.m_positionZ > 250) { TC_LOG_ERROR(LOG_FILTER_PLAYER, "Player (guidlow %d) have invalid transport coordinates (X: %f Y: %f Z: %f O: %f). Teleport to bind location.", - guid, GetPositionX()+m_movementInfo.t_pos.m_positionX, GetPositionY()+m_movementInfo.t_pos.m_positionY, - GetPositionZ()+m_movementInfo.t_pos.m_positionZ, GetOrientation()+m_movementInfo.t_pos.m_orientation); + guid, GetPositionX()+m_movementInfo.transport.pos.m_positionX, GetPositionY()+m_movementInfo.transport.pos.m_positionY, + GetPositionZ()+m_movementInfo.transport.pos.m_positionZ, GetOrientation()+m_movementInfo.transport.pos.m_orientation); RelocateToHomebind(); } diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 8e889fe4881..23197b40ad0 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -636,7 +636,7 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, creature->SetTransport(this); creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); creature->m_movementInfo.guid = GetGUID(); - creature->m_movementInfo.t_pos.Relocate(x, y, z, o); + creature->m_movementInfo.transport.pos.Relocate(x, y, z, o); if (anim) creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, anim); @@ -648,7 +648,7 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, o + GetOrientation()); creature->SetHomePosition(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetOrientation()); - creature->SetTransportHomePosition(creature->m_movementInfo.t_pos); + creature->SetTransportHomePosition(creature->m_movementInfo.transport.pos); if (!creature->IsPositionValid()) { @@ -675,10 +675,10 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, void Transport::UpdatePosition(MovementInfo* mi) { - float transport_o = mi->pos.GetOrientation() - mi->t_pos.GetOrientation(); - float transport_x = mi->pos.m_positionX - (mi->t_pos.m_positionX * std::cos(transport_o) - mi->t_pos.m_positionY * std::sin(transport_o)); - float transport_y = mi->pos.m_positionY - (mi->t_pos.m_positionY * std::cos(transport_o) + mi->t_pos.m_positionX * std::sin(transport_o)); - float transport_z = mi->pos.m_positionZ - mi->t_pos.m_positionZ; + float transport_o = mi->pos.GetOrientation() - mi->transport.pos.GetOrientation(); + float transport_x = mi->pos.m_positionX - (mi->transport.pos.m_positionX * std::cos(transport_o) - mi->transport.pos.m_positionY * std::sin(transport_o)); + float transport_y = mi->pos.m_positionY - (mi->transport.pos.m_positionY * std::cos(transport_o) + mi->transport.pos.m_positionX * std::sin(transport_o)); + float transport_z = mi->pos.m_positionZ - mi->transport.pos.m_positionZ; Relocate(transport_x, transport_y, transport_z, transport_o); UpdatePassengerPositions(); @@ -691,7 +691,7 @@ void Transport::UpdatePassengerPositions() Creature* npc = *itr; float x, y, z, o; - npc->m_movementInfo.t_pos.GetPosition(x, y, z, o); + npc->m_movementInfo.transport.pos.GetPosition(x, y, z, o); CalculatePassengerPosition(x, y, z, &o); GetMap()->CreatureRelocation(npc, x, y, z, o, false); npc->GetTransportHomePosition(x, y, z, o); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d8f2422390d..541c5d9f107 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -407,7 +407,7 @@ void Unit::UpdateSplineMovement(uint32 t_diff) if (HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) { - Position& pos = m_movementInfo.t_pos; + Position& pos = m_movementInfo.transport.pos; pos.m_positionX = loc.x; pos.m_positionY = loc.y; pos.m_positionZ = loc.z; @@ -16985,7 +16985,7 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const *data << uint8 (GetTransSeat()); if (GetExtraUnitMovementFlags() & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT) - *data << uint32(m_movementInfo.t_time2); + *data << uint32(m_movementInfo.transport.time2); } // 0x02200000 @@ -16998,10 +16998,10 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const // 0x00001000 if (GetUnitMovementFlags() & MOVEMENTFLAG_FALLING) { - *data << (float)m_movementInfo.j_zspeed; - *data << (float)m_movementInfo.j_sinAngle; - *data << (float)m_movementInfo.j_cosAngle; - *data << (float)m_movementInfo.j_xyspeed; + *data << (float)m_movementInfo.jump.zspeed; + *data << (float)m_movementInfo.jump.sinAngle; + *data << (float)m_movementInfo.jump.cosAngle; + *data << (float)m_movementInfo.jump.xyspeed; } // 0x04000000 diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b2d96941edd..444d6460ced 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2079,12 +2079,12 @@ class Unit : public WorldObject bool IsOnVehicle(const Unit* vehicle) const; Unit* GetVehicleBase() const; Creature* GetVehicleCreatureBase() const; - float GetTransOffsetX() const { return m_movementInfo.t_pos.GetPositionX(); } - float GetTransOffsetY() const { return m_movementInfo.t_pos.GetPositionY(); } - float GetTransOffsetZ() const { return m_movementInfo.t_pos.GetPositionZ(); } - float GetTransOffsetO() const { return m_movementInfo.t_pos.GetOrientation(); } - uint32 GetTransTime() const { return m_movementInfo.t_time; } - int8 GetTransSeat() const { return m_movementInfo.t_seat; } + float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); } + float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); } + float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); } + float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); } + uint32 GetTransTime() const { return m_movementInfo.transport.time; } + int8 GetTransSeat() const { return m_movementInfo.transport.seat; } uint64 GetTransGUID() const; /// Returns the transport this unit is on directly (if on vehicle and transport, return vehicle) TransportBase* GetDirectTransport() const; diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 5cfb9cc2fae..fa3203159ba 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -519,7 +519,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit) if (_me->IsInWorld()) { unit->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - unit->m_movementInfo.ClearTransport(); + unit->m_movementInfo.transport.Reset(); } // only for flyable vehicles @@ -557,7 +557,7 @@ void Vehicle::RelocatePassengers() ASSERT(passenger->IsInWorld()); float px, py, pz, po; - passenger->m_movementInfo.t_pos.GetPosition(px, py, pz, po); + passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po); CalculatePassengerPosition(px, py, pz, &po); passenger->UpdatePosition(px, py, pz, po); } @@ -840,10 +840,10 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Passenger->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); VehicleSeatEntry const* veSeat = Seat->second.SeatInfo; - Passenger->m_movementInfo.t_pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); - Passenger->m_movementInfo.t_time = 0; // 1 for player - Passenger->m_movementInfo.t_seat = Seat->first; - Passenger->m_movementInfo.t_guid = Target->GetBase()->GetGUID(); + Passenger->m_movementInfo.transport.pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); + Passenger->m_movementInfo.transport.time = 0; + Passenger->m_movementInfo.transport.seat = Seat->first; + Passenger->m_movementInfo.transport.guid = Target->GetBase()->GetGUID(); if (Target->GetBase()->GetTypeId() == TYPEID_UNIT && Passenger->GetTypeId() == TYPEID_PLAYER && Seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_CAN_CONTROL) diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index c00def4397c..ff4387a3a70 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -889,7 +889,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_VEHICLE_SEAT) { if (Vehicle* veh = player->GetVehicle()) - *data << uint32(veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat]); + *data << uint32(veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.transport.seat]); else *data << uint32(0); } @@ -1026,7 +1026,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket &recvData) data.put(maskPos, petAuraMask); // GROUP_UPDATE_FLAG_PET_AURAS if (updateFlags & GROUP_UPDATE_FLAG_VEHICLE_SEAT) - data << uint32(player->GetVehicle()->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat]); + data << uint32(player->GetVehicle()->GetVehicleInfo()->m_seatID[player->m_movementInfo.transport.seat]); SendPacket(&data); } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 19fdc3a1fe8..7a17e715063 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -283,14 +283,14 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) { // transports size limited // (also received at zeppelin leave by some reason with t_* as absolute in continent coordinates, can be safely skipped) - if (movementInfo.t_pos.GetPositionX() > 50 || movementInfo.t_pos.GetPositionY() > 50 || movementInfo.t_pos.GetPositionZ() > 50) + if (movementInfo.transport.pos.GetPositionX() > 50 || movementInfo.transport.pos.GetPositionY() > 50 || movementInfo.transport.pos.GetPositionZ() > 50) { recvData.rfinish(); // prevent warnings spam return; } - if (!Trinity::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.t_pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.t_pos.GetPositionY(), - movementInfo.pos.GetPositionZ() + movementInfo.t_pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.t_pos.GetOrientation())) + if (!Trinity::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(), + movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation())) { recvData.rfinish(); // prevent warnings spam return; @@ -304,7 +304,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) // elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just dismount if the guid can be found in the transport list for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter) { - if ((*iter)->GetGUID() == movementInfo.t_guid) + if ((*iter)->GetGUID() == movementInfo.transport.guid) { plrMover->m_transport = *iter; (*iter)->AddPassenger(plrMover); @@ -312,13 +312,13 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) } } } - else if (plrMover->GetTransport()->GetGUID() != movementInfo.t_guid) + else if (plrMover->GetTransport()->GetGUID() != movementInfo.transport.guid) { bool foundNewTransport = false; plrMover->m_transport->RemovePassenger(plrMover); for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter) { - if ((*iter)->GetGUID() == movementInfo.t_guid) + if ((*iter)->GetGUID() == movementInfo.transport.guid) { foundNewTransport = true; plrMover->m_transport = *iter; @@ -330,14 +330,14 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) if (!foundNewTransport) { plrMover->m_transport = NULL; - movementInfo.ClearTransport(); + movementInfo.transport.Reset(); } } } if (!mover->GetTransport() && !mover->GetVehicle()) { - GameObject* go = mover->GetMap()->GetGameObject(movementInfo.t_guid); + GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid); if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT) movementInfo.flags &= ~MOVEMENTFLAG_ONTRANSPORT; } @@ -346,7 +346,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) { plrMover->m_transport->RemovePassenger(plrMover); plrMover->m_transport = NULL; - movementInfo.ClearTransport(); + movementInfo.transport.Reset(); } // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map). @@ -542,10 +542,10 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) _player->BuildMovementPacket(&data); // knockback specific info - data << movementInfo.j_sinAngle; - data << movementInfo.j_cosAngle; - data << movementInfo.j_xyspeed; - data << movementInfo.j_zspeed; + data << movementInfo.jump.sinAngle; + data << movementInfo.jump.cosAngle; + data << movementInfo.jump.xyspeed; + data << movementInfo.jump.zspeed; _player->SendMessageToSet(&data, false); } diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c30a9a28fab..00aa43a4f47 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -769,16 +769,16 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) if (mi->HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) { - data.readPackGUID(mi->t_guid); + data.readPackGUID(mi->transport.guid); - data >> mi->t_pos.PositionXYZOStream(); - data >> mi->t_time; - data >> mi->t_seat; + data >> mi->transport.pos.PositionXYZOStream(); + data >> mi->transport.time; + data >> mi->transport.seat; if (mi->HasExtraMovementFlag(MOVEMENTFLAG2_INTERPOLATED_MOVEMENT)) - data >> mi->t_time2; + data >> mi->transport.time2; - if (mi->pos.m_positionX != mi->t_pos.m_positionX) + if (mi->pos.m_positionX != mi->transport.pos.m_positionX) if (GetPlayer()->GetTransport()) GetPlayer()->GetTransport()->UpdatePosition(mi); } @@ -790,10 +790,10 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) if (mi->HasMovementFlag(MOVEMENTFLAG_FALLING)) { - data >> mi->j_zspeed; - data >> mi->j_sinAngle; - data >> mi->j_cosAngle; - data >> mi->j_xyspeed; + data >> mi->jump.zspeed; + data >> mi->jump.sinAngle; + data >> mi->jump.cosAngle; + data >> mi->jump.xyspeed; } if (mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION)) @@ -883,14 +883,14 @@ void WorldSession::WriteMovementInfo(WorldPacket* data, MovementInfo* mi) if (mi->HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) { - data->appendPackGUID(mi->t_guid); + data->appendPackGUID(mi->transport.guid); - *data << mi->t_pos.PositionXYZOStream(); - *data << mi->t_time; - *data << mi->t_seat; + *data << mi->transport.pos.PositionXYZOStream(); + *data << mi->transport.time; + *data << mi->transport.seat; if (mi->HasExtraMovementFlag(MOVEMENTFLAG2_INTERPOLATED_MOVEMENT)) - *data << mi->t_time2; + *data << mi->transport.time2; } if (mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || mi->HasExtraMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) @@ -900,10 +900,10 @@ void WorldSession::WriteMovementInfo(WorldPacket* data, MovementInfo* mi) if (mi->HasMovementFlag(MOVEMENTFLAG_FALLING)) { - *data << mi->j_zspeed; - *data << mi->j_sinAngle; - *data << mi->j_cosAngle; - *data << mi->j_xyspeed; + *data << mi->jump.zspeed; + *data << mi->jump.sinAngle; + *data << mi->jump.cosAngle; + *data << mi->jump.xyspeed; } if (mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION)) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 1d85c8b4617..6af7634a90a 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -248,7 +248,7 @@ public: case PHASE_GROUND: me->CastStop(SPELL_FOG_BREATH); me->RemoveAurasDueToSpell(SPELL_FOG_BREATH); - me->SetUnitMovementFlags(MOVEMENTFLAG_NONE); + me->StopMoving(); me->SetSpeed(MOVE_RUN, 2.0f); events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000)); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 0587d46c071..2c0a98ab0ad 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -148,7 +148,6 @@ public: { CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(35.0f); - creature->SetUnitMovementFlags(MOVEMENTFLAG_FALLING); creature->AI()->Talk(SAY_START_IRO); switch (player->GetTeam()){ diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index f3d14c4d61c..8a1b5e8b146 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1910,7 +1910,7 @@ public: //! HACK: Creature's can't have MOVEMENTFLAG_FLYING // Fly Away - me->AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY|MOVEMENTFLAG_ASCENDING|MOVEMENTFLAG_FLYING); + me->SetCanFly(true); me->SetSpeed(MOVE_FLIGHT, 0.75f, true); me->SetSpeed(MOVE_RUN, 0.75f, true); float x = me->GetPositionX() + 20 * std::cos(me->GetOrientation()); -- cgit v1.2.3