All pastes #965694 Raw Edit

npc_professions

public text v1 · immutable
·published 2008-04-01 03:35 UTC
rendered paste body
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.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: 60
SDComment: NOT FOR GENERAL USE YET. Provides learn/unlearn/relearn-options for all professions, including GO (soothsaying for dummies)
SDCategory: NPCs
EndScriptData */

/*
A few notes for future developement:
- Mangos need to implement support for "hidden" faction reputation. We can probably make workarounds in script, using questRewarded, 
but this is not a good solution.
- Mangos need to implement better support for unlearning spells. Player must also unlearn associated spells, 
not only the profession spell itself.
- Mangos need to implement better support for checks of equipped items _before_ player can actually unlearn spell. If user unlearn spell
and are allowed to have items equipped dependant on this spell, player will get errors on next log in (and the item(s) in mail). Script
must use/have access to this check to prevent further action, if player has items equipped (perhaps possible to script all of this, but
but preferred to do this from mangos)
- 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 npc_text is chosen from `gameobject_template`.`data2` (for GO type2, different dataN for a few others)
*/

#include "../sc_defines.h"
#include "../../../../game/Player.h"
#include "../../../../game/QuestDef.h"
#include "../../../../game/GossipDef.h"

/*
http://forums.worldofwarcraft.com/thread.html?topicId=388089082&sid=1
http://img72.imageshack.us/img72/953/relearningdslwkq2.jpg
http://usaochan.sakura.ne.jp/harapekosoul/modules/wordpress/attach/WoWScrnShot_061607_215434.jpg
*/
/*
update `creature_template` set `ScriptName` = 'npc_prof_alchemy' where `entry` in (17909, 19052, 22427);
update `creature_template` set `ScriptName` = 'npc_prof_blacksmith' where `entry` in (5164, 11145, 11146, 11176, 11177, 11178, 11191, 11192, 11193);
update `creature_template` set `ScriptName` = 'npc_prof_leather' where `entry` in (7866, 7867, 7868, 7869, 7870, 7871);
update `creature_template` set `ScriptName` = 'npc_prof_tailor' where `entry` in (22208, 22212, 22213);

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!"

/*###
# few generic texts/defines
###*/

#define GOSSIP_ITEM_TRAINER         "Train me"
#define GOSSIP_ITEM_GOODS           "I'd like to browse your goods."

#define GOSSIP_SENDER_LEARN     50
#define GOSSIP_SENDER_UNLEARN   51
#define GOSSIP_SENDER_CHECK     52

/*###
# gossip item and box texts
###*/

#define GOSSIP_YES                  "Yes, i am sure, please continue" //temporary

#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 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                26801

#define S_LEARN_TRANSMUTE       28674
#define S_LEARN_ELIXIR          28678
#define S_LEARN_POTION          26800
    
#define S_UNLEARN_TRANSMUTE     41565
#define S_UNLEARN_ELIXIR        41564
#define S_UNLEARN_POTION        41563

/*###
# some formulas to calculate unlearning cost
###*/

int32 DoLearnCost(Player *player)                           //tailor, alchemy
{
    return 200000;
}
int32 DoHighUnlearnCost(Player *player)                     //tailor, alchemy
{
    return 1500000;
}
int32 DoMedUnlearnCost(Player *player)                      //blacksmith, leatherwork
{
    uint32 level = player->getLevel();
    if(level < 51)
        return 250000;
    else if (level < 66)
        return 500000;
    else
        return 1000000;
}
int32 DoLowUnlearnCost(Player *player)                      //blacksmith
{
    uint32 level = player->getLevel();
    if (level < 66)
        return 50000;
    else
        return 100000;
}

/*###
# start menues alchemy
###*/

bool IsAlchQuestRewarded(Player *player)
{
    if (player->GetQuestRewardStatus(10899) || player->GetQuestRewardStatus(10902) || player->GetQuestRewardStatus(10897))
        return true;

    return false;
}

