Page 1 of 2 12 LastLast
Results 1 to 15 of 24

Thread: AI Discussion

http://idgs.in/96378
  1. #1
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Exclamation AI Discussion

    AI Discussion

    Disini adalah tempat berdiskusi tentang AI.
    Bila kalian semua punya contoh sample, referensi, ilmu atau sejenisnya, tolong kirim kesini untuk dibagi.. Trims.

  2. Hot Ad
  3. #2
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Post First Information

    AI...

    Aku sih gak tau banyak tapi aku bikin definisinya ya begini lah...

    AI atau Artifical Intelligence adalah sejenis script yang menghidupkan sesuatu dengan logika, kondisi dan aksi yang dimilikinya (Sesuai dengan
    namanya).

    Sampai sekarang aku gak tau apa bedanya BOT ama AI ato mereka cuma masalah penamaan aja.. Aku gak tau..

    AI di Warcraft..

    Setelah kujelajahi website - website AI, AI Warcraft bisa terbagi atas dua jenis : (maaf kalo istilahnya kurang berkenan karena aku bikin sendiri )

    - Pure AI
    - Injected AI

    Pure AI : AI yang dibuat bersamaan dengan mapnya, triggernya dan teman - temannya. Ada kemungkinan beberapa logika AI menyatu dengan system map tersebut.

    Injected AI : AI yang dibuat berlainan waktu (walaupun tidak semua begitu) dengan mapnya. AI ini memiliki "room" sendiri untuk memanipulasi dirinya.

    Pembuatan :

    Yah lumayan aku dah bisa (dikit - dikit) membuat AI. Tapi aku belum bisa membuat Injected AI karena susah banget! (Belum bisa membuat "room" tersebut).

    Sebelumnya maaf yah gak bisa bikin keterangan script AI dengan JASS/GUI karena:

    AI sendiri harus menyesuaikan mapnya.
    Aku sendiri kurang apal fungsinya.

    TAPI diskusi (ini bukan tutorial jadi boleh dibantah, diperbaiki atau saran) ini banyak menjelaskan tentang Hero Defense AI

    1. Untuk awal (atau sering disebut "init"), Persiapkan awal untuk AI.

    Misalnya untuk map TD :
    Ketika map mulai player (up2u) pergi ke koordinat (xxx,yyy) dan membangun tower (up2u/random>

    Atau map Hero Defense :
    Setelah server mengetik option (contoh -apnpsp atau -dm -aq -sd atau apalah parameter tersebut), AI random memilih hero yang ada di tavern.


    2. Tindakan Permulaan (Starting Actions)

    Ini bagian yang terlihat gampang, tapi ternyata susah / cukup susah untuk dibuat. Apalagi dalam map Hero Defense. Tapi untuk map TD bisa bernapas lega karena kerjaannya AI TD cuma dieemmm aja nunggu duit.

    Untuk Hero Defense, buatlah AI untuk memilih Line (bahkan kalau bisa ke hutan dulu kayak pemain DOTA PRO). Nanti dengan cara random, order hero AI ke salah satu line. Sebelumnya mungkin akan membeli item di pasar terdekat, jadi order unit ke pasar, beli item lalu order lagi ke line nya.

    3. Tindakan Kabur (Retreat / flee Actions)

    Ini bagian yang cukup mudah. Buat kondisi bila hp hero kurang dari 30% atau terserah, order ke fountain. Sebagai tambahan, order semua jurus jurus untuk kabur (seperti blink). Jadi konstruksinya :

    Bila HP hero <30% akan :
    - Gunakan blink ke arah fountain
    - Order ke fountain.

    Atau bila seperti jurusnya terrorblade : Sunder, gunakan perintah ini :
    -Order hero untuk Sunder/Skill kamu ke orang sekitarmu yang HPnya lebih gede dari kamu / 60% / HP terbanyak disekitar hero.

    4. Tindakan Penyerangan (Attack Actions)

    Bagian favorit dalam AI, karena berhubungan dengan huru hara (mungkin kamu tidak). Bagian ini cukup mudah untuk dikerjakan. Hanya order "attack - move" ke inti markas musuh, hero akan berjalan ke sana sambil menghajar musuh yang dijumpainya. Dan ketik HP sekarat, berjalanlah fungsi "Tindakan Kabur".

    Untuk Hero Arena cukup attack move ke "random point in map". Dan bila sekarat, Flee Actions akan berjalan.

    Bagian diatas adalah BASIC yang mana struktur dasar dalam AI. Asal 4 fungsi tersebut ada di map, SELAMAT! Kamu telah membuat map kamu ada AInya.


    FUNGSI LANJUT (ADVANCED) :

    Fungsi - fungsi ini yang akan membuat "real" dari AI. Sifatnya Optional, tapi mungkin bisa jadi primary.

    1. Engage System

    Sistem ini adalah sistem yang benar - benar membuat real dari AI dan membuat AI menjadi jago dan susah dibunuh.

    Caranya cukup sulit. Kita harus mendeteksi kapan attack dari hero tersebut menjadi engage. Hal ini bisa dilihat dari beberapa sudut :
    - Jumlah serangan yang diluncurkan
    - Skill yang dilemparkan dan mendukung untuk di engage
    - Teman disekitar
    - (kondisi terparah) Chance
    - Dll.

    Lalu setelah kondisi engage terpenuhi, buat hero terfokus untuk menyerang musuh tersebut (yang diengage). Gunakan 1001 skill hero yang ada dan attack ke musuh tersebut. JANGAN GUNAKAN ATTACK MOVE karena membuat hero berpaling dengan mudahnya. Agar durasi engage terkendali, tambahkan timer 5 detik (atau sesukamu) dan attack target. Timer akan reset setiap target menerima damage dan bila timer habis, hero akan menyerah. Lebih bagus lagi kombinasikan fungsi ini dengan :

    2.
    Advanced Flee System

    Membuat hero meng-ignore hpnya hingga batas yang lebih rendah (30% menjadi 10%) terhadap kondisi tertentu seperti engage, forcing dan sejenisnya. Bisa juga gunakan skill mendukung untuk kabur seperti blink atau stun ke arah musuh yang menyerang dan kabur.

    Kedua system diatas berlaku dan berfungsi juga untuk hero arena.

    3. Force atau Huru Hara

    Ada suatu saat dimana semua teman berkumpul di satu line dan menyerang bersama - sama. Kondisi ini tergantung dari :

    - Chance
    - Jumlah hero musuh yang mati
    - Tower yang sekarat
    - Kebetulan lagi pada numpuk heronya.

    4. Item System

    Setiap hero Defense pasti ada item untuk menambah kekuatan hero agar IMBA dengan musuh. Fungsi ini perlu dimasukkan dalam AI. Bagian ini cukup melelahkan untuk dibuat karena :

    1. Setiap hero itemnya beda - beda.
    2. Setiap hero membeli item yang cukup banyak. Apalagi ada yang dijual atau lainnya.
    3. Setiap hero memiliki variasi item yang berbeda (memiliki lenbih dari 1 tabel item untuk 1 hero. Anggap seperti mengerjakan 3x sub bagian 1).

    Tapi fungsinya cukup mudah. Bila uangnya cukup, langsung beli. Dan bila belum, ya ngehunt lagi...

    Fungsi ini berlaku untuk mayoritas tipe map. Dan untuk hero defense, bisa digabung dengan Flee / Retreat Actions.

    5. Aid System

    Ada kalanya markas kejebolan dan perlu untuk dicegah agar tidak hancur (ya nanti kalah kalau hancur). Fungsinya cukup mudah, tambahkan perintah bila markas diserang (is attacked), order semua hero untuk kesana. Mungkin ada pengecualian bila jumlah penyerang hanya 1 2 musuh, tambahkan saja kondisinya.


    Demikian rincian konstruksi AI. Semoga dengan terpenuhinya semua fungsi tersebut, map kalian bisa lebih enak dimainkan sendiri, berdua atau terserah lah!

    Sebelumnya ada tips - tips yang mungkin mendukung pembuatan AI :

    1.
    VARIABEL!
    penting sekali menggunakan variabel dalam pembuatan AI. Dengan variabel, AI lebih enteng, mudah dioperasikan dan tidak lag.

    2. Coba lagi!
    Cobalah AI mu, mainkan map mu kalau bisa ampe eneq muntah - muntah mainnya karena keseringan. Tapi yang penting AI mu berjalan mulus. Bagian ini membuat bug di AImu berkurang drastis.

    3. Do from Scratch
    Tak perlu takut dan tidak percaya diri untuk membuat AI yang langsung jago. Kita bisa mulai dari basic dulu. Setelah puas dan berjalan baik, baru tambahkan option nya. Ingat! seperti membangun rumah. Bangunannya dulu baru hiasan cat dan lainnya. Dengan pekerjaan yang skematis ini akan membuat AI mu bagus.

    4. Niat dan berdoa
    Mungkin walaupun bagian ini tak aku sebutkan, sudah pada tahu. Tapi penting untuk mencantumkan bagian ini.


    FAQ :

    Q : Kenapa Section membuat Diskusi ini?
    A : Karena aku ingin berbagi ilmu dengan semuanya. Kan bisa mendapat kebaikan juga berbagi ilmu. Juga ini kan forum diskusi sehingga bisa berdiskusi bareng.

    Q : Apakah Penjelasan AI ini bisa dipraktikkan di game lain? (seperti CS, AoE dll)
    A : Tentu bisa. Penjelasan ini hanya sekedar dasar pemahaman pembuatan AI. Jadi dengan memahami bagian - bagian ini, semoga AI manapun bisa dibuat.

    Q : Kok kayaknya penjelasan Section ini kurang berguna?
    A : Apakah kamu sudah mengetahui dasar pemahaman ini? Tak apa... Ini kan untuk semuanya. siapa tahu ada yang belum tahu sama sekali tentang AI. Dan ini dasar sekali. Mungkin kalau kamu punya informasi lanjut bisa cantumkan disini biar makin expert.

    Q : Bisakah Section merincikan Script codenya? JASS atau GUI?
    A : Maaf, aku tak bisa melakukannya karena selain tak hafal codenya, kebetulan media aku rusak (kompiku... T_T) sehingga tak bisa melihat codenya. Tapi aku bisa mencantumkan AI code milik seseorang waktu aku berjalan - jalan di web. Kamu bisa download disini :

    http://www.kitaupload.com/download.p...rial Arena.w3x

    Ada juga disini :

    http://www.kitaupload.com/download.p...35DAII.rar.zip

    http://www.kitaupload.com/download.p...ilver_1.o3.w3x

    http://www.kitaupload.com/download.p...107_AI100b.w3x


    Q : Apakah AI nge-leak?
    A : Wah... AI ini merupakan system yach... Kalau soal nge-leak itu ya tergantung dari fungsi - fungsi yang membentuknya. Itu seperti sering menggunakan "Pick Every Unit/Player/..." atau sebagainya. Kalau itu terjadi, tentu saja membuat nge-leak dan biasanya AI bekerja dengan buruk. Saran yang bagus untuk membentuk AI adalah :
    1. Banyak menggunakan variabel Boolean untuk deteksi event - event seperti isEngaged, isCombat, isRetreat, dan lainnya.

    2. Banyak menggunakan struktur If-Then-Else. Dan jangan takut untuk menggunakan If Bersarang karena jadi lebih banyak logika untuk AI.

    3. Sebaiknya AI tidak mengusik sistem dari map tersebut. Contoh : Untuk Hero Defense, Hero Respawn untuk AI dibuat baru sendiri (bukan sistem Hero Respawn Human) dan lebih bersifat individual (per AI dibuat 1 - Tapi kalau anda master coding, ya terserah lah..)


    Q : Dimana aku bisa dapat tutorial AI yang mudah?
    A : Perlu diketahui tutorial AI tidak ada yang mudah dan sangat dependen sekali dengan map. Tapi tetap ada banyak kok tutorialnya, bisa dicari di wc3campaigns, hive, wc3search, wc3jass, thehelper dll.

  4. #3
    l0git3c's Avatar
    Join Date
    Oct 2006
    Location
    England, Manchester
    Posts
    3,968
    Points
    4,650.70
    Thanks: 0 / 3 / 3

    Default

    wow nice, dapet banyak masukkan

  5. #4
    BuaYa JingkRaK's Avatar
    Join Date
    Oct 2007
    Location
    When u believe me then I'll be there
    Posts
    613
    Points
    711.00
    Thanks: 0 / 0 / 0

    Default

    @Section

    Ada atu lagi yang perlu ditambahkan om...

    - Jika ingin membuat AI yang baik maka km juga harus expert dalam permainan tersebut.

  6. #5
    LaMBhE's Avatar
    Join Date
    Oct 2007
    Location
    City of "YouNG ToweR" mana coba??
    Posts
    980
    Points
    1,130.30
    Thanks: 0 / 0 / 0

    Default

    cool...

    lgi mo buat AI hero arena nih...

    tanya, klo gw mo suruh AI melakukan skill yang berbasis channel, gmn caranya?
    seinget gw dah perna coba ganti ordercodenya trus issue order pake fungsi GUI, tpi gak bisa,
    Mau buat hero??
    TwinkleCraft - Grand Schism
    The New Division of AoS and Hero Craftings
    http://twinklecraft.6.forumer.com

  7. #6
    BuaYa JingkRaK's Avatar
    Join Date
    Oct 2007
    Location
    When u believe me then I'll be there
    Posts
    613
    Points
    711.00
    Thanks: 0 / 0 / 0

    Default

    Pada setiap channel pasti ada base ability ID nya (didekat follow through time).
    Nah ID inilah yang digunakan untuk mengeluarkan spell tersebut.

  8. #7
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Default

    Oya... Ada informasi tambahan...

    Untuk Ability yang dibuat dengan trigger (misalnya Blink Strike), gunakan dasar ability yang order dasarnya memang untuk menyerang, jadi untuk misalnya Blink Strike ini gunakan dasar skill Storm Bolt atau Chain Lightning, jangan gunakan dasar Healing Wave atau Heal. Walaupun (mungkin) tidak terlalu berpengaruh terhadap orang yang main tapi sangat berpengaruh terhadap AI, karena AI tetap menganggap skill itu skill dasar.

    Untuk skill channel, gunakan variabel boolean isChannel dimana setiap AI channel suatu skill, buatlah arahan untuknya untuk tidak mengganggu gugat channel dia, atau malah bisa sebaliknya, untuk kondisi tertentu (misalnya dalam kondisi isEngange dan musuh sekarat, kita bisa membatalkan channel yang sedang berlangsung dan menggunakan skill finishing).

    @BuaYa JingkRaK

    Memang betul kita perlu expert dalam map buatan kita sendiri. Ini akan membentuk combo - combo skill, jalan "bokong", jalan aman dan strategi untuk AI. Hal ini membuat AI semakin pintar (tentu kita juga).

    @All

    Ada yang punya informasi lagi? Atau hal yang ditanyakan? Didiskusikan?

  9. #8
    R@i_no_Wyrm's Avatar
    Join Date
    Jun 2008
    Location
    Indonesia
    Posts
    33
    Points
    42.00
    Thanks: 0 / 0 / 0

    Default

    wew, keren. baru liat ada section khusus buat AI. btw ada pertanyaan nih. nested if bukannya bisa bikin flaw setelah loop? gara2 kebanyakan logika (apalagi bareng loop) bisa bikin crash warcraft dgn maksud buaya jingkrak (variable berubah duluan sebelom function kear gara2 kestack)

  10. #9
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Default

    Nested if kalau tidak salah tidak membuat crash. Semua nested tidak membuat crash. Tapi perlu diperhatikan:

    nested loop harus lebih diperkecil kondisi exitwhen nya.

    Tidak berakhir infinite.

    Masalahny nested if sangat dipakai di dalam AI. Dan AI maker cukup bnyk menggunakannya. Ada juga yg menggunakan gamecache.

  11. #10
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Post Second Information

    Untuk selanjutnya, aku ingin menjelaskan lebih detail tentang FUNGSI BASIC. fungsi ini terdiri dari Initialization, Starting Actions, Flee Actions, Attack Actions.

    Untuk membuat sesi ini persiapkan beberapa variabel boolean, integer, atau sesuai dengan game system map kamu. Oh ya, sekarang AI yang akan dibahas akan kucoba samakan dengan AI hero Arena berdasarkan masalah yang sedang dihadapi salah satu orang.

    Mohon maaf kalau incompatible karena aku ngerjain sesuai logika aku aja.

    NOTE : Untuk yang pernah belajar bahasa pemograman lain (seperti PASCAL, Delphi, BASIC, C#, C++,dll coba gunakan nalar programming itu )

    Initialization :

    Persiapkan variabel yang berhubungan dengan setup map mu. Lalu siapkan sebuah expirable timer (dengan expire time terserah). Taruh "Start Timer" setelah setup dijalankan, sehingga kira - kira menjadi seperti ini :

    Code:
    Event 	: Player entered "time 45 AP"
    
    Cond.	: (kondisi)
    
    Action	: (Tindakan)
    		! Start "TIMER_SETUP" will be expired 5 seconds. !
    		! set isTime45 = true !
    		! set isAP = true !
    NOTE : Kebanyakan Hero Arena menggunakan Tavern dan Selection System.
    Secara default boolean yang baru dibuat adalah false.

    Lalu buat konfigurasi AInya :

    Code:
    Event	: "TIMER_SETUP" expires
    
    Action 	: If isTime30 = true Then <Aksi yang diinginkan bila game berlangsung 30 menit)
    
    	  If isTime45 = true Then (Aksi yang diinginkan bila game berlangsung 45 menit)
    
    	  If isAP = true Then (Contoh : Create 1 hero[random] for "AIP1" ...)
    
    	  If isAR = true Then (Ya.. Sama lah ama yang diatas)
    
    	  If ........ (terus aja cekin atu2)
    
    dan seterusnya.
    NOTE : Tentu dalam hero arena mempunyai tabel hero yang diset dalam variabel array. AI dapat memanfaatkan ini untuk menentukan heronya dengan cara random.

    NOTE : AI Hero Defense dan AI Hero Arena memiliki banyak persamaan dalam pembuatan AI.

    Ini adalah konfigurasi AI minimal untuk AI dalam Hero Arena. Mungkin terlihat hampir tak ada bedanya dengan Hero Defense. Tentu saja! Yang membedakan mereka hanya inputnya (masukan) saja.

    Starting :

    Cukup setting beli item, tak ada ambil posisi atau semacamnya. Paling mentok suruh jalan ke tengah map.

    Attacking :

    Untuk AI Hero Arena, attacking ini sangat mudah karena hero arena tidak memiliki markas besar line ataupun tower yang harus menggunakan 1001 jurus untuk membasminya.

    Kalau ingin yang mudah, bisa seperti ini :

    Code:
    Event : Every 7 seconds of time.
    
    Cond. : isRetreat = false, isEngage = false
    
    Action : Order "AIP1" to "attack - move" to Random point in map.
    Mudah bukan? Tapi mungkin ini terlihat sangat kaku. Ah, untuk map 64x64, 96x96 atau 128x128 ini tak masalah. Tapi untuk map 160x160? Wah... Ini cukup sulit. Baik, ada cara untuk lebih "RAMAI" untuk AI dengan map besar.

    Code:
    Event : Every 7 seconds of time.
    
    Cond. : isRetreat = false, isEngage = false
    
    Action : Pick Every unit in map area matching unit is hero = true
    	  Add Picked Unit to "TEMPGROUP"
    	 set "P1EngTarget" = random unit in "TEMPGROUP"
             Order "AIP1" to attack "P1EngTarget"
    	 set isEngage = true
    Wow! Sepertinya AI menjadi lebih gila dan sangar karena dari jauh sudah meng-Engage orang lain. Apalagi bila mapnya ber-fog = sungguh tak adil.
    Loh? kan ingat perbandingan :

    HUMAN >>>>> AI
    Inf. : 1
    1 : 0

    Mungkin one step ahead untuk AI sangat dibutuhkan.
    Ini adalah konfigurasi minimal untuk Attacking AI. Buat basicnya dulu, dan bila ada rasa - rasa manis untuk ditambahkan dalam AI ya boleh lah.

    Flee :

    Kabur? Wah sepertinya AI pengecut sekali! Ow tidak seperti itu. Kabur adalah usaha yang wajib dimiliki apalagi untuk hero Arena. Karena hero Arena cukup "rusuh" (pernah main AAA? Azeroth Arcane Arena. Bila sudah anda akan mengerti usaha untuk kabur.)

    Kita coba set seperti ini :

    Map : Ada Fountain di tengah map.

    Code:
    Event : Unit is Attacked
    
    Cond. : Attacked unit = "AIP1"
    
    Action: If HP < 30% Then
    	Order "AIP1" to move to "fountain"
    	set isRetreat = true
    Basicnya mungkin begini. Tapi nanti ada yang bisa ditambahkan.

    NOTE : fountain disini adalah variabel yang menunjuk pada fountain yang ditengah map.

    Saat ini mungkin posisi set isRetreat = true tidaklah berguna, tapi ternyata akan sangat berguna sekali untuk fungsi - fungsi lainnya (seperti Item Buying / Aid / Engage dll).

    Atau mungkin kita bisa meminimalisasi flee ketika sedang Engage. Misalnya :

    Map : Ada Fountain di tengah map.

    Code:
    Event : Unit is Attacked
    
    Cond. : Attacked unit = "AIP1"
    
    Action: If HP < 30% Then
    	 If isEngage = true Then
             'fungsi yang mendukung seperti ngeluarin ulti / apalah
             set isIgnoreHP = true
             else if isIgnoreHP = true and isEngage = false Then
    	 Order "AIP1" to use TownPortal to "MARKAS"
    	 else
    	 Order "AIP1" to move to "fountain"
    	 set isRetreat = true
    Sekalian aja deh dengan Engage System :

    Code:
    Event : unit is Attacked
    
    Cond. : Attacking Unit = "AIP1"
    
    Action: If isEngage = false Then
    	Start "TIMER_ENGAGE" will expire 3 seconds.
    	set willEngaged = Attacked Unit
    	set hpModEng = PercentHP of willEngaged
    	Else
    	Start"TIMER_ENGAGE_EX" will expire 5 seconds.
    NOTE : hpModEng untuk mencantumkan persentase (atau kalau anda mau bisa dengan value) dari unit yang diserang AI.

    Code:
    ===================================================
    Event : "TIMER_ENGAGE" expires
    
    Action: If isRetreat = false, isIgnoreHP = false, isAid = false, hpModEng - Current (%) HP of willEngaged > 2% Then
    
    	set IsEngage = true
    	order "AIP1" to attack willEngaged
    	Start"TIMER_ENGAGE_EX" will expire 5 seconds.
    
    ===================================================
    Event : "TIMER_ENGAGE_EX" expires
    
    Action: set isEngage = false
    	Order "AIP1" to attack-move to random point in map.
    Oya.. Untuk Hero Arena.. Attack Actions nya adalah Engage. Jadi
    Attacking = Engage

    kalau Hero Defense

    Attacking =! Engage

    Jadi sistem ATTACKING yang diatas bisa digabung dengan yang dibawah ini.

    Kenapa? Karena Hero Arena tidak ada sistem gelombang pasukan dan bahkan kita memakai 1 hero dan berjuang sendirian (untung2 ada temen bisa bedua).

    fungsi fungsi diatas adalah fungsi minimal. Dan semua fungsi ini baru pernah dites sekali oleh aku. Jadi maaf saja kalau ada yang is not Working. Kalau ada, lapor aja mana yang error. Toh ini kan diskusi, boleh dibantah atau dikritik. Karena aku sendiri juga baru coba - coba dirumah.

    Kalau dilihat, variabel yang memegang peran penting dalam pergerakan AI disini adalah :

    isEngage
    isRetreat


    Yang hampir tidak terpakai (tapi tetap dipakai dong! Hanya sedikit)

    isAid

    FAQ :

    Q : Bolehkah durasi timer diganti? Dan angka dari "hpModEng - Current (%) HP of willEngaged > 2%"?

    A : Tentu saja. Kamu boleh merancang angka kamu sendiri. Mungkin kalau angka yang kutulis terlalu lama atau terlalu besar, bisa diganti. Itu sifatnya independen.

    Q : Kalau Hero Arenaku ada Creep nya, gimana setting supaya AI ku bisa nyerang Creepnya juga? Kan katanya langsung Engage dari jauh?

    A : Memang ini menjadi kendala yang besar. Tapi bisa diatur, coba dirubah menjadi attack-move to "P1EngTarget" (lihat attacking diatas).
    (Kalau attack-move jadi Position of(P1EngTarget) )

    lalu coba tambahkan fungsi ini :


    Code:
    Event : Unit owned by Neutral Hostile is died
    Cond. : Killing Unit = "AIP1"
    Action: order "AIP1" to attack-move to "P1EngTarget"
    	set isEngage = true
    	set isCreep = false
    ========================================
    Event : unit is attacked
    Cond. : Attacked unit owned by neutral Hostile AND attacking Unit = "AIP1"
    Action: set isEngage = false
    	set isCreep = true

    Q : Section telah buat berapa map yang ada AInya?

    A : Duh, baru 3 map dengan dasar AI yang beda2 di tiap mapnya. War of Alliance AI, Battle of the Hill AI dan Kampoeng! v1.2c AI punya si DoOs_101 (Sorry DoOs gw modif map lo jadi ada AInya. sekali lagi maaf! Gak gw publish kok! buat pribadi aja!)

    Yang WoA (war of Alliance) ama BotH (Battle of the Hill) mapnya asli buatan aku.


    Q : Tadi Section bilang kalau Section pernah bikin AI di beberapa map, boleh di upload kesini gak?

    A : Duh, yang WOA ama Battle of the Hill terrainnya weird banget (kayak lukisan anak TK gara-gara aku gak bisa terraining). Kalo yang WoA nanti aku cantumin.

    Tapi yang Battle of the Hill kayaknya aku pikir - pikir dulu karena itu current project aku yang tertunda (karena kompi ku.. T_T).

    Untuk yang Kampoeng! Aku mesti ada izin dulu tuh dari DoOs. Tau dia bolehin atau nggak (Ini aja aku modif mapnya dia aku takut dimarahin.).

  12. #11
    Kanna Endo's Avatar
    Join Date
    Jun 2008
    Location
    世界 友人
    Posts
    29
    Points
    31.90
    Thanks: 0 / 0 / 0

    Default

    wah...

    makasih banyak ni Section...

    bisa bwat bahan belajar...

  13. #12
    fire_god's Avatar
    Join Date
    Jun 2008
    Posts
    1,477
    Points
    2,789.00
    Thanks: 0 / 15 / 6

    Default

    wow mantap sekali kk , bagus nih buat newbie mapmaker (seperti saya ^^)

    btw kalo thread ini isinya bakal brubah2 terus gak jadiin sticky aja?

  14. #13
    ranzi's Avatar
    Join Date
    Apr 2007
    Location
    Japanz (Juakarta Puanaazz)
    Posts
    625
    Points
    821.01
    Thanks: 2 / 8 / 6

    Default

    Mo sharing2, trigger AI-nya beli item (padahal ma dikasih )

    Note:
    Var Global
    AI_Item=Integer Array (buat index urutan membeli item)
    gg_unit_nfnp_0000 dan gg_unit_nfnp_0010=fountain (unit)



    Code:
    function AIHasEmptyInventorySlot takes unit u returns boolean
        return UnitItemInSlot(u, 0) == null or UnitItemInSlot(u, 1) == null or UnitItemInSlot(u, 2) == null or UnitItemInSlot(u, 3) == null or UnitItemInSlot(u, 4) == null or UnitItemInSlot(u, 5) == null
    endfunction
    function Trig_AI_Item_Buy_Conditions takes nothing returns boolean
        return( GetPlayerController(GetOwningPlayer(GetTriggerUnit())) == MAP_CONTROL_COMPUTER ) and ( GetPlayerSlotState(GetOwningPlayer(GetTriggerUnit())) == PLAYER_SLOT_STATE_PLAYING )
    endfunction
    
    function Buy_Item takes integer theitem, integer price returns nothing
        if(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)>=price) then
            set udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=(udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]+1)
            call UnitAddItemByIdSwapped(theitem,GetTriggerUnit())
            call SetPlayerStateBJ(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)-price))
        endif
    endfunction
    
    function Potion_Slot takes nothing returns boolean
        if (IsItemOwned(GetItemOfTypeFromUnitBJ(GetTriggerUnit(), 'phea')) == false ) then
            return true
        endif
        return false
    endfunction
    
    function Trig_AI_Item_Buy_Actions takes nothing returns nothing
        //Build Item
        if AIHasEmptyInventorySlot(GetTriggerUnit()) then
            if udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==0 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==1 then
                call Buy_Item('rlif',375)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==2 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==3 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==4 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==5 then
                call Buy_Item('rlif',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==6 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==7 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==8 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==9 then
                call Buy_Item('rat6',225)
            endif
        endif
        //Beli Pot
        if Potion_Slot() and GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)>=125 and AIHasEmptyInventorySlot(GetTriggerUnit()) then
            call UnitAddItemByIdSwapped('phea',GetTriggerUnit())
            call SetPlayerStateBJ(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)-125))
        endif
    endfunction
    
    //===========================================================================
    function InitTrig_AI_Item_Buy takes nothing returns nothing
        set gg_trg_AI_Item_Buy = CreateTrigger(  )
        call TriggerRegisterUnitInRangeSimple( gg_trg_AI_Item_Buy, 280.00, gg_unit_nfnp_0000 )
        call TriggerRegisterUnitInRangeSimple( gg_trg_AI_Item_Buy, 280.00, gg_unit_nfnp_0010 )
        call TriggerAddCondition( gg_trg_AI_Item_Buy, Condition( function Trig_AI_Item_Buy_Conditions ) )
        call TriggerAddAction( gg_trg_AI_Item_Buy, function Trig_AI_Item_Buy_Actions )
    endfunction

  15. #14
    LuCkyM3's Avatar
    Join Date
    May 2008
    Location
    I am flying.
    Posts
    952
    Points
    1,140.40
    Thanks: 0 / 1 / 1

    Default

    Quote Originally Posted by ranzi View Post
    Mo sharing2, trigger AI-nya beli item (padahal ma dikasih )

    Note:
    Var Global
    AI_Item=Integer Array (buat index urutan membeli item)
    gg_unit_nfnp_0000 dan gg_unit_nfnp_0010=fountain (unit)



    Code:
    function AIHasEmptyInventorySlot takes unit u returns boolean
        return UnitItemInSlot(u, 0) == null or UnitItemInSlot(u, 1) == null or UnitItemInSlot(u, 2) == null or UnitItemInSlot(u, 3) == null or UnitItemInSlot(u, 4) == null or UnitItemInSlot(u, 5) == null
    endfunction
    function Trig_AI_Item_Buy_Conditions takes nothing returns boolean
        return( GetPlayerController(GetOwningPlayer(GetTriggerUnit())) == MAP_CONTROL_COMPUTER ) and ( GetPlayerSlotState(GetOwningPlayer(GetTriggerUnit())) == PLAYER_SLOT_STATE_PLAYING )
    endfunction
    
    function Buy_Item takes integer theitem, integer price returns nothing
        if(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)>=price) then
            set udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=(udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]+1)
            call UnitAddItemByIdSwapped(theitem,GetTriggerUnit())
            call SetPlayerStateBJ(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)-price))
        endif
    endfunction
    
    function Potion_Slot takes nothing returns boolean
        if (IsItemOwned(GetItemOfTypeFromUnitBJ(GetTriggerUnit(), 'phea')) == false ) then
            return true
        endif
        return false
    endfunction
    
    function Trig_AI_Item_Buy_Actions takes nothing returns nothing
        //Build Item
        if AIHasEmptyInventorySlot(GetTriggerUnit()) then
            if udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==0 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==1 then
                call Buy_Item('rlif',375)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==2 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==3 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==4 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==5 then
                call Buy_Item('rlif',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==6 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==7 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==8 then
                call Buy_Item('rat6',225)
            elseif udg_AI_Item[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==9 then
                call Buy_Item('rat6',225)
            endif
        endif
        //Beli Pot
        if Potion_Slot() and GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)>=125 and AIHasEmptyInventorySlot(GetTriggerUnit()) then
            call UnitAddItemByIdSwapped('phea',GetTriggerUnit())
            call SetPlayerStateBJ(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(GetOwningPlayer(GetTriggerUnit()),PLAYER_STATE_RESOURCE_GOLD)-125))
        endif
    endfunction
    
    //===========================================================================
    function InitTrig_AI_Item_Buy takes nothing returns nothing
        set gg_trg_AI_Item_Buy = CreateTrigger(  )
        call TriggerRegisterUnitInRangeSimple( gg_trg_AI_Item_Buy, 280.00, gg_unit_nfnp_0000 )
        call TriggerRegisterUnitInRangeSimple( gg_trg_AI_Item_Buy, 280.00, gg_unit_nfnp_0010 )
        call TriggerAddCondition( gg_trg_AI_Item_Buy, Condition( function Trig_AI_Item_Buy_Conditions ) )
        call TriggerAddAction( gg_trg_AI_Item_Buy, function Trig_AI_Item_Buy_Actions )
    endfunction
    JASS ya? gw ngak ngerti JASS kk!!

  16. #15
    Section's Avatar
    Join Date
    Nov 2006
    Location
    about.me/SECTION
    Posts
    2,095
    Points
    11,041.04
    Thanks: 45 / 112 / 98

    Default

    Buat yang JASS bisa ga setiap command line dikasih comment apa maksud fungsi tersebut... Terus dikasih tahu dulu algoritmanya gimana... Semoga dengan begitu bisa membantu juga para GUI menuju JASS

    Oya.. thread ini juga sangat berterima kasih untuk ranzi karena sudah ikut memberi modul AI.

    Yang lain semangat yach... coba - coba bikin disini ga usah takut untuk leak atau tidak bekerja nanti kita bahas kok.

Page 1 of 2 12 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
  •