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!

  • Jo moin mal ne Frage habe eine /ad Befehl gemacht das Problem ist wenn der text zu lang ist bekomme ich einen scanf warning: String buffer overflow.



    PAWN-Quellcode

    1. ocmd:ad(playerid, params[])
    2. {
    3. new Text[64], string[144];
    4. if(gPlayerLogged[playerid] == 0)return SendClientMessage(playerid, -1, "["#HTML_RED"FEHLGESCHLAGEN"#HTML_WHITE"]: Du bist nicht Eingeloggt!");
    5. if(ADTimer > 0 && PlayerInfo[playerid][pAdmin] < 1)
    6. {
    7. format(string, sizeof(string), "["#HTML_RED"FEHLGESCHLAGEN"#HTML_WHITE"]: Die nächste Werbung kann erst in %d Sekunden geschalten werden!", ADTimer);
    8. SendClientMessage(playerid, -1, string);
    9. return 1;
    10. }
    11. if(PlayerInfo[playerid][pLevel] < 2)return SendClientMessage(playerid, -1, "["#HTML_RED"FEHLGESCHLAGEN"#HTML_WHITE"]: Du musst mindestens Level 2 sein!");
    12. if(sscanf(params, "s[64]", Text))return SendClientMessage(playerid, -1, "/ad [WERBUNG]");
    13. //|| strlen(Text) > 64 wird nicht aufgerufen strlen(Text) < 4 das wiederum schon
    14. if(strlen(Text) < 4 || strlen(Text) > 64)return SendClientMessage(playerid, -1, "["#HTML_RED"FEHLGESCHLAGEN"#HTML_WHITE"]: Die Werbung muss aus 4 - 64 Zeichen bestehen!");
    15. if(PlayerInfo[playerid][pMuted] > 0)return SendClientMessage(playerid, COLOR_KNALLROT, "["#HTML_RED"FEHLGESCHLAGEN"#HTML_WHITE"]: Du bist Gemutet, du kannst keine Chats nutzen.!");
    16. format(string, sizeof(string), "Werbung: ~w~%s - Von: ~y~%s ~w~(Tel: ~r~%d~w~)", Text, GetName(playerid), PlayerInfo[playerid][pNummer]);
    17. TextDrawSetString(FooterDraw[2], string);
    18. ADTimer = 60;
    19. return 1;
    20. }
    Alles anzeigen

    woran kann das liegen das strlen(Text) > 64 nicht aufgerufen wird
  • Seine Abfrage lautet if(strlen(Text) < 4 || strlen(Text) > 64), du möchtest das diese
    if(strlen(Text) < 4 && strlen(Text) > 64) so aussehen soll.

    Gehen wir das Szenario mal durch, mit if(strlen(Text) < 4 && strlen(Text) > 64):
    Setzen wir mal Text auf 1.

    Laut deiner Abfragen wird geprüft, ob der Text kleiner als 4 ist und gleichzeitig größer als 64.
    Text < 4 trifft ein, Text > 64 nicht, da Text gleich 1 ist. Es wird nicht returned und auch keine Meldung abgegeben, da beide Bedingungen nicht erfüllt wurden.

    Text ist jetzt 70.
    Text < 4 trifft nicht zu, da Text gleich 70, Text > 64 trifft zu. Es wird nicht returned und auch keine Meldung abgegeben, da beide Bedingungen nicht erfüllt wurden.

    Text ist jetzt 40 (also im erlaubten Bereich).
    Text < 4 trifft nicht zu, da Text gleich 40, Text > 64 trifft nicht zu, da Text gleich 40. Es wird nicht returned und auch keine Meldung abgegeben, da beide Bedingungen nicht erfüllt wurden. (Hier würde es zwar funktionieren, aber nicht wie es soll.

    __

    Gehen wir das Szenario mal durch, mit if(strlen(Text) < 4 || strlen(Text) > 64):
    Setzen wir mal Text auf 1.

    Laut der Abfragen wird geprüft, ob der Text kleiner als 4 oder größer als 64.
    Text < 4 trifft ein, Text > 64 nicht, da Text gleich 1 ist. Es wird returned und auch eine Meldung abgegeben, da eine Bedingungen von zwei erfüllt wurden.

    Text ist jetzt 70.
    Text < 4 trifft nicht zu, da Text gleich 70, Text > 64 trifft zu. Es wird returned und auch eine Meldung abgegeben, da eine Bedingungen von zwei erfüllt wurden.

    Text ist jetzt 40 (also im erlaubten Bereich).
    Text < 4 trifft nicht zu, da Text gleich 40, Text > 64 trifft nicht zu, da Text gleich 40. Es wird nicht returned und auch keine Meldung abgegeben, da keines der Bedingungen erfüllt wurden. Weiter geht es hier wie gewünscht.


    Edit:

    Alternativ würde zwar if(strlen(Text) > 4 && strlen(Text) < 64) funktionieren, müsste aber in einem Block gesetzt werden und in der else die Meldung abgeben.




    Los Santos County Roleplay
    Hier gibt es Informationen

  • Sub Royal schrieb:

    Die alten C++ Redist Packages kann ich auch nicht installieren, laesst Windows 10 leider nicht zu, da angeblich von allem neuere Versionen installiert sind.
    Sicher? Das ist sehr merkwürdig.

    forum.sa-mp.com/showpost.php?p=3696651&postcount=3

    Mal überall versucht die x86 zu installieren?


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • So ich versuche mich nun ein wenig in MySQL einzufinden.
    Jedoch weiss ich leider nicht wie ich Fehlersuche betreiben kann.

    Habe mir gerade ein Script gezogen, und versuche damit auf die Datenbank zu verbinden.
    User, IP und Datenbankname habe ich gecheckt, existiert alles.
    Jedoch kann ich leider nicht verbinden, dieses Script meldet mir hier einen Fehler.

    Wie kann ich rausfinden woran es genau liegt?

    PAWN-Quellcode

    1. public OnGameModeInit()
    2. {
    3. new MySQLOpt: option_id = mysql_init_options();
    4. mysql_set_option(option_id, AUTO_RECONNECT, true); // We will set that option to automatically reconnect on timeouts.
    5. Database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE, option_id); // Setting up the "Database" handle on the given MySQL details above.
    6. if(Database == MYSQL_INVALID_HANDLE || mysql_errno(Database) != 0) // Checking if the database connection is invalid to shutdown.
    7. {
    8. print("I couldn't connect to the MySQL server, closing."); // Printing a message to the log.
    9. SendRconCommand("exit"); // Sending console command to shut down server.
    10. return 1;
    11. }
    12. print("I have connected to the MySQL server."); // If the given MySQL details were all okay, this message prints to the log.
    13. // Now, we will set up the information table of the player's information.
    14. mysql_tquery(Database, "CREATE TABLE IF NOT EXISTS `PLAYERS` (`ID` int(11) NOT NULL AUTO_INCREMENT,`USERNAME` varchar(24) NOT NULL,`PASSWORD` char(65) NOT NULL,`SALT` char(11) NOT NULL,`SCORE` mediumint(7), `KILLS` mediumint(7), `CASH` mediumint(7) NOT NULL DEFAULT '0',`DEATHS` mediumint(7) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `USERNAME` (`USERNAME`))");
    15. // So, this code is probably the only one which you haven't understood.
    16. // Well, we firstly create a table only if not existing in the database which is "USERS".
    17. // We create "ID" and set it as a primary key with auto increment to use it in retrieving information and many more uses.
    18. // We create "USERNAME" and set it as a unique key, the USERNAME stores every player's name in the database so you can
    19. // Control the players in offline mode and when a player leaves everything storted like kills, deaths, password and Saltion key
    20. // Wouldn't be lost upon server's close or player's disconnection.
    21. // We store kills, deaths, score and cash as written above so they might be useful for further use.
    22. return 1;
    23. }
    Alles anzeigen
  • Sub Royal schrieb:

    Database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE, option_id); // Setting up the "Database" handle on the given MySQL details above.
    Also mein MySQL Connect sieht so aus: mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS, 3306, true);
    Bei dir fehlt ein Port, jedoch weiß ich nicht welche version und welche MySQL include du verwendest (falls es mehrere gibt)

    Sonst versuch mal beim OnGameModeInit mysql_log(); einzufügen und schick dann mal den error code aus der .txt die im hauptordner erstellt werden sollte
    Mit freundlichen Grüßen
  • Hier mal das Log.
    Da scheint der ja mit einem anderen Port verbinden zu wollen.

    Quellcode

    1. [15:57:29] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    2. [15:57:30] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    3. [15:57:31] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    4. [15:57:32] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
  • Sub Royal schrieb:

    Hier mal das Log.
    Da scheint der ja mit einem anderen Port verbinden zu wollen.

    Quellcode

    1. [15:57:29] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    2. [15:57:30] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    3. [15:57:31] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    4. [15:57:32] [plugins/mysql] CConnection::CConnection - establishing connection to MySQL database failed: #2002 'Can't connect to MySQL server on '192.168.3.0' (10061)'
    Es scheint eine andere MySQL Version zu sein, als die, die ich verwende von daher bin ich mir unsicher.
    Ich möchte jetzt nicht zu viel sagen, da ich mir hier echt nicht sicher bin, aber hier hast du erstmal mögliche Fehlerquellen bis sich ein Anderer meldet
    Hast du schon probiert dein Port einzufügen in mysql_connect wie ich es vorher beschrieben habe?

    Aber mögliche Fehler könnten sein:
    Es ist nicht auf deinem lokalen PC, und der Port den du angeben hast ist dort nicht freigschaltet
    Hast einen falschen Port angegeben
    Dein MySQL Server ist offline
    Falsches passwort / username vom MySQL User
    Mit freundlichen Grüßen