๐ฒ 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 data | Deskripsi |
|---|---|
| Object | tipe data object digunakan untuk "meyimpan" tipe data lainnya. Alhasil tipe data object harus diakses agar dapat digunakan |
| integer / number | tipe data nomer, bisa positif dan negatif |
| string | tipe data text |
| boolean | tipe 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:
- ada variable bot yang nama botnya
Test - kamu mau ambil berdasarkan apa yang user berikan, contohnya ada player ketik
namedi chat, kita anggapnameini adalah hasil dari variable string{text} - jadi saat digabung
{bot.{text}}ini akan diganti menjadi{bot.name}dulu karena{text}adalah name - 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 playermoderator(boolean) -> apakah player moderatoradmin(boolean) -> apakah player admin worldlocation(object: location) -> akses lokasi player locationbot(boolean) -> apakah player ini bot. Note: hanya bisa cek kalau botnya di 1 server, kalau beda server tidak akan terdeteksi sebagai botworld(object: world) -> akses world player worldowner(boolean) -> apakah player owner worlduserId(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 formatxx Hari xx Jam xx Menit xx Detikuptime_day(integer) -> TOTAL uptime bot dalam hariuptime_hour(integer) -> TOTAL uptime bot dalam jamuptime_minute(integer) -> TOTAL uptime bot dalam menituptime_second(integer) -> TOTAL uptime bot dalam detikinventory(object: inventory) -> akses inventorylevel(integer) -> level botcurrentXp(integer) -> xp bot saat initargetXp(integer) -> target xp bot untuk ke level selanjutnyalastWorld(string) -> ambil last world bot (world sebelumnya)banDuration(integer) -> ambil durasi banned botserver(string) -> ambil nama server tempat bot beradavar(object) -> akses variable yang di store kem bot lewat command varjob(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 joinsetting(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 inventoryfilled(integer) -> jumlah slot inventory yang terisiempty(integer) -> jumlah slot inventory yang belum terisigems(integer) -> jumlah gems di inventoryfull(boolean) -> cek apakah inventory sudah fullitems(object of array) -> semua item di inventory, setiap value dalam array nya berupa itemclothing.<tipe>(item -> ambil data item yang sedang di kenakan bot sesuai slottotalItems(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 itemid(integer) -> id itemamount(integer) -> jumlah itemused(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 worlddrops(object: drops) -> akses dropped item world dropstiles(object: tiles) -> akses tile / block di world tilesplayers(object: players) -> akses player di world playersowner(string) -> nama owner world (kalau di world lock)
# dropsโ
akses data dropped item di world
all(object: array) -> array berisi object droptotal(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 tilebackgrounds(array) -> akses semua nama backgroundforegrounds(array) -> akses semua nama foregroundfire(array) -> akses semua nama tile yang berisi firewater(array) -> akses semua nama tile yang berisi watertotal(integer) -> total semua tiletrees(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 harvestunready(integer) -> total semua tree yang belum ready harvest<seed>(object) -> ambil data tree tertentuready(integer) -> ambil total yang ready harvestunready(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 playerRudeusKami1saat 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 dibilangcontains.<data>(boolean) -> cek apakah array berisi suatu textindexOf.<daya>(boolean) -> cek index dari data tersebutiterator(object of iterator) -> buat baru variable iterator untuk list warning: ini akan buat barulength(integer) -> akses jumlah data di arraydistinct(object of array) -> ambil array baru yang tidak berisi duplikatmin-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 jobcancelled(boolean) -> apakah job nya di cancel atau tidakcancelReason(string) -> alasan kenapa job ke cancel (kalau ada)runtime(string) -> lama jalannya job, dengan formatxx Hari, xx Jam, xx Menit, xx Detik
# timeโ
variable untuk akses waktu dalam format JAM:MENIT
growtopia-> akses waktu Growtopiawib-> akses waktu Indonesia WIBwita-> akses waktu Indonesia WIAwit-> akses waktu Indonesia WITdate-> 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 tilebackground(string) -> akses nama background tilelocation(object: location) -> akses lokasi tiletype(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 yangOpen to publicnya di centanghasWater(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 locklockAdmins(object: array of integer) -> listuserIdyang 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 dropuid(integer) -> id item yang ke drop (unique)amount(integer) -> jumlah item yang ke droplocation(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 xtext_uppercase.<x>(string) -> sama seperti diatas tapi kapitalnumber.<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 scriptbots(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 serverfirstReady.<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 worldforegrounds.<nama>(int) -> jumlah foreground dengan nama yang diberikanbackgrounds.<nama>(int) -> jumlah foreground dengan nama yang diberikandrops.<nama>(int) -> total jumlah drop dengan nama yang diberikanreadyTrees.<nama>(int) -> total jumlah tree yang ready dengan yang nama diberikanunreadyTrees.<nama>(int) -> total jumlah tree yang belum ready dengan yang nama diberikanreadyAt.<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}"