Różnica między MEM_ReadInt a MEM_PtrToInst 1253 5

O temacie

Autor Siemekk

Zaczęty 29.12.2016 roku

Wyświetleń 1253

Odpowiedzi 5

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
W tym temacie nie mam żadnego problemu, tylko jestem bardzo ciekawy jak to działa.
MEM_ReadInt/WriteInt wiem jak działa, oraz dobrze wiem że nie potrzebuje struktury klasy w grze, a pointery otrzymuje z bitów. Zaś MEM_PtrToInst / _^ potrzebuje budowę klasy, aby otrzymać to co chcę za pomocą:
zmienna.wartość; Jednak w jaki sposób to działa? W jaki sposób gra wie, że to akurat jest ten pointer?
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Pointer = wartość liczbowa
Instance = klasa

W teorii to to samo, bo numerki, ale nie można dodać dwóch instance, a można dodać dwa pointery (problem w tym, że zamiana w instance nic nie da - crash). ReadInt odczytuje wartość z pamięci gry, PtrToInst, czy też _@() zamienia instance w numerek (pointer).

Przyjmijmy, że hero wynosi 1931:
MEM_ReadInt(1931); da nam hero.
MEM_PtrToInst(hero); / _@(hero); da nam 1931

Nie możesz przypisać instance przedmiotu do instance npc. Dajmy na to, że:
hero = 1931;
itmw_2h_special_01 = 1931;

var oCItem itm; itm = MEM_ReadInt(1931); = pobieramy ten przedmiot, zaś zastępując oCItem klasą oCNpc, da nam hero.

_@() / MEM_PtrToInst() zmienia jakąkolwiek instance w pointer, a MEM_ReadInt() odczytuje wartości z silnika.

MEM_ReadInt(itmw_2h_special_01); może dać Ci ptr do klasy SkyController, a skonwertowanie tego z powrotem może Ci dać instance noża na wilki (to się praktycznie nigdy nie zdarza, dałem tylko jako przykład, aczkolwiek mnie się takie coś przytrafiło). W przypadku użycia _@() / MEM_PtrToInst(), zawsze będzie ta sama liczba.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Cytuj
var oCItem itm; itm = MEM_ReadInt(1931); = pobieramy ten przedmiot, zaś zastępując oCItem klasą oCNpc, da nam hero.
Z tego co wiem MEM_ReadInt zawraca int'a a nie wartość do klasy, wywali błąd. To by zadziałało dzięki _^(1931);
Bardziej mi chodzi  o to jakim cudem gra wie który to wskaźnik za pomocą _^ ...
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Mała pomyłka z mojej strony w tym zapisie.

Są to bity. Gra zapisuje jakieś ID/instance itp. pod dany bit i potem odczytuje z tego bita. O bitach mało wiem, więc nie będę się obszernie wypowiadał.

To tak samo jakbyś sobie położył długopis na prawym górnym rogu biurka i zapamiętał, gdzie on się znajduje, po czym jak ktoś Ci powie, żebyś wziął ten długopis, weźmiesz go od razu. :F
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Znając życie ten długopis by spadł :F
Cytuj
_@() / MEM_PtrToInst() zmienia jakąkolwiek instance w pointer, a MEM_ReadInt() odczytuje wartości z silnika.
_@ = MEM_InstToPtr();
MEM_PtrToInst = _^();
Tak na przyszłość ;p i z angielskiego:
1)Zawróć Instancję na pointer _@(pal_200_hagen) zawróci oCNpc
2)Zawróć Pointer z Instancji np. var zCView v; v = _^(MEM_GAME.array_view[1]);
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
1)Zawróć Instancję na pointer _@(pal_200_hagen) zawróci oCNpc
2)Zawróć Pointer z Instancji np. var zCView v; v = _^(MEM_GAME.array_view[1]);

This is largely correct (as far as I can understand - google translate is... okay-ish).

_@() does, however, not "turn it back into an oCNpc". Every instance may have an object of its type assigned to it.
Thus:
class example { var int i; };
instance exampleInstance(example);

...
print(inttostring(_@(exampleInstance));
should print either 0 or -1 (not sure which one) because no object of that type has been assigned to exampleInstance.

_@() can also be used to get the address of a simple integer variable:
var int i;
var int ptr; ptr = _@(i);
MEM_WriteInt(ptr, 15);
Print(IntToString(i));
This will print 15.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry