Pagrindinis / Kaip aš kūriau World Of Warcraft Botą

Kaip aš kūriau World Of Warcraft Botą

Trumpas video skirtas apžvelgti gan seną, tačiau asmeniškai įdomų projektą

Turime 300 peržiūrų

Santrauka

Turinys

Kaip tai veikia

Norint, kad programa sugebėtų žaisti žaidimą, pirmas žingsnis - ji turi sugebėt orientuotis erdvėje.

Šį tikslą galima pasiekti skaitant kompiuterio atmintį. Turint visus reikalingus duomenis, tereikia tik suprogramuoti veikimą

Atminties skaitymas

Kiekvienas žaidimas savo būseną saugo RAM (Random Access Memory). Ji turi dvi esmines savybes:

1) Žinant kokiu adresu saugomi norimi duomenys, juos galima pasiekti iš kitos programos

2) Žodis Random reiškia, kad duomenys laikomi atsitiktine tvarka. Dedami ten, kur tuo metu laisva. Vadinasi radus vieną kartą, antrą kartą reiks ieškoti jau kitur. Vadinasi reikalingas algoritmas sugebantis tuos adresus atrasti kiekvieną kartą įjungus žaidimą.

Adresų atradimas

Adresus atrasti galima naudojantis Cheat Engine programa (arba alternatyva atliekančia tą pačią funkciją). Paprasčiausia metodika - susirasti skaičių kuris yra pakankamai stabilus, bet jį lengva pakeisti. Pvz. Armor, arba Max Hp. Paieškom adreso turinčio skaičių kuris nusako dabartinį kiekį, tada tą kiekį pakeičiam (buff'o pagalba, arba pasikeičiant ginklą) ir tarp rezultatų paieškom dar kartą, jau ieškodami naujo kiekio. Tikėtina, kad teliks pora adresų1 ir jie abu rodys tinkamą skaičių. Nors RAM duomenys yra atsitiktinai išdėlioti, susieti duomenys guli šalia, taigi radus vieną, jis yra savotiškas atskaitos taškas nuo kurio galima išskaičiuoti visus likusius duomenis.

Tiesa, konkrečiai World of Warcraft atveju, yra nusistovėjusios metodikos tam pirminiam taškui rasti, bet idėja lieka ta pati visų kitų žaidimų atveju.

[1] Adresų yra pora, nes žaidėjo duomenys egzistuoja dvejose struktūrose. Pirma struktūra - visi žaidimo objektai, tarp kurių egzistuoja ir pats žaidėjas. Antra - konkrečiai esamo žaidėjo duomenys. Baziniams duomenims abi struktūros yra tinkamos.

Boto valdymas

Valdome labai paprastai - imituodami klaviatūros mygtukų paspaudimus. Su pasisukimu norimu kampu šiek tiek subtiliau, bet mano atveju suveikė labai paprasta metodika - atsisukti į konkretų tašką ir apsisukti 360 laipsnių, paskaičiuojant kiek tai trunka (World Of Warcraft atveju turime krypties koordinatę, kas leidžia supaprastintai ir labai tiksliai tai išmatuoti). Žinant kiek laipsnių norima pasusikti, užtenka tiesiog atlikti seną gerą skaičiavimą kryžmai žinomą dar iš mokyklos laikų.

Boto medžiojimo algoritmas

Primityvus, bet efektyvus būdas yra taip vadinami Waypoint. Padedame nematomus taškus, t.y. tiesiog išsisaugojame koordinates faile ir suprogramuojame, kad jeigu botas neturi ką veikti (nėra priešų trumpu atstumu) judėtų link kito taško. Taškus išdėstome ratu, taigi botas gali amžinai lakstyti tuo ratu ir žudyti viską, kas pasitaiko pakeliui.

Autorius

Šarūnas Navickas
Šarūnas Navickas Projekto iniciatorius, video autorius, puslapio programuotojas

Python ir Clojure programuotojas, dirbantis su kalbos technologijomis - natūralios kalbos apdorojimu ir generavimu. Šio projekto iniciatorius.

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more