Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Obsługa zdarzeń obiektu
#1
Spędziłem ostatnio dużo czasu w maszynie VM Arma2OA. Walczyłem z pewnym anty-cheatującym kopią / wklejeniem / odsprzedawcą i zamiast prostą manipulacją skryptami przechodzącymi przez VM, aby obejść jego kontrole, odkryłem, że łatwiej jest modyfikować obiekty bezpośrednio w pamięci lub w hakach funkcje skryptów i zmieniaj ich zachowanie. Wiele się przy tym nauczyłem i pomyślałem, że mogę dzielić jedną rzecz, którą uznałem za szczególnie interesującą i potencjalnie użyteczną: programy obsługi zdarzeń w jednostkach gier.   Jednostki posiadają serię programów obsługi zdarzeń dla określonych zdarzeń, takich jak zabijanie lub strzelanie z broni. Natychmiast po wystąpieniu jednego z tych zdarzeń wykonywany jest kod dołączony do obsługi zdarzenia. Na przykład, jeśli uruchomiłeś ten kod przez maszynę wirtualną skryptu:     Kod:   player addEventHandler ["zabity", "format podpowiedzi [" Zabity przez% 1 ", _ ten wybierz 1]"]   jeśli zostaniesz zabity, ten kod zostanie uruchomiony, a ty dostaniesz wskazówkę w rogu, pokazującą, kto cię zabił. Listę wydarzeń i informacje, które można uzyskać za ich pośrednictwem, można znaleźć tutaj: https://community.bistudio.com/wiki/...Event_Handlers   Więc te muszą być gdzieś przechowywane w pamięci, prawda? Prawdopodobnie podłączony do samego obiektu obiektu? Okazuje się, tak. Wpisy do zdarzenia obsługi zdarzenia są rzeczywiście instancjami wewnątrz klasy encji. Jest 34 programów obsługi zdarzeń, które są połączone ze sobą zaczynając od obiektu + 0x2AC;     Ten obraz został przeskalowany. Kliknij ten pasek, aby wyświetlić pełny obraz. Oryginalny obraz ma rozmiar 690 x 227.   To jest pierwszy program obsługi zdarzeń: Killed. Wystrzeliwuje, gdy umierasz. Możesz zobaczyć w DayZ, uruchamia funkcję DayZ player_death, która tworzy twoje zwłoki i teleportuje cię z powrotem do debugowania i wszystkie te rzeczy.   Tak więc każda procedura obsługi zdarzenia ma wskaźnik do tabeli zdarzeń, która jest tablicą obiektów z vtable, liczbą i wskaźnikiem do ciągu army, który reprezentuje kod, który ma być wykonany po uruchomieniu zdarzenia. Możesz dowolnie wyzerować tablicę, aby wymazać programy obsługi zdarzeń, lub dodać własne programy obsługi zdarzeń, jeśli chcesz.   Na przykład można wyczyścić procedury obsługi zdarzeń "HandleDamage", aby uzyskać szybki i łatwy tryb God w DayZ. Możesz wyczyścić "wypalone" programy obsługi zdarzeń, aby zatrzymać Infistar od podnoszenia swojej superszybkiej prędkości wylotowej, lub strzelanie makarowem za 250 funtów. Możesz dodać swój własny program do obsługi zdarzeń, który wyczyści twój ekwipunek, gdy umrzesz, więc ktokolwiek cię zabił, nie dostaje twoich zhakowanych rzeczy.   Lub możesz dodać procedury obsługi zdarzeń, które wykonują menu skryptowe lub cokolwiek używasz skryptów. Szybka i łatwa metoda wstrzykiwania skryptu. Niebo jest granicą.   Kolejność procedur obsługi zdarzeń w pamięci jest zgodna z tym wyliczeniem:       Kod:   enum {Killed = 1 Hit Engine GetIn GetOut Fired FiredNear IncomingMissile Dammaged Gear Fuel AnimChanged AnimDone Init Usuń LandedTouchDo lądowaniaStopped HandleDamage HitPart Supressed LoadOutChanged CargoChanged GetInMan GetOutMan Respawn TurnOut TurnIn AttachTo HandleHeal HandleIdentity AnimStateChanged WeaponAssembled WeaponDisassembled Local}   Wszystkie programy do obsługi zdarzeń są w postaci zwykłego tekstu, więc możesz je modyfikować, usuwać lub dodawać według własnego uznania. To jest za łatwe.
Reply
#2
miły udział, dzięki
Reply
#3
Nice Thread, Wielkie dzięki za ten wpis
Reply
#4
to jest złoto thx za udostępnianie
Reply
#5
GJ! chociaż mogli oni okresowo sprawdzać te Event Handlers'y i jeśli zostaną zmienione, mogliby po prostu Cię kopnąć. Ale to otwiera niezliczone możliwości Dziękuję za udostępnienie
Reply
#6
Nie wszystkie zdarzenia mają kod do wykonania. I obrażenia Uchwyt nie działa z atakiem zombie.
Reply
#7
Czy ktoś może publikować i funkcji (C # lub PseudoCode, C ++) do tworzenia EventHandler?
Reply
#8
to jest miłe! thx za udostępnianie
Reply
#9
Te przesunięcia nie wydają się działać dla mnie: Podstawa + 13a8 + 4 + 2ac
Reply
#10
Zacytować: Napisał pierwotnie MrNiko Te przesunięcia nie wydają się działać dla mnie: Podstawa + 13a8 + 4 + 2ac Gra tak często się aktualizuje, a przesunięcia zmieniają się tak bardzo, że będziesz musiał sam je znaleźć lub poczekać (i mieć nadzieję), aż ktoś opublikuje zaktualizowane.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)