[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Beitrag von Dr. Frauenarzt ()

    Dieser Beitrag wurde von shoxinat0r aus folgendem Grund gelöscht: Du hast bereits einen Thread für die Frage erstellt / Crossposting ().
  • Der Bug tritt auf, wenn du die SpawnPlayer Funktion verwendest / wenn er stirbt, während der Spieler sich in einem Auto befindet :)


    Mit SetPlayerPos musst du ihn aus dem Auto setzen :)

    ast2ufdyxkb1.png


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

  • Hab ein kleines Problem.



    [13:39:32] [plugins/mysql] error #1064 while executing query "SELECT * FROM users WHERE name = 'John_Malson', password ='' AND salt=''": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' password ='' AND salt=''' at line 1
    [13:39:35] [plugins/mysql] error #1064 while executing query "SELECT * FROM users WHERE name = 'John_Malson', password ='' AND salt=''": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' password ='' AND salt=''' at line 1


    Egal was ich für ein Passwort eingebe, es ist richtig.



    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    new Salted_Key[65];
    SHA256_PassHash(inputtext, sInfo[playerid][Salt], Salted_Key, 65);
    if(strcmp(Salted_Key, sInfo[playerid][Password]) == 0)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query),"SELECT * FROM users WHERE name = '%e', password ='%e' AND salt='%e'", sInfo[playerid][pName], sInfo[playerid][Password], sInfo[playerid][Salt]);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    }
    return 1;
    }



    public OnUserLogin(playerid)
    {
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    new String[150];
    sInfo[playerid][PasswordFails] += 1;
    printf("%s has been failed to login. (%d)", sInfo[playerid][pName], sInfo[playerid][PasswordFails]);
    if (sInfo[playerid][PasswordFails] >= 3) // If the fails exceeded the limit we kick the player.
    {
    format(String, sizeof(String), "%s wurde gekickt. Grund: {FF0000}(%d/3) Login fehlgeschlagen.", sInfo[playerid][pName], sInfo[playerid][PasswordFails]);
    SendClientMessageToAll(0x969696FF, String);
    Kick(playerid);
    }
    else
    {
    format(String, sizeof(String), "Falsches Passwort, du hast %d von 3 versuchen.", sInfo[playerid][PasswordFails]);
    SendClientMessage(playerid, 0xFF0000FF, String);
    format(String, sizeof(String), "{FFFFFF}Willkommen zurück, %s.\n\n{0099FF}Dein Account wurde gefunden.\n\
    {0099FF}Bitte gib nun dein Passwort ein:", sInfo[playerid][pName]);
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", String, "Einloggen", "Abbrechen");
    }
    }
    else
    {
    cache_get_value_name_int(0, "id", sInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", sInfo[playerid][Level]);
    cache_get_value_name_int(0, "bargeld", sInfo[playerid][BarGeld]);
    cache_get_value_name_int(0, "bankkonto", sInfo[playerid][BankKonto]);
    cache_get_value_name_int(0, "konto", sInfo[playerid][Konto]);
    cache_get_value_name_int(0, "adminlevel", sInfo[playerid][Admin]);
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,sInfo[playerid][BarGeld]);
    SetPlayerScore(playerid, sInfo[playerid][Level]);
    sInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Du hast dich erfolgreich eingeloggt.");
    SetSpawnInfo(playerid, 0, 1, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    SpawnPlayer(playerid);
    }
    return 1;
    }

  • Naja, du verwendest im übrigen zwei Methoden um das Passwort auf Richtigkeit zu überprüfen, welche aber beide nur halbrichtig sind:


    Entweder du lädst das Passwort VOR dem Vergleich mit der Eingabe, oder du suchst einen Account mit eben diesem SALT und PASSWORT. Letzteres ergibt für mich aber wenig Sinn, da du den Salt eh auslesen musst, da kannst du auch direkt das Passwort mitauslesen und dann den Vergleich ausführen -> du musst vor deinem DIALOG_LOGIN die Variable Password und Salt mit den korrekten Werten füllen

  • Ich hab einen hlist dialog wo alle gestorbnen spieler drinne stehen als dialog_style_list.


    Was tu ich, um einen Checkpoint zuerhalten wenn ich Doppelklick auf einen der listitems zu mache? (also auf einen der angezeigten Spieler)


    Code vom Dialog:



    if(!strcmp("/hlist",cmdtext, true))
    {
    if(IsPlayerConnected(playerid) && SpielerInfo[playerid][Eingeloggt] == 1)
    {
    if(SpielerInfo[playerid][Fraktion] == 5)
    {
    new hListString[200];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][IstImKrankenhaus] == 1)
    {
    new Float:x, Float:y, Float:z;
    x = GetPVarFloat(i, "gestorbenX");
    y = GetPVarFloat(i, "gestorbenY");
    z = GetPVarFloat(i, "gestorbenZ");
    format(hListString, sizeof(hListString),"%s\nSpieler: %s\t\t %0.2f Meter",hListString, SpielerName(i), GetPlayerDistanceFromPoint(i, x, y, z));
    }
    }
    ShowPlayerDialog(playerid, hListDia, DIALOG_STYLE_LIST, "Gestorbene Spieler", hListString, "Annehmen", "Abbrechen");
    }
    else
    {
    SendClientMessage(playerid, Rot, "Sie dürfen diesen Befehl nicht ausüben");
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • Versuchs so:

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == hListDia)
    {
    if(!response)return 1;
    new counter = -1;
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    {
    if(SpielerInfo[i][IstImKrankenhaus] == 1)
    {
    counter ++;
    if(counter == listitem)
    {
    new Float:X, Float:Y, Float:Z;
    x = GetPVarFloat(i, "gestorbenX");
    y = GetPVarFloat(i, "gestorbenY");
    z = GetPVarFloat(i, "gestorbenZ");
    SetPlayerPos(playerid, X, Y, Z);
    SendClientMessage(playerid, -1, "Ziel wurde soeben markiert!");
    break;
    }
    }
    }
    return 1;
    }
    }

  • Guten Abend,


    Ich wollte Für die Transport GmbH was machen das die Wissen wv die Tankstelle benötigt an Benzin.#



    C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : warning 204: symbol is assigned a value that is never used: "Brauch"



  • du ordnest "Brauch" einen Wert zu, verwendest "Brauch" aber dann nicht mehr


  • C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : error 022: must be lvalue (non-constant)
    C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : warning 215: expression has no effect




    im Enum


    tBrauch


    tBrauch = (floatround(Tanke[bizid][tMaxLiter])-floatround(Tanke[bizid][tLiter]));



    TextLabel:




    format(string, sizeof(string), "%s\n\nBesitzer: %s\n\nTeilhaber: %s\n\nLiterpreis: %d$\n\nBenötigte Liter: %d\n\nBezugspreis: %d\n\nFahrzeug mit /fill betanken", Tanke[tankeID][tName], Tanke[tankeID][tBesitzer], Tanke[tankeID][tTeilhaber],Tanke[tankeID][tPreisProLiter],Tanke[tankeID][tBrauch],(15*Tanke[tankeID][tPreisProLiter]));
    UpdateDynamic3DTextLabelText(Tanke[tankeID][tText], COLOR_GREY1, string);

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