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

    Default

    Quote Originally Posted by DJTuing View Post
    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
    kemungkinan kata gw sih gara2x case sensitive

    DisplayTextToPlayer() tidak sama dengan displaytexttoplayer()

    rizz gua blajarnya lewat file yg lu kasih di indofiles.com gpp kan ... lbih enak
    eheu silakan saja ... btw indofiles masi mati ... knp tu ??

  2. Hot Ad
  3. #17
    DJTuing's Avatar
    Join Date
    Oct 2006
    Location
    Jakarta
    Posts
    701
    Points
    911.34
    Thanks: 0 / 0 / 0

    Default

    gini aja bisa ga kk Rizzuh bimbing nya dari kecil kecil. maksudnya 1 by 1 ^^
    aku binggung soal na >.<
    I AM WOW LOVER
    Zhirne : Shaman Lvl 80
    Chirne : Druid Lvl 80
    Mikelewis : Warrior Lvl 80

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

    Default

    1 by 1 .. ??... ok gw mulai aja dari yang mudah

    Gw ulang dari awal ya ...

    Buat map 32x32.... 94x94 juga ngga masalah, itu semua terserah kamu setelah itu, buka Trigger Module ( Module > Trigger Editor atau pencet F4 ). Pilih Map Initialization, hapus semua isinya dan kemudian rename ke Tes JASS. Langkah selanjutnya


    Code:
    Tes JASS
        Events
            Player - Player 1 (Red) skips a cinematic sequence
        Conditions
        Actions
            Game - Display to (All players) the text: Saya Mr. X
    Ok ... semua sudah .... sekarang di dalam Trigger Editor masuk ke Edit > Convert To Custom Text

    sekarang trigger Tes JASS harusnya terlihat seperti ini

    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
    Seperti yang kamu lihat di sana ada "TRIGSTR_003" itu merupakan string dari war3map.wts, hal ini tidak usah dipedulikan, ganti saja TRIGSTR_003 menjadi "Saya Mr. X".

    Dan seharusnya sekarang 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
    Ok sebelum mengetes saya akan jelaskan

    function InitTrig_Tes_JASS takes nothing returns nothing
    endfunction

    merupakan fungsi untuk meng-setup trigger pada inisiasi map, tidak peduli trigger apa yang kamu buat, semua trigger harus memiliki ini ( sudah kewajiban dari world editor )

    kemudian ....


    call
    TriggerRegisterPlayerEventEndCinematic( gg_trg_Tes_JASS, Player(0) )

    fungsi dari function ini adalah untuk me-regis event apa yang akan memicu trigger ini. karena tadi kita ambil Player Skipped Cinematic - Event maka line untuk event tadi adalah TriggerRegisterPlayerEventEndCinematic(<TRIGGERYANGMANA>, <DARIPLAYERBERAPA>)

    lalu ....

    call TriggerAddAction( gg_trg_Tes_JASS, function Trig_Tes_JASS_Actions )

    Berguna untuk me-regis action yang akan dilakukan ketika event terjadi... ketika event terjadi, function Trig_Tes_JASS_Actions takes nothing returns nothing akan dieksekusi, apabila ada kondisi, maka kondisi akan dievaluasi terlebih dahulu .....

    ok ... itu saja mengenai inisiasi trigger ... boleh diingat pada inisiasi bisa dibuat 2 trigger atau lebih, ( biasa disebut dynamic triggering ) dan triggernya biasanya dihancurkan call DestroyTrigger(<TRIGGERMANA>) karena menyebabkan leak, kecuali yang utama .... hal ini masih ruwet jelasinnya .. jadi ntar aja ::smoke::

    yang terakhir

    pada function Trig_Tes_JASS_Actions takes nothing returns

    terdapat
    call DisplayTextToForce( GetPlayersAll(), "Saya Mr.X" )
    call DisplayTextToForce(<FORCEMANA>, "<PESAN>")

    nah kegunaan dari fungsi ini adalah untuk menampilkan text pada semua player. apabila ingin ke player tertentu saja, bisa digunakan

    call DisplayTextToPlayer(Player(0), 0, 0, "saya Mr.X")
    call DisplayTextToPlayer(<PLAYERBERAPA>, <POSISIXDARIPESAN, <POSISIYDARIPESAN>, "<PESAN>")

    ok balik ke yang awal .....
    dengan trigger ini

    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
    jalankan map dan pencet esc

    seharusnya ketika mencet esc keluar pesan

    saya Mr. X

    Ok ... itu aja dl .... gmn ?

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

    Default

    Local Variable

    Fungsinya sama seperti Global Variable, perbedaannya bisa dilihat pada post ini

    Yang harus diingat dari Local
    1. Hanya bisa Dideclare diawal fungsi
    2. Tidak bisa "diantar / dipindah" ke fungsi lain ( kecuali pada function yang mengambil argumen atau menggunakan local handle variable )
    3. local tidak akan menimpa local lainnya

    cara pendeklarasian local

    Code:
    Local <TIPE VARIABEL> <NAMAVARIABEL>
    alternatif untuk menset value dari local
    Local <TIPE VARIABEL> <NAMAVARIABEL> = VALUE
    Tipe Variable sama seperti pada Global .... contoh
    String
    Real
    Integer
    Unit
    Location
    Item
    .
    .
    .
    dll

    Nama Variable merupakan ... ya nama dari variable ... kl yg ini terserah kamu apa aja .....

    kemudian value bisa diset pada awal pendeklarasian, atau pada tengah2x line ....

    Contoh Trigger

    Code:
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string dadu = "ini dadu"
        local string didi = "ini didi"
        call DisplayTextToForce( GetPlayersAll(), dadu )
        call DisplayTextToForce( GetPlayersAll(), didi )
        set dadu = "ini dadu didi"
        call DisplayTextToForce( GetPlayersAll(), dadu )
    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
    coba buat dan pencet escape

    pesan yang ditampilkan seharusnya seperti ini

    ini dadu
    ini didi
    ini dadu didi

    ok sampe sini dl .....

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

    Default

    wihh wihh makasih banget lo kk rizzuh mo bantuin >.< tq tq. ntar ak coba lagi de
    I AM WOW LOVER
    Zhirne : Shaman Lvl 80
    Chirne : Druid Lvl 80
    Mikelewis : Warrior Lvl 80

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

    Default

    Revisi dari yang sebelumnya

    3. local tidak akan menimpa local lainnya
    maksudnya .... kalau trigger dijalankan 2..3 atau berapa kalipun tidak akan mengoverwrite ... misalnya ketika menggunakan wait atau dalam jass TriggerSleepAction(<REALNUMBER>) ... ataupun ketika trigger dijalankan benar2x bersamaan .....

    btw ... dari yang gw tau .. ada 2 kan di GUI .... wait sama wait(in game time) ..... sekedar informasi ... wait - in game time punya presisi ( ketepatan ) pada game yang lag .... misal kalau kita pake wait ( yg biasa ) 30 detik, pada game yg ngelag ada kemungkinan desynchronize ( ga sinkron ) jadi countdown wait masih jalan pada saat waiting for player ataupun waiting for server bahkan ketika game sedang berjalan ( ga sampe 1 sec biasanya 0, tapi repetitif ) nah kalau menggunakan wait ( game time ) hal sebelumnya bisa dihindari .....

    kl di Jass
    Wait -> TriggerSleepAction()
    Wait - in game time -> PolledWait()

    tentang local ... ada 1 challenge ... bisakah kalian membuat item dengan cooldown seperti hand of midas ??... tidak bisa didrop ketika cooldown, tapi bisa didrop ketika tidak cooldown .... can you figure it out ?... ::hdbang::

    ok ... onward then ....

    Fungsi Dengan Argumen

    Ok .... untuk singkatnya argumen merupakan value yang diambil ketika suatu fungsi dipanggil ... bingung ??... ini contoh ...

    Code:
    function message takes string pesan returns nothing
        call DisplayTextToPlayer(Player(0), 0, 0, pesan)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string dadu = "ini dadu"
        local string didi = "ini didi"
        call message(dadu)
    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
    lihat pada fungsi ekstra
    Code:
    function message takes string pesan returns nothing
        call DisplayTextToPlayer(Player(0), 0, 0, pesan)
    endfunction
    fungsi ini mengambil argumen berupa string .... dan untuk pesan yah ini hanyalah sebuah "nama" kamu bisa memodif sesuka kamu ... mau wawa ... atau balon itu terserah tapi pada

    Code:
        call DisplayTextToPlayer(Player(0), 0, 0, pesan)
    pesan harus diganti menjadi "nama" yang kamu pakai .... dan argumen tadi itu bisa juga dimasukan ke local .... contoh

    Code:
    function message takes string pesan returns nothing
        local string surat = pesan
        call DisplayTextToPlayer(Player(0), 0, 0, surat)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string dadu = "ini dadu"
        local string didi = "ini didi"
        call message(dadu)
    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
    dan ingat .... pemanggilan fungsi dengan argumen ... harus disertai dengan argumen yang ingin disampaikan

    Code:
    function message takes string pesan returns nothing
        local string surat = pesan
        call DisplayTextToPlayer(Player(0), 0, 0, surat)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string dadu = "ini dadu"
        local string didi = "ini didi"
        call message(dadu)
    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
    ok sekian dl .....

    btw lama ga online ... abis nge torrent ..... ::afro2::

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

    Default

    Return Value

    Sebelumnya kita sudah ngebahas fungsi dengan argumen, sekarang kita akan membicarakan fungsi dengan return value

    Secara singkatnya, fungsi akan memberikan value ketika dipanggil. contoh fungsi yang biasa mengembalikan value adalah boolean untuk condition

    contoh

    Code:
    function randomized takes nothing returns boolean
        local integer random = GetRandomInt(1, 5)
        return random <= 3
    endfunction
    Fungsi diatas akan mengambil angka integer random antara 1-5 melalui GetRandomInt(1, 5) kemudian pada return akan dilihat apakah integer random merupakan angka yang lebih kecil atau sama dengan 3 ..... value yang akan dikembalikan adalah True atau False, karena return value yang akan dikembalikan berupa boolean.

    untuk fungsi tes lengkapnya
    Code:
    function randomized takes nothing returns boolean
        local integer random = GetRandomInt(1, 5)
        return random <= 3
    endfunction
    
    function message takes string pesan returns nothing
        call DisplayTextToPlayer(Player(0), 0, 0, pesan)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local string dadu = "ini dadu"
        local string didi = "ini didi"
        if randomized() == true then
        call message(dadu)
        else
        call message(didi)
        endif
    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
    dari trigger diatas, ketika anda memencet escape, apabila integer acak berupa angka dibawah atau sama dgn 3, maka message dadu akan dipanggil, selain itu message didi akan diambil. cobalah sekarang ....

    contoh penggunaan return value yang lain

    Code:
    function kuadrat takes integer angka returns integer
        local integer double = (angka*angka)
        return double
    endfunction
    
    function message takes string pesan returns nothing
        call DisplayTextToPlayer(Player(0), 0, 0, pesan)
    endfunction
    
    function Trig_Tes_JASS_Actions takes nothing returns nothing
        local integer angka = GetRandomInt(1, 100)
        call message( "angka =" + I2S(angka) )
        call message( I2S ( kuadrat(angka) ) )
    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
    trigger diatas ketika memencet escape akan memngambil angka integer random antara 1-100, kemudian akan didisplay text angka berapa, dan kemudian pada fungsi.

    Code:
    function kuadrat takes integer angka returns integer
        local integer double = (angka*angka)
        return double
    endfunction
    
    melalui 
    
        call message( I2S ( kuadrat(angka) ) )
    akan memberikan argumen pada function kuadrat ( yaitu angka yang tadi ) kemudian akan diproses melalui

    Code:
        local integer double = (angka*angka)
    dan akan dikembalikan valuenya, bisa dilihat pada

    Code:
        return double
    dan akhirnya value dari double tersebut akan didisplay melalui fungsi call message ....

    Catatan :
    digunakan I2S ( integer to string ) karena value yang dikembalikan berupa integer, dan karena fungsi message mengambil string sebagai argumen, maka integer tadi harus diconvert terlebih dahulu menjadi string.

    ok skian dl ::shysmile::

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

    Default

    Quote Originally Posted by myself
    btw ... dari yang gw tau .. ada 2 kan di GUI .... wait sama wait(in game time) ..... sekedar informasi ... wait - in game time punya presisi ( ketepatan ) pada game yang lag .... misal kalau kita pake wait ( yg biasa ) 30 detik, pada game yg ngelag ada kemungkinan desynchronize ( ga sinkron ) jadi countdown wait masih jalan pada saat waiting for player ataupun waiting for server bahkan ketika game sedang berjalan ( ga sampe 1 sec biasanya 0, tapi repetitif ) nah kalau menggunakan wait ( game time ) hal sebelumnya bisa dihindari .....
    setelah gw baca lagi ... desync kl waitnya makan waktu yang lama .. lebih dari 5 detik ... dibawah itu lebih baik make wait biasa kl diatas itu pake wait - in game time

    - pengen request jass tag buat di indogamers bisa ga ya ?...., soalnya kl pake code ga ada warnanya

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

    Exclamation Going Advance

    OK ... mulai Poin ini, sebaiknya sudah mengerti tutorial yg sebelumnya, kl ngga ntar bingung ::Jumpy::

    Going Advance Now ... prepare some tea is a gud idea ......

    Local Handle Variable

    Sebelumnya kita sudah tau kalau local tidak bisa dipindahkan ke fungsi lainnya. Itu benar, namun ada cara untuk mentransfernya .... caranya ada 2;
    1. Pakai fungsi dengan argumen
    2. Local Handle Variable
    sekarang kita akan berbicara yang nomor 2, karena untuk banyak trigger yang ini lebih flexibel dan ( kata orang2x smooth ).

    Supaya bisa lebih demengerti terlebih dulu akan dijelaskan

    Extend Handle

    lihat gambar ini


    kita ambil contoh fungsi
    Code:
    function DestroyWidget takes widget toDestroy returns nothing
    value argumennya bisa unit, destructible, atau item karena semua tipe itu adalah widget

    sedangkan pada

    Code:
    function DestroyUnit takes unit toDestroy returns nothing
    value argumennya harus unit, karena widget bukanlah unit.

    sebetulnya semua extensi handle bukan hanya itu saja, gambar diatas hanyalah contoh ....

    pohon yang diatas hanyalah untuk menjelaskan leluhur dan keturunan .... setelah baca lebih lanjut akan mengerti maksudnya

    Return Bug / Type Casting

    contoh klasik dari return bug
    Code:
    function H2I takes handle h returns integer
        return h
        return 0
    endfunction
    Return value dari fungsi adalah integer, line return yang terakhir value yang dikembalikan adalah 0, tapi sebenarnya vaule yang akan dikembalikan adalah h (mengembalikan argumen handle )
    Fungsi ini akan memngambil Handle Argument dan mengembalikan value integer, yg merupakan pointer handle tadi.

    Code:
    function I2Item takes integer i returns item
        return i
        return null
    endfunction
    Item merupakan turunan dari widget dan widget adalah "child" dari handle ( lihat atas ), nah dengan ini kita bisa mengambil item melalui integer ( yang fungsi H2I; secara kasarnya fungsi ini mengubah handle menjadi integer ).

    Hubungannya dengan Local Handle

    Untuk implementasinya, Local Handle harus menggunakan Game Cache. Game Cache berguna untuk mensave data-data di dalam game. Dalam campaign, ini digunakan untuk mensave level, item, xp, dll.

    Trigger yang biasa saya gunakan untuk Inisiasi Game Cache

    Code:
    function Trig_AbilityCache_Init_Actions takes nothing returns nothing
        call FlushGameCache(InitGameCache("abilitycache.w3v"))
        set udg_AbilityCache = InitGameCache("abilitycache.w3v")
    endfunction
    
    //===========================================================================
    function InitTrig_AbilityCache_Init takes nothing returns nothing
        set gg_trg_AbilityCache_Init = CreateTrigger(  )
        call TriggerAddAction( gg_trg_AbilityCache_Init, function Trig_AbilityCache_Init_Actions )
    endfunction
    Catatan :
    sebelumnya saya sudah membuat global variable bernama AbilityCache (tipenya Game Cache ) dan .W3v merupakan filetype untuk gamecache.

    Ok kita lanjut dengan contoh ... Pay Attention now

    sebelumnya benda2x ini harus ada di custom script code section

    Code:
    //Type Casting
    
    function H2I takes handle h returns integer
        return h
        return 0
    endfunction
    
    function I2G takes integer i returns group
        return i
        return null
    endfunction
    
    //Copy Group
    //secara singkatnya di GUI Pick Every Unit in Grup and do Actions
    
    function Slide_CopyGroup takes group g returns group
        set bj_groupAddGroupDest = CreateGroup()
        call ForGroup(g, function GroupAddGroupEnum)
        return bj_groupAddGroupDest
    endfunction
    kita coba implementasi dengan slide unit

    Code:
    function slide takes unit victim, real casterX, real casterY, integer ranges returns nothing
        local unit object = victim
        local real objectX = casterX
        local real objectY = casterY
        local integer i = ranges
        local group g = CreateGroup()
        local group n
        local gamecache gc = udg_AbilityCache
        local timer t = CreateTimer()
        local string s = I2S(H2I(t))
        call GroupAddUnit(g, object)
        call StoreInteger(gc, s, "range", i)
        call StoreInteger(gc, s, "group", H2I(g))
        call StoreReal(gc, s, "x", objectX)
        call StoreReal(gc, s, "y", objectY)
        call StoreReal(gc, s, "speed", 10*i)
        call TimerStart(t, 0.05, true, function Slide_Move)
        // Remove Memory Leak
        set object = null
        set g = null
        call DestroyGroup(g)
        set n = null
        call DestroyGroup(n)
        set gc = null
        set t = null
    endfunction
    -Trigger Explained-

    Code:
    function slide takes unit victim, real casterX, real casterY, integer ranges returns nothing
        local unit object = victim
        local real objectX = casterX
        local real objectY = casterY
        local integer i = ranges
        local group g = CreateGroup()
        local gamecache gc = udg_AbilityCache
        local timer t = CreateTimer()
        local string s = I2S(H2I(t))
    untuk yang berwarna merah seharusnya sudah mengerti maksudnya, saya jelaskan yang sisanya.

    1. local gamecache gc digunakan sebagai variable untuk memasukan data kepada gamecache
    2. local timer t, membuat timer ( timer langsung dibuat karena valuenya adalah CreateTimer(), tapi belum dijalankan )
    3. local string s, saya jelaskan urutan dari valuenya .... Pertama kita ambil timer t, karena timer merupakan handle maka kita gunakan H2I dan kita dapatkan integernya, kemudian Integer itu kita convert ke string dengan I2S. Kenapa kita harus convert ke string ??

    Lihat pada :
    Code:
        call StoreInteger(gc, s, "range", i)
        call StoreInteger(gc, s, "group", H2I(g))
        call StoreReal(gc, s, "x", objectX)
        call StoreReal(gc, s, "y", objectY)
        call StoreReal(gc, s, "speed", 10*i)
    call StoreReal(<GAMECACHEMANA>,<MISIKUNCI>,<KUNCI>,<VAL UE>)

    Ingat!!; s merupakan timer yang kita ubah ke string !!!....
    <MISIKUNCI> merupakan timer, mission key adalah unik anggaplah sebagai nama save-an ketika kamu meng-save suatu game. Secara singkat dan kasarnya, yang kita lakukan adalah meng-attach local dengan "menumpang" pada handle yang berupa timer. ( mission key harus berupa string )
    <KUNCI> merupakan bagian data yang disetor, anggap kamu punya lemari ( timer tadi ) nah <KUNCI> ini merupakan laci-lacinya.
    <VALUE> adalah merupakan value yang disimpan.
    Untuk memasukan value pada game cache

    ok sekarang kita sudah deklarasi local dan sudah mensave local ke gamecache.

    sekarang saya akan jelaskan sisanya

    Code:
        call GroupAddUnit(g, object)
    digunakan untuk menambahkan unit pada grup ( Add unit to Group kl di GUI )

    Code:
        call TimerStart(t, 0.05, true, function Slide_Move)
    Memulai timer t pada function slide move ( true disana berarti timer ini merupakan timer yang berulang ulang [ periodic ] )

    ok sekarang kita lanjut ke trigger kedua

    Code:
    function Slide_Move takes nothing returns nothing
        local string s = I2S(H2I(GetExpiredTimer()))
        local gamecache gc = udg_AbilityCache
        local real x = GetStoredReal(gc, s, "x")
        local real y = GetStoredReal(gc, s, "y")
        local integer i = GetStoredInteger(gc, s, "range")
        local group g = Slide_CopyGroup(I2G(GetStoredInteger(gc, s, "group")))
        local real dur = GetStoredReal(gc, s, "dur")+0.05
        local real ux
        local real uy
        local real a
        local unit f
        local real p = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i)
        if dur < 0.2+0.1*i then
            loop
                set f = FirstOfGroup(g)
                exitwhen f == null
                set ux = GetUnitX(f)
                set uy = GetUnitY(f)
                set a = Atan2(uy-y, ux-x)
                call SetUnitPosition(f, ux+p*Cos(a), uy+p*Sin(a))
                call GroupRemoveUnit(g, f)
            endloop
            call StoreReal(gc, s, "dur", dur)
            call StoreReal(gc, s, "speed", p)
        else
            call DestroyGroup(I2G(GetStoredInteger(gc, s, "group")))
            call FlushStoredMission(gc, s)
            call DestroyTimer(GetExpiredTimer())
        endif
        // Remove Memory Leak
        set gc = null
        call DestroyGroup(g)
        set g = null
        set f = null
    endfunction
    Code:
        local string s = I2S(H2I(GetExpiredTimer()))
    //sekarang kita akan menerjemahkan timer string tadi ( dari handle ke integer ke string
        local gamecache gc = udg_AbilityCache
        local real x = GetStoredReal(gc, s, "x")
        local real y = GetStoredReal(gc, s, "y")
        local integer i = GetStoredInteger(gc, s, "range")
        local group g = Slide_CopyGroup(I2G(GetStoredInteger(gc, s, "group")))
        local real dur = GetStoredReal(gc, s, "dur")+0.05
    //karena dur sebelumnya tidak ada/disave sebelumnya maka valuenya = 0
        local real p = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i)
    //Mengambil Value dari Cache, caranya mirip ketika mensave
        local real ux
        local real uy
        local real a
        local unit f
    untuk bagian "eksekusinya"

    patut diingat fungsi ini akan diulang terus menerus karena memakai timer

    Code:
        if dur < 0.2+0.1*i then
    // dur ini dimulai dari 0.05 dan ingat karena fungsi ini diulang jadi trigger ini akan dieksekusi terus menerus baca bawah agar mengerti
            loop
                set f = FirstOfGroup(g)
                exitwhen f == null
                set ux = GetUnitX(f)
                set uy = GetUnitY(f)
                set a = Atan2(uy-y, ux-x)
                call SetUnitPosition(f, ux+p*Cos(a), uy+p*Sin(a))
    // saya harap anda dapet nilai 9 untuk matematika di rapor : )
                call GroupRemoveUnit(g, f)
            endloop
            call StoreReal(gc, s, "dur", dur)
            call StoreReal(gc, s, "speed", p)
    // nah value dari dur dan speed akan disave ingat karena trigger ini diulang2x
    // pada local real dur = GetStoredReal(gc, s, "dur")+0.05
    // dur akan disave 0.05 + 0.05 dst sampai memenuhi boolean diatas
    // hal yang sama berlaku pada speed
        else
            call DestroyGroup(I2G(GetStoredInteger(gc, s, "group")))
            call FlushStoredMission(gc, s)
            call DestroyTimer(GetExpiredTimer())
    // ketika semua sudah selesai else akan dieksekusi, timer dihilangkan dan
    // cache diflush ( kecuali mau ngabisin memory cache )
    // grup harus didestroy meski dalam gamecache
        endif
    Huff selesai jg ..... boleh dicoba triggernya kl mau ....
    oh ya btw implementasi buat trigger diatas

    GUI
    Code:
    Single Target Spell Instant
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Sleep
        Actions
            Custom script:   call slide(GetSpellTargetUnit(), GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) , 3)
    Code:
    Group Target Spell
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to War Stomp
        Actions
            Custom script:   set bj_wantDestroyGroup = true
            Unit Group - Pick every unit in (Units within 300.00 of (Position of (Casting unit)) matching (((Matching unit) belongs to an enemy of (Owner of (Casting unit))) Equal to True)) and do (Actions)
                Loop - Actions
                    Custom script:   call slide(GetEnumUnit(), GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) , 3)
    PS:
    Semoga ga Terlalu bikin pusing

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

    Post Review

    Complete Trigger Yang Atas

    Masukan di Custom Script Section
    Caranya :
    1.Di Trigger Editor, klik gambar map ( yang ada nama map kamu )
    2.Copy Paste Seluruh isinya kedalam Custom Script code Section di kanan

    Code:
    //Type Casting
    
    function H2I takes handle h returns integer
        return h
        return 0
    endfunction
    
    function I2G takes integer i returns group
        return i
        return null
    endfunction
    
    //Copy Group
    //secara singkatnya di GUI Pick Every Unit in Grup and do Actions
    
    function Slide_CopyGroup takes group g returns group
        set bj_groupAddGroupDest = CreateGroup()
        call ForGroup(g, function GroupAddGroupEnum)
        return bj_groupAddGroupDest
    endfunction
    
    function Slide_Move takes nothing returns nothing
        local string s = I2S(H2I(GetExpiredTimer()))
        local gamecache gc = udg_AbilityCache
        local real x = GetStoredReal(gc, s, "x")
        local real y = GetStoredReal(gc, s, "y")
        local integer i = GetStoredInteger(gc, s, "range")
        local group g = Slide_CopyGroup(I2G(GetStoredInteger(gc, s, "group")))
        local real dur = GetStoredReal(gc, s, "dur")+0.05
        local real ux
        local real uy
        local real a
        local unit f
        local real p = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i)
        if dur < 0.2+0.1*i then
            loop
                set f = FirstOfGroup(g)
                exitwhen f == null
                set ux = GetUnitX(f)
                set uy = GetUnitY(f)
                set a = Atan2(uy-y, ux-x)
                call SetUnitPosition(f, ux+p*Cos(a), uy+p*Sin(a))
                call GroupRemoveUnit(g, f)
            endloop
            call StoreReal(gc, s, "dur", dur)
            call StoreReal(gc, s, "speed", p)
        else
            call DestroyGroup(I2G(GetStoredInteger(gc, s, "group")))
            call FlushStoredMission(gc, s)
            call DestroyTimer(GetExpiredTimer())
        endif
        // Remove Memory Leak
        set gc = null
        call DestroyGroup(g)
        set g = null
        set f = null
    endfunction
    
    function slide takes unit victim, real casterX, real casterY, integer ranges returns nothing
        local unit object = victim
        local real objectX = casterX
        local real objectY = casterY
        local integer i = ranges
        local group g = CreateGroup()
        local group n
        local gamecache gc = udg_AbilityCache
        local timer t = CreateTimer()
        local string s = I2S(H2I(t))
        call GroupAddUnit(g, object)
        call StoreInteger(gc, s, "range", i)
        call StoreInteger(gc, s, "group", H2I(g))
        call StoreReal(gc, s, "x", objectX)
        call StoreReal(gc, s, "y", objectY)
        call StoreReal(gc, s, "speed", 10*i)
        call TimerStart(t, 0.05, true, function Slide_Move)
        // Remove Memory Leak
        set object = null
        set g = null
        call DestroyGroup(g)
        set n = null
        call DestroyGroup(n)
        set gc = null
        set t = null
    endfunction
    Masukan Inisiasi Game Cache
    caranya :
    1. Bikin Trigger dengan nama AbilityCache Init
    2. masuk ke Edit > Conver to Custom Text
    3. Copy paste yang dibawah ini

    Code:
    function Trig_AbilityCache_Init_Actions takes nothing returns nothing
        call FlushGameCache(InitGameCache("abilitycache.w3v"))
        set udg_AbilityCache = InitGameCache("abilitycache.w3v")
    endfunction
    
    //===========================================================================
    function InitTrig_AbilityCache_Init takes nothing returns nothing
        set gg_trg_AbilityCache_Init = CreateTrigger(  )
        call TriggerAddAction( gg_trg_AbilityCache_Init, function Trig_AbilityCache_Init_Actions )
    endfunction
    Cara Implementasi

    call slide(<UNITSLIDE>,<POSISIXCASTER>,<POSISIYCASTER>, <INTEGERSTARTSPEED>)

    Code:
    Single Target Spell Instant
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Sleep
        Actions
            Custom script:   call slide(GetSpellTargetUnit(), GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) , 3)
    Code:
    Group Target Spell
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to War Stomp
        Actions
            Custom script:   set bj_wantDestroyGroup = true
            Unit Group - Pick every unit in (Units within 300.00 of (Position of (Casting unit)) matching (((Matching unit) belongs to an enemy of (Owner of (Casting unit))) Equal to True)) and do (Actions)
                Loop - Actions
                    Custom script:   call slide(GetEnumUnit(), GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) , 3)

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

    Default

    Hmmm ... gw ga ada lagi yang perlu dikasi tau, sisanya tergantung ke-kreatifan masing2x ..... Mungkin nanti kl gw nemu hal baru / masalah baru nanti gw share .....

    untuk sekarang kl ada yang mo nanya2x silahkan saja .....

    btw ... untuk native list ky
    GetTriggerUnit()
    TriggerSleepAction()
    GetSpellTargetUnit()
    .
    .
    .
    dll

    bisa liat di jass manual atau di jass craft ( lihat di my resource file )

    ok sekian dl .... ::biggrinangelA::

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

    Default

    Native Function dan Non Native Function

    Yang udah pernah nyoba, terutama pake jass craft pasti sadar kalau ada 2 fungsi yang sama tapi bedanya ada BJ di depan; contoh

    IsUnitHiddenBJ(<unitmana>)
    IsUnitHidden(<unitmana>)
    keduanya memeiliki kegunaan yang sama, apakah unit ini di-hide atau tidak... nah perbedaan kedua fungsi ini adalah

    IsUnitHiddenBJ() merupakan Fungsi

    Code:
    function IsUnitHiddenBJ takes unit whichUnit returns boolean
        return IsUnitHidden(whichUnit)
    endfunction
    sedangkan IsUnitHidden() merupakan Native

    Code:
    constant native IsUnitHidden        takes unit whichUnit returns boolean
    perbedaan antara keduanya adalah, dengan menggunakan native ekseskusi fungsi lebih cepat, sekitar 0,3 milisec dan mengurangi kerja yang harus dilakukan oleh komputer.

  14. #28

    Join Date
    Feb 2007
    Posts
    212
    Points
    245.70
    Thanks: 0 / 0 / 0

    Default

    HUUUAAAAAAA!!!!!!!!!!! ::
    gak ngerti sma sekali jassnya!
    yg g ngerti cuman ini doank!
    Quote Originally Posted by rizzuh View Post
    Code:
    Tes JASS
        Events
            Player - Player 1 (Red) skips a cinematic sequence
        Conditions
        Actions
            Game - Display to (All players) the text: Saya Mr. X
    kebiasaan pake mouse click seh hehehe....
    bytheway anyway busway....
    thx buanget dehhh buat pelaranya!
    pasti g pelajarin walaupun gimana susahnya!
    Let's ROCK!! ::music_band::

  15. #29
    aVaTaR_EnGiNE's Avatar
    Join Date
    Jan 2007
    Location
    Database Error
    Posts
    170
    Points
    191.90
    Thanks: 0 / 0 / 0

    Default

    waw...JASS tutors in Indonesian language?
    nice kk rizzuh! ^^
    thx yah...coz gw capek bc pny vexorian...harus pake kamus
    mm...sebenernya gak sulit2 amat koq blajar JASS
    yg sulit....ngapalin Syntaxnya --"
    im not good at it for sure...
    Anyway,nice tutors ^^

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

    Default

    Syntax library ada banyak .... kynya bakal susah buat diinget2x .... makanya gw pake jass craft ... soalnya ada panduan buat syntaxnya ....

    Gw jg waktu pertama belajar jass emang mumet .... tapi yah kl dah ngerti enak sih ....

    gw jg baca punya vexorian ... ampe gw print malah biar enak bacanya .... yah tapi sebanding lah ....

    1 1/2 taun lalu sempet belajar jass ... tapi pusing ... dah gitu berenti ... baru 6-7 bulan lalu belajarin lg .....

    awal emang bisa bikin pusing ... tapi kl dah ngerti enak kok .... ::miaw::

Page 2 of 16 FirstFirst 12345612 ... 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
  •