bool GossipHello_npc_prof_alchemy(Player *player, Creature *_Creature)
{
    if (_Creature->isQuestGiver())
        player->PrepareQuestMenu( _Creature->GetGUID() );
    if (_Creature->isVendor())
        player->ADD_GOSSIP_ITEM( 1, GOSSIP_ITEM_GOODS,   GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
    if(_Creature->isTrainer())
        player->ADD_GOSSIP_ITEM( 2, GOSSIP_ITEM_TRAINER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);

    uint32 eCreature = _Creature->GetEntry();

    if(player->HasSkill(SKILL_ALCHEMY) && player->GetBaseSkillValue(SKILL_ALCHEMY)>=350 && player->getLevel() > 67 )
    {
        switch (eCreature)
        {
        case 22427:                                         //Zarevhi
            if(IsAlchQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_TRANSMUTE,    GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 1);
            if(player->HasSpell(S_TRANSMUTE))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_TRANSMUTE,  GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 4);
            break;
        case 19052:                                         //Lorokeem
            if(IsAlchQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_ELIXIR,       GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 2);
            if(player->HasSpell(S_ELIXIR))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_ELIXIR,     GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 5);
            break;
        case 17909:                                         //Lauranna Thar'well
            if(IsAlchQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_POTION,       GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 3);
            if(player->HasSpell(S_POTION))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_POTION,     GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 6);
            break;
        }
    }

    player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());

    return true;
}

void SendActionMenu_npc_prof_alchemy(Player *player, Creature *_Creature, uint32 action)
{
    switch(action)
    {
    case GOSSIP_ACTION_TRADE:
        player->SEND_VENDORLIST( _Creature->GetGUID() );
        break;
    case GOSSIP_ACTION_TRAIN:
        player->SEND_TRAINERLIST( _Creature->GetGUID() );
        break;
    //Learn Alchemy
    case GOSSIP_ACTION_INFO_DEF + 1:
        if(!player->HasSpell(S_TRANSMUTE) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_TRANSMUTE, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 2:
        if(!player->HasSpell(S_ELIXIR) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_ELIXIR, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 3:
        if(!player->HasSpell(S_POTION) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_POTION, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    //Unlearn Alchemy
    case GOSSIP_ACTION_INFO_DEF + 4:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_TRANSMUTE, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 5:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_ELIXIR, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 6:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_POTION, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    }
}

void SendConfirmLearn_npc_prof_alchemy(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 22427:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 19052:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_ELIXIR,    GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 17909:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_POTION,    GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
        }
    }
}
void SendConfirmUnlearn_npc_prof_alchemy(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 22427:                                     //Zarevhi
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 19052:                                     //Lorokeem
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, action,    BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 17909:                                     //Lauranna Thar'well
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, action,    BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
        }
    }
}

bool GossipSelect_npc_prof_alchemy(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
    switch(sender) 
    {
        case GOSSIP_SENDER_MAIN:    SendActionMenu_npc_prof_alchemy(player, _Creature, action);
            break;
        case GOSSIP_SENDER_LEARN:   SendConfirmLearn_npc_prof_alchemy(player, _Creature, action);
            break;
        case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_alchemy(player, _Creature, action);
            break;
        case GOSSIP_SENDER_CHECK:   SendActionMenu_npc_prof_alchemy(player, _Creature, action);
            break;
    }
    return true;
}

/*###
# start menues blacksmith
###*/

bool HasWeaponSub(Player *player)
{
    if (player->HasSpell(S_HAMMER) || player->HasSpell(S_AXE) || player->HasSpell(S_SWORD))
        return true;

    return false;
}

