Problem z funkcją 7712 27

O temacie

Autor Siemekk

Zaczęty 11.12.2016 roku

Wyświetleń 7712

Odpowiedzi 27

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Używam tej funkcji:
func void SetAsPlayer (var C_NPC slf) {
    /* Adresse der Funktion */
    const int oCNpc__SetAsPlayer = 7612064; //0x7426A0 (Gothic2.exe)
   
    var int slfPtr;
    slfPtr = MEM_InstToPtr (slf);
   
    //mov ecx slfPtr
    ASM_1 (ASMINT_OP_movImToECX); /* move immediate value to ecx */
    ASM_4 (slfPtr); /* eine Konstante (immediate) */
   
    //call oCNpc__SetAsPlayer
    ASM_1 (ASMINT_OP_call);
    ASM_4 (oCNpc__SetAsPlayer - ASM_Here() - 4);
   
    ASM_RunOnce(); /* retn wird automatisch hinzugefügt */
};
Ale crashuje przy zmianie postaci... Ktoś wie może dlaczego?  Byłbym wdzięczny.
 

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

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Nie możesz użyć tej która jest pod nią? Tą przetestowałem i działa bez problemu.
func void SetAsPlayer (var C_NPC slf) {
    const int oCNpc__SetAsPlayer = 7612064;
    CALL__thiscall (MEM_InstToPtr (slf), oCNpc__SetAsPlayer);
};
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Mi crashuje :/
      if(MEM_KeyState(KEY_X)==KEY_PRESSED)
      {
            Print("Zmiana gracza");
            var c_npc her; her = Hlp_GetNpc(PAL_200_Hagen);
            SetAsPlayer(her);
      };
Hagen przywołany, lecz ciągle crashuje(bez zmiennej też...)
 

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

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Sprawdź, czy Hlp_GetInstanceID(her) jest większe od 0.

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Żeby to działało, musisz być w pobliżu npc, w którego chcesz się zmienić.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

Problem z funkcją
#5 2016-12-12, 09:03(Ostatnia zmiana: 2016-12-12, 10:07)
Żeby to działało, musisz być w pobliżu npc, w którego chcesz się zmienić.
jest okręslony dystans w jakim można przeskoczyć do innego npc.

dystans ten możemy edytować przez odp adresy (Lehona mi wysyłała dane) , tyle że spadają FPs.

poszukam tego maila od Lehony, czyli jedna metoda to bawić się adresami jn i druga z bitfieldami pod g1 mi nie działała.

