- Starts checking for trees to chop (Target self with tool for auto targeting)
-> chops until full (you need to put your max weigt if you dont have max strengh!)
-> Chops logs into boards (on at a time not all types at once)
-> checks for new tree to chop
Version 1.3
Bugs: sometimes doesnt start right away and starting script again fixes
Unsatisfactory: No Disarm for anyother and wont be changed
Future ideas: maybe add pack animal unload
+++++++++++++++++++++++
Newest Gathering Rules:
One gatherer per connection.
Only one character per internet connection can gather resources at a time. If a second character on your connection tries to mine, chop, or fish while another is already gathering, the attempt is blocked: "Your connection (IP) is already involved in a harvesting attempt; only one may gather at a time."
Window focus
You can no longer start gathering while the game window is in the background — bring the game (or the Assistant) into focus first. Alt-tabbing doesn't interrupt a swing already in progress; it only stops the next one.
Walk before harvest
Take a step after traveling. After a Recall, Gate or right after logging in — take one step before you can gather. One step, that's all.
Automatic harvest target selection
New convenience: self-target to auto-gather. Target yourself with a harvest tool and it automatically works the nearest matching resource within 2 tiles: pickaxe/shovel → ore or rock, axe → tree, fishing pole → water, skinning knife → the nearest unskinned corpse. No more pixel-hunting the mountainside.
-- V1 release
-- V1.1 logchop fix
-- V1.2 Hatchet fix
-- V1.3 Hatchet handle fix
-- Known bugs: At client start the hatchet doesnt get recognised
-- Configuration
local MAX_WEIGHT_DIFF = 10
local MAX_WEIGHT = 390
local ITEM_ID_WOODEN_LOGS = 0x1BDD
local CHOP_DELAY = 2500
function GetHatchet()
-- Check if Hatchet already in hand
for _, layer in ipairs({1, 2}) do
local checkAxe = Items.FindByLayer(layer)
if checkAxe
and string.find(string.lower(checkAxe.Name or ""), "hatchet") then
return checkAxe
end
end
-- No Hatchet -> Check Bagpack
local equipaxe = Items.FindByName("Hatchet")
if equipaxe then
Player.Equip(equipaxe.Serial)
Pause(1000)
-- check if equip is successful
for _, layer in ipairs({1, 2}) do
local checkAxe = Items.FindByLayer(layer)
if checkAxe
and string.find(string.lower(checkAxe.Name or ""), "hatchet") then
return checkAxe
end
end
end
Player.Say("No hatchet found.")
return nil
end
function GetLogs()
local itemList = Items.FindByFilter({})
for _, item in ipairs(itemList) do
if item
and item.RootContainer == Player.Serial
and item.Graphic == ITEM_ID_WOODEN_LOGS then
return item
end
end
return nil
end
function CreateBoards(hatchet)
local log = GetLogs()
if hatchet and log then
Player.Say("Chopping boards!")
Player.UseObject(hatchet.Serial)
if Targeting.WaitForTarget(1000) then
Targeting.TargetSerial(log.Serial)
Pause(1000)
else
Player.Say("Failed to target log for boards.")
end
elseif not hatchet then
Player.Say("No hatchet to make boards.")
elseif not log then
Player.Say("No logs to make boards.")
end
end
function CheckTreeStatus()
local messages = {
"There is no wood here to chop.",
"You cannot see that.",
"That is too far away.",
"You can't use an axe on that.",
"You cannot reach that.",
"You have worn out your tool!",
"There's not enough wood here to harvest."
}
for _, msg in ipairs(messages) do
if Journal.Contains(msg) then
Journal.Clear()
return true
end
end
return false
end
function ChopLoop(hatchet)
while true do
-- Check if hatchet still exists
if not hatchet then
Player.Say("Searching new hatchet...")
hatchet = GetHatchet()
if not hatchet then
Player.Say("No hatchet found. Stopping.")
return
end
end
-- Weight check
if Player.Weight > MAX_WEIGHT - MAX_WEIGHT_DIFF then
Player.Say("Making boards")
CreateBoards(hatchet)
Pause(1000)
end
-- Use hatchet
Player.UseObject(hatchet.Serial)
Pause(500)
if Targeting.WaitForTarget(1000) then
Targeting.Self()
else
-- Hatchet may have broken
hatchet = GetHatchet()
Pause(1000)
goto continue
end
Pause(CHOP_DELAY)
if CheckTreeStatus() then
Player.Say("Searching next tree")
Pause(1000)
end
::continue::
Pause(500)
end
end
function Main()
Journal.Clear()
local hatchet = GetHatchet()
if not hatchet then
Player.Say("Stopping - no hatchet")
return
end
Player.Say("Starting lumberjack")
ChopLoop(hatchet)
end
Main()
Version History
Version 8 - 7/10/2026, 2:52:04 PM - about 12 hours ago
Tree chop V1.3
Version 7 - 7/10/2026, 12:57:55 PM - about 14 hours ago
Tree chop V1.3
Version 6 - 7/10/2026, 12:49:58 PM - about 14 hours ago
Tree chop V1.3
Version 5 - 7/10/2026, 12:49:24 PM - about 14 hours ago
Tree chop V1.3
Version 4 - 7/10/2026, 12:18:38 PM - about 15 hours ago
Tree chop V1.2
Version 3 - 7/10/2026, 12:14:15 PM - about 15 hours ago
Tree chop V1.2
Version 2 - 7/10/2026, 12:00:33 PM - about 15 hours ago
Lumperjacking with news Hardvest changes V1.1
Version 1 - 7/10/2026, 11:42:49 AM - about 16 hours ago
Lumperjacking with news Hardvest changes V1.1
Original Version Saved - 7/10/2026, 11:05:58 AM - about 16 hours ago