setDefaultTab("Tools") UI.Separator() local trainingDummy = { 28565, 28558, 28559, 28560 } --// Training Dummy IDs local paladinId = 35288 --// Excercise Bow ID local knightId = 35285 --// Exercise Melee ID (By default Sword) local mageId = 35289 --// Exercise Magic ID (By default Wand) local distanceDummy = 4 --// Self-distance from the dummy --[[ If you want 100% afk experience I recommend settings up like: At: "Ingame Script Editor" set: CaveBot.setOn() And on a CaveBot Script: exerciseDummy() schedule(1000, function() CaveBot.setOff() end) return true ------------------------------------------------------------- By default there's ONLY "Ferumbras Training Dummy" IDs, if you're using a non-ferumbras dummy, add the IDs. -------------------------------------------------------------- If you want to use per example different knights with different skills, you can set them below player_name = character name knightId = the id you want to use ]] local playerName = player:getName() if playerName == "player name" then knightId = 35287 elseif playerName == "player_name" then knightId = 28552 elseif playerName == "player_name" then mageId = 28552 elseif playerName == "player_name" then paladinId = 28552 end function exerciseDummy() for _, tile in ipairs(g_map.getTiles(posz())) do --// Checks distance within character and tile if getDistanceBetween(pos(), tile:getPosition()) <= distanceDummy then --// Get items on top of the floor local item = tile:getTopUseThing() --// Checks if the item has the same ID as our table. if item and table.find(trainingDummy, item:getId()) then --// Checks our vocation, in this case if paladin then use exercise bow. if voc() == 2 or voc() == 12 then --tile:setText("Dummy Found RP") item:setMarked("#2eb9ff") --autoWalk(item:getPosition(), 20, { -- ignoreNonPathable = true, -- precision = 0, -- marginMin = 1, -- marginMax = 1 --}) g_game.useInventoryItemWith(paladinId, item) return true end --// Checks our vocation, in this case if knight then use melee exercise weapon. if voc() == 1 or voc() == 11 then --tile:setText("Dummy Found EK") item:setMarked("#2eb9ff") autoWalk(item:getPosition(), 20, { ignoreNonPathable = true, precision = 0, marginMin = 1, marginMax = 1 }) schedule(2000, function() g_game.useInventoryItemWith(knightId, item) end) end --// Checks our vocation, in this case if mage then use wand or rod weapon. if voc() == 3 or voc() == 13 or voc() == 4 or voc() == 14 then --tile:setText("Dummy Found Mage") item:setMarked("#2eb9ff") --autoWalk(item:getPosition(), 20, { -- ignoreNonPathable = true, -- precision = 0, -- marginMin = 1, -- marginMax = 1 --}) g_game.useInventoryItemWith(mageId, item) return true end end end end end UI.Button("Exercise Dummy", function() exerciseDummy() end) onTextMessage(function(mode, text) if string.match(text, "You have changed position. Training has stopped.") then print("[Error] "..text) schedule(5000, function() exerciseDummy() end) end if string.match(text, "This exercise dummy can only be used after a 20 second cooldown.") then print("[Error] "..text) exerciseDummy() end if string.match(text, "Your training weapon has disappeared.") then print("[Error] "..text) exerciseDummy() end end)