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 8 von 8 « Erste ... 45678
Ergebnis 141 bis 150 von 150
  1. Beiträge anzeigen #141 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Es liegt wohl doch irgendwie am Listener.
    Versteh ich nicht. Der Listener funktioniert offensichtlich (s. letzten Post von mir). Ich habe jetzt auch nochmal PrintScreen() benutzt und das funktioniert ebenfalls. Für wesentlich wahrscheinlicher halte ich, dass die 2 Sekunden, die du angegeben hast, nicht ausreichen, wenn man das Spiel nicht mit -devmode startet (Dann bleibt der Ladebildschirm nämlich relativ lange).

    Zitat Zitat von GenerationLost Beitrag anzeigen
    Ich habe jetzt einfach 'ne FF (FF_ApplyOnceExt(Init_IntroScene, 3000, 1);) in die Init_Global gepackt und damit klappt es. Kann ich im Prinzip auch eigentlich so drin lassen, da die Funktion ja im gesamten Spiel dann auch nur exakt 1 Mal aufgerufen wird, richtig? (Hatte die Funktionalität der FFs völlig vergessen )
    Kein Wunder, dass es klappt, wenn du es um 3 Sekunden verzögerst. Dann ist nämlich der Ladebildschirm weg und es existiert eine Kamera.

    Nein, das funktioniert so nicht. Nach dem Aufrufen deiner Intro-Funktion wird die FrameFunction gelöscht (soll ja nur 1x aufgerufen werden). Wenn das nächste mal die Init_Global() ausgeführt wird, passiert es erneut.
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Dennoch brauche ich den Listener für den Manabar. Gamestate_Loaded bekomme ich dann, wenn ich das Spiel speichere, beende und diesen Spielstand wieder lade, richtig?
    In meinem Test ließ ich nämlich den Manabar erst später ingame anzeigen. Dann habe ich gespeichert und den Save nochmal geladen OHNE das Spiel vorher beendet zu haben, und da wird der Manabar auch weiterhin angezeigt.
    Gamestate_Loaded kommt immer dann, wenn das Spiel geladen wurde (duh).

    Warum die Manabar weiterhin angezeigt wird, kann ich schlecht sagen, ohne das Script zu sehen, eh? Aber da du vermutlich das Snippet von mir verwendest: Kein Wunder, das schreibt in der .exe rum, das wird natürlich nur zurückgesetzt, wenn man Gothic beendet.

  2. Beiträge anzeigen #142 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
     
    GenerationLost ist offline
    Yo, vergiss einfach den ganzen Bullshit, den ich von mir gegeben habe. Letztendlich lag es wohl nur daran, dass ich Ikarus und LeGo in der Startup_Global() auch nochmal initialisiert habe (Copy-Paste-Gewurschtel?)... Peinlicher geht's nimmer, sorry.

    Ne kurze Erklärung zu Init_Global und Startup_Global könnte mich etwas trösten. Wann was aufgerufen wird, ist mir Klar (siehe Kommentare), aber wann was wo sinnvoll ist und was nicht, da bin ich mir noch unschlüssig.
    Zumindest weiß ich, dass LeGo 2x initialisieren Schwachsinn ist.

  3. Beiträge anzeigen #143 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Yo, vergiss einfach den ganzen Bullshit, den ich von mir gegeben habe. Letztendlich lag es wohl nur daran, dass ich Ikarus und LeGo in der Startup_Global() auch nochmal initialisiert habe (Copy-Paste-Gewurschtel?)... Peinlicher geht's nimmer, sorry.
    Das kommt schonmal vor, keine Sorge
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Ne kurze Erklärung zu Init_Global und Startup_Global könnte mich etwas trösten. Wann was aufgerufen wird, ist mir Klar (siehe Kommentare), aber wann was wo sinnvoll ist und was nicht, da bin ich mir noch unschlüssig.
    Zumindest weiß ich, dass LeGo 2x initialisieren Schwachsinn ist.
    Dass man LeGo nicht einfach zusätzlich in der Startup_Global() initialisieren kann, liegt daran, wie wir die einzelnen "Gamestates" ermitteln (NewGame, Load, WorldChange). Vielleicht könnte man das so umbauen, dass es trotzdem funktioniert, aber sicher bin ich mir nicht (wenn man Gothic startet und dann ein Spiel lädt, könnte es schwierig werden, das von anderen Fällen zu unterscheiden... hab ich aber nie genauer drüber nachgedachte).

    Einfacher ist es, LeGo einfach nur in der Init_Global() zu initialisieren.

    Prinzipiell kannst du dich da am Original und an den Gamestates orientieren. Kram, der im Original schon in den STARTUPs ist (v.a. Wld_InsertNPC() und Wld_SetMobRoutine()) bleiben da logischerweise auch weiterhin.

    Generell gilt: Alles, was LeGo benötigt, darf nicht in die STARTUPs, da LeGo dort in einem ungültigen Zustand sein könnte (je nachdem, was du dann vorhast). Alle Welten außer der Startwelt sind da aber relativ harmlos, d.h. das meiste dürfte auch in STARTUP_<NichtStartWelt>() funktionieren. Achtung: Das GameState-Event zum WorldChange dürfte erst nach den Startups ausgeführt werden.

    Dinge, die du wirklich nur beim Starten eines neuen Spiels ausführen möchtest, sollten entweder in die STARTUP_<Startwelt>() oder über Gamestates geregelt sein (wie in Post #137 oder Post #138).

    Dinge, die du nur beim Start des Spiels (also so Kram wie Hooks) ausführen möchtest, regelst du am besten so in der INIT_Global():
    Code:
    ...
    const int once = 1;
    if (once) {
        doStuf();
        once = 0;
    };
    ...
    Dieses Konzept kann man theoretisch auch für Dinge benutzen, die nur beim Start eines neuen Spiels ausgeführt werden sollen (geht aber per GameState genauso und das ist - imho - besser lesbar):
    Code:
    var int once;
    if (!once) {
        doStuff();
        once = 1;
    };

    Insgesamt also: Für LeGo-Kram im Zweifelsfall immer die INIT_Global() benutzen und den genauen Fall dann per GameState oder mit der Konstanten-Konstruktion angeben.

  4. Beiträge anzeigen #144 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
     
    GenerationLost ist offline
    Danke dir für die ausführliche Erklärung.

    Das nächste Problem ist auch schon gekommen. Keine Ahnung warum, aber der Parser meckert wegen Folgendem:

    Code:
    CURRENT_DAY = WEEKDAYS[(Wld_GetDay() % 7)];
    U: PAR: Expected ";"

    Im Grunde geht's um die Realisierung von Wochentagen.
    Dazu habe ich folgende Konstanten und globale Variablen angelegt:

    Code:
    const int MONDAY 	= 0;
    const int TUESDAY 	= 1;
    const int WEDNESDAY	= 2;
    const int THURSDAY	= 3;
    const int FRIDAY	= 4;
    const int SATURDAY	= 5;
    const int SUNDAY	= 6;
    
    const int MAX_WEEKDAYS = 7;
    
    const String WEEKDAYS[MAX_WEEKDAYS] =
    {
    	"Lunae",
     	"Martis",
    	"Mercurii",
    	"Iovis",
    	"Veneris",
    	"Saturni",
    	"Solis"
    };
    Code:
    var String CURRENT_DAY;
    Auch wenn ich normal über nen Integer oder den Konstanten z.B. an WEEKDAYS[0]/WEEKDAYS[MONDAY] zugreifen will wird gemeckert.
    Keine Ahnung ob ich etwas übersehe, oder nen Denkfehler habe, ich komme einfach nicht dahinter.

    Hab auch schon mit Klammerungen rumgespielt (WEEKDAYS[((Wld_GetDay()) % 7)]) oder zuerst temporäre Variablen zugewiesen (var int temp; temp = (Wld_GetDay() % 7); CURRENT_DAY = WEEKDAYS[temp];), aber ich krieg immer die gleiche Meldung.

    Code:
    self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
    Das funktioniert ja auch. Kann mir irgendwie nicht vorstellen, dass man nur Array zu Array zuweisen kann. Oder sieht es bei String-Arrays einfach anders aus?

    EDIT: Das Geschehen passiert in B_RefreshArmor(), welche ja täglich aufgerufen wird und mir zu diesem Zweck am sinnvollsten erscheint.
    Geändert von GenerationLost (26.12.2016 um 00:51 Uhr)

  5. Beiträge anzeigen #145 Zitieren
    Held Avatar von GiftGrün
    Registriert seit
    Jun 2011
    Ort
    Gewächshaus des Assassinen
    Beiträge
    5.010
     
    GiftGrün ist offline
    Gothic 2 kann mit Variablen als Index eines Arrays nicht umgehen. Nutze entweder ein LeGo-Array oder schreibe es um zu

    Code:
    var int Weekday; Weekday = (Wld_GetDay() % 7);
    
    if (Weekday > WEDNESDAY)    // Bisektion
    {
      if (Weekday > FRIDAY)
      {
        if (Weekday == SATURDAY)
        {
          CURRENT_DAY = WEEKDAYS[SATURDAY];
        }
        else
        {
          CURRENT_DAY = WEEKDAYS[SUNDAY];
        };
      }
      else if (Weekday == THURSDAY)
      {
        CURRENT_DAY = WEEKDAYS[THURSDAY];
      }
      else
      {
        CURRENT_DAY = WEEKDAYS[FRIDAY];
      };
    }
    else if (Weekday == MONDAY)
    {
      CURRENT_DAY = WEEKDAYS[MONDAY];
    }
    else if (Weekday == TUESDAY) {
      CURRENT_DAY = WEEKDAYS[TUESDAY];
    }
    else
    {
      CURRENT_DAY = WEEKDAYS[WEDNESDAY];
    };


    Aber wenn du das machst, kannst du genausogut das Array weglassen und stattdessen const string Monday = "Lunae"; etc. verwenden.
    “Da ist auch noch ein anderer Geruch in der Luft, der Geruch von Feuern, die in der Ferne brennen, mit einem Hauch Zimt darin - so riecht das Abenteuer!”
    ― aus Walter Moers' "Die 13 1/2 Leben des Käpt'n Blaubär"

  6. Beiträge anzeigen #146 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Ikarus bietet Funktionen, um die normalen Gothic-Arrays zu verwenden.

    Übrigens: Das ist ein String-Array, ich glaube das kann Gothic nichtmal mit einem konstanten Index (frag mich nicht, warum der Parser das dann erlaubt).

    Edit: Ich glaube, die Funktion heißt MEM_ReadStringArray(), die sollte mittlerweile auch wieder in Ikarus gelandet sein (war zwischenzeitlich mal in LeGo enthalten).

  7. Beiträge anzeigen #147 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
     
    GenerationLost ist offline
    Zitat Zitat von GiftGrün Beitrag anzeigen
    Gothic 2 kann mit Variablen als Index eines Arrays nicht umgehen. Nutze entweder ein LeGo-Array oder schreibe es um zu

    Code:
    var int Weekday; Weekday = (Wld_GetDay() % 7);
    
    if (Weekday > WEDNESDAY)    // Bisektion
    {
      [...]
    };


    Aber wenn du das machst, kannst du genausogut das Array weglassen und stattdessen const string Monday = "Lunae"; etc. verwenden.
    Eben diese Schreibarbeit wollte ich mir mit dem Array eigentlich sparen.
    Was meinst du mit LeGo-Array? Die von Lehona genannte Funktion?

    Zitat Zitat von Lehona Beitrag anzeigen
    Ikarus bietet Funktionen, um die normalen Gothic-Arrays zu verwenden.

    Übrigens: Das ist ein String-Array, ich glaube das kann Gothic nichtmal mit einem konstanten Index (frag mich nicht, warum der Parser das dann erlaubt).

    Edit: Ich glaube, die Funktion heißt MEM_ReadStringArray(), die sollte mittlerweile auch wieder in Ikarus gelandet sein (war zwischenzeitlich mal in LeGo enthalten).
    Die Funktion ist derweil noch in LeGo vorhanden. Wie genau funktioniert sie?
    Wenn sie wie MEM_ReadInArray() funktioniert, dann brauche ich doch die Array-Adresse und den Index.
    Die Adresse versuche ich mir hiermit geben zu lassen:
    Code:
    var int arrayWeekdaysAdr; 
    	arrayWeekdaysAdr = MEM_InstToPtr (WEEKDAYS);
    Aber MEM_InstToPtr() verlangt ja eigentlich nach einer Objekt-Instanz. So bekomme ich dadurch eine Wrong-Type-Exception (WEEKDAYS).

    Ansonsten finde ich nur noch MEM_GetStringAddress(), was mir nur die Adresse eines einzelnen Strings zurückgibt, nicht aber die eines Arrays.

    Mit einem zCArray zu arbeiten fände ich eher Overkill.
    Lange Rede, kurzer Sinn: Halp!

    Will mich zwar jetzt nicht daran festbeißen, wenn es auch mit etwas mehr Schreibarbeit (die mir GiftGrün im Prinzip ja schon abgenommen hat) einfacher geht, aber es wäre trotzdem interessant zu wissen. For future reference.

  8. Beiträge anzeigen #148 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
     
    GenerationLost ist offline
    Hallo,

    mich plagt nach langer Zeit mal wieder ein kleines Problem. Ich habe vom G1-Worldmesh die Portalräume (die Faces in Blender) der Wälder entfernt (sieht blöd aus und braucht man in der ZinGin2 ja eigentlich nicht mehr), jedoch sehe ich von der Welt nichts mehr, wenn ich sie im Spacer kompiliere. Nur noch Wasser. Scheint als ob der "allgemeine Portalraum Außenwelt" irgendwie umgekehrt ist (kenne mich da kaum aus).

    Kann man das schnell und einfach beheben, oder hab ich als Laie einfach nur Mist mit Blender gebaut, sodass ein Profi da ran muss?

    LG
    GL

  9. Homepage besuchen Beiträge anzeigen #149 Zitieren
    SumpfkrautOnline Avatar von Orange
    Registriert seit
    Jul 2008
    Ort
    Da wo du nicht bist
    Beiträge
    2.699
     
    Orange ist offline
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Hallo,

    mich plagt nach langer Zeit mal wieder ein kleines Problem. Ich habe vom G1-Worldmesh die Portalräume (die Faces in Blender) der Wälder entfernt (sieht blöd aus und braucht man in der ZinGin2 ja eigentlich nicht mehr), jedoch sehe ich von der Welt nichts mehr, wenn ich sie im Spacer kompiliere. Nur noch Wasser. Scheint als ob der "allgemeine Portalraum Außenwelt" irgendwie umgekehrt ist (kenne mich da kaum aus).

    Kann man das schnell und einfach beheben, oder hab ich als Laie einfach nur Mist mit Blender gebaut, sodass ein Profi da ran muss?

    LG
    GL
    Ein verschwinden der Welt deutet in der Regel auf einen Portalfehler hin. In diesem Fall ist irgendwo ein Portal noch vorhanden und offen, womit die gesamte Welt mit "eingeschlossen" wird.
    Du kannst in Blender unter "Textur" (Rot-Weiß kariertes Bild) im Textur-Display nach Texturen suchen. Suche einfach nach P:. Wähle die Textur an, gehe auf Material, Editing-Mod und Select. Damit sollten alle Portal-Rest ausgewählt werden. Lösche sie dann.

  10. Beiträge anzeigen #150 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
     
    GenerationLost ist offline
    Hm, klingt im Prinzip ziemlich einfach. Allerdings habe ich zwei Probleme:

    1. Texturen werden nicht mehr angezeigt. Hab mal den G2 Ordner verschoben, jetzt in Blender unter user preferences den Textur-Pfad neu eingegeben, das funzt aber nicht. Die Welt ist pink und im Textur-Browser wird jede Textur schwarz dargestellt.

    2. Ich finde beim Texturen-Tab nichts zum Suchen

    Wie gesagt, habe von Blender eher wenig Ahnung, ist auch echt unübersichtlich...

Seite 8 von 8 « Erste ... 45678

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