Advertisement
Guest User

Script Professions + ICONS

a guest
Apr 11th, 2014
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.35 KB | None | 0 0
  1.     #include "ScriptPCH.h"
  2.     #include "Language.h"
  3.      
  4.     class Professions_NPC : public CreatureScript
  5.     {
  6.             public:
  7.                     Professions_NPC () : CreatureScript("Professions_NPC") {}
  8.                    
  9.                     void CreatureWhisperBasedOnBool(const char *text, Creature *_creature, Player *pPlayer, bool value)
  10.                     {
  11.                             if (value)
  12.                                     _creature->MonsterWhisper(text, pPlayer);
  13.                     }
  14.      
  15.                     uint32 PlayerMaxLevel() const
  16.                     {
  17.                             return sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
  18.                     }
  19.      
  20.                     bool PlayerHasItemOrSpell(const Player *plr, uint32 itemId, uint32 spellId) const
  21.                     {
  22.                             return plr->HasItemCount(itemId, 1, true) || plr->HasSpell(spellId);
  23.                     }
  24.      
  25.                     bool OnGossipHello(Player *pPlayer, Creature* _creature)
  26.                     {
  27.                         if(pPlayer->getLevel()==80)
  28.                             {
  29.                                 pPlayer->ADD_GOSSIP_ITEM(9, "TInterface\\icons\\INV_Misc_Book_17:25|t [Professions] ->", GOSSIP_SENDER_MAIN, 196);
  30.                                 pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
  31.                                 return true;
  32.                             }
  33.                         return true;
  34.                     }
  35.                    
  36.                     bool PlayerAlreadyHasTwoProfessions(const Player *pPlayer) const
  37.                     {
  38.                             uint32 skillCount = 0;
  39.      
  40.                             if (pPlayer->HasSkill(SKILL_MINING))
  41.                                     skillCount++;
  42.                             if (pPlayer->HasSkill(SKILL_SKINNING))
  43.                                     skillCount++;
  44.                             if (pPlayer->HasSkill(SKILL_HERBALISM))
  45.                                     skillCount++;
  46.      
  47.                             if (skillCount >= 2)
  48.                                     return true;
  49.      
  50.                             for (uint32 i = 1; i < sSkillLineStore.GetNumRows(); ++i)
  51.                             {
  52.                                     SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(i);
  53.                                     if (!SkillInfo)
  54.                                             continue;
  55.      
  56.                                     if (SkillInfo->categoryId == SKILL_CATEGORY_SECONDARY)
  57.                                             continue;
  58.      
  59.                                     if ((SkillInfo->categoryId != SKILL_CATEGORY_PROFESSION) || !SkillInfo->canLink)
  60.                                             continue;
  61.      
  62.                                     const uint32 skillID = SkillInfo->id;
  63.                                     if (pPlayer->HasSkill(skillID))
  64.                                             skillCount++;
  65.      
  66.                                     if (skillCount >= 2)
  67.                                             return true;
  68.                             }
  69.                             return false;
  70.                     }
  71.      
  72.                     bool LearnAllRecipesInProfession(Player *pPlayer, SkillType skill)
  73.                     {
  74.                             ChatHandler handler(pPlayer->GetSession());
  75.                             char* skill_name;
  76.      
  77.                             SkillLineEntry const *SkillInfo = sSkillLineStore.LookupEntry(skill);
  78.                                                     skill_name = SkillInfo->name[handler.GetSessionDbcLocale()];
  79.      
  80.                             if (!SkillInfo)
  81.                             {
  82.                             TC_LOG_ERROR("server.loading", "Profession NPC: received non-valid skill ID (LearnAllRecipesInProfession)");
  83.                             }      
  84.      
  85.                             LearnSkillRecipesHelper(pPlayer, SkillInfo->id);
  86.      
  87.                             pPlayer->SetSkill(SkillInfo->id, pPlayer->GetSkillStep(SkillInfo->id), 450, 450);
  88.                             handler.PSendSysMessage(LANG_COMMAND_LEARN_ALL_RECIPES, skill_name);
  89.                    
  90.                             return true;
  91.                     }
  92.            
  93.                     void LearnSkillRecipesHelper(Player *player, uint32 skill_id)
  94.                     {
  95.                             uint32 classmask = player->getClassMask();
  96.      
  97.                             for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
  98.                             {
  99.                                     SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(j);
  100.                                     if (!skillLine)
  101.                                             continue;
  102.      
  103.                                     // wrong skill
  104.                                     if (skillLine->skillId != skill_id)
  105.                                             continue;
  106.      
  107.                                     // not high rank
  108.                                     if (skillLine->forward_spellid)
  109.                                             continue;
  110.      
  111.                                     // skip racial skills
  112.                                     if (skillLine->racemask != 0)
  113.                                             continue;
  114.      
  115.                                     // skip wrong class skills
  116.                                     if (skillLine->classmask && (skillLine->classmask & classmask) == 0)
  117.                                             continue;
  118.      
  119.                                     SpellInfo const * spellInfo = sSpellMgr->GetSpellInfo(skillLine->spellId);
  120.                                     if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, player, false))
  121.                                             continue;
  122.                                    
  123.                                     player->learnSpell(skillLine->spellId, false);
  124.                             }
  125.                     }
  126.      
  127.                     bool IsSecondarySkill(SkillType skill) const
  128.                     {
  129.                             return skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
  130.                     }
  131.      
  132.                     void CompleteLearnProfession(Player *pPlayer, Creature *pCreature, SkillType skill)
  133.                     {
  134.                             if (PlayerAlreadyHasTwoProfessions(pPlayer) && !IsSecondarySkill(skill))
  135.                                     pCreature->MonsterWhisper("You already know two professions!", pPlayer);
  136.                             else
  137.                             {
  138.                                     if (!LearnAllRecipesInProfession(pPlayer, skill))
  139.                                             pCreature->MonsterWhisper("Internal error occured!", pPlayer);
  140.                             }
  141.                     }
  142.            
  143.                     bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
  144.                     {
  145.                             pPlayer->PlayerTalkClass->ClearMenus();
  146.            
  147.                             if (uiSender == GOSSIP_SENDER_MAIN)
  148.                             {
  149.                    
  150.                                     switch (uiAction)
  151.                                     {
  152.                                             case 196:
  153.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\trade_alchemy:25|t Alchemy.", GOSSIP_SENDER_MAIN, 1);
  154.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Ingot_05:25|t Blacksmithing.", GOSSIP_SENDER_MAIN, 2);
  155.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Misc_LeatherScrap_02:25|t Leatherworking.", GOSSIP_SENDER_MAIN, 3);
  156.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Fabric_Felcloth_Ebon:25|t Tailoring.", GOSSIP_SENDER_MAIN, 4);
  157.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\inv_misc_wrench_01:25|t Engineering.", GOSSIP_SENDER_MAIN, 5);
  158.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\trade_engraving:25|t Enchanting.", GOSSIP_SENDER_MAIN, 6);
  159.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\inv_misc_gem_01:25|t Jewelcrafting.", GOSSIP_SENDER_MAIN, 7);
  160.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Scroll_08:25|t Inscription.", GOSSIP_SENDER_MAIN, 8);
  161.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Misc_Herb_07:25|t Herbalism.", GOSSIP_SENDER_MAIN, 9);
  162.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\inv_misc_pelt_wolf_01:25|t Skinning.", GOSSIP_SENDER_MAIN, 10);
  163.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\trade_mining:25|t Mining.", GOSSIP_SENDER_MAIN, 11);
  164.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Misc_Food_115_CondorSoup:25|t Cooking.", GOSSIP_SENDER_MAIN, 12);
  165.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, "|TInterface\\icons\\INV_Misc_Bandage_08:25|t First Aid.", GOSSIP_SENDER_MAIN, 13);
  166.                                                     pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "|TInterface/ICONS/Thrown_1H_Harpoon_D_01Blue:25|t Nevermind!", GOSSIP_SENDER_MAIN, 100);
  167.                                                     pPlayer->PlayerTalkClass->SendGossipMenu(1, _creature->GetGUID());
  168.                                                     break;
  169.                                             case 1:
  170.                                                     if(pPlayer->HasSkill(SKILL_ALCHEMY))
  171.                                                     {
  172.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  173.                                                             break;
  174.                                                     }
  175.      
  176.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_ALCHEMY);
  177.      
  178.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  179.                                                     break;
  180.                                             case 2:
  181.                                                     if(pPlayer->HasSkill(SKILL_BLACKSMITHING))
  182.                                                     {
  183.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  184.                                                             break;
  185.                                                     }
  186.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_BLACKSMITHING);
  187.      
  188.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  189.                                                     break;
  190.                                             case 3:
  191.                                                     if(pPlayer->HasSkill(SKILL_LEATHERWORKING))
  192.                                                     {
  193.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  194.                                                             break;
  195.                                                     }
  196.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_LEATHERWORKING);
  197.      
  198.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  199.                                                     break;
  200.                                             case 4:
  201.                                                     if(pPlayer->HasSkill(SKILL_TAILORING))
  202.                                                     {
  203.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  204.                                                             break;
  205.                                                     }
  206.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_TAILORING);
  207.      
  208.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  209.                                                     break;
  210.                                             case 5:
  211.                                                     if(pPlayer->HasSkill(SKILL_ENGINEERING))
  212.                                                     {
  213.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  214.                                                             break;
  215.                                                     }
  216.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_ENGINEERING);
  217.      
  218.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  219.                                                     break;
  220.                                             case 6:
  221.                                                     if(pPlayer->HasSkill(SKILL_ENCHANTING))
  222.                                                     {
  223.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  224.                                                             break;
  225.                                                     }
  226.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_ENCHANTING);
  227.      
  228.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  229.                                                     break;
  230.                                             case 7:
  231.                                                     if(pPlayer->HasSkill(SKILL_JEWELCRAFTING))
  232.                                                     {
  233.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  234.                                                             break;
  235.                                                     }
  236.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_JEWELCRAFTING);
  237.      
  238.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  239.                                                     break;
  240.                                             case 8:
  241.                                                     if(pPlayer->HasSkill(SKILL_INSCRIPTION))
  242.                                                     {
  243.                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  244.                                                             break;
  245.                                                     }
  246.                                                     CompleteLearnProfession(pPlayer, _creature, SKILL_INSCRIPTION);
  247.      
  248.                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  249.                                                     break;
  250.                                                                                     case 9:
  251.                                                                                             if(pPlayer->HasSkill(SKILL_HERBALISM))
  252.                                                                                             {
  253.                                                                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  254.                                                                                                     break;
  255.                                                                                             }
  256.                                                                                            
  257.                                                                                             CompleteLearnProfession(pPlayer, _creature, SKILL_HERBALISM);
  258.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  259.                                                                                             break;
  260.                                                                                     case 10:
  261.                                                                                             if(pPlayer->HasSkill(SKILL_SKINNING))
  262.                                                                                             {
  263.                                                                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  264.                                                                                                     break;
  265.                                                                                             }
  266.                                                                                            
  267.                                                                                             CompleteLearnProfession(pPlayer, _creature, SKILL_SKINNING);
  268.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  269.                                                                                             break;
  270.                                                                                     case 11:
  271.                                                                                             if(pPlayer->HasSkill(SKILL_MINING))
  272.                                                                                             {
  273.                                                                                                     pPlayer->PlayerTalkClass->SendCloseGossip();
  274.                                                                                                     break;
  275.                                                                                             }
  276.                                                                                            
  277.                                                                                             CompleteLearnProfession(pPlayer, _creature, SKILL_MINING);
  278.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  279.                                                                                             break;
  280.                                                                                     case 12:
  281.                                                                                         if (pPlayer->HasSkill(SKILL_COOKING))
  282.                                                                                         {
  283.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  284.                                                                                             break;
  285.                                                                                         }
  286.  
  287.                                                                                         CompleteLearnProfession(pPlayer, _creature, SKILL_COOKING);
  288.                                                                                         pPlayer->PlayerTalkClass->SendCloseGossip();
  289.                                                                                         break;
  290.                                                                                     case 13:
  291.                                                                                         if (pPlayer->HasSkill(SKILL_FIRST_AID))
  292.                                                                                         {
  293.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  294.                                                                                             break;
  295.                                                                                         }
  296.  
  297.                                                                                         CompleteLearnProfession(pPlayer, _creature, SKILL_FIRST_AID);
  298.                                                                                         pPlayer->PlayerTalkClass->SendCloseGossip();
  299.                                                                                         break;
  300.                                                                                     case 100:
  301.                                                                                             pPlayer->PlayerTalkClass->SendCloseGossip();
  302.                                                                                             break;
  303.                                     }
  304.      
  305.            
  306.                             }
  307.                             return true;
  308.                     }
  309.     };
  310.      
  311.     void AddSC_Professions_NPC()
  312.     {
  313.         new Professions_NPC();
  314.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement