[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • if(strcmp(cmd, "/close", true) == 0 || strcmp(cmd, "/c", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(gPlayerLogged[playerid] == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist noch nicht eingeloggt !");
    return 1;
    }
    GetPlayerName(playerid, pname, sizeof(pname));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[64];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(!strlen(result))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /(c)lose [close chat text]");
    return 1;
    }
    format(string, sizeof(string), "%s Sagt: %s", pname, result);
    ProxDetector(3.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
    printf("%s", string);
    }
    return 1;
    }

  • ähh ja gute Frage :) wie sieht das denn ungefähr aus der Code :)


    Ja der wird wohl so ähnlich aussehen wie der /close Befehl. Suchen kann ich ihn dir nicht, den musst du schon selbst finden.




    Meine Meinung am Rande: Eigener Code = Eigener Server -> Wer einen Code nur editiert hat den Server nicht gemacht, er hat ihn vermacht. Das ist ein feiner aber ausschlaggebender Unterschied.

  • Okay habe mal durchgeschaut das ist das einzige was dazu passen würde.
    if (realchat)
    {
    if(gPlayerLogged[playerid] == 0)
    {
    return 0;
    }
    if(PlayerInfo[playerid][pTot] == 1)
    {
    return 0;
    }
    GetPlayerName(playerid, pname, sizeof(pname));
    format(string, sizeof(string), "%s sagt: %s", pname, text);
    ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
    return 0;
    }

  • Entweder
    if(frakint[playerid] == 0)return SendClientMessage(playerid,FEHLER,"Sie sind in keiner Fraktion.");


    Oder
    if(!frakint[playerid])return SendClientMessage(playerid,FEHLER,"Sie sind in keiner Fraktion.");


    Beide sind semantisch identisch. Welches du benutzt bleibt dir überlassen, beides das selbe.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Aber wenn ich einen bestimmten Wert abfrage wie z.B.


    if(!frakint[playerid] == 1) return SendClientMessage(playerid,FEHLER,"Sie sind kein Polizist.");


    kommt auch der gleiche Fehler und wenn ich das ! weg mache geht der fehler weg. Entweder ist es einfach zu auffällig oder ich weiß es echt nicht.

  • Das Ausrufezeichen vor einer Abfrage steht für ==0
    Hast du ein Ausrufezeichen und ein ==irgendwas dann hast du eine doppelte Abfrage und der Compiler weiß nicht was er machen soll.


    Nicht 0
    variable!=0


    0
    variable==0
    !variable


    1
    variable==1


    Nicht 1
    variable!=1
    !(variable==1)


    (letztes Beispiel: Wenn eine positive Abfrage negiert wird, dann mit klammern.)
    Das letzte Beispiel trifft auf dich zu.

  • Abend,
    ich habe ein Problem mit nem Timer dessen Intervall ich per MySql lade.
    Bei OnGameModeInit hat der Timer immer nen Standartintvervall von 123 ms doch beim Lade Public wo ich das Intervall lade, kommt die richtige Zeit raus.
    Woran kann das liegen ?


    SQL
    [22:14:17] NL: Verbindung zur Datenbank war erfolgreich.
    [22:14:17] Savetimer auf 123 Millisekunden //Print bei OnGameModeInit
    [22:14:17] Number of vehicle models: 0
    [22:14:17] Serverstuff loaded
    [22:14:17] Savetimer auf 100000 Milisekunden //Print beim Public wo es geladen wird


    Für nähere Infos zum Thema:
    Timerinterval per MySql


  • Kannst du mal den Code posten wo das ganze laden lässt.
    mal abgesehen davon wenn du nicht mehreree indexe benötigst bei einem 2 dimensionalen array dann lass das ganze doch als 1 dimensionales array.



    enum Stuff
    {
    AutomaticUserSavetimer
    }


    new ServerStuff[Stuff];


    den wert speicherst du auch als integer ?

  • @IPrototypeI


    SQL
    mysql_function_query(sqlconnection,"SELECT * FROM Serverstuff",true,"OnServerStuffLoading","");


    public OnServerStuffLoading()
    {
    new rows,fields;
    cache_get_data(rows,fields,sqlconnection);
    if(rows)
    {
    ServerStuff[0][AutomaticUserSaveTimer]=cache_get_field_content_int(0,"SaveAllUserTimer",sqlconnection);
    print("Serverstuff loaded");
    printf("Savetimer auf %d ms",ServerStuff[0][AutomaticUserSaveTimer]);
    }
    else
    {
    print("No Serverstuff");
    }
    return 1;
    }


    Jap es ist ein Integer


    edit. Hier ist es halt noch 2 Dimensional



  • Am besten erstellst du den Timer in dem Callback, zu dem ist es besser mysql_tquery zu verwenden somit gehst du auch über Threaded Querys.
    Ich weiß ja nicht was du schon davor absendest jedoch wartet dein Server nicht darauf bis dein query verarbeitet ist.



    if(rows)
    {
    ServerStuff[AutomaticUserSaveTimer]=cache_get_field_content_int(0,"SaveAllUserTimer",sqlconnection);
    print("Serverstuff loaded");
    printf("Savetimer auf %d ms",ServerStuff[0][AutomaticUserSaveTimer]);
    SetTimer("Name",ServerStuff[AutomaticUserSaveTimer],true);
    }

  • Okay, werde es dann testen danke.
    Somal nebenbei, was ist denn der unterschied zwischen mysql_tquery und mysql_function_query ?


    Laut wiki: The callback must be a public function. That means it has to be forwarded.
    Heißt das jetzt bei tquery muss immer ein public angegeben auch bei Update und Insert ?
    Oder sehe ich das jetzt falsch

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen