Files
mod-individual-progression/src/naxx40Scripts/npc_omarion.cpp
2022-09-05 17:43:02 -06:00

318 lines
14 KiB
C++

#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
enum CraftsSpellIds : uint32
{
// Tailoring
LEARN_GLACIAL_GLOVES = 28261,
HAS_GLACIAL_GLOVES = 28205,
LEARN_GLACIAL_WRISTS = 28262,
HAS_GLACIAL_WRISTS = 28209,
LEARN_GLACIAL_VEST = 28260,
HAS_GLACIAL_VEST = 28207,
LEARN_GLACIAL_CLOAK = 28263,
HAS_GLACIAL_CLOAK = 28208,
// Leatherworking
LEARN_POLAR_GLOVES = 28255,
HAS_POLAR_GLOVES = 28220,
LEARN_POLAR_BRACERS = 28256,
HAS_POLAR_BRACERS = 28221,
LEARN_POLAR_TUNIC = 28254,
HAS_POLAR_TUNIC = 28219,
LEARN_ICY_SCALE_GAUNTLETS = 28258,
HAS_ICY_SCALE_GAUNTLETS = 28223,
LEARN_ICY_SCALE_BRACERS = 28259,
HAS_ICY_SCALE_BRACERS = 28224,
LEARN_ICY_SCALE_BREASTPLATE = 28257,
HAS_ICY_SCALE_BREASTPLATE = 28222,
// Blacksmithing
LEARN_ICEBANE_GAUNTLETS = 28253,
HAS_ICEBANE_GAUNTLETS = 28243,
LEARN_ICEBANE_BRACERS = 28252,
HAS_ICEBANE_BRACERS = 28244,
LEARN_ICEBANE_BREASTPLATE = 28251,
HAS_ICEBANE_BREASTPLATE = 28242
};
enum Say
{
BROADCAST_TEXT_SPIT_TARGET = 31673
};
enum Requirements
{
FACTION_ARGENT_DAWN = 529,
BOOK_REQ_RANK = REP_REVERED,
CRAFT1_REQ_RANK = REP_REVERED,
CRAFT2_REQ_RANK = REP_EXALTED,
MASTER_REQ_SKILL = 225,
LEARN_REQ_SKILL = 300
};
enum Quests
{
QUEST_OMARIONS_HANDBOOK = 9233,
OMARIONS_HANDBOOK = 22719
};
enum Gossips
{
// NPC Text IDs
NPC_TEXT_INTRO = 8507,
NPC_TEXT_NO_CRAFTER = 8516,
NPC_TEXT_NEW_ENTRY = 24400,
NPC_TEXT_TAILORING = NPC_TEXT_NEW_ENTRY + 1,
NPC_TEXT_BLACKSMITHING = NPC_TEXT_NEW_ENTRY + 2,
NPC_TEXT_LEATHERWORKING = NPC_TEXT_NEW_ENTRY + 3,
// Menu IDs
MENU_ID_ENTRY = 24400,
MENU_ID_NO_CRAFTER = MENU_ID_ENTRY,
MENU_ID_TAILORING = MENU_ID_ENTRY + 1,
MENU_ID_BLACKSMITHING = MENU_ID_ENTRY + 2,
MENU_ID_LEATHERWORKING = MENU_ID_ENTRY + 3,
MENU_ID_INTRO = MENU_ID_ENTRY + 4,
// Intro
ITEM_ID_LEATHERWORKING = 1,
ITEM_ID_BLACKSMITHING = 2,
ITEM_ID_TAILORING = 3,
ITEM_ID_NO_CRAFTER = 4,
// Tailoring
ITEM_ID_GLACIAL_CLOAK = 1,
ITEM_ID_GLACIAL_GLOVES = 2,
ITEM_ID_GLACIAL_WRISTS = 3,
ITEM_ID_GLACIAL_VEST = 4,
ITEM_ID_GOODBYE_TAILORING = 5,
// Blacksmithing
ITEM_ID_ICEBANE_BRACERS = 1,
ITEM_ID_ICEBANE_GAUNTLETS = 2,
ITEM_ID_ICEBANE_BREASTPLATE = 3,
ITEM_ID_GOODBYE_BLACKSMITHING = 4,
// Leatherworking
ITEM_ID_POLAR_BRACERS = 1,
ITEM_ID_POLAR_GLOVES = 2,
ITEM_ID_POLAR_TUNIC = 3,
ITEM_ID_ICY_SCALE_BRACERS = 4,
ITEM_ID_ICY_SCALE_GAUNTLETS = 5,
ITEM_ID_ICY_SCALE_BREASTPLATE = 6,
ITEM_ID_GOODBYE_LEATHERWORKING = 7,
// No crafter, book
ITEM_ID_GOODBYE_NO_CRAFTER = 1,
GOSSIP_CLOSE = 100
};
class npc_omarion : public CreatureScript
{
public:
npc_omarion() : CreatureScript("npc_omarion_gossip") { }
bool OnGossipHello(Player* player, Creature* creature) override
{
ClearGossipMenuFor(player);
uint32 tailorSkill = player->GetSkillValue(SKILL_TAILORING);
uint32 blacksmithSkill = player->GetSkillValue(SKILL_BLACKSMITHING);
uint32 leatherworkSkill = player->GetSkillValue(SKILL_LEATHERWORKING);
if (tailorSkill >= MASTER_REQ_SKILL)
{
AddGossipItemFor(player, MENU_ID_INTRO, ITEM_ID_TAILORING, GOSSIP_SENDER_MAIN, MENU_ID_TAILORING);
}
if(blacksmithSkill >= MASTER_REQ_SKILL)
{
AddGossipItemFor(player, MENU_ID_INTRO, ITEM_ID_BLACKSMITHING, GOSSIP_SENDER_MAIN, MENU_ID_BLACKSMITHING);
}
if(leatherworkSkill >= MASTER_REQ_SKILL)
{
AddGossipItemFor(player, MENU_ID_INTRO, ITEM_ID_LEATHERWORKING, GOSSIP_SENDER_MAIN, MENU_ID_LEATHERWORKING);
}
AddGossipItemFor(player, MENU_ID_INTRO, ITEM_ID_NO_CRAFTER, GOSSIP_SENDER_MAIN, MENU_ID_NO_CRAFTER);
SendGossipMenuFor(player, NPC_TEXT_INTRO, creature->GetGUID());
return true;
}
void LearnCraftIfNotAlreadyKnown(uint32 learnId, uint32 knowId, Player *player)
{
if (!player->HasSpell(knowId))
{
player->CastSpell(player, learnId, false);
}
}
void CloseGossipEmoteAndSpitOnPlayer(Player* player, Creature* creature)
{
CloseGossipMenuFor(player);
creature->TextEmote(BROADCAST_TEXT_SPIT_TARGET, player);
creature->HandleEmoteCommand(EMOTE_ONESHOT_NONE); // skip animation
creature->HandleEmoteCommand(EMOTE_ONESHOT_RUDE);
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
uint32 argentDawnRep = player->GetReputationRank(FACTION_ARGENT_DAWN);
uint32 tailorSkill = player->GetSkillValue(SKILL_TAILORING);
uint32 blacksmithSkill = player->GetSkillValue(SKILL_BLACKSMITHING);
uint32 leatherworkSkill = player->GetSkillValue(SKILL_LEATHERWORKING);
switch(action)
{
case GOSSIP_CLOSE:
CloseGossipMenuFor(player);
break;
case MENU_ID_TAILORING:
ClearGossipMenuFor(player);
if (argentDawnRep < CRAFT1_REQ_RANK || tailorSkill < LEARN_REQ_SKILL)
{
CloseGossipEmoteAndSpitOnPlayer(player, creature);
break;
}
if (argentDawnRep >= CRAFT1_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_TAILORING, ITEM_ID_GLACIAL_WRISTS, GOSSIP_SENDER_MAIN, LEARN_GLACIAL_WRISTS);
AddGossipItemFor(player, MENU_ID_TAILORING, ITEM_ID_GLACIAL_GLOVES, GOSSIP_SENDER_MAIN, LEARN_GLACIAL_GLOVES);
}
if (argentDawnRep >= CRAFT2_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_TAILORING, ITEM_ID_GLACIAL_VEST, GOSSIP_SENDER_MAIN, LEARN_GLACIAL_VEST);
AddGossipItemFor(player, MENU_ID_TAILORING, ITEM_ID_GLACIAL_CLOAK, GOSSIP_SENDER_MAIN, LEARN_GLACIAL_CLOAK);
}
AddGossipItemFor(player, MENU_ID_TAILORING, ITEM_ID_GOODBYE_TAILORING, GOSSIP_SENDER_MAIN, GOSSIP_CLOSE);
SendGossipMenuFor(player, NPC_TEXT_TAILORING, creature->GetGUID());
break;
case MENU_ID_BLACKSMITHING:
ClearGossipMenuFor(player);
if (argentDawnRep < CRAFT1_REQ_RANK || blacksmithSkill < LEARN_REQ_SKILL)
{
CloseGossipEmoteAndSpitOnPlayer(player, creature);
break;
}
if (argentDawnRep >= CRAFT1_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_BLACKSMITHING, ITEM_ID_ICEBANE_BRACERS, GOSSIP_SENDER_MAIN, LEARN_ICEBANE_BRACERS);
AddGossipItemFor(player, MENU_ID_BLACKSMITHING, ITEM_ID_ICEBANE_GAUNTLETS, GOSSIP_SENDER_MAIN, LEARN_ICEBANE_GAUNTLETS);
}
if (argentDawnRep >= CRAFT2_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_BLACKSMITHING, ITEM_ID_ICEBANE_BREASTPLATE, GOSSIP_SENDER_MAIN, LEARN_ICEBANE_BREASTPLATE);
}
AddGossipItemFor(player, MENU_ID_BLACKSMITHING, ITEM_ID_GOODBYE_BLACKSMITHING, GOSSIP_SENDER_MAIN, GOSSIP_CLOSE);
SendGossipMenuFor(player, NPC_TEXT_BLACKSMITHING, creature->GetGUID());
break;
case MENU_ID_LEATHERWORKING:
ClearGossipMenuFor(player);
if (argentDawnRep < CRAFT1_REQ_RANK || leatherworkSkill < LEARN_REQ_SKILL)
{
CloseGossipEmoteAndSpitOnPlayer(player, creature);
break;
}
if (argentDawnRep >= CRAFT1_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_POLAR_BRACERS, GOSSIP_SENDER_MAIN, LEARN_POLAR_BRACERS);
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_POLAR_GLOVES, GOSSIP_SENDER_MAIN, LEARN_POLAR_GLOVES);
}
if (argentDawnRep >= CRAFT2_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_POLAR_TUNIC, GOSSIP_SENDER_MAIN, LEARN_POLAR_TUNIC);
}
if (argentDawnRep >= CRAFT1_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_ICY_SCALE_BRACERS, GOSSIP_SENDER_MAIN, LEARN_ICY_SCALE_BRACERS);
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_ICY_SCALE_GAUNTLETS, GOSSIP_SENDER_MAIN, LEARN_ICY_SCALE_GAUNTLETS);
}
if (argentDawnRep >= CRAFT2_REQ_RANK)
{
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_ICY_SCALE_BREASTPLATE, GOSSIP_SENDER_MAIN, LEARN_ICY_SCALE_BREASTPLATE);
}
AddGossipItemFor(player, MENU_ID_LEATHERWORKING, ITEM_ID_GOODBYE_LEATHERWORKING, GOSSIP_SENDER_MAIN, GOSSIP_CLOSE);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case MENU_ID_NO_CRAFTER:
ClearGossipMenuFor(player);
if (argentDawnRep < BOOK_REQ_RANK)
{
CloseGossipEmoteAndSpitOnPlayer(player, creature);
break;
}
if (player->GetQuestStatus(QUEST_OMARIONS_HANDBOOK) == QUEST_STATUS_NONE && !player->HasItemCount(OMARIONS_HANDBOOK, 1, true))
{
player->AddItem(OMARIONS_HANDBOOK, 1);
}
AddGossipItemFor(player, MENU_ID_NO_CRAFTER, ITEM_ID_GOODBYE_NO_CRAFTER, GOSSIP_SENDER_MAIN, GOSSIP_CLOSE);
SendGossipMenuFor(player, NPC_TEXT_NO_CRAFTER, creature->GetGUID());
break;
case LEARN_GLACIAL_CLOAK:
LearnCraftIfNotAlreadyKnown(LEARN_GLACIAL_CLOAK, HAS_GLACIAL_CLOAK, player);
SendGossipMenuFor(player, NPC_TEXT_TAILORING, creature->GetGUID());
break;
case LEARN_GLACIAL_GLOVES:
LearnCraftIfNotAlreadyKnown(LEARN_GLACIAL_GLOVES, HAS_GLACIAL_GLOVES, player);
SendGossipMenuFor(player, NPC_TEXT_TAILORING, creature->GetGUID());
break;
case LEARN_GLACIAL_WRISTS:
LearnCraftIfNotAlreadyKnown(LEARN_GLACIAL_WRISTS, HAS_GLACIAL_WRISTS, player);
SendGossipMenuFor(player, NPC_TEXT_TAILORING, creature->GetGUID());
break;
case LEARN_GLACIAL_VEST:
LearnCraftIfNotAlreadyKnown(LEARN_GLACIAL_VEST, HAS_GLACIAL_VEST, player);
SendGossipMenuFor(player, NPC_TEXT_TAILORING, creature->GetGUID());
break;
case LEARN_ICEBANE_BRACERS:
LearnCraftIfNotAlreadyKnown(LEARN_ICEBANE_BRACERS, HAS_ICEBANE_BRACERS, player);
SendGossipMenuFor(player, NPC_TEXT_BLACKSMITHING, creature->GetGUID());
break;
case LEARN_ICEBANE_GAUNTLETS:
LearnCraftIfNotAlreadyKnown(LEARN_ICEBANE_GAUNTLETS, HAS_ICEBANE_GAUNTLETS, player);
SendGossipMenuFor(player, NPC_TEXT_BLACKSMITHING, creature->GetGUID());
break;
case LEARN_ICEBANE_BREASTPLATE:
LearnCraftIfNotAlreadyKnown(LEARN_ICEBANE_BREASTPLATE, HAS_ICEBANE_BREASTPLATE, player);
SendGossipMenuFor(player, NPC_TEXT_BLACKSMITHING, creature->GetGUID());
break;
case LEARN_POLAR_BRACERS:
LearnCraftIfNotAlreadyKnown(LEARN_POLAR_BRACERS, HAS_POLAR_BRACERS, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case LEARN_POLAR_GLOVES:
LearnCraftIfNotAlreadyKnown(LEARN_POLAR_GLOVES, HAS_POLAR_GLOVES, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case LEARN_POLAR_TUNIC:
LearnCraftIfNotAlreadyKnown(LEARN_POLAR_TUNIC, HAS_POLAR_TUNIC, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case LEARN_ICY_SCALE_BRACERS:
LearnCraftIfNotAlreadyKnown(LEARN_ICY_SCALE_BRACERS, HAS_ICY_SCALE_BRACERS, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case LEARN_ICY_SCALE_GAUNTLETS:
LearnCraftIfNotAlreadyKnown(LEARN_ICY_SCALE_GAUNTLETS, HAS_ICY_SCALE_GAUNTLETS, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
case LEARN_ICY_SCALE_BREASTPLATE:
LearnCraftIfNotAlreadyKnown(LEARN_ICY_SCALE_BREASTPLATE, HAS_ICY_SCALE_BREASTPLATE, player);
SendGossipMenuFor(player, NPC_TEXT_LEATHERWORKING, creature->GetGUID());
break;
}
return true;
}
};
void AddSC_npc_omarion()
{
new npc_omarion();
}