[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
  • Ich hab folgendes Problem.
    Und zwar wird mir Angezeigt das in einen Syntax Fehler hätte
    Hier mal der Error:
    [02/03/19 14:33:05] [ERROR] error #1064 while executing query "UPDATE `users` SET `level` = '0', `money` = '0', `kills` = '0', `deaths` = '0', `ban` = '3', `admin` = '0', WHERE `id` = '31'": You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `id` = '31'' at line 1


    Hier der Code:
    mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', WHERE `id` = '%d', `ban` = '%d', `admin` = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin]);


    Desweiteren werden die Daten nicht richtig Gespeichert z.b beim Befehl /setadmin:
    CMD:setadmin(playerid,params[]){new string[128];if(PlayerInfo[playerid][pAdmin] >= 1){if(sscanf(params,"ui",p_id ,pAdmin))return SendClientMessage(playerid,0x00FF00,"[Info] /setadmin [playerid][adminlevel]");PlayerInfo[p_id][pAdmin] = pAdmin;mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '1' WHERE `id` = %d;", PlayerInfo[playerid][pAdmin]);mysql_pquery(handle, string);SendClientMessage(playerid,0x00FF00,"Du hast den Adminrang geändert");}else{SendClientMessage(playerid,0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl auszuführen!"); // Keine Rechte}return 1;}


    Hier mein SaveUserStats:
    stock SaveUserStats(playerid){//Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nichtif(!PlayerInfo[playerid][pLoggedIn]) return 1;//Ansonsten speichere sienew query[1024];mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', WHERE `id` = '%d', `ban` = '%d', `admin` = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin]);//Das Query wird abgesendetmysql_pquery(handle, query);return 1;}
    Wo Liegt der Fehler?

    Einmal editiert, zuletzt von PlayEasy ()

  • Wo Liegt der Fehler?

    Du kannst nicht einfach hinter das WHERE noch mehr dran hängen, dass muss alles zwischen das SET und dem WHERE, nicht danach.


    Musst es so anordnen:


    UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', `ban` = '%d', `admin` = '%d' WHERE `id` = '%d'


    Und kein Komma vor das WHERE ;)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Du kannst nicht einfach hinter das WHERE noch mehr dran hängen, dass muss alles zwischen das SET und dem WHERE, nicht danach.
    Musst es so anordnen:


    UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', `ban` = '%d', `admin` = '%d' WHERE `id` = '%d'


    Und kein Komma vor das WHERE ;)

    danke für den Hinweis :D


    Leider werden die Daten durch den Befehl /setadmin nicht richtig gespeichert.

    CMD:setadmin(playerid,params[])
    {
    new string[128];
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    if(sscanf(params,"ui",p_id ,pAdmin))return SendClientMessage(playerid,0x00FF00,"[Info] /setadmin [playerid][adminlevel]");
    PlayerInfo[p_id][pAdmin] = pAdmin;
    mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '1' WHERE `id` = %d;", PlayerInfo[playerid][pAdmin]);
    mysql_pquery(handle, string);
    SendClientMessage(playerid,0x00FF00,"Du hast den Adminrang geändert");
    }
    else
    {
    SendClientMessage(playerid,0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl auszuführen!"); // Keine Rechte
    }
    return 1;
    }


    Also ich gebe Ingame z.b /setadmin Id:0 Adminlevel = 3 ein und es wird trotzdem 1 Eingespeichert.
    Es kann sein das ich einen Denkfehler habe, aber weiß nicht wo..
    @Kaliber

    Einmal editiert, zuletzt von PlayEasy ()

  • Ich würde das komplette MySQL Zeug da raus nehmen.


    Schließlich reicht es doch, wenn beim Logout alles in der Datenbank erst gespeichert wird :)


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Danke für den Tipp.
    Kann ich generell die Mysql Funktionen in einem Befehl raus lassen, und es einfach bei einem Logout speichern lassen?
    Und ich möchte gerne, anstatt das in der DB '1' steht das dort Steht: Supporter usw.
    Kann ich das durch eine Case Funktion ermöglichen?


    Funktioniert diese Variante die ich Angefangen habe zu Scripten?

    //Admin-Level//
    #define ADMIN_LEVEL_1_NAME "Supporter"
    #define ADMIN_LEVEL_2_NAME "Admin"
    Hier sind die Admin Level defeniert



    GetAdminRank(playerid)
    {
    new arank[64];
    switch(PlayerInfo[playerid][pAdmin])
    {
    case 2: arank = ADMIN_LEVEL_2_NAME;
    case 1: arank = ADMIN_LEVEL_1_Name;
    }
    return arank;
    }
    Hier ist die Funktion


    Nur weiß ich nicht, wie ich es im Code umsetzen kann.

    Einmal editiert, zuletzt von PlayEasy ()

  • Kann ich generell die Mysql Funktionen in einem Befehl raus lassen, und es einfach bei einem Logout speichern lassen?
    Und ich möchte gerne, anstatt das in der DB '1' steht das dort Steht: Supporter usw.
    Kann ich das durch eine Case Funktion ermöglichen?

    Ja, zu Allem :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Kannst du mal aus Spaß das ShowPlayerDialog auskommentieren und mal schauen ob du dann immer noch crashst?
    Und printe dir mal den String und poste den mal :)


    Entschuldige für die sehr Späte Antwort.


    Also, hab den Dialog Ausgeklammert, er Crasht nun nicht mehr, der Print schaut wiefolgt aus:

    [15:49:43] str: {FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Huhu,


    gibts eine Möglichkeit für folgende Situation:
    Ich möchte einen Text im "TextDraw" anzeigen lassen, jedoch wenn der Spieler
    einen Text eingibt, welcher Länger als 30 Zeilen ist (sonst schauts über den TextDraw hinaus) irgendwie einen automatischen
    "~n~" in den Text reinsetzen lassen? (Über buffer?)
    Der Text wird über eine Variable gesetzt (pLastText][125]), wie funktioniert das, wenn der Text der in dieser Variable drin ist, automatisch dieses ~n~ erhält? ?(

  • Also, hab den Dialog Ausgeklammert, er Crasht nun nicht mehr, der Print schaut wiefolgt aus:

    Also das Problem ist, dass du das alles in eine Reihe ausgeben willst und das für den Dialog zu lang ist.


    Du musst öfter Zeilenumbrüche machen mit \n.


    Schreibe es mal so:


    //Edit:
    Jaa ganz ruhig Leute xD


    @PlayEasy
    Verstehe dein Problem nicht, ja das ist doch schon die fertige Funktion?!
    Die jetzt einfach nur verwenden ^^


    @ReborN
    Denke das könntest du so einfach machen:



    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Kaliber ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Abend,
    Wie gebe ich am besten wieder wenn Admin %s den Rang/Level von %s geändert hat?
    Also gemeint ist  Admin: %s hat den Rang von Spieler: %s zu %s geändert


    Ich habe es versucht über eine else Funktion zu machen.
    new p_ID;format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",PlayerInfo[pID][p_ID],PlayerInfo[playerid][pLevel]);}}


    Leider kriege ich dort 1 Warning:
    selfmade1.p(369): warning 213: tag mismatch


    Wo hab ich den Fehler produziert?
    Ich weiß das er sagt das pID eine Variable ist wenn ich nicht Falsch liege ^^


    Der befehlt sieht folgendermaßen aus:
    CMD:setlevel(playerid,params[])
    {
    if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!");
    new string[128], pID, level; // 'level' ist eine neue Variable für [pLevel]
    if(sscanf(params,"ui",pID,level))return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]");
    else
    {
    new p_ID;
    format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",PlayerInfo[pID][p_ID],PlayerInfo[playerid][pLevel]);
    }
    PlayerInfo[pID][pLevel] = level;
    format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID));
    SendClientMessage(playerid, -1, string);
    mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]);
    mysql_pquery(handle, string);
    return 1;
    }

  • Schreib es so:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Gibt es eigentlich sinvolle Anwendungen fuer ein

    Code
    -->


    ?
    Ist ja eigentlich nur dekrement mit Vergleich ob irgendwas groesser irgendwas ist, kann man doch bspw. in while loops einsetzen, aber gibt es da evtl. sinvollere Anwendungen?
    oder sowas wie


    Code
    -x--<
  • Ist zumindest toller als eine for Schleife.

    Du kannst das zwar machen, aber es ist schlechter als eine for-Schleife.


    Das liegt daran, wie der Code verarbeitet wird vom Compiler.


    for-Schleifen wurden genau für so einen Zweck gemacht, also solltest du sie auch für diesen Zweck nutzen ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Schreib es so:


    Danke für den Tipp / Hinweiß.


    #Edit
    Hab es jetzt über eine andere Funktion hin bekommen und es wird ohne Probleme wiedergegeben.

    Einmal editiert, zuletzt von PlayEasy ()

  • Guten Tag,
    Wie kann man den Bildschirm weiß machen ?
    Über ein Textdraw oder wäre es auch anders Möglich ?



    Des weiteren suche ich ein Blitz Effekt ( z.b ein kleinen Ball oder so der Leuchtet ) den ich kurz Erstellen und löschen kann um ein Blitz Effekt zu erstellen