Z1 Macro + Heal - Oyuna Bot Yapmak - Bir Nevi Koxp :P

Öncelikle, bot dediğimiz şey bizim yapmamız gereken işlemleri yapan programdır robot un kısaltması olsa gerek :D.

Çok çok iyi bir bot yapmak için assembly kullanmak gerekir, ama işimizi görücek derecede bir botu auto-it le rahatça yapabiliriz.

Daha öncede söylediğim gibi, neler yapıcağımızı kafamızda planlayarak, işe başlıyoruz.


-> Planımız bu;
3 tane button, 2 tane label, 2 tane input, 2 tane combo, 1 tane checkbox ekliyoruz. Buttonların birisi başlat, diğeri durdur, öbürü çıkış, labellerin birisinde HP diğerinde MP yazıyor, hemen bu labellerin yanına 2 inputu ekliyoruz, bu iki inputun yanınada 2 comboyu ekliyoruz, checkbox ise kutu toplamak için.
Kısaca ne yapmış olduk ? Oyundaki Karakterimizin, HP si kaça düştüğünde Potion kullansın amacıyla istediğimiz HP yi girebileceğimiz bir input ve hemen yanınada potionu kullanmak için hangi tuşa basıcağını belirleyebileceğimiz bir combo koyduk, aynı şekilde diğer input ve comboda MP için.
Kısaca ben başlata bastığımda bot misal "é1" basıp atack yapmaya başlıycak, HP si girdiğim değere düşünce HP tuşuna basıcak potion kullanıcak, mp si bitince aynı şekilde, checkbox u seçdiysem "space" ye basıp kutuları topliycak ve durdura bastığımdada durucak :), planı kurduk şimdi sırada yapım aşaması.

GUI mi oluşturdum, elimde şöyle birşey var ve bunu SciTE ye aktardım;


Keypress göndermek işin basit tarafıdır, bunu yapmak için gereken şey;
Başlat buttonuna başlatma görevi vermek ve while döngüsünün içine başlatıldığında şu tuşlara durdurana kadar bas komutlarını yerleştirmek. Bunu şu şekilde yapıyoruz ;
Dim $basla = 0

While 1
Sleep(100)
if $basla = 1 then
Send("z1")
endif
Wend

Func Button1Click()
$basla = 1
Endfunc

Func Button2Click()
$basla = 0
Endfunc
görüldüğü gibi olayımız bu :). Sırada kutu toplama var, onuda basit bi şekilde döngünün içine yerleştiriyoruz.
Şu şekilde ;
if GuiCtrlread($checkbox1) = $GUI_CHECKED then ;burada eğer checkbox1 seçiliyse dedik.
send("{SPACE}")
endif
bunu while döngüsünün içine z1 den sonra yerleştiriyoruz.

Şimdi sıra geldi hp ve mp yi okumaya.
Bunun 2 yolu var birincisi pixelsearch yöntemi, yani ekranda renk taraması yaparak hp nin azaldığını anlamak
ikincisi ise memoryread yöntemi, yani direk olarak memoryden Hp yi okumak, ki bu daha güvenlidir.
Ancak her pc de memory değerleri aynı olmayabilir. Yani sizde çalışan program arkadaşınızda çalışmayabilir.
Bunun için şimdilik memory i bi kenara atalım ona daha sonra yer verelim. Pixelsearch ı işleyelim. Bu nedenle hp değeri girmeyide şimdilik atlıyorum..

Duzgun bir şekilde pixelsearch ı gerçekleştirmek için ilk olarak HP bardaki rengi ve ekrandaki yerini bilmemiz lazım.

Bunu öğrenmek için hemen basit bir script yazalım.

;Script

