这个是T端的,作用是商业技能训练了。。什么酿酒 锻造 皮革制作 工程(学 附魔 珠宝 铭文 烹饪 急救 这些商业技能让你在一个NPC就学完了。。
下面是代码。。适用于Trinity Core 335怀旧魔兽版本哈
// Fixed Error & Updated by : Dawnbringers
#pragma once
#include "ScriptPCH.h"
#include "Language.h"class skill_npc : public CreatureScript
{
public:skill_npc() : CreatureScript("skill_npc") {}
struct skill_npcAI : public ScriptedAI
{
skill_npcAI(Creature *c) : ScriptedAI(c)
{
}};
CreatureAI* GetAI(Creature* _creature) const
{
return new skill_npcAI(_creature);
}void CreatureWhisperBasedOnBool(const char *text, Creature *_creature, Player *pPlayer, bool value)
{
if (value)
_creature->MonsterWhisper(text, pPlayer->GetGUID());
}uint32 PlayerMaxLevel() const
{
return sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
}void MainMenu(Player *pPlayer, Creature* _creature)
{
pPlayer->ADD_GOSSIP_ITEM(9, "[Professions] ->", GOSSIP_SENDER_MAIN, 196);}
bool PlayerHasItemOrSpell(const Player *plr, uint32 itemId, uint32 spellId) const
{
return plr->HasItemCount(itemId, 1, true) || plr->HasSpell(spellId);
}bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
MainMenu(pPlayer, pCreature);return true;
}bool PlayerAlreadyHasTwoProfessions(const Player *pPlayer) const
{
uint32 skillCount = 0;if (pPlayer->HasSkill(SKILL_MINING))
skillCount++;
if (pPlayer->HasSkill(SKILL_SKINNING))
skillCount++;
if (pPlayer->HasSkill(SKILL_HERBALISM))
skillCount++;if (skillCount >= 2)
return true;for (uint32 i = 1; i < sSkillLineStore.GetNumRows(); ++i)
{
SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(i);
if (!SkillInfo)
continue;if (SkillInfo->categoryId == SKILL_CATEGORY_SECONDARY)
continue;if ((SkillInfo->categoryId != SKILL_CATEGORY_PROFESSION) || !SkillInfo->canLink)
continue;const uint32 skillID = SkillInfo->id;
if (pPlayer->HasSkill(skillID))
skillCount++;if (skillCount >= 2)
return true;
}return false;
}bool LearnAllRecipesInProfession(Player *pPlayer, SkillType skill)
{
ChatHandler handler(pPlayer->GetSession());
char* skill_name;SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(skill);
skill_name = SkillInfo->name[handler.GetSessionDbcLocale()];if (!SkillInfo)
{
sLog->outError(LOG_FILTER_PLAYER,"Teleport NPC: received non-valid skill ID (LearnAllRecipesInProfession)");
return false;
}LearnSkillRecipesHelper(pPlayer, SkillInfo->id);
uint16 maxLevel = pPlayer->GetPureMaxSkillValue(SkillInfo->id);
pPlayer->SetSkill(SkillInfo->id, pPlayer->GetSkillStep(SkillInfo->id), maxLevel, maxLevel);
handler.PSendSysMessage(LANG_COMMAND_LEARN_ALL_RECIPES, skill_name);return true;
}void LearnSkillRecipesHelper(Player *player, uint32 skill_id)
{
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 != skill_id)
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;player->learnSpell(skillLine->spellId, false);
}
}bool IsSecondarySkill(SkillType skill) const
{
return skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
}void CompleteLearnProfession(Player *pPlayer, Creature *pCreature, SkillType skill)
{
if (PlayerAlreadyHasTwoProfessions(pPlayer) && !IsSecondarySkill(skill))
pCreature->MonsterWhisper("You already know two professions!", pPlayer->GetGUID());
else
{
if (!LearnAllRecipesInProfession(pPlayer, skill))
pCreature->MonsterWhisper("Internal error occured!", pPlayer->GetGUID());
}
}bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
{
pPlayer->PlayerTalkClass->ClearMenus();if (uiSender == GOSSIP_SENDER_MAIN)
{switch (uiAction)
{
case 196:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Alchemy", GOSSIP_SENDER_MAIN, 1); //酿酒
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Blacksmithing", GOSSIP_SENDER_MAIN, 2);//锻造
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Leatherworking", GOSSIP_SENDER_MAIN, 3); //皮革制作
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Tailoring", GOSSIP_SENDER_MAIN, 4); // 裁缝
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Engineering", GOSSIP_SENDER_MAIN, 5); //工程(学
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Enchanting", GOSSIP_SENDER_MAIN, 6); //附魔
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Jewelcrafting", GOSSIP_SENDER_MAIN, 7); //珠宝
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Inscription", GOSSIP_SENDER_MAIN, 8); //铭文
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Cooking", GOSSIP_SENDER_MAIN, 9); //烹饪
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "First Aid", GOSSIP_SENDER_MAIN, 10); //急救pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
break;
case 1:
CompleteLearnProfession(pPlayer, _creature, SKILL_ALCHEMY);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 2:
CompleteLearnProfession(pPlayer, _creature, SKILL_BLACKSMITHING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 3:
CompleteLearnProfession(pPlayer, _creature, SKILL_LEATHERWORKING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 4:
CompleteLearnProfession(pPlayer, _creature, SKILL_TAILORING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 5:
CompleteLearnProfession(pPlayer, _creature, SKILL_ENGINEERING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 6:
CompleteLearnProfession(pPlayer, _creature, SKILL_ENCHANTING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 7:
CompleteLearnProfession(pPlayer, _creature, SKILL_JEWELCRAFTING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 8:
CompleteLearnProfession(pPlayer, _creature, SKILL_INSCRIPTION);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 9:
CompleteLearnProfession(pPlayer, _creature, SKILL_COOKING);pPlayer->CLOSE_GOSSIP_MENU();
break;
case 10:
CompleteLearnProfession(pPlayer, _creature, SKILL_FIRST_AID);pPlayer->CLOSE_GOSSIP_MENU();
break;
}}
return true;
}};
void AddSC_skill_npc()
{
new skill_npc();
}
T端整合的商业技能训练师C++脚本,布布扣,bubuko.com