Advertisement
Guest User

Enchanter

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