fix(Scripts/Misc): Replace some AddItem/CreateItem with spells (#9006)

Co-authored-by: offl <11556157+offl@users.noreply.github.com>
This commit is contained in:
Kitzunu
2021-11-20 13:59:52 +01:00
committed by GitHub
parent efe999309a
commit 6a430cd2f9
6 changed files with 157 additions and 114 deletions

View File

@@ -670,16 +670,24 @@ public:
enum CreateHeartCandy
{
ITEM_HEART_CANDY_1 = 21818,
ITEM_HEART_CANDY_2 = 21817,
ITEM_HEART_CANDY_3 = 21821,
ITEM_HEART_CANDY_4 = 21819,
ITEM_HEART_CANDY_5 = 21816,
ITEM_HEART_CANDY_6 = 21823,
ITEM_HEART_CANDY_7 = 21822,
ITEM_HEART_CANDY_8 = 21820,
SPELL_CREATE_HEART_CANDY_1 = 26668,
SPELL_CREATE_HEART_CANDY_2 = 26670,
SPELL_CREATE_HEART_CANDY_3 = 26671,
SPELL_CREATE_HEART_CANDY_4 = 26672,
SPELL_CREATE_HEART_CANDY_5 = 26673,
SPELL_CREATE_HEART_CANDY_6 = 26674,
SPELL_CREATE_HEART_CANDY_7 = 26675,
SPELL_CREATE_HEART_CANDY_8 = 26676
};
std::array<uint32, 8> constexpr CreateHeartCandySpells =
{
SPELL_CREATE_HEART_CANDY_1, SPELL_CREATE_HEART_CANDY_2, SPELL_CREATE_HEART_CANDY_3,
SPELL_CREATE_HEART_CANDY_4, SPELL_CREATE_HEART_CANDY_5, SPELL_CREATE_HEART_CANDY_6,
SPELL_CREATE_HEART_CANDY_7, SPELL_CREATE_HEART_CANDY_8
};
// 26678 - Create Heart Candy
class spell_item_create_heart_candy : public SpellScriptLoader
{
public:
@@ -689,17 +697,19 @@ public:
{
PrepareSpellScript(spell_item_create_heart_candy_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(CreateHeartCandySpells);
}
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
if (!GetHitUnit() || !GetHitUnit()->ToPlayer())
return;
if (Player* target = GetHitUnit()->ToPlayer())
{
target->CastSpell(target, Acore::Containers::SelectRandomContainerElement(CreateHeartCandySpells), true);
}
Player* target = GetHitUnit()->ToPlayer();
static const uint32 items[] = {ITEM_HEART_CANDY_1, ITEM_HEART_CANDY_2, ITEM_HEART_CANDY_3, ITEM_HEART_CANDY_4, ITEM_HEART_CANDY_5, ITEM_HEART_CANDY_6, ITEM_HEART_CANDY_7, ITEM_HEART_CANDY_8};
target->AddItem(items[urand(0, 7)], 1);
}
void Register() override

View File

@@ -1404,6 +1404,7 @@ enum chromie
ITEM_ARCANE_DISRUPTOR = 37888,
QUEST_DISPELLING_ILLUSIONS = 13149,
QUEST_A_ROYAL_ESCORT = 13151,
SPELL_SUMMON_ARCANE_DISRUPTOR = 49591
};
class npc_cos_chromie_start : public CreatureScript
@@ -1411,44 +1412,66 @@ class npc_cos_chromie_start : public CreatureScript
public:
npc_cos_chromie_start() : CreatureScript("npc_cos_chromie_start") { }
bool OnQuestAccept(Player*, Creature* creature, const Quest* pQuest) override
struct npc_cos_chromie_startAI : public ScriptedAI
{
if (pQuest->GetQuestId() == QUEST_DISPELLING_ILLUSIONS)
if (InstanceScript* pInstance = creature->GetInstanceScript())
pInstance->SetData(DATA_SHOW_CRATES, 1);
npc_cos_chromie_startAI(Creature* creature) : ScriptedAI(creature) {}
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override
{
// final menu id, show crates if hidden and add item if missing
if (player->PlayerTalkClass->GetGossipMenu().GetMenuId() == 9595)
bool OnQuestAccept(Player*, Creature* creature, const Quest* pQuest)
{
if (InstanceScript* pInstance = creature->GetInstanceScript())
if (pInstance->GetData(DATA_ARTHAS_EVENT) == COS_PROGRESS_NOT_STARTED)
pInstance->SetData(DATA_SHOW_CRATES, 1);
if (!player->HasItemCount(ITEM_ARCANE_DISRUPTOR))
player->AddItem(ITEM_ARCANE_DISRUPTOR, 1);
}
// Skip Event
else if (player->PlayerTalkClass->GetGossipMenu().GetMenuId() == 11277)
{
if (InstanceScript* pInstance = creature->GetInstanceScript())
if (pQuest->GetQuestId() == QUEST_DISPELLING_ILLUSIONS)
{
if (pInstance->GetData(DATA_ARTHAS_EVENT) == COS_PROGRESS_NOT_STARTED)
if (InstanceScript* pInstance = creature->GetInstanceScript())
{
pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_FINISHED_INTRO);
if (Creature* arthas = ObjectAccessor::GetCreature(*creature, pInstance->GetGuidData(DATA_ARTHAS)))
arthas->AI()->Reset();
pInstance->SetData(DATA_SHOW_CRATES, 1);
}
player->NearTeleportTo(LeaderIntroPos2.GetPositionX(), LeaderIntroPos2.GetPositionY(), LeaderIntroPos2.GetPositionZ(), LeaderIntroPos2.GetOrientation());
}
return true;
}
// return false to display last windows
return false;
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/)
{
// final menu id, show crates if hidden and add item if missing
if (player->PlayerTalkClass->GetGossipMenu().GetMenuId() == 9595)
{
if (InstanceScript* pInstance = creature->GetInstanceScript())
{
if (pInstance->GetData(DATA_ARTHAS_EVENT) == COS_PROGRESS_NOT_STARTED)
{
pInstance->SetData(DATA_SHOW_CRATES, 1);
}
}
if (!player->HasItemCount(ITEM_ARCANE_DISRUPTOR))
{
me->CastSpell(player, SPELL_SUMMON_ARCANE_DISRUPTOR);
}
}
// Skip Event
else if (player->PlayerTalkClass->GetGossipMenu().GetMenuId() == 11277)
{
if (InstanceScript* pInstance = creature->GetInstanceScript())
{
if (pInstance->GetData(DATA_ARTHAS_EVENT) == COS_PROGRESS_NOT_STARTED)
{
pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_FINISHED_INTRO);
if (Creature* arthas = ObjectAccessor::GetCreature(*creature, pInstance->GetGuidData(DATA_ARTHAS)))
{
arthas->AI()->Reset();
}
}
player->NearTeleportTo(LeaderIntroPos2.GetPositionX(), LeaderIntroPos2.GetPositionY(), LeaderIntroPos2.GetPositionZ(), LeaderIntroPos2.GetOrientation());
}
}
// return false to display last windows
return false;
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetCullingOfStratholmeAI<npc_cos_chromie_startAI>(creature);
}
};

View File

@@ -169,6 +169,7 @@ enum Spells
SPELL_ON_ORGRIMS_HAMMER_DECK = 70121,
// Rocket Pack
SPELL_CREATE_ROCKET_PACK = 70055,
SPELL_ROCKET_PACK_DAMAGE = 69193,
SPELL_ROCKET_BURST = 69192,
SPELL_ROCKET_PACK_USEABLE = 70348,
@@ -1423,7 +1424,7 @@ public:
void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1);
me->CastSpell(player, SPELL_CREATE_ROCKET_PACK);
player->PlayerTalkClass->SendCloseGossip();
}
};

View File

@@ -1728,83 +1728,52 @@ class spell_item_make_a_wish : public SpellScript
}
};
enum MingoFortune
{
SPELL_CREATE_FORTUNE_1 = 40804,
SPELL_CREATE_FORTUNE_2 = 40805,
SPELL_CREATE_FORTUNE_3 = 40806,
SPELL_CREATE_FORTUNE_4 = 40807,
SPELL_CREATE_FORTUNE_5 = 40808,
SPELL_CREATE_FORTUNE_6 = 40809,
SPELL_CREATE_FORTUNE_7 = 40908,
SPELL_CREATE_FORTUNE_8 = 40910,
SPELL_CREATE_FORTUNE_9 = 40911,
SPELL_CREATE_FORTUNE_10 = 40912,
SPELL_CREATE_FORTUNE_11 = 40913,
SPELL_CREATE_FORTUNE_12 = 40914,
SPELL_CREATE_FORTUNE_13 = 40915,
SPELL_CREATE_FORTUNE_14 = 40916,
SPELL_CREATE_FORTUNE_15 = 40918,
SPELL_CREATE_FORTUNE_16 = 40919,
SPELL_CREATE_FORTUNE_17 = 40920,
SPELL_CREATE_FORTUNE_18 = 40921,
SPELL_CREATE_FORTUNE_19 = 40922,
SPELL_CREATE_FORTUNE_20 = 40923
};
std::array<uint32, 20> const CreateFortuneSpells =
{
SPELL_CREATE_FORTUNE_1, SPELL_CREATE_FORTUNE_2, SPELL_CREATE_FORTUNE_3, SPELL_CREATE_FORTUNE_4, SPELL_CREATE_FORTUNE_5,
SPELL_CREATE_FORTUNE_6, SPELL_CREATE_FORTUNE_7, SPELL_CREATE_FORTUNE_8, SPELL_CREATE_FORTUNE_9, SPELL_CREATE_FORTUNE_10,
SPELL_CREATE_FORTUNE_11, SPELL_CREATE_FORTUNE_12, SPELL_CREATE_FORTUNE_13, SPELL_CREATE_FORTUNE_14, SPELL_CREATE_FORTUNE_15,
SPELL_CREATE_FORTUNE_16, SPELL_CREATE_FORTUNE_17, SPELL_CREATE_FORTUNE_18, SPELL_CREATE_FORTUNE_19, SPELL_CREATE_FORTUNE_20
};
// http://www.wowhead.com/item=32686 Mingo's Fortune Giblets
// 40802 Mingo's Fortune Generator
class spell_item_mingos_fortune_generator : public SpellScript
{
PrepareSpellScript(spell_item_mingos_fortune_generator);
void HandleDummy(SpellEffIndex effIndex)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Selecting one from Bloodstained Fortune item
uint32 newitemid;
switch (urand(1, 20))
{
case 1:
newitemid = 32688;
break;
case 2:
newitemid = 32689;
break;
case 3:
newitemid = 32690;
break;
case 4:
newitemid = 32691;
break;
case 5:
newitemid = 32692;
break;
case 6:
newitemid = 32693;
break;
case 7:
newitemid = 32700;
break;
case 8:
newitemid = 32701;
break;
case 9:
newitemid = 32702;
break;
case 10:
newitemid = 32703;
break;
case 11:
newitemid = 32704;
break;
case 12:
newitemid = 32705;
break;
case 13:
newitemid = 32706;
break;
case 14:
newitemid = 32707;
break;
case 15:
newitemid = 32708;
break;
case 16:
newitemid = 32709;
break;
case 17:
newitemid = 32710;
break;
case 18:
newitemid = 32711;
break;
case 19:
newitemid = 32712;
break;
case 20:
newitemid = 32713;
break;
default:
return;
}
return ValidateSpellInfo(CreateFortuneSpells);
}
CreateItem(effIndex, newitemid);
void HandleDummy(SpellEffIndex /*effIndex*/)
{
GetCaster()->CastSpell(GetCaster(), Acore::Containers::SelectRandomContainerElement(CreateFortuneSpells), true);
}
void Register() override