Advertisement
Erictemponi

NPC Enchanter II

Dec 17th, 2017
616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.14 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. #include "ScriptedCreature.h"
  3. #include "ScriptedGossip.h"
  4. #include "Player.h"
  5. #include "GridNotifiersImpl.h"
  6. #include "Spell.h"
  7. #include "SpellMgr.h"
  8. #include "Item.h"
  9.  
  10. enum Enchants
  11. {
  12. ENCHANT_WEP_BLADE_WARD = 3869,
  13. ENCHANT_WEP_BLOOD_DRAINING = 3870,
  14. ENCHANT_WEP_BERSERKING = 3789,
  15.  
  16. ENCHANT_WEP_ACCURACY = 3788,
  17. ENCHANT_WEP_AGILITY_1H = 1103,
  18. ENCHANT_WEP_AGILITY_2H = 2670,
  19. ENCHANT_WEP_SPIRIT = 3844,
  20. ENCHANT_WEP_BATTLEMASTER = 2675,
  21. ENCHANT_WEP_BLACK_MAGIC = 3790,
  22. ENCHANT_WEP_ICEBREAKER = 3239,
  23. ENCHANT_WEP_LIFEWARD = 3241,
  24. ENCHANT_WEP_MIGHTY_SPELL_POWER = 3834, // One-hand
  25. ENCHANT_WEP_GREATER_SPELL_POWER = 3854, // Two-hand (staff)
  26. ENCHANT_WEP_MONGOOSE = 2673,
  27. ENCHANT_WEP_EXECUTIONER = 3225,
  28. ENCHANT_WEP_POTENCY = 3833,
  29. ENCHANT_WEP_TITANGUARD = 3851,
  30. ENCHANT_WEP_MASSACRE = 3827,
  31.  
  32. ENCHANT_WEP_CINDERGLACIER = 3369,
  33. ENCHANT_WEP_LICHBANE = 3366,
  34. ENCHANT_WEP_RAZORICE = 3370,
  35. ENCHANT_WEP_SPELLBREAKING = 3595,
  36. ENCHANT_WEP_SPELLSHATTERING = 3367,
  37. ENCHANT_WEP_SWORDBREAKING = 3594,
  38. ENCHANT_WEP_SWORDSHATTERING = 3365,
  39. ENCHANT_WEP_FALLEN_CRUSADER = 3368,
  40. ENCHANT_WEP_NERUBIAN_CARAPACE = 3883,
  41. ENCHANT_WEP_STONESKIN_GARGOYLE = 3847,
  42.  
  43. ENCHANT_WEP_TITANIUM_CHAIN = 3731,
  44.  
  45. ENCHANT_SHIELD_DEFENSE = 1952,
  46. ENCHANT_SHIELD_INTELLECT = 1128,
  47. ENCHANT_SHIELD_MAJOR_STAMINA = 1071,
  48. ENCHANT_SHIELD_RESILIENCE = 3229,
  49.  
  50. ENCHANT_SHIELD_TITANIUM_PLATING = 3849,
  51. ENCHANT_SHIELD_TITANIUM_SPIKE = 3748,
  52.  
  53. ENCHANT_HEAD_BLISSFUL_MENDING = 3819,
  54. ENCHANT_HEAD_BURNING_MYSTERIES = 3820,
  55. ENCHANT_HEAD_DOMINANCE = 3796,
  56. ENCHANT_HEAD_SAVAGE_GLADIATOR = 3842,
  57. ENCHANT_HEAD_STALWART_PROTECTOR = 3818,
  58. ENCHANT_HEAD_TORMENT = 3817,
  59. ENCHANT_HEAD_TRIUMPH = 3795,
  60.  
  61. ENCHANT_SHOULDER_MASTERS_AXE = 3835,
  62. ENCHANT_SHOULDER_MASTERS_CRAG = 3836,
  63. ENCHANT_SHOULDER_MASTERS_PINNACLE = 3837,
  64. ENCHANT_SHOULDER_MASTERS_STORM = 3838,
  65. ENCHANT_SHOULDER_GREATER_AXE = 3808,
  66. ENCHANT_SHOULDER_GREATER_CRAG = 3809,
  67. ENCHANT_SHOULDER_GREATER_GLADIATOR = 3852,
  68. ENCHANT_SHOULDER_GREATER_PINNACLE = 3811,
  69. ENCHANT_SHOULDER_GREATER_STORM = 3810,
  70. ENCHANT_SHOULDER_DOMINANCE = 3794,
  71. ENCHANT_SHOULDER_TRIUMPH = 3793,
  72.  
  73. ENCHANT_CLOAK_DARKGLOW_EMBROIDERY = 3728,
  74. ENCHANT_CLOAK_SWORDGUARD_EMBROIDERY = 3730,
  75. ENCHANT_CLOAK_LIGHTWEAVE_EMBROIDERY = 3722,
  76. ENCHANT_CLOAK_FLEXWEAVE_UNDERLAY = 3605,
  77. ENCHANT_CLOAK_SPRINGY_ARACHNOWEAVE = 3859,
  78. ENCHANT_CLOAK_WISDOM = 3296,
  79. ENCHANT_CLOAK_TITANWEAVE = 1951,
  80. ENCHANT_CLOAK_SPELL_PIERCING = 3243,
  81. ENCHANT_CLOAK_SHADOW_ARMOR = 3256,
  82. ENCHANT_CLOAK_MIGHTY_ARMOR = 3294,
  83. ENCHANT_CLOAK_MAJOR_AGILITY = 1099,
  84. ENCHANT_CLOAK_GREATER_SPEED = 3831,
  85.  
  86. ENCHANT_CHEST_EXCEPTIONAL_MANA = 3233,
  87. ENCHANT_CHEST_GREATER_MANA_RESTO = 3533,
  88. ENCHANT_CHEST_EXCEPTIONAL_RESILIENCE = 3245,
  89. ENCHANT_CHEST_SUPER_HEALTH = 3297,
  90. ENCHANT_CHEST_ALL_STATS = 3832,
  91.  
  92. ENCHANT_BRACER_GREATER_ASSAULT = 3845,
  93. ENCHANT_BRACER_EXCEPTIONAL_INTELLECT = 3458,
  94. ENCHANT_BRACER_MAJOR_SPIRIT = 1147,
  95. ENCHANT_BRACER_EXPERTISE = 3231,
  96. ENCHANT_BRACER_GREATER_STATS = 2661,
  97. ENCHANT_BRACER_SUPERIOR_SPELLPOWER = 2332,
  98. ENCHANT_BRACER_MAJOR_STAMINA = 3850,
  99.  
  100. ENCHANT_BRACER_FUR_LINING_AP = 3756,
  101. ENCHANT_BRACER_FUR_LINING_STAMINA = 3757,
  102. ENCHANT_BRACER_FUR_LINING_SP = 3758,
  103. ENCHANT_BRACER_ARCANE_RESIST = 3763,
  104. ENCHANT_BRACER_NATURE_RESIST = 3762,
  105. ENCHANT_BRACER_SHADOW_RESIST = 3761,
  106. ENCHANT_BRACER_FROST_RESIST = 3760,
  107. ENCHANT_BRACER_FIRE_RESIST = 3759,
  108.  
  109. ENCHANT_BRACER_SOCKET_BRACER = 3717,
  110.  
  111. ENCHANT_GLOVES_CRUSHER = 1603,
  112. // EXTREMELY ugly hack for duplicate enchants
  113. ENCHANT_GLOVES_EXPERTISE = -3231,
  114. ENCHANT_GLOVES_PRECISION = 3234,
  115. ENCHANT_GLOVES_GREATER_ASSAULT = 1603,
  116. ENCHANT_GLOVES_MAJOR_AGILITY = 1097,
  117. ENCHANT_GLOVES_EXCEPTIONAL_SPELLPOWER = 2330,
  118. ENCHANT_GLOVES_ARMSMAN = 3253,
  119.  
  120. ENCHANT_GLOVES_SOCKET_GLOVES = 3723,
  121.  
  122. ENCHANT_GLOVES_PYROROCKET = 3603,
  123. ENCHANT_GLOVES_HYPERSPEED_ACCELERATORS = 3604,
  124.  
  125. ENCHANT_BELT_ETERNAL_BELT_BUCKLE = 3729,
  126. ENCHANT_BELT_FRAG_BELT = 3601,
  127.  
  128. ENCHANT_LEGS_FROSTHIDE_ARMOR = 3822,
  129. ENCHANT_LEGS_ICESCALE_ARMOR = 3823,
  130. ENCHANT_LEGS_EARTHEN_ARMOR = 3853,
  131. ENCHANT_LEGS_SAPPHIRE_SPELLTHREAD = 3873,
  132. ENCHANT_LEGS_BRILLIANT_SPELLTHREAD = 3872,
  133.  
  134. ENCHANT_BOOTS_TUSKARRS_VITALITY = 3232,
  135. ENCHANT_BOOTS_ICEWALKER = 2599,
  136. ENCHANT_BOOTS_GREATER_ASSAULT = 1597,
  137. ENCHANT_BOOTS_GREATER_SPIRIT = 528,
  138. ENCHANT_BOOTS_GREATER_FORTITUDE = 3259,
  139. ENCHANT_BOOTS_SUPERIOR_AGILITY = 983,
  140. ENCHANT_BOOTS_NITRO_BOOSTS = 3606,
  141.  
  142. ENCHANT_RING_STAMINA = 3791,
  143. ENCHANT_RING_GREATER_SPELLPOWER = 3840,
  144. ENCHANT_RING_ASSAULT = 3839,
  145.  
  146. ENCHANT_RANGED_HEARTSEEKER_SCOPE = 3608,
  147. ENCHANT_RANGED_SUN_SCOPE = 3607
  148. };
  149.  
  150. Item* PlayerAddItem(Player* player, uint32 item_id)
  151. {
  152. uint8 count = 1;
  153. uint32 noSpaceForCount = 0;
  154. ItemPosCountVec dest;
  155.  
  156. InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT,
  157. dest, item_id, count, &noSpaceForCount);
  158. if (msg != EQUIP_ERR_OK)
  159. count -= noSpaceForCount;
  160.  
  161. Item* item = player->StoreNewItem(dest, item_id, true, GenerateItemRandomPropertyId(item_id));
  162.  
  163. if (noSpaceForCount > 0)
  164. {
  165. player->GetSession()->SendNotification("Please make room in your "
  166. "inventory first.");
  167. return NULL;
  168. }
  169. return item;
  170. }
  171.  
  172. void EnchantWithItem(Player* player, uint32 item_id, Item* target)
  173. {
  174. Item* item = PlayerAddItem(player, item_id);
  175. SpellCastTargets* targets = new SpellCastTargets();
  176. targets->SetItemTarget(target);
  177. player->CastItemUseSpell(item, *targets, 1, 0);
  178. }
  179.  
  180. void EnchantWithSpell(Player* player, uint32 spell_id, Item* item)
  181. {
  182. SpellCastTargets* targets = new SpellCastTargets();
  183. targets->SetItemTarget(item);
  184. player->CastSpell(*targets, sSpellMgr->GetSpellInfo(spell_id),
  185. NULL, TRIGGERED_IGNORE_POWER_AND_REAGENT_COST);
  186. }
  187.  
  188. void Enchant(Player* player, Creature* creature, Item* item, uint32 enchantid)
  189. {
  190. if (!item)
  191. {
  192. player->GetSession()->SendNotification("Please equip an item first.");
  193. return;
  194. }
  195.  
  196. uint32 item_id = 0;
  197. switch (enchantid)
  198. {
  199. case ENCHANT_WEP_GREATER_SPELL_POWER:
  200. case ENCHANT_WEP_AGILITY_2H:
  201. case ENCHANT_WEP_MASSACRE:
  202. if (item->GetTemplate()->InventoryType != INVTYPE_2HWEAPON)
  203. {
  204. creature->Whisper("That isn't a two-handed weapon", LANG_UNIVERSAL, player, false);
  205. return;
  206. }
  207. break;
  208. case ENCHANT_SHIELD_DEFENSE:
  209. case ENCHANT_SHIELD_INTELLECT:
  210. case ENCHANT_SHIELD_MAJOR_STAMINA:
  211. case ENCHANT_SHIELD_RESILIENCE:
  212. case ENCHANT_SHIELD_TITANIUM_PLATING:
  213. case ENCHANT_SHIELD_TITANIUM_SPIKE:
  214. if (item->GetTemplate()->InventoryType != INVTYPE_SHIELD)
  215. {
  216. creature->Whisper("That isn't a shield", LANG_UNIVERSAL, player, false);
  217. return;
  218. }
  219. break;
  220. case ENCHANT_RANGED_HEARTSEEKER_SCOPE:
  221. case ENCHANT_RANGED_SUN_SCOPE:
  222. if (item->GetTemplate()->InventoryType != INVTYPE_RANGED &&
  223. item->GetTemplate()->InventoryType != INVTYPE_RANGEDRIGHT)
  224. {
  225. creature->Whisper("That isn't a ranged weapon", LANG_UNIVERSAL, player, false);
  226. return;
  227. }
  228. break;
  229. default:
  230. break;
  231. }
  232.  
  233. player->ApplyEnchantment(item, PERM_ENCHANTMENT_SLOT, false);
  234. item->ClearEnchantment(PERM_ENCHANTMENT_SLOT);
  235. item->SetEnchantment(PERM_ENCHANTMENT_SLOT, enchantid, 0, 0);
  236. player->ApplyEnchantment(item, PERM_ENCHANTMENT_SLOT, true);
  237.  
  238. switch (enchantid)
  239. {
  240. case ENCHANT_BELT_ETERNAL_BELT_BUCKLE:
  241. EnchantWithItem(player, 41611, item);
  242. break;
  243. case ENCHANT_BRACER_SOCKET_BRACER:
  244. PlayerAddItem(player, 5956); // Blacksmith hammer
  245. EnchantWithSpell(player, 55628, item);
  246. player->DestroyItemCount(5956, -1, true, false);
  247. break;
  248. case ENCHANT_GLOVES_SOCKET_GLOVES:
  249. PlayerAddItem(player, 5956); // Blacksmith hammer
  250. EnchantWithSpell(player, 55641, item);
  251. player->DestroyItemCount(5956, -1, true, false);
  252. break;
  253. }
  254.  
  255. const char* item_name = item->GetTemplate()->Name1.c_str();
  256. player->GetSession()->SendNotification("|cff0000FF%s |cffFF0000succesfully enchanted!", item->GetTemplate()->Name1.c_str());
  257. }
  258.  
  259. class npc_enchantment : public CreatureScript
  260. {
  261. public:
  262. npc_enchantment() : CreatureScript("npc_enchantment") { }
  263. static int selected_enchant;
  264.  
  265. static bool OnGossipHello(Player* player, Creature* creature)
  266. {
  267. ShowMainMenu(player, creature);
  268. return true;
  269. }
  270.  
  271. static void ShowMainMenu(Player* player, Creature* creature)
  272. {
  273. player->PlayerTalkClass->ClearMenus();
  274. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Weapon]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
  275. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant 2H Weapon]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
  276. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Ranged Weapon]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
  277. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Shield]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
  278. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Head]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
  279. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Shoulders]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
  280. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Cloak]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
  281. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Chest]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
  282. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Bracers]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
  283. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Gloves]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
  284. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Eternal Belt Buckle]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
  285. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Legs]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
  286. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Enchant Feet]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
  287. if (player->HasSkill(SKILL_ENCHANTING) && player->GetSkillValue(SKILL_ENCHANTING) >= 450)
  288. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Enchant Rings", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
  289. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  290. }
  291.  
  292. static void Show1HWeaponMenu(Player* player, Creature* creature)
  293. {
  294. player->PlayerTalkClass->ClearMenus();
  295. if (player->getClass() == CLASS_DEATH_KNIGHT)
  296. {
  297. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Cinderglacier", GOSSIP_SENDER_MAIN,
  298. ENCHANT_WEP_CINDERGLACIER);
  299. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Lichbane", GOSSIP_SENDER_MAIN,
  300. ENCHANT_WEP_LICHBANE);
  301. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Razorice", GOSSIP_SENDER_MAIN,
  302. ENCHANT_WEP_RAZORICE);
  303. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Spellbreaking", GOSSIP_SENDER_MAIN,
  304. ENCHANT_WEP_SPELLBREAKING);
  305. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Swordbreaking", GOSSIP_SENDER_MAIN,
  306. ENCHANT_WEP_SWORDBREAKING);
  307. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of the Fallen Crusader", GOSSIP_SENDER_MAIN,
  308. ENCHANT_WEP_FALLEN_CRUSADER);
  309. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of the Nerubian Carapace", GOSSIP_SENDER_MAIN,
  310. ENCHANT_WEP_NERUBIAN_CARAPACE);
  311. }
  312. if (player->HasSkill(SKILL_ENCHANTING) && player->GetSkillValue(SKILL_ENCHANTING) >= 450)
  313. {
  314. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Blade Ward", GOSSIP_SENDER_MAIN,
  315. ENCHANT_WEP_BLADE_WARD);
  316. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Blood Draining", GOSSIP_SENDER_MAIN,
  317. ENCHANT_WEP_BLOOD_DRAINING);
  318. }
  319.  
  320. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Accuracy -- 25 Hit + 25 Crit", GOSSIP_SENDER_MAIN,
  321. ENCHANT_WEP_ACCURACY);
  322. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Black Magic -- 250 Spell Haste Proc", GOSSIP_SENDER_MAIN,
  323. ENCHANT_WEP_BLACK_MAGIC);
  324. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Battlemaster -- Chance of heal on hit", GOSSIP_SENDER_MAIN,
  325. ENCHANT_WEP_BATTLEMASTER);
  326. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Berserking -- 400 Attack Power Proc", GOSSIP_SENDER_MAIN,
  327. ENCHANT_WEP_BERSERKING);
  328. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Agility -- 26 Agility", GOSSIP_SENDER_MAIN,
  329. ENCHANT_WEP_AGILITY_1H);
  330. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Spirit -- 45 Spirit", GOSSIP_SENDER_MAIN,
  331. ENCHANT_WEP_SPIRIT);
  332. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Executioner -- 120 Arm Pen Proc", GOSSIP_SENDER_MAIN,
  333. ENCHANT_WEP_EXECUTIONER);
  334. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Icebreaker -- Fire damage on hit", GOSSIP_SENDER_MAIN,
  335. ENCHANT_WEP_ICEBREAKER);
  336. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Lifeward -- Chance of heal on hit", GOSSIP_SENDER_MAIN,
  337. ENCHANT_WEP_LIFEWARD);
  338. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Mighty Spellpower -- 63 Spell Power", GOSSIP_SENDER_MAIN,
  339. ENCHANT_WEP_MIGHTY_SPELL_POWER);
  340. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Mongoose -- 120 Agility Proc", GOSSIP_SENDER_MAIN,
  341. ENCHANT_WEP_MONGOOSE);
  342. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Superior Potency -- 65 Attack Power", GOSSIP_SENDER_MAIN,
  343. ENCHANT_WEP_POTENCY);
  344. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Titanguard -- 50 Stamina", GOSSIP_SENDER_MAIN,
  345. ENCHANT_WEP_TITANGUARD);
  346. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Titanium Weapon Chain -- Less Disarm Time", GOSSIP_SENDER_MAIN,
  347. ENCHANT_WEP_TITANIUM_CHAIN);
  348. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  349. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  350. }
  351.  
  352. static void Show2HWeaponMenu(Player* player, Creature* creature)
  353. {
  354. player->PlayerTalkClass->ClearMenus();
  355. if (player->getClass() == CLASS_DEATH_KNIGHT)
  356. {
  357. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Cinderglacier", GOSSIP_SENDER_MAIN,
  358. ENCHANT_WEP_CINDERGLACIER);
  359. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Lichbane", GOSSIP_SENDER_MAIN,
  360. ENCHANT_WEP_LICHBANE);
  361. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Razorice", GOSSIP_SENDER_MAIN,
  362. ENCHANT_WEP_RAZORICE);
  363. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Spellshattering", GOSSIP_SENDER_MAIN,
  364. ENCHANT_WEP_SPELLSHATTERING);
  365. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of Swordshattering", GOSSIP_SENDER_MAIN,
  366. ENCHANT_WEP_SWORDSHATTERING);
  367. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of the Fallen Crusader", GOSSIP_SENDER_MAIN,
  368. ENCHANT_WEP_FALLEN_CRUSADER);
  369. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Rune of the Stoneskin Gargoyle", GOSSIP_SENDER_MAIN,
  370. ENCHANT_WEP_STONESKIN_GARGOYLE);
  371. }
  372. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Berserking -- 400 Attack Power Proc", GOSSIP_SENDER_MAIN,
  373. ENCHANT_WEP_BERSERKING);
  374. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Executioner -- 120 Arm Pen Proc", GOSSIP_SENDER_MAIN,
  375. ENCHANT_WEP_EXECUTIONER);
  376. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Spellpower -- 81 Spell Power", GOSSIP_SENDER_MAIN,
  377. ENCHANT_WEP_GREATER_SPELL_POWER);
  378. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Agility -- 35 Agility", GOSSIP_SENDER_MAIN,
  379. ENCHANT_WEP_AGILITY_2H);
  380. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Massacre -- 110 Attack Power", GOSSIP_SENDER_MAIN,
  381. ENCHANT_WEP_MASSACRE);
  382. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Mongoose --120 Agility Proc", GOSSIP_SENDER_MAIN,
  383. ENCHANT_WEP_MONGOOSE);
  384. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  385. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  386. }
  387.  
  388. static void ShowShieldMenu(Player* player, Creature* creature)
  389. {
  390. player->PlayerTalkClass->ClearMenus();
  391. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Defense -- 20 Defense", GOSSIP_SENDER_MAIN,
  392. ENCHANT_SHIELD_DEFENSE);
  393. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Intellect -- 25 Intellect", GOSSIP_SENDER_MAIN,
  394. ENCHANT_SHIELD_INTELLECT);
  395. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Stamina -- 18 Stamina", GOSSIP_SENDER_MAIN,
  396. ENCHANT_SHIELD_MAJOR_STAMINA);
  397. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Resilience -- 12 Resilience", GOSSIP_SENDER_MAIN,
  398. ENCHANT_SHIELD_RESILIENCE);
  399. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Titanium Plating -- 36 Block", GOSSIP_SENDER_MAIN,
  400. ENCHANT_SHIELD_TITANIUM_PLATING);
  401. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Titanium Shield Spike -- 81 Block + 50% less Disarm", GOSSIP_SENDER_MAIN,
  402. ENCHANT_SHIELD_TITANIUM_SPIKE);
  403. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  404. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  405. }
  406.  
  407. static void ShowHeadMenu(Player* player, Creature* creature)
  408. {
  409. player->PlayerTalkClass->ClearMenus();
  410. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of Blissful Mending -- 30 Spell Power + 10 Mp5", GOSSIP_SENDER_MAIN,
  411. ENCHANT_HEAD_BLISSFUL_MENDING);
  412. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of Burning Mysteries -- 30 Spell Power + 20 Crit", GOSSIP_SENDER_MAIN,
  413. ENCHANT_HEAD_BURNING_MYSTERIES);
  414. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of Dominance -- 29 Spell Power + 20 Resil", GOSSIP_SENDER_MAIN,
  415. ENCHANT_HEAD_DOMINANCE);
  416. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of The Savage Gladiator -- 30 Stamina + 25 Resil", GOSSIP_SENDER_MAIN,
  417. ENCHANT_HEAD_SAVAGE_GLADIATOR);
  418. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of The Stalwart Protector -- 37 Stamina + 20 Defense", GOSSIP_SENDER_MAIN,
  419. ENCHANT_HEAD_STALWART_PROTECTOR);
  420. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of Torment -- 50 Attack Power + 20 Crit", GOSSIP_SENDER_MAIN,
  421. ENCHANT_HEAD_TORMENT);
  422. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Arcanum of Triumph -- 50 Attack Power + 20 Resil", GOSSIP_SENDER_MAIN,
  423. ENCHANT_HEAD_TRIUMPH);
  424. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  425. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  426. }
  427.  
  428. static void ShowShouldersMenu(Player* player, Creature* creature)
  429. {
  430. player->PlayerTalkClass->ClearMenus();
  431. if (player->HasSkill(SKILL_INSCRIPTION) && player->GetSkillValue(SKILL_INSCRIPTION) >= 450)
  432. {
  433. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Master's Inscription of the Axe", GOSSIP_SENDER_MAIN,
  434. ENCHANT_SHOULDER_MASTERS_AXE);
  435. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Master's Inscription of the Crag", GOSSIP_SENDER_MAIN,
  436. ENCHANT_SHOULDER_MASTERS_CRAG);
  437. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Master's Inscription of the Pinnacle", GOSSIP_SENDER_MAIN,
  438. ENCHANT_SHOULDER_MASTERS_PINNACLE);
  439. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Master's Inscription of the Storm", GOSSIP_SENDER_MAIN,
  440. ENCHANT_SHOULDER_MASTERS_STORM);
  441. }
  442. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Inscription of the Axe -- 40 Attack Power + 15 Crit", GOSSIP_SENDER_MAIN,
  443. ENCHANT_SHOULDER_GREATER_AXE);
  444. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Inscription of the Crag -- 24 Spell Power + 8 Mp5", GOSSIP_SENDER_MAIN,
  445. ENCHANT_SHOULDER_GREATER_CRAG);
  446. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Inscription of the Pinnacle -- 30 Stamina + 15 Resil", GOSSIP_SENDER_MAIN,
  447. ENCHANT_SHOULDER_GREATER_PINNACLE);
  448. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Inscription of the Gladiator -- 20 Dodge + 15 Defense", GOSSIP_SENDER_MAIN,
  449. ENCHANT_SHOULDER_GREATER_GLADIATOR);
  450. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Inscription of the Storm -- 24 Spell Power + 15 Crit", GOSSIP_SENDER_MAIN,
  451. ENCHANT_SHOULDER_GREATER_STORM);
  452. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Inscription of Dominance -- 23 Spell Power + 15 Resil", GOSSIP_SENDER_MAIN,
  453. ENCHANT_SHOULDER_DOMINANCE);
  454. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Inscription of Triumph -- 40 Attack Power + 15 Resil", GOSSIP_SENDER_MAIN,
  455. ENCHANT_SHOULDER_TRIUMPH);
  456. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  457. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  458. }
  459.  
  460. static void ShowCloakMenu(Player* player, Creature* creature)
  461. {
  462. player->PlayerTalkClass->ClearMenus();
  463. if (player->HasSkill(SKILL_ENGINEERING) && player->GetSkillValue(SKILL_ENGINEERING) >= 450)
  464. {
  465. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Springy Arachnoweave", GOSSIP_SENDER_MAIN,
  466. ENCHANT_CLOAK_SPRINGY_ARACHNOWEAVE);
  467. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Flexweave Underlay", GOSSIP_SENDER_MAIN,
  468. ENCHANT_CLOAK_FLEXWEAVE_UNDERLAY);
  469. }
  470. if (player->getClass() == CLASS_ROGUE)
  471. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Shadow Armor", GOSSIP_SENDER_MAIN,
  472. ENCHANT_CLOAK_SHADOW_ARMOR);
  473. if (player->HasSkill(SKILL_TAILORING) && player->GetSkillValue(SKILL_TAILORING) >= 450)
  474. {
  475. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Darkglow Embroidery", GOSSIP_SENDER_MAIN,
  476. ENCHANT_CLOAK_DARKGLOW_EMBROIDERY);
  477. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Lightweave Embroidery", GOSSIP_SENDER_MAIN,
  478. ENCHANT_CLOAK_LIGHTWEAVE_EMBROIDERY);
  479. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Swordguard Embroidery", GOSSIP_SENDER_MAIN,
  480. ENCHANT_CLOAK_SWORDGUARD_EMBROIDERY);
  481. }
  482. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Wisdom -- 10 Spirit +2% reduce threat", GOSSIP_SENDER_MAIN,
  483. ENCHANT_CLOAK_WISDOM);
  484. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Titanweave -- 16 Defense", GOSSIP_SENDER_MAIN,
  485. ENCHANT_CLOAK_TITANWEAVE);
  486. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Spell Piercing -- 35 Spell Pen", GOSSIP_SENDER_MAIN,
  487. ENCHANT_CLOAK_SPELL_PIERCING);
  488. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Mighty Armor -- 225 Armor", GOSSIP_SENDER_MAIN,
  489. ENCHANT_CLOAK_MIGHTY_ARMOR);
  490. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Agility -- 22 Agility", GOSSIP_SENDER_MAIN,
  491. ENCHANT_CLOAK_MAJOR_AGILITY);
  492. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Speed -- 23 Haste", GOSSIP_SENDER_MAIN,
  493. ENCHANT_CLOAK_GREATER_SPEED);
  494. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  495. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  496. }
  497.  
  498. static void ShowChestMenu(Player* player, Creature* creature)
  499. {
  500. player->PlayerTalkClass->ClearMenus();
  501. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Mana -- 150 Mana", GOSSIP_SENDER_MAIN,
  502. ENCHANT_CHEST_EXCEPTIONAL_MANA);
  503. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Mana Restoration -- 10 Mp5", GOSSIP_SENDER_MAIN,
  504. ENCHANT_CHEST_GREATER_MANA_RESTO);
  505. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Resilience -- 20 Resilience", GOSSIP_SENDER_MAIN,
  506. ENCHANT_CHEST_EXCEPTIONAL_RESILIENCE);
  507. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Super Health -- 225 Health", GOSSIP_SENDER_MAIN,
  508. ENCHANT_CHEST_SUPER_HEALTH);
  509. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "10 of all stats", GOSSIP_SENDER_MAIN,
  510. ENCHANT_CHEST_ALL_STATS);
  511. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  512. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  513. }
  514.  
  515. static void ShowBracerMenu(Player* player, Creature* creature)
  516. {
  517. player->PlayerTalkClass->ClearMenus();
  518. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Assault -- 50 Attack Power", GOSSIP_SENDER_MAIN,
  519. ENCHANT_BRACER_GREATER_ASSAULT);
  520. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Intellect -- 16 Intellect", GOSSIP_SENDER_MAIN,
  521. ENCHANT_BRACER_EXCEPTIONAL_INTELLECT);
  522. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Spirit -- 18 Spirit", GOSSIP_SENDER_MAIN,
  523. ENCHANT_BRACER_MAJOR_SPIRIT);
  524. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Expertise -- 15 Expertise", GOSSIP_SENDER_MAIN,
  525. ENCHANT_BRACER_EXPERTISE);
  526. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Stats -- 6 all stats", GOSSIP_SENDER_MAIN,
  527. ENCHANT_BRACER_GREATER_STATS);
  528. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Superior Spellpower -- 30 Spell Power", GOSSIP_SENDER_MAIN,
  529. ENCHANT_BRACER_SUPERIOR_SPELLPOWER);
  530. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Stamina -- 40 Stamina", GOSSIP_SENDER_MAIN,
  531. ENCHANT_BRACER_MAJOR_STAMINA);
  532. if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetSkillValue(SKILL_LEATHERWORKING) >= 450)
  533. {
  534. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Attack Power", GOSSIP_SENDER_MAIN,
  535. ENCHANT_BRACER_FUR_LINING_AP);
  536. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Stamina", GOSSIP_SENDER_MAIN,
  537. ENCHANT_BRACER_FUR_LINING_STAMINA);
  538. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Spell Power", GOSSIP_SENDER_MAIN,
  539. ENCHANT_BRACER_FUR_LINING_SP);
  540. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Arcane Resist", GOSSIP_SENDER_MAIN,
  541. ENCHANT_BRACER_ARCANE_RESIST);
  542. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Nature Resist", GOSSIP_SENDER_MAIN,
  543. ENCHANT_BRACER_NATURE_RESIST);
  544. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Shadow Resist", GOSSIP_SENDER_MAIN,
  545. ENCHANT_BRACER_SHADOW_RESIST);
  546. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Frost Resist", GOSSIP_SENDER_MAIN,
  547. ENCHANT_BRACER_FROST_RESIST);
  548. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Fur Lining: Fire Resist", GOSSIP_SENDER_MAIN,
  549. ENCHANT_BRACER_FIRE_RESIST);
  550. }
  551. if (player->HasSkill(SKILL_BLACKSMITHING) && player->GetSkillValue(SKILL_BLACKSMITHING) >= 450)
  552. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Socket Bracer", GOSSIP_SENDER_MAIN,
  553. ENCHANT_BRACER_SOCKET_BRACER);
  554. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  555. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  556. }
  557.  
  558. static void ShowGlovesMenu(Player* player, Creature* creature)
  559. {
  560. player->PlayerTalkClass->ClearMenus();
  561. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Armsman -- 2% Threat 10 Parry", GOSSIP_SENDER_MAIN,
  562. ENCHANT_GLOVES_ARMSMAN);
  563. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Exceptional Spellpower -- 23 Spell Power", GOSSIP_SENDER_MAIN,
  564. ENCHANT_GLOVES_EXCEPTIONAL_SPELLPOWER);
  565. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Expertise -- 15 Expertise", GOSSIP_SENDER_MAIN,
  566. ENCHANT_GLOVES_EXPERTISE);
  567. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Assault -- 44 Attack Power", GOSSIP_SENDER_MAIN,
  568. ENCHANT_GLOVES_CRUSHER);
  569. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Major Agility -- 20 Agility", GOSSIP_SENDER_MAIN,
  570. ENCHANT_GLOVES_MAJOR_AGILITY);
  571. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Precision -- 20 Hit Rating", GOSSIP_SENDER_MAIN,
  572. ENCHANT_GLOVES_PRECISION);
  573. if (player->HasSkill(SKILL_BLACKSMITHING) && player->GetSkillValue(SKILL_BLACKSMITHING) >= 450)
  574. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Socket Gloves", GOSSIP_SENDER_MAIN,
  575. ENCHANT_GLOVES_SOCKET_GLOVES);
  576. if (player->HasSkill(SKILL_ENGINEERING) && player->GetSkillValue(SKILL_ENGINEERING) >= 450)
  577. {
  578. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Hand-Mounted Pyro Rocket", GOSSIP_SENDER_MAIN,
  579. ENCHANT_GLOVES_PYROROCKET);
  580. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Hyperspeed Accelerators", GOSSIP_SENDER_MAIN,
  581. ENCHANT_GLOVES_HYPERSPEED_ACCELERATORS);
  582. }
  583. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  584. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  585. }
  586.  
  587. static void ShowBeltMenu(Player* player, Creature* creature)
  588. {
  589. player->PlayerTalkClass->ClearMenus();
  590. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Eternal Belt Buckle", GOSSIP_SENDER_MAIN,
  591. ENCHANT_BELT_ETERNAL_BELT_BUCKLE);
  592. if (player->HasSkill(SKILL_ENGINEERING) && player->GetSkillValue(SKILL_ENGINEERING) >= 450)
  593. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Frag Belt", GOSSIP_SENDER_MAIN,
  594. ENCHANT_BELT_FRAG_BELT);
  595. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  596. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  597. }
  598.  
  599. static void ShowLegsMenu(Player* player, Creature* creature)
  600. {
  601. player->PlayerTalkClass->ClearMenus();
  602. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Frosthide Leg Armor -- 55 Stam 22 Agil", GOSSIP_SENDER_MAIN,
  603. ENCHANT_LEGS_FROSTHIDE_ARMOR);
  604. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Icescale Leg Armor -- 75 AP 22 Crit", GOSSIP_SENDER_MAIN,
  605. ENCHANT_LEGS_ICESCALE_ARMOR);
  606. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Earthen Leg Armor -- 40 Resil 28 Stam", GOSSIP_SENDER_MAIN,
  607. ENCHANT_LEGS_EARTHEN_ARMOR);
  608. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Sapphire Spellthread -- 50 SP 30 Stam", GOSSIP_SENDER_MAIN,
  609. ENCHANT_LEGS_SAPPHIRE_SPELLTHREAD);
  610. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Brilliant Spellthread -- 50 SP 22 Spirit", GOSSIP_SENDER_MAIN,
  611. ENCHANT_LEGS_BRILLIANT_SPELLTHREAD);
  612. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  613. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  614. }
  615.  
  616. static void ShowBootsMenu(Player* player, Creature* creature)
  617. {
  618. player->PlayerTalkClass->ClearMenus();
  619. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Icewalker -- 12 Hit + 12 Crit", GOSSIP_SENDER_MAIN,
  620. ENCHANT_BOOTS_ICEWALKER);
  621. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Assault -- 32 Assult", GOSSIP_SENDER_MAIN,
  622. ENCHANT_BOOTS_GREATER_ASSAULT);
  623. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Fortitude -- 22 Stamins", GOSSIP_SENDER_MAIN,
  624. ENCHANT_BOOTS_GREATER_FORTITUDE);
  625. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Spirit -- 18 Spirit", GOSSIP_SENDER_MAIN,
  626. ENCHANT_BOOTS_GREATER_SPIRIT);
  627. if (player->HasSkill(SKILL_ENGINEERING) && player->GetSkillValue(SKILL_ENGINEERING) >= 450)
  628. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Nitro Boosts", GOSSIP_SENDER_MAIN,
  629. ENCHANT_BOOTS_NITRO_BOOSTS);
  630. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Superior Agility -- 16 Agility", GOSSIP_SENDER_MAIN,
  631. ENCHANT_BOOTS_SUPERIOR_AGILITY);
  632. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Tuskarr's Vitality -- 15 Stam + Speed Increase", GOSSIP_SENDER_MAIN,
  633. ENCHANT_BOOTS_TUSKARRS_VITALITY);
  634. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  635. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  636. }
  637.  
  638. static void ShowRingsMenu(Player* player, Creature* creature)
  639. {
  640. player->PlayerTalkClass->ClearMenus();
  641. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Assault", GOSSIP_SENDER_MAIN,
  642. ENCHANT_RING_ASSAULT);
  643. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Greater Spellpower", GOSSIP_SENDER_MAIN,
  644. ENCHANT_RING_GREATER_SPELLPOWER);
  645. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Stamina", GOSSIP_SENDER_MAIN,
  646. ENCHANT_RING_STAMINA);
  647. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  648. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  649. }
  650.  
  651. static void ShowRangedMenu(Player* player, Creature* creature)
  652. {
  653. player->PlayerTalkClass->ClearMenus();
  654. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Heartseeker Scope", GOSSIP_SENDER_MAIN,
  655. ENCHANT_RANGED_HEARTSEEKER_SCOPE);
  656. AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Sun Scope", GOSSIP_SENDER_MAIN,
  657. ENCHANT_RANGED_SUN_SCOPE);
  658. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Back", GOSSIP_SENDER_MAIN, -1);
  659. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  660. }
  661.  
  662. static bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
  663. {
  664. int slot = -1;
  665. bool check_adjacent_slot = true;
  666. switch (action)
  667. {
  668. case -1: // Back
  669. ShowMainMenu(player, creature);
  670. break;
  671. case GOSSIP_ACTION_INFO_DEF + 1:
  672. Show1HWeaponMenu(player, creature);
  673. break;
  674. case GOSSIP_ACTION_INFO_DEF + 2:
  675. Show2HWeaponMenu(player, creature);
  676. break;
  677. case GOSSIP_ACTION_INFO_DEF + 3:
  678. ShowShieldMenu(player, creature);
  679. break;
  680. case GOSSIP_ACTION_INFO_DEF + 4:
  681. ShowHeadMenu(player, creature);
  682. break;
  683. case GOSSIP_ACTION_INFO_DEF + 5:
  684. ShowShouldersMenu(player, creature);
  685. break;
  686. case GOSSIP_ACTION_INFO_DEF + 6:
  687. ShowCloakMenu(player, creature);
  688. break;
  689. case GOSSIP_ACTION_INFO_DEF + 7:
  690. ShowChestMenu(player, creature);
  691. break;
  692. case GOSSIP_ACTION_INFO_DEF + 8:
  693. ShowBracerMenu(player, creature);
  694. break;
  695. case GOSSIP_ACTION_INFO_DEF + 9:
  696. ShowGlovesMenu(player, creature);
  697. break;
  698. case GOSSIP_ACTION_INFO_DEF + 10:
  699. ShowBeltMenu(player, creature);
  700. break;
  701. case GOSSIP_ACTION_INFO_DEF + 11:
  702. ShowLegsMenu(player, creature);
  703. break;
  704. case GOSSIP_ACTION_INFO_DEF + 12:
  705. ShowBootsMenu(player, creature);
  706. break;
  707. case GOSSIP_ACTION_INFO_DEF + 13:
  708. ShowRangedMenu(player, creature);
  709. break;
  710. case GOSSIP_ACTION_INFO_DEF + 14:
  711. ShowRingsMenu(player, creature);
  712. break;
  713.  
  714. // 1H weapons
  715. case ENCHANT_WEP_BLADE_WARD:
  716. case ENCHANT_WEP_BLOOD_DRAINING:
  717. case ENCHANT_WEP_AGILITY_1H:
  718. case ENCHANT_WEP_SPIRIT:
  719. case ENCHANT_WEP_BERSERKING:
  720. case ENCHANT_WEP_ACCURACY:
  721. case ENCHANT_WEP_BLACK_MAGIC:
  722. case ENCHANT_WEP_BATTLEMASTER:
  723. case ENCHANT_WEP_ICEBREAKER:
  724. case ENCHANT_WEP_LIFEWARD:
  725. case ENCHANT_WEP_TITANGUARD:
  726. case ENCHANT_WEP_POTENCY:
  727. case ENCHANT_WEP_MONGOOSE:
  728. case ENCHANT_WEP_MIGHTY_SPELL_POWER:
  729. case ENCHANT_WEP_EXECUTIONER:
  730. case ENCHANT_WEP_TITANIUM_CHAIN:
  731.  
  732. // 2H weapons
  733. // case ENCHANT_WEP_BERSERKING:
  734. // case ENCHANT_WEP_MONGOOSE:
  735. // case ENCHANT_WEP_EXECUTIONER:
  736. // case ENCHANT_WEP_TITANIUM_CHAIN:
  737. case ENCHANT_WEP_GREATER_SPELL_POWER:
  738. case ENCHANT_WEP_AGILITY_2H:
  739. case ENCHANT_WEP_MASSACRE:
  740.  
  741. // Runeforging
  742. case ENCHANT_WEP_CINDERGLACIER:
  743. case ENCHANT_WEP_LICHBANE:
  744. case ENCHANT_WEP_RAZORICE:
  745. case ENCHANT_WEP_SPELLBREAKING:
  746. case ENCHANT_WEP_SPELLSHATTERING:
  747. case ENCHANT_WEP_SWORDBREAKING:
  748. case ENCHANT_WEP_SWORDSHATTERING:
  749. case ENCHANT_WEP_FALLEN_CRUSADER:
  750. case ENCHANT_WEP_NERUBIAN_CARAPACE:
  751. case ENCHANT_WEP_STONESKIN_GARGOYLE:
  752. slot = EQUIPMENT_SLOT_MAINHAND;
  753. break;
  754.  
  755. // Shields
  756. case ENCHANT_SHIELD_DEFENSE:
  757. case ENCHANT_SHIELD_INTELLECT:
  758. case ENCHANT_SHIELD_RESILIENCE:
  759. case ENCHANT_SHIELD_TITANIUM_PLATING:
  760. case ENCHANT_SHIELD_MAJOR_STAMINA:
  761. case ENCHANT_SHIELD_TITANIUM_SPIKE:
  762. slot = EQUIPMENT_SLOT_OFFHAND;
  763. break;
  764.  
  765. // Head
  766. case ENCHANT_HEAD_BLISSFUL_MENDING:
  767. case ENCHANT_HEAD_BURNING_MYSTERIES:
  768. case ENCHANT_HEAD_DOMINANCE:
  769. case ENCHANT_HEAD_SAVAGE_GLADIATOR:
  770. case ENCHANT_HEAD_STALWART_PROTECTOR:
  771. case ENCHANT_HEAD_TORMENT:
  772. case ENCHANT_HEAD_TRIUMPH:
  773. slot = EQUIPMENT_SLOT_HEAD;
  774. break;
  775.  
  776. // Shoulders
  777. case ENCHANT_SHOULDER_MASTERS_AXE:
  778. case ENCHANT_SHOULDER_MASTERS_CRAG:
  779. case ENCHANT_SHOULDER_MASTERS_PINNACLE:
  780. case ENCHANT_SHOULDER_MASTERS_STORM:
  781. case ENCHANT_SHOULDER_GREATER_AXE:
  782. case ENCHANT_SHOULDER_GREATER_CRAG:
  783. case ENCHANT_SHOULDER_GREATER_GLADIATOR:
  784. case ENCHANT_SHOULDER_GREATER_PINNACLE:
  785. case ENCHANT_SHOULDER_GREATER_STORM:
  786. case ENCHANT_SHOULDER_DOMINANCE:
  787. case ENCHANT_SHOULDER_TRIUMPH:
  788. slot = EQUIPMENT_SLOT_SHOULDERS;
  789. break;
  790.  
  791. // Cloak
  792. case ENCHANT_CLOAK_DARKGLOW_EMBROIDERY:
  793. case ENCHANT_CLOAK_SWORDGUARD_EMBROIDERY:
  794. case ENCHANT_CLOAK_FLEXWEAVE_UNDERLAY:
  795. case ENCHANT_CLOAK_LIGHTWEAVE_EMBROIDERY:
  796. case ENCHANT_CLOAK_SPRINGY_ARACHNOWEAVE:
  797. case ENCHANT_CLOAK_WISDOM:
  798. case ENCHANT_CLOAK_TITANWEAVE:
  799. case ENCHANT_CLOAK_SPELL_PIERCING:
  800. case ENCHANT_CLOAK_SHADOW_ARMOR:
  801. case ENCHANT_CLOAK_MIGHTY_ARMOR:
  802. case ENCHANT_CLOAK_MAJOR_AGILITY:
  803. case ENCHANT_CLOAK_GREATER_SPEED:
  804. slot = EQUIPMENT_SLOT_BACK;
  805. break;
  806.  
  807. // Chest
  808. case ENCHANT_CHEST_EXCEPTIONAL_MANA:
  809. case ENCHANT_CHEST_GREATER_MANA_RESTO:
  810. case ENCHANT_CHEST_EXCEPTIONAL_RESILIENCE:
  811. case ENCHANT_CHEST_SUPER_HEALTH:
  812. case ENCHANT_CHEST_ALL_STATS:
  813. slot = EQUIPMENT_SLOT_CHEST;
  814. break;
  815.  
  816. // Bracers
  817. case ENCHANT_BRACER_GREATER_ASSAULT:
  818. case ENCHANT_BRACER_EXCEPTIONAL_INTELLECT:
  819. case ENCHANT_BRACER_MAJOR_SPIRIT:
  820. case ENCHANT_BRACER_EXPERTISE:
  821. case ENCHANT_BRACER_GREATER_STATS:
  822. case ENCHANT_BRACER_SUPERIOR_SPELLPOWER:
  823. case ENCHANT_BRACER_MAJOR_STAMINA:
  824. case ENCHANT_BRACER_FUR_LINING_AP:
  825. case ENCHANT_BRACER_FUR_LINING_STAMINA:
  826. case ENCHANT_BRACER_FUR_LINING_SP:
  827. case ENCHANT_BRACER_ARCANE_RESIST:
  828. case ENCHANT_BRACER_NATURE_RESIST:
  829. case ENCHANT_BRACER_SHADOW_RESIST:
  830. case ENCHANT_BRACER_FROST_RESIST:
  831. case ENCHANT_BRACER_FIRE_RESIST:
  832. case ENCHANT_BRACER_SOCKET_BRACER:
  833. slot = EQUIPMENT_SLOT_WRISTS;
  834. break;
  835.  
  836. // Gloves
  837. case ENCHANT_GLOVES_EXPERTISE:
  838. case ENCHANT_GLOVES_PRECISION:
  839. case ENCHANT_GLOVES_GREATER_ASSAULT:
  840. case ENCHANT_GLOVES_MAJOR_AGILITY:
  841. case ENCHANT_GLOVES_EXCEPTIONAL_SPELLPOWER:
  842. case ENCHANT_GLOVES_ARMSMAN:
  843. case ENCHANT_GLOVES_SOCKET_GLOVES:
  844. case ENCHANT_GLOVES_PYROROCKET:
  845. case ENCHANT_GLOVES_HYPERSPEED_ACCELERATORS:
  846. slot = EQUIPMENT_SLOT_HANDS;
  847. break;
  848.  
  849. // Belt
  850. case ENCHANT_BELT_ETERNAL_BELT_BUCKLE:
  851. case ENCHANT_BELT_FRAG_BELT:
  852. slot = EQUIPMENT_SLOT_WAIST;
  853. break;
  854.  
  855. // Legs
  856. case ENCHANT_LEGS_FROSTHIDE_ARMOR:
  857. case ENCHANT_LEGS_ICESCALE_ARMOR:
  858. case ENCHANT_LEGS_EARTHEN_ARMOR:
  859. case ENCHANT_LEGS_SAPPHIRE_SPELLTHREAD:
  860. case ENCHANT_LEGS_BRILLIANT_SPELLTHREAD:
  861. slot = EQUIPMENT_SLOT_LEGS;
  862. break;
  863.  
  864. // Boots
  865. case ENCHANT_BOOTS_TUSKARRS_VITALITY:
  866. case ENCHANT_BOOTS_ICEWALKER:
  867. case ENCHANT_BOOTS_GREATER_ASSAULT:
  868. case ENCHANT_BOOTS_GREATER_SPIRIT:
  869. case ENCHANT_BOOTS_GREATER_FORTITUDE:
  870. case ENCHANT_BOOTS_SUPERIOR_AGILITY:
  871. case ENCHANT_BOOTS_NITRO_BOOSTS:
  872. slot = EQUIPMENT_SLOT_FEET;
  873. break;
  874.  
  875. // Rings
  876. case ENCHANT_RING_STAMINA:
  877. case ENCHANT_RING_GREATER_SPELLPOWER:
  878. case ENCHANT_RING_ASSAULT:
  879. slot = EQUIPMENT_SLOT_FINGER1;
  880. break;
  881.  
  882. // Ranged weapon
  883. case ENCHANT_RANGED_HEARTSEEKER_SCOPE:
  884. case ENCHANT_RANGED_SUN_SCOPE:
  885. slot = EQUIPMENT_SLOT_RANGED;
  886. break;
  887.  
  888. // Main hand
  889. case GOSSIP_ACTION_INFO_DEF + 20:
  890. slot = EQUIPMENT_SLOT_MAINHAND;
  891. action = selected_enchant;
  892. check_adjacent_slot = false;
  893. break;
  894.  
  895. // Off hand
  896. case GOSSIP_ACTION_INFO_DEF + 21:
  897. slot = EQUIPMENT_SLOT_OFFHAND;
  898. action = selected_enchant;
  899. check_adjacent_slot = false;
  900. break;
  901.  
  902. default:
  903. player->PlayerTalkClass->SendCloseGossip();
  904. break;
  905. }
  906. if (slot > -1)
  907. {
  908. // allows for a maximum of 2 duplicates, and the
  909. // convenience of using enchant ids as gossip
  910. // userdata
  911. if (action < 0)
  912. action = -action;
  913. Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot);
  914. if (!item && slot == INVTYPE_RANGEDRIGHT)
  915. item = player->GetItemByPos(INVENTORY_SLOT_BAG_0,
  916. INVTYPE_RANGEDRIGHT);
  917. if (item && check_adjacent_slot &&
  918. item->GetEnchantmentId(PERM_ENCHANTMENT_SLOT) != 0)
  919. {
  920. switch (slot)
  921. {
  922. case EQUIPMENT_SLOT_MAINHAND:
  923. {
  924. Item* offhand = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
  925. if (offhand)
  926. {
  927. player->PlayerTalkClass->ClearMenus();
  928. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  929. item->GetTemplate()->Name1.c_str(),
  930. GOSSIP_SENDER_MAIN,
  931. GOSSIP_ACTION_INFO_DEF + 20);
  932. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  933. offhand->GetTemplate()->Name1.c_str(),
  934. GOSSIP_SENDER_MAIN,
  935. GOSSIP_ACTION_INFO_DEF + 21);
  936. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  937. "Back",
  938. GOSSIP_SENDER_MAIN, -1);
  939. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  940. selected_enchant = action;
  941. return true;
  942. }
  943. break;
  944. }
  945. case EQUIPMENT_SLOT_FINGER1:
  946. {
  947. Item* ring2 = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_FINGER2);
  948. if (ring2)
  949. {
  950. player->PlayerTalkClass->ClearMenus();
  951. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  952. item->GetTemplate()->Name1.c_str(),
  953. GOSSIP_SENDER_MAIN,
  954. GOSSIP_ACTION_INFO_DEF + 20);
  955. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  956. ring2->GetTemplate()->Name1.c_str(),
  957. GOSSIP_SENDER_MAIN,
  958. GOSSIP_ACTION_INFO_DEF + 21);
  959. AddGossipItemFor(player, GOSSIP_ICON_CHAT,
  960. "Back",
  961. GOSSIP_SENDER_MAIN, -1);
  962. player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
  963. selected_enchant = action;
  964. return true;
  965. }
  966. break;
  967. }
  968. default:
  969. break;
  970. }
  971. }
  972. Enchant(player, creature, item, action);
  973. ShowMainMenu(player, creature);
  974. }
  975. return true;
  976. }
  977. struct MyAI : public ScriptedAI
  978. {
  979. MyAI(Creature* creature) : ScriptedAI(creature) { }
  980. bool GossipHello(Player* player) override
  981. {
  982. return OnGossipHello(player, me);
  983. }
  984. bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
  985. {
  986. uint32 sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
  987. uint32 action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
  988. return OnGossipSelect(player, me, sender, action);
  989. }
  990. };
  991.  
  992. CreatureAI* GetAI(Creature* creature) const override
  993. {
  994. return new MyAI(creature);
  995. }
  996. };
  997. int npc_enchantment::selected_enchant = 0;
  998.  
  999. void AddSC_npc_enchantment()
  1000. {
  1001. new npc_enchantment();
  1002. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement