吾爱尚玩资源基地

标题: 最新的Trinitiy 3.3.5端的整合的商业技能训练师C++脚本 [打印本页]

作者: admin    时间: 2016-4-26 23:36
标题: 最新的Trinitiy 3.3.5端的整合的商业技能训练师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();
}



Proffesion Giver 代码完整下载





作者: mrh1987    时间: 2016-6-7 11:59
感谢楼主分享,祝愿吾爱尚玩越来越好!
作者: moomoo    时间: 2016-9-14 08:43
感谢楼主分享,祝愿吾爱尚玩越来越好!
作者: gmaster    时间: 2016-9-21 15:03
感谢楼主分享,吾爱尚玩,可以免费下载网单!
作者: jy04352102    时间: 2017-1-1 23:59
商业技能训练师?

作者: redbit    时间: 2019-3-31 11:54
学习了~感谢大神分享

作者: hiwoosa    时间: 2019-4-10 13:45
感谢楼主分享,祝愿吾爱尚玩越来越好!

作者: 就是玩儿魔兽    时间: 2019-6-4 20:53
感谢分享,字数补丁
作者: 12333    时间: 2019-12-19 00:20
支持吾爱 支持吾爱 支持吾爱 支持吾爱 支持吾爱 支持吾爱
作者: 小星球人物    时间: 2019-12-22 16:12
好东西,收藏!
作者: fang139842    时间: 2020-3-27 00:36
16年的   不知道现在还能不能用呢
作者: 190650774    时间: 2020-4-4 22:37
多谢大佬分享
作者: crystal    时间: 2022-8-1 21:57
嘻嘻嘻嘻嘻嘻嘻嘻
作者: dizhiaolj    时间: 2022-9-10 10:37

感谢楼主分享,祝愿吾爱尚玩越来越好!
作者: lum2003    时间: 2023-2-1 11:45
那么好的代码  看看是否能用了  谢谢了
作者: woooltoo    时间: 2023-4-28 21:18

感谢楼主分享,祝愿吾爱尚玩越来越好!




欢迎光临 吾爱尚玩资源基地 (http://bbs.523play.com/) Powered by Discuz! X3.4