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 8 von 8
  1. Beiträge anzeigen #1
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline

    Gothic 1 kann int Funktionen nicht mehr richtig auswerten?

    Hallodeli,

    mein Gothic macht im Moment unglaubliche Faxen.
    Ich habe eine func int, welche TRUE oder FALSE zurückgibt. Etwa dieses Schema:

    Code:
    func int PC_Canlearnnow (var int hour, var int minute)
    {
    
    if hour>12
    {
    print ("Kein Lernen über 12 Stunden");
    return FALSE;
    };
    
    if minute >=60
    {
    print ("Keine Minuten >=60");
    return FALSE;
    }:
    
    if Hunger<(Hungermax/4)
    {
    print ("Du bist zu hungrig");
    return FALSE;
    };
    
    return TRUE;
    
    };

    Hunger ist eine Globale Variable, die hier abgefragt wird. Der Rest ist lokal.

    Die Abfrage:

    Code:
    if PC_CanLearnNow(3,10)==TRUE
    {
    print ("Produziere Item");
    };
    Im Spiel habe ich nun einen hungrigen Charakter, die Hungerabfrage müsste mir FALSE zurückgeben. Ich WEISS, dass sie auch wirklich getriggert wird, denn der print kommt im Spiel. Aber das Return wird von Gothic nicht richtig verarbeitet. Ich bekomme nämlich BEIDE Prints!
    Sowohl "Du bist zu hungrig" als auch "Produziere Item. Da stimmt doch was nicht!

    Ein weiteres Problem ist, dass das nicht sofort auftritt. Ab Anfang funktioniert die Abfrage blendend, aber nach ca. 20 Minuten Spielzeit fängt das Problem an. Auch Vobs, die ich in einer Framefunction mit Vob_turn animiere bleiben plötzlich stehen. Ist das etwa zu viel für den alten Gaul?


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  2. Beiträge anzeigen #2
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline
    Hi Bisasam,
    What exactly is happening with Hunger and Hungermax values, maybe they are changing so quickly that you are getting both outputs TRUE FALSE right after each other.

  3. #3
    Falugify
    Gast
     
    Wenn ich es richtig erkenne, gibst du immer ein true zusätzlich dazu

  4. Beiträge anzeigen #4
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Zitat Zitat von Falugify Beitrag anzeigen
    Wenn ich es richtig erkenne, gibst du immer ein true zusätzlich dazu
    Wenn ein return ausgeführt wird, dann wird die Funktion direkt an dieser Stelle verlassen, so dass spätere Return Statements nicht erreicht werden.

  5. Beiträge anzeigen #5
    Knight Commander Avatar von Neconspictor
    Registriert seit
    Jan 2009
    Beiträge
    2.749
     
    Neconspictor ist offline
    Könntest du mal die folgenden Änderungen in deinen Code einbauen und testen, ob die Funktion an besagter Stelle wirklich nur einmal aufgerufen wird?

    Code:
    int GLOBAL_COUNTER;
    
    // once before calling PC_CanLearnNow the first time
    GLOBAL_COUNTER = 0;
    
    
    // advance the counter at the beginning of PC_CanLearnNow
    // and add the counter to all messages
    func int PC_Canlearnnow (var int hour, var int minute)
    {
    
    GLOBAL_COUNTER += 1;
    
    if hour>12
    {
    print (ConcatStrings("Kein Lernen über 12 Stunden: ", IntToString(GLOBAL_COUNTER)));
    return FALSE;
    };
    
    if minute >=60
    {
    print (ConcatStrings("Keine Minuten >=60: ", IntToString(GLOBAL_COUNTER)));
    return FALSE;
    }:
    
    if Hunger<(Hungermax/4)
    {
    print (ConcatStrings("Du bist zu hungrig: ", IntToString(GLOBAL_COUNTER)));
    return FALSE;
    };
    
    return TRUE;
    
    };
    
    
    
    // Change the producer function
    if PC_CanLearnNow(3,10)==TRUE
    {
    print (ConcatStrings("Produziere Item: ", IntToString(GLOBAL_COUNTER)));
    };
    Geändert von Neconspictor (08.12.2019 um 20:13 Uhr)

  6. Beiträge anzeigen #6
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Was soll mir diese Variable genau sagen? Wie oft die Funktion aufgerufen wird? Was soll dieser Test bewirken und aussagen?
    Wenn du mir mitteilst wo du ein Problem vermutest, kann ich auch selbst noch etwas genauere Tests machen.

    Achja, mal ne Frage. Hat dieser Code:

    Code:
    if PC_CanLearnNow(1,00)
    {
    print("Produziere Item");
    };
    und dieser Code:

    Code:
    if PC_CanLearnNow(1,00)==TRUE
    {
    print("Produziere Item");
    };
    die gleiche Wirkung? Oder würde ohne das ==TRUE die Überprüfung verfälscht?


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  7. Beiträge anzeigen #7
    Knight Commander Avatar von Neconspictor
    Registriert seit
    Jan 2009
    Beiträge
    2.749
     
    Neconspictor ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Was soll mir diese Variable genau sagen? Wie oft die Funktion aufgerufen wird? Was soll dieser Test bewirken und aussagen?
    Wenn du mir mitteilst wo du ein Problem vermutest, kann ich auch selbst noch etwas genauere Tests machen.
    Es geht darum, ob die beiden Prints, die von dir beobachtet wurden, in demselben Funktionsaufruf auftreten, oder ob eben in zwei unterschiedlichen(die sehr schnell hintereinander aufgerufen werden). Bei letzterem würde dann der Code ja korrekt ausgeführt.

    Zitat Zitat von Bisasam Beitrag anzeigen
    Achja, mal ne Frage. Hat dieser Code:

    Code:
    if PC_CanLearnNow(1,00)
    {
    print("Produziere Item");
    };
    und dieser Code:

    Code:
    if PC_CanLearnNow(1,00)==TRUE
    {
    print("Produziere Item");
    };
    die gleiche Wirkung? Oder würde ohne das ==TRUE die Überprüfung verfälscht?
    Das sollte keinen Unterschied machen, das == TRUE ist aber unnötig und kannst du weglassen.

  8. Beiträge anzeigen #8
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Achja, mal ne Frage. Hat dieser Code:

    Code:
    if PC_CanLearnNow(1,00)
    {
    print("Produziere Item");
    };
    und dieser Code:

    Code:
    if PC_CanLearnNow(1,00)==TRUE
    {
    print("Produziere Item");
    };
    die gleiche Wirkung? Oder würde ohne das ==TRUE die Überprüfung verfälscht?

    Das ist fast das selbe (in deinem konkreten Fall ist es aber gleich). Grundsätzlich ist eine Bedingung dann wahr, wenn sie nicht falsch ist (duh). Das heißt jeder Wert, der nicht falsch (0) ist, gilt als wahr. Wenn du aber konkret mit TRUE vergleichst, sind nur die Bedingungen war, die auch wirklich 1 zurückgeben. Würde PC_CanLearnNow also z.B. 2 zurückgeben, würde deine Bedingung das als falsch erkennen. Lässt du den Vergleich mit TRUE weg, würde der Wert 2 zu einer "wahren" Bedingungen führen.

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