aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlee <leelf_00@126.com>2023-03-24 17:52:44 +0800
committerGitHub <noreply@github.com>2023-03-24 10:52:44 +0100
commit60b75e3b6e81d5085070101c5153f6695dedb6ca (patch)
tree0713867af929d36b78e5a4ca485937e5068346ce /src
parent4672200adcbcb71c917d07ac1a82262ace2ffde7 (diff)
Scripts/Misc:fix npc_professions locale text (#27894)
* fix npc_professions locale text fix npc_professions locale text load from db * fix dup sql fix dup sql * add condition and gossip option add condition and gossip option for money cost depends on player level * add missing update statements * Rename 9999_99_99_world.sql to 2023_03_24_00_world.sql --------- Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/World/npc_professions.cpp488
1 files changed, 229 insertions, 259 deletions
diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp
index 781a1f4a56b..59ec7ff224d 100644
--- a/src/server/scripts/World/npc_professions.cpp
+++ b/src/server/scripts/World/npc_professions.cpp
@@ -39,19 +39,6 @@ A few notes for future developement:
*/
/*###
-# to be removed from here (->npc_text). This is data for database projects.
-###*/
-#define TALK_MUST_UNLEARN_WEAPON "You must forget your weapon type specialty before I can help you. Go to Everlook in Winterspring and seek help there."
-
-#define TALK_HAMMER_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the hammersmith."
-#define TALK_AXE_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the axesmith."
-#define TALK_SWORD_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the swordsmith."
-
-#define TALK_HAMMER_UNLEARN "Forgetting your Hammersmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Hammersmithing to create!"
-#define TALK_AXE_UNLEARN "Forgetting your Axesmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Axesmithing to create!"
-#define TALK_SWORD_UNLEARN "Forgetting your Swordsmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Swordsmithing to create!"
-
-/*###
# generic defines
###*/
@@ -63,37 +50,36 @@ A few notes for future developement:
# gossip item and box texts
###*/
-#define GOSSIP_WEAPON_LEARN "Please teach me how to become a Weaponsmith"
-#define GOSSIP_WEAPON_UNLEARN "I wish to unlearn the art of Weaponsmithing"
-#define GOSSIP_ARMOR_LEARN "Please teach me how to become a Armorsmith"
-#define GOSSIP_ARMOR_UNLEARN "I wish to unlearn the art of Armorsmithing"
-
-#define GOSSIP_UNLEARN_SMITH_SPEC "I wish to unlearn my blacksmith specialty"
-#define BOX_UNLEARN_ARMORORWEAPON "Do you really want to unlearn your blacksmith specialty and lose all associated recipes? \n Cost: "
-
-#define GOSSIP_LEARN_HAMMER "Please teach me how to become a Hammersmith, Lilith"
-#define GOSSIP_UNLEARN_HAMMER "I wish to unlearn Hammersmithing"
-#define GOSSIP_LEARN_AXE "Please teach me how to become a Axesmith, Kilram"
-#define GOSSIP_UNLEARN_AXE "I wish to unlearn Axesmithing"
-#define GOSSIP_LEARN_SWORD "Please teach me how to become a Swordsmith, Seril"
-#define GOSSIP_UNLEARN_SWORD "I wish to unlearn Swordsmithing"
-
-#define BOX_UNLEARN_WEAPON_SPEC "Do you really want to unlearn your weaponsmith specialty and lose all associated recipes? \n Cost: "
-
-#define GOSSIP_UNLEARN_DRAGON "I wish to unlearn Dragonscale Leatherworking"
-#define GOSSIP_UNLEARN_ELEMENTAL "I wish to unlearn Elemental Leatherworking"
-#define GOSSIP_UNLEARN_TRIBAL "I wish to unlearn Tribal Leatherworking"
-
-#define BOX_UNLEARN_LEATHER_SPEC "Do you really want to unlearn your leatherworking specialty and lose all associated recipes? \n Cost: "
-
-#define GOSSIP_LEARN_SPELLFIRE "Please teach me how to become a Spellcloth tailor"
-#define GOSSIP_UNLEARN_SPELLFIRE "I wish to unlearn Spellfire Tailoring"
-#define GOSSIP_LEARN_MOONCLOTH "Please teach me how to become a Mooncloth tailor"
-#define GOSSIP_UNLEARN_MOONCLOTH "I wish to unlearn Mooncloth Tailoring"
-#define GOSSIP_LEARN_SHADOWEAVE "Please teach me how to become a Shadoweave tailor"
-#define GOSSIP_UNLEARN_SHADOWEAVE "I wish to unlearn Shadoweave Tailoring"
-
-#define BOX_UNLEARN_TAILOR_SPEC "Do you really want to unlearn your tailoring specialty and lose all associated recipes? \n Cost: "
+enum Gossips
+{
+ GOSSIP_SPELLFIRE = 8531, // Gidge Spellweaver
+ GOSSIP_MOONCLOTH = 8530, // Nasmara Moonsong
+ GOSSIP_SHADOWEAVE = 8532, // Andrion Darkspinner
+ GOSSIP_DRAGON1 = 3067, // Peter Galen
+ GOSSIP_DRAGON2 = 3068, // Thorkaf Dragoneye
+ GOSSIP_ELEMENTAL1 = 3070, // Sarah Tanner
+ GOSSIP_ELEMENTAL2 = 3069, // Brumn Winterhoof
+ GOSSIP_TRIBAL1 = 3072, // Caryssia Moonhunter
+ GOSSIP_TRIBAL2 = 3071, // Se'Jib
+ GOSSIP_SMITHOMNI1 = 3182, // Myolor Sunderfury
+ GOSSIP_SMITHOMNI2 = 3187, // Krathok Moltenfist
+ GOSSIP_WEAPON1 = 3201, // Ironus Coldsteel
+ GOSSIP_WEAPON2 = 3202, // Borgosh Corebender
+ GOSSIP_ARMOR1 = 597, // Grumnus Steelshaper
+ GOSSIP_ARMOR2 = 3203, // Okothos Ironrager
+ GOSSIP_HAMMER = 6090, // Lilith the Lithe
+ GOSSIP_AXE = 6089, // Kilram
+ GOSSIP_SWORD = 6091, // Seril Scourgebane
+ GOSSIP_TRANSMUTE = 8542, // Zarevhi
+ GOSSIP_ELIXIR = 8540, // Lorokeem
+ GOSSIP_POTION = 7571, // Lauranna Thar'well
+ GOSSIP_ZAP = 6092, // Zap Farflinger
+ GOSSIP_JHORDY = 6094, // Jhordy Lapforge
+ GOSSIP_KABLAM = 8308, // Kablamm Farflinger
+ GOSSIP_SMILES = 8306, // Smiles O'Byron
+ GOSSIP_LEARN = 1,
+ GOSSIP_UNLEARN = 2
+};
/*###
# spells defines
@@ -158,7 +144,19 @@ enum ProfessionSpells
S_UNLEARN_SPELLFIRE = 41299,
S_UNLEARN_MOONCLOTH = 41558,
- S_UNLEARN_SHADOWEAVE = 41559
+ S_UNLEARN_SHADOWEAVE = 41559,
+
+ S_TRANSMUTE = 28672,
+ S_ELIXIR = 28677,
+ S_POTION = 28675,
+
+ S_LEARN_TRANSMUTE = 28674,
+ S_LEARN_ELIXIR = 28678,
+ S_LEARN_POTION = 28676,
+
+ S_UNLEARN_TRANSMUTE = 41565,
+ S_UNLEARN_ELIXIR = 41564,
+ S_UNLEARN_POTION = 41563,
};
/*###
@@ -189,6 +187,19 @@ enum SpecializationTrainers
N_TRAINER_SPELLFIRE = 22213, // Gidge Spellweaver
N_TRAINER_MOONCLOTH = 22208, // Nasmara Moonsong
N_TRAINER_SHADOWEAVE = 22212, // Andrion Darkspinner
+
+ /* Alchemy */
+ N_TRAINER_TRANSMUTE = 22427, // Zarevhi
+ N_TRAINER_ELIXIR = 19052, // Lorokeem
+ N_TRAINER_POTION = 17909, // Lauranna Thar'well
+
+};
+
+enum ProfessionQuest
+{
+ Q_MASTER_TRANSMUTE = 10899,
+ Q_MASTER_ELIXIR = 10902,
+ Q_MASTER_POTION = 10897,
};
/*###
@@ -426,58 +437,83 @@ public:
player->PrepareQuestMenu(me->GetGUID());
if (me->IsVendor())
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ AddGossipItemFor(player, 0, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (me->IsTrainer())
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
+ AddGossipItemFor(player, 0, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
uint32 creatureId = me->GetEntry();
//WEAPONSMITH & ARMORSMITH
if (player->GetBaseSkillValue(SKILL_BLACKSMITHING) >= 225)
{
+ uint8 level = player->GetLevel();
+ uint32 gossipOption = 0;
+ if (level < 66)
+ gossipOption = 1;
+ else
+ gossipOption = 2;
switch (creatureId)
{
case N_TRAINER_SMITHOMNI1:
+ if (!player->HasSpell(S_ARMOR) && !player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY)
+ AddGossipItemFor(player, GOSSIP_SMITHOMNI1, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ if (!player->HasSpell(S_WEAPON) && !player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY)
+ AddGossipItemFor(player, GOSSIP_SMITHOMNI1, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ break;
case N_TRAINER_SMITHOMNI2:
if (!player->HasSpell(S_ARMOR) && !player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, GOSSIP_SMITHOMNI2, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (!player->HasSpell(S_WEAPON) && !player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ AddGossipItemFor(player, GOSSIP_SMITHOMNI2, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
break;
case N_TRAINER_WEAPON1:
+ if (player->HasSpell(S_WEAPON))
+ AddGossipItemFor(player, GOSSIP_WEAPON1, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 3);
+ break;
case N_TRAINER_WEAPON2:
if (player->HasSpell(S_WEAPON))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
+ AddGossipItemFor(player, GOSSIP_WEAPON2, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 3);
break;
case N_TRAINER_ARMOR1:
+ if (player->HasSpell(S_ARMOR))
+ AddGossipItemFor(player, GOSSIP_ARMOR1, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 4);
+ break;
case N_TRAINER_ARMOR2:
if (player->HasSpell(S_ARMOR))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
+ AddGossipItemFor(player, GOSSIP_ARMOR2, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 4);
break;
}
}
//WEAPONSMITH SPEC
if (player->HasSpell(S_WEAPON) && player->GetLevel() > 49 && player->GetBaseSkillValue(SKILL_BLACKSMITHING) >= 250)
{
+ uint8 level = player->GetLevel();
+ uint32 gossipOption = 0;
+ if (level < 51)
+ gossipOption = 2;
+ else if (level < 66)
+ gossipOption = 3;
+ else
+ gossipOption = 4;
switch (creatureId)
{
case N_TRAINER_HAMMER:
if (!HasWeaponSub(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5);
+ AddGossipItemFor(player, GOSSIP_HAMMER, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 5);
if (player->HasSpell(S_HAMMER))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8);
+ AddGossipItemFor(player, GOSSIP_HAMMER, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 8);
break;
case N_TRAINER_AXE:
if (!HasWeaponSub(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6);
+ AddGossipItemFor(player, GOSSIP_AXE, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 6);
if (player->HasSpell(S_AXE))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9);
+ AddGossipItemFor(player, GOSSIP_AXE, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 9);
break;
case N_TRAINER_SWORD:
if (!HasWeaponSub(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7);
+ AddGossipItemFor(player, GOSSIP_SWORD, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 7);
if (player->HasSpell(S_SWORD))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10);
+ AddGossipItemFor(player, GOSSIP_SWORD, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 10);
break;
}
}
@@ -517,7 +553,6 @@ public:
case GOSSIP_ACTION_INFO_DEF + 3:
if (HasWeaponSub(player))
{
- //unknown textID (TALK_MUST_UNLEARN_WEAPON)
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
}
else
@@ -552,88 +587,11 @@ public:
}
}
- void SendConfirmLearn(Player* player, uint32 action)
- {
- if (action)
- {
- switch (me->GetEntry())
- {
- case N_TRAINER_HAMMER:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action);
- //unknown textID (TALK_HAMMER_LEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_AXE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, action);
- //unknown textID (TALK_AXE_LEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_SWORD:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, action);
- //unknown textID (TALK_SWORD_LEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- }
- }
- }
-
- void SendConfirmUnlearn(Player* player, uint32 action)
- {
- if (action)
- {
- switch (me->GetEntry())
- {
- case N_TRAINER_WEAPON1:
- case N_TRAINER_WEAPON2:
- case N_TRAINER_ARMOR1:
- case N_TRAINER_ARMOR2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player), false);
- //unknown textID (TALK_UNLEARN_AXEORWEAPON)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
-
- case N_TRAINER_HAMMER:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID (TALK_HAMMER_UNLEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_AXE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID (TALK_AXE_UNLEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_SWORD:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID (TALK_SWORD_UNLEARN)
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- }
- }
- }
-
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
ClearGossipMenuFor(player);
- switch (sender)
- {
- case GOSSIP_SENDER_MAIN:
- SendActionMenu(player, action);
- break;
-
- case GOSSIP_SENDER_LEARN:
- SendConfirmLearn(player, action);
- break;
-
- case GOSSIP_SENDER_UNLEARN:
- SendConfirmUnlearn(player, action);
- break;
-
- case GOSSIP_SENDER_CHECK:
- SendActionMenu(player, action);
- break;
- }
+ SendActionMenu(player, action);
return true;
}
};
@@ -666,10 +624,6 @@ enum EngineeringTrinkets
SPELL_TO_TOSHLEY = 36955,
};
-#define GOSSIP_ITEM_ZAP "This Dimensional Imploder sounds dangerous! How can I make one?"
-#define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!"
-#define GOSSIP_ITEM_KABLAM "[PH] Unknown"
-
class npc_engineering_tele_trinket : public CreatureScript
{
public:
@@ -696,7 +650,7 @@ public:
bool OnGossipHello(Player* player) override
{
uint32 npcTextId = 0;
- std::string gossipItem;
+ uint32 gossipItem;
bool canLearn = false;
if (player->HasSkill(SKILL_ENGINEERING))
@@ -706,28 +660,28 @@ public:
case NPC_ZAP:
canLearn = CanLearn(player, 6092, 0, 260, S_GOBLIN, SPELL_TO_EVERLOOK, npcTextId);
if (canLearn)
- gossipItem = GOSSIP_ITEM_ZAP;
+ gossipItem = GOSSIP_ZAP;
break;
case NPC_JHORDY:
canLearn = CanLearn(player, 7251, 7252, 260, S_GNOMISH, SPELL_TO_GADGET, npcTextId);
if (canLearn)
- gossipItem = GOSSIP_ITEM_JHORDY;
+ gossipItem = GOSSIP_JHORDY;
break;
case NPC_KABLAM:
canLearn = CanLearn(player, 10365, 0, 350, S_GOBLIN, SPELL_TO_AREA52, npcTextId);
if (canLearn)
- gossipItem = GOSSIP_ITEM_KABLAM;
+ gossipItem = GOSSIP_KABLAM;
break;
case NPC_SMILES:
canLearn = CanLearn(player, 10363, 0, 350, S_GNOMISH, SPELL_TO_TOSHLEY, npcTextId);
if (canLearn)
- gossipItem = GOSSIP_ITEM_KABLAM;
+ gossipItem = GOSSIP_SMILES;
break;
}
}
if (canLearn)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, gossipItem, me->GetEntry(), GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, gossipItem, 2, me->GetEntry(), GOSSIP_ACTION_INFO_DEF + 1);
SendGossipMenuFor(player, npcTextId ? npcTextId : player->GetGossipTextId(me), me->GetGUID());
return true;
@@ -859,29 +813,46 @@ public:
player->PrepareQuestMenu(me->GetGUID());
if (me->IsVendor())
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ AddGossipItemFor(player, 0, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (me->IsTrainer())
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
+ AddGossipItemFor(player, 0, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 250 && player->GetLevel() > 49)
{
+ uint8 level = player->GetLevel();
+ uint32 gossipOption = 0;
+ if (level < 51)
+ gossipOption = 2;
+ else if (level < 66)
+ gossipOption = 3;
+ else
+ gossipOption = 4;
switch (me->GetEntry())
{
case N_TRAINER_DRAGON1:
+ if (player->HasSpell(S_DRAGON))
+ AddGossipItemFor(player, GOSSIP_DRAGON1, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 1);
+ break;
case N_TRAINER_DRAGON2:
if (player->HasSpell(S_DRAGON))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, GOSSIP_DRAGON2, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 1);
break;
case N_TRAINER_ELEMENTAL1:
+ if (player->HasSpell(S_ELEMENTAL))
+ AddGossipItemFor(player, GOSSIP_ELEMENTAL1, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 2);
+ break;
case N_TRAINER_ELEMENTAL2:
if (player->HasSpell(S_ELEMENTAL))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
+ AddGossipItemFor(player, GOSSIP_ELEMENTAL2, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 2);
break;
case N_TRAINER_TRIBAL1:
+ if (player->HasSpell(S_TRIBAL))
+ AddGossipItemFor(player, GOSSIP_TRIBAL1, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 3);
+ break;
case N_TRAINER_TRIBAL2:
if (player->HasSpell(S_TRIBAL))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
+ AddGossipItemFor(player, GOSSIP_TRIBAL2, gossipOption, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 3);
break;
}
}
@@ -913,53 +884,11 @@ public:
}
}
- void SendConfirmUnlearn(Player* player, uint32 action)
- {
- if (action)
- {
- switch (me->GetEntry())
- {
- case N_TRAINER_DRAGON1:
- case N_TRAINER_DRAGON2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_ELEMENTAL1:
- case N_TRAINER_ELEMENTAL2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_TRIBAL1:
- case N_TRAINER_TRIBAL2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- }
- }
- }
-
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
ClearGossipMenuFor(player);
- switch (sender)
- {
- case GOSSIP_SENDER_MAIN:
- SendActionMenu(player, action);
- break;
-
- case GOSSIP_SENDER_UNLEARN:
- SendConfirmUnlearn(player, action);
- break;
-
- case GOSSIP_SENDER_CHECK:
- SendActionMenu(player, action);
- break;
- }
+ SendActionMenu(player, action);
return true;
}
};
@@ -994,10 +923,10 @@ public:
player->PrepareQuestMenu(me->GetGUID());
if (me->IsVendor())
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ AddGossipItemFor(player, 0, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (me->IsTrainer())
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
+ AddGossipItemFor(player, 0, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
//TAILORING SPEC
if (player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING) >= 350 && player->GetLevel() > 59)
@@ -1008,21 +937,21 @@ public:
{
case N_TRAINER_SPELLFIRE:
if (!HasTailorSpell(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, GOSSIP_SPELLFIRE, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 1);
if (player->HasSpell(S_SPELLFIRE))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
+ AddGossipItemFor(player, GOSSIP_SPELLFIRE, GOSSIP_UNLEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 4);
break;
case N_TRAINER_MOONCLOTH:
if (!HasTailorSpell(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
+ AddGossipItemFor(player, GOSSIP_MOONCLOTH, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 2);
if (player->HasSpell(S_MOONCLOTH))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
+ AddGossipItemFor(player, GOSSIP_MOONCLOTH, GOSSIP_UNLEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 5);
break;
case N_TRAINER_SHADOWEAVE:
if (!HasTailorSpell(player))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
+ AddGossipItemFor(player, GOSSIP_SHADOWEAVE, GOSSIP_LEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 3);
if (player->HasSpell(S_SHADOWEAVE))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
+ AddGossipItemFor(player, GOSSIP_SHADOWEAVE, GOSSIP_UNLEARN, GOSSIP_SENDER_CHECK, GOSSIP_ACTION_INFO_DEF + 6);
break;
}
}
@@ -1065,86 +994,126 @@ public:
}
}
- void SendConfirmLearn(Player* player, uint32 action)
+ bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- if (action)
- {
- switch (me->GetEntry())
- {
- case N_TRAINER_SPELLFIRE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_MOONCLOTH:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_SHADOWEAVE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- }
- }
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ SendActionMenu(player, action);
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_prof_tailorAI(creature);
+ }
+};
+
+/*###
+# start menues alchemy
+###*/
+class npc_prof_alchemy : public CreatureScript
+{
+public:
+ npc_prof_alchemy() : CreatureScript("npc_prof_alchemy") { }
+
+ struct npc_prof_alchemyAI : public ScriptedAI
+ {
+ npc_prof_alchemyAI(Creature* creature) : ScriptedAI(creature) { }
+
+ inline bool HasAlchemySpell(Player* player)
+ {
+ return (player->HasSpell(S_TRANSMUTE) || player->HasSpell(S_ELIXIR) || player->HasSpell(S_POTION));
}
- void SendConfirmUnlearn(Player* player, uint32 action)
+ bool OnGossipHello(Player* player) override
{
- if (action)
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (me->IsVendor())
+ AddGossipItemFor(player, 0, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+
+ if (me->IsTrainer())
+ AddGossipItemFor(player, 0, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
+
+ if (player->HasSkill(SKILL_ALCHEMY) && player->GetBaseSkillValue(SKILL_ALCHEMY) >= 350 && player->GetLevel() > 67)
{
- switch (me->GetEntry())
+ if (player->GetQuestRewardStatus(Q_MASTER_TRANSMUTE) || player->GetQuestRewardStatus(Q_MASTER_ELIXIR) || player->GetQuestRewardStatus(Q_MASTER_POTION))
{
- case N_TRAINER_SPELLFIRE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_MOONCLOTH:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
- case N_TRAINER_SHADOWEAVE:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
- //unknown textID ()
- SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
- break;
+ switch (me->GetEntry())
+ {
+ case N_TRAINER_TRANSMUTE:
+ if (!HasAlchemySpell(player))
+ AddGossipItemFor(player, GOSSIP_TRANSMUTE, GOSSIP_LEARN, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
+ if (player->HasSpell(S_TRANSMUTE))
+ AddGossipItemFor(player, GOSSIP_TRANSMUTE, GOSSIP_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
+ break;
+ case N_TRAINER_ELIXIR:
+ if (!HasAlchemySpell(player))
+ AddGossipItemFor(player, GOSSIP_ELIXIR, GOSSIP_LEARN, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
+ if (player->HasSpell(S_ELIXIR))
+ AddGossipItemFor(player, GOSSIP_ELIXIR, GOSSIP_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
+ break;
+ case N_TRAINER_POTION:
+ if (!HasAlchemySpell(player))
+ AddGossipItemFor(player, GOSSIP_POTION, GOSSIP_LEARN, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
+ if (player->HasSpell(S_POTION))
+ AddGossipItemFor(player, GOSSIP_POTION, GOSSIP_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
+ break;
+ }
}
}
+
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
}
- bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ void SendActionMenu(Player* player, uint32 action)
{
- uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
- uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
- ClearGossipMenuFor(player);
- switch (sender)
+ switch (action)
{
- case GOSSIP_SENDER_MAIN:
- SendActionMenu(player, action);
+ case GOSSIP_ACTION_TRADE:
+ player->GetSession()->SendListInventory(me->GetGUID());
break;
-
- case GOSSIP_SENDER_LEARN:
- SendConfirmLearn(player, action);
+ case GOSSIP_ACTION_TRAIN:
+ player->GetSession()->SendTrainerList(me);
break;
-
- case GOSSIP_SENDER_UNLEARN:
- SendConfirmUnlearn(player, action);
+ //Learn Alchemy
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ ProcessCastaction(player, me, S_TRANSMUTE, S_LEARN_TRANSMUTE, DoLearnCost(player));
break;
-
- case GOSSIP_SENDER_CHECK:
- SendActionMenu(player, action);
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ ProcessCastaction(player, me, S_ELIXIR, S_LEARN_ELIXIR, DoLearnCost(player));
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ ProcessCastaction(player, me, S_POTION, S_LEARN_POTION, DoLearnCost(player));
+ break;
+ //Unlearn Alchemy
+ case GOSSIP_ACTION_INFO_DEF + 4:
+ ProcessUnlearnAction(player, me, S_UNLEARN_TRANSMUTE, 0, DoHighUnlearnCost(player));
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 5:
+ ProcessUnlearnAction(player, me, S_UNLEARN_ELIXIR, 0, DoHighUnlearnCost(player));
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 6:
+ ProcessUnlearnAction(player, me, S_UNLEARN_POTION, 0, DoHighUnlearnCost(player));
break;
}
+ }
+
+ bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ SendActionMenu(player, action);
return true;
}
};
CreatureAI* GetAI(Creature* creature) const override
{
- return new npc_prof_tailorAI(creature);
+ return new npc_prof_alchemyAI(creature);
}
};
@@ -1155,4 +1124,5 @@ void AddSC_npc_professions()
new go_soothsaying_for_dummies();
new npc_prof_leather();
new npc_prof_tailor();
+ new npc_prof_alchemy();
}