Page 1 of 16 1234511 ... LastLast
Results 1 to 15 of 233
http://idgs.in/13940
  1. #1
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Question [TUTORIAL] JASS - Introduction

    Tutorial Index

    coming soon ? - vJass syntax


    -- Introduksi --

    A. Pengenalan

    1. Apa itu JASS, sejenis bahasa setankah ??

    JASS merupakan bahasa pemrograman yg digunakan dalam map warcraft dan script AI ( referensi lain; LUA homuncullus ragnarok jg menggunakan JASS ).

    2. GUI ( Graphic User Interface ) dan JASS

    GUI pada "Hakikatnya" merupakan JASS, namun blizzard membuat GUI di map editor agar lebih mudah dipahami oleh orang-orang ( Mapper ). ketika kamu memasukan Trigger; Add Action, Add Condition, atau Add Event, GUI "membuat" script jass otomatis untuk anda.
    Anda bisa mencoba dengan "Convert to custom Text" ketika berada di Trigger Module. Edit > Convert To Custom Text. nah dari sana bisa dilihat JASS yg dibuat melalui GUI yg anda masukan.

    2.1 Manakah yg lebih baik ??.. GUI atau JASS ???

    Mitos Tentang JASS: ( Hal ini SALAH )
    GUI lebih bagus karena lebih mudah
    JASS lebih bagus karena lebih sulit

    GUI lebih mudah dibandingkan dengan JASS: Mungkin bila anda hanya membuat hal kecil, namun untuk hal besar seperti sistem game JASS memiliki keuntungan

    Kamu bisa Melakukan semua di GUI untuk apa JASS ?: Ini mungkin benar, Tapi karena kamu bisa membuat fungsi sendiri di JASS, hal ini jauh mempermudah pekerjaan kamu

    Kamu Harus Mengetahui GUI Sebelum Belajar JASS: Menurut Vexorian ( gw kurang setuju ... ) lebih baik apabila belajar JASS sebelum belajar GUI

    Kamu harus mengetahui bahasa pemrograma untuk mengerti JASS: GUI sebenarnya juga merupakan bahasa pemrogaman secara simple. Kamu bisa mempelajari JASS sendiri dan bahasa pemrogamannya akan secara "magis" muncul ketika kamu belajar JASS

    Kamu harus mengetahui Pemrograman bahasa XYZ untuk belajar JASS: INI sama sekali TIDAK BENAR

    Map itu bagus karena dibuat dari JASS
    Map itu bagus karena tidak dibuat dari JASS
    Map itu bagus karena dibuat dalam GUI
    Map itu bagus karena tidak dibuat dalam GUI

    imo map itu bagus karena usaha pembuatnya

    -Vexorian Courtesy, taken from wc3campaigns - translated

    secara mendasar yang membedakan GUI dan jass adalah keuntungannya

    Keuntungan JASS

    Functions: Kamu bisa membuat Function sendiri ( akan dijelaskan nanti )
    Effisiensi: Mengetik Lebih cepat daripada mengklik mouse
    Kemampuan Meng"coding" Lebih Optimal: Otomatisasi GUI tidak selalu baik, kadang eksekusi trigger bisa lebih lambat melalui GUI
    Local variables dan MUI ( multi instancibility ) : Trigger GUI sulit untuk bisa di-eksekusi secara simultan ( ch: 10 player menggunakan skill yg ditrigger secara bersama2x )
    Akses ke fungsi 'tersembunyi' : Untuk hal yang entah mengapa GUI tidak mempunyai akses ke fungsi ini.

    Permasalahan JASS

    Case Sensitive : Jass Case sensitive apabila kamu menulis Player itu tidak sama dengan player
    MissType : Permasalahan Tipikal pemrograman bahasa ...

    B. Awal ( ga ada ide buat judul ::laugh:: )
    * Disarankan WE ada di sebelah anda beserta JASSCraft; link disediakan ( optional )

    1. Langkah Awal menuju Jati diri

    Ok ... untuk langkah awal buatlah map 32x32 .... 94x94 juga tidak mengapa itu semua terserah kamu ....
    Buka Trigger Module .... Pilih Map Initialization ... hapus semua isinya .... kemudian rename ke Tes JASS. Langkah selanjutnya
    Add Event - Player - Player skip a cinematic sequence
    Add Actions - Game - Display Text ( All Players ) Text : Saya Mr.X

    Ok ... semua sudah .... sekarang ke Edit>Convert To Custom Text
    harusnya sekarang terliahat seperti

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_003" )
    endfunction
    
    //===========================================================================
    function InitTrig_Tes_JASS takes nothing returns nothing
        set gg_trg_Tes_JASS = CreateTrigger(  )
        call TriggerRegisterPlayerEventEndCinematic( gg_trg_Tes_JASS, Player(0) )
        call TriggerAddAction( gg_trg_Tes_JASS, function Trig_Tes_JASS_Actions )
    endfunction
    Hah ?? apa yang terjadi dengan "Saya Mr.X salam kenal" ???
    *"TRIGSTR_003" merupakan string dari war3map.wts, kemungkinan dicoding dalam C++. hal ini tidak perlu dipedulikan ....

    Ubah script di atas menjadi

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        call DisplayTextToForce( GetPlayersAll(), "Saya Mr.X" )
    endfunction
    
    //===========================================================================
    function InitTrig_Tes_JASS takes nothing returns nothing
        set gg_trg_Tes_JASS = CreateTrigger(  )
        call TriggerRegisterPlayerEventEndCinematic( gg_trg_Tes_JASS, Player(0) )
        call TriggerAddAction( gg_trg_Tes_JASS, function Trig_Tes_JASS_Actions )
    endfunction
    Di script atas terdapat 2 fungsi , Trig_tes_JASS_Actions dan InitTrig_tes_JASS.

    Setiap Trigger dalam Trigger editor selalu diawali InitTrig_<NAMATRIGGER> ( spasi diganti dengan _) karena hal inilah kamu ga bisa pake karakter unik dalam nama trigger ::laugh:: . fungsi ini selalu di call pada awal inisiasi dari map ( loading ).

    Untuk sekarang kita akan berbicara mengenai fungsi InitTrig_Tes_JASS. dalam scirpt kita akan melihat baris.

    Code:
    //===========================================================================
    function InitTrig_Tes_JASS takes nothing returns nothing
        set gg_trg_Tes_JASS = CreateTrigger(  )
        call TriggerRegisterPlayerEventEndCinematic( gg_trg_Tes_JASS, Player(0) )
        call TriggerAddAction( gg_trg_Tes_JASS, function Trig_Tes_JASS_Actions )
    endfunction
    Line di atas untuk sementara kita anggap sebagai "setup" dari trigger yang di save dalam variable gg_trg_Tes_JASS. Line selanjutnya yang kita stabillo adalah :

    Code:
    call TriggerAddAction( gg_trg_Tes_JASS, function Trig_Tes_JASS_Actions
    pemanggilan fungsi ini berguna untuk menyatakan action yang ada dalam function Trig_Tes_JASS_Actions di atas.
    untuk sekarang kita hanya mengedit bagian fungsi atas ... jangan ubah yg lain .... untuk sekarang ....

    Now The Real Struggle Begins......

    C. Main Course ( Steak Function well done dan Local Wine )

    1. Tes Local Variable

    Syntax untuk membuat Local Variable adalah sbb:

    Code:
    Local <TIPE VARIABEL> <NAMAVARIABEL>
    alternatif untuk menset value dari local
    Local <TIPE VARIABEL> <NAMAVARIABEL> = VALUE
    * Nama variable tidak boleh mengandung nama dan karakter unik
    * Local harus ditempatkan diawal functions

    1.1 String

    Tipe Variabel pertama yg akan kita masak adalah Tipe Strings ... text yang berada dalam "".

    Kita pakai variabel 'x' dan jangan lupa kita hanya mengubah yang ada dalam function Trig_Tes_JASS_Actions takes nothing returns nothing. ok ... sekarang cobalah :

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string x = "Saya Mr.X"
        call DisplayTextToForce( GetPlayersAll(), x )
    endfunction
    dalam fungsi di atas kita merubah penempatan "Saya Mr.X" kedalam local variable. yang kemudian kita panggil untuk memperlihatkan isi pesan.

    *nama variabel tidak perlu dimasukan dalam ""

    Test mapnya ..... dan pencet esc
    Dan lihat apa pesan yg ditunjukan ...

    Ok now lets move

    kita bisa memasukan local sebanyak yg kita mau .... sekarang kita akan coba memakai 2 variabel

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string x = "Saya Mr.X"
        local string y = "Sang Dewa"
        call DisplayTextToForce( GetPlayersAll(), x )
        call DisplayTextToForce( GetPlayersAll(), y )
    endfunction
    Ketika kamu memencet esc .... kedua pesan akan ditampilkan ....

    Menset Variabel

    Kita bisa menset ulang isi dari variabel .... caranya dengan menggunakan statement set

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string x = "Saya Mr.X"
        local string y = "Sang Dewa"
        call DisplayTextToForce( GetPlayersAll(), x )
        call DisplayTextToForce( GetPlayersAll(), y )
        set y = "Dewa Kegelapan"
        call DisplayTextToForce( GetPlayersAll(). y )
    endfunction
    test mapnya dan pencet esc

    tiga pesan akan ditampilkan .... dengan variabel y yang sudah dirubah

    Concatenation

    merupakan operasi untuk menggabungkan string, ok langsung saja ke contoh

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string x = "Saya"
        local string y = " Mr.X"
        call DisplayTextToForce( GetPlayersAll(), x+y )
    endfunction
    test mapnya dan pencet esc

    kedua string yang telah digabungakan akan ditampilkan ....

    Null Strings

    String yang null ( tidak ada ) bisa menjadi null atau atau ""
    Tapi string tidak bisa di-null, gunakan "" untuk mengosongkan string.

    Arrays

    Array pada dasarnya merupakan Grup dari variable ... memilik nama yang sama hanya beda index .... anggap sebagai buku yang memiliki halaman ... dimana ttiap halaman berbeda isinya ..... dan 0 termasuk array. untuk menggunakan array kita memakai

    Code:
    local <TIPEARRAY> array <NAMAARRAY>
    contoh
    local string array x
    *ingat ... nomor indeks tidak bisa dimasukkan ketika pendeklarasian variabel hal ini dilakukan ketika pemanggilan / penge-set-an

    cara penggunannya pun berbeda dengan yg biasa harus mengguanakan <NAMAVARIABEL>[INDEXARRAY]..... contoh
    set x[1] = "Wow"

    sekarang kita akan praktek ...

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
         local string array x
         set x[1] = "Wow"
         set x[2] = " Magic"
         call DisplayTextToForce( GetPlayersAll(), x[1]+x[2] )
    endfunction
    test mapnya dan pencet esc

    kedua string array yang akan ditampilkan ....

    Wow Magic

    Catatan Penting ....

    Variable harus memiliki Value sebelum game bisa mengakses

    cobalah ini ....
    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string x
        call DisplayTextToForce( GetPlayersAll(), x )
    endfunction
    tidak terjadi apa2x bukan ??.... hal ini karena variabel tidak bisa diakses

    Kl ada pertanyaan, gw coba bantu ... tp ga yakin bisa jawab semua ::laugh::

    Ok ... sesi pertama tentang string .... selesai ..... nanti aka saya post lanjutannya .... ( cape nih pegel2x badan gw )

    Gw compile dari tutorialnya vexorian ( my teacher ... ::bouncy: ..... jadi ada kemiripan .... ( 89% ) ... uh .. ngrasa ga enak ....

    Link Penting :
    Jangan lupa untuk register
    JASSCraft 1.1.3
    Manual JASS
    Last edited by rizzuh; 15-04-08 at 14:50. Reason: Revamped

  2. Hot Ad
  3. #2
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default Sesi 2

    Ok ... now the Next Session Begin

    sekarang kita bermain 4n9k4

    1.2 Integers

    Sekarang kita akan mempelajari integer .....,apakah integer itu ?... untuk mudahnya integer adalah angka tanpa bilangan
    desimal serta nilainya bisa negatif.

    I2S

    Fungsi ini akan mengubah integer menjadi string .... agar mudah diingat I2S berarti Integer To String .....

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer a = 24
       call DisplayTextToForce( GetPlayersAll(), "nilai a adalah " + I2S(a) )
    endfunction
    Pencet Esc .... Pesan yang ditampilkan kira2x : nilai a adalah 24
    selain I2S masih ada konversi yg lain ( nanti dijelaskan )

    Operator Integer
    x mengkali
    / membagi
    + menambah
    - mengurangi
    wew ... kok jadi ky pelajaran anak SD .... : D

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer a = 5
       local integer b = 2+2
       local integer c = 4-1
       local integer d = 2*1
       local integer x
       set x = a+b+c*d
       call DisplayTextToForce( GetPlayersAll(), "1. nilai r adalah " + I2S(x) )
       set x = (a+b)*c-d
       call DisplayTextToForce( GetPlayersAll(), "2. nilai r adalah " + I2S(x) )
       set x = b/d*(c+c+a)
       call DisplayTextToForce( GetPlayersAll(), "3. nilai r adalah " + I2S(x) )
    endfunction
    Hasilnya kira2x
    1. nilai r adalah 15
    2. nilai r adalah 25
    3. nilai r adalah 22

    *pembagian dalam integer tidak akan dibulatkan ke atas ... ch 4.6 jadi 4

    sekarang kita coba dengan array

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer a = 5
       local integer array b
       set b[a] = 10
       set b[a+12] = 4
       set b[a+a] = b[a+12] - b[a]
       set b[1112] = b[a+a] * b[a+12]
       call DisplayTextToForce( GetPlayersAll(), "1. nilai pertama adalah " + I2S(b[1112]) )
       call DisplayTextToForce( GetPlayersAll(), "2. nilai kedua adalah " + I2S(b[a+a]) )
       call DisplayTextToForce( GetPlayersAll(), "3. nilai ketiga adalah " + I2S(b[a+12]+b[a+a]*b[a+a]) )
       call DisplayTextToForce( GetPlayersAll(), "4. nilai keempat adalah " + I2S(b[a]/b[a+12]) )
    endfunction
    Hasilnya kira2x
    1. nilai pertama adalah -24
    2. nilai kedua adalah -6
    3. nilai ketiga adalah 40
    4. nilai keempat adalah 2

    * liat nomer 4 ... seharusnya 10/4 jadi 2.5 dan biasanya dibulatkan ke atas ... tapi di sini jadi 2 karena tidak ada
    pembulatan

    * saya lupa di sesi sebelumnya ... maksimum index array sebesar 8191

    1.3 Reals

    Sama seperti integer, real adalah angka, yang membedakannya adalah mereka bisa memiliki pecahan desimal. Memiliki operasi
    yang sama seperti integer dan angka tidak aka dibulatkan.

    Ok mari kita mencoba dengan R2S ... Real To String

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local real r = 37 / 5
       call DisplayTextToForce( GetPlayersAll(), "nilai r adalah " + R2S(r) )
    endfunction
    Hmmm... kenapa jadi 7.0000 bukannya 7.4000 ???...

    37 dan 5 dibaca oleh game sebagai integer .... jadi pembagian dilakukan antar integer baru kemudian diubah ke real. Jadi
    cara untuk menggunakan real adalah dengan memasukan '.0' agar game membacanya sebagai real ....
    sekarang ganti 37 jadi 37.0 dan 5 menjadi 5.0

    Hasilnya menjadi : nilai r adalah 7.4000

    Sekarang kita akan coba R2I ... Real to Integer

    Code:
     code prob ... sorry
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local real a = 37 / 5
        local integer i = R2I(a)
        call DisplayTextToForce( GetPlayersAll(), "nilai i adalah " + I2S(i) )
    endfunction
    Hasilnya 7 .... tidak ada pembulatan

    menggabungkan Integer dan Real

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer h = 13
       local integer i = 7
       local real r = (h+i) / 2.5
       set h = R2I(r) + 10
       call DisplayTextToForce( GetPlayersAll(), "nilai h adalah " + I2S(h) )
    endfunction
    Ok .... Sampai di sini sesi ke 2 .... dah malem ... good sleep .. and good fight ....

    Next Boolean and ( maybe ... ) arguments .....

  4. #3
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default Last Session

    Ok .... Next Course Boolean and old friend named functions!!!

    cinematic skip trigger yang lama kita pakai lg

    1.4 Boolean

    Boolean merupakan value benar atau salah

    Perbandingan

    == sama dengan
    != Tidak sama dengan

    * jangan lupa ketika mengoperasikan boolean sama dengan .... '==' ( sama dengannya 2x )

    khusus untuk integer dan real
    < kurang dari
    <= Kurang dari atau sama dengan
    >= Lebih dari atau sama dengan
    > Lebih dari

    Operator

    Not

    Not true akan menjadi false
    Not false akan menjadi true

    and : Kedua Value benar
    True dan True menjadi True
    False dan false menjadi false
    true dan false menjadi false
    false dan true menjadi false

    or : salah satu value benar
    True dan true menjadi true
    True dan false menjadi true
    False dan true menjadi true
    false dan false menjadi false

    Ok ... untuk lebih jauh penggunaannya kita akan lanjut

    1.5 Statement Test

    if ... then ... else ...

    if < boolean > then
    ... < actions >
    endif

    ketika boolean benar, maka actions akan dieksekusi

    atau

    if < boolean > then
    ... < Actions >
    elseif <boolean
    ... < Actions >
    else
    ... < Actions >
    endif

    ketika boolean benar, maka actions akan dieksekusi, apabila salah akan dievaluasi boolean kedua ... apabila masih salah
    maka action pada else yang akan dieksekusi

    * jangan lupa menambahkan endif ketika menggunakan if

    ok ... untuk pemanasan kita akan coba fungsi :

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer a = GetRandomInt(1,10)
       local integer b = GetRandomInt(1,10)
       call DisplayTextToForce( GetPlayersAll(), "nilai A adalah " + I2S(a) )
       call DisplayTextToForce( GetPlayersAll(), "nilai B adalah " + I2S(b) )
       if a > b then
           call DisplayTextToForce( GetPlayersAll(), "Maka A lebih besar dari B")
       elseif a < b then
           call DisplayTextToForce( GetPlayersAll(), "Maka B lebih besar dari A")
       else
           call DisplayTextToForce( GetPlayersAll(), "Maka A sama dengan B")       
       endif 
    endfunction
    Pencet esc ... sampai beberapa kali ... dan lihat pesan yang ditampilkan

    Ok sampai disini dulu Boolean dan if... then ... else ..., karena nanti masih ada lanjutan yg berhubungan dengan kedua sejoli
    ini

    1.6 Global Variables

    Kita selama ini menggunakan local dalam test, tapi selain local masih ada global variable. global variable tidak dipakai
    secara spesifik dalam fungsi namun bisa digunakan di [u]semua[/i] fungsi... inilah yang membedakan local dengan global

    1.6.1 Variable Editor

    Lalu bagaimana cara membuat global ??... salah satu caranya adalah dengan menggunakan variable editor... di modul trigger
    edit>variables ( ctrl+B ).
    ok sekarang kita coba membuat global variable bernama glb
    masuk ke variable editor ... new variable ... variable name : glb .. variable type integer .... ok kl semua sudah kita lanjut
    ke bawah

    global yang di-deklarasikan dari variable editor menggunakan prefix udg_<NAMAVARIABEL>. ( udg berarti USER DEFINED GLOBAL )
    ingat hal ini ketika menggunakannya

    ok sekarang coba test sendiri dengan menggunakan global variable .... dengan cara2x sebelumnya

    apabila sudah puas mencoba ... kita akan melanjutkan ke ...

    1.7 Function Test

    Anda tentu masih blank tentang apakah function itu ??....

    ---------------------------------------------------------------
    function Trig_Tes_JASS_Actions takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll(), "Wassap ??")
    endfunction
    ---------------------------------------------------------------

    yang diatas merupakan function
    function merupakan kumpulan dari "action" dan "statement" yang bisa dipanggil "call" apabila diperlukan. Function bisa
    mengambil atau tidak mengambil "argument", dan function bisa saja mengembalikan sebuah "value".

    Ketika kita melihat

    function Trig_Tes_JASS_Actions takes nothing returns nothing

    Kita melihat sebuah function yang memiliki/menerima argument kosong ("takes nothing") dan tidak mengembalikan value
    ("returns Nothing"). itulah yang dimaksud dengan syntax "nothing".

    1.7.1 Arguments
    Suatu fungsi mungkin bisa hanya mengambil 1 argument, ketika suatu fungsi mengambil argument, kita menggunakan

    function Trig_Tes_JASS_Actions takes <TIPEARGUMEN> <NAMAARGUMEN> returns nothing

    namun kalau menggunakan argumen lebih dari 1 ... kita menggunakan , ( koma )

    function Trig_Tes_JASS_Actions takes <TIPEARGUMEN1> <NAMAARGUMEN1>, <TIPEARGUMEN2> <NAMAARGUMEN2> returns nothing

    argumen dipisahkan oleh koma sampai pada "returns" yang berarti akhir dari list argument.

    1.7.2 Memanggil (call) functions

    untuk memanggil fungsi, kita menggunakan

    call <NAMAFUNGSI>(ARGUMEN1,ARGUMEN2,...ARGUMENn)

    apabila fungsi tidak mengambil argumen

    call <NAMAFUNGSI>()

    fungsi bisa memanggil fungsi lainnya, ASALKAN fungsi tersebut ditulis DIATAS fungsi yang memanggil.

    Pada Editor Frozen Throne terdapat fitur "Custom Script Sections". Pada trigger editor, klik nama map, dan kamu melihat
    bagian custom script. itu merupakan tempat untuk menyimpan fungsi. isi dari custom script akan dimasukan ke dalam map
    script SEBELUM isi dari trigger dimasukan. jadi custom script bisa menjamin suatu fungsi ada "diatas" dan bisa
    diakses oleh semua fungsi.

    ok ... saya terlalu lama berbicara ( atau mengetik ? ) ... saatnya kalian untuk mengetik... /gg

    Code:
    function msg takes string s returns nothing
       call DisplayTextToForce( GetPlayersAll(), s)
    endfunction
    
    function pesan takes nothing returns nothing
       call msg("Pesan dari Alam Lain")
    endfunction
    
    function angka takes integer a, integer b returns nothing
       local integer x = a+b
       call msg("x = "+I2S(x))
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       call pesan()
       call angka(66,6)       
    endfunction
    ok sekarang ambil waktu untuk kira2x mengerti bagaimana "kerja" fungsi ini .... setekah itu ,,, test map

    dan pencet escape .... Hasilnya kira kira

    Pesan dari Alam Lain
    x = 72

    -----------
    Catatan penting ....

    lihat diatas bahwa fungsi msg menggantikan DisplayTextToForce untuk memberikan pesan tanpa kamu harus mengetik
    DisplayTextToForce terus menerus ....

    Inilah Keunggulan JASS dibandingkan dengan GUI .... untuk menghemat waktu .... tentu saja pemanggilan fungsi tidak terbatas
    hanya menampilkan pesan .... justru karena hal ini fungsi menjadi teman terbaik anda ....

    Jadi kalau kamu sering menggunakan line group yang sama ( seperti text tadi ) buatlah fungsi untuk line tersebut ....

    1.7.3 Fungsi dengan Return value

    seperti telah dijelaskan sebelumnya fungsi boleh mengembalikan value

    function <NAMAFUNGSI> takes <LISTARGUMEN> returns <RETURNTYPE>

    harap diingat ketika sebuah fungsi harus mengembalikan "return" value, fungsi itu harus mengembalikan suatu nilai.
    caranya ??...

    ketika suatu fungsi mengembalikan value, anda harus menggunakan return statement

    return (<VALUE>)

    atau

    return <VALUE>

    *ingat yang ini tanpa -s dan haru berada line akhir dalam suatu fungsi ( ingat hal ini bukan berarti paling bawah )

    ok cukup cicit cuitnya ... sekarang kita akan menjelajah dunia return 2 teh future .....

    Returning Value

    apabila kamu ingin mengembalikan value dari return function, kamu bisa menggunakan argument. atau bila kamu hanya perlu pe-
    ngembalian value gunakan saja cara biasa ... ch: <NAMAFUNGSI>()

    yang tadi jangan dihapus dl kita akan memakai lagi .....

    Code:
    function msg takes string s returns nothing
       call DisplayTextToForce( GetPlayersAll(), s)
    endfunction
    
    function pesan takes nothing returns nothing
       call msg("Pesan dari Alam Lain")
    endfunction
    
    function angka takes integer a, integer b returns string
       call msg("angka")
       return I2S(a+b)
    endfunction
    
    function kuadrat takes integer n returns integer
       return (n * n)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       call pesan()
       call msg("Kuadrat dari 6 adalah "+ I2S(kuadrat(6)) )
       call msg("Penjumlahan dari 5 + 5 adalah "+ angka(5,5))
       call angka(3,7)       
    endfunction
    Hasilnya bisa dicoba ... dengan testmap ::shysmile::

    Warn : Return valu dari "return real" fungsinya juga harus real, kalau integer yang digunakan, nanti akan terjadi compile
    error.

    1.8 Loops
    Bagaimana kalau kamu harus mengulang sesuatu, dan tidak ada waktu untuk menulis kesemuanya ???... atau tidak tahu berapa kali
    harus mengulang ... ??

    JASS memiliki loop statement

    loop
    ..actions
    exitwhen <boolean1>
    ..actions
    exitwhen <boolean2>
    endloop

    setiap action dalam loop akan diulang terus menerus sampai statement exitwhen mendapat nilai true.

    loop ... dan endloop statement bisa memiliki lebih dari 1 exitwhen, bahkan mungkin tanpa exitwhen ... namun apabila menggu-
    nakan ini, gunakanlah wait TriggerSleepAction(<REAL>) kecuali kalau pengen ngehang

    1.8.1 Counter

    counter dimaksudkan untuk membatas loop, sampai berapa kali loop itu diulang. ini berguna untuk mengontrol loop yang anda
    buat

    contoh

    Code:
    function msg takes string s returns nothing
       call DisplayTextToForce( GetPlayersAll(), s)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
       local integer a = GetRandomInt(1,5)
       local integer i
       call msg("a = "+ I2S(a))
       set i = 1
       loop
           exitwhen i>a
           call msg("Woy !!!")
           set i = i + 1
       endloop       
    endfunction
    ok ... sekarang kita test mapnya ... klik esc ....

    whew... akhirnya .....
    ini sesi terakhir dari saya ..... kalau ada yg kurang nanti ditambah ,,,
    atau kl ada yg mau ditanya tanya aja ... kl gw bisa jawab :nosweat:
    mungkin nanti ada lanjutan ... berhubung ini hanya introduksi ....

    challenge from vexorian ...
    1. Ambil angka acak 1-100, apabila kelipatan 3 munculkan pesan kelipatan 3 dan apabila kelipatan 2 munculkan pesan kelipatan 2
    2. berapa akar dari integer acak 1-10000 ( jangan gunakan native square root )
    3. apakah integer acak 1-10000 merupakan angka prima ?

    selamat bereksperimen ....

  5. #4
    sersans's Avatar
    Join Date
    Oct 2006
    Posts
    737
    Points
    946.10
    Thanks: 0 / 0 / 0

    Default

    Wah kk sudah advance betul ya::good:: ,salut buat rizzuh

  6. #5
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default

    Eheu .... masih cupu saya kl dibandingin ama yg diluar .... ::

    ini jg biar yg lain bisa belajar ... dan gw punya temen buat diskusi bareng ..... jadi yah bisa enak kl bikin trigger pake jass .....

    hmm mungkin nanti gw kasih contoh skill yg gw bikin via jass ....

  7. #6
    DoOs_101's Avatar
    Join Date
    Oct 2006
    Location
    Jakarta
    Posts
    2,371
    Points
    3,181.21
    Thanks: 0 / 9 / 8

    Default

    Hmmm sebenarnya JASS gak beda jauh ama Java, malah susahan Java. Wa sih bisa coding Java, cuma bentuk JASS beda bgt, yg ada syntax error kebanyakan...
    Quotes of the week:
    "He vanishes only to return as a tyrant."


  8. #7
    Matarael's Avatar
    Join Date
    Oct 2006
    Posts
    176
    Points
    209.40
    Thanks: 3 / 1 / 1

    Default

    Luar biasa DoOs. Baik amat lu translatin itu semua hahaha...
    Selamat mencoba deh guys

  9. #8
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default

    Hemm ... buat contoh gw kasih demo map .... iseng gw buat ... ga ada kerjaan lg .... sekalian ngetes ....

    mungkin nantii gw jelasin cara-caranya ..... sekalian nyusun kata2x ...

    ueh .. cape ...

  10. #9
    DoOs_101's Avatar
    Join Date
    Oct 2006
    Location
    Jakarta
    Posts
    2,371
    Points
    3,181.21
    Thanks: 0 / 9 / 8

    Default

    Quote Originally Posted by rizzuh View Post
    Hemm ... buat contoh gw kasih demo map .... iseng gw buat ... ga ada kerjaan lg .... sekalian ngetes ....

    mungkin nantii gw jelasin cara-caranya ..... sekalian nyusun kata2x ...

    ueh .. cape ...
    Wah makasih2, reputation ++ deh ::biggrinangelA::
    Quotes of the week:
    "He vanishes only to return as a tyrant."


  11. #10
    Matarael's Avatar
    Join Date
    Oct 2006
    Posts
    176
    Points
    209.40
    Thanks: 3 / 1 / 1

    Default

    Eh sorry yg create topic rizzuh bukan DoOs...

    ++ rep deh.

  12. #11
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default

    Next tutornya lom kelar .... banyak halangan ::

    jadi gw mo ngasih info hal simpel aja

    Multi Instance ... ..

    apa maksudnya ??... saya mulai dengan

    perbedaan fundamental antara local variable dan global variable

    pertama tentang global variable, . . .. semua tentu sering memakai variable editor ( yang di trigger module mencet ctrl+b ), nah semua variabel yang kamu bikin disana itu namanya global variable. Apakah keuntungannya memakai global variable ??. . .. kalian tentunya tau kl variable ini bisa dipakai di semua trigger ( misal 2 trigger memakai global variable yang sama ). ... nah inilah keuntungannya global variable yang bisa dipakai di trigger ( function ) mana saja. ... namun dibalik itu disanalah kerugiannya . .. karena bisa diakses oleh semua trigger ( function ) kalau trigger itu dijalankan 2x maka, global variable itu akan ke-overwrite.

    contoh :

    Code:
    Lempar Sepatu
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Storm Bolt
        Actions
            Set target = (Target unit of ability being cast)
            Wait 10.00 seconds
            Unit - Kill target
    bagaimana kira2x kl ada 2 unit meng-cast storm bolt ?? dalam waktu yang 10 detik itu ... unit mana yang akan mati ? hanya satu bukan dua... inilah yg saya maksud overwrite ... ( trigger di atas tidak multi instance )

    kedua tentang local variable . . .. yg ini udah gw jelasin ... ( ato belum ya ?. .. lupa ::ampun:: ) ini kl di GUI hanya bisa dipakai via custom script . ..

    Code:
    custom skrip
        Events
        Conditions
        Actions
            Custom script:   yang ini lho
    seperti namanya local, variabel ini hanya berfungsi untuk pada satu trigger (function) saja, tidak bisa dipakai untuk function yang lain. meskipun tampak jelek karena dibatasi, tapi disinilah keuntungannya . .. mengapa ??... karena local tidak bisa ke overwrite seperti halnya global variable dengan trigger bodoh tadi sekarang kita coba

    Code:
    Lempar Spatu
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Storm Bolt
        Actions
            Custom script:   local unit target = GetSpellTargetUnit()
            Wait 10.00 seconds
            Custom script:   call KillUnit(target)
            //remove memory leak - local harus dinull supaya tidak leak, yah disinilah "kesulitannya" local tidak semuanya harus di null, yg tidak perlu misalnya real dan integer
            Custom script:   set target = null
    cobalah dengan 2 unit meng-cast storm bolt dalam rentang waktu 10 detik itu ... unit mana yang akan mati ? ... saya yakin hasilnya pasti dua yang mati, berbeda dengan memakai global variable dimana yang mati hanya 1 unit.

    ini yang disebut sebagai multi instance ... .. ..1 skill bisa dipakai banyak atau berulang2x, tanpa mengganggu yg sebelumnya.. ... contoh diatas hanyalah contoh kecil dari multi instance ( tidak terbatas pada skill saja ). local pada kenyataannya banyak membantu ::biggrinangelA::

    mungkin ini sedikit dari saya ... dan semoga penjelasan ini membuat anda ingin mempelajari jass ::

    mari .. permisi dulu ... om ... tante ..... ::flamed::

    catatan : local variable harus dideklarasikan ( ditempatkan ) di awal fungsi ... kl di GUI di paling atas tidak bisa dibawah, tapi local bisa diset sama seperti global dengan cara

    Code:
    set target = <yangkamupengen>

  13. #12
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default JASS Tips

    Simple Jass Tips to reduce lag and remove memory leak when using MASS special effects !! Yeah ... Lot of special effects

    Cara ini bisa diaplikasikan dengan mudah kalau anda memakai JASS, ::

    pada trigger init tambahkan call preload("<PathModel>"), gunakan \\ bukan \

    Contoh caranya

    Code:
    function InitTrig_Tremor takes nothing returns nothing
        set gg_trg_Tremor = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( gg_trg_Tremor, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( gg_trg_Tremor, Condition( function Trig_Tremor_Conditions ) )
        call TriggerAddAction( gg_trg_Tremor, function Trig_Tremor_Actions )
        call Preload("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl")
        call Preload("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl")
    endfunction
    dengan ini kita bisa mengurangi lag karena telah di load sebelumnya...

    Next Step, Destroy th special effect, mengapa ???... karena meskipun special effect itu sudah hilang, tetapi mereka tetap dianggap masih ada di map sampai kamu menggunakan Destroy Special Effects, bila tidak di-destroy special effect akan memakan memory dan terjadi memory leak.

    Call DestroyEffect(<efekyangmana>)

    contoh line
    Code:
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl", x, y))
    Dengan ini special effect tidak akan memakan memory setelah mereka dikeluarkan.

    Catatan :
    saya langsung add dan langsung dihancurkan ( efek masih ada ), hemat tempat dengan jass ::cheers::
    x,y menunjukan posisi unit.

    GUI Tips

    Call Preload tidak bisa digunakan di gui. penggunaan dengan custom script saya ga tau efektifitasnya, karena preload dipanggil ketika trigger sedang dibuat.

    Selalu masukan Destroy Special Effect apabila kalian menggunakannya ...::

    Sekian dari saya

    *daripada gw bikin tutorial panjang, kynya lebih bagus kl gw buat dikit2x ky gini....

  14. #13
    DJTuing's Avatar
    Join Date
    Oct 2006
    Location
    Jakarta
    Posts
    701
    Points
    911.34
    Thanks: 0 / 0 / 0

    Default

    Ketika aku melihat forum ini aku merasa sangat ::dance:: tapi ketika aku melihat penjelasan panjang lebar dan mempraktekanya aku merasa ::
    dan akhirnya karena ga kuat aku ::ajeb2::

    Swtttt...... Buanget ah... itu penjelasanya waktu edit edit yang Saya Mr.X gimana sie? yang di ganti yang mananya? kok aku triger nya malah jadi error function nya. kalo di enabled nolak dia T_T

    btw aku mo blajar JASS ne jadi bisa bikin skill yang keren keren
    I AM WOW LOVER
    Zhirne : Shaman Lvl 80
    Chirne : Druid Lvl 80
    Mikelewis : Warrior Lvl 80

  15. #14
    rizzuh's Avatar
    Join Date
    Oct 2006
    Location
    Bandung, Indonesia, Indonesia
    Posts
    671
    Points
    1,308.90
    Thanks: 2 / 14 / 10

    Default

    eheu ... akirnya ada yg mo belajar jg ::Jumpy::

    coba lu post trigger yg mr.x, atau yg bermasalah ... biar gw bisa liat ada salah dimana ... soalnya trigger2xnya dah gw tes kok ... jad ga mungkin salah ::bouncy::

  16. #15
    DoOs_101's Avatar
    Join Date
    Oct 2006
    Location
    Jakarta
    Posts
    2,371
    Points
    3,181.21
    Thanks: 0 / 9 / 8

    Default

    rizz gua blajarnya lewat file yg lu kasih di indofiles.com gpp kan ... lbih enak
    Quotes of the week:
    "He vanishes only to return as a tyrant."


Page 1 of 16 1234511 ... LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •