Advertisement
Callmephil

Welcome NPC (Cataclysm 4.3.4) (Full Rewrite)

Jan 21st, 2014
497
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.50 KB | None | 0 0
  1. /*
  2. //Trinitycore//
  3. Author : Philippe
  4. Welcome NPC (Cataclysm)
  5. Version : 4.3.4a
  6. V1.5 : Full Rewrite
  7. //Spell List 100 % Complete//
  8.  
  9. //Spell Glyph 100 % Complete//
  10. */
  11.  
  12. #include "ScriptPCH.h"
  13. #include "Chat.h"
  14.  
  15. enum bags_id
  16. {
  17.     bag_24 = 51809, // Unused
  18.     bag_36 = 23162, // Used
  19.  
  20.     Number_of_Bags = 4 // 1-2-3-4 Default
  21. };
  22.  
  23. enum Spell_Talent // Need More Attention (Unlearn Somes Bad Spells)
  24. {
  25.     //Priest
  26.     Priest_Spell_Penance = 47540,
  27.     Priest_Spell_Chastise = 88625,
  28.     Priest_Spell_MindFlay = 15407,
  29.     //Mage
  30.     Mage_Spell_Arcane_Barrage = 44425,  
  31.     Mage_Spell_Pyroblast = 11366,
  32.     Mage_Spell_Water_Elemental = 31687,
  33.     Mage_Spell_Freeze = 33395,
  34.     Mage_Spell_Waterbolt = 31707,
  35.     Mage_Spell_AM = 7268,
  36.     //Shaman
  37.     Shaman_Spell_Thunderstorm = 51490,
  38.     Shaman_Spell_LavaLash = 60103,
  39.     Shaman_Spell_EarthShield = 974,
  40.     //Hunter
  41.     Hunter_Spell_Intimidation = 19577,
  42.     Hunter_Spell_Aimed_Shot = 19434,
  43.     Hunter_Spell_Explosive_Shot = 53301,
  44.     //DK
  45.     DK_Spell_Heart_Strike = 55050,  
  46.     DK_Spell_Frost_Strike = 49143,
  47.     DK_Spell_Scourge_Strike = 55090,
  48.     //Rogue
  49.     Rogue_Spell_Mutilate = 1329,
  50.     Rogue_Spell_Blade_Flurry = 13877,
  51.     Rogue_Spell_ShadowStep = 36554,
  52.     //Druid
  53.     Druid_Spell_Starsurge = 78674,
  54.     Druid_Spell_Mangle = 33917,
  55.     Druid_Spell_Swiftmend = 18562,
  56.     //Warlock
  57.     Warlock_Spell_Unstable_Afflication = 30108,
  58.     Warlock_Spell_Summon_Felguard = 30146,
  59.     Warlock_Spell_Conflagrate = 17962,
  60.     //Warrior
  61.     Warrior_Spell_Mortal_Strike = 12294,
  62.     Warrior_Spell_Bloodthirst = 23881,
  63.     Warrior_Spell_Shield_Slam = 23922,
  64.     //Paladin
  65.     Paladin_Spell_Holy_Shock = 20473,
  66.     Paladin_Spell_Avenger_shield = 31935,
  67.     Paladin_Spell_Templar_Verdict = 85256,
  68. };
  69.  
  70. enum Specialisazion
  71. {
  72.     Spell_Dual_Wield = 674,
  73.     Spell_Spec_War_Plate = 87509, // War Only
  74.     Spell_Spec_Pal_Plate = 87511, // Pal Only
  75.     Spell_Spec_DK_Plate = 87510, // Dk Only
  76.     Spell_Spec_Druid_Leather = 87505, // Druid
  77.     Spell_Spec_Rogue_Leather = 87504, // rogue
  78.     Spell_Spec_Hunt_Mail = 87506, // Hunter ()
  79.     Spell_Spec_Shaman_Mail = 87507, //Shaman
  80.     Spell_netherMancy = 86091, //Warlock
  81.     Spell_Wizardry = 89744, //Mage
  82.     Spell_Mysticism = 89745, //Priest
  83.     Spell_Equip_plate = 750, // Pala-War-DK
  84.     Spell_Equip_Mail = 8737, // Hunt-Shaman
  85.     Spell_Equip_Leather = 9077 // Druid-Rogue
  86. };
  87.  
  88. enum spell_mastery
  89. {
  90.     spell_mastery_warrior = 87500,
  91.     spell_mastery_mage = 86467,
  92.     spell_mastery_druid = 87491,
  93.     spell_mastery_dk = 87492,
  94.     spell_mastery_hunter = 87493,
  95.     spell_mastery_paladin = 87494,
  96.     spell_mastery_priest = 87495,
  97.     spell_mastery_rogue = 87496,
  98.     spell_mastery_shaman = 87497,
  99.     spell_mastery_warlock = 87498
  100. };
  101.  
  102. enum mount_spell
  103. {
  104.     mount_spell_Master_Riding = 90265,
  105.     mount_spell_Journeyman_Riding = 33392,
  106.     mount_spell_Cold_Weather_Flying = 54197,
  107.     mount_spell_Flight_Master_License = 90267
  108. };
  109. #define TEXT_CUSTOM_RED1                      "|cff990033"
  110. #define TEXT_CUSTOM_RED2                      "|cff000033"
  111. #define TEXT_CUSTOM_RED3                      "|cff873600"
  112. #define TEXT_CUSTOM_RED4                      "|cff873600"
  113. #define TEXT_CUSTOM_ORANGE                      "|cff873600"
  114. #define TEXT_CUSTOM_RED                         "|cffA40000"
  115. #define TEXT_CUSTOM_BLUE                        "|cff00479E"
  116. #define TEXT_CUSTOM_GREEN                       "|cff065600"
  117. #define TEXT_CUSTOM_PURPLE                      "|cff5A005B"
  118. #define TEXT_CUSTOM_GREY                        "|cff515151"
  119. #define TEXT_CUSTOM_CYAN                        "|cff005853"
  120. #define TEXT_CUSTOM_BROWN                       "|cff584200"
  121.  
  122. //////////////////////WELCOME MENU/////////////////////////////////
  123. #define Class_Skills  "|TInterface/ICONS/Achievement_FeatsOfStrength_Gladiator_05:30:30:-15.3:0|t[LEARN MY CLASS SKILLS]"      
  124. #define Glyph_Skills  "|TInterface/ICONS/Achievement_FeatsOfStrength_Gladiator_06:30:30:-15.1:0|t[LEARN MY GLYPH  SKILLS]"
  125. #define Riding_Skills "|TInterface/ICONS/Achievement_FeatsOfStrength_Gladiator_07:30:30:-15.2:0|t[LEARN MY RIDING SKILLS]"
  126. #define Reset_Talents "|TInterface/ICONS/Achievement_FeatsOfStrength_Gladiator_08:30:30:-15.5:0|t[RESET MY TALENTS]"                              
  127. //////////////////////////////////////////////////////////////////
  128.  
  129. class npc_welcome : public CreatureScript
  130. {
  131. public:
  132.     npc_welcome() : CreatureScript("npc_welcome") { }
  133.  
  134.     bool OnGossipHello(Player* player, Creature* creature)
  135.     {
  136.         if (player->getLevel() >= 85)
  137.         {
  138.             {
  139.                 player->PrepareQuestMenu(creature->GetGUID());
  140.                 player->SendPreparedQuest(creature->GetGUID());
  141.             }
  142.             ///////////////////////////////*   -- Colors --  */
  143.             player->ADD_GOSSIP_ITEM(0, /**/TEXT_CUSTOM_GREEN/**/ Class_Skills, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
  144.             player->ADD_GOSSIP_ITEM(0, /**/TEXT_CUSTOM_ORANGE/**/Glyph_Skills, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
  145.             player->ADD_GOSSIP_ITEM(0, /**/TEXT_CUSTOM_CYAN/**/ Riding_Skills, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
  146.             player->ADD_GOSSIP_ITEM(0, /**/TEXT_CUSTOM_RED1/**/ Reset_Talents, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
  147.             player->SEND_GOSSIP_MENU(1, creature->GetGUID());
  148.         }
  149.         else
  150.         {
  151.             player->PlayerTalkClass->SendCloseGossip();
  152.             return false;
  153.         }
  154.         return true;
  155.     }
  156.  
  157.     bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
  158.     {
  159.         uint32 mount_spells[4] =
  160.         {
  161.             mount_spell_Flight_Master_License,mount_spell_Journeyman_Riding,mount_spell_Cold_Weather_Flying,mount_spell_Master_Riding
  162.         };
  163.  
  164.         uint32 Remove_T_Spell[33] =
  165.         {
  166.             Priest_Spell_Penance,Priest_Spell_Chastise,Priest_Spell_MindFlay,Mage_Spell_Arcane_Barrage,Mage_Spell_Pyroblast,Mage_Spell_Water_Elemental,Shaman_Spell_Thunderstorm,Shaman_Spell_LavaLash,Shaman_Spell_EarthShield,Hunter_Spell_Intimidation,Hunter_Spell_Aimed_Shot,Hunter_Spell_Explosive_Shot,DK_Spell_Heart_Strike,DK_Spell_Frost_Strike,DK_Spell_Scourge_Strike,Rogue_Spell_Mutilate,Rogue_Spell_Blade_Flurry,Rogue_Spell_ShadowStep,Druid_Spell_Starsurge,Druid_Spell_Mangle,Druid_Spell_Swiftmend,Warlock_Spell_Unstable_Afflication,Warlock_Spell_Summon_Felguard,Warlock_Spell_Conflagrate,Warrior_Spell_Mortal_Strike,Warrior_Spell_Bloodthirst,Warrior_Spell_Shield_Slam,Paladin_Spell_Holy_Shock,Paladin_Spell_Avenger_shield,Paladin_Spell_Templar_Verdict,
  167.             Mage_Spell_Freeze,Mage_Spell_Waterbolt,Mage_Spell_AM,
  168.         };
  169.  
  170.         player->PlayerTalkClass->ClearMenus();
  171.         {
  172.             switch(action)
  173.             {
  174.             case GOSSIP_ACTION_INFO_DEF+1:
  175.                 {
  176.                     ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(player->GetSession()->GetPlayer()->getClass());
  177.                     if (!classEntry)
  178.                         return true;
  179.                     uint32 family = classEntry->spellfamily;
  180.                     for (uint32 i = 0; i < sSkillLineAbilityStore.GetNumRows(); ++i)
  181.                     {
  182.                         SkillLineAbilityEntry const* entry = sSkillLineAbilityStore.LookupEntry(i);
  183.                         if (!entry)
  184.                             continue;
  185.                         SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(entry->spellId);
  186.                         if (!spellInfo)
  187.                             continue;
  188.                         // skip server-side/triggered spells
  189.                         if (spellInfo->SpellLevel == 0)
  190.                             continue;
  191.                         // skip wrong class/race skills
  192.                         if (!player->GetSession()->GetPlayer()->IsSpellFitByClassAndRace(spellInfo->Id))
  193.                             continue;
  194.                         // skip other spell families
  195.                         if (spellInfo->SpellFamilyName != family)
  196.                             continue;
  197.                         // skip spells with first rank learned as talent (and all talents then also)
  198.                         if (GetTalentSpellCost(spellInfo->GetFirstRankSpell()->Id) > 0)
  199.                             continue;
  200.                         // skip broken spells
  201.                         if (!SpellMgr::IsSpellValid(spellInfo, player->GetSession()->GetPlayer(), false))
  202.                             continue;
  203.                         player->GetSession()->GetPlayer()->learnSpell(spellInfo->Id, false);
  204.                     }
  205.                     /*-- Unlearn Talent Points Before (Prevention) --*/
  206.                     player->ResetTalents(true);
  207.                     //Client Update
  208.                     if(!player->GetSession()->PlayerLoading())
  209.                     {
  210.                         player->SendTalentsInfoData(false);
  211.                     }
  212.                     /*-- Removing Spells Learned by spending 11 Talents Points (Need More attention)--*/
  213.                     for(uint32 i = 0; i < sizeof(Remove_T_Spell)/sizeof(uint32); i++)
  214.                         player->removeSpell(Remove_T_Spell[i],false);
  215.                     // General Spells -- Mastery etc (Need Manually - Could not be added by function)
  216.                     if(player->getClass() == CLASS_WARRIOR)
  217.                     {
  218.                         player->learnSpell(spell_mastery_warrior,false);
  219.                         player->learnSpell(Spell_Spec_War_Plate,false);
  220.                         player->learnSpell(Spell_Equip_plate,false);
  221.                     }
  222.                     if(player->getClass() ==  CLASS_PALADIN)
  223.                     {
  224.                         player->learnSpell(spell_mastery_paladin,false);
  225.                         player->learnSpell(Spell_Spec_Pal_Plate,false);
  226.                         player->learnSpell(Spell_Equip_plate,false);
  227.                     }
  228.                     if(player->getClass() ==   CLASS_HUNTER)
  229.                     {
  230.                         player->learnSpell(spell_mastery_hunter,false);
  231.                         player->learnSpell(Spell_Spec_Hunt_Mail,false);
  232.                         player->learnSpell(Spell_Dual_Wield,false);
  233.                         player->learnSpell(Spell_Equip_Mail,false);
  234.                     }
  235.                     if(player->getClass() ==   CLASS_ROGUE)
  236.                     {
  237.                         player->learnSpell(spell_mastery_rogue,false);
  238.                         player->learnSpell(Spell_Spec_Rogue_Leather,false);
  239.                         player->learnSpell(Spell_Equip_Leather,false);
  240.                     }
  241.                     if(player->getClass() ==  CLASS_PRIEST)
  242.                     {
  243.                         player->learnSpell(spell_mastery_priest,false);
  244.                         player->learnSpell(Spell_Mysticism,false);
  245.                     }
  246.                     if(player->getClass() == CLASS_DEATH_KNIGHT)
  247.                     {
  248.                         player->learnSpell(spell_mastery_dk,false);
  249.                         player->learnSpell(Spell_Spec_DK_Plate,false);
  250.                         player->learnSpell(Spell_Equip_plate,false);
  251.                     }
  252.                     if(player->getClass() == CLASS_SHAMAN)
  253.                     {
  254.                         player->learnSpell(spell_mastery_shaman,false);
  255.                         player->learnSpell(Spell_Spec_Shaman_Mail,false);
  256.                         player->learnSpell(Spell_Equip_Mail,false);
  257.                     }
  258.                     if(player->getClass() == CLASS_MAGE)
  259.                     {
  260.                         player->learnSpell(spell_mastery_mage,false);
  261.                         player->learnSpell(Spell_Wizardry,false);
  262.                     }
  263.                     if(player->getClass() == CLASS_WARLOCK)
  264.                     {
  265.                         player->learnSpell(spell_mastery_warlock,false);
  266.                         player->learnSpell(Spell_netherMancy,false);
  267.                     }
  268.                     if(player->getClass() == CLASS_DRUID)
  269.                     {
  270.                         player->learnSpell(spell_mastery_druid,false);
  271.                         player->learnSpell(Spell_Equip_Leather,false);
  272.                         player->learnSpell(Spell_Spec_Druid_Leather,false);
  273.                     }
  274.                     /**DUAL SPEC*////////////////////////////////////////////////////////////
  275.                     /**/player->CastSpell(player,63680,true,NULL,NULL,player->GetGUID());///
  276.                     /**/player->CastSpell(player,63624,true,NULL,NULL,player->GetGUID());//
  277.                     /**///////////////////////////////////////////////////////////////////
  278.  
  279.                     // Bags
  280.                     if(!player->HasItemCount(bag_36, 4,false))
  281.                     {
  282.                         player->AddItem(bag_36, Number_of_Bags);
  283.                     }
  284.                     player->SaveToDB();
  285.                     player->CLOSE_GOSSIP_MENU();
  286.                 }
  287.                 break;
  288.  
  289.     case GOSSIP_ACTION_INFO_DEF+2:
  290.         // Checking Glyph Items & Extracting Origin Spells
  291.         for(ItemTemplateContainer::const_iterator
  292.             itr = sObjectMgr->GetItemTemplateStore()->begin();
  293.             itr!=sObjectMgr->GetItemTemplateStore()->end();itr++){
  294.                 if(ItemTemplate const* templ=&itr->second){
  295.                     for(int i=0;i<MAX_ITEM_PROTO_SPELLS;i++){
  296.                         if(SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(templ->Spells[i].SpellId)){
  297.                             {
  298.                                 // skip broken spells
  299.                                 if (!SpellMgr::IsSpellValid(spellInfo, player->GetSession()->GetPlayer(), false))
  300.                                     continue;
  301.                             }
  302.                             // Final Step : Learning Glyphs
  303.                             if(templ->Class==16&&templ->SubClass== player->getClass()){
  304.                                 player->learnSpell(templ->Spells[i].SpellId,false);}
  305.                         }}}}  
  306.         // Few Problems Fix here
  307.         player->removeSpell(58240,false);
  308.         player->removeSpell(46831,false);
  309.         player->removeSpell(60460,false);
  310.         player->removeSpell(51220,false);
  311.  
  312.         player->CastSpell(player,95794);
  313.         player->SaveToDB();
  314.         player->CLOSE_GOSSIP_MENU();
  315.         break;
  316.  
  317.     case GOSSIP_ACTION_INFO_DEF+3:
  318.         {
  319.             for(uint32 i = 0; i < sizeof(mount_spells)/sizeof(uint32); i++)
  320.                 player->learnSpell(mount_spells[i],false);
  321.             if (player->GetTeam() == HORDE)
  322.             {
  323.                 player->AddItem(46749, 1);
  324.                 player->AddItem(44690, 1);                                            
  325.             }
  326.             else
  327.             {
  328.                 player->AddItem(44689, 1);
  329.                 player->AddItem(45125, 1);
  330.             }
  331.             player->CLOSE_GOSSIP_MENU();
  332.         }
  333.         break;
  334.  
  335.     case GOSSIP_ACTION_INFO_DEF+4:
  336.         player->ResetTalents(true);
  337.         //Client Update
  338.         if(!player->GetSession()->PlayerLoading())
  339.         {
  340.             player->SendTalentsInfoData(false);
  341.         }
  342.         player->CastSpell(player,95794);
  343.         player->SaveToDB();
  344.         player->CLOSE_GOSSIP_MENU();
  345.         break;
  346.             }
  347.         }
  348.         return true;
  349.     }
  350.  
  351. };
  352.  
  353. void AddSC_npc_welcome()
  354. {
  355.     new npc_welcome();
  356. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement