|
-
I make a new status menu on the Gothic.dat scripts with use LeGo (buttons, cursor ... http://www.youtube.com/watch?v=6ptLoAgYsWg), which is now called instead of playing map from player_hotkey_screen_map ()
Is it possible to reassign the default key that opens the original status menu from menu.dat to my new status menu script from Gothic.dat?
-
Zitat von ukur
I make a new status menu on the Gothic.dat scripts with use LeGo (buttons, cursor ... http://www.youtube.com/watch?v=6ptLoAgYsWg), which is now called instead of playing map from player_hotkey_screen_map ()
Is it possible to reassign the default key that opens the original status menu from menu.dat to my new status menu script from Gothic.dat?
First of all: I'm impressed by your work, this is exactly why we developed LeGo: to give Gothic2 a new touch
The easiest way to override the original status menu is probably to hook void __thiscall oCNpc::OpenScreen_Status(void) at address 73D982h and length 5. This will give you access to when the player opened the status screen. Then we don't want the original status screen to open, so we return from the function (there used to be an easy way for this but it never got released in LeGo because we thought it didn't work - even though it did). To accomplish this, we want to insert a return-statement and pop some integers from the stack. Looking at IDA we know that there will be 8 Byte on the local stack, so we want a retn 8 instruction, resulting in the following code:
Code:
MemoryProtectionOverride(7592327, 4);
MEM_WriteByte(7592327, 194);
MEM_WriteByte(7592328, 8);
MEM_WriteByte(7592329, 0);
This code has just been created on the fly, so it might not work - if you can't get it to work, I will investigate further in the next couple of days.
On a slightly unrelated note: Is there any way to see the scripts of your mod? I'm quite interested and amazed by what you have done
-
Zitat von Lehona
On a slightly unrelated note: Is there any way to see the scripts of your mod? I'm quite interested and amazed by what you have done
I think you're not the only one who is interested and amazed! That's really good work.
-
Hallo Lehona/Gottfried .
Seid der letzten Gothic II Neuinstallation funktioniert der Befehl LeGo_Init (LeGo_ALL); leider nicht mehr. Kurz nachdem ich auf den Button "Spiel Starten" klicke erscheint nur der klassische schwarze Bildschrim und ein CallStack (Access Violation) . Dabei sei erwähnt das ich Win 7 64 - Bit Nutzer bin (seid neustem) und daher keinen Plan habe was nun zu tun ist , da es vorher auf dem 32 - Bit System astrein lief (Scripte sind unverändert).
Bitte um Hilfe
Grüße ,
Rhobar
-
Die GothicStarter_mod.exe musst du "Als Administrator ausführen...". Hast du das gemacht?
-
Habe ich , der Kompatiblitätsmodus (zb Windows XP) hat auch nichts gebracht .
Edit: Hier die Zusammenfassung von Zspy
-
An LeGo liegt es nicht, sonst hättest du ein
LeGo 2.2.1 wird initialisiert.
in deinem zSpy Log.
Entweder liegt es an Ikarus (das wird noch vor dieser Ausgabe initialisiert) oder du hast ein anderes Problem.
Ich für meinen Teil benutze auch Windows 7 in der 64bit Version, hatte aber nie Probleme damit in Bezug auf Gothic.
Achja.. Lade doch das nächste mal den Text direkt als .txt hoch oder poste ihn mit [code][/code]-Tags. (Opera will .d nicht anzeigen )
MfG Gottfried
-
Du solltest überprüfen ob du die Report-Version installiert hast (auch wenn Ikarus da eigentlich meckern sollte), den zSpy-Level auf 10 stellen wenn er das noch nicht ist und überprüfen, dass die DEP Gothic nicht betrifft (sollte sie standardmäßig aber eh nicht). Wenn es dann noch nicht klappt, stelle bitte erneut den zSpy Log hier rein und hänge einen Screenshot der AV an, da dort einige Informationen drauf sind die nicht im zSpy landen.
-
Sry Gottfried ^^ Aufgrund dieser Tatsache (und weiteren) kommt mir Opera nicht aufs System
Hier die Access Violation.
und hier die Zspy auf Stufe 10 (Report Fix und aktuellster Graka Treiber usw ist installiert)
Edit:
ich sollte noch erwähnen das es sich bei der Ikarus Version natürlich um die neuste Alpha Version handelt.
Gruß Rhobar
Edit Nr2:
Sobald LeGo_Init entfernt wird funktioniert es ._.
Geändert von König Rhobar123 (11.06.2012 um 17:43 Uhr)
-
Hast du die DEP kontrolliert?
Auf den Screens ist nichts zu erkennen. Interessant ist, dass Gothic nichtmal weiß, warum es gecrasht ist - weder einen Callstack noch wird die Art der Zugriffsverletzung erkannt. Im zSpy landet nichtmal die Meldung, dass LeGo jetzt initialisiert wird - komisch.
-
Geht denn
MEM_InitAll();
ohne LeGo_Init?
Falls Ikarus nicht läuft, schau mal ob ein Waypoint "TOT" existiert. Weiß grad nicht auswendig, ob es Probleme gibt, wenn der fehlt. Sonst gibt es eigentlich nichts was man bei der Benutzung von Ikarus falsch machen kann. Merkwürdig.
-
@ Sektenspinner:
Mit Ikarus gibt es keine Probleme und ich habe mittels einem Print("......"); überprüft ob MEM_InitAll(); aufgerufen wird. => Wurde es.
@ Lehona:
Ich weiß auch nicht warum Gothic II auf einmal meckert , schließlich sind es exakt dieselben Scripte wie auf der vorherigen 32 Bit Win 7 Installation. Mir fällt gerade noch ein das LilaLauneBär auch mal ein Problem hatte direkt nach dem Starten des Spiels mit LeGo . Eventuell bringt ja die Lösung die bei dieser Sache angewandt wurde Erfolg ?
Grüße Rhobar
-
Zitat von Lehona
On a slightly unrelated note: Is there any way to see the scripts of your mod? I'm quite interested and amazed by what you have done
Two days ago (10.06.12) I sent in PM, received?
-
Zitat von König Rhobar123
Mit Ikarus gibt es keine Probleme und ich habe mittels einem Print("......"); überprüft ob MEM_InitAll(); aufgerufen wird. => Wurde es.
Da ein paar Informationen (MEM_Info) nicht ausgegeben werden, die eigentlich in MEM_InitAll erscheinen sollten, vermute ich mal, dass du etwas anderes eingestellt hast (Ikarus_Const_G2.d) als:
Code:
const int zERR_ReportToZSpy = zERR_TYPE_INFO; //alles ab zERR_TYPE_INFO
und somit ein paar Infomeldungen unterdrückst.
Falls ich recht habe, ändere mal die Konstante und zeige nochmal deinen Spy-Log. Und nutze am besten [code]-Tags, das ist am einfachsten. Die Konstanten stehen bei mir auf
Code:
const int zERR_ReportToZSpy = zERR_TYPE_INFO; //alles ab zERR_TYPE_INFO
const int zERR_ShowErrorBox = zERR_TYPE_FAULT; //Messageboxen nur für Errors
const int zERR_PrintStackTrace = zERR_TYPE_WARN; //Tracktrace printen für Warnings.
const int zERR_ErrorBoxOnlyForFirst = 1; /* nie mehr als eine Error-Box anzeigen */
const int zERR_StackTraceOnlyForFirst = 0; /* nur für den ersten Error Stack Trace anzeigen */
Wenn wirklich LeGo_Init das Problem ist, wäre der nächste logische Schritt herauszufinden an welchem LeGo Paket es liegt in dem du nach und nach weniger von LeGo initialisierst. Kannst ja mal mit LeGo_Init(0) anfangen und dann immer mehr flags dazunehmen, bis es schief geht.
-
Ein wenig mehr Informationen wo genau es crasht wäre sehr angenehm. Ansonsten: LilaLauneBär hatte glaube ich eine "falsch" eingestellt DEP (Data Execution Prevention - Datenausführungsverhinderung), die unsere Arbeitsweise wohl nicht mochte Vielleicht war es aber wer anderes - hast du das denn nun überprüft?
Zitat von ukur
Two days ago (10.06.12) I sent in PM, received?
I've got your PM, sorry that I didn't answer.
-
Sry das ich mich erst jetzt melde . Es lag wirklich an der DEP Problem ist also gelöst
Grüße Rhobar
Edit: Nur für den Fall das nochmal jemand das gleiche Problem hat , hier ist alles genaustens beschrieben.
Geändert von König Rhobar123 (15.06.2012 um 13:17 Uhr)
-
Ich habe ein Problem mit PrintScreen() behoben. Der Fehler führte dazu, dass nach einem Neuen Spiel oder einem geladenen Spielstand PrintScreen() nicht mehr reagierte.
Der SVN ist aktualisiert und hier ist der Fix für diejenigen, die nur die Releaseversion benutzen: http://pastebin.com/4v42FfmN
Einfach die LeGo überschreiben.
-
hallo mal eine frage ich wollte eine funktion einbauen, dass meine Pfeile mehr Schaden anrichten wenn ich sie länger spanne.
ist schon lange her deswegen habe ich es fast vergessen. Hat bei mir auch nicht so gut geklappt. Habe per Schleife einfach abgefragt ob der held eine gezückte Fernkampfwaffe hat und dann die anzahl der Munition abgefragt. Wenn die Anzahl noch gleich war hieß das, dass kein Pfeil abgefeuert wurde und der timer wurde erhöht. Klappte mehr oder weniger nur hatte das 2 Probleme a)lief der timer schon wenn man den Bogen raus hatte aber noch nichts eingespannt hatte und b) lief meine Schleife nur im Sekunden takt, hier würde ich schon gerne eine zehnerpotenz runtergehen (wenn das möglich wäre)
ukur´s video hat mich dazu wieder motiviert. Irgendjemand eine Idee?
-
Ohne jetzt eine tolle Idee liefern zu können, kann ich dir zumindest sagen, dass du bei Triggern im Spacer auch kleinere FireDelays als 1 angeben kannst.
-
Und um rauszufinden ob der Spieler zielt würde ich mal folgendes probieren:
Code:
func int SpielerZielt() {
if (Npc_GetTarget(hero)) {
if (Npc_IsAiming(hero, other)) {
return true;
};
};
return false;
};
Hab aber nicht ausprobiert, ob die Funktion wirklich das tut, was man erwartet.
Und die Funktion ist nutzlos, wenn das System auch dann funktionieren soll, wenn man ohne Fokus zielt und schießt.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|