Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. --[[
  2. Config table. Set your UpgradeSpell if this will be used, your token ID,
  3. and what items should be upgradeable and what said item upgrades to.
  4. ]]
  5.  
  6. local ItemUpgrade = {
  7.     UpgradeSpell = 61335, -- Temp spell to test OnCast
  8.     UpgradeToken = 6948, -- Hearthstone, use dummy token
  9.     Upgradeable_Items = {
  10.         -- {OldItemEntry, NewItemEntry},
  11.         {2092, 3296}, -- Worn Dagger, Deadman Dagger
  12.         {3296, 4565}, -- Deadman Dagger, Simple Dagger
  13.     };
  14. };
  15. -- End config table. Do not touch anything below unless you know what you're doing.
  16.  
  17. function ItemUpgrade.GetUpgradeEntry(original_entry)
  18.     for i = 1, #ItemUpgrade.Upgradeable_Items do
  19.         if ItemUpgrade.Upgradeable_Items[i][1] == original_entry then
  20.             return ItemUpgrade.Upgradeable_Items[i][2];
  21.         end
  22.     end
  23. end
  24.  
  25. function ItemUpgrade.OnCast(event, player, spell, skipCheck)
  26.     if spell:GetEntry() == ItemUpgrade.UpgradeSpell then
  27.         for i = 1, #ItemUpgrade.Upgradeable_Items do
  28.             if player:HasItem(ItemUpgrade.Upgradeable_Items[i][1]) then
  29.                 ItemUpgrade.OnHello(event, player, original_item)
  30.             end
  31.         end
  32.     end
  33. end
  34.  
  35. function ItemUpgrade.OnHello(event, player, original_item)
  36.     player:GossipClearMenu()
  37.    
  38.     for i = 1, #ItemUpgrade.Upgradeable_Items do
  39.         if player:HasItem(ItemUpgrade.Upgradeable_Items[i][1]) then
  40.             player:GossipMenuAddItem(0, "Upgrade "..GetItemLink(ItemUpgrade.Upgradeable_Items[i][1]), 0, ItemUpgrade.Upgradeable_Items[i][1], false, "Are you sure you want to upgrade "..GetItemLink(ItemUpgrade.Upgradeable_Items[i][1]).." to "..GetItemLink(ItemUpgrade.Upgradeable_Items[i][2]).."?")
  41.         end
  42.     end
  43.    
  44.     player:GossipSendMenu(1, player, 100)
  45. end
  46.  
  47. function ItemUpgrade.OnSelect(event, player, original_item, sender, intid, code)
  48.     local old_entry = intid
  49.     local new_entry = ItemUpgrade.GetUpgradeEntry(old_entry)
  50.    
  51.     player:GossipComplete()
  52.     -- This automatically removes the old item and adds the new item. This could be replaced
  53.     player:RemoveItem(ItemUpgrade.UpgradeToken, 1)
  54.     player:RemoveItem(old_entry, 1)
  55.     player:AddItem(new_entry, 1)
  56.     -- ie. with player:SendQuestTemplate(questId, activeAccept) -- Sends quest template to player
  57. end
  58.  
  59. RegisterPlayerEvent(5, ItemUpgrade.OnCast)
  60. RegisterItemGossipEvent(ItemUpgrade.UpgradeToken, 1, ItemUpgrade.OnHello)
  61. RegisterPlayerGossipEvent(100, 2, ItemUpgrade.OnSelect)