Skip to main content

๐ŸŽฒ Script Variable

variable digunakan untuk manipulasi / mengambil data dari bot atau event hook. Variable dapat diakses dengan cara

{variable}
atau
{variable.variable}

setiap variable memiliki tipe data berbeda - beda, jika kamu tau programming kasarnya seperti ini:

Tipe dataDeskripsi
Objecttipe data object digunakan untuk "meyimpan" tipe data lainnya. Alhasil tipe data object harus diakses agar dapat digunakan
integer / numbertipe data nomer, bisa positif dan negatif
stringtipe data text
booleantipe data yang menentukan benar atau salah true untuk benar false untuk salah

- using variableโ€‹

berikut adalah contoh penggunaan variable bot yang merupakan tipe data Object

  • bot (object)
    • name -> ambil nama bot (string)
    • level -> ambil level bot (string)
    • location (object)
      • x -> ambil lokasi bot x (integer)
      • y -> ambil lokasi bot y (integer)

dan misalnya bot saat ini memiliki informasi sebagai berikut

  • name -> RudeusKami1
  • level -> 1
  • location x -> 10
  • location y -> 20

maka saat kita akses variablenya

{bot} tidak valid, karena bot adalah Object
{bot.name} akan menjadi RudeusKami1
{bot.level} akan menjadi 1
{bot.location.x} akan menjadi 10
{bot.location.y} akan menjadi 20

untuk penulisan variable ada khusus juga kalau variable memiliki spasi, yaitu setiap spasi harus diganti dengan _ Jadi, misalnya ada variable yang memerlukan kamu untuk ngetik seperti:

{bot.world.drops.Laser Grid} -> tidak bisa karena isi spasi
{bot.world.drops.Laser_Grid} -> bisa karena spasi diganti menjadi _

- double variableโ€‹

karena variable saat di eksekusi akan terganti menjadi value yang awal, variable juga bisa digabung kalau kamu butuh mengambil suatu value dari variable satu lewat variable lain.

Contoh skenario:

  1. ada variable bot yang nama botnya Test
  2. kamu mau ambil berdasarkan apa yang user berikan, contohnya ada player ketik name di chat, kita anggap name ini adalah hasil dari variable string {text}
  3. jadi saat digabung {bot.{text}} ini akan diganti menjadi {bot.name} dulu karena {text} adalah name
  4. setelah itu akan menghasilkan nama dari bot nya yaitu Test

perlu diingat, saat variable digabung variable tersebut tidak bisa digabung lagi. Oleh karena itu

  • {bot.{text.{text2}}} tidak bisa digunakan karena {text} yang merupakan gabungan dari {bot.} memiliki pergabungan lain yaitu {text2}

tapi yang seperti ini, bisa digunakan

  • {bot.{text}.{text2}} dihitung 1 pergabungan karena {text} dan {text2} saling terpisah

# playerโ€‹

variable untuk akses data player

  • name (string) -> nama player
  • moderator (boolean) -> apakah player moderator
  • admin (boolean) -> apakah player admin world
  • location (object: location) -> akses lokasi player location
  • bot (boolean) -> apakah player ini bot. Note: hanya bisa cek kalau botnya di 1 server, kalau beda server tidak akan terdeteksi sebagai bot
  • world (object: world) -> akses world player world
  • owner (boolean) -> apakah player owner world
  • userId (integer) -> akses user id player, suatu angka unik yang di dapat dari Growtopia

ini adalah variable yang hanya tersedia jika player adalah bot

  • status (string) -> status bot (Online / Offline)
  • uptime (string) -> uptime bot dalam format xx Hari xx Jam xx Menit xx Detik
  • uptime_day (integer) -> TOTAL uptime bot dalam hari
  • uptime_hour (integer) -> TOTAL uptime bot dalam jam
  • uptime_minute (integer) -> TOTAL uptime bot dalam menit
  • uptime_second (integer) -> TOTAL uptime bot dalam detik
  • inventory (object: inventory) -> akses inventory
  • level (integer) -> level bot
  • currentXp (integer) -> xp bot saat ini
  • targetXp (integer) -> target xp bot untuk ke level selanjutnya
  • lastWorld (string) -> ambil last world bot (world sebelumnya)
  • banDuration (integer) -> ambil durasi banned bot
  • server (string) -> ambil nama server tempat bot berada
  • var (object) -> akses variable yang di store kem bot lewat command var
  • job (query) -> akses job yang di jalankan oleh bot
    • <nama job> (object: job) akses variable jobnya akan null kalau job tidak sedang dijalankan
  • worldHistory (object: world history) akses history world yang bot join
  • setting (query) -> akses setting bot
    • <nama setting> (object: sesuai dengan tipe)
  • ping (integer) -> ping bot dalam milli detik

