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