ini adalah part terakhir dari tutorial subroutine basic. untuk selebihnya dapat di pelajari sendiri command2 khusus dan operator2 khususnya. kali ini kita akan membahas mengenai penggunaan subroutine di dalam subroutine dan menggunakan use untuk memanggil subroutine yang tidak ada didalam macro, menggunakan subroutine sebagai trigger dan beberapa perintah tambahan yang berguna.
memanggil subroutine dengan subroutine
sebelumnya saya sudah menjelaskan cara memanggil subroutine melalui macro. namun perlu diketahui bahwa subroutine juga dapat dipanggil melalui subroutine dengan cara yang sama.
contoh :
sub belajar {
my $a;
$a = panggil (1);
return $a;
}
sub panggil {
$i = $_[0];
$i++;
return $i;
}
pada sub diatas $result akan berupa angka 2 karena angka 1 telah ditambah pada sub panggil.
menggunakan perintah use
perintah use adalah perintah untuk memakai modul2 yang sudah ada di openkore dan perl module.
cara penggunaannya cukup menggunakan "use module" sedangkan module2 yang ada di openkore terletak di file bernama src yang terletak di openkore/src/
contoh penggunaan module :
sekarang kita akan membuka folder src. lalu buka file bernama misc.pm, lalu kita menemukan baris subroutine untuk mencari nick 1 layar yang cocok, yang digunakan di command follow, bernama getIDFromChat dengan input berupa \%players, $user, $after dengan $after sebagai input yang akan dicari. maka untuk menggunakannya kita bisa menulis subroutine dengan perintah use Misc agar sub didalam Misc.pm dapat kita panggil melalui macro. sehingga menjadi seperti ini.
automacro cari {
pubm /^(\S+)/
call {
$nick = belajar ("$.lastMatch1")
do c $nick
}
}
sub belajar{
use Misc; #module yang digunakan#
my $result;
my $user = $_;
my $after = $_[0];
my $targetID = getIDFromChat(\%players, $user, $after); #sub didalam module Misc.pm#
if (defined $targetID) {
$result = $players{$targetID}{name};
}
else {
$result = "tidak ada"
}
return $result;
}
maka jika kita mengetikan "naya" dan di sekitar kita ada player bernama NAYA, naya, nayaaaa, atau apapun yang mengandung elemen "naya" maka macro akan memberi respon berupa nick pertama yang ditemukan. jika tidak ada, maka responnya adalah "tidak ada"
sedangkan penggunaan module bawaan perl dapat di pelajari lagi di http://perldoc.perl.org/functions/use.html
menggunakan subroutine sebagai trigger
selain dapat dipanggil melalui macro, subroutine juga dapat kita pakai sebagai trigger dengan menggunakan eval. cara penggunaannya ialah dengan menulis "eval main::namasub(input)" dan nilai yang harus di return adalah angka 0 dan 1, angka 1 berarti true yang artinya macro akan segera berjalan dan 0 berarti false yang artinya macro tidak akan ter trigger
contoh :
kita ingin membuat bot kita merespon jika di sekitarnya ada player yang hiding, maka macronya dapat dibuat seperti ini
automacro teshide {
eval main::triggerhide()
run-once 1
timeout 10
call {
do c beware someone is hiding somewhere near
release teshide
}
}
sub triggerhide {
use strict;
use Misc;
my $result = 0;
for my $player (@{$playersList->getItems()}) {
my $plstatus = $player->statusesString;
next unless $player;
if ( $plstatus =~ /(Hiding|Cloaking|Chase Walk)/i) {
$result = 1;
}
}
return $result;
}
sedikit perintah tambahan di dalam perl
di dalam perl sendiri ada beberapa perintah tambahan yang bisa dipakai untuk memudahkan kita membuat script. diantaranya adalah :
quotemeta
berguna untuk mengubah smua kata2 yang mengandung metacharacter menjadi bukan metacharacter dengan menambahkan tanda \ di sebelah metacharacter. cara penggunaannya adalah :
$a = quotemeta ("$a");
split
split berguna untuk merubah variable scalar menjadi array. penulisannya "split (pemisah,$var)"
contoh:
$scalar = "abc,def,ghi";
@array = split (/,/, $scalar);
atau
$scalar = "abc => def => ghi"
@array = split (/=>/, $scalar);
join
join merupakan kebalikan dari split. gunanya adalah untuk merubah array menjadi variable scalar, cara penulisannya ialah "join (pemisah,@var)"
contoh :
@array = (abc, def, ghi);
$scalar = join (/,/, @array);
lc dan uc
lc berguna untuk mengubah huruf besar menjadi huruf kecil, uc adalah kebalikannya cara penulisannya adalah lc (kata) atau uc (kata)
contoh :
$a = lc ("ABC");
atau
$a = uc ("abc");
rand
rand berguna untuk merandom variable numeric di perl. cara penggunaannya adalah dengan rand($var)
contoh :
$var = rand(10);
akan memberi output berupa angka dari -10 sampai 10, bisa berupa koma
jika kita ingin bilangan bulat tanpa angka minus, dapat menggunakan perintah "int" untuk menghasilkan bilangan integer
contoh:
$var = int(rand(10));
untuk perintah lainnya dapat di cek di http://perldoc.perl.org/index-functions.html
\S+
ReplyDeletemy $user = $_;
my $after = $_[0];
syntax getIDFromChat
\%players , tanda \ diikuti % maksudnya apa.
tolong jelasin 4 pertanyaan diatas
\S+
ReplyDeletemy $user = $_;
my $after = $_[0];
syntax getIDFromChat
\%players , tanda \ diikuti % maksudnya apa.
tolong jelasin 4 pertanyaan diatas
"/S+" itu bagian dari regular expression, "/S" adalah pengganti selain spasi, dan "+" tanda bahwa karakter dibelakangnya lebih dari 0, jadi "/S+" bisa dikatakan adalah karakter selain spasi yang jumlahnya lebih dari 0, misal 123, abcd, ab12 dll.
Delete"my" sendiri udh dijelaskan di awal2 bagian variable. adalah command untuk mendeclare sebuah variable, agar variable local di dalam subroutine bisa dipakai, kita harus menuliskan nama variablenya dengan "my". misal saya ingin menggunakan "$abc" sebagai variable yang akan dipakai, maka sebelum menggunakan "$abc", kita harus mendeclare "$abc" dengan command seperti ini, "my $abc;"
jika kita ingin langsung mengisi variable "$abc" saat mendeclare, kita dapat langsung menuliskan nilainya, misal "my $abc = 123;" maka $abc akan sama dengan 123.
lalu lambang "$_" adalah penanda variable kosong. yang artinya variable tersebut tidak memiliki isi, atau akan di isi oleh nilai kemudian.
sedangkan lambang "$_[0]" berarti variable tersebut berisi input paling awal ke dalam subroutine, angka dimulai dari 0, sehingga untuk mengambil input ke 2, kita akan menggunakan $_[1], dst.
lalu "getIDFromChat" sebetulnya bukan bagian dr perintah dasar, tp merupakan nama subroutine yang ada di dalam Misc.pm yang ada di dalam folder src. cara menggunakan subroutine yang ada di dalam folder lain bisa dibaca di bagian menggunakan use.
lalu %players adalah variable hash. untuk penjelasan hash bisa dilihat lagi di bagian variable. lalu kenapa kita menggunakan tanda /, gunanya untuk mentransfer data array dan hash ke dalam subroutine. untuk menaruh array atau hash ke dalam sub tidak bisa langsung menulis seperti ini:
namasub(@array)
tapi harus seperti ini
namasub(\@array)
begitupula dengan hash.
apa ada yang kurang jelas?
kalau mau memasukkan nama karakter yang sedang trigger macro gimana ya??? bukan karakter orang tapi karakter yang di console tersebut... thx..
ReplyDelete