While 1
Sleep(250)
$pos = MouseGetPos()
$pixelrengi = PixelGetColor($pos[0],$pos[1])
ToolTip("X : "&$pos[0]&" Y : "&$pos[1]&" Renk : "&$pixelrengi)
WEnd
Bunu bu şekilde exe ye çevirelim ve oyun açıkken hp barın tam ortasına getirelim,
tooltipde görünen değerler X pozisyonu, Y pozisyonu, ve o pozisyonlardaki renkdir.
Şimdi bu ne işimize yarıycak onu söyliyim, bunları bir kenara not aldıktan sonra,
diyelimki renk kodumuz : 12345678,
renk kodunun pozisyonları : X 300, Y 400,
şu kodu ekliyoruz;

Dim $PotKey = Guictrlread($combo1)

While 1
Sleep(250)
$pixelrengi = PixelGetColor(300,400)
if $pixelrengi = "12345678" then
sleep(10)
else
Send($PotKey)
Endif
WEnd
hemen açıklamasını yapalım, dim ile $potkey in comboda yazan değer olduğunu belirttik.
Yani comboda 1 yazıyorsa 1e, 2 yazıyorsa 2ye 3,4.. vs basıcaktır.
Döngüde yaptığımız olay ise, x300 ve y400 deki renk 12345678 ise bişey yapma ama değil ise hp tuşuna basdır. Biraz daha basit açıklarsak, hp bizim değerini aldığımız tam ortadan aşağı düşerse orası bildiğiniz gibi siyah olur, script orayı siyah gördüğü anda hp tuşuna basıcaktır, kırmızı olduğundada durucak tekrar siyah olmasını bekleyecektir.

Pixelsearch ın düzgün çalışabilmesi için diyelimki siz renk belirlemesi yaparken 1024x768 ekran çözünürlüğü kullandınız o halde, başka bir bilgisayarda kullanılıcak ise çözünürük doğal olarak aynı olmalıdır.

Scriptin tam halini burdan indirebilirsiniz:
http://rapidshare.com/files/83964511/testMac.au3.html

Şimdilik bu kadar, olayın temeli anlaşılmıştır heralde.
Unutulmaması gereken, eğer gameguard veya xtrap tarzı bir program açık ise scriptimizi engelleyecektir :).
Bir dahaki sefer memory ile hp mp kontrolüne değinicem, şimdilik herkeze kolay gelsin,
iyi scriptlemeler. :P


16 yorum:

Fatih KARAKAŞ dedi ki...

Üstad eklediğiniz scripti çalıştırmayı denedim hata verdi. Biraz karıştırıp araştırdım anlayamadım hatanın ne olduğunu.
Hata şöyle:

Line-1:

Error: Variable used without being declared.


HELP ME PLS :)

313 dedi ki...

fatih şuan denedim aynı hatayı alamadım notepad e çok guzel z1 gonderiyor :P

sen sanırım anlatımı takip edip kendin yapmaya calıstın.

O halde sorunu nasıl çözümliyeceğini söyliyim çok basit değişkenlerde anlatmıştım.

Scite yi aç scripti build yapmadan GO ya bas. birden kapanıcaktır. konsolda (alt kısım) hata yazar ve yukarı ok işaretiyle hatanın yerini satırını gosterir. build yapılmış programlarda malesef -1 yazıyor hatalı.

şu şekilde bişey yazıcak konsolda :

C:\Yeni AutoIt v3 Script.au3(15,12) : WARNING: $start: possibly used before declaration.
If $start =
~~~~~~~~~~^
C:\Yeni AutoIt v3 Script.au3(15,12) : ERROR: $start: undeclared global variable.
If $start =
~~~~~~~~~~^

burda senin tanımlamadığın variable gozukur. yapıcağın tek şey se tanımlamak. en üstlere biyere Globak $start, değerliyse Global $start = 0 veya "asd" vs..

script i build yapmadan once GO yapmakta herzaman yarar var :)

Fatih KARAKAŞ dedi ki...

Hocam çok pozitifsiniz, bana hayatımda sanki yeni bir sayfa açmaya niyetlisiniz galiba :) Orta okula giderken ASP yi öğrenirkende böyle hevesliydim birden DEJAVU etkisi yarattı :)) neyse problemin çözümüne gelelim :) .

