diff options
author | azazel <none@none> | 2010-09-16 13:14:14 +0600 |
---|---|---|
committer | azazel <none@none> | 2010-09-16 13:14:14 +0600 |
commit | 236356628ab04cd520e89551e95ac7583a9945bd (patch) | |
tree | 33400d7f4c9cbc01d6f7c9519d50489371a379fc /src | |
parent | 9739bea487bf9e5791379db51b56f58016fb2386 (diff) |
Scripts/Quests:
* add support for quest 12634 Some Make Lemonade, Some Make Liquor (implement 51840 spell and Adventurous Dwarf AI, thanks akadabeer)
* implement dummy effect for 49587 Seeds of Nature's Wrath spell (used in quest 12459 That Which Creates Can Also Destroy)
* implement dummy effect for 19512 Apply Salve spell (used in quest 6124/6129 Curing the Sick)
Scripts/Misc: some cleanup in chat log
Core/Locales: fix issue when default locale for trinity_string strings was not used (thanks Aokromes for testing).
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 3 | ||||
-rw-r--r-- | src/server/scripts/Northrend/sholazar_basin.cpp | 83 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 179 | ||||
-rw-r--r-- | src/server/scripts/World/chat_log.cpp | 34 |
5 files changed, 275 insertions, 40 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 0c57e661bd3..0d314b39c6b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7800,12 +7800,10 @@ bool ObjectMgr::LoadTrinityStrings(char const* table, int32 min_value, int32 max data.Content.resize(1); ++count; - // 0 -> default, idx in to idx+1 - data.Content[0] = fields[1].GetCppString(); - + data.Default = fields[1].GetCppString(); for (uint8 i = 1; i < MAX_LOCALE; ++i) { - std::string str = fields[i+1].GetCppString(); + std::string str = fields[i + 1].GetCppString(); AddLocaleString(str, LocaleConstant(i), data.Content); } } while (result->NextRow()); @@ -7821,15 +7819,11 @@ bool ObjectMgr::LoadTrinityStrings(char const* table, int32 min_value, int32 max const char *ObjectMgr::GetTrinityString(int32 entry, int locale_idx) const { - // locale_idx == -1 -> default, locale_idx >= 0 in to idx+1 - // Content[0] always exist if exist TrinityStringLocale if (TrinityStringLocale const *msl = GetTrinityStringLocale(entry)) { - int idx = locale_idx + 1; - if (int(msl->Content.size()) > idx && !msl->Content[idx].empty()) - return msl->Content[idx].c_str(); - else - return msl->Content[0].c_str(); + std::string s = msl->Default; + GetLocaleString(msl->Content, locale_idx, s); + return s.c_str(); } if (entry > 0) diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 2c20a9ca617..12f8b2b4a63 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -174,7 +174,8 @@ typedef UNORDERED_MAP<uint64/*(instance,guid) pair*/,time_t> RespawnTimes; struct TrinityStringLocale { - StringVector Content; // 0 -> default, i -> i-1 locale index + std::string Default; + StringVector Content; }; typedef std::map<uint32,uint32> CreatureLinkedRespawnMap; diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp index b02436f5548..3fac79e2d00 100644 --- a/src/server/scripts/Northrend/sholazar_basin.cpp +++ b/src/server/scripts/Northrend/sholazar_basin.cpp @@ -446,11 +446,84 @@ public: } }; +/*###### +## npc_adventurous_dwarf +######*/ + +#define GOSSIP_OPTION_ORANGE "Can you spare an orange?" +#define GOSSIP_OPTION_BANANAS "Have a spare bunch of bananas?" +#define GOSSIP_OPTION_PAPAYA "I could really use a papaya." + +enum eAdventurousDwarf +{ + QUEST_12634 = 12634, + + ITEM_BANANAS = 38653, + ITEM_PAPAYA = 38655, + ITEM_ORANGE = 38656, + + SPELL_ADD_ORANGE = 52073, + SPELL_ADD_BANANAS = 52074, + SPELL_ADD_PAPAYA = 52076, + + GOSSIP_MENU_DWARF = 13307, + + SAY_DWARF_OUCH = -1571042, + SAY_DWARF_HELP = -1571043 +}; + +class npc_adventurous_dwarf : public CreatureScript +{ +public: + npc_adventurous_dwarf() : CreatureScript("npc_adventurous_dwarf") { } + + CreatureAI *GetAI(Creature *pCreature) const + { + DoScriptText(SAY_DWARF_OUCH, pCreature); + return NULL; + } + + bool OnGossipHello(Player *pPlayer, Creature *pCreature) + { + if (pPlayer->GetQuestStatus(QUEST_12634) != QUEST_STATUS_INCOMPLETE) + return false; + + if (pPlayer->GetItemCount(ITEM_ORANGE) < 1) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_OPTION_ORANGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + + if (pPlayer->GetItemCount(ITEM_BANANAS) < 2) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_OPTION_BANANAS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + + if (pPlayer->GetItemCount(ITEM_PAPAYA) < 1) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_OPTION_PAPAYA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + + pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_MENU_DWARF, pCreature->GetGUID()); + return true; + } + + bool OnGossipSelect(Player *pPlayer, Creature *pCreature, uint32 /*uiSender*/, uint32 uiAction) + { + uint32 spellId = 0; + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: spellId = SPELL_ADD_ORANGE; break; + case GOSSIP_ACTION_INFO_DEF + 2: spellId = SPELL_ADD_BANANAS; break; + case GOSSIP_ACTION_INFO_DEF + 3: spellId = SPELL_ADD_PAPAYA; break; + } + if (spellId) + pPlayer->CastSpell(pPlayer, spellId, true); + DoScriptText(SAY_DWARF_HELP, pCreature); + pCreature->ForcedDespawn(); + return true; + } +}; + void AddSC_sholazar_basin() { - new npc_injured_rainspeaker_oracle; - new npc_vekjik; - new npc_avatar_of_freya; - new npc_bushwhacker; - new npc_engineer_helice; + new npc_injured_rainspeaker_oracle(); + new npc_vekjik(); + new npc_avatar_of_freya(); + new npc_bushwhacker(); + new npc_engineer_helice(); + new npc_adventurous_dwarf(); } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 34f85a1ac54..ac04c096721 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -60,7 +60,7 @@ public: // http://www.wowhead.com/quest=55 Morbent Fel // 8913 Sacred Cleansing -enum Quest55Data +enum eQuest55Data { NPC_MORBENT = 1200, NPC_WEAKENED_MORBENT = 24782, @@ -79,7 +79,7 @@ public: // http://www.wowhead.com/quest=5206 Marauders of Darrowshire // 17271 Test Fetid Skull -enum Quest5206Data +enum eQuest5206Data { SPELL_CREATE_RESONATING_SKULL = 17269, SPELL_CREATE_BONE_DUST = 17270 @@ -123,9 +123,66 @@ public: } }; +// http://www.wowhead.com/quest=6124 Curing the Sick (A) +// http://www.wowhead.com/quest=6129 Curing the Sick (H) +// 19512 Apply Salve +enum eQuests6124_6129Data +{ + NPC_SICKLY_GAZELLE = 12296, + NPC_CURED_GAZELLE = 12297, + NPC_SICKLY_DEER = 12298, + NPC_CURED_DEER = 12299, + DESPAWN_TIME = 30000 +}; + +class spell_q6124_6129_apply_salve : public SpellScriptLoader +{ +public: + spell_q6124_6129_apply_salve() : SpellScriptLoader("spell_q6124_6129_apply_salve") { } + + class spell_q6124_6129_apply_salve_SpellScript : public SpellScript + { + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (GetCastItem()) + if (Player* pCaster = GetCaster()->ToPlayer()) + if (Creature* pCreatureTarget = GetHitCreature()) + { + uint32 uiNewEntry = 0; + switch (pCaster->GetTeam()) + { + case HORDE: + if (pCreatureTarget->GetEntry() == NPC_SICKLY_GAZELLE) + uiNewEntry = NPC_CURED_GAZELLE; + break; + case ALLIANCE: + if (pCreatureTarget->GetEntry() == NPC_SICKLY_DEER) + uiNewEntry = NPC_CURED_DEER; + break; + } + if (uiNewEntry) + { + pCreatureTarget->UpdateEntry(uiNewEntry); + pCreatureTarget->ForcedDespawn(DESPAWN_TIME); + } + } + } + + void Register() + { + OnEffect += SpellEffectFn(spell_q6124_6129_apply_salve_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q6124_6129_apply_salve_SpellScript(); + } +}; + // http://www.wowhead.com/quest=10255 Testing the Antidote // 34665 Administer Antidote -enum Quest10255Data +enum eQuest10255Data { NPC_HELBOAR = 16880, NPC_DREADTUSK = 16992, @@ -144,7 +201,7 @@ public: // http://www.wowhead.com/quest=11515 Blood for Blood // 44936 Quest - Fel Siphon Dummy -enum Quest11515Data +enum eQuest11515Data { NPC_FELBLOOD_INITIATE = 24918, NPC_EMACIATED_FELBLOOD = 24955 @@ -163,7 +220,7 @@ public: // http://www.wowhead.com/quest=11587 Prison Break // 45449 Arcane Prisoner Rescue -enum Quest11587Data +enum eQuest11587Data { SPELL_SUMMON_ARCANE_PRISONER_MALE = 45446, // Summon Arcane Prisoner - Male SPELL_SUMMON_ARCANE_PRISONER_FEMALE = 45448, // Summon Arcane Prisoner - Female @@ -215,7 +272,7 @@ public: // http://www.wowhead.com/quest=11730 Master and Servant // 46023 The Ultrasonic Screwdriver -enum Quest11730Data +enum eQuest11730Data { SPELL_SUMMON_SCAVENGEBOT_004A8 = 46063, SPELL_SUMMON_SENTRYBOT_57K = 46068, @@ -296,6 +353,113 @@ public: } }; +// http://www.wowhead.com/quest=12459 That Which Creates Can Also Destroy +// 49587 Seeds of Nature's Wrath +enum eQuest12459Data +{ + NPC_REANIMATED_FROSTWYRM = 26841, + NPC_WEAK_REANIMATED_FROSTWYRM = 27821, + + NPC_TURGID = 27808, + NPC_WEAK_TURGID = 27809, + + NPC_DEATHGAZE = 27122, + NPC_WEAK_DEATHGAZE = 27807, +}; + +class spell_q12459_seeds_of_natures_wrath : public SpellScriptLoader +{ +public: + spell_q12459_seeds_of_natures_wrath() : SpellScriptLoader("spell_q12459_seeds_of_natures_wrath") { } + + class spell_q12459_seeds_of_natures_wrath_SpellScript : public SpellScript + { + public: + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Creature* pCreatureTarget = GetHitCreature()) + { + uint32 uiNewEntry = 0; + switch (pCreatureTarget->GetEntry()) + { + case NPC_REANIMATED_FROSTWYRM: uiNewEntry = NPC_WEAK_REANIMATED_FROSTWYRM; break; + case NPC_TURGID: uiNewEntry = NPC_WEAK_TURGID; break; + case NPC_DEATHGAZE: uiNewEntry = NPC_WEAK_DEATHGAZE; break; + } + if (uiNewEntry) + pCreatureTarget->UpdateEntry(uiNewEntry); + } + } + + void Register() + { + OnEffect += SpellEffectFn(spell_q12459_seeds_of_natures_wrath_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q12459_seeds_of_natures_wrath_SpellScript(); + } +}; + +// http://www.wowhead.com/quest=12634 Some Make Lemonade, Some Make Liquor +// 51840 Despawn Fruit Tosser +enum eQuest12634Data +{ + SPELL_BANANAS_FALL_TO_GROUND = 51836, + SPELL_ORANGE_FALLS_TO_GROUND = 51837, + SPELL_PAPAYA_FALLS_TO_GROUND = 51839, + SPELL_SUMMON_ADVENTUROUS_DWARF = 52070 +}; + +class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader +{ +public: + spell_q12634_despawn_fruit_tosser() : SpellScriptLoader("spell_q12634_despawn_fruit_tosser") { } + + class spell_q12634_despawn_fruit_tosser_SpellScript : public SpellScript + { + public: + bool Validate(SpellEntry const * /*spellEntry*/) + { + if (!sSpellStore.LookupEntry(SPELL_BANANAS_FALL_TO_GROUND)) + return false; + if (!sSpellStore.LookupEntry(SPELL_ORANGE_FALLS_TO_GROUND)) + return false; + if (!sSpellStore.LookupEntry(SPELL_PAPAYA_FALLS_TO_GROUND)) + return false; + if (!sSpellStore.LookupEntry(SPELL_SUMMON_ADVENTUROUS_DWARF)) + return false; + return true; + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + uint32 spellId = SPELL_BANANAS_FALL_TO_GROUND; + switch (urand(0, 3)) + { + case 1: spellId = SPELL_ORANGE_FALLS_TO_GROUND; break; + case 2: spellId = SPELL_PAPAYA_FALLS_TO_GROUND; break; + } + // sometimes, if you're lucky, you get a dwarf + if (roll_chance_i(5)) + spellId = SPELL_SUMMON_ADVENTUROUS_DWARF; + GetCaster()->CastSpell(GetCaster(), spellId, true, NULL); + } + + void Register() + { + OnEffect += SpellEffectFn(spell_q12634_despawn_fruit_tosser_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q12634_despawn_fruit_tosser_SpellScript(); + } +}; + // http://www.wowhead.com/quest=12683 Burning to Help // 52308 Take Sputum Sample class spell_q12683_take_sputum_sample : public SpellScriptLoader @@ -383,10 +547,13 @@ void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); new spell_q5206_test_fetid_skull(); + new spell_q6124_6129_apply_salve(); new spell_q10255_administer_antidote(); new spell_q11515_fel_siphon_dummy(); new spell_q11587_arcane_prisoner_rescue(); new spell_q11730_ultrasonic_screwdriver(); + new spell_q12459_seeds_of_natures_wrath(); + new spell_q12634_despawn_fruit_tosser(); new spell_q12683_take_sputum_sample(); new spell_q12937_relief_for_the_fallen(); } diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp index 0a686ddf4bb..52809c148a1 100644 --- a/src/server/scripts/World/chat_log.cpp +++ b/src/server/scripts/World/chat_log.cpp @@ -72,6 +72,18 @@ public: player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); break; + case CHAT_MSG_PARTY_LEADER: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_PARTY)) + sLog.outChat("[PARTY] Leader %s tells group: %s", + player->GetName(), msg.c_str()); + break; + + case CHAT_MSG_RAID: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) + sLog.outChat("[RAID] Player %s tells raid with leader %s: %s", + player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + case CHAT_MSG_RAID_LEADER: if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) sLog.outChat("[RAID] Leader player %s tells raid: %s", @@ -84,28 +96,16 @@ public: player->GetName(), msg.c_str()); break; - case CHAT_MSG_PARTY_LEADER: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_PARTY)) - sLog.outChat("[PARTY] Leader %s tells group: %s", - player->GetName(), msg.c_str()); - break; - - case CHAT_MSG_BATTLEGROUND_LEADER: + case CHAT_MSG_BATTLEGROUND: if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND)) - sLog.outChat("[RAID] Leader player %s tells battleground: %s", - player->GetName(), msg.c_str()); - break; - - case CHAT_MSG_RAID: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) - sLog.outChat("[RAID] Player %s tells raid with leader %s: %s", + sLog.outChat("[BATTLEGROUND] Player %s tells battleground with leader %s: %s", player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); break; - case CHAT_MSG_BATTLEGROUND: + case CHAT_MSG_BATTLEGROUND_LEADER: if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND)) - sLog.outChat("[BATTLEGROUND] Player %s tells battleground with leader %s: %s", - player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + sLog.outChat("[BATTLEGROUND] Leader player %s tells battleground: %s", + player->GetName(), msg.c_str()); break; } } |