AI Discussion
Disini adalah tempat berdiskusi tentang AI.
Bila kalian semua punya contoh sample, referensi, ilmu atau sejenisnya, tolong kirim kesini untuk dibagi.. Trims.
AI Discussion
Disini adalah tempat berdiskusi tentang AI.
Bila kalian semua punya contoh sample, referensi, ilmu atau sejenisnya, tolong kirim kesini untuk dibagi.. Trims.
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.
wow nice, dapet banyak masukkan![]()
@Section
Ada atu lagi yang perlu ditambahkan om...
- Jika ingin membuat AI yang baik maka km juga harus expert dalam permainan tersebut.
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
Pada setiap channel pasti ada base ability ID nya (didekat follow through time).
Nah ID inilah yang digunakan untuk mengeluarkan spell tersebut.
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?
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)
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.
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 :
NOTE : Kebanyakan Hero Arena menggunakan Tavern dan Selection System.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 !
Secara default boolean yang baru dibuat adalah false.
Lalu buat konfigurasi AInya :
NOTE : Tentu dalam hero arena mempunyai tabel hero yang diset dalam variabel array. AI dapat memanfaatkan ini untuk menentukan heronya dengan cara random.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 : 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 :
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 : Order "AIP1" to "attack - move" to Random point in map.
Wow! Sepertinya AI menjadi lebih gila dan sangar karena dari jauh sudah meng-Engage orang lain. Apalagi bila mapnya ber-fog = sungguh tak adil.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
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.
Basicnya mungkin begini. Tapi nanti ada yang bisa ditambahkan.Code:Event : Unit is Attacked Cond. : Attacked unit = "AIP1" Action: If HP < 30% Then Order "AIP1" to move to "fountain" set isRetreat = true
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.
Sekalian aja deh dengan Engage System :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
NOTE : hpModEng untuk mencantumkan persentase (atau kalau anda mau bisa dengan value) dari unit yang diserang AI.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.
Oya.. Untuk Hero Arena.. Attack Actions nya adalah Engage. JadiCode:=================================================== 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.
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.).
wah...
makasih banyak ni Section...
bisa bwat bahan belajar...
wow mantap sekali kk , bagus nih buat newbie mapmaker (seperti saya ^^)
btw kalo thread ini isinya bakal brubah2 terus gak jadiin sticky aja?
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
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.
Share This Thread