Ikarus (Pakiet skryptów) 412401 1020

O temacie

Autor orcwarrior

Zaczęty 11.06.2010 roku

Wyświetleń 412401

Odpowiedzi 1020

Halicor

Halicor

Użytkownicy
Hauptsturmfuhrer
posty365
Propsy57
ProfesjaNierób
  • Użytkownicy
  • Hauptsturmfuhrer
Nigdzie nie widać takiej informacji, bardziej bym się skłonił że działa tylko na G2.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Shit happens . OK może napisze do szapa
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Jak Ikarus wysyła błędy do zSpy? Mam taką końcówkę Log'a:
[f] 01:34 Fault: 0 Q:     [start of stacktrace]
[f] 01:34 Fault: 0 Q:             CMUSIC_GETTHEME()                                              +   48 bytes
[f] 01:34 Fault: 0 Q:             CMUSIC_CALLBACK()                                              +    5 bytes
[f] 01:34 Fault: 0 Q:             FRAMEFUNCTIONS(13)                                             +  104 bytes
[f] 01:34 Fault: 0 Q:             FOREACHHNDL(9080, FRAMEFUNCTIONS)                              +  263 bytes
[f] 01:34 Fault: 0 Q:             [UNKNOWN]                                                      +-296609363 bytes
[f] 01:34 Fault: 0 Q:             _FF_HOOK()                                                     +   32 bytes
[f] 01:34 Fault: 0 Q:             MEM_CALLBYID(42266)                                            +  224 bytes
[f] 01:34 Fault: 0 Q:             _HOOK(676923640, 988452456, 0, 431926464, 20313484, 5289, 507725001, 682025800, 5289) +  498 bytes
[f] 01:34 Fault: 0 Q:             [UNKNOWN]                                                      +172230091 bytes
[f] 01:34 Fault: 0 Q:     [end of stacktrace]
I skąd mam wiedzieć w jakiej funkcji jest błąd? Access Violation wywaliło mi zSTRING::zSTRING, czyli coś z ciągiem znaków, jednak nie mam pojęcia gdzie. Sprawdziłem funkcję CMUSIC_GetTheme, dodałem do niej MEM_Info, jednak nie mam tego w zSPY. Więc moje pytanko - Jak Ikarus wysyła błędy do zSpy i jak je prosto odczytać?
 

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

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Pierwsza funkcja w zrzucie stosu jest ostatnią wywoływaną funkcją. Więc winowajcą jest funkcja CMUSIC_GETTHEME. Nad stosem powinny być dodatkowe informacje. Wiele funkcji Ikarusa debuguje, gdy argument jest niewłaściwy.

Stos jest tworzony przez funkcję MEMINT_PrintStackTraceLine.
 
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
Tylko funkcja wszędzie jest sprawdzana:
func string CMusic_GetTheme()
{
var string zone;
var int vob;
vob = MEM_ReadInt(10111524); //oCZoneMusic::current_zone

if(vob)
{
zone =  MEM_ReadString(vob + 16);
}
else
{
return "";
};

if(STR_Len(zone) > 3)
{
var string res; res = STR_SubStr(zone, STR_Len(zone) - 3, STR_Len(zone));

if(STR_Len(res) > 0){
return res;
};
};
return "";
};
A mimo to ciągle mi wywala w niej błąd :/  Jedyne co wywala błędy to STR_SubStr, ale nawet w Ikarusie jest opisane, że ten błąd nigdy nie spowoduje katastrofy (Debug jakiś chyba). Błąd jest z funkcją silnika zSTRING::zSTRING, a więc coś związane z argumentem typu string. Jedyne co jeszcze używa argumentu typu string to te funkcje:
func string CMusic_GetWorldTheme()
{
//ToDO: Other worlds...
MEM_PushStringParam(CMusic_GetTheme());
MEM_Call(CMusic_DEF_Soundtrack_NW);
return MEM_PopStringResult();
};