bool GossipHello_npc_prof_blacksmith(Player *player, Creature *_Creature)
{
    if (_Creature->isQuestGiver())
        player->PrepareQuestMenu( _Creature->GetGUID() );
    if (_Creature->isVendor())
        player->ADD_GOSSIP_ITEM( 1, GOSSIP_ITEM_GOODS,   GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
    if(_Creature->isTrainer())
        player->ADD_GOSSIP_ITEM( 2, GOSSIP_ITEM_TRAINER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);

    uint32 eCreature = _Creature->GetEntry();
    //WEAPONSMITH & ARMORSMITH
    if(player->GetBaseSkillValue(SKILL_BLACKSMITHING)>=225)
    {
        switch (eCreature)
        {
        case 11145:                                         //Myolor Sunderfury
        case 11176:                                         //Krathok Moltenfist
            if(!player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >  REP_NEUTRAL)                         //prevent display before after unlearned once and not when having specialty
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_ARMOR_LEARN,   GOSSIP_SENDER_LEARN,         GOSSIP_ACTION_INFO_DEF + 1);
            if(!player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR)  > REP_NEUTRAL)                         //prevent display before after unlearned once and not when having specialty
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_WEAPON_LEARN,  GOSSIP_SENDER_LEARN,         GOSSIP_ACTION_INFO_DEF + 2);
            break;
        case 11146:                                         //Ironus Coldsteel
        case 11178:                                         //Borgosh Corebender
            if(player->HasSpell(S_WEAPON))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_WEAPON_UNLEARN,    GOSSIP_SENDER_UNLEARN,   GOSSIP_ACTION_INFO_DEF + 3);
            break;
        case 5164:                                          //Grumnus Steelshaper
        case 11177:                                         //Okothos Ironrager
            if(player->HasSpell(S_ARMOR))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_ARMOR_UNLEARN,     GOSSIP_SENDER_UNLEARN,   GOSSIP_ACTION_INFO_DEF + 4);
            break;
        }
    }
    //WEAPONSMITH SPEC
    if(player->HasSpell(S_WEAPON) && player->getLevel() > 49 && player->GetBaseSkillValue(SKILL_BLACKSMITHING)>=250)
    {
        switch (eCreature)
        {
        case 11191:                                         //Lilith the Lithe
            if(!HasWeaponSub(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_HAMMER,       GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 5);
            if(player->HasSpell(S_HAMMER))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_HAMMER,     GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 8);
            break;
        case 11192:                                         //Kilram
            if(!HasWeaponSub(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_AXE,          GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 6);
            if(player->HasSpell(S_AXE))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_AXE,        GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 9);
            break;
        case 11193:                                         //Seril Scourgebane
            if(!HasWeaponSub(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SWORD,        GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 7);
            if(player->HasSpell(S_SWORD))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_SWORD,      GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 10);
            break;
        }
    }

    player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());

    return true;
}

void SendActionMenu_npc_prof_blacksmith(Player *player, Creature *_Creature, uint32 action)
{
    switch(action)
    {
    case GOSSIP_ACTION_TRADE:
        player->SEND_VENDORLIST( _Creature->GetGUID() );
        break;
    case GOSSIP_ACTION_TRAIN:
        player->SEND_TRAINERLIST( _Creature->GetGUID() );
        break;
    //Learn Armor/Weapon
    case GOSSIP_ACTION_INFO_DEF + 1:
        if(!player->HasSpell(S_WEAPON))
        {
            _Creature->CastSpell(player, S_LEARN_WEAPON, true);
            _Creature->CastSpell(player, S_REP_WEAPON, true);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 2:
        if(!player->HasSpell(S_ARMOR))
        {
            _Creature->CastSpell(player, S_LEARN_ARMOR, true);
            _Creature->CastSpell(player, S_REP_ARMOR, true);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    //Unlearn Armor/Weapon
    case GOSSIP_ACTION_INFO_DEF + 3:
        if(HasWeaponSub(player))
        {
            player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_MUST_UNLEARN_WEAPON)
            _Creature->MonsterSay(TALK_MUST_UNLEARN_WEAPON,0,player->GetGUID());         //Temporary, not offilike
        }
        else if(player->GetMoney() >= DoLowUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_WEAPON, true);
            player->ModifyMoney(-DoLowUnlearnCost(player));
            _Creature->CastSpell(player, S_REP_ARMOR, true);
            player->CLOSE_GOSSIP_MENU();
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
            player->CLOSE_GOSSIP_MENU();
        }
        break;
    case GOSSIP_ACTION_INFO_DEF + 4:
        if(player->GetMoney() >= DoLowUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_ARMOR, true);
            player->ModifyMoney(-DoLowUnlearnCost(player));
            _Creature->CastSpell(player, S_REP_WEAPON, true);
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    //Learn Hammer/Axe/Sword
    case GOSSIP_ACTION_INFO_DEF + 5:
        _Creature->CastSpell(player, S_LEARN_HAMMER, true);
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 6:
        _Creature->CastSpell(player, S_LEARN_AXE, true);
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 7:
        _Creature->CastSpell(player, S_LEARN_SWORD, true);
        player->CLOSE_GOSSIP_MENU();
        break;
    //Unlearn Hammer/Axe/Sword
    case GOSSIP_ACTION_INFO_DEF + 8:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_HAMMER, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 9:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_AXE, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 10:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_SWORD, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    }
}

