Advertisement
Erictemponi

NPC Beastmaster

Feb 1st, 2016
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.57 KB | None | 0 0
  1. //Fixed by Ac-Web Community
  2. //Modified by Marcus
  3. //Updated by Quadral
  4. //original script created by ??
  5. #include "ScriptMgr.h"
  6. #include "Cell.h"
  7. #include "CellImpl.h"
  8. #include "GameEventMgr.h"
  9. #include "GridNotifiers.h"
  10. #include "GridNotifiersImpl.h"
  11. #include "Unit.h"
  12. #include "GameObject.h"
  13. #include "ScriptedCreature.h"
  14. #include "ScriptedGossip.h"
  15. #include "InstanceScript.h"
  16. #include "CombatAI.h"
  17. #include "PassiveAI.h"
  18. #include "Chat.h"
  19. #include "DBCStructure.h"
  20. #include "DBCStores.h"
  21. #include "ObjectMgr.h"
  22. #include "SpellScript.h"
  23. #include "SpellAuraEffects.h"
  24. #include "Pet.h"
  25.  
  26. #define GOSSIP_ITEM_STABLE "Stable"
  27. #define GOSSIP_ITEM_NEWPET "New Pet"
  28. #define GOSSIP_ITEM_BOAR "Boar"
  29. #define GOSSIP_ITEM_SERPENT "Serpent"
  30. #define GOSSIP_ITEM_SCRAB "Scrab"
  31. #define GOSSIP_ITEM_LION "Lion"
  32. #define GOSSIP_ITEM_WOLF "Wolf"
  33. #define GOSSIP_ITEM_RAVAGER "Ravenger"
  34.  
  35. #define GOSSIP_ITEM_UNTRAINEPET "Restart Pet"
  36.  
  37. class Npc_Beastmaster : public CreatureScript
  38. {
  39. public:
  40.     Npc_Beastmaster() : CreatureScript("Npc_Beastmaster") { }
  41.  
  42.     void CreatePet(Player *player, Creature * m_creature, uint32 entry) {
  43.  
  44.         if (player->getClass() != CLASS_HUNTER) {
  45.             m_creature->Whisper("You are not a Hunter!", LANG_UNIVERSAL, player, false);
  46.             player->PlayerTalkClass->SendCloseGossip();
  47.             return;
  48.         }
  49.  
  50.         if (player->GetPet()) {
  51.             m_creature->Whisper("First you must drop your pet!", LANG_UNIVERSAL, player, false);;
  52.             player->PlayerTalkClass->SendCloseGossip();
  53.             return;
  54.         }
  55.  
  56.         Creature *creatureTarget = m_creature->SummonCreature(entry, player->GetPositionX(), player->GetPositionY() + 2, player->GetPositionZ(), player->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 500);
  57.         if (!creatureTarget) return;
  58.  
  59.         Pet* pet = player->CreateTamedPetFrom(creatureTarget, 0);
  60.         if (!pet)
  61.             return;
  62.  
  63.         // kill original creature
  64.         creatureTarget->setDeathState(JUST_DIED);
  65.         creatureTarget->RemoveCorpse();
  66.         creatureTarget->SetHealth(0);                       // just for nice GM-mode view
  67.  
  68.         pet->SetPower(POWER_HAPPINESS, 1048000);
  69.  
  70.         //pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE,0);
  71.         //pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32((Trinity::XP::xp_to_level(70))/4));
  72.  
  73.         // prepare visual effect for levelup
  74.         pet->SetUInt32Value(UNIT_FIELD_LEVEL, player->getLevel() - 1);
  75.         pet->GetMap()->AddToMap(pet->ToCreature());
  76.  
  77.         // visual effect for levelup
  78.         pet->SetUInt32Value(UNIT_FIELD_LEVEL, player->getLevel());
  79.  
  80.  
  81.         if (!pet->InitStatsForLevel(player->getLevel()))
  82.             // sLog->outError("Pet Create fail: no init stats for entry %u", entry);
  83.  
  84.             pet->UpdateAllStats();
  85.  
  86.         // caster have pet now
  87.         player->SetMinion(pet, true);
  88.  
  89.         pet->SavePetToDB(PET_SAVE_AS_CURRENT);
  90.         pet->InitTalentForLevel();
  91.         player->PetSpellInitialize();
  92.  
  93.         //end
  94.         player->PlayerTalkClass->SendCloseGossip();
  95.         m_creature->Whisper("Pet added!", LANG_UNIVERSAL, player, false);;
  96.     }
  97.  
  98.  
  99.     bool OnGossipHello(Player *player, Creature * m_creature)
  100.     {
  101.  
  102.         if (player->getClass() != CLASS_HUNTER)
  103.         {
  104.             m_creature->Whisper("You are not a Hunter!", LANG_UNIVERSAL, player, false);
  105.             return true;
  106.         }
  107.         player->ADD_GOSSIP_ITEM(4, "Get a New Pet.", GOSSIP_SENDER_MAIN, 30);
  108.         if (player->CanTameExoticPets())
  109.         {
  110.             player->ADD_GOSSIP_ITEM(4, "Get a New Exotic Pet.", GOSSIP_SENDER_MAIN, 50);
  111.         }
  112.         player->ADD_GOSSIP_ITEM(2, "Take me to the Stable.", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
  113.         player->ADD_GOSSIP_ITEM(6, "Sell me some Food for my Pet.", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_VENDOR);
  114.         player->ADD_GOSSIP_ITEM(5, "Close Beastmaster Window.", GOSSIP_SENDER_MAIN, 150);
  115.         player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
  116.         return true;
  117.     }
  118.  
  119.     bool OnGossipSelect(Player *player, Creature * m_creature, uint32 sender, uint32 action)
  120.     {
  121.         player->PlayerTalkClass->ClearMenus();
  122.         switch (action)
  123.         {
  124.  
  125.         case 100:
  126.             player->ADD_GOSSIP_ITEM(4, "Get a New Pet.", GOSSIP_SENDER_MAIN, 30);
  127.             if (player->CanTameExoticPets())
  128.             {
  129.                 player->ADD_GOSSIP_ITEM(4, "Get a New Exotic Pet.", GOSSIP_SENDER_MAIN, 50);
  130.             }
  131.             player->ADD_GOSSIP_ITEM(2, "Take me to the Stable.", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
  132.             // player->ADD_GOSSIP_ITEM(6, "Sell me some Food for my Pet.", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_VENDOR);
  133.             player->ADD_GOSSIP_ITEM(5, "Close Beastmaster Window.", GOSSIP_SENDER_MAIN, 150);
  134.             player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
  135.             break;
  136.  
  137.         case 150:
  138.             player->CLOSE_GOSSIP_MENU();
  139.             break;
  140.         case 30:
  141.             player->ADD_GOSSIP_ITEM(2, "<- Back to Main Menu.", GOSSIP_SENDER_MAIN, 100);
  142.             player->ADD_GOSSIP_ITEM(4, "Next Page. ->", GOSSIP_SENDER_MAIN, 31);
  143.             player->ADD_GOSSIP_ITEM(6, "Bat.", GOSSIP_SENDER_MAIN, 18);
  144.             player->ADD_GOSSIP_ITEM(6, "Bear.", GOSSIP_SENDER_MAIN, 1);
  145.             player->ADD_GOSSIP_ITEM(6, "Boar.", GOSSIP_SENDER_MAIN, 2);
  146.             player->ADD_GOSSIP_ITEM(6, "Cat.", GOSSIP_SENDER_MAIN, 4);
  147.             player->ADD_GOSSIP_ITEM(6, "Carrion Bird.", GOSSIP_SENDER_MAIN, 5);
  148.             player->ADD_GOSSIP_ITEM(6, "Crab.", GOSSIP_SENDER_MAIN, 6);
  149.             player->ADD_GOSSIP_ITEM(6, "Crocolisk.", GOSSIP_SENDER_MAIN, 7);
  150.             player->ADD_GOSSIP_ITEM(6, "Dragonhawk.", GOSSIP_SENDER_MAIN, 17);
  151.             player->ADD_GOSSIP_ITEM(6, "Gorilla.", GOSSIP_SENDER_MAIN, 8);
  152.             player->ADD_GOSSIP_ITEM(6, "Hound.", GOSSIP_SENDER_MAIN, 9);
  153.             player->ADD_GOSSIP_ITEM(6, "Hyena.", GOSSIP_SENDER_MAIN, 10);
  154.             player->ADD_GOSSIP_ITEM(6, "Moth.", GOSSIP_SENDER_MAIN, 11);
  155.             player->ADD_GOSSIP_ITEM(6, "Owl.", GOSSIP_SENDER_MAIN, 12);
  156.             player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
  157.             break;
  158.  
  159.         case 31:
  160.             player->ADD_GOSSIP_ITEM(2, "<- Back to Main Menu.", GOSSIP_SENDER_MAIN, 30);
  161.             player->ADD_GOSSIP_ITEM(4, "<- Previous Page.", GOSSIP_SENDER_MAIN, 30);
  162.             player->ADD_GOSSIP_ITEM(6, "Raptor.", GOSSIP_SENDER_MAIN, 20);
  163.             player->ADD_GOSSIP_ITEM(6, "Ravager.", GOSSIP_SENDER_MAIN, 19);
  164.             player->ADD_GOSSIP_ITEM(6, "Strider.", GOSSIP_SENDER_MAIN, 13);
  165.             player->ADD_GOSSIP_ITEM(6, "Scorpid.", GOSSIP_SENDER_MAIN, 414);
  166.             player->ADD_GOSSIP_ITEM(6, "Spider.", GOSSIP_SENDER_MAIN, 16);
  167.             player->ADD_GOSSIP_ITEM(6, "Serpent.", GOSSIP_SENDER_MAIN, 21);
  168.             player->ADD_GOSSIP_ITEM(6, "Turtle.", GOSSIP_SENDER_MAIN, 15);
  169.             player->ADD_GOSSIP_ITEM(6, "Wasp.", GOSSIP_SENDER_MAIN, 93);
  170.             player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
  171.             break;
  172.  
  173.         case 50:
  174.             player->ADD_GOSSIP_ITEM(2, "<- Back to Main Menu.", GOSSIP_SENDER_MAIN, 100);
  175.             player->ADD_GOSSIP_ITEM(2, "<- Get a New Normal Pet.", GOSSIP_SENDER_MAIN, 100);
  176.             player->ADD_GOSSIP_ITEM(6, "Chimaera.", GOSSIP_SENDER_MAIN, 51);
  177.             player->ADD_GOSSIP_ITEM(6, "Core Hound.", GOSSIP_SENDER_MAIN, 52);
  178.             player->ADD_GOSSIP_ITEM(6, "Devilsaur.", GOSSIP_SENDER_MAIN, 53);
  179.             player->ADD_GOSSIP_ITEM(6, "Rhino.", GOSSIP_SENDER_MAIN, 54);
  180.             player->ADD_GOSSIP_ITEM(6, "Silithid.", GOSSIP_SENDER_MAIN, 55);
  181.             player->ADD_GOSSIP_ITEM(6, "Worm.", GOSSIP_SENDER_MAIN, 56);
  182.             player->ADD_GOSSIP_ITEM(6, "Loque'nahak.", GOSSIP_SENDER_MAIN, 57);
  183.             player->ADD_GOSSIP_ITEM(6, "Skoll.", GOSSIP_SENDER_MAIN, 58);
  184.             player->ADD_GOSSIP_ITEM(6, "Gondria.", GOSSIP_SENDER_MAIN, 59);
  185.             player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
  186.             break;
  187.  
  188.         case GOSSIP_OPTION_STABLEPET:
  189.             player->GetSession()->SendStablePet(m_creature->GetGUID());
  190.             break;
  191.         case GOSSIP_OPTION_VENDOR:
  192.             player->GetSession()->SendListInventory(m_creature->GetGUID());
  193.             break;
  194.         case 51: //chimera
  195.             CreatePet(player, m_creature, 21879);
  196.             break;
  197.         case 52: //core hound
  198.             CreatePet(player, m_creature, 21108);
  199.             break;
  200.         case 53: //Devilsaur
  201.             CreatePet(player, m_creature, 20931);
  202.             break;
  203.         case 54: //rhino
  204.             CreatePet(player, m_creature, 30445);
  205.             break;
  206.         case 55: //silithid
  207.             CreatePet(player, m_creature, 5460);
  208.             break;
  209.         case 56: //Worm
  210.             CreatePet(player, m_creature, 30148);
  211.             break;
  212.         case 57: //Loque'nahak
  213.             CreatePet(player, m_creature, 32517);
  214.             break;
  215.         case 58: //Skoll
  216.             CreatePet(player, m_creature, 35189);
  217.             break;
  218.         case 59: //Gondria
  219.             CreatePet(player, m_creature, 33776);
  220.             break;
  221.         case 16: //Spider
  222.             CreatePet(player, m_creature, 2349);
  223.             break;
  224.         case 17: //Dragonhawk
  225.             CreatePet(player, m_creature, 27946);
  226.             break;
  227.         case 18: //Bat
  228.             CreatePet(player, m_creature, 28233);
  229.             break;
  230.         case 19: //Ravager
  231.             CreatePet(player, m_creature, 17199);
  232.             break;
  233.         case 20: //Raptor
  234.             CreatePet(player, m_creature, 14821);
  235.             break;
  236.         case 21: //Serpent
  237.             CreatePet(player, m_creature, 28358);
  238.             break;
  239.         case 1: //bear
  240.             CreatePet(player, m_creature, 29319);
  241.             break;
  242.         case 2: //Boar
  243.             CreatePet(player, m_creature, 29996);
  244.             break;
  245.         case 93: //Bug
  246.             CreatePet(player, m_creature, 28085);
  247.             break;
  248.         case 4: //cat
  249.             CreatePet(player, m_creature, 28097);
  250.             break;
  251.         case 5: //carrion
  252.             CreatePet(player, m_creature, 26838);
  253.             break;
  254.         case 6: //crab
  255.             CreatePet(player, m_creature, 24478);
  256.             break;
  257.         case 7: //crocolisk
  258.             CreatePet(player, m_creature, 1417);
  259.             break;
  260.         case 8: //gorila
  261.             CreatePet(player, m_creature, 28213);
  262.             break;
  263.         case 9: //hound
  264.             CreatePet(player, m_creature, 29452);
  265.             break;
  266.         case 10: //hynea
  267.             CreatePet(player, m_creature, 13036);
  268.             break;
  269.         case 11: //Moth
  270.             CreatePet(player, m_creature, 27421);
  271.             break;
  272.         case 12: //owl
  273.             CreatePet(player, m_creature, 23136);
  274.             break;
  275.         case 13: //strider
  276.             CreatePet(player, m_creature, 22807);
  277.             break;
  278.         case 414: //scorpid
  279.             CreatePet(player, m_creature, 9698);
  280.             break;
  281.         case 15: //turtle
  282.             CreatePet(player, m_creature, 25482);
  283.             break;
  284.         }
  285.         return true;
  286.     }
  287. };
  288.  
  289. void AddSC_Npc_Beastmaster()
  290. {
  291.     new Npc_Beastmaster();
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement