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

 

Ergebnis 1 bis 6 von 6
  1. Beiträge anzeigen #1 Zitieren
    Ritter Avatar von Gregox
    Registriert seit
    Jul 2016
    Beiträge
    1.378
     
    Gregox ist offline

    Ein paar Fragen ...

    Hallo zusammen.

    Ich hätte da ein paar Skriptbezogene Fragen, wo ich alleine leider nicht weiterkomme, so gerne ich das will und hoffe, jemand kann mir helfen. Ich frage ungerne nach Hilfe, gerade soviel auf einmal, aber die Arbeit an dieser Mod ist das so ziemlich das erste Mal, dass ich aktiv am Spiel Skripte.

    1. Ich versuche die "Blunt"-Rüstungsanzeige zu implementieren, aber ich komme nicht ganz weiter, wie ich die Anzeige im Statusmenü einbringen kann. Der folgende Code alleine zeigt nur den Text an, aber nicht die Zahl, obwohl ich dasselbe Prinzip genutzt habe, wie bei den anderen Rüstungswerten.

    Aus Menu_Status.d:
    Code:
    INSTANCE MENU_ITEM_ARMOR_0_TITLE(C_MENU_ITEM_DEF)
    {
        posx         = STAT_A_X1;                 posy = STAT_ARM_Y + STAT_DY*0;
        text[0]        = "vor Stumpfwaffen";
        fontName     = STAT_FONT_DEFAULT;
        flags         = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENU_ITEM_ARMOR_0(C_MENU_ITEM_DEF)
    {
        posx         = STAT_A_X3;                 posy = STAT_ARM_Y + STAT_DY*0;    
        fontName     = STAT_FONT_DEFAULT;
        flags         = flags & ~IT_SELECTABLE;
    };
    2. Ich versuche zudem ein paar der Gothic 1 Magieeffekte (eventuell auch ein paar der Zauber) zurückzubringen. Die meisten sind noch in den Spieldateien drin oder lassen sich auch importieren. Jedoch ist es nicht ganz so einfach, sie richtig abspielen und aufhören zu lassen.

    Bei den Teleportzaubern habe ich es dank der Hilfe von Draxes damals geschafft. Dasselbe Prinzip versuchte ich dann auf den Beschwörungseffekt und den des Feuerregens zu verwenden, um genau zu sein den Effekt per Wld_PlayEffect einzuführen. Das klappt, nur verschwindet er nicht wieder, selbst, wenn ich zum Schluss nochmal Wld_StopEffect verwende.
    Als Beispiel, hier aus Spell_SummonDemon.d entnommen:
    Code:
    func int Spell_Logic_SummonDemon(var int manaInvested)
    {
        if (Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
        {
            Wld_PlayEffect("spellFX_ArmyOfDarkness_ORIGIN", hero, hero, 0, 0, 0, FALSE);
            return SPL_SENDCAST;
        }
        else if (self.attribute[ATR_MANA] >= SPL_Cost_SummonDemon)
        {        
            Wld_PlayEffect("spellFX_ArmyOfDarkness_ORIGIN", hero, hero, 0, 0, 0, FALSE);
            return SPL_SENDCAST;
        }
        else //nicht genug Mana
        {
            return SPL_SENDSTOP;
        };
    };

    3. Ich versuche, PrintS_Ext aus den Skriptpaketen für die neuen Texteinblendungen zu nutzen (ob nun für Tagebucheinträge, Erfahrungspunkte usw.). Dasselbe habe ich bei B_SetAttitude versucht, wo ich das Feature aus dem Sequel ("... ist freundlich / neutral / verärgert / feindlich.") wieder implementieren wollte:

    Code:
    func void B_SetAttitude (var C_NPC slf, var int att)
    {
        // ------ perm Att setzen ------
        Npc_SetAttitude (slf, att);
        
        // ------ temp Att setzen ------
        Npc_SetTempAttitude (slf, att);
        
    
        var string string_ScreenText;
        var C_NPC selfBak; selfBak = Hlp_GetNpc (slf);    // print func
        string_ScreenText = slf.name;
    
        if (att == ATT_FRIENDLY )
        {
            string_ScreenText    =    ConcatStrings (string_ScreenText, " ist freundlich.");
            PrintS_Ext(string_ScreenText, RGBA(0, 255, 0, 255));
        };
        if (att == ATT_NEUTRAL )
        {
            string_ScreenText    =    ConcatStrings (string_ScreenText, " ist neutral.");
            PrintS_Ext(string_ScreenText, RGBA(255, 255, 255, 255));
        };
        if (att == ATT_ANGRY )
        {
            string_ScreenText    =    ConcatStrings (string_ScreenText, " ist verärgert.");
            PrintS_Ext(string_ScreenText, RGBA(255, 180, 0, 255));
        };
        if (att == ATT_HOSTILE )
        {
            string_ScreenText    =    ConcatStrings (string_ScreenText, " ist feindlich.");
            PrintS_Ext(string_ScreenText, RGBA(255, 0, 0, 255));
        };
        self = Hlp_GetNpc (selfBak);
    };
    Das Problem ist hier folgendes: Scheinbar verursacht PrintS_Ext, dass "self" / "slf" in anderen Skripten und Funktionen in gewisser Weise "kaputt gemacht" wird, wie mir erklärt wurde (danke hierbei an Fawkes, der mir half die Ursache zu erkennen!!).
    Es sorgt u.a. dafür, dass beschworene Wesen mit einer Texteinblendung als "freundlich" erklärt werden, aber man doch von ihnen angegriffen wird, als wären sie gar nicht beschworen worden.
    Gibt es eine Alternative zu PrintS_Ext (am besten etwas, das eine ähnliche Animation und Farbmöglichkeit hat) oder was mache ich hier falsch?


    Ich wäre für jede Hilfe äußerst dankbar. In der Zwischenzeit werde ich aber auch weiterhin mal nach Lösungen suchen und etwas weiter herumprobieren.
    Geändert von Gregox (19.03.2023 um 16:26 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    1. Die Werte werden im Hintergrund von der Engine eingetragen, "einfach so" lässt sich das wohl nicht erweitern. Es gibt dafür eine Lösung, die ist aber definitiv komplizierter als du es dir vorgestellt hast. Aber auch keineswegs unmöglich, anhand der Beispiele kannst du das hoffentlich implementieren.

    3. Dass PrintS_Ext self überschreibt ist mir neu (aber möglich). Du wirfst in deiner Funktion allerdings slf (lokale Variable/Parameter) und self (globale Variable) durcheinander. Bist du dir sicher, dass du das Verhalten nicht sogar selber provozierst? Wenn es sich so reparieren lässt musst du definitiv auch self speichern (und dann am Ende wiederherstellen wie jetzt), nicht slf.

  3. Beiträge anzeigen #3 Zitieren
    Ritter Avatar von Gregox
    Registriert seit
    Jul 2016
    Beiträge
    1.378
     
    Gregox ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    1. Die Werte werden im Hintergrund von der Engine eingetragen, "einfach so" lässt sich das wohl nicht erweitern. Es gibt dafür eine Lösung, die ist aber definitiv komplizierter als du es dir vorgestellt hast. Aber auch keineswegs unmöglich, anhand der Beispiele kannst du das hoffentlich implementieren.

    3. Dass PrintS_Ext self überschreibt ist mir neu (aber möglich). Du wirfst in deiner Funktion allerdings slf (lokale Variable/Parameter) und self (globale Variable) durcheinander. Bist du dir sicher, dass du das Verhalten nicht sogar selber provozierst? Wenn es sich so reparieren lässt musst du definitiv auch self speichern (und dann am Ende wiederherstellen wie jetzt), nicht slf.
    Zu 1. Vielen Dank! Ich habe bereits erste Schritte getan, ich kann nur keinen Skriptcommand finden, mit dem ich einen Protection Wert abgleichen kann. Fällt dir da etwas ein?
    In den Externen G2 Funktionen lässt sich da nichts finden bislang.

    Zu 3. Mh, ich habe es bereits mit self und slf versucht, beide Änderungen bewirken leider nichts.
    Das originale Skript verwendet bereits slf, "mein" self ist nur als eine Art Backup da, um es am Ende wiederherzustellen, wie du sagst.

  4. Beiträge anzeigen #4 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Gregox Beitrag anzeigen
    Zu 1. Vielen Dank! Ich habe bereits erste Schritte getan, ich kann nur keinen Skriptcommand finden, mit dem ich einen Protection Wert abgleichen kann. Fällt dir da etwas ein?
    In den Externen G2 Funktionen lässt sich da nichts finden bislang.

    Zu 3. Mh, ich habe es bereits mit self und slf versucht, beide Änderungen bewirken leider nichts.
    Das originale Skript verwendet bereits slf, "mein" self ist nur als eine Art Backup da, um es am Ende wiederherzustellen, wie du sagst.
    Npcs haben das direkt als Eigenschaft, dafür braucht es keine External. Also sowas wie hero.protection[PROT_BLUNT] oder so ähnlich. Einfach mal in die Scripte von Rüstungen reinschauen wie sie die Eigenschaften verändern.

    In dem Script was du gepostet hast überschreibst du am Ende der Funktion self mit einem Wert, der vielleicht vorher gar nicht in self enthalten war (weil du stattdessen den Wert in slf speicherst). Ich halte es für möglich, dass das überhaupt erst das komische Verhalten auslöst. Bist du dir ganz sicher, dass alles funktioniert wenn du nur die PrintS Zeilen entfernst?

  5. Beiträge anzeigen #5 Zitieren
    Ritter Avatar von Gregox
    Registriert seit
    Jul 2016
    Beiträge
    1.378
     
    Gregox ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Npcs haben das direkt als Eigenschaft, dafür braucht es keine External. Also sowas wie hero.protection[PROT_BLUNT] oder so ähnlich. Einfach mal in die Scripte von Rüstungen reinschauen wie sie die Eigenschaften verändern.

    In dem Script was du gepostet hast überschreibst du am Ende der Funktion self mit einem Wert, der vielleicht vorher gar nicht in self enthalten war (weil du stattdessen den Wert in slf speicherst). Ich halte es für möglich, dass das überhaupt erst das komische Verhalten auslöst. Bist du dir ganz sicher, dass alles funktioniert wenn du nur die PrintS Zeilen entfernst?
    Ah, ich verstehe. Du hast Recht, zumindest startet das Spiel damit. Ich muss jetzt nur noch herausfinden, wie die Zahl richtig angezeigt wird, denn momentan zeigt es ziemlich wahllos folgende Zahlen auf: 0, 10, 50, 100. Ohne, dass sich etwas überhaupt ändern sollte.
    Vielleicht komme ich noch selbst dahinter. Hoffe ich.

    Sobald ich nur die Zeilen mit PrintS entferne, hört das Problem auch wieder auf, genau. Das wundert mich nämlich auch.

  6. Beiträge anzeigen #6 Zitieren
    Ritter Avatar von Gregox
    Registriert seit
    Jul 2016
    Beiträge
    1.378
     
    Gregox ist offline
    1. und 3. wären geschafft. Bei 1. muss man B_SetAttitude aus den Tierskripts (MST_Wolf.d zum Beispiel) rausnehmen, dann klappt PrintS_Ext richtig.

    3. hat geklappt wie du sagst, einfach das richtige Menüelement einfügen, var int SHOW_BLUNT; SHOW_BLUNT = hero.protection[PROT_BLUNT]; usw. und es funktioniert prächtig.

    Vielen Dank, Lehona.

    Jetzt muss ich nur noch bei 2. herumexperimentieren und suchen, da fehlt es mir noch.

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