Advertisement
Guest User

Enchanting NPC (UPDATED)

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