Problem mit Public und forward

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
  • Hallo also uch habe ein filterscript und da hab ich



    public OnFilterScriptInit()
    {
    for(new i; i < MAX_PLAYERS; i ++)
    {
    SetTimerEx("TachoUpdate", 100, 1, "i", i);
    }
    return 1;
    }


    und weiter unten hab ich



    forward TachoUpdate(i); //#1
    public TachoUpdate(i) //#2
    {
    new State = GetPlayerState(i);
    ...
    ....
    return 1;
    }


    und nun kommen die errormeldungen
    error 029: invalid expression, assumed zero //bei #1
    error 017: undefined symbol "TachoUpdate" //bei #1
    error 029: invalid expression, assumed zero //bei #2
    undefined symbol "TachoUpdate" //bei #2
    undefined symbol "i" und der infolge das das TachoUpdate nicht erkannt wird


    Bitte um hilfe

  • Du kannst ja auch keine Spielerid in einem Callback versuchen zu bekommen wo es keine gibt. Starte deinen Timer doch einfach wenn jemand ein Fahrzeug betritt und kill diesen wenn er das Fahrzeug verlässt. (Spielerbezogenen Timer erstellen)


    Kleiner Tipp: OnPlayerStateChange ist ein nützlicher Callback dafür.

  • Ich würde bald mal behaupten, dass forward vor der ersten Verwendung der Funktion, also am besten so weit oben wie möglich, kommen sollte, da sonst nicht bekannt ist, dass eine solche Funktion existiert.
    Zudem würde ich dir auch den Tipp geben, dass du nicht für jeden Spieler einen Timer starten solltest - das wären im Maximalfall 500 Timer, dafür würde sich dein Server ganz kräftig bedanken. Starte lieber einen Timer und starte dann im Timer die for-Schleife, die jeden Spieler durchgeht.


    //e: Siehe auch http://webcache.googleusercontent.com/search?q=cache:_wC8X2y10TIJ:http://wiki.sa-mp.com/wiki/Pub…forward&hl=de&ct=clnk</a> (sa-mp.com hat gerade enorme Probleme, deswegen die Version aus dem Google Cache):

    Zitat

    It's best to forward a function at the top of the script (but below the #include directives, though).

    Ich bin Dittis Signatur.

  • also wenn ichs nun so mache


    Ganz oben

    #include <a_samp>
    #include <progress>


    forward TachoUpdate();




    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER && !IsARBike(GetPlayerVehicleID(playerid)))
    {
    SetTimer("TachoUpdate", 100, 1);
    }
    return 1;
    }




    public TachoUpdate()//#1
    {
    for(new i; i < MAX_PLAYERS; i ++)
    {
    new State = GetPlayerState(i);
    ...
    }
    return 1;
    }
    //#2


    C:\Users\deathrunner\Desktop\XF-SAMP\rlscript\scriptfiles\tank.pwn(587) : error 029: invalid expression, assumed zero //#1
    C:\Users\deathrunner\Desktop\XF-SAMP\rlscript\scriptfiles\tank.pwn(587) : error 004: function "TachoUpdate" is not implemented //#1
    C:\Users\deathrunner\Desktop\XF-SAMP\rlscript\scriptfiles\tank.pwn(635) : error 030: compound statement not closed at the end of file (started at line 554) //#2


    also so hab ichs verstanden


    //edit KA warum das nicht geht pls help