World of Tanks hajó kezük
Egyszer régen volt egy MMO World of Tanks. És leírni nem látja értelmét, legalább már hallott róla.
Ő kezdett játszani, amint kinyitotta MBT. De a szeretet az ásatások valaki másnak a kód nem kísértett. A nap jött és IDA (erős bontó) indult.
Saját személyes érzéseit nem valószínű, hogy érdekel valakit, így most az üzletet.
Annak érdekében, hogy sikeresen levelet bot van szükség információkat:
- szerelő
- nyelv a C / C ++
- Python (játékmotor fut rajta)
- python beágyazott
- technológia COM
- Direct3D technológia
- a bevezetés egy másik folyamat
- lehallgatás funkciók - hukah
- nyelven íródott bot (akár például: C #)
Az anyagot írt változata 0.9.7 béta teszt. Később ugyanabban a cikkben lesz írva a jelenlegi változat lesz a megjegyzéseket, ha voltak alapvető változások.
A játék használja a motort BigWorld.
Python - ez az alapon csak ez nem történt meg. Python nincs megvalósítva egy harmadik fél dll, de varrva az ügyfél maga, ahonnan mi kell futtatni.
Miért fut Python? Az összes játék, minden játék adatait tárolja, amelyben struktúrák sajátosságait nyelv van írva, és ezt az információt lehet olvasni a folyamatot. Ebben az esetben a Python keretet használt PyObject szerkezetét és annak utódai.
Ismét miért indul Python? Tájékoztatásul az olvasás folyamata memóriát, meg kell írni a tolmács. Semmi értelme, hogy újra feltalálni a kereket. Az alsó sorban jön le, hogy a végrehajtása Python funkciók közvetlenül a kliensen keresztül a beágyazott könyvtár vagy gépi kódban. Van egy pár lehetőség, hogy működjön együtt az adatok a játékban. Minden alkalommal sor fut kódot Python. Vagy egy modul betöltése hogy cache adatok és költségek kérdését a hajóban.
Előállítás tényleges adatok, az állam, amely nem változtatja a kivonási eljárás során, a legjobb megoldás a végén a renderelő szakasz (jellemző Direct3D EndScene). Ezen a ponton a kép teljesen kialakult, de nem jelenik meg a képernyőn, az adatok még nem újították meg, és mintha fagyott állapotban. Ez a funkció és meg kell fogni, azaz felvette a horog.
A jelenlegi végrehajtása a motor épül Direct3D kilencedik változat, de van egy árnyalatot. A motor használja az interfészek vagy IDirect3D9 (standard) vagy IDirect3D9Ex (haladó), attól függően, hogy a számítógép / operációs rendszer szolgáltatásait. Ezekkel interfészek is nyújtanak a különböző Direct3D eszköz (IDirect3DDevice9 / IDirect3DDevice9Ex), amelyben a belépési pont egy a funkció záróelem teszi különböző jelenet. A közös program az elfogás, a következő történik: betöltött könyvtár d3d9.dll létrehozott IDirect3D9 létrehozott IDirect3DDevice9, horog ágyazott EndScene. Van egy kis probléma, átvéve a IDirect3DDevice9 EndScene, nem tudjuk, hogy a szabályozás, ha IDirect3DDevice9Ex jön létre. Nem látja a pont elfogás a két funkció, csak egy fog működni.
Ezért könnyebb várni egy eszközt, majd tegye a horog, akkor a változatot, amely a motor. Az ügyfél olyan szerkezetű (nem félnek nem Python), felelős renderelés (nevezzük RenderContext), amely tartalmaz egy pár mezők és Direct3D Direct3DDevice. A mi feladatunk, vár egy nullánál nagyobb érték ezeken a területeken. Ha elvégezte őket, akkor tudni fogja, hogy ő és a Direct3D eszköz jön létre, és akkor lefagy a horgot.
De mi a helyzet a különbségeket, és IDirect3D9 IDirect3D9Ex? A különbségek több feladatot IDirect3D9Ex, valójában IDirect3D9Ex interfész utódja IDirect3D9, így IDirect3D9 funkciók azonos indexek IDirect3D9Ex, de van egy másik belépési pont, mivel ők képviselik a különböző osztályok. Ugyanez vonatkozik IDirect3DDevice9 / IDirect3DDevice9Ex. EndScene van egy index mindkét felületek, de egy másik belépési pont. A lényeg: nem vagyunk fontosak típusú létrehozott Direct3DDevice eszközök fontos számunkra a belépési pont. Ismerve a mutató az eszköz példány (ő RenderContext), megkapjuk a szükséges belépési pont.
Ez minden. A következő cikkben fogunk keresni RenderContext, pointer offset Direct3D fokon. Raktárból disassembler IDA.