OnServerTime

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hi,


    ich will ein kleines Callback basteln, das es mir erlaubt zu bestimmten Zeiten bestimmte Sachen zu machen (Stunden & Minuten). Das ganze soll so aussehen.


    forward OnServerTime(hour, minute);
    public OnServerTime(hour, minute)
    {
    if(hour == 12 && minute == 30) //12:30Uhr
    {
    //Code
    }


    if(hour == 12) //12:00 bis 12:59
    {
    //Code
    }


    if((hour == 15 || hour == 16) && minute == 0)) //15:00 und 16:00
    {
    //Code
    }
    return 1;
    }


    Mir ist schon klar, dass es mit der Zeitanzeige verknüpft ist. Der Code sieht dazu ja so aus.


    forward TimeUpdate();
    public TimeUpdate()
    {
    gettime(hour, minute);

    format(TimeString,32,"%02d:%02d", hour, minute);
    TextDrawSetString(TimeDisplay, TimeString);
    SetWorldTime(hour);

    new x = 0;
    while(x != MAX_PLAYERS)
    {
    if(IsPlayerConnected(x) && GetPlayerState(x) != PLAYER_STATE_NONE)
    {
    SetPlayerTime(x, hour, minute);
    }
    x++;
    }
    CallLocalFunction("OnServerTime", "i", hour, minute);
    }


    Nun habe ich mal probeweise CallLocalFunction eingebaut. Wenn ich das ganze so ausführe, dann krieg ich die Meldung, "variable foreshadows another variable at preceding level".
    Das Gerüst ist bestimmt noch nicht vollständig, deswegen frage ich nach Denkanstößen.


    Danke!

  • Zum einen das im Post über mir, und die Warnung bekommst du, weil du hour und minute global deklariert hast, dann darfst du es nicht nochmal in einer Funktionsdeklaration verwenden.


    forward OnServerTime(pHour, pMinute);
    public OnServerTime(pHour, pMinute)
    {
    hour = pHour;
    minute = pMinute;


    Entweder so, oder du änderst eben alle Vorkommen von hour und minute zu pHour und pMinute.

  • Okay, mit "global deklariert" meinst du, dass sich die Variablen "hour" und "minute" schon irgendwo in meinem GM befinden?


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    EDIT: Ich habe es nun einmal mit folgendem Code ausprobiert:


    forward OnServerTime(playerid, hours, minutes);
    public OnServerTime(playerid, hours, minutes)
    {
    hour = hours;
    minute = minutes;

    if(hours == 12 && minutes == 0) SendClientMessage(playerid, C_TURQUOISE, "Es ist 12:00Uhr.");
    return 1;
    }


    ..und eben CallLocalFunction angepasst.
    forward TimeUpdate();
    public TimeUpdate()
    {
    gettime(hour, minute);

    format(TimeString,32,"%02d:%02d", hour, minute);
    TextDrawSetString(TimeDisplay, TimeString);
    SetWorldTime(hour);

    new x = 0;
    while(x != MAX_PLAYERS)
    {
    if(IsPlayerConnected(x) && GetPlayerState(x) != PLAYER_STATE_NONE)
    {
    SetPlayerTime(x, hour, minute);
    }
    x++;
    }
    CallLocalFunction("OnServerTime", "dd", hour, minute);
    }


    Allerdings wurde mir keine ClientMessage ausgegeben.

    Einmal editiert, zuletzt von Manyula ()

  • du baust sachen in den code die vorher nicht drin waren...
    du kannst nicht einfach einem Callback eine Variable wie Playerid hinzufügen und denken dass dort was drin steht...
    Dein Callback sieht jetzt so aus:
    forward OnServerTime(playerid, hours, minutes);
    public OnServerTime(hours, minutes)
    {
    hour = hours;
    minute = minutes;

    if(hours == 12 && minutes == 0) return =;
    return 1;
    }


    die Playerid musst du irgendwo anders hernehmen beispielsweise per schleife druch alle spieler. Das einfachste zum testen wäre aber die Nachricht an alle zu sendne...

  • Also geht es im Prinzip darum, dass ich in TimeUpdate() kein playerid verwende, und es in OnServerTime plötzlich fordere, obwohl es gar nicht vorhanden ist?


    Mit ner Schleife funktioniert das wunderbar, danke schon mal für eure Hilfe.