Files
TrinityCore2/src/scripts/world/npc_professions.cpp
T
Spp 74dd02d024 Remove LOTS of compile warnings
--HG--
branch : trunk
2010-04-19 09:26:37 +02:00

1343 lines
62 KiB
C++

/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Npc_Professions
SD%Complete: 80
SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering, re-learn leatherworking.
SDCategory: NPCs
EndScriptData */
#include "ScriptedPch.h"
/*
A few notes for future developement:
- A full implementation of gossip for GO's is required. They must have the same scripting capabilities as creatures. Basically,
there is no difference here (except that default text is chosen with `gameobject_template`.`data3` (for GO type2, different dataN for a few others)
- It's possible blacksmithing still require some tweaks and adjustments due to the way we _have_ to use reputation.
*/
/*
-- UPDATE `gameobject_template` SET `ScriptName` = 'go_soothsaying_for_dummies' WHERE `entry` = 177226;
*/
/*###
# to be removed from here (->ncp_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
###*/
#define GOSSIP_SENDER_LEARN 50
#define GOSSIP_SENDER_UNLEARN 51
#define GOSSIP_SENDER_CHECK 52
/*###
# gossip item and box texts
###*/
#define GOSSIP_LEARN_POTION "Please teach me how to become a Master of Potions, Lauranna"
#define GOSSIP_UNLEARN_POTION "I wish to unlearn Potion Mastery"
#define GOSSIP_LEARN_TRANSMUTE "Please teach me how to become a Master of Transmutations, Zarevhi"
#define GOSSIP_UNLEARN_TRANSMUTE "I wish to unlearn Transmutation Mastery"
#define GOSSIP_LEARN_ELIXIR "Please teach me how to become a Master of Elixirs, Lorokeem"
#define GOSSIP_UNLEARN_ELIXIR "I wish to unlearn Elixir Mastery"
#define BOX_UNLEARN_ALCHEMY_SPEC "Do you really want to unlearn your alchemy specialty and lose all associated recipes? \n Cost: "
#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_LEARN_DRAGON "I am absolutely certain that i want to learn dragonscale leatherworking"
#define GOSSIP_UNLEARN_DRAGON "I wish to unlearn Dragonscale Leatherworking"
#define GOSSIP_LEARN_ELEMENTAL "I am absolutely certain that i want to learn elemental leatherworking"
#define GOSSIP_UNLEARN_ELEMENTAL "I wish to unlearn Elemental Leatherworking"
#define GOSSIP_LEARN_TRIBAL "I am absolutely certain that i want to learn tribal 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: "
#define GOSSIP_LEARN_GOBLIN "I am absolutely certain that i want to learn Goblin engineering"
#define GOSSIP_LEARN_GNOMISH "I am absolutely certain that i want to learn Gnomish engineering"
/*###
# spells defines
###*/
#define S_WEAPON 9787
#define S_ARMOR 9788
#define S_HAMMER 17040
#define S_AXE 17041
#define S_SWORD 17039
#define S_LEARN_WEAPON 9789
#define S_LEARN_ARMOR 9790
#define S_LEARN_HAMMER 39099
#define S_LEARN_AXE 39098
#define S_LEARN_SWORD 39097
#define S_UNLEARN_WEAPON 36436
#define S_UNLEARN_ARMOR 36435
#define S_UNLEARN_HAMMER 36441
#define S_UNLEARN_AXE 36439
#define S_UNLEARN_SWORD 36438
#define S_REP_ARMOR 17451
#define S_REP_WEAPON 17452
#define REP_ARMOR 46
#define REP_WEAPON 289
#define REP_HAMMER 569
#define REP_AXE 570
#define REP_SWORD 571
#define S_DRAGON 10656
#define S_ELEMENTAL 10658
#define S_TRIBAL 10660
#define S_LEARN_DRAGON 10657
#define S_LEARN_ELEMENTAL 10659
#define S_LEARN_TRIBAL 10661
#define S_UNLEARN_DRAGON 36434
#define S_UNLEARN_ELEMENTAL 36328
#define S_UNLEARN_TRIBAL 36433
#define S_GOBLIN 20222
#define S_GNOMISH 20219
#define S_LEARN_GOBLIN 20221
#define S_LEARN_GNOMISH 20220
#define S_SPELLFIRE 26797
#define S_MOONCLOTH 26798
#define S_SHADOWEAVE 26801
#define S_LEARN_SPELLFIRE 26796
#define S_LEARN_MOONCLOTH 26799
#define S_LEARN_SHADOWEAVE 26800
#define S_UNLEARN_SPELLFIRE 41299
#define S_UNLEARN_MOONCLOTH 41558
#define S_UNLEARN_SHADOWEAVE 41559
#define S_TRANSMUTE 28672
#define S_ELIXIR 28677
#define S_POTION 28675
#define S_LEARN_TRANSMUTE 28674
#define S_LEARN_ELIXIR 28678
#define S_LEARN_POTION 28676
#define S_UNLEARN_TRANSMUTE 41565
#define S_UNLEARN_ELIXIR 41564
#define S_UNLEARN_POTION 41563
/*###
# formulas to calculate unlearning cost
###*/
int32 DoLearnCost(Player* /*pPlayer*/) //tailor, alchemy
{
return 200000;
}
int32 DoHighUnlearnCost(Player* /*pPlayer*/) //tailor, alchemy
{
return 1500000;
}
int32 DoMedUnlearnCost(Player* pPlayer) //blacksmith, leatherwork
{
uint8 level = pPlayer->getLevel();
if (level < 51)
return 250000;
else if (level < 66)
return 500000;
else
return 1000000;
}
int32 DoLowUnlearnCost(Player* pPlayer) //blacksmith
{
uint8 level = pPlayer->getLevel();
if (level < 66)
return 50000;
else
return 100000;
}
/*###
# unlearning related profession spells
###*/
bool EquippedOk(Player* pPlayer, uint32 spellId)
{
SpellEntry const* spell = GetSpellStore()->LookupEntry(spellId);
if (!spell)
return false;
for (uint8 i = 0; i < 3; ++i)
{
uint32 reqSpell = spell->EffectTriggerSpell[i];
if (!reqSpell)
continue;
Item* pItem;
for (uint8 j = EQUIPMENT_SLOT_START; j < EQUIPMENT_SLOT_END; ++j)
{
pItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, j);
if (pItem)
if (pItem->GetProto()->RequiredSpell == reqSpell)
{
//player has item equipped that require specialty. Not allow to unlearn, player has to unequip first
debug_log("TSCR: player attempt to unlearn spell %u, but item %u is equipped.",reqSpell,pItem->GetProto()->ItemId);
return false;
}
}
}
return true;
}
void ProfessionUnlearnSpells(Player* pPlayer, uint32 type)
{
switch (type)
{
case 36436: // S_UNLEARN_WEAPON
pPlayer->removeSpell(36125); // Light Earthforged Blade
pPlayer->removeSpell(36128); // Light Emberforged Hammer
pPlayer->removeSpell(36126); // Light Skyforged Axe
break;
case 36435: // S_UNLEARN_ARMOR
pPlayer->removeSpell(36122); // Earthforged Leggings
pPlayer->removeSpell(36129); // Heavy Earthforged Breastplate
pPlayer->removeSpell(36130); // Stormforged Hauberk
pPlayer->removeSpell(34533); // Breastplate of Kings
pPlayer->removeSpell(34529); // Nether Chain Shirt
pPlayer->removeSpell(34534); // Bulwark of Kings
pPlayer->removeSpell(36257); // Bulwark of the Ancient Kings
pPlayer->removeSpell(36256); // Embrace of the Twisting Nether
pPlayer->removeSpell(34530); // Twisting Nether Chain Shirt
pPlayer->removeSpell(36124); // Windforged Leggings
break;
case 36441: // S_UNLEARN_HAMMER
pPlayer->removeSpell(36262); // Dragonstrike
pPlayer->removeSpell(34546); // Dragonmaw
pPlayer->removeSpell(34545); // Drakefist Hammer
pPlayer->removeSpell(36136); // Lavaforged Warhammer
pPlayer->removeSpell(34547); // Thunder
pPlayer->removeSpell(34567); // Deep Thunder
pPlayer->removeSpell(36263); // Stormherald
pPlayer->removeSpell(36137); // Great Earthforged Hammer
break;
case 36439: // S_UNLEARN_AXE
pPlayer->removeSpell(36260); // Wicked Edge of the Planes
pPlayer->removeSpell(34562); // Black Planar Edge
pPlayer->removeSpell(34541); // The Planar Edge
pPlayer->removeSpell(36134); // Stormforged Axe
pPlayer->removeSpell(36135); // Skyforged Great Axe
pPlayer->removeSpell(36261); // Bloodmoon
pPlayer->removeSpell(34543); // Lunar Crescent
pPlayer->removeSpell(34544); // Mooncleaver
break;
case 36438: // S_UNLEARN_SWORD
pPlayer->removeSpell(36258); // Blazefury
pPlayer->removeSpell(34537); // Blazeguard
pPlayer->removeSpell(34535); // Fireguard
pPlayer->removeSpell(36131); // Windforged Rapier
pPlayer->removeSpell(36133); // Stoneforged Claymore
pPlayer->removeSpell(34538); // Lionheart Blade
pPlayer->removeSpell(34540); // Lionheart Champion
pPlayer->removeSpell(36259); // Lionheart Executioner
break;
case 36434: // S_UNLEARN_DRAGON
pPlayer->removeSpell(36076); // Dragonstrike Leggings
pPlayer->removeSpell(36079); // Golden Dragonstrike Breastplate
pPlayer->removeSpell(35576); // Ebon Netherscale Belt
pPlayer->removeSpell(35577); // Ebon Netherscale Bracers
pPlayer->removeSpell(35575); // Ebon Netherscale Breastplate
pPlayer->removeSpell(35582); // Netherstrike Belt
pPlayer->removeSpell(35584); // Netherstrike Bracers
pPlayer->removeSpell(35580); // Netherstrike Breastplate
break;
case 36328: // S_UNLEARN_ELEMENTAL
pPlayer->removeSpell(36074); // Blackstorm Leggings
pPlayer->removeSpell(36077); // Primalstorm Breastplate
pPlayer->removeSpell(35590); // Primalstrike Belt
pPlayer->removeSpell(35591); // Primalstrike Bracers
pPlayer->removeSpell(35589); // Primalstrike Vest
break;
case 36433: // S_UNLEARN_TRIBAL
pPlayer->removeSpell(35585); // Windhawk Hauberk
pPlayer->removeSpell(35587); // Windhawk Belt
pPlayer->removeSpell(35588); // Windhawk Bracers
pPlayer->removeSpell(36075); // Wildfeather Leggings
pPlayer->removeSpell(36078); // Living Crystal Breastplate
break;
case 41299: // S_UNLEARN_SPELLFIRE
pPlayer->removeSpell(26752); // Spellfire Belt
pPlayer->removeSpell(26753); // Spellfire Gloves
pPlayer->removeSpell(26754); // Spellfire Robe
break;
case 41558: // S_UNLEARN_MOONCLOTH
pPlayer->removeSpell(26760); // Primal Mooncloth Belt
pPlayer->removeSpell(26761); // Primal Mooncloth Shoulders
pPlayer->removeSpell(26762); // Primal Mooncloth Robe
break;
case 41559: // S_UNLEARN_SHADOWEAVE
pPlayer->removeSpell(26756); // Frozen Shadoweave Shoulders
pPlayer->removeSpell(26757); // Frozen Shadoweave Boots
pPlayer->removeSpell(26758); // Frozen Shadoweave Robe
break;
}
}
/*###
# start menues alchemy
###*/
bool HasAlchemySpell(Player* pPlayer)
{
if (pPlayer->HasSpell(S_TRANSMUTE) || pPlayer->HasSpell(S_ELIXIR) || pPlayer->HasSpell(S_POTION))
return true;
return false;
}
bool GossipHello_npc_prof_alchemy(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pCreature->isVendor())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (pCreature->isTrainer())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
uint32 eCreature = pCreature->GetEntry();
if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetBaseSkillValue(SKILL_ALCHEMY) >= 350 && pPlayer->getLevel() > 67)
{
if (pPlayer->GetQuestRewardStatus(10899) || pPlayer->GetQuestRewardStatus(10902) || pPlayer->GetQuestRewardStatus(10897))
{
switch (eCreature)
{
case 22427: //Zarevhi
if (!HasAlchemySpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
if (pPlayer->HasSpell(S_TRANSMUTE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
case 19052: //Lorokeem
if (!HasAlchemySpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
if (pPlayer->HasSpell(S_ELIXIR))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
break;
case 17909: //Lauranna Thar'well
if (!HasAlchemySpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
if (pPlayer->HasSpell(S_POTION))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
break;
}
}
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
void SendActionMenu_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
break;
//Learn Alchemy
case GOSSIP_ACTION_INFO_DEF + 1:
if (!pPlayer->HasSpell(S_TRANSMUTE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_TRANSMUTE, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 2:
if (!pPlayer->HasSpell(S_ELIXIR) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_ELIXIR, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 3:
if (!pPlayer->HasSpell(S_POTION) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_POTION, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
//Unlearn Alchemy
case GOSSIP_ACTION_INFO_DEF + 4:
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pCreature->CastSpell(pPlayer, S_UNLEARN_TRANSMUTE, true);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 5:
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pCreature->CastSpell(pPlayer, S_UNLEARN_ELIXIR, true);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 6:
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pCreature->CastSpell(pPlayer, S_UNLEARN_POTION, true);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
}
void SendConfirmLearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 22427:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 19052:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 17909:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
void SendConfirmUnlearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 22427: //Zarevhi
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 19052: //Lorokeem
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 17909: //Lauranna Thar'well
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
bool GossipSelect_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
switch(uiSender)
{
case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break;
}
return true;
}
/*###
# start menues blacksmith
###*/
bool HasWeaponSub(Player* pPlayer)
{
if (pPlayer->HasSpell(S_HAMMER) || pPlayer->HasSpell(S_AXE) || pPlayer->HasSpell(S_SWORD))
return true;
return false;
}
bool GossipHello_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pCreature->isVendor())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (pCreature->isTrainer())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
uint32 eCreature = pCreature->GetEntry();
//WEAPONSMITH & ARMORSMITH
if (pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING) >= 225)
{
switch (eCreature)
{
case 11145: //Myolor Sunderfury
case 11176: //Krathok Moltenfist
if (!pPlayer->HasSpell(S_ARMOR) && !pPlayer->HasSpell(S_WEAPON) && pPlayer->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (!pPlayer->HasSpell(S_WEAPON) && !pPlayer->HasSpell(S_ARMOR) && pPlayer->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
break;
case 11146: //Ironus Coldsteel
case 11178: //Borgosh Corebender
if (pPlayer->HasSpell(S_WEAPON))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
break;
case 5164: //Grumnus Steelshaper
case 11177: //Okothos Ironrager
if (pPlayer->HasSpell(S_ARMOR))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
}
}
//WEAPONSMITH SPEC
if (pPlayer->HasSpell(S_WEAPON) && pPlayer->getLevel() > 49 && pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING) >= 250)
{
switch (eCreature)
{
case 11191: //Lilith the Lithe
if (!HasWeaponSub(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5);
if (pPlayer->HasSpell(S_HAMMER))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8);
break;
case 11192: //Kilram
if (!HasWeaponSub(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6);
if (pPlayer->HasSpell(S_AXE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9);
break;
case 11193: //Seril Scourgebane
if (!HasWeaponSub(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7);
if (pPlayer->HasSpell(S_SWORD))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10);
break;
}
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
void SendActionMenu_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
break;
//Learn Armor/Weapon
case GOSSIP_ACTION_INFO_DEF + 1:
if (!pPlayer->HasSpell(S_ARMOR))
{
pPlayer->CastSpell(pPlayer, S_LEARN_ARMOR, true);
//_Creature->CastSpell(pPlayer, S_REP_ARMOR, true);
}
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 2:
if (!pPlayer->HasSpell(S_WEAPON))
{
pPlayer->CastSpell(pPlayer, S_LEARN_WEAPON, true);
//_Creature->CastSpell(pPlayer, S_REP_WEAPON, true);
}
pPlayer->CLOSE_GOSSIP_MENU();
break;
//Unlearn Armor/Weapon
case GOSSIP_ACTION_INFO_DEF + 3:
if (HasWeaponSub(pPlayer))
{
//unknown textID (TALK_MUST_UNLEARN_WEAPON)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
}
else if (EquippedOk(pPlayer,S_UNLEARN_WEAPON))
{
if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_WEAPON, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_WEAPON);
pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer));
pCreature->CastSpell(pPlayer, S_REP_ARMOR, true);
pPlayer->CLOSE_GOSSIP_MENU();
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
}
else
{
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
}
break;
case GOSSIP_ACTION_INFO_DEF + 4:
if (EquippedOk(pPlayer,S_UNLEARN_ARMOR))
{
if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_ARMOR, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ARMOR);
pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer));
pCreature->CastSpell(pPlayer, S_REP_WEAPON, true);
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
//Learn Hammer/Axe/Sword
case GOSSIP_ACTION_INFO_DEF + 5:
pPlayer->CastSpell(pPlayer, S_LEARN_HAMMER, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 6:
pPlayer->CastSpell(pPlayer, S_LEARN_AXE, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 7:
pPlayer->CastSpell(pPlayer, S_LEARN_SWORD, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
//Unlearn Hammer/Axe/Sword
case GOSSIP_ACTION_INFO_DEF + 8:
if (EquippedOk(pPlayer,S_UNLEARN_HAMMER))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_HAMMER, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_HAMMER);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 9:
if (EquippedOk(pPlayer,S_UNLEARN_AXE))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_AXE, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_AXE);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 10:
if (EquippedOk(pPlayer,S_UNLEARN_SWORD))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_SWORD, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SWORD);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
}
void SendConfirmLearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 11191:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID (TALK_HAMMER_LEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 11192:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID (TALK_AXE_LEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 11193:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID (TALK_SWORD_LEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
void SendConfirmUnlearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 11146: //Ironus Coldsteel
case 11178: //Borgosh Corebender
case 5164: //Grumnus Steelshaper
case 11177: //Okothos Ironrager
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(pPlayer),false);
//unknown textID (TALK_UNLEARN_AXEORWEAPON)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 11191:
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID (TALK_HAMMER_UNLEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 11192:
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID (TALK_AXE_UNLEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 11193:
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID (TALK_SWORD_UNLEARN)
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
bool GossipSelect_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
switch(uiSender)
{
case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break;
}
return true;
}
/*bool QuestComplete_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, Quest const *_Quest)
{
if ((_Quest->GetQuestId() == 5283) || (_Quest->GetQuestId() == 5301)) //armorsmith
pCreature->CastSpell(pPlayer, 17451, true);
if ((_Quest->GetQuestId() == 5284) || (_Quest->GetQuestId() == 5302)) //weaponsmith
pCreature->CastSpell(pPlayer, 17452, true);
return true;
}*/
/*###
# engineering trinkets
###*/
enum eEngineeringTrinkets
{
NPC_ZAP = 14742,
NPC_JHORDY = 14743,
NPC_KABLAM = 21493,
NPC_SMILES = 21494,
SPELL_LEARN_TO_EVERLOOK = 23490,
SPELL_LEARN_TO_GADGET = 23491,
SPELL_LEARN_TO_AREA52 = 36956,
SPELL_LEARN_TO_TOSHLEY = 36957,
SPELL_TO_EVERLOOK = 23486,
SPELL_TO_GADGET = 23489,
SPELL_TO_AREA52 = 36954,
SPELL_TO_TOSHLEY = 36955,
ITEM_GNOMISH_CARD = 10790,
ITEM_GOBLIN_CARD = 10791
};
#define GOSSIP_ITEM_ZAP "[PH] Unknown"
#define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!"
#define GOSSIP_ITEM_KABLAM "[PH] Unknown"
#define GOSSIP_ITEM_SMILES "[PH] Unknown"
bool GossipHello_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature)
{
uint32 NpcTextId = 0;
std::string GossipItem;
bool CanLearn = false;
if (pPlayer->HasSkill(SKILL_ENGINERING))
{
switch(pCreature->GetEntry())
{
case NPC_ZAP:
NpcTextId = 7249;
if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GOBLIN))
{
if (!pPlayer->HasSpell(SPELL_TO_EVERLOOK))
{
CanLearn = true;
GossipItem = GOSSIP_ITEM_ZAP;
}
else if (pPlayer->HasSpell(SPELL_TO_EVERLOOK))
NpcTextId = 0;
}
break;
case NPC_JHORDY:
NpcTextId = 7251;
if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GNOMISH))
{
if (!pPlayer->HasSpell(SPELL_TO_GADGET))
{
CanLearn = true;
GossipItem = GOSSIP_ITEM_JHORDY;
}
else if (pPlayer->HasSpell(SPELL_TO_GADGET))
NpcTextId = 7252;
}
break;
case NPC_KABLAM:
NpcTextId = 10365;
if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GOBLIN))
{
if (!pPlayer->HasSpell(SPELL_TO_AREA52))
{
CanLearn = true;
GossipItem = GOSSIP_ITEM_KABLAM;
}
else if (pPlayer->HasSpell(SPELL_TO_AREA52))
NpcTextId = 0;
}
break;
case NPC_SMILES:
NpcTextId = 10363;
if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GNOMISH))
{
if (!pPlayer->HasSpell(SPELL_TO_TOSHLEY))
{
CanLearn = true;
GossipItem = GOSSIP_ITEM_SMILES;
}
else if (pPlayer->HasSpell(SPELL_TO_TOSHLEY))
NpcTextId = 0;
}
break;
}
}
if (CanLearn)
{
if (pPlayer->HasItemCount(ITEM_GOBLIN_CARD,1) || pPlayer->HasItemCount(ITEM_GNOMISH_CARD,1))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GossipItem, pCreature->GetEntry(), GOSSIP_ACTION_INFO_DEF+1);
}
pPlayer->SEND_GOSSIP_MENU(NpcTextId ? NpcTextId : pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
pPlayer->CLOSE_GOSSIP_MENU();
if (uiSender != pCreature->GetEntry())
return true;
switch(uiSender)
{
case NPC_ZAP:
pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_EVERLOOK, false);
break;
case NPC_JHORDY:
pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_GADGET, false);
break;
case NPC_KABLAM:
pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_AREA52, false);
break;
case NPC_SMILES:
pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_TOSHLEY, false);
break;
}
return true;
}
/*###
# start menues leatherworking
###*/
bool GossipHello_npc_prof_leather(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pCreature->isVendor())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (pCreature->isTrainer())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
uint32 eCreature = pCreature->GetEntry();
if (pPlayer->HasSkill(SKILL_LEATHERWORKING) && pPlayer->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 250 && pPlayer->getLevel() > 49)
{
switch (eCreature)
{
case 7866: //Peter Galen
case 7867: //Thorkaf Dragoneye
if (pPlayer->HasSpell(S_DRAGON))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
break;
case 7868: //Sarah Tanner
case 7869: //Brumn Winterhoof
if (pPlayer->HasSpell(S_ELEMENTAL))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
break;
case 7870: //Caryssia Moonhunter
case 7871: //Se'Jib
if (pPlayer->HasSpell(S_TRIBAL))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
break;
}
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
void SendActionMenu_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
break;
//Unlearn Leather
case GOSSIP_ACTION_INFO_DEF + 1:
if (EquippedOk(pPlayer,S_UNLEARN_DRAGON))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_DRAGON, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_DRAGON);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 2:
if (EquippedOk(pPlayer,S_UNLEARN_ELEMENTAL))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_ELEMENTAL, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ELEMENTAL);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 3:
if (EquippedOk(pPlayer,S_UNLEARN_TRIBAL))
{
if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_TRIBAL, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_TRIBAL);
pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
}
void SendConfirmUnlearn_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 7866: //Peter Galen
case 7867: //Thorkaf Dragoneye
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 7868: //Sarah Tanner
case 7869: //Brumn Winterhoof
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 7870: //Caryssia Moonhunter
case 7871: //Se'Jib
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
bool GossipSelect_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
switch(uiSender)
{
case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_leather(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break;
}
return true;
}
/*###
# start menues tailoring
###*/
bool HasTailorSpell(Player* pPlayer)
{
if (pPlayer->HasSpell(S_MOONCLOTH) || pPlayer->HasSpell(S_SHADOWEAVE) || pPlayer->HasSpell(S_SPELLFIRE))
return true;
return false;
}
bool GossipHello_npc_prof_tailor(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pCreature->isVendor())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
if (pCreature->isTrainer())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
uint32 eCreature = pCreature->GetEntry();
//TAILORING SPEC
if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 350 && pPlayer->getLevel() > 59)
{
if (pPlayer->GetQuestRewardStatus(10831) || pPlayer->GetQuestRewardStatus(10832) || pPlayer->GetQuestRewardStatus(10833))
{
switch (eCreature)
{
case 22213: //Gidge Spellweaver
if (!HasTailorSpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
if (pPlayer->HasSpell(S_SPELLFIRE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
case 22208: //Nasmara Moonsong
if (!HasTailorSpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
if (pPlayer->HasSpell(S_MOONCLOTH))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
break;
case 22212: //Andrion Darkspinner
if (!HasTailorSpell(pPlayer))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
if (pPlayer->HasSpell(S_SHADOWEAVE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
break;
}
}
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
void SendActionMenu_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
break;
//Learn Tailor
case GOSSIP_ACTION_INFO_DEF + 1:
if (!pPlayer->HasSpell(S_SPELLFIRE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_SPELLFIRE, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 2:
if (!pPlayer->HasSpell(S_MOONCLOTH) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_MOONCLOTH, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 3:
if (!pPlayer->HasSpell(S_SHADOWEAVE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_LEARN_SHADOWEAVE, true);
pPlayer->ModifyMoney(-DoLearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
pPlayer->CLOSE_GOSSIP_MENU();
break;
//Unlearn Tailor
case GOSSIP_ACTION_INFO_DEF + 4:
if (EquippedOk(pPlayer,S_UNLEARN_SPELLFIRE))
{
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_SPELLFIRE, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SPELLFIRE);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 5:
if (EquippedOk(pPlayer,S_UNLEARN_MOONCLOTH))
{
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_MOONCLOTH, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_MOONCLOTH);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF + 6:
if (EquippedOk(pPlayer,S_UNLEARN_SHADOWEAVE))
{
if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer))
{
pPlayer->CastSpell(pPlayer, S_UNLEARN_SHADOWEAVE, true);
ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SHADOWEAVE);
pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer));
} else
pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0);
} else
pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
}
void SendConfirmLearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 22213:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 22208:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 22212:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
void SendConfirmUnlearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (uiAction)
{
uint32 eCreature = pCreature->GetEntry();
switch(eCreature)
{
case 22213: //Gidge Spellweaver
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 22208: //Nasmara Moonsong
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
case 22212: //Andrion Darkspinner
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction,BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false);
//unknown textID ()
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
break;
}
}
}
bool GossipSelect_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
switch(uiSender)
{
case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break;
case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break;
}
return true;
}
/*###
# start menues for GO (engineering and leatherworking)
###*/
/*bool GOHello_go_soothsaying_for_dummies(Player* pPlayer, GameObject* pGo)
{
pPlayer->PlayerTalkClass->GetGossipMenu()->AddMenuItem(0,GOSSIP_LEARN_DRAGON, GOSSIP_SENDER_INFO, GOSSIP_ACTION_INFO_DEF, "", 0);
pPlayer->SEND_GOSSIP_MENU(5584, pGo->GetGUID());
return true;
}*/
/*###
#
###*/
void AddSC_npc_professions()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_prof_alchemy";
newscript->pGossipHello = &GossipHello_npc_prof_alchemy;
newscript->pGossipSelect = &GossipSelect_npc_prof_alchemy;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_prof_blacksmith";
newscript->pGossipHello = &GossipHello_npc_prof_blacksmith;
newscript->pGossipSelect = &GossipSelect_npc_prof_blacksmith;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_engineering_tele_trinket";
newscript->pGossipHello = &GossipHello_npc_engineering_tele_trinket;
newscript->pGossipSelect = &GossipSelect_npc_engineering_tele_trinket;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_prof_leather";
newscript->pGossipHello = &GossipHello_npc_prof_leather;
newscript->pGossipSelect = &GossipSelect_npc_prof_leather;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_prof_tailor";
newscript->pGossipHello = &GossipHello_npc_prof_tailor;
newscript->pGossipSelect = &GossipSelect_npc_prof_tailor;
newscript->RegisterSelf();
/*newscript = new Script;
newscript->Name = "go_soothsaying_for_dummies";
newscript->pGOHello = &GOHello_go_soothsaying_for_dummies;
//newscript->pGossipSelect = &GossipSelect_go_soothsaying_for_dummies;
newscript->RegisterSelf();*/
}