藏宝游传奇

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 155|回复: 0

[游戏修改] 最新的Trinitiy 3.3.5端的整合的商业技能训练师C++脚本

[复制链接]
  • TA的每日心情
    开心
    2020-12-29 20:57
  • 签到天数: 3 天

    [LV.2]圆转纯熟

    4332

    主题

    4336

    帖子

    26万

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    261210
    发表于 2020-2-29 18:20:11 | 显示全部楼层 |阅读模式
    1. //by ??
    2. // Fixed Error & Updated by : Dawnbringers
    3. #pragma once
    4. #include "ScriptPCH.h"
    5. #include "Language.h"

    6. class skill_npc : public CreatureScript

    7.     {
    8. public:

    9. skill_npc() : CreatureScript("skill_npc") {}

    10. struct skill_npcAI : public ScriptedAI
    11.     {
    12.         skill_npcAI(Creature *c) : ScriptedAI(c)
    13.         {
    14.         }


    15.     };

    16.     CreatureAI* GetAI(Creature* _creature) const
    17.     {
    18.         return new skill_npcAI(_creature);
    19.     }

    20.     void CreatureWhisperBasedOnBool(const char *text, Creature *_creature, Player *pPlayer, bool value)
    21.     {
    22.         if (value)
    23.             _creature->MonsterWhisper(text, pPlayer->GetGUID());
    24.     }

    25.     uint32 PlayerMaxLevel() const
    26.     {
    27.         return sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
    28.     }


    29. void MainMenu(Player *pPlayer, Creature* _creature)
    30. {
    31.         pPlayer->ADD_GOSSIP_ITEM(9, "[Professions] ->", GOSSIP_SENDER_MAIN, 196);
    32.       
    33. }

    34.     bool PlayerHasItemOrSpell(const Player *plr, uint32 itemId, uint32 spellId) const
    35.     {
    36.         return plr->HasItemCount(itemId, 1, true) || plr->HasSpell(spellId);
    37.     }

    38.     bool OnGossipHello(Player* pPlayer, Creature* pCreature)
    39.     {
    40.         MainMenu(pPlayer, pCreature);

    41.         return true;
    42.     }

    43. bool PlayerAlreadyHasTwoProfessions(const Player *pPlayer) const
    44.     {
    45.         uint32 skillCount = 0;

    46.         if (pPlayer->HasSkill(SKILL_MINING))
    47.             skillCount++;
    48.         if (pPlayer->HasSkill(SKILL_SKINNING))
    49.             skillCount++;
    50.         if (pPlayer->HasSkill(SKILL_HERBALISM))
    51.             skillCount++;

    52.         if (skillCount >= 2)
    53.             return true;

    54.         for (uint32 i = 1; i < sSkillLineStore.GetNumRows(); ++i)
    55.         {
    56.             SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(i);
    57.             if (!SkillInfo)
    58.                 continue;

    59.             if (SkillInfo->categoryId == SKILL_CATEGORY_SECONDARY)
    60.                 continue;

    61.             if ((SkillInfo->categoryId != SKILL_CATEGORY_PROFESSION) || !SkillInfo->canLink)
    62.                 continue;

    63.             const uint32 skillID = SkillInfo->id;
    64.             if (pPlayer->HasSkill(skillID))
    65.                 skillCount++;

    66.             if (skillCount >= 2)
    67.                 return true;
    68.         }

    69.         return false;
    70.     }

    71.     bool LearnAllRecipesInProfession(Player *pPlayer, SkillType skill)
    72.     {
    73.         ChatHandler handler(pPlayer->GetSession());
    74.         char* skill_name;

    75.         SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(skill);
    76.         skill_name = SkillInfo->name[handler.GetSessionDbcLocale()];

    77.         if (!SkillInfo)
    78.         {
    79.             sLog->outError(LOG_FILTER_PLAYER,"Teleport NPC: received non-valid skill ID (LearnAllRecipesInProfession)");
    80.             return false;
    81.         }

    82.         LearnSkillRecipesHelper(pPlayer, SkillInfo->id);

    83.         uint16 maxLevel = pPlayer->GetPureMaxSkillValue(SkillInfo->id);
    84.         pPlayer->SetSkill(SkillInfo->id, pPlayer->GetSkillStep(SkillInfo->id), maxLevel, maxLevel);
    85.         handler.PSendSysMessage(LANG_COMMAND_LEARN_ALL_RECIPES, skill_name);

    86.         return true;
    87.     }

    88.     void LearnSkillRecipesHelper(Player *player, uint32 skill_id)
    89.     {
    90.         uint32 classmask = player->getClassMask();

    91.         for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
    92.         {
    93.             SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(j);
    94.             if (!skillLine)
    95.                 continue;

    96.             // wrong skill
    97.             if (skillLine->skillId != skill_id)
    98.                 continue;

    99.             // not high rank
    100.             if (skillLine->forward_spellid)
    101.                 continue;

    102.             // skip racial skills
    103.             if (skillLine->racemask != 0)
    104.                 continue;

    105.             // skip wrong class skills
    106.             if (skillLine->classmask && (skillLine->classmask & classmask) == 0)
    107.                 continue;

    108.         
    109.             player->learnSpell(skillLine->spellId, false);
    110.         }
    111.     }

    112.     bool IsSecondarySkill(SkillType skill) const
    113.     {
    114.         return skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
    115.     }

    116.     void CompleteLearnProfession(Player *pPlayer, Creature *pCreature, SkillType skill)
    117.     {
    118.         if (PlayerAlreadyHasTwoProfessions(pPlayer) && !IsSecondarySkill(skill))
    119.             pCreature->MonsterWhisper("You already know two professions!", pPlayer->GetGUID());
    120.         else
    121.         {
    122.             if (!LearnAllRecipesInProfession(pPlayer, skill))
    123.                 pCreature->MonsterWhisper("Internal error occured!", pPlayer->GetGUID());
    124.         }
    125.     }

    126.      bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
    127.      {
    128.         pPlayer->PlayerTalkClass->ClearMenus();
    129.         
    130.         if (uiSender == GOSSIP_SENDER_MAIN)
    131.         {
    132.                
    133.         switch (uiAction)
    134.         {
    135.                 case 196:
    136.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Alchemy", GOSSIP_SENDER_MAIN, 1);
    137.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Blacksmithing", GOSSIP_SENDER_MAIN, 2);
    138.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Leatherworking", GOSSIP_SENDER_MAIN, 3);
    139.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Tailoring", GOSSIP_SENDER_MAIN, 4);
    140.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Engineering", GOSSIP_SENDER_MAIN, 5);
    141.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Enchanting", GOSSIP_SENDER_MAIN, 6);
    142.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Jewelcrafting", GOSSIP_SENDER_MAIN, 7);
    143.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Inscription", GOSSIP_SENDER_MAIN, 8);
    144.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Cooking", GOSSIP_SENDER_MAIN, 9);
    145.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "First Aid", GOSSIP_SENDER_MAIN, 10);

    146.                 pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
    147.                 break;
    148.             case 1:
    149.                 CompleteLearnProfession(pPlayer, _creature, SKILL_ALCHEMY);

    150.                 pPlayer->CLOSE_GOSSIP_MENU();
    151.                 break;
    152.             case 2:
    153.                 CompleteLearnProfession(pPlayer, _creature, SKILL_BLACKSMITHING);

    154.                 pPlayer->CLOSE_GOSSIP_MENU();
    155.                 break;
    156.             case 3:
    157.                 CompleteLearnProfession(pPlayer, _creature, SKILL_LEATHERWORKING);

    158.                 pPlayer->CLOSE_GOSSIP_MENU();
    159.                 break;
    160.             case 4:
    161.                 CompleteLearnProfession(pPlayer, _creature, SKILL_TAILORING);

    162.                 pPlayer->CLOSE_GOSSIP_MENU();
    163.                 break;
    164.             case 5:
    165.                 CompleteLearnProfession(pPlayer, _creature, SKILL_ENGINEERING);

    166.                 pPlayer->CLOSE_GOSSIP_MENU();
    167.                 break;
    168.             case 6:
    169.                 CompleteLearnProfession(pPlayer, _creature, SKILL_ENCHANTING);

    170.                 pPlayer->CLOSE_GOSSIP_MENU();
    171.                 break;
    172.             case 7:
    173.                 CompleteLearnProfession(pPlayer, _creature, SKILL_JEWELCRAFTING);

    174.                 pPlayer->CLOSE_GOSSIP_MENU();
    175.                 break;
    176.             case 8:
    177.                 CompleteLearnProfession(pPlayer, _creature, SKILL_INSCRIPTION);

    178.                 pPlayer->CLOSE_GOSSIP_MENU();
    179.                 break;
    180.             case 9:
    181.                 CompleteLearnProfession(pPlayer, _creature, SKILL_COOKING);

    182.                 pPlayer->CLOSE_GOSSIP_MENU();
    183.                 break;
    184.             case 10:
    185.                 CompleteLearnProfession(pPlayer, _creature, SKILL_FIRST_AID);

    186.                 pPlayer->CLOSE_GOSSIP_MENU();
    187.                 break;
    188.         }

    189.         
    190.     }
    191.      return true;
    192.      }

    193. };

    194. void AddSC_skill_npc()
    195. {
    196.     new skill_npc();
    197. }
    复制代码
    游客,如果您要查看本帖隐藏内容请回复

    回复

    使用道具 举报

    Archiver|手机版|小黑屋|藏宝游

    GMT+8, 2021-8-1 19:42 , Processed in 0.051335 second(s), 26 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表