void SendConfirmLearn_npc_prof_blacksmith(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 11191:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_HAMMER_LEARN)
                break;
            case 11192:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_AXE,    GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_AXE_LEARN)
                break;
            case 11193:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SWORD,  GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_SWORD_LEARN)
                break;
        }
    }
}
void SendConfirmUnlearn_npc_prof_blacksmith(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 11146:                                     //Ironus Coldsteel
            case 11178:                                     //Borgosh Corebender
            case 5164:                                      //Grumnus Steelshaper
            case 11177:                                     //Okothos Ironrager
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_YES, GOSSIP_SENDER_CHECK, action,               BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_UNLEARN_AXEORWEAPON)
                break;

            case 11191:
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action,    BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_HAMMER_UNLEARN)
                break;
            case 11192:
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action,       BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_AXE_UNLEARN)
                break;
            case 11193:
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action,     BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID (TALK_SWORD_UNLEARN)
                break;
        }
    }
}

bool GossipSelect_npc_prof_blacksmith(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
    switch(sender) 
    {
        case GOSSIP_SENDER_MAIN:    SendActionMenu_npc_prof_blacksmith(player, _Creature, action);
            break;
        case GOSSIP_SENDER_LEARN:   SendConfirmLearn_npc_prof_blacksmith(player, _Creature, action);
            break;
        case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_blacksmith(player, _Creature, action);
            break;
        case GOSSIP_SENDER_CHECK:   SendActionMenu_npc_prof_blacksmith(player, _Creature, action);
            break;
    }
    return true;
}

/*bool QuestComplete_npc_prof_blacksmith( Player *player, Creature *_Creature, Quest const *_Quest )
{
    if ( (_Quest->GetQuestId() == 5283) || (_Quest->GetQuestId() == 5301) )             //armorsmith
        _Creature->CastSpell(player, 17451, true);

    if ( (_Quest->GetQuestId() == 5284) || (_Quest->GetQuestId() == 5302) )             //weaponsmith
        _Creature->CastSpell(player, 17452, true);

    return true;
}*/

/*###
# start menues leatherworking
###*/

bool GossipHello_npc_prof_leather(Player *player, Creature *_Creature)
{
    if (_Creature->isQuestGiver())
        player->PrepareQuestMenu( _Creature->GetGUID() );
    if (_Creature->isVendor())
        player->ADD_GOSSIP_ITEM( 1, GOSSIP_ITEM_GOODS,   GOSSIP_SENDER_MAIN,                GOSSIP_ACTION_TRADE);
    if(_Creature->isTrainer())
        player->ADD_GOSSIP_ITEM( 2, GOSSIP_ITEM_TRAINER, GOSSIP_SENDER_MAIN,                GOSSIP_ACTION_TRAIN);

    uint32 eCreature = _Creature->GetEntry();

    if(player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING)>=250 && player->getLevel() > 49 )
    {
        switch (eCreature)
        {
        case 7866:                                          //Peter Galen
        case 7867:                                          //Thorkaf Dragoneye
            if(player->HasSpell(S_DRAGON))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_DRAGON,      GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
            break;
        case 7868:                                          //Sarah Tanner
        case 7869:                                          //Brumn Winterhoof
            if(player->HasSpell(S_ELEMENTAL))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_ELEMENTAL,   GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
            break;
        case 7870:                                          //Caryssia Moonhunter
        case 7871:                                          //Se'Jib
            if(player->HasSpell(S_TRIBAL))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_TRIBAL,      GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
            break;
        }
    }

    player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());

    return true;
}