func string CMusic_GetFightTheme()
{
//ToDO: Other worlds...
MEM_PushStringParam(CMusic_GetTheme());
MEM_Call(CMusic_DEF_Soundtrack_NW_FGT);
return MEM_PopStringResult();
};
CMusic_DEF_Soundtrack_NW_FGT i CMusic_DEF_Soundtrack_NW, to funkcje sprawdzające (Zawsze zawrócą minimum ".ogg"; Więc już nie wiem co mogłem zepsuć.

Edit: Zapomniałem wspomnieć, że wywala zawsze po kilkukrotnym wczytaniu gry!
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Może być ze tej funkcji nie uruchomisz używając by framefunctions.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Gdzieś jest błąd, ale gdzie - może być, że FF, ale to trochę dziwne, bo zawsze się gryzło z metodami oCNpc, a druga sprawa, że problem jest z konstruktorem zSTRING...
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Spróbuj inicjowanie tick tockiem. Będziesz wiedział czy ff
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Błąd jest tutaj:
if(vob)
{
MEM_Info("GetTheme #3");
MEM_Info(I2S(vob));
zone =  MEM_ReadString(vob + 16);
MEM_Info("GetTheme #4");
}
Tylko dlaczego wywala? Vob jest sprawdzany, więc nie ma możliwości pomyłki... Może ktoś bardziej obeznany ogarnie o co chodzi? @Splash lub @Bogdan Zwei?


[i] 01:08 Info: 10 B:         zDSK: Closed file GOTHIC.INI .... <zDisk.cpp,#616>
[i] 01:08 Info:  3 B:     GMAN: Leaving Menu-Section .... <oGameManager.cpp,#1537>
[i] 01:08 Info:  0 Q:     GetTheme #1
[i] 01:08 Info:  0 Q:     GetTheme #2
[i] 01:08 Info:  0 Q:     GetTheme #3
[i] 01:08 Info:  0 Q:     656670776
[f] 01:08 Fault: 0 Q:     [start of stacktrace]
[f] 01:08 Fault: 0 Q:             CMUSIC_GETTHEME()                                              +  104 bytes
[f] 01:08 Fault: 0 Q:             CMUSIC_GETWORLDTHEME()                                         +    5 bytes
[f] 01:08 Fault: 0 Q:             CMUSIC_SETTHEME()                                              +   32 bytes
[f] 01:08 Fault: 0 Q:             CMUSIC_CALLBACK()                                              +  107 bytes
[f] 01:08 Fault: 0 Q:             FRAMEFUNCTIONS(13)                                             +  104 bytes
[f] 01:08 Fault: 0 Q:             FOREACHHNDL(9080, FRAMEFUNCTIONS)                              +  263 bytes
[f] 01:08 Fault: 0 Q:             [UNKNOWN]                                                      +-76234555 bytes
[f] 01:08 Fault: 0 Q:             _FF_HOOK()                                                     +   32 bytes
[f] 01:08 Fault: 0 Q:             MEM_CALLBYID(42266)                                            +  224 bytes
[f] 01:08 Fault: 0 Q:             _HOOK(499448632, 557009096, 0, 451549024, 20313484, 5289, 527213769, 637195016, 5289) +  498 bytes
[f] 01:08 Fault: 0 Q:             [UNKNOWN]                                                      +-74383669 bytes
[f] 01:08 Fault: 0 Q:     [end of stacktrace]
[f] 01:08 Fault: 0 Q:     Exception handler was invoked. Ikarus tried to print a Daedalus-Stacktrace to zSpy. Gothic will now crash and probably give you a stacktrace of its own.

 

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.
Musiałbyś pokazać cały skrypt. Tutaj mogę wywnioskować, że Readstring jest niepoprawny. Druga opcja to MEM_Info - pamiętam, że po jakimś updacie przestało funkcjonować poprawnie, lecz nie wiem czy zostało to naprawione. Kiedyś używałem około 5 MEM_Info co klatkę, nic się złego nie działo, zainstalowałem nową wersję Lego czy Ikarusa i cała gra zaczęła zacinać, FPS spadły z 60 do 7 - 20.
 
: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
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
https://pastebin.com/LEiR74YC
Nawet bez MEM_Info wywala. CMusic, to moja biblioteka dll (jest sprawna). Problem jest tam z MEM_ReadString... tylko nie wiem dlaczego.
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
ja mam tez pytanko. czy da się aby selection box był zwiększany np o 10-15%, a nie jak poniżej to roZdziałki x. próbowałem wpisywać zmienne,ale to nic nie dało.

func void SetChoiceBoxScale ()
{
    var int ptr; ptr = MEM_ReadInt(MEMINT_oCInformationManager_Address+28);
    MEM_WriteInt (ptr+64, STR_ToInt (MEM_GetGothOpt ("VIDEO", "zVidResFullscreenX")));
    MEM_WriteInt (ptr+56, 0);
};

 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
MEM_WriteInt (ptr+64, STR_ToInt (MEM_GetGothOpt ("VIDEO", "zVidResFullscreenX")));
MEM_WriteInt (ptr+56, 0);
Zapewne pierwsza linijka to pozycja końcowa, a druga to pozycja startowa.
 

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

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
print zwraca 1024, ale wpisanie samej zmiennej nic nie daje. a mi nie zalezy na rozciągnięciu na całą szerokość ekranu tylko o trochę, aby niektórych opcji dialogowych nie ucinało.

var int ptr; ptr = MEM_ReadInt(MEMINT_oCInformationManager_Address+28);
    //MEM_WriteInt (ptr+64, STR_ToInt (MEM_GetGothOpt ("VIDEO", "zVidResFullscreenX")));
    MEM_WriteInt (ptr+64, 1024);
    MEM_WriteInt (ptr+56, 0);

 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Lepiej rozciągnąć i dodać centrowanie dialogów, tak jak na tym screenie:

Potrzebna jest PRAWIDŁOWA struktura klasy zCViewText2 (Ta z WoG'a jest błędna!)
A jeżeli chcesz ogarnąć, tak jak ty mówisz, to musisz znać strukturę klasy oCViewDialog? (Zobacz jaka to klasa za pomocą Print(MEM_GetClassName(ptr)); )
 

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
Błąd jest tutaj:
if(vob)
{
MEM_Info("GetTheme #3");
MEM_Info(I2S(vob));
zone =  MEM_ReadString(vob + 16);
MEM_Info("GetTheme #4");
}
Tylko dlaczego wywala? Vob jest sprawdzany, więc nie ma możliwości pomyłki... Może ktoś bardziej obeznany ogarnie o co chodzi? @Splash lub @Bogdan Zwei?
Skąd wiesz, że tam jest napis, a nie liczba? Spróbuj przypisać do float lub int.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Offset w klasie zCObject o wartości 16 zawsze zawróci zSTRING jest to object name. A klasa oCZoneMusic to pochodna zCObject.
 

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

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Właśnie wymyśliłem coś genialnego! Mianowicie Ikarus ładowany przed startem rozgrywki.
Metoda jest bardzo prosta - tworzymy mały świat (Najlepiej aby miał 1 wielokąt w meshu), ustalamy w pliku .ini parametr -nomenu, a następnie ustalamy jako świat, nasz świat z jednym wielokątem. Odpalamy grę, i widzimy, że mamy nasz świat, ale jak klikniemy ESC, to wyłączy nam się gra. Tutaj przychodzi znajomość skryptów, i wiedza, że przy inicjacji świata zawsze wywoła się funkcja Init_NazwaSwiata. Tworzymy więc funkcję:
void Init_Ikarus(); //Mój świat miał nazwę Ikarus
We wnętrzu funkcji Inicjujemy Ikarusa, i przywracamy menu in-game.
MEM_InitAll();
const int nomenuPtr = 8980632; //0x890898
MemoryProtectionOverride(nomenuPtr, 6);
var int AAAA; AAAA = (65 << 24) | (65 << 16) | (65 << 8) | (65 << 0);
MEM_WriteInt(nomenuPtr, AAAA);
MEM_WriteInt(nomenuPtr + 2, AAAA); /* now the param "AAAAAA" instead of "nomenu" is asked for */
Funkcja stworzona przez Sektenspinner'a bardzo jest tutaj pomocna :) Teraz gdy naciśniemy ESC, to otworzy nam się stare menu.
Jednak gothic przy próbie odpalenia nowej gry odpali nam nasz świat Ikarus.zen Metoda jest prosta - Hook na zCWorld::LoadWorld(zSTRING);
Jest to banalne:
const string OriginalWorld_Name = "NewWorld\NEWWORLD.ZEN";
func void RestoreWorld()
{
var string msg; msg = MEM_ReadString(MEM_ReadInt(ESP + 4));
if(Hlp_StrCmp(msg, "Ikarus.zen"))
{
var int p; p = _@s(OriginalWorld_Name);
MEM_WriteInt(ESP + 4, p);
};
};
OriginalWorld_Name, to ścieżka z nazwą świata. Więc jeżeli zen który ma się załadować nosi nazwę Ikarus.zen, to skrypt zmieni jego nazwę na naszą upragnioną nazwę :) Wywołujemy Hooka dodając wpis do Init_Ikarus:
HookEngineF(6451408, 7, RestoreWorld);

Na końcu, wywołajmy oryginalne menu:
func void Debug_Init() //Strasznie to słabe - muszę znaleźć coś lepszego :<
{
ExitSession();
};
I w Init_Ikarus, pod Hookiem:
FF_ApplyExt(Debug_Init, 2500, 1);

Cały kod powinien wyglądać tak (Wersja dla leniwych)
const string OriginalWorld_Name = "NewWorld\NEWWORLD.ZEN";
func void RestoreWorld()
{
var string msg; msg = MEM_ReadString(MEM_ReadInt(ESP + 4));
if(Hlp_StrCmp(msg, "Ikarus.zen"))
{
var int p; p = _@s(OriginalWorld_Name);
MEM_WriteInt(ESP + 4, p);
};
};

func void Debug_Init()
{
ExitSession();
};

func void Init_Ikarus()
{
MEM_InitAll();

const int nomenuPtr = 8980632; //0x890898
    MemoryProtectionOverride(nomenuPtr, 6);
    var int AAAA; AAAA = (65 << 24) | (65 << 16) | (65 << 8) | (65 << 0);
    MEM_WriteInt(nomenuPtr, AAAA);
MEM_WriteInt(nomenuPtr + 2, AAAA); /* now the param "AAAAAA" instead of "nomenu" is asked for */

HookEngineF(6451408, 7, RestoreWorld);
FF_ApplyExt(Debug_Init, 2500, 1);
};

FrameFunctions wymaga zastąpienia, ale póki co działa!
Adresy i offsety, są tylko do Gothic 2!!! Testowałem krótki czas, ale powinno działać w 99%.
Dowód działania - standard - LoadBar jak w Gothic 1:

Cóż... Żywe Menu nie będzie już problemem! Pozdro, oraz zachęcam do testowania.

P.S Ale świat to sami sobie zróbcie xD
 

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

Mikotsune

Mikotsune

Czas Honoru
posty365
Propsy289
Profesjabrak
  • Czas Honoru

Mikotsune
Czas Honoru

Ikarus (Pakiet skryptów)
#978 2017-12-20, 19:30(Ostatnia zmiana: 2017-12-21, 08:19)
Nadchodzi rewolucja w skryptach. Brawo Ty!

Edit.
Zamiast Frame Function można spróbować dać dotykowy trigger. Gdy świat się załaduję postać będzie go od razu dotykać.
 
How can I see roses... and only feel thorns...

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
deadelus_hooks nie działa Siemekk!

wpuściłeś mnie trochę w maliny.

 


0 użytkowników i 2 gości przegląda ten wątek.
0 użytkowników
Do góry