Advertisement
Guest User

Profession script

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