Anlattığınız gibi scripti SciTE'ye attım direkt GO'ladım :) yine hata iletisi aldım.

Ekrandan bir screenshout ->

http://www.fatihkarakas.com/autoit_ss.gif

Kolay gelsin.

313 dedi ki...

yorum için saol, takıldığın yerde yardım etmek benim için zevk hocam.

burda anladığım kadatıyla kullandığımız guiconstants.au3 kütüphaneleri değişik galiba.

benim kullandığım autoit sürümü v3.2.8.1 ona bir bak eskiyse sitesinden yeni sürümü indir kur. beta olmayanını.

oda olmazsa -1,-1 olan kısımdan sonrasını sil birde oyle dene.
yani şu şekilde :

$form1 = guicreate("test",250,131,-1,-1)
bitor($ws...) olan kısım pencerenin özelliklerini belirlemek için, yani baslatta gozuksunmu kapat tusu olsunmu vs. olmasada olur. Autoit in surumune build yaptığın bi script exesinin ozelliklerinden bakabilirsin. sürümde yazar.

yine hata olursa yine yardım etmeye calısırıs :)

Adsız dedi ki...

kardeş çalışman süper biz seni destekliyoruz özelllikle ben bi tür çözemedim auto ıt çözcem galiba

Adsız dedi ki...

isimsiz, blogdaki giriş konularını yukarıdan assagıya sırasıyla izlersen %50 yol katedersin, script programlama dilinden basittir gozun korkmasın, alıştıktan sonra parmaklar otomatik yazmaya başlıcak emin ol :)

sulo dedi ki...
Bu yorum yazar tarafından silindi.
sulo dedi ki...

FAtih Gibi bende aynı hata veriyor yardım plz ne olur swat_myth@hotmail.com

Adsız dedi ki...

Bu güzel çalışma ve anlatımlar için çok teşekkür ediyorum.

Bu örnekte arkadaşların problemine gelirsek ise outoitin versiyonları değiştikçe böyhle sorunlar çıkabilir. Ben şuanki autoitin güncel versiyonu ile denedim bende herangi bir sorun çıkmadan çalıştı.

Scipriti editlemeden sadece include ile GUIComboBox.au3 ve GUIConstants.au3 eklenmeli.

http://rapidshare.com/files/159578483/testMac.au3.html

Bu arada yeni örnek ve anlatımların devamını umut ediyorum. Gerçekten çok sade ve güzel bir anlatım gerçekleştirmişsin....

Sağlıcakla kalın.....

Unknown dedi ki...

merhaba aranızda en cahili benim galiba :) ya ben mesela kodları yapıyorum auto-it programının içine ama oluşturduğum nesneyi nasıl görcem yani exe vb. haline nasıl gelicek

Unknown dedi ki...

merhaba aranızda en cahili benim galiba :) ya ben mesela kodları yapıyorum auto-it programının içine ama oluşturduğum nesneyi nasıl görcem yani exe vb. haline nasıl gelicek

313 dedi ki...

siyahnur,
ilk başta scite den bi go yap, bir hatan varmı kontrol et yoksa aynı yerden compile veya build yap exe haline gelir scriptin. oda olmadı, script dosyanın üzerine sağ tıkla compileye bas yine oluşturur.

Adsız dedi ki...

Arkadaşlar Script kodlarının en başına şunları ekleyin ve kodlar içinde talha kardeşime teşekkürler;

Link burda: http://ul.to/teq5xi

erdi dedi ki...

kutu toplama çalışmıyor

Adsız dedi ki...

ya üstad bu Scipritin linkini tekrardan bu sayfaya koyabilirmisin yada mail versem atabilirmisin link ölmüşte ?
ozdhuseyin@gmail.com
bu arada gercekten güzel ve yararlı bilgiler teşekkürler

Unknown dedi ki...

sa
kardes banada atsana mail :smderdeger@gmail.com

ayrıca direk çalışırsa daha iyi olur bide pixel serch yöntemini pek nlamadım:D

Yorum Gönder