Advertisement
WoWCreador

Beastmaster

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