It's very long, but should work and never fail as long as you have gems in your equipment.
Code:local normalWeapon = 7389
local chargedWeapon = 686
local gemID = 675
local isChanging = false
function findEmptyContainer()
for i = 0, 15 do
if (Container.isOpen(i) and not Container.isFull(i)) then
return i
end
end
return nil
end
function findItemInContainer(item)
local itemid = Item.GetItemIDFromDualInput(item)
for i = 0, 15 do
if (Container.isOpen(i)) then
for spot = 0, Container.ItemCount(i) - 1 do
local data = Container.GetItemData(i, spot).id
if (itemid == data) then
return i, spot
end
end
end
end
return nil
end
function equipWeapon(weapon, callback)
local cWeapon = Self.Weapon().id
local weapon = Item.GetItemIDFromDualInput(weapon)
local wCont, wSpot = findItemInContainer(weapon)
if (not wCont or not wSpot) then
callback()
return false
end
local time = os.time()
local sCount = Self.ItemCount(weapon, wCont)
while (sCount == Self.ItemCount(weapon, wCont) and os.difftime(os.time(), time) < 10) do
local wCont, wSpot = findItemInContainer(weapon)
Container.MoveItemToEquipment(wCont, wSpot, "weapon", -1)
wait(500)
end
callback()
return true
end
function dequipWeapon(weapon, callback)
local item = Self.Weapon().id
local weapon = Item.GetItemIDFromDualInput(weapon)
if (item ~= weapon) then
callback(false)
return false
end
local emptyCont = findEmptyContainer()
if (not emptyCont) then
callback(false)
return false
end
local time = os.time()
while (Self.Weapon().id == weapon and os.difftime(os.time(), time) < 10) do
slotMoveItemToContainer("weapon", emptyCont, Container.ItemCount(emptyCont) - 1)
wait(500)
end
callback(true)
return true
end
function enchantWeapon(weapon, gem, chargedWeapon, callback)
local weapon = Item.GetItemIDFromDualInput(weapon)
local gem = Item.GetItemIDFromDualInput(gem)
local chargedWeapon = Item.GetItemIDFromDualInput(chargedWeapon)
local wCont, wSpot = findItemInContainer(weapon)
local gCont, gSpot = findItemInContainer(gem)
if (not wCont or not wSpot or not gCont or not gSpot) then
callback(false)
return false
end
local wItemCount = Self.ItemCount(weapon, wCont)
local gItemCount = Self.ItemCount(gem, gCont)
local cItemCount = Self.ItemCount(chargedWeapon)
local time = os.time()
while (wItemCount == Self.ItemCount(weapon, wCont) and gItemCount == Self.ItemCount(gem, gCont) and cItemCount == Self.ItemCount(chargedWeapon) and os.difftime(os.time(), time) < 10) do
local wCont, wSpot = findItemInContainer(weapon)
local gCont, gSpot = findItemInContainer(gem)
Container.UseItemWithContainerItem(gCont, gSpot, wCont, wSpot)
wait(500)
end
callback(true)
return true
end
Module.New("Enchant Weapon", function(mod)
if (Self.Weapon().id == normalWeapon and not isChanging and getSelfTargetID() == 0) then
delayWalker(20000)
isChanging = true
dequipWeapon(normalWeapon, function(success)
if (not success) then delayWalker(0) isChanging = false return end
enchantWeapon(normalWeapon, gemID, chargedWeapon, function(success)
if (not success) then equipWeapon(normalWeapon, function() delayWalker(0) isChanging = false end) end
if (success) then equipWeapon(chargedWeapon, function() delayWalker(0) isChanging = false end) end
end)
end)
end
end)