Lewati ke konten utama

World

Handle world adalah snapshot bot terhadap peta sekarang: tile, player di world yang sama, drop yang tergeletak, mob AI, tanaman yang lagi tumbuh. Setiap accessor await snapshot fresh dari bot session, jadi panggilan beruntun langsung baca data live tanpa perlu refresh manual.

local world = getClient():world() -- atau getWorld()

Identitas

world.id

FieldType
SignatureWorld.id → string
Returnsstring — sama persis kayak world.name (protokolnya gak punya world id terpisah)

world.name

FieldType
SignatureWorld.name → string
Returnsstring — nama world dalam huruf kapital (mis. "PIXELSTATION")

world:size()

FieldType
Signature(self: World) → Vec2i
ReturnsVec2i — dimensi world dalam satuan tile (x = WIDTH, y = HEIGHT)
Asyncyes

world:entrance()

FieldType
Signature(self: World) → Vec2i
ReturnsVec2i — spawn point dalam koordinat tile (WorldStartPoint, kecuali TUTORIAL2 yang selalu return tile sleeping-pod)
Asyncyes
world.id
world.name
world:size()
world:entrance()

Tile

world:tile(point)

FieldType
Signature(self: World, point: Vec2i) → Tile?
ReturnsTile?nil kalau snapshot world belum siap (mis. lagi mid-warp). Koordinat OOB jatuh ke tile sentinel dengan semua layer nol
Asyncyes

world:tiles()

FieldType
Signature(self: World) → {Tile}?
Returns{Tile}? — array flat 1-indexed, row-major, panjangnya width * height entry. nil kalau snapshot belum siap
Asyncyes
local tile = world:tile(Vector2i.new(5, 5))

for tileIndex, tile in pairs(world:tiles()) do
tile.foreground
tile.background
tile.water
tile.wire
tile.point

local item = tile:item()
if item then
for k, v in pairs(item) do print("{}: {}", k, v) end
end

local tree = tile:tree()
if tree then
tree.point
tree.blockType
tree.mixed
tree:ready()
end
end

world:findTiles(blockType)

FieldType
Signature(self: World, blockType: number) → {Vec2i}
Returns{Vec2i} — list 1-indexed berisi semua tile foreground yang id-nya match blockType. Table kosong kalau gak ada hit
Asyncyes

Index scan cepat — berguna buat nyari gemstone, peti, portal, dll.

for i, point in ipairs(world:findTiles(9)) do -- 9 = Soil
print(point.x, point.y)
end

Player

world:player(uid)

FieldType
Signature(self: World, uid: string) → Player?
ReturnsPlayer?nil kalau gak ada player dengan uid itu di world (atau yang match itu local player dan dia di-exclude)
Asyncyes

world:players()

FieldType
Signature(self: World) → {[string]: Player}
Returns{[string]: Player} — map setiap player lain, key-nya userid (BUKAN 1-indexed). Local player gak ikut
Asyncyes
local p = world:player("userId")

for userId, p in pairs(world:players()) do
p.id
p.name
p.position
p.level
end

Collectable

world:collectable(id)

FieldType
Signature(self: World, id: number) → Collectable?
ReturnsCollectable?nil kalau gak ada collectable dengan CollectableID server-side itu di world
Asyncyes

world:collectables()

FieldType
Signature(self: World) → {[number]: Collectable}
Returns{[number]: Collectable} — map setiap collectable yang tergeletak, key-nya id
Asyncyes
local c = world:collectable(collectableId)

for id, c in pairs(world:collectables()) do
c.id
c.amount
c.position
c.blockType
c.inventoryType
c.isGem
c.gemType
end

Mob AI

world:enemy(id)

FieldType
Signature(self: World, id: number) → Enemy?
ReturnsEnemy?nil kalau gak ada AI dengan id itu yang ke-track. Id ini sama yang lo lempar ke client:hitEnemy(x, y, aiId)
Asyncyes

world:enemies()

FieldType
Signature(self: World) → {[number]: Enemy}
Returns{[number]: Enemy} — map setiap enemy AI yang ke-track, key-nya aiId
Asyncyes
local e = world:enemy(enemyId)

for id, e in pairs(world:enemies()) do
e.id
e.type
e.direction
e.behavior
e.position
e.velocity
e.parent
end

Growscan

world:growscan()

FieldType
Signature(self: World) → Growscan
ReturnsGrowscan — proyeksi panen agregat dari setiap tile yang lagi tumbuh + collectable yang udah jatuh. Pake :tiles() / :collectables() buat baca row-nya
Asyncyes

Aggregat pohon panen dan drop tanah berdasarkan (blockType, inventoryType):

local g = world:growscan()

for i, pair in pairs(g:tiles()) do
print("{} {} x{}", pair.blockType, pair.inventoryType, pair.amount)
end

for i, pair in pairs(g:collectables()) do
print("{} {} x{}", pair.blockType, pair.inventoryType, pair.amount)
end

Contoh harvest

Jalan ke setiap pohon yang siap dan tebang.

local client = getClient()
local world = client:world()

local function harvestable(tile)
local tree = tile:tree()
return tree ~= nil and tree:ready()
end

local function tryHarvest(tile)
while harvestable(tile) do
if not client:point():equals(tile.point) then
if not client:findPath(tile.point) then return end
while client:pathfinding() do sleep(100) end
else
client:hit(tile.point)
sleep(200)
end
end
end

for i, tile in pairs(world:tiles()) do
tryHarvest(tile)
end