void SendActionMenu_npc_prof_leather(Player *player, Creature *_Creature, uint32 action)
{
    switch(action)
    {
    case GOSSIP_ACTION_TRADE:
        player->SEND_VENDORLIST( _Creature->GetGUID() );
        break;
    case GOSSIP_ACTION_TRAIN:
        player->SEND_TRAINERLIST( _Creature->GetGUID() );
        break;
    //Unlearn Leather
	case GOSSIP_ACTION_INFO_DEF + 1:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_DRAGON, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 2:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_ELEMENTAL, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 3:
        if(player->GetMoney() >= DoMedUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_TRIBAL, true);
            player->ModifyMoney(-DoMedUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    }
}

void SendConfirmUnlearn_npc_prof_leather(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 7866:                                      //Peter Galen
            case 7867:                                      //Thorkaf Dragoneye
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action,    BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 7868:                                      //Sarah Tanner
            case 7869:                                      //Brumn Winterhoof
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 7870:                                      //Caryssia Moonhunter
            case 7871:                                      //Se'Jib
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action,    BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
        }
    }
}

bool GossipSelect_npc_prof_leather(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
    switch(sender) 
    {
        case GOSSIP_SENDER_MAIN:    SendActionMenu_npc_prof_leather(player, _Creature, action);
            break;
        case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_leather(player, _Creature, action);
            break;
        case GOSSIP_SENDER_CHECK:   SendActionMenu_npc_prof_leather(player, _Creature, action);
            break;
    }
    return true;
}

/*###
# start menues tailoring
###*/

bool IsTailQuestRewarded(Player *player)
{
    if (player->GetQuestRewardStatus(10831) || player->GetQuestRewardStatus(10832) || player->GetQuestRewardStatus(10833))
        return true;

    return false;
}

bool GossipHello_npc_prof_tailor(Player *player, Creature *_Creature)
{
    if (_Creature->isQuestGiver())
        player->PrepareQuestMenu( _Creature->GetGUID() );
    if (_Creature->isVendor())
        player->ADD_GOSSIP_ITEM( 1, GOSSIP_ITEM_GOODS,   GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
    if(_Creature->isTrainer())
        player->ADD_GOSSIP_ITEM( 2, GOSSIP_ITEM_TRAINER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);

    uint32 eCreature = _Creature->GetEntry();
                                                            //TAILORING SPEC
    if(player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING)>=350 && player->getLevel() > 59 )
    {
        switch (eCreature)
        {
        case 22213:                                         //Gidge Spellweaver
            if(IsTailQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SPELLFIRE,    GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 1);
            if(player->HasSpell(S_SPELLFIRE))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_SPELLFIRE,  GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 4);
            break;
        case 22208:                                         //Nasmara Moonsong
            if(IsTailQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_MOONCLOTH,    GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 2);
            if(player->HasSpell(S_MOONCLOTH))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_MOONCLOTH,  GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 5);
            break;
        case 22212:                                         //Andrion Darkspinner
            if(IsTailQuestRewarded(player))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SHADOWEAVE,   GOSSIP_SENDER_LEARN,    GOSSIP_ACTION_INFO_DEF + 3);
            if(player->HasSpell(S_SHADOWEAVE))
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN,  GOSSIP_ACTION_INFO_DEF + 6);
            break;
        }
    }

    player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());

    return true;
}

