Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Es gibt Neuigkeiten! Ab sofort könnt ihr dem Donators Club auf Lebenszeit beitreten.
Weitere Infos im Thema Donator's Club ab heute wieder verfügbar!

  • Hallo,
    Ich wollte mal Nachfragen ob der Befehl so überhaupt Funktionieren würde?
    Ich nutze MySqL.

    PAWN-Quellcode

    1. CMD:ban(playerid,params[])
    2. {
    3. new id,reason,string[128];
    4. if(sscanf(params,"uz[128]",id)) SendClientMessage(playerid,0x00FF00,"System: /ban [ID]");
    5. else
    6. {
    7. if(PlayerInfo[playerid][pAdmin] >=4)
    8. {
    9. new query[256];
    10. format(string,sizeof(string),"Player %s was banned by %s Reason: %s",id,pName,reason);
    11. mysql_format(handle, query, sizeof(query), "UPDATE users SET ban = '%d'",
    12. PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pBan], PlayerInfo[playerid][p_id]);
    13. SendClientMessageToAll(0x00FF00,string);
    14. BanEx(id,"reason");
    15. }
    16. }
    17. return 1;
    18. }}
    Alles anzeigen


    Mein Enum sieht wie folgt aus:

    PAWN-Quellcode

    1. enum pDataEnum{p_id,bool:pLoggedIn,pName[MAX_PLAYER_NAME],pLevel,pMoney,pKills,pDeaths,pAdmin,pBan}new PlayerInfo[MAX_PLAYERS][pDataEnum];
  • So wird das nix
    Nur das nutzen was benötigt wird..

    Quellcode

    1. CMD:ban(playerid,params[])
    2. {
    3. new id,reason[30],string[128];
    4. if(sscanf(params,"uz[30]",id, reason)) return SendClientMessage(playerid,0x00FF00,"System: /ban [ID]");
    5. if(PlayerInfo[playerid][pAdmin] >=4)
    6. {
    7. format(string,sizeof(string),"Player %s was banned by %s Reason: %s",PlayerInfo[id][pName],PlayerInfo[playerid][pName],reason);
    8. SendClientMessageToAll(0x00FF00,string);
    9. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `ban` = '1' WHERE `id`=%d;", PlayerInfo[id][p_id]);
    10. BanEx(id,reason);
    11. }
    12. else
    13. {
    14. //keine Rechte
    15. }
    16. return 1;
    17. }
    Alles anzeigen
    musst ggf bei dir anpassen
    All in all it's just another brick in the wall
  • Ich hab folgendes Problem.
    Und zwar wird mir Angezeigt das in einen Syntax Fehler hätte
    Hier mal der Error:

    PAWN-Quellcode

    1. [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:

    PAWN-Quellcode

    1. 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:

    PAWN-Quellcode

    1. 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:

    PAWN-Quellcode

    1. 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?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von PlayEasy ()

  • PlayEasy schrieb:

    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:

    PAWN-Quellcode

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


    Und kein Komma vor das WHERE ;)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Kaliber schrieb:

    PlayEasy schrieb:

    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:

    PAWN-Quellcode

    1. 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.

    PAWN-Quellcode

    1. CMD:setadmin(playerid,params[])
    2. {
    3. new string[128];
    4. if(PlayerInfo[playerid][pAdmin] >= 1)
    5. {
    6. if(sscanf(params,"ui",p_id ,pAdmin))return SendClientMessage(playerid,0x00FF00,"[Info] /setadmin [playerid][adminlevel]");
    7. PlayerInfo[p_id][pAdmin] = pAdmin;
    8. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '1' WHERE `id` = %d;", PlayerInfo[playerid][pAdmin]);
    9. mysql_pquery(handle, string);
    10. SendClientMessage(playerid,0x00FF00,"Du hast den Adminrang geändert");
    11. }
    12. else
    13. {
    14. SendClientMessage(playerid,0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl auszuführen!"); // Keine Rechte
    15. }
    16. return 1;
    17. }
    Alles anzeigen


    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

    Dieser Beitrag wurde bereits 1 mal 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 :)

    Spoiler anzeigen
    Der Fehler den du gemacht ist, ist du gibst beim Query statisch 1 an und die ID soll das Adminlevel bei dir sein..das ja Käse..

    PAWN-Quellcode

    1. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '%d' WHERE `id` = %d", PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][p_id]);


    So müsstest du es machen :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Kaliber schrieb:

    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 :)

    Spoiler anzeigen
    Der Fehler den du gemacht ist, ist du gibst beim Query statisch 1 an und die ID soll das Adminlevel bei dir sein..das ja Käse..

    PAWN-Quellcode

    1. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '%d' WHERE `id` = %d", PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][p_id]);


    So müsstest du es machen :)

    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?

    PAWN-Quellcode

    1. //Admin-Level//
    2. #define ADMIN_LEVEL_1_NAME "Supporter"
    3. #define ADMIN_LEVEL_2_NAME "Admin"

    Hier sind die Admin Level defeniert

    PAWN-Quellcode

    1. GetAdminRank(playerid)
    2. {
    3. new arank[64];
    4. switch(PlayerInfo[playerid][pAdmin])
    5. {
    6. case 2: arank = ADMIN_LEVEL_2_NAME;
    7. case 1: arank = ADMIN_LEVEL_1_Name;
    8. }
    9. return arank;
    10. }

    Hier ist die Funktion

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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von PlayEasy ()

  • PlayEasy schrieb:

    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 :)


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

  • Kaliber schrieb:

    CodePLUS schrieb:

    Habt Ihr eine Idee wieso mein Game Crasht ?
    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:

    PAWN-Quellcode

    1. [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? ?(
  • CodePLUS schrieb:

    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:

    C-Quellcode

    1. CMD:reports(playerid, params[])
    2. {
    3. if(!PlayerInfo[playerid][pEingeloggt])return SendClientMessage(playerid, -1, "{808080}[{FF3333}FEHLGESCHLAGEN{808080}]: Du bist nicht Eingeloggt!");
    4. if(PlayerInfo[playerid][pAdmin] < 1)return SendClientMessage(playerid, -1, "{808080}[{FF3333}FEHLGESCHLAGEN{808080}]: Du hast nicht die benötige Rechte um diesen Befehl zu benutzen!");
    5. new str[1024];
    6. for(new i; i < MAX_SUP; i++){
    7. if(SupportInfo[i][erstellt] == true){
    8. if(SupportInfo[i][bearbeitung] == false){
    9. format(str, sizeof(str), "%s{FFFFFF}%s | {B36B00}%s\n", str, SupportInfo[i][Name], SupportInfo[i][Ueberschrift]);
    10. }
    11. else{
    12. format(str, sizeof(str), "%s{FFFFFF}%s | {B36B00}%s [In Bearbeitung]\n", str, SupportInfo[i][Name], SupportInfo[i][Ueberschrift]);
    13. }
    14. }else format(str, sizeof(str), "%s{808080}---\n", str);
    15. }
    16. ShowPlayerDialog(playerid, DIALOG_SUPPORT_LIST, DIALOG_STYLE_LIST, ""#TAG_SERVERKURZ" - Support Tickets:", str, "Auswählen", "Schließen");
    17. return 1;
    18. }
    Alles anzeigen
    //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:


    C-Quellcode

    1. stock AddNewLines(const string[])
    2. {
    3. new buffer[125+4*4],len=strlen(string);
    4. strcat(buffer,string);
    5. for(new i=30; i<len; i+=30)
    6. {
    7. strins(buffer,"~n~",i,sizeof(buffer));
    8. }
    9. return buffer;
    10. }
    11. //Nutzung einfach:
    12. TextDrawCreate(x,y, AddNewLines(pLastText));
    Alles anzeigen


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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kaliber ()

  • 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.

    PAWN-Quellcode

    1. 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:

    PAWN-Quellcode

    1. 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:

    PAWN-Quellcode

    1. CMD:setlevel(playerid,params[])
    2. {
    3. if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!");
    4. new string[128], pID, level; // 'level' ist eine neue Variable für [pLevel]
    5. if(sscanf(params,"ui",pID,level))return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]");
    6. else
    7. {
    8. new p_ID;
    9. format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",PlayerInfo[pID][p_ID],PlayerInfo[playerid][pLevel]);
    10. }
    11. PlayerInfo[pID][pLevel] = level;
    12. format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID));
    13. SendClientMessage(playerid, -1, string);
    14. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]);
    15. mysql_pquery(handle, string);
    16. return 1;
    17. }
    Alles anzeigen
  • Schreib es so:

    C-Quellcode

    1. CMD:setlevel(playerid,params[])
    2. {
    3. if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!");
    4. new string[128], pID, level, name[MAX_PLAYER_NAME];// 'level' ist eine neue Variable für [pLevel]
    5. if(sscanf(params,"ui",pID,level)) return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]");
    6. GetPlayerName(playerid, string, MAX_PLAYER_NAME);
    7. GetPlayerName(pID,name,MAX_PLAYER_NAME);
    8. PlayerInfo[pID][pLevel] = level;
    9. format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",string,name,GetLevelRank(pID));
    10. SendClientMessage(playerid, -1, string);
    11. format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID));
    12. SendClientMessage(playerid, -1, string);
    13. mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]);
    14. mysql_pquery(handle, string);
    15. return 1;
    16. }
    Alles anzeigen


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