T端整合的商业技能训练师C++脚本


这个是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

时间: 2024-08-25 13:46:27

T端整合的商业技能训练师C++脚本的相关文章

T端大灾变版本传送大师(NPC 脚本)

#include "ScriptPCH.h"  class npc_teleport : public CreatureScript{    public:        npc_teleport() : CreatureScript("npc_teleport") { }                 bool OnGossipHello(Player *player, Creature *_creature)                {         

T端超级简单的单个宝石传送脚本

这个是一套简单的传送宝石的脚本,只实现简单的传送.主要是方便初学者参考使用! 1.在魔兽世界私服单机中,可能会用到使用某单独一个物品就实现传送 2.传送地址在脚本中控制,如果你需要修改传送位置,你需要修改一下代码中的 player->TeleportTo(0, 1234.00f, 4321.00f, 1242.00f, 4323.00f); // 这里就是你想要传送的位置 3.传送坐标,这个你需要自己到WOW单机游戏中去定位 定位坐标的方法:.gps 命令 4.这个脚本适用于TrinityCor

API开发第五篇:服务端整合支付宝快捷移动支付接口

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>在开发中需要使用支付宝的快捷移动支付接口,通过文档知道,当完成客户端请求完成后,支付宝服务器会异步通知客户端的服务器.这里的关键是提供给支付宝的这个用于异步通知的con

androidpn服务端整合mina出现异常

spring 的版本不一样标签使用的方式也稍有差距 这一次,为了在服务端加入Androidpn的东西,进行了不同的版本的整合 spring配置方式的改变,bug就会出现,整合就不顺利了 这一次就说一下mina在spring的配置问题 <!-- =============================================================== --> <!-- MINA --> <!-- ===============================

【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter测试SOAP协议性能测试脚本开发

目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 [阐述]:首先应该遇到了一个共同的问题,JMeter3.2之后就没有WebService(SOAP) Request,后来经过查询网上资料得知其实可以用HTTP请求来操作,结果是一样的. 具体资料大家可以参照原文<Jmeter测试SOAP协议(Jmeter 3.3)>感谢作者:stone9159 [步骤]: 一.创建WebService接口模拟

Appium移动端自动化测试--使用IDE编辑并强化脚本

目录 Appium客户端安装 安装Python IDE-Pycharm Java IDE 安装 使用隐式等待让用例更稳定 隐式等待 启动Appium非GUI模式:Appium Server 安装Python IDE-Pycharm和Java IDE编辑脚本,增加脚本的稳定性. @ Appium客户端安装 上一节录制完成测试用例脚本,每种语言都有对应的客户端,如下; 接下来准备安装客户端. Ruby: https://github.com/appium/ruby_lib Python: https

传奇服务端在线领取战宠助手宝宝的脚本

┏━━━━━━━━━━━━━━━━━━━━━━━┓\┃<虎卫宝宝/@mob0001>-----物理防御强,攻击高----需要元宝3个┃\┣━━━━━━━━━━━━━━━━━━━━━━━┫\┃<鹰卫宝宝/@mob0003>-----魔法防御强,攻击高----需要元宝3个┃\┣━━━━━━━━━━━━━━━━━━━━━━━┫\┃<木 乃 伊/@mob2>----防御性,攻击能力高----需要元宝20个┃\┗━━━━━━━━━━━━━━━━━━━━━━━┛\ \ [@mob0

Spring Security 整合Cas

1.1     配置登录认证 加入了spring-security-cas-xxx.jar到Spring Security应用的classpath后,我们便可以开始配置我们的Spring Security应用使用Cas进行单点登录了. 1.1.1配置AuthenticationEntryPoint 首先需要做的是将应用的登录认证入口改为使用CasAuthenticationEntryPoint.所以首先我们需要配置一个CasAuthenticationEntryPoint对应的bean,然后指定

hadoop编程小技巧(1)---map端聚合

测试hadoop版本:2.4 Map端聚合的应用场景:当我们只关心所有数据中的部分数据时,并且数据可以放入内存中. 使用的好处:可以大大减小网络数据的传输量,提高效率: 一般编程思路:在Mapper的map函数中读入所有数据,然后添加到一个List(队列)中,然后在cleanup函数中对list进行处理,输出我们关系的少量数据. 实例: 在map函数中使用空格分隔每行数据,然后把每个单词添加到一个堆栈中,在cleanup函数中输出堆栈中单词次数比较多的单词以及次数: package fz.inm