Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 2 von 2 « Erste 12
Ergebnis 21 bis 25 von 25
  1. Beiträge anzeigen #21 Zitieren
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.473
     
    lali ist offline
    Na im Skript oben wird soweit ich sehe auf beide Fälle verwiesen, aber in deinem Skript scheint ja einer der Fälle offensichtlich nicht zu greifen.
    Also hast du vielleicht was vergessen in den MDS-Dateien oder so.
    Phoenix Dev | Website | Discord

  2. Beiträge anzeigen #22 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Ich habe hier mal einen Enginehook für Gothic 2:

    Der Spieler kann bei einem NPC der nicht sterben kann NICHT den Finishingmove auslösen.
    Die beiden Hooks gehen direkt in die Engine an die Stellen im oCAIHuman für die Spieler Steuerung.
    Sie werden auch *nur* dann aufgerufen, wenn der Spieler einen am Boden liegenden "finishen" will.

    Die Variable für den erfolgreichen Finishingmove ist hierbei im Register "EDI" und wird, falls es ein funktionierender Finishing-Move war, einfach auf "0" gesetzt.
    Dadurch greift der Spieler einfach nur weiter ins Leere an.

    Code:
    func void _AlternativeUnsterblichkeit_Hook() {
        const int oCAIHuman__offsetNpc = 300;
        if (EDI == TRUE) {
            var oCNpc her; her = _^(MEM_ReadInt(ESI + oCAIHuman__offsetNpc)); // oCAIHuman->npc
            var C_NPC focus_Npc; focus_Npc = _^(her.focus_vob);
    
            if (!Npc_CanDie(focus_Npc)) {
                EDI = 0; // No Killing Blow
            };
        };
    };
    
    func void AlternativeUnsterblichkeit_Init() {
        const int oCAIHuman__FightMelee_doFinish_G2Controls = 6912896; // 00697b80
        const int oCAIHuman__FightMelee_doFinish_G1Controls = 6910260; // 00697134
    
        HookEngineF(oCAIHuman__FightMelee_doFinish_G2Controls, 6, _AlternativeUnsterblichkeit_Hook); // G2 Steuerung
        HookEngineF(oCAIHuman__FightMelee_doFinish_G1Controls, 8, _AlternativeUnsterblichkeit_Hook); // G1 Steuerung
    };
    Geändert von Kirides (13.11.2020 um 14:54 Uhr)

  3. Beiträge anzeigen #23 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Sehr schöne Ergänzung!

    Eine kleine Anmerkung dazu: Ich würde vorschlagen, "Magic Numbers" möglichst immer zu vermeiden. Auch wenn du im Kommentar darüber die Hex-Zahlen erwähnst, ist aus dem Code nicht mehr ohne weiteres ersichtlich, was hier gehookt wird. Kommentare verschwinden natürlich auch beim Skripte-Parsen und sind daher nicht mehr in einem Dekompilat enthalten. Aus diesen Gründen hat es sich seit Ikarus etabliert, immer den extra Schritt zu machen und diese als Konstanten mit beschreibenden Namen zu definieren. Vor allem ist das natürlich sinnvoll, wenn man Skripte im Forum teilt :)


    EDIT: Danke fürs Anpassen!
    Geändert von mud-freak (13.11.2020 um 15:04 Uhr)

  4. Beiträge anzeigen #24 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    Sehr schöne Ergänzung!

    Eine kleine Anmerkung dazu: Ich würde vorschlagen, "Magic Numbers" möglichst immer zu vermeiden. Auch wenn du im Kommentar darüber die Hex-Zahlen erwähnst, ist aus dem Code nicht mehr ohne weiteres ersichtlich, was hier gehookt wird. Kommentare verschwinden natürlich auch beim Skripte-Parsen und sind daher nicht mehr in einem Dekompilat enthalten. Aus diesen Gründen hat es sich seit Ikarus etabliert, immer den extra Schritt zu machen und diese als Konstanten mit beschreibenden Namen zu definieren. Vor allem ist das natürlich sinnvoll, wenn man Skripte im Forum teilt
    gesagt - getan

    Ich muss echt sagen, mit Ghidra lässt sich super sowas finden.
    Geändert von Kirides (13.11.2020 um 14:57 Uhr)

  5. Beiträge anzeigen #25 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    Ich habe hier mal einen Enginehook für Gothic 2:

    Der Spieler kann bei einem NPC der nicht sterben kann NICHT den Finishingmove auslösen.
    Die beiden Hooks gehen direkt in die Engine an die Stellen im oCAIHuman für die Spieler Steuerung.
    Sie werden auch *nur* dann aufgerufen, wenn der Spieler einen am Boden liegenden "finishen" will.

    Die Variable für den erfolgreichen Finishingmove ist hierbei im Register "EDI" und wird, falls es ein funktionierender Finishing-Move war, einfach auf "0" gesetzt.
    Dadurch greift der Spieler einfach nur weiter ins Leere an.

    Code:
    func void _AlternativeUnsterblichkeit_Hook() {
        const int oCAIHuman__offsetNpc = 300;
        if (EDI == TRUE) {
            var oCNpc her; her = _^(MEM_ReadInt(ESI + oCAIHuman__offsetNpc)); // oCAIHuman->npc
            var C_NPC focus_Npc; focus_Npc = _^(her.focus_vob);
    
            if (!Npc_CanDie(focus_Npc)) {
                EDI = 0; // No Killing Blow
            };
        };
    };
    
    func void AlternativeUnsterblichkeit_Init() {
        const int oCAIHuman__FightMelee_doFinish_G2Controls = 6912896; // 00697b80
        const int oCAIHuman__FightMelee_doFinish_G1Controls = 6910260; // 00697134
    
        HookEngineF(oCAIHuman__FightMelee_doFinish_G2Controls, 6, _AlternativeUnsterblichkeit_Hook); // G2 Steuerung
        HookEngineF(oCAIHuman__FightMelee_doFinish_G1Controls, 8, _AlternativeUnsterblichkeit_Hook); // G1 Steuerung
    };
    Mega, danke dir! Nie wieder abgehackte Todesschreie von alternativ-unsterblichen Npcs! Welch Segen =)

Seite 2 von 2 « Erste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide