mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
232 lines
12 KiB
C++
232 lines
12 KiB
C++
|
|
#include "ScriptPCH.h"
|
||
|
|
#include "Transmogrification.h"
|
||
|
|
#include "Language.h"
|
||
|
|
|
||
|
|
enum professionmenu
|
||
|
|
{
|
||
|
|
OPTION_TAILORING,
|
||
|
|
OPTION_JEWELCRAFTING,
|
||
|
|
OPTION_ENGINEERING,
|
||
|
|
OPTION_BLACKSMITHING,
|
||
|
|
OPTION_ALCHEMY,
|
||
|
|
OPTION_INSCRIPTION,
|
||
|
|
OPTION_ENCHANTING,
|
||
|
|
OPTION_LEATHERWORKING,
|
||
|
|
OPTION_COOKING,
|
||
|
|
OPTION_FIRST_AID,
|
||
|
|
OPTION_MAIN_MENU,
|
||
|
|
|
||
|
|
SORT_TAILORING = 0,
|
||
|
|
SORT_JEWELCRAFTING,
|
||
|
|
SORT_ENGINEERING,
|
||
|
|
SORT_BLACKSMITHING,
|
||
|
|
SORT_ALCHEMY,
|
||
|
|
SORT_INSCRIPTION,
|
||
|
|
SORT_ENCHANTING,
|
||
|
|
SORT_LEATHERWORKING,
|
||
|
|
SORT_COOKING,
|
||
|
|
SORT_FIRST_AID,
|
||
|
|
|
||
|
|
TEXT_PROFESSION_MAIN = 50020,
|
||
|
|
ACTION_LEARN_PROFESSION,
|
||
|
|
ACTION_PURCHASE_MATERIALS,
|
||
|
|
};
|
||
|
|
|
||
|
|
class npc_professions : public CreatureScript
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
npc_professions() : CreatureScript("npc_professions") { } // to alliance from horde
|
||
|
|
|
||
|
|
bool OnGossipHello(Player* player, Creature* creature) override
|
||
|
|
{
|
||
|
|
if (!sWorld->getBoolConfig(CUSTOM_SCRIPTS_ENABLED_OR_NOT))
|
||
|
|
return false;
|
||
|
|
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_TAILORING) && player->GetSkillValue(SKILL_TAILORING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Tailoring", GOSSIP_SENDER_MAIN, OPTION_TAILORING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_JEWELCRAFTING) && player->GetSkillValue(SKILL_JEWELCRAFTING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Jewelcrafting", GOSSIP_SENDER_MAIN, OPTION_JEWELCRAFTING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_ENGINEERING) && player->GetSkillValue(SKILL_ENGINEERING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Engineering", GOSSIP_SENDER_MAIN, OPTION_ENGINEERING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_BLACKSMITHING) && player->GetSkillValue(SKILL_BLACKSMITHING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Blacksmithing", GOSSIP_SENDER_MAIN, OPTION_BLACKSMITHING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_ALCHEMY) && player->GetSkillValue(SKILL_ALCHEMY) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Alchemy", GOSSIP_SENDER_MAIN, OPTION_ALCHEMY);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_INSCRIPTION) && player->GetSkillValue(SKILL_INSCRIPTION) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Inscription", GOSSIP_SENDER_MAIN, OPTION_INSCRIPTION);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_ENCHANTING) && player->GetSkillValue(SKILL_ENCHANTING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Enchanting", GOSSIP_SENDER_MAIN, OPTION_ENCHANTING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_LEATHERWORKING) && player->GetSkillValue(SKILL_LEATHERWORKING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Leatherworking", GOSSIP_SENDER_MAIN, OPTION_LEATHERWORKING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_COOKING) && player->GetSkillValue(SKILL_COOKING) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "Cooking", GOSSIP_SENDER_MAIN, OPTION_COOKING);
|
||
|
|
if (player->GetSession()->IsPremium() || (player->HasSkill(SKILL_FIRST_AID) && player->GetSkillValue(SKILL_FIRST_AID) >= 400)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD, "First Aid", GOSSIP_SENDER_MAIN, OPTION_FIRST_AID);
|
||
|
|
player->SEND_GOSSIP_MENU(TEXT_PROFESSION_MAIN, creature->GetGUID());
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
|
||
|
|
{
|
||
|
|
player->PlayerTalkClass->ClearMenus();
|
||
|
|
switch (sender)
|
||
|
|
{
|
||
|
|
case GOSSIP_SENDER_MAIN:
|
||
|
|
switch (action)
|
||
|
|
{
|
||
|
|
case OPTION_TAILORING:
|
||
|
|
//if (player->HasSkill(SKILL_TAILORING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_fabric_linen_01:40:40:-18:0|tLearn the skill Tailoring", ACTION_LEARN_PROFESSION, SKILL_TAILORING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_fabric_linen_01:40:40:-18:0|tTailoring Materials", ACTION_PURCHASE_MATERIALS, SORT_TAILORING);
|
||
|
|
break;
|
||
|
|
case OPTION_JEWELCRAFTING:
|
||
|
|
//if (player->HasSkill(SKILL_JEWELCRAFTING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_jewelcrafting_nightseye_02:40:40:-18:0|tLearn the skill Jewelcrafting", ACTION_LEARN_PROFESSION, SKILL_JEWELCRAFTING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_jewelcrafting_nightseye_02:40:40:-18:0|tJewelcrafting Materials", ACTION_PURCHASE_MATERIALS, SORT_JEWELCRAFTING);
|
||
|
|
break;
|
||
|
|
case OPTION_ENGINEERING:
|
||
|
|
//if (player->HasSkill(SKILL_ENGINEERING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_gear_06:40:40:-18:0|tLearn the skill Engineering", ACTION_LEARN_PROFESSION, SKILL_ENGINEERING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_gear_06:40:40:-18:0|tEngineering Materials", ACTION_PURCHASE_MATERIALS, SORT_ENGINEERING);
|
||
|
|
break;
|
||
|
|
case OPTION_BLACKSMITHING:
|
||
|
|
//if (player->HasSkill(SKILL_BLACKSMITHING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_ingot_02:40:40:-18:0|tLearn the skill Blacksmithing", ACTION_LEARN_PROFESSION, SKILL_BLACKSMITHING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_ingot_02:40:40:-18:0|tBlacksmithing Materials", ACTION_PURCHASE_MATERIALS, SORT_BLACKSMITHING);
|
||
|
|
break;
|
||
|
|
case OPTION_ALCHEMY:
|
||
|
|
//if (player->HasSkill(SKILL_ALCHEMY))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_flower_02:40:40:-18:0|tLearn the skill Alchemy", ACTION_LEARN_PROFESSION, SKILL_ALCHEMY);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_flower_02:40:40:-18:0|tAlchemy Materials", ACTION_PURCHASE_MATERIALS, SORT_ALCHEMY);
|
||
|
|
break;
|
||
|
|
case OPTION_INSCRIPTION:
|
||
|
|
//if (player->HasSkill(SKILL_INSCRIPTION))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_inscription_papyrus:40:40:-18:0|tLearn the skill Inscription", ACTION_LEARN_PROFESSION, SKILL_INSCRIPTION);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_inscription_papyrus:40:40:-18:0|tInscription Materials", ACTION_PURCHASE_MATERIALS, SORT_INSCRIPTION);
|
||
|
|
break;
|
||
|
|
case OPTION_ENCHANTING:
|
||
|
|
//if (player->HasSkill(SKILL_ENCHANTING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_dust_infinite:40:40:-18:0|tLearn the skill Enchanting", ACTION_LEARN_PROFESSION, SKILL_ENCHANTING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_dust_infinite:40:40:-18:0|tEnchanting Materials", ACTION_PURCHASE_MATERIALS, SORT_ENCHANTING);
|
||
|
|
break;
|
||
|
|
case OPTION_LEATHERWORKING:
|
||
|
|
//if (player->HasSkill(SKILL_LEATHERWORKING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_leatherscrap_03:40:40:-18:0|tLearn the skill Leatherworking", ACTION_LEARN_PROFESSION, SKILL_LEATHERWORKING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_leatherscrap_03:40:40:-18:0|tLeatherworking Materials", ACTION_PURCHASE_MATERIALS, SORT_LEATHERWORKING);
|
||
|
|
break;
|
||
|
|
case OPTION_COOKING:
|
||
|
|
//if (player->HasSkill(SKILL_COOKING))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_food_16:40:40:-18:0|tLearn the skill Cooking", ACTION_LEARN_PROFESSION, SKILL_COOKING);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_food_16:40:40:-18:0|tCooking Materials", ACTION_PURCHASE_MATERIALS, SORT_COOKING);
|
||
|
|
break;
|
||
|
|
case OPTION_FIRST_AID:
|
||
|
|
//if(player->HasSkill(SKILL_FIRST_AID))
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_bandage_15:40:40:-18:0|tLearn the skill First Aid", ACTION_LEARN_PROFESSION, SKILL_FIRST_AID);
|
||
|
|
//player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"|TInterface/ICONS/inv_misc_bandage_15:40:40:-18:0|tFirst Aid Materials", ACTION_PURCHASE_MATERIALS, SORT_FIRST_AID);
|
||
|
|
break;
|
||
|
|
case OPTION_MAIN_MENU:
|
||
|
|
OnGossipHello(player, creature);
|
||
|
|
player->SEND_GOSSIP_MENU(TEXT_PROFESSION_MAIN, creature->GetGUID());
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TABARD,"Back", GOSSIP_SENDER_MAIN, OPTION_MAIN_MENU);
|
||
|
|
player->SEND_GOSSIP_MENU(TEXT_PROFESSION_MAIN, creature->GetGUID());
|
||
|
|
break;
|
||
|
|
case ACTION_LEARN_PROFESSION:
|
||
|
|
//if (!CheckSkill(player, action))
|
||
|
|
//{
|
||
|
|
//player->GetSession()->SendNotification("You already have two professions or already know this skill");
|
||
|
|
OnGossipHello(player, creature);
|
||
|
|
//break;
|
||
|
|
//}
|
||
|
|
HandleLearnSkillRecipesHelper(player, action);
|
||
|
|
player->SetSkill(action, player->GetSkillStep(action), 450, 450);
|
||
|
|
break;
|
||
|
|
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CheckSkill(Player* player, uint16 skill)
|
||
|
|
{
|
||
|
|
uint8 skillCount = 0;
|
||
|
|
|
||
|
|
if (IsSecondary(skill))
|
||
|
|
return true;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_ALCHEMY))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_BLACKSMITHING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_ENCHANTING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_ENGINEERING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_HERBALISM))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_INSCRIPTION))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_JEWELCRAFTING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_LEATHERWORKING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (player->HasSkill(SKILL_TAILORING))
|
||
|
|
skillCount++;
|
||
|
|
|
||
|
|
if (skillCount > 1)
|
||
|
|
return false;
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool IsSecondary(uint16 skill)
|
||
|
|
{
|
||
|
|
switch (skill)
|
||
|
|
{
|
||
|
|
case SKILL_COOKING:
|
||
|
|
case SKILL_FIRST_AID:
|
||
|
|
case SKILL_FISHING:
|
||
|
|
return true;
|
||
|
|
default:
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void HandleLearnSkillRecipesHelper(Player* player, uint32 skillId)
|
||
|
|
{
|
||
|
|
uint32 classmask = player->getClassMask();
|
||
|
|
|
||
|
|
for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
|
||
|
|
{
|
||
|
|
SkillLineAbilityEntry const* skillLine = sSkillLineAbilityStore.LookupEntry(j);
|
||
|
|
if (!skillLine)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
// wrong skill
|
||
|
|
if (skillLine->skillId != skillId)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
// not high rank
|
||
|
|
if (skillLine->forward_spellid)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
// skip racial skills
|
||
|
|
if (skillLine->racemask != 0)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
// skip wrong class skills
|
||
|
|
if (skillLine->classmask && (skillLine->classmask & classmask) == 0)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(skillLine->spellId);
|
||
|
|
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
player->learnSpell(skillLine->spellId);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
void AddSC_ProfessionsNPC()
|
||
|
|
{
|
||
|
|
new npc_professions;
|
||
|
|
}
|