Hi Lehona, would be so kind to help me with following:I can not wake up a specific NPC. I can change remove range and instert range adressess, but the game then rapidly slowing down.
func void activate_npc() {
var C_NPC GorHanis;GorHanis = Hlp_GetNpc(TPL_1422_GorHanis);

GorHanis._zCVob_vob_bitfield[2] = (GorHanis._zCVob_vob_bitfield[2] & ~ zCVob_bitfield2_sleepingMode) | 0;
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
I don't quite know how to wake up NPCs, but for anyone that's trying to research it himself: For some reason, it's called "shrinking" in the engine, not sleeping (like the bitfield would suggest) and functions of interest will bei oCNpc::AvoidShrink and something like oCNpc::Unshrink. Maybe I will come back to this later, don't have time right now.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
[f] 00:29 Fault: 0 Q:     [start of stacktrace]
[f] 00:29 Fault: 0 Q:             MEMINT_HANDLEERROR(2, 'MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.') +   62 bytes
[f] 00:29 Fault: 0 Q:             MEM_WARN('MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.') +   21 bytes
[f] 00:29 Fault: 0 Q:             MEM_PTRTOINST(392852120)                                       +  128 bytes
[f] 00:29 Fault: 0 Q:             GETWEAPON((instance)405576952)                                 +   26 bytes
[f] 00:29 Fault: 0 Q:             QUIVERS_DOMAKE((instance)405576952)                            +   49 bytes
[f] 00:29 Fault: 0 Q:             MEM_CALLBYID(17130)                                            +  224 bytes
[f] 00:29 Fault: 0 Q:             _BC_FORALL(17130, 1)                                           +  216 bytes
[f] 00:29 Fault: 0 Q:             DOFORSPHERE(QUIVERS_DOMAKE)                                    +   59 bytes
[f] 00:29 Fault: 0 Q:             CREATEQUIVER_BROADCAST()                                       +   10 bytes
[f] 00:29 Fault: 0 Q:             FRAMEFUNCTIONS(15)                                             +  104 bytes
[f] 00:29 Fault: 0 Q:             FOREACHHNDL(8838, FRAMEFUNCTIONS)                              +  263 bytes
[f] 00:29 Fault: 0 Q:             [UNKNOWN]                                                      +-1687407439 bytes
[f] 00:29 Fault: 0 Q:     [end of stacktrace]
[w] 00:29 Warn:  0 Q:     MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.
[f] 00:29 Fault: 0 Q:     [start of stacktrace]
[f] 00:29 Fault: 0 Q:             MEMINT_HANDLEERROR(2, 'MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.') +   62 bytes
[f] 00:29 Fault: 0 Q:             MEM_WARN('MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.') +   21 bytes
[f] 00:29 Fault: 0 Q:             MEM_PTRTOINST(392852120)                                       +  128 bytes
[f] 00:29 Fault: 0 Q:             GETWEAPON((instance)405576952)                                 +   52 bytes
[f] 00:29 Fault: 0 Q:             QUIVERS_DOMAKE((instance)405576952)                            +   49 bytes
[f] 00:29 Fault: 0 Q:             MEM_CALLBYID(17130)                                            +  224 bytes
[f] 00:29 Fault: 0 Q:             _BC_FORALL(17130, 1)                                           +  216 bytes
[f] 00:29 Fault: 0 Q:             DOFORSPHERE(QUIVERS_DOMAKE)                                    +   59 bytes
[f] 00:29 Fault: 0 Q:             CREATEQUIVER_BROADCAST()                                       +   10 bytes
[f] 00:29 Fault: 0 Q:             FRAMEFUNCTIONS(15)                                             +  104 bytes
[f] 00:29 Fault: 0 Q:             FOREACHHNDL(8838, FRAMEFUNCTIONS)                              +  263 bytes
[f] 00:29 Fault: 0 Q:             [UNKNOWN]                                                      +-1687407439 bytes
Może pakiet BroadCasts jest winą?
 

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

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Używam Brodcast od dawna i ani razu nie miałem problemu z nim. Poza tym ten błąd dotyczy czego innego. Nie sprawdzasz czy przypisywany pointer do instancji nie zwraca nulla.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Zawraca wysoki wynik:
Print(IntToString(MEM_InstToPtr(_Crait)));
Nwm. czy to przydatne, ale podczas crashy w oknie pisze coś z klasą oCGame.
oCGame::RenderEdit:: Oraz to:
[f] 00:29 Fault: 0 Q:             [UNKNOWN]                                                      +-1687407439 bytes
[f] 00:29 Fault: 0 Q:     [end of stacktrace]
[w] 00:29 Warn:  0 Q:     MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.
[i] 00:29 Info:  5 X:     EmergencyExit: Releasing all DirectX-Objects ... .... <zRndD3D_Render.cpp,#283>
[i] 00:29 Info:  5 X:     EmergencyExit: D3DXUninitialize done .... <zRndD3D_Render.cpp,#301>
 

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

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Zawraca wysoki wynik

Poza tym ten błąd dotyczy czego innego.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
var int ptr; ptr = _@(slf);
if(ptr==NULL){costam};
Coś takiego :hmmm:
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
nie da się obudzić pojednyczych npc, bawiłem sie tymi adresami, tzn im bardziej zwiększałem zasięg, gdzie mozna "przeskoczyc" do coraz dalej oddalonego npc , tym wiecej traciłem fpsów. w g2 pewnie jest podobnie, generalnie to działało! po co inaczej kombinować

//
//MEM_WriteInt(SPAWN_INSERTRANGE_Address , (MEM_ReadInt(SPAWN_INSERTRANGE_Address)+1021000));
//MEM_WriteInt(SPAWN_REMOVERANGE_Address , 8720314;);

 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
A dynamiczna zmiana tej wartości działa czy trzeba ją zmieniać przed pierwszym spawnem? Jakby działała to można ją zwiększać na czas przemiany a potem ustawiać spowrotem. Wtedy teoretycznie spadek FPS nie byłby stały a występowałby tylko przy zmianie bohatera (i tak jakiś spadek przy tym następuje zapewne).
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Problem w tym, że ten NPC stoi pół metra od bohatera :lol2: Poza tym funkcja się wywoła gdy dystans do NPC jest mniejszy od 400 >.<
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

Problem z funkcją
#15 2016-12-13, 21:52(Ostatnia zmiana: 2016-12-14, 11:44)
@Xardas47 dokładnie tak  edytowałem tylko na czas zmiany. jakbyś nie wiedział to dam dokłądny przykład , generalnie , aby to działało dobrze obie wartości zwiększamy zawsze o tyle samo, inaczej nie działa
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota

Siemekk
Złote Wrota

Problem z funkcją
#16 2016-12-14, 18:05(Ostatnia zmiana: 2016-12-14, 18:51)
LoL jak to zbindować bez FrameFunction? Gdy ustawiłem to aby zmieniło gracza po dostaniu Expa działa bez zarzutu... Więc jak zrobić inaczej wywołanie tego na klawiszu?
 

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

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
A czasem nie wywołuję przez chwilę w której naciska się klawisz co klatkę? Jak to się wykonuję kilka razy coklatkowo to możliwe że dlatego crashuje.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
if(MEM_KeyState(KEY_X)==KEY_PRESSED)
{
Crash dotyczy adresu oCGame::Render a dzięki temu hookowi działa całe FrameFunctions.
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
To zrób tick rockiem. Ja klawiszem normalnie przeskakiwalem postacie
 


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