void SendActionMenu_npc_prof_tailor(Player *player, Creature *_Creature, uint32 action)
{
    switch(action)
    {
    case GOSSIP_ACTION_TRADE:
        player->SEND_VENDORLIST( _Creature->GetGUID() );
        break;
    case GOSSIP_ACTION_TRAIN:
        player->SEND_TRAINERLIST( _Creature->GetGUID() );
        break;
    //Learn Tailor
    case GOSSIP_ACTION_INFO_DEF + 1:
        if(!player->HasSpell(S_SPELLFIRE) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_SPELLFIRE, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 2:
        if(!player->HasSpell(S_MOONCLOTH) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_MOONCLOTH, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 3:
        if(!player->HasSpell(S_SHADOWEAVE) && player->GetMoney() >= DoLearnCost(player))
        {
            _Creature->CastSpell(player, S_LEARN_SHADOWEAVE, true);
            player->ModifyMoney(-DoLearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    //Unlearn Tailor
    case GOSSIP_ACTION_INFO_DEF + 4:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_SPELLFIRE, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 5:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_MOONCLOTH, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    case GOSSIP_ACTION_INFO_DEF + 6:
        if(player->GetMoney() >= DoHighUnlearnCost(player))
        {
            _Creature->CastSpell(player, S_UNLEARN_SHADOWEAVE, true);
            player->ModifyMoney(-DoHighUnlearnCost(player));
        }else{
            player->SendBuyError( BUY_ERR_NOT_ENOUGHT_MONEY, _Creature, 0, 0);
        }
        player->CLOSE_GOSSIP_MENU();
        break;
    }
}

void SendConfirmLearn_npc_prof_tailor(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 22213:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 22208:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_MOONCLOTH,    GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 22212:
                player->ADD_GOSSIP_ITEM( 0, GOSSIP_LEARN_SHADOWEAVE,  GOSSIP_SENDER_CHECK, action);
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
        }
    }
}
void SendConfirmUnlearn_npc_prof_tailor(Player *player, Creature *_Creature, uint32 action)
{
    if(action)
    {
        uint32 eCreature = _Creature->GetEntry();
        switch(eCreature)
        {
            case 22213:                                     //Gidge Spellweaver
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 22208:                                     //Nasmara Moonsong
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
            case 22212:                                     //Andrion Darkspinner
                player->ADD_GOSSIP_ITEM_EXTENDED( 0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action,BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player));
                player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());   //unknown textID ()
                break;
        }
    }
}

bool GossipSelect_npc_prof_tailor(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
    switch(sender) 
    {
        case GOSSIP_SENDER_MAIN:    SendActionMenu_npc_prof_tailor(player, _Creature, action);
            break;
        case GOSSIP_SENDER_LEARN:   SendConfirmLearn_npc_prof_tailor(player, _Creature, action);
            break;
        case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_tailor(player, _Creature, action);
            break;
        case GOSSIP_SENDER_CHECK:   SendActionMenu_npc_prof_tailor(player, _Creature, action);
            break;
    }
    return true;
}

/*###
# start menues for GO (engineering and leatherworking)
###*/

/*bool GOHello_go_soothsaying_for_dummies(Player *player, GameObject* _GO)
{
    player->PlayerTalkClass->GetGossipMenu()->AddMenuItem(0,GOSSIP_LEARN_DRAGON, GOSSIP_SENDER_INFO, GOSSIP_ACTION_INFO_DEF, "", 0);

    player->SEND_GOSSIP_MENU(5584, _GO->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;
    m_scripts[nrscripts++] = newscript;

    newscript = new Script;
    newscript->Name="npc_prof_blacksmith";
    newscript->pGossipHello =  &GossipHello_npc_prof_blacksmith;
    newscript->pGossipSelect = &GossipSelect_npc_prof_blacksmith;
    m_scripts[nrscripts++] = newscript;

    newscript = new Script;
    newscript->Name="npc_prof_leather";
    newscript->pGossipHello =  &GossipHello_npc_prof_leather;
    newscript->pGossipSelect = &GossipSelect_npc_prof_leather;
    m_scripts[nrscripts++] = newscript;

    newscript = new Script;
    newscript->Name="npc_prof_tailor";
    newscript->pGossipHello =  &GossipHello_npc_prof_tailor;
    newscript->pGossipSelect = &GossipSelect_npc_prof_tailor;
    m_scripts[nrscripts++] = newscript;

    /*newscript = new Script;
    newscript->Name="go_soothsaying_for_dummies";
    newscript->pGOHello =  &GOHello_go_soothsaying_for_dummies;
    //newscript->pGossipSelect = &GossipSelect_go_soothsaying_for_dummies;
    m_scripts[nrscripts++] = newscript;*/
}