Cześć,
To mój pierwszy post na tym forum także witam wszystkich :)
Oglądając aktualne mistrzostwa polski pomyślałem sobie że fajnie by było gdyby do H3 powstał moduł obserwatora znanego z innych gier które aktualnie są grane na różnych zawodach.
Dlatego gdy tylko znalazłem chwilę postanowiłem ściągnąć CheatEngine i poszperać w pamięci gry aby zobaczyć jak to jest wszystko zrobione.
Szperam dopiero drugi wieczór także wiele nie udało mi się wydłubać jednak pomyślałem że założę ten temat ponieważ moje poszukiwania w internecie tych adresów do Heroes 3 (pewnie źle szukałem bo znalazłem tylko adresy hexów różnych rzeczy, a to troszkę co innego) spełzły na niczym. Na pewno ktoś posiada taką listę bo powstają mody jak HoTA czy HD Mod.
Ale do rzeczy. Adresy pobierałem z pliku wygenerowanego za pomocą HD Mod'a ściągniętego z działu download. Jako podstawkę wskazują adres biblioteki HD_SOD.dll więc nie powinny się różnić gdy wygenerujecie plik u siebie. Jeśli by się różniły to proszę dajcie mi znać ale najłatwiej jest w takim wypadku znaleźć współrzędne bohatera którym steruje gracz i znich wyliczyć base address.
0x30 - Maksymalna ilość zamków (48)
Zasoby gracza:
Drewno: "HD_SOD.dll"+00128B3C, offset: 0x9C, Typ danych: 4 Bajty
Rtęć: "HD_SOD.dll"+00128B3C, offset: 0xA0, Typ danych: 4 Bajty
Kamień: "HD_SOD.dll"+00128B3C, offset: 0xA4, Typ danych: 4 Bajty
Siarka: "HD_SOD.dll"+00128B3C, offset: 0xA8, Typ danych: 4 Bajty
Kryształ: "HD_SOD.dll"+00128B3C, offset: 0xAC, Typ danych: 4 Bajty
Klejnoty: "HD_SOD.dll"+00128B3C, offset: 0xB0, Typ danych: 4 Bajty
Złoto: "HD_SOD.dll"+00128B3C, offset: 0xB4, Typ danych: 4 Bajty
Tylko do odczytu surowce jakie otrzymaliśmy poprzedniego dnia.[/b]
Drewno: "HD_SOD.dll"+00128B3C, offset: 0x108, Typ danych: 4 Bajty
Rtęć: "HD_SOD.dll"+00128B3C, offset: 0x10C, Typ danych: 4 Bajty
Kamień: "HD_SOD.dll"+00128B3C, offset: 0x110, Typ danych: 4 Bajty
Siarka: "HD_SOD.dll"+00128B3C, offset: 0x114, Typ danych: 4 Bajty
Kryształ: "HD_SOD.dll"+00128B3C, offset: 0x118, Typ danych: 4 Bajty
Klejnoty: "HD_SOD.dll"+00128B3C, offset: 0x11C, Typ danych: 4 Bajty
Złoto: "HD_SOD.dll"+00128B3C, offset: 0x120, Typ danych: 4 Bajty
Ekran podróży:
Identyfikator aktualnie zaznaczonego bohatera*: "HD_SOD.dll"+00128B3C, offset: 0x04, Typ danych: 4 Bajty
Identyfikator aktualnie zaznaczonego miasta: "HD_SOD.dll"+00128B3C, offset: 0x3F, Typ danych: 4 Bajty
*Identyfikator bohatera stanowi składnik offsetu do listy bohaterów na której znajdują się struktury opisujące bohaterów
Identyfikator miasta na razie odkryłem że też musi na jakąś listę kierować
Ekran ze szczegółami bohaterów:
Index z listy bohaterów informujący o tym który jest zaznaczony: "Heroes3 HD.exe"+298AD4
Struktura bohaterów
Identyfikator pierwszego bohatera na liście (nie jest to początek listy) "HD_SOD.dll"+00128B3C, offset: B6A, Typ danych: 4 Bajty
Offsety opisujące dane w strukturze konkretnego bohatera
ID - 0x1A -> Aktualna pozycja "x" 2 bajty
ID - 0x18 -> Aktualna pozycja "y" 2 bajty
ID - 0x02 -> Aktualna ilość punktów many 2 bajty
ID + 0x1A -> Portret bohatera 1 bajt
ID + 0x08 -> ID Gracza który jest właścicielem
ID + 0x09 -> Początek imienia (nie wiem gdzie opisana jest długość jednak maksymalnie mogę wpisać 0xC bajtów)
ID + 0x2D -> Kierunek w który został wykonany ostatni ruch bohatera na mapie (?) [zgodny ze wskazówkami zegarka, 0 to północ] 1 bajt
ID + 0x2E -> Formacja jednostek 1 bajt
ID + 0x2F -> Ilość punktów ruchu (maksymalne) 4 bajty
ID + 0x33 -> Ilość punktów ruchu (aktualne) 4 bajty
ID + 0x37 -> Doświadczenie 4 bajty
ID + 0x3B -> Aktualny poziom 1 bajt
ID + 0x1B -> Docelowa pozycja "x" 4 bajty
ID + 0x1F -> Docelowa pozycja "y" 4 bajty
ID + 0x75 -> Wygląda na ziarno stosowane w RNG do awansu [wybór umiejętności drugorzędnych] (1 bajt)
ID + 0x102 -> Stan bohatera (1 - Uśpiony, 0 - Obudzony). W przypadku braku formacji dodawne jest +2 Brane pod uwagę przy puszczaniu kolejki
ID + 0x3BB -> Płeć (1 - Kobieta, 0 - Mężczyzna) 1 bajt
ID + 0x45C -> Ilość ataku 2 bajty
ID + 0x45D -> Ilość obrony 2 bajty
ID + 0x45E -> Ilość mocy 2 bajty
ID + 0x45F -> Ilość wiedzy 2 bajty
Umiejętności drugorzędne
0x1C - Ilość umiejętności, jest to również dystans pomiędzy poziomem umiejętności, a jej miejscem na liście
ID + 0xE7 - Ilość umiejętności których nauczył się bohater
ID + 0xAF - Początek listy umiejętności
ID + 0xCA - Koniec listy umiejętności
ID + 0xCB - Początek listy pozycji na których występują umiejętności
ID + 0xE6 - Koniec listy pozycji na których występują umiejętności
ID + 0xAF - Znajdowanie drogi, Pozycja 0xCB
ID + 0xB0 - Łucznictwo, Pozycja 0xCC
ID + 0xB1 - Logistyka, Pozycja 0xCD
ID + 0xB2 - Odkrywanie, Pozycja 0xCE
ID + 0xB3 - Dyplomacja, Pozycja 0xCF
ID + 0xB4 - Nawigacja, Pozycja 0xD0
ID + 0xB5 - Dowodzenie, Pozycja 0xD1
ID + 0xB6 - Mądrość, Pozycja 0xD2
ID + 0xB7 - Mistycyzm, Pozycja 0xD3
ID + 0xB8 - Szczęście, Pozycja 0xD4
ID + 0xB9 - Balistyka, Pozycja 0xD5
ID + 0xBA - Sokoli wzrok, Pozycja 0xD6
ID + 0xBB - Nekromancja, Pozycja 0xD7
ID + 0xBC - Finanse, Pozycja 0xD8
ID + 0xBD - Magia ognia, Pozycja 0xD9
ID + 0xBE - Magia powietrza, Pozycja 0xDA
ID + 0xBF - Magia wody, Pozycja 0xDB
ID + 0xC0 - Magia ziemi, Pozycja 0xDC
ID + 0xC1 - Nauka czarów, Pozycja 0xDD
ID + 0xC2 - Taktyka, Pozycja 0xDE
ID + 0xC3 - Artyleria, Pozycja 0xDF
ID + 0xC4 - Nauka, Pozycja 0xE0
ID + 0xC5 - Atak, Pozycja 0xE1
ID + 0xC6 - Płatnerstwo, Pozycja 0xE2
ID + 0xC7 - Inteligencja, Pozycja 0xE3
ID + 0xC8 - Talent magiczny, Pozycja 0xE4
ID + 0xC9 - Odporność, Pozycja 0xE5
ID + 0xCA - Pierwsza pomoc, Pozycja 0xE6
Machiny oblężnicze
ID + 0x17B -> Identyfikator slotu na baliste 4 bajty
ID + 0x183 -> Identyfikator slotu na wóz z amunicją 4 bajty
ID + 0x18B -> Identyfikator slotu na namiot medyka 4 bajty
ID + 0x193 -> Identyfikator slotu na katapulte 4 baj
Artefakty u bohatera
- Piąte miejsce na artefakt zdecydowanie jest dalej niż pozostałe 4..
- Przesuwanie artefaktów za pomocą suwaka fizycznie zmienia miejsca w pamięci
- Broń podmienia statystykę ataku w momencie założenia
- Nie ważne w którym slocie masz książkę magiczną gildia magów zawsze uzna że możesz się uczyć bez jej zakupu
- Książka magiczna posiada ID "0"
- Gdy slot książki magicznej jest zajęty to przy zakupie wędruje ona do plecaka (ale można kliknąć na artefakt z książki i się normalnie otworzy)
- Struktura artefaktu składa się z ID oraz payload (4 bajty) co daje łącznie (8 bajtów). Jedynie w przypadku artefaktu "1" [zwój z zaklęciem] zauważyłem wykorzystywanie payload jako ID zaklęcia na które wskazuje. ID zgodne są z kolejnością jaka występuje w strukturze [numerowane od 0]
0x40 -> Miejsc w sakwie (64 miejsca)
0x8 -> Dystans pomiędzy identyfikatorami artefaktu
ID + 0x123 -> Identyfikator slotu naszyjnik 4 bajty
ID + 0x13B -> Identyfikator slotu napierśnika 4 bajty
ID + 0x143 -> Identyfikator slotu rękawice w lewej ręce 4 bajty
ID + 0x14B -> Identyfikator slotu rękawice w prawej ręce 4 bajty
ID + 0x153 -> Identyfikator slotu butów 4 bajty
ID + 0x19B -> Identyfikator slotu książki magicznej 4 bajty
ID + 0x113 -> ID Artefaktu w miejscu głowy 4 bajty
ID + 0x11B -> ID Artefaktu w miejscu płaszczu 4 bajty
ID + 0x12B -> ID Artefaktu trzymanego w lewej ręce (miecza) 4 bajty
ID + 0x15B -> ID Pierwszego artefaktu z listy pod mieczem (licząc od góry) 4 bajty
ID + 0x163 -> ID Drugiego artefaktu z listy pod mieczem (licząc od góry) 4 bajty
ID + 0x16B -> ID Trzeciego artefaktu z listy pod mieczem (licząc od góry) 4 bajty
ID + 0x173 -> ID Czwartego artefaktu z listy pod mieczem (licząc od góry) 4 bajtyty
ID + 0x1A3 -> ID Piątego artefaktu z listy pod mieczem (licząc od góry) 4 bajty
ID + 0x1BA -> ID pierwszego artefaktu znajdującego się w sakwie 4 bajty
ID + 0x3B2 -> ID ostatniego artefaktu znajdującego się w sakwie [jeśli sakwa jest pełna] 4 bajty
ID + 0x3BA -> Ilość przedmiotów w sakwie (1 bajt)
Blokowanie slotów na artefakty
Hełm jest pierwszym slotem, a książka magiczna ostatnim
ID + 0x1AC - Czy slot hełmu jest dostępny 1 bajt (1 - Nie jest, 0 - jest)
ID + 0x1B9 - Czy slot książki magicznej jest dostępny 1 bajt (1 - Nie jest, 0 - Jest)
Informacje o wojsku wyglądają tak że najpierw są wszystkie identyfikatory stworzeń dopiero liczebność stworzeń w tej samej kolejności
0x1C - Różnica pomiędzy identyfikatorem jednostki, a jej ilością
ID + 0x77 -> Identyfikator jednostki na 1 pozycji 4 bajty
ID + 0x8F -> Identyfikator jednostki na 7 pozycji 4 bajty
ID + 0x93 -> Ilość jednostek na 1 pozycji 4 bajty
ID + 0xAB -> Ilość jednostek na 7 pozycji 4 bajty
Zaklęcia
Zaklęcia są 1 bajtowe i wystarczy ustawić flagę na "1" w celu możliwości używania zaklęcia w walce
ID + 0x416 = Przyzwanie okrętu
ID + 0x417 = Zniszczenie okrętu
ID + 0x418 = Wizja
ID + 0x419 = Zasoby ziemi
ID + 0x41A = Ukrycie
ID + 0x41B = Aura artefaktów
ID + 0x41C = Lot
ID + 0x41D = Spacer po wodzie
ID + 0x41E = Wrota wymiarów
ID + 0x42F = Miejski portal
ID + 0x420 = Ruchome piaski
ID + 0x421 = Pole minowe
ID + 0x422 = Pole siłowe
ID + 0x423 = Ściana ognia
ID + 0x424 = Trzęsienie ziemi
ID + 0x425 = Magiczna strzała
ID + 0x426 = Lodowy pocisk
ID + 0x427 = Błyskawica
ID + 0x428 = Implozja
ID + 0x429 = Łańcuch piorunów
ID + 0x42A = Krąg zimna
ID + 0x42B = Kula ognia
ID + 0x42C = Inferno
ID + 0x42D = Deszcz meteorytów
ID + 0x42E = Fala śmierci
ID + 0x42F = Zniszczenie nieumarłych
ID + 0x430 = Armagedon
ID + 0x431 = Tarcza
ID + 0x432 = Tarcza powietrza
ID + 0x433 = Tarcza ognia
ID + 0x434 = Ochrona przed powietrzem
ID + 0x435 = Ochrona przed ogniem
ID + 0x436 = Ochrona przed woda
ID + 0x437 = Ochrona przed zmienią
ID + 0x438 = Antymagia
ID + 0x439 = Rozproszenie
ID + 0x43A = Magiczne zwierciadło
ID + 0x43B = Uleczenie
ID + 0x43C = Wskrzeszenie
ID + 0x43D = Ożywienie
ID + 0x43E = Ofiara
ID + 0x43F = Błogosławieństwo
ID + 0x440 = Klątwa
ID + 0x441 = Żądza krwi
ID + 0x442 = Precyzja
ID + 0x443 = Osłabienie
ID + 0x444 = Kamienna skóra
ID + 0x445 = Promień osłabienia
ID + 0x446 = Modlitwa
ID + 0x447 = Radość
ID + 0x448 = Przygnębienie
ID + 0x449 = Fortuna
ID + 0x44A = Pech
ID + 0x44B = Przyśpieszenie
ID + 0x44C = Spowolnienie
ID + 0x44D = Pogromca smoków
ID + 0x44E = Szał
ID + 0x44F = Błyskawica tytana
ID + 0x450 - Kontratak
ID + 0x451 - Berserk
ID + 0x452 - Hipnoza
ID + 0x453 - Zapomnienie
ID + 0x454 - Oślepienie
ID + 0x455 - Teleportacja
ID + 0x456 - Usunięcie przeszkód
ID + 0x457 - Klonowanie
ID + 0x458 - Żywiołak ognia
ID + 0x459 - Żywiołak ziemi
ID + 0x45A - Żywiołak wody
ID + 0x45B - Żywiołak powietrza (ostatni po nim następują statystyki)
Temat będę sukcesywnie aktualizował o odnalezione informacje jednak nie obiecuje częstotliwości.