contohโ€‹

akses variable yang di store lewat bot

{bot.var.oke}

akses job yang sedang dijalankan oleh bot, akan null kalau tidak ada

{bot.job.collect.name}
{bot.job.buy_store.name}

contoh settingโ€‹

variable ini memerlukan nama setting dan untuk listnya bisa cek command setting

cek value dari setting script_command_prefix

{bot.setting.script_command_prefix} # !h 

cek setelah di rubah dari default

print "{bot.setting.script_command_prefix}" # !h
setting script_command_prefix "."
print "{bot.setting.script_command_prefix}" # .

# locationโ€‹

akses x dan y suatu lokasi

  • x (integer) -> lokasi X (horizontal)
  • y (integer) -> lokasi Y (vertical)

# inventoryโ€‹

akses data di inventory bot

  • size (integer) -> size inventory
  • filled (integer) -> jumlah slot inventory yang terisi
  • empty (integer) -> jumlah slot inventory yang belum terisi
  • gems (integer) -> jumlah gems di inventory
  • full (boolean) -> cek apakah inventory sudah full
  • items (object of array) -> semua item di inventory, setiap value dalam array nya berupa item
  • clothing.<tipe> (item -> ambil data item yang sedang di kenakan bot sesuai slot
  • totalItems (integer) -> cek total semua item
  • <nama item> (object: item) -> akses item di inventory (Contoh {inventory.Grass}) item

# contohโ€‹

dikarenakan ada variable items yang berupa array, maka kamu bisa gunakan command foreach untuk print semua item di inventory

foreach "{bot.inventory.items}" then
print "{var.value.name}"
foreach end

untuk variable clothing.<tipe> ada beberapa tipe yang bisa dicoba

  • HAT
  • SHIRT
  • PANTS
  • FEET
  • FACE
  • HAND
  • BACK
  • HAIR
  • CHEST (maksudnya leher)

jadi jika kamu ingin tau apa yang sedang di kenakan bot di tangan, bisa kamu lakukan dengan

print "{bot.inventory.clothing.HAND.name}"

# itemโ€‹

akses data suatu item

  • name (string) -> nama item
  • id (integer) -> id item
  • amount (integer) -> jumlah item
  • used (boolean) -> cek apakah item sudah dikenakan atau tidak

# contohโ€‹

{bot.inventory.Grass.amount} (akses jumlah Grass di inventory)
{bot.inventory.Grass_Seed.amount} (akses jumlah Grass Seed di inventory)

# worldโ€‹

akses data di world

  • name (string) -> nama world
  • drops (object: drops) -> akses dropped item world drops
  • tiles (object: tiles) -> akses tile / block di world tiles
  • players (object: players) -> akses player di world players
  • owner (string) -> nama owner world (kalau di world lock)

# dropsโ€‹

akses data dropped item di world

  • all (object: array) -> array berisi object drop
  • total (integer) -> total semua dropped item
  • <item> (integer) -> ambil total item spesifik, contoh: {drops.Dirt} total dropped item Dirt di world

# contohโ€‹

{bot.world.drops.Dirt} (akses jumlah dropped Dirt)
{bot.world.drops.Dirt_Seed} (akses jumlah dropped Dirt Seed)
{bot.world.drops.all.values} (akses semua nama droppped item di world)

# tilesโ€‹

akses data tile (block) di world

  • all (array) -> akses semua nama tile
  • backgrounds (array) -> akses semua nama background
  • foregrounds (array) -> akses semua nama foreground
  • fire (array) -> akses semua nama tile yang berisi fire
  • water (array) -> akses semua nama tile yang berisi water
  • total (integer) -> total semua tile
  • trees (object: trees) -> akses variable trees
  • <item> (integer) -> ambil total tile dengan nama spesifik, contoh: {tiles.Dirt} total block Dirt di world

# contohโ€‹

{bot.world.tiles.Dirt} (akses jumlah Dirt)
{bot.world.tiles.Dirt_Seed} (akses jumlah Dirt Tree)
{bot.world.tiles.backgrounds.length} (akses jumlah background)
{bot.world.tiles.foregrounds.length} (akses semua jumlah foreground / block)
{bot.world.tiles.fire.length} (akses semua jumlah fire)
{bot.world.tiles.water.length} (akses semua jumlah water)

# treesโ€‹

akses data tree di world, untuk ambil spesifik namanya harus berupa seed

  • ready (integer) -> total semua tree yang ready harvest
  • unready (integer) -> total semua tree yang belum ready harvest
  • <seed> (object) -> ambil data tree tertentu
    • ready (integer) -> ambil total yang ready harvest
    • unready (integer) -> ambil total yang belum ready harvest

# contohโ€‹

dengan variable ini, kamu bisa membuat skenario farming kalau ada tree yang ready!

{bot.world.tiles.trees.ready}
{bot.world.tiles.trees.Laser_Grid_Seed.ready}
{bot.world.tiles.trees.Laser_Grid_Seed.unready}

# playersโ€‹

akses data player di world

  • all (array yang datanya semua bertipe string) -> akses semua nama player di world array
  • <player> (object: Player) -> akses data player sesuai dengan nama di world, contoh: {players.RudeusKami1.location.x} ambil lokasi player RudeusKami1 saat ini

# arrayโ€‹

array atau list adalah kumpulan suatu variable yang bisa di akses lewat indeks nya

  • <index> (integer) -> akses data array, contoh {array.0} akan akses data array pertama, tipe data yang di akses akan sesuai dengan apa yang dibilang
  • contains.<data> (boolean) -> cek apakah array berisi suatu text
  • indexOf.<daya> (boolean) -> cek index dari data tersebut
  • iterator (object of iterator) -> buat baru variable iterator untuk list warning: ini akan buat baru
  • length (integer) -> akses jumlah data di array
  • distinct (object of array) -> ambil array baru yang tidak berisi duplikat
  • min-max (object of array) -> ambil list di dalam list, cek dibawah

# contohโ€‹

diberikan variable bertipe array yang menyimpan string. Anggap di dalam array ada

  • satu
  • dua
  • tiga

dan karena array indeksnya dimulai dari 0 maka

{array.0} -> satu
{array.1} -> dua
{array.2} -> tiga

untuk ngecek apakah data ada di array, kamu bisa gunakan .contains

{array.contains.satu} -> true
{array.contains.empay} -> false

untuk cek index dari suatu daya di array, kamu bisa gunakan .indexOf

{array.indexOf.satu} -> 0
{array.indexOf.dua} -> 1
{array.indexOf.tiga} -> 2

untuk ambil array baru tanpa duplikat

var "list" store list ["1","1","2","2","3","3","4"]
print "{var.list.distinct.values}" # 1,2,3,4

untuk ambil list di dalam list bisa gunakan

var "list" store list ["1","1","2","2","3","3","4"]
print "{var.list.0-2.values}" # 1,2

perhatikan 2 nya tidak termasuk karena formula nya index 0 ke x kurang 1, command ini cocok digunakan dalam penggunaan {bots.all} dengan command execute kalau misalnya setiap commandnya sama agar tidak banyak copy paste command

execute as "{bots.all.0-10}" print "hanya dijalankan oleh bot pertama sampai ke 10"
execute as "{bots.all.10-20}" print "hanya dijalankan oleh bot ke 10 sampai ke 20"

# jobโ€‹

variable untuk akses data suatu job

  • id (integer) -> id job (unik, alias tidak akan ada duplikasi)
  • name (string) -> nama job
  • cancelled (boolean) -> apakah job nya di cancel atau tidak
  • cancelReason (string) -> alasan kenapa job ke cancel (kalau ada)
  • runtime (string) -> lama jalannya job, dengan format xx Hari, xx Jam, xx Menit, xx Detik

# timeโ€‹

variable untuk akses waktu dalam format JAM:MENIT

  • growtopia -> akses waktu Growtopia
  • wib -> akses waktu Indonesia WIB
  • wita -> akses waktu Indonesia WIA
  • wit -> akses waktu Indonesia WIT
  • date -> akses tanggal (WIB)
  • day -> akses hari ini (WIB)
  • hour -> akses jam hari ini (WIB)
  • minute -> akses menit di jam saat ini (WIB)
  • second -> akses detik di menit saat ini (WIB)
  • month -> akses bulan ini (WIB)
  • year -> akses tahun ini (WIB)
  • dayName -> akses nama hari ini (WIB)
  • monthName -> akses nama bulan saat ini (WIB)

# contohโ€‹

{time.growtopia}
{time.wib}
{time.wita}
{time.wit}
{time.date} # 29/05/2022 13:00:00
{time.day} # 29
{time.hour} # 13
{time.minute} # 0
{time.second} # 0
{time.month} # 5
{time.year} # 2022
{time.dayName} # Minggu
{time.monthName} # Mei

# tileโ€‹

berbeda dengan tiles yang dimaksudkan untuk akses banyak Tile, ini variable khusus untuk 1 Tile saja

  • foreground (string) -> akses nama foreground tile
  • background (string) -> akses nama background tile
  • location (object: location) -> akses lokasi tile
  • type (string) -> akses tipe tile (ada banyak, currently not used)
  • isActive (boolean) -> apakah tile nya 'hidup' / mempunyai animasi (seperti Signal Jammer)
  • isSolid (boolean) -> apakah tile bertipe solid?
  • isPublic (boolean) -> apakah tile nya public? contohnya House Entrance yang Open to public nya di centang
  • hasWater (boolean) -> apakah tile ada water nya?
  • hasFire (boolean) -> apakah tile ada fire nya?

# lockโ€‹

berikut adalah variable spesial yang kalau tile nya bertipe lock (hl, wl, bl, sl, dll)

  • lockOwnerId (integer) -> user id pemilik lock
  • lockAdmins (object: array of integer) -> list userId yang merupakan admin dari lock

Setiap lock ini mainannya id bukan nama, karena Growtopia memang tidak menyediakan nama user ke data lock nya

# contohโ€‹

bot akan chat Aku owner! kalau bot adalah owner dari Small Lock terdekat

var "tile" store entity @t[foreground="Small Lock"]
execute if-true [{var.tile.lockOwnerId}={bot.userId}] chat "Aku owner!"

bot akan chat Aku admin! kalau bot adalah admin dari Small Lock terdekat

var "tile" store entity @t[foreground="Small Lock"]
execute if-true [{var.tile.lockAdmins.contains.{bot.userId}}="true"] chat "Aku admin!"

# treeโ€‹

berikut adalah variable spesial yang kalau tile nya bertipe tree

  • harvestTimeLeft (string) -> cek waktu harvest yang tersisa, formatnya sama seperti tree di Growtopia

# contohโ€‹

print sisa waktu harvest ke log

var "tile" store entity @t[foreground="Grass Seed"]
print "{var.tile.harvestTimeLeft}"

kalau masih belum bisa di harvest, akan menghasilkan (contoh)

5 days, 12 hours, 5 mins, 23 secs

kalau sudah bisa di harvest, akan menghasilkan (contoh)

ready to harvest

# dropโ€‹

berbeda dengan drops yang dimaksudkan untuk akses banyak Drop, ini variable khusus untuk 1 Drop saja

  • name (string) -> nama item yang ke drop
  • uid (integer) -> id item yang ke drop (unique)
  • amount (integer) -> jumlah item yang ke drop
  • location (object: location) -> akses lokasi drop

# randomโ€‹

variable special untuk generate random text dan number

  • text.<x> (string) -> generate text random beserta angka tanpa karakter spesial seperti !, sepanjang x
  • text_uppercase.<x> (string) -> sama seperti diatas tapi kapital
  • number.<x>_<y> (integer) -> generate angka random dari x sampai y

contohโ€‹

{random.text.5} # akan generate text acak sebanyak 5 karakter
{random.text_uppercase.5} # akan generate text acak kapital sebanyak 5 karakter
{random.number.1_10} # akan generate angka acak dari 1 sampai 10

# botsโ€‹

variable khusus untuk ambil data dari bot lain, variable ini juga ada limitasi karena sistem Hydra yang buat bot terpisah data. Setiap akses variable, nama bot diperlukan jadi kalau mau akses data dari bot dengan nama test misal, maka variablenya akan menjadi bots.test

Setiap akses akan menghasilkan variable player tapi ada beberapa variable yang akan menghasillkan hal berbeda, berikut adalah listnya

  • all (array of string) ambil semua nama bot di server
  • <name>.inventory (object of inventory) ambil data inventory bot
  • <name>.v_<variable> (object) akses variable yang dimiliki oleh bot
  • <name>.foreground (string) akses nama block tempat bot berdiri saat ini
  • <name>.background (string) akses nama background tempat bot berdiri saat ini
  • <name>.world (string) akses nama world world, note: tidak bisa menghasilkan variable bertipe world
  • <name>.job (object of array) akses nama job yang aktif di world berupa list

sisanya bisa kamu akses sesuai dengan variable player

contohโ€‹

ambil level bot dari bot dengan nama test

{bots.test.level}

ambil total gems bot dari bot dengan nama test

{bots.test.inventory.gems}

ambil variable bot, variable yang dimaksud ini adalah dari command var jadi kalau misalnya ada command

execute as "test" var "myVar" store text "This is varibale"
print "{bots.test.v_myVar}"

maka hasilnya akan This is variable

# scriptโ€‹

untuk akses data script yang saat ini sedang berjalan

  • name (string) -> akses nama script
  • bots (array of string) ambil semua nama bot yang di set ke script nya tapi hanya yang satu server dengan bot yang menjalankan script saat ini

contohโ€‹

ambil nama script

{script.name}

execute suatu command di bot pertama yang di assign ke script (ordernya sesuai dengan tabel yang ada di website)

execute as "{script.bots.0}" print "aku bot ke-1!"
execute as "{script.bots.1}" print "aku bot ke-2!"

perlu diingat, hanya akan menghasilkan nama bot kalau bot nya satu server dengan yang sedang menjalankan jadi kalau misalnya

  • bot ke-0 username Bot1 : hydras1
  • bot ke-1 username Bot2 : hydras1
  • bot ke-2 username Bot3 : hydras3

di hydras1

print "{script.bots.0}" # hasilnya Bot1
print "{script.bots.1}" # hasilnya Bot2
print "{script.bots.3}" # hasilnya null

di hydras2

print "{script.bots.0}" # hasilnya null
print "{script.bots.1}" # hasilnya null
print "{script.bots.3}" # hasilnya Bot3

# world_databaseโ€‹

variable khusus untuk membaca data world dari database, penanganan data bisa menggunakan command nya

  • all (array of world data) ambil semua nama bot di server
  • firstReady.<min> (object of world data) ambil world pertama yang bisa di harvest sesuai jumlah minimal ready yang diberikan
  • <nama> (object of world data) ambil data world sesuai nama yang diberikan

contohโ€‹

ambil data world ANAKFFMAJU

print "{world_database.ANAKFFMAJU}"

ambil nama world yang pertama ready dengan minimal tree yang bisa di harvest 1200

print "{world_database.firstReady.1200.name}"

cek semua world yang disimpan

foreach "{world_database.all}" then
print "{var.value.name}"
foreach end

total semua seed Pepper Tree dari world yang disimpan

var "seed" store text 0
foreach "{world_database.all}" then
var "seed" add "{var.value.drops.Pepper_Tree_Seed}"
foreach end
print "total {var.seed}"

# world dataโ€‹

variable yang di dapatkan dari world_database

  • name (string) -> nama world
  • foregrounds.<nama> (int) -> jumlah foreground dengan nama yang diberikan
  • backgrounds.<nama> (int) -> jumlah foreground dengan nama yang diberikan
  • drops.<nama> (int) -> total jumlah drop dengan nama yang diberikan
  • readyTrees.<nama> (int) -> total jumlah tree yang ready dengan yang nama diberikan
  • unreadyTrees.<nama> (int) -> total jumlah tree yang belum ready dengan yang nama diberikan
  • readyAt.<nama> (string) -> tree dengan nama <nama> terakhir yang ready
    • menghasilkan string tanggal kapan worldnya ready

contohโ€‹

ambil jumlah foreground Dirt, background Cave Background di world ANAKFFMAJU. Karena database, bot setidaknya harus join sekali dan save data di world ANAKFFMAJU

print "{world_database.ANAKFFMAJU.Dirt}"
print "{world_database.ANAKFFMAJU.Cave_Background}"

ambil jumlah gems di ANAKFFMAJU

print "{world_database.ANAKFFMAJU.drops.Gems}"

cek kapan tree Pepper Tree Seed ready di world ANAKFFMAJU

print "{world_database.ANAKFFMAJU.readyAt.Pepper_Tree_Seed}"