mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
318 lines
No EOL
12 KiB
C++
318 lines
No EOL
12 KiB
C++
#include "ScriptPCH.h"
|
|
#include "Chat.h"
|
|
#include "ServiceMgr.h"
|
|
|
|
enum skillsId
|
|
{
|
|
FIRST_AID = 129, // first Aid
|
|
BLACKSMITHING = 164, // Blacksmithing
|
|
LEATHERWORKING = 165, // Leatherworking
|
|
ALCHEMY = 171, // Alchemy
|
|
HERBALISM = 182, // Herbalism
|
|
COOKING = 185, // Cooking
|
|
MINING = 186, // Mining
|
|
TAILORING = 197, // Tailoring
|
|
ENGINEERING = 202, // Engineering
|
|
ENCHANTING = 333, // Enchanting
|
|
FISHING = 356, // Fishing
|
|
SKINNING = 393, // Skinning
|
|
JEWELCRAFTING = 755, // Jewelcrafting
|
|
INSCRIPTION = 773, // Inscription
|
|
ARCHAEOLOGY = 794 // Archaeology
|
|
};
|
|
|
|
enum spellId_600
|
|
{
|
|
SPELL_600_FIRST_AID = 110406, // first Aid
|
|
SPELL_600_BLACKSMITHING = 110396, // Blacksmithing
|
|
SPELL_600_LEATHERWORKING = 110423, // Leatherworking
|
|
SPELL_600_ALCHEMY = 105206, // Alchemy
|
|
SPELL_600_HERBALISM = 110413, // Herbalism
|
|
SPELL_600_COOKING = 104381, // Cooking
|
|
SPELL_600_MINING = 102161, // Mining
|
|
SPELL_600_TAILORING = 110426, // Tailoring
|
|
SPELL_600_ENGINEERING = 110403, // Engineering
|
|
SPELL_600_ENCHANTING = 110400, // Enchanting
|
|
SPELL_600_FISHING = 110410, // Fishing
|
|
SPELL_600_SKINNING = 102216, // Skinning
|
|
SPELL_600_JEWELCRAFTING = 110420, // Jewelcrafting
|
|
SPELL_600_INSCRIPTION = 110417, // Inscription
|
|
SPELL_600_ARCHAEOLOGY = 110393 // Archaeology
|
|
};
|
|
|
|
class Boost_Profession : public ItemScript
|
|
{
|
|
public:
|
|
Boost_Profession() : ItemScript("Boost_Profession") {}
|
|
|
|
bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
player->SaveToDB();
|
|
|
|
if(player->HasSkill(FIRST_AID))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 0, GOSSIP_SENDER_MAIN, FIRST_AID);
|
|
if(player->HasSkill(BLACKSMITHING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 1, GOSSIP_SENDER_MAIN, BLACKSMITHING);
|
|
if(player->HasSkill(LEATHERWORKING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 2, GOSSIP_SENDER_MAIN, LEATHERWORKING);
|
|
if(player->HasSkill(ALCHEMY))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 3, GOSSIP_SENDER_MAIN, ALCHEMY);
|
|
if(player->HasSkill(HERBALISM))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 4, GOSSIP_SENDER_MAIN, HERBALISM);
|
|
if(player->HasSkill(COOKING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 5, GOSSIP_SENDER_MAIN, COOKING);
|
|
if(player->HasSkill(MINING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 6, GOSSIP_SENDER_MAIN, MINING);
|
|
if(player->HasSkill(TAILORING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 7, GOSSIP_SENDER_MAIN, TAILORING);
|
|
if(player->HasSkill(ENGINEERING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 8, GOSSIP_SENDER_MAIN, ENGINEERING);
|
|
if(player->HasSkill(ENCHANTING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 9, GOSSIP_SENDER_MAIN, ENCHANTING);
|
|
if(player->HasSkill(FISHING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 10, GOSSIP_SENDER_MAIN, FISHING);
|
|
if(player->HasSkill(SKINNING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 11, GOSSIP_SENDER_MAIN, SKINNING);
|
|
if(player->HasSkill(JEWELCRAFTING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 12, GOSSIP_SENDER_MAIN, JEWELCRAFTING);
|
|
if(player->HasSkill(INSCRIPTION))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 13, GOSSIP_SENDER_MAIN, INSCRIPTION);
|
|
if(player->HasSkill(ARCHAEOLOGY))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 14, GOSSIP_SENDER_MAIN, ARCHAEOLOGY);
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Bye", GOSSIP_SENDER_MAIN, 1);
|
|
|
|
player->SEND_GOSSIP_MENU(20010, item->GetGUID());
|
|
return true;
|
|
}
|
|
|
|
void OnGossipSelect(Player* player, Item* item, uint32 sender, uint32 action)
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
uint32 confirm = 0;
|
|
|
|
switch (action)
|
|
{
|
|
case 1:
|
|
player->CLOSE_GOSSIP_MENU();
|
|
break;
|
|
case FIRST_AID:
|
|
if (!player->HasSpell(SPELL_600_FIRST_AID))
|
|
{
|
|
player->LearnSpell(SPELL_600_FIRST_AID, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case BLACKSMITHING:
|
|
if (!player->HasSpell(SPELL_600_BLACKSMITHING))
|
|
{
|
|
player->LearnSpell(SPELL_600_BLACKSMITHING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case LEATHERWORKING:
|
|
if (!player->HasSpell(SPELL_600_LEATHERWORKING))
|
|
{
|
|
player->LearnSpell(SPELL_600_LEATHERWORKING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case ALCHEMY:
|
|
if (!player->HasSpell(SPELL_600_ALCHEMY))
|
|
{
|
|
player->LearnSpell(SPELL_600_ALCHEMY, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case HERBALISM:
|
|
if (!player->HasSpell(SPELL_600_HERBALISM))
|
|
{
|
|
player->LearnSpell(SPELL_600_HERBALISM, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case COOKING:
|
|
if (!player->HasSpell(SPELL_600_COOKING))
|
|
{
|
|
player->LearnSpell(SPELL_600_COOKING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case MINING:
|
|
if (!player->HasSpell(SPELL_600_MINING))
|
|
{
|
|
player->LearnSpell(SPELL_600_MINING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case TAILORING:
|
|
if (!player->HasSpell(SPELL_600_TAILORING))
|
|
{
|
|
player->LearnSpell(SPELL_600_TAILORING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case ENGINEERING:
|
|
if (!player->HasSpell(SPELL_600_ENGINEERING))
|
|
{
|
|
player->LearnSpell(SPELL_600_ENGINEERING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case ENCHANTING:
|
|
if (!player->HasSpell(SPELL_600_ENCHANTING))
|
|
{
|
|
player->LearnSpell(SPELL_600_ENCHANTING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case FISHING:
|
|
if (!player->HasSpell(SPELL_600_FISHING))
|
|
{
|
|
player->LearnSpell(SPELL_600_FISHING, false);
|
|
confirm = 2;
|
|
}
|
|
break;
|
|
case SKINNING:
|
|
if (!player->HasSpell(SPELL_600_SKINNING))
|
|
{
|
|
player->LearnSpell(SPELL_600_SKINNING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case JEWELCRAFTING:
|
|
if (!player->HasSpell(SPELL_600_JEWELCRAFTING))
|
|
{
|
|
player->LearnSpell(SPELL_600_JEWELCRAFTING, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case INSCRIPTION:
|
|
if (!player->HasSpell(SPELL_600_INSCRIPTION))
|
|
{
|
|
player->LearnSpell(SPELL_600_INSCRIPTION, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
case ARCHAEOLOGY:
|
|
if (!player->HasSpell(SPELL_600_ARCHAEOLOGY))
|
|
{
|
|
player->LearnSpell(SPELL_600_ARCHAEOLOGY, false);
|
|
confirm = 1;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if(confirm == 1)
|
|
{
|
|
int32 maxvalueprof = player->GetMaxSkillValue(action);
|
|
if(player->HasSkill(action) && player->GetSkillValue(action) < maxvalueprof)
|
|
player->SetSkill(action, player->GetSkillStep(action), maxvalueprof, maxvalueprof);
|
|
|
|
ChatHandler(player->GetSession()).PSendSysMessage("Thanks for supporting the project!");
|
|
player->DestroyItemCount(item->GetEntry(), 1, true); //Item is destroyed on useage.
|
|
|
|
std::ostringstream infoSkill;
|
|
infoSkill << "Skill: " << uint32(action) << " Value: " << uint32(maxvalueprof);
|
|
sServiceMgr->ExecutedServices(player->GetGUID(), SERVICE_TYPE_BOOST_PROFESSION, std::string("Boosted name: ") + player->GetName(), infoSkill.str());
|
|
player->CLOSE_GOSSIP_MENU();
|
|
}
|
|
else if(confirm == 2)
|
|
{
|
|
player->SetSkill(action, player->GetSkillStep(action), 600, 600);
|
|
|
|
ChatHandler(player->GetSession()).PSendSysMessage("Thanks for supporting the project!");
|
|
player->DestroyItemCount(item->GetEntry(), 1, true); //Item is destroyed on useage.
|
|
|
|
std::ostringstream infoSkill;
|
|
infoSkill << "Skill: " << uint32(action) << " Value: 600";
|
|
sServiceMgr->ExecutedServices(player->GetGUID(), SERVICE_TYPE_BOOST_PROFESSION, std::string("Boosted name: ") + player->GetName(), infoSkill.str());
|
|
player->CLOSE_GOSSIP_MENU();
|
|
}
|
|
else
|
|
{
|
|
ChatHandler(player->GetSession()).PSendSysMessage("You don't have that profession");
|
|
}
|
|
player->SaveToDB();
|
|
}
|
|
};
|
|
|
|
class Boost_Profession_Small : public ItemScript
|
|
{
|
|
public:
|
|
Boost_Profession_Small() : ItemScript("Boost_Profession_Small") {}
|
|
|
|
bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
player->SaveToDB();
|
|
|
|
if(player->HasSkill(FIRST_AID))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 0, GOSSIP_SENDER_MAIN, FIRST_AID);
|
|
if(player->HasSkill(BLACKSMITHING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 1, GOSSIP_SENDER_MAIN, BLACKSMITHING);
|
|
if(player->HasSkill(LEATHERWORKING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 2, GOSSIP_SENDER_MAIN, LEATHERWORKING);
|
|
if(player->HasSkill(ALCHEMY))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 3, GOSSIP_SENDER_MAIN, ALCHEMY);
|
|
if(player->HasSkill(HERBALISM))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 4, GOSSIP_SENDER_MAIN, HERBALISM);
|
|
if(player->HasSkill(COOKING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 5, GOSSIP_SENDER_MAIN, COOKING);
|
|
if(player->HasSkill(MINING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 6, GOSSIP_SENDER_MAIN, MINING);
|
|
if(player->HasSkill(TAILORING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 7, GOSSIP_SENDER_MAIN, TAILORING);
|
|
if(player->HasSkill(ENGINEERING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 8, GOSSIP_SENDER_MAIN, ENGINEERING);
|
|
if(player->HasSkill(ENCHANTING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 9, GOSSIP_SENDER_MAIN, ENCHANTING);
|
|
if(player->HasSkill(FISHING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 10, GOSSIP_SENDER_MAIN, FISHING);
|
|
if(player->HasSkill(SKINNING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 11, GOSSIP_SENDER_MAIN, SKINNING);
|
|
if(player->HasSkill(JEWELCRAFTING))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 12, GOSSIP_SENDER_MAIN, JEWELCRAFTING);
|
|
if(player->HasSkill(INSCRIPTION))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 13, GOSSIP_SENDER_MAIN, INSCRIPTION);
|
|
if(player->HasSkill(ARCHAEOLOGY))
|
|
player->ADD_GOSSIP_ITEM_DB(51002, 14, GOSSIP_SENDER_MAIN, ARCHAEOLOGY);
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Bye", GOSSIP_SENDER_MAIN, 1);
|
|
|
|
player->SEND_GOSSIP_MENU(20011, item->GetGUID());
|
|
return true;
|
|
}
|
|
|
|
void OnGossipSelect(Player* player, Item* item, uint32 sender, uint32 action)
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
|
|
if(player->HasSkill(action))
|
|
{
|
|
int32 maxvalueprof = player->GetMaxSkillValue(action);
|
|
|
|
if(player->HasSkill(action) && player->GetSkillValue(action) < maxvalueprof)
|
|
player->SetSkill(action, player->GetSkillStep(action), maxvalueprof, maxvalueprof);
|
|
|
|
ChatHandler(player->GetSession()).PSendSysMessage("Thanks for supporting the project!");
|
|
player->DestroyItemCount(item->GetEntry(), 1, true); //Item is destroyed on useage.
|
|
|
|
std::ostringstream infoSkill;
|
|
infoSkill << "Skill: " << uint32(action) << " Value: " << uint32(maxvalueprof);
|
|
sServiceMgr->ExecutedServices(player->GetGUID(), SERVICE_TYPE_BOOST_PROFESSION_SMALL, std::string("Boosted name: ") + player->GetName(), infoSkill.str());
|
|
player->SaveToDB();
|
|
}
|
|
else
|
|
{
|
|
ChatHandler(player->GetSession()).PSendSysMessage("You don't have that profession");
|
|
}
|
|
|
|
player->CLOSE_GOSSIP_MENU();
|
|
}
|
|
};
|
|
|
|
void AddSC_Boost_Profession()
|
|
{
|
|
new Boost_Profession();
|
|
new Boost_Profession_Small();
|
|
} |