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
This commit is contained in:
azazel
2010-09-16 13:14:14 +06:00
parent 9739bea487
commit 236356628a
11 changed files with 295 additions and 41 deletions

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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,29 +96,17 @@ 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:
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",
player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str());
break;
case CHAT_MSG_BATTLEGROUND:
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());
break;
case CHAT_MSG_BATTLEGROUND_LEADER:
if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND))
sLog.outChat("[BATTLEGROUND] Leader player %s tells battleground: %s",
player->GetName(), msg.c_str());
break;
}
}