关灯
开启左侧

最新的Trinitiy 3.3.5端的整合的商业技能训练师C++脚本

  [复制链接]
admin实名认证 发表于 2016-4-26 23:36:56 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
这个是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();
}



Proffesion Giver 代码完整下载



游客,如果您要查看本帖隐藏内容请回复

标签:技能
 

精彩评论15

倒序浏览
woooltoo 发表于 2023-4-28 21:18:33 | 显示全部楼层
 

感谢楼主分享,祝愿吾爱尚玩越来越好!
 
lum2003 发表于 2023-2-1 11:45:01 | 显示全部楼层
 
那么好的代码  看看是否能用了  谢谢了
 
dizhiaolj 发表于 2022-9-10 10:37:16 | 显示全部楼层
 

感谢楼主分享,祝愿吾爱尚玩越来越好!
 
crystal 发表于 2022-8-1 21:57:49 | 显示全部楼层
 
嘻嘻嘻嘻嘻嘻嘻嘻
 
190650774 发表于 2020-4-4 22:37:08 | 显示全部楼层
 
多谢大佬分享
 
fang139842 发表于 2020-3-27 00:36:45 | 显示全部楼层
 
16年的   不知道现在还能不能用呢
 
小星球人物 发表于 2019-12-22 16:12:27 | 显示全部楼层
 
好东西,收藏!
 
12333 发表于 2019-12-19 00:20:54 | 显示全部楼层
 
支持吾爱 支持吾爱 支持吾爱 支持吾爱 支持吾爱 支持吾爱
 
就是玩儿魔兽 发表于 2019-6-4 20:53:37 | 显示全部楼层
 
感谢分享,字数补丁
 
hiwoosa 发表于 2019-4-10 13:45:23 | 显示全部楼层
 
感谢楼主分享,祝愿吾爱尚玩越来越好!
 
redbit 发表于 2019-3-31 11:54:18 | 显示全部楼层
 
学习了~感谢大神分享
 
jy04352102 发表于 2017-1-1 23:59:11 | 显示全部楼层
 
商业技能训练师?
 
gmaster 发表于 2016-9-21 15:03:03 | 显示全部楼层
 
感谢楼主分享,吾爱尚玩,可以免费下载网单!
 
moomoo 发表于 2016-9-14 08:43:50 | 显示全部楼层
 
感谢楼主分享,祝愿吾爱尚玩越来越好!
 
mrh1987 发表于 2016-6-7 11:59:48 | 显示全部楼层
 
感谢楼主分享,祝愿吾爱尚玩越来越好!
 
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 灌水之王

    经常在论坛发帖,且发帖量较大
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

0关注

5粉丝

3420帖子

排行榜
作者专栏

QQ交流群&&微信订阅号

QQ交流群

微信订阅号

吾爱尚玩资源基地永久域名:

Www.523Play.Com

在线管理员QQ:1589479632

邮箱:Email@523play.com

QQ交流群:558936238

Copyright   ©2015-2116  吾爱尚玩资源基地|523play.comPowered by©523Pplay.Com技术支持:吾爱尚玩资源基地