function FindNearestHarvestable(harvestables) local dist = 10000; local name, address; local found = false; for i = 1, #harvestables do distToHarvestable = distance(player.X, player.Z, harvestables[i].X, harvestables[i].Z); if distToHarvestable < dist then found = true; dist = distToHarvestable; address = harvestables[i].Address; name = harvestables[i].Name; end; end; if found == false then name = nil; address = nil; dist = -1; end; return name, address, dist; end; function CPlayer:harvestmem() local harvestables = {}; for i = 1, 200 do nearAddress = memoryReadIntPtr(getProc(), addresses.staticTablePtr, ((i -1) * 4 )); -- printf("\r%x\t\t\n", nearAddress); nearPawn = CPawn(nearAddress); if( nearPawn.Address ~= 0) then if( nearPawn.Id >= 560000 and nearPawn.Id < 570000 ) then printf("\rHarvestable found id %d %s %x\t\t\n", nearPawn.Id, nearPawn.Name, nearAddress); table.insert(harvestables, nearPawn); end; end; end; local name, address, dist = FindNearestHarvestable(harvestables); if name ~= nil and dist < 200 then printf("\rClosest harvestable is %s at %d\t\t\n", name, dist); memoryWriteInt(getProc(), player.Address + addresses.pawnTargetPtr_offset, address); yrest(200); RoMScript("UseSkill(1,1);"); local startHarvestTime = os.time(); local hasTarget = player:hastHarvestableTarget(); while hasTarget do if( os.difftime(os.time(), startHarvestTime) > settings.profile.options.HARVEST_TIME ) then break; end if( self.Battling ) then break; end yrest(500); player:update(); yrest(50); hasTarget = player:hastHarvestableTarget(); end; else print("No harvestables in range.\n"); end; end; function CPlayer:hastHarvestableTarget() local proc = getProc(); self.TargetPtr = memoryReadInt(proc, self.Address + addresses.pawnTargetPtr_offset); if( self.TargetPtr == nil ) then self.TargetPtr = 0; end; if( self.TargetPtr == 0 ) then return false; end; local tmp = CPawn(self.TargetPtr); -- You can't be your own target! if( self.TargetPtr == self.Address ) then return false; end if( tmp.HP < 1 ) then return false; end; return (tmp.Id >= 560000 and tmp.Id < 570000); end;