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 3 von 3 « Erste 123
Ergebnis 41 bis 54 von 54
  1. Beiträge anzeigen #41 Zitieren
    Veteran
    Registriert seit
    Jan 2012
    Beiträge
    681
     
    Frank-95 ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    You'll have to do minute = minute % 60;, otherwise for 2:15am you'll get 135 minutes.
    No, it prints 2 and 15 correctly.

    And rounding is a bad idea, too.
    May I ask why?

  2. Beiträge anzeigen #42 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von Frank-95 Beitrag anzeigen
    No, it prints 2 and 15 correctly.



    May I ask why?
    Oh my god. I was just writing an elaborate response why that couldn't work and then I noticed there's a scrollbar on the bottom of your codebox... fml.

    And given that I just saw that little extra code, your code works even with rounding But I don't think there's any reason to use rounding over truncating, as you can save the little if-clause at the end.

  3. Beiträge anzeigen #43 Zitieren
    Veteran
    Registriert seit
    Jan 2012
    Beiträge
    681
     
    Frank-95 ist offline
    Oh my god. I was just writing an elaborate response why that couldn't work and then I noticed there's a scrollbar on the bottom of your codebox... fml.
    It happens man! You don't know how many times it happened to me too

    I post the code for sake of completeness, even though there's already yours

    Code:
        var int x; x = MEM_WorldTimer.worldTime;
        var int hourf;    hourf = divf(x, mkf(oCWorldTimer_TicksPerHour));
        var int hour;    hour = truncf(hourf);
        var int minute;    minute = truncf(divf(x,mkf(oCWorldTimer_TicksPerMin_approx))) - (hour * 60);
    EDIT: what does fml mean?
    Geändert von Frank-95 (13.02.2016 um 10:28 Uhr)

  4. Beiträge anzeigen #44 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist gerade online
    Thanks!

    Zitat Zitat von Frank-95 Beitrag anzeigen
    EDIT: what does fml mean?
    http://www.internetslang.com/FML.asp

  5. Homepage besuchen Beiträge anzeigen #45 Zitieren
    Apprentice Avatar von Migos
    Registriert seit
    Mar 2016
    Beiträge
    45
     
    Migos ist offline
    Hi Milky,
    wenn ich den Tagesablauf allgemein verlangsamen möchte, könnte ich natürlich alle x Sekunden die Zeit zurücksetzen.
    Aber ich frage mich, ob es da evtl. ein paar angenehmere Funktionen für mein Vorhaben gibt?

    MfG
    [Bild: spineSignature.php?name=Migos]
    Entwickler von Jharkendar-Online Deathmatch & Roleplay (zu finden in Spine).
    Komm doch auf unseren Discord und lerne unsere nette Community kennen.
    Mal gucken, was gerade entwickelt wird? Hier ist unsere Roadmap.

  6. Beiträge anzeigen #46 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist gerade online
    Wenn ich dein Ziel richtig verstanden habe, dann gibt es dafür eine deutlich bessere Lösung (verwendet Ikarus und Floatpaket)
    Zitat Zitat von Sektenspinner Beitrag anzeigen
    Ich hab mal etwas herumprobiert, an die TicksPerHour Konstante kommt man leider nicht ran, weil sie in einem schreibgeschützten Speicherbereich steht, aber was bei mir ziemlich problemlos ging war jeden Frame die Zeit ein bisschen zu justieren.

    Code:
    func void ScaleWorldTime (var int factor) {
        //worldTime += frameTime * (factor - 1);
    
        //Global instances have to be intialised!
        var int deltaT; deltaT = MEM_Timer.frameTimeFloat;
        deltaT = mulf (deltaT, subf (factor, mkf (1)));
        
        MEM_WorldTimer.worldTime = addf (MEM_WorldTimer.worldTime, deltaT);
    };
    Ein Aufruf von ScaleWorldTime (mkf (10)); jeden Frame hat bei mir die Zeit 10 mal schneller verstreichen lassen. ScaleWorldTime (invf(mkf(10))); hat auch funktionert und die Zeit ist 10 mal langsamer verstrichen.
    Sei dir aber bewusst, dass die Zeit so in jedem Frame erst vorwärts läuft und dann ein Stück rückwärts (falls factor < 1).
    Sensible Systeme, die mehrmals in einem Frame aktiv sind und sich darauf verlassen, dass die Zeit niemals rückwärts läuft könnten merkwürdiges Verhalten zeigen. Wie groß die Gefahr wirklich ist muss man testen. Ich halte Probleme allerdings für unwahrscheinlich, schon allein, weil Triggerschleifen beinahe ausnahmslos am Ende des Frames aktiv sind.
    Ab hier:
    http://forum.worldofplayers.de/forum...1#post14840189
    gibt es noch die Fragen, die ich damals dazu hatte.

    Das Aufrufen in jedem Frame laesst sich heutzutage noch einfacher mit den FrameFunctions aus dem LeGo-Paket erreichen.

  7. Homepage besuchen Beiträge anzeigen #47 Zitieren
    Apprentice Avatar von Migos
    Registriert seit
    Mar 2016
    Beiträge
    45
     
    Migos ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Wenn ich dein Ziel richtig verstanden habe, dann gibt es dafür eine deutlich bessere Lösung (verwendet Ikarus und Floatpaket)

    Ab hier:
    http://forum.worldofplayers.de/forum...1#post14840189
    gibt es noch die Fragen, die ich damals dazu hatte.

    Das Aufrufen in jedem Frame laesst sich heutzutage noch einfacher mit den FrameFunctions aus dem LeGo-Paket erreichen.
    Hi, vielen Dank schon mal. Dann werde ich mal testen müssen, ob diese Herangehensweise überhaupt GMP-tauglich ist.
    Aber ich berichte dann

    MfG
    [Bild: spineSignature.php?name=Migos]
    Entwickler von Jharkendar-Online Deathmatch & Roleplay (zu finden in Spine).
    Komm doch auf unseren Discord und lerne unsere nette Community kennen.
    Mal gucken, was gerade entwickelt wird? Hier ist unsere Roadmap.

  8. #48 Zitieren
    Marcello
    Gast
     
    hallo Milky-Way,

    ich weiß, dass es nicht wirklich hierher gehört, da du aber darüber keinen eigenen thread erstellt hast (zumindest hab ich es nicht gefunden), schreibe ich es hier rein.

    ich danke dir für viele, zahlreiche, gute, zur verfügung gestellten scripte, die mir im umgang mit dädalus sehr geholfen und mein wissen diesbezüglich sehr erweitert haben
    (ganz besonders die implementierung von regeneration)

  9. Beiträge anzeigen #49 Zitieren
    Lehrling
    Registriert seit
    Aug 2023
    Beiträge
    25
     
    Paraguru ist offline
    Ich möchte gerne eine "klassische" Abfrage erstellen, in der der Held mindestens 2 Stunden nach dem Dialog wiederkommen soll, um einen Gegenstand X abzuholen. Die Zeitscripte habe ich hinzugefügt. Wie setze ich dies nun um? Bei ganzen Tagen (also Wld_GetDay) habe ich mir immer eine Variable erstellt und dieser später abgefragt. Zum Beispiel so:

    Code:
    // ************************************************************
    //                                          DIALOG 1
    // ************************************************************
    var int TestNPC_Gesprochen;
    // ************************************************************
    
    .....
    
    FUNC VOID DIA_OUT_99078_TESTNPC_HALLO_Info()
    {
        AI_Output (other, self, "DIA_OUT_99078_TESTNPC_HALLO_15_1"); //Hallo 1
        AI_Output (self, other, "DIA_OUT_99078_TESTNPC_HALLO_1_1"); //Hallo 2
        
    
        TestNPC_Gesprochen = Wld_GetDay ();
    };
    
    
    
    // ************************************************************
    //                                          DIALOG 2
    // ************************************************************
    
    ....
    
    Func int DIA_OUT_99078_TESTNPC2_HALLO_Condition ()
    {
        if (TestNPC_Gesprochen < Wld_GetDay())
        {
            return TRUE;
        };    
    };
    
    FUNC VOID DIA_OUT_99078_TESTNPC2_HALLO_Info()
    {
        AI_Output (other, self, "DIA_OUT_99078_TESTNPC2_HALLO_15_1"); //Hallo 3
        AI_Output (self, other, "DIA_OUT_99078_TESTNPC2_HALLO_1_1"); //Hallo 4
        
    };

  10. Beiträge anzeigen #50 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.484
     
    Cryp18Struct ist offline
    Geht sehr ähnlich. Du speicherst in einer Variable einen Zeitpunkt ab, beispielsweise 2 Stunden in der Zukunft:
    Code:
    C4_Justin_ArmorReadyTimestamp = Wld_GetTimePlus(0, 2, 0); // 2 Stunden in der Zukunft
    Und dann kannst du abfragen, ob dieser Zeitpunkt bereits überschritten wurde:
    Code:
    if(Wld_IsAfterTime(C4_Justin_ArmorReadyTimestamp)){
    ...

  11. Beiträge anzeigen #51 Zitieren
    Ehrengarde Avatar von neocromicon
    Registriert seit
    Jan 2019
    Beiträge
    2.478
     
    neocromicon ist offline
    Zitat Zitat von Cryp18Struct Beitrag anzeigen
    Geht sehr ähnlich. Du speicherst in einer Variable einen Zeitpunkt ab, beispielsweise 2 Stunden in der Zukunft:
    Code:
    C4_Justin_ArmorReadyTimestamp = Wld_GetTimePlus(0, 2, 0); // 2 Stunden in der Zukunft
    Und dann kannst du abfragen, ob dieser Zeitpunkt bereits überschritten wurde:
    Code:
    if(Wld_IsAfterTime(C4_Justin_ArmorReadyTimestamp)){
    ...
    Funktioniert das ganze auch, falls der Spieler genau in den 2 Stunden, einen Tag oder mehr schläft?

    Edit:\\ Ja tut es, kacke... Jetzt kann ich alles umbauen xD
    Geändert von neocromicon (05.03.2024 um 17:50 Uhr)

  12. Beiträge anzeigen #52 Zitieren
    Lehrling
    Registriert seit
    Aug 2023
    Beiträge
    25
     
    Paraguru ist offline
    Danke für die Hilfe, hat direkt funktioniert!

  13. Beiträge anzeigen #53 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.484
     
    Cryp18Struct ist offline
    Zitat Zitat von neocromicon Beitrag anzeigen
    Funktioniert das ganze auch, falls der Spieler genau in den 2 Stunden, einen Tag oder mehr schläft?

    Edit:\\ Ja tut es, kacke... Jetzt kann ich alles umbauen xD
    Solange Zeit nur vorwärtsläuft, ist das alles problemlos.
    Wenn man von Hand an der Tageszeit herumschiebt (Wld_SetTime), kann es ein, dass Zeit zurückgesetzt wird auf einen Zeitpunkt in der Vergangenheit.
    Das könnte dann Probleme machen.

    Klassiker: man möchte das es dunkel wird und setzt deswegen die Tageszeit auf einen Zeitpunkt in der Nacht:
    Code:
    Wld_SetTime	(03,36); // ab 3:40 wird's wieder heller, um 4:00 ist es annehmbar hell für Jiran
    Wenn dieser code vor 03:36 ausgeführt wird, läuft Zeit vorwärts.
    Wenn dieser code um 18:00 ausgeführt wird (am X. Tag), läuft Zeit rückwärts und man landet in der Vergangenheit (X. Tag, 03:36), NICHT: (X+1. Tag, 03:36).

  14. Beiträge anzeigen #54 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist gerade online
    Zitat Zitat von Cryp18Struct Beitrag anzeigen
    Solange Zeit nur vorwärtsläuft, ist das alles problemlos.
    Wenn man von Hand an der Tageszeit herumschiebt (Wld_SetTime), kann es ein, dass Zeit zurückgesetzt wird auf einen Zeitpunkt in der Vergangenheit.
    Das könnte dann Probleme machen.

    Klassiker: man möchte das es dunkel wird und setzt deswegen die Tageszeit auf einen Zeitpunkt in der Nacht:
    Code:
    Wld_SetTime	(03,36); // ab 3:40 wird's wieder heller, um 4:00 ist es annehmbar hell für Jiran
    Wenn dieser code vor 03:36 ausgeführt wird, läuft Zeit vorwärts.
    Wenn dieser code um 18:00 ausgeführt wird (am X. Tag), läuft Zeit rückwärts und man landet in der Vergangenheit (X. Tag, 03:36), NICHT: (X+1. Tag, 03:36).
    Das war mir auch irgendwann mal aufgefallen. In fast allen Fällen möchte man vermutlich die Zeit nur vorwärts setzen. Das ist sogar relativ einfach:
    Code:
    FUNC void Wld_SetTime_forward(var int hh, var int mm)
    {
    	if Wld_IsTime(00,00,hh,mm)
    	{
    		Wld_SetTime(hh,mm);
    	}
    	else
    	{
    		Wld_SetTime(hh+24,mm);
    	};
    };
    Stunden größer als 23 führen zum nächsten Tag.

Seite 3 von 3 « Erste 123

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