Beiträge von _Max

    Hi,
    danke dir, das geht jetzt auf jeden Fall schon mal. :)
    Allerdings kommt jetzt einfach kein Dialog xd Habe es dir mal per PN geschickt, weiß nicht woran es liegt :/

    Hi,
    saß gestern und heute den ganzen Tag daran, meine Datenbank etc.. auf den laufenden zu bringen, allerdings habe ich ein Problem.
    Wenn ich In-Game mein Passwort eingebe, geht der Dialog zwar weg, aber ich bleib in diesem Spawn-Bild(?) und kann nichts machen.
    Wenn ich nur crashdetect als Plugin drin habe, kommt das als Log:


    Wenn ich sscanf und MySQL hinzufüge, ist das der Log:



    Bild von der Datenbank:
    https://gyazo.com/943086cd87dbf06347aa281fac4b20fb



    stock MySQL_SetupConnection(ttl = 3)
    {
    print("[MySQL] Verbindungsaufbau...");


    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);


    if(mysql_errno(handle) != 0)
    {
    if(ttl > 1)
    {
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
    return MySQL_SetupConnection(ttl-1);
    }
    else
    {
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
    print("[MySQL] Der Server wird heruntergefahren.");
    return SendRconCommand("exit");
    }
    }
    printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
    return 1;
    }

    Nein, das ist Quatsch, du musst da sowas haben:


    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);Sonst würdest du ja, dein tquery auf das Insert Query ausführen und das macht natürlich keinen Sinn.

    Hab es jetzt so geändert, dennoch ändert sich nach dem Registrieren nichts und ich bleibe in diesem Screen, wovon ich ein Post ein Screenshot gepostet habe. :/

    Kannst du löschen.
    Wie sieht denn jetzt dein Code aus?


    Zeig mal deinen Query und was im Callback steht :)

    Habe es jetzt wie folgt unter DIALOG_REGISTER:

    if(dialogid==DIALOG_REGISTER)
    {
    if(!response)
    return Kick(playerid);
    if(!isnull(inputtext) && strlen(inputtext) > 4)
    {
    new query[128];
    // new whirlpoolHash[129];
    //WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);
    mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), inputtext);
    //mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), whirlpoolHash);
    mysql_query(dbhandle, query);
    //SetTimerEx("LoadAccount", 1500, false, "d", playerid);
    mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrierung", "{FF0000}Dein Passwort muss mindestens 4 Zeichen lang sein!\n\n{FFFFFF}Herzlich Willkommen auf ...!\nEs scheint so, als hättest du noch keinen Account.\nBitte gebe jetzt dein gewünschtes Passwort ein.", "Registrieren", "Abbrechen");
    }
    }


    LoadAccount:

    public LoadAccount(playerid)
    {
    new string[128];
    // mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
    // new Cache:result = mysql_query(dbhandle, string);
    //cache_set_active(result);
    cache_get_value_name_int(0, "id", sInfo[playerid][id]);
    cache_get_value_name_int(0, "money", sInfo[playerid][money]);
    cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
    cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
    cache_get_value_name_int(0, "level", sInfo[playerid][level]);
    cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
    cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);


    sInfo[playerid][eingeloggt] = 1;


    SetPlayerMoney(playerid, sInfo[playerid][money]);
    SetPlayerScore(playerid, sInfo[playerid][level]);


    SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
    if (GetPVarInt(playerid, "FirstSpawn") == 0)
    {
    if (isAdmin(playerid, 1))
    {
    format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    SetPVarInt(playerid, "FirstSpawn", 1);
    }


    SetPlayerSkin(playerid, sInfo[playerid][skin]);
    SpawnPlayer(playerid);


    cache_unset_active();
    //cache_delete(result);
    sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);


    Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
    TextDrawFont(Spectate[playerid], 1);
    TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
    TextDrawHideForPlayer(playerid, Spectate[playerid]);
    SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
    return 1;
    }

    Vorrausgesetzt du verwendest jetzt den selben Query per mysql_tquery

    Ja, verwende ich =)


    //Edit: Wenn ich "new Cache:result = mysql_query(dbhandle, string);" entferne, kommt folgende Fehlermeldung:
    "script.pwn(1564) : error 017: undefined symbol "result"


    Das ist diese Zeile: cache_delete(result);


    Soll ich new [..] im Script lassen?


    2. Edit:
    Jetzt werde ich gar nicht erst gespawnt, nach der Passwort Eingabe:
    https://gyazo.com/93cb38cb6a71789f2aba1d6afc7c6070

    ...Du solltest dir mal anschauen (Tutorials), was es bedeutet Dinge asynchron laden zu lassen.
    Du solltest unter DIALOG_REGISTER anstatt dem Timer einfach mysql_pquery oder mysql_tquery nutzen und dann kein mysql_query mehr im Callback.


    Du willst nämlich gar kein mysql_query nutzen, deshalb nutzt du ja die Cache Version.
    mysql_query lädt alles synchron, du willst es aber asynchron, sonst bringen dir auch die Neusten Plugins überhaupt nix.

    Werde ich sicherlich auch machen ^^
    Habe jetzt folgendes unter dem DIALOG_REGISTER eingefügt:
    "mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);"
    Was muss ich jetzt unter dem LoadAccount noch ändern? :/



    public LoadAccount(playerid)
    {
    new string[128];
    mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
    new Cache:result = mysql_query(dbhandle, string);
    cache_set_active(result);
    cache_get_value_name_int(0, "id", sInfo[playerid][id]);
    cache_get_value_name_int(0, "money", sInfo[playerid][money]);
    cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
    cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
    cache_get_value_name_int(0, "level", sInfo[playerid][level]);
    cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
    cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);


    sInfo[playerid][eingeloggt] = 1;


    SetPlayerMoney(playerid, sInfo[playerid][money]);
    SetPlayerScore(playerid, sInfo[playerid][level]);


    SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
    if (GetPVarInt(playerid, "FirstSpawn") == 0)
    {
    if (isAdmin(playerid, 1))
    {
    format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    SetPVarInt(playerid, "FirstSpawn", 1);
    }


    SetPlayerSkin(playerid, sInfo[playerid][skin]);
    SpawnPlayer(playerid);


    cache_unset_active();
    cache_delete(result);
    sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);


    Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
    TextDrawFont(Spectate[playerid], 1);
    TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
    TextDrawHideForPlayer(playerid, Spectate[playerid]);
    SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
    return 1;
    }

    Hi,
    folgendes:
    Nachdem ich mein Passwort eingegeben habe, dauert es immer 1500ms, bis ich In-Game bin, da ich es früher so gemacht habe unter DIALOG_REGISTER:
    "SetTimerEx("LoadAccount", 1500, false, "d", playerid);"


    LoadAccount:

    public LoadAccount(playerid)
    {
    new string[128];
    mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
    new Cache:result = mysql_query(dbhandle, string);
    cache_set_active(result);
    cache_get_value_name_int(0, "id", sInfo[playerid][id]);
    cache_get_value_name_int(0, "money", sInfo[playerid][money]);
    cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
    cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
    cache_get_value_name_int(0, "level", sInfo[playerid][level]);
    cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
    cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);


    sInfo[playerid][eingeloggt] = 1;


    SetPlayerMoney(playerid, sInfo[playerid][money]);
    SetPlayerScore(playerid, sInfo[playerid][level]);


    SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
    if (GetPVarInt(playerid, "FirstSpawn") == 0)
    {
    if (isAdmin(playerid, 1))
    {
    format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    SetPVarInt(playerid, "FirstSpawn", 1);
    }


    SetPlayerSkin(playerid, sInfo[playerid][skin]);
    SpawnPlayer(playerid);


    cache_unset_active();
    cache_delete(result);
    sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);


    Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
    TextDrawFont(Spectate[playerid], 1);
    TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
    TextDrawHideForPlayer(playerid, Spectate[playerid]);
    SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
    return 1;
    }


    Kann ich es irgendwie ohne großen Aufwand so umschreiben, dass ich nicht mehr die 1500ms warten muss?

    Lade mal crashdetect und poste dann mal deinen server_log :)

    Hi,
    danke schon mal für deine Hilfe. =)
    Hatte das Problem jetzt gefixxt, indem ich diese 2 Dinge jeweils beim Register, sowie beim Login gelöscht habe:
    new whirlpoolHash[129];
    WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);


    Jetzt lädt auch wieder alles normal. =)

    Hi,
    habe ein wenig am Register und Login Dialog rum gespielt und wollte es hashen, jedoch kommt jetzt gar kein Dialog mehr. XD
    if(dialogid==DIALOG_LOGIN){if(!response)return Kick(playerid);new query[80];new whirlpoolHash[129];WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);mysql_format(dbhandle, query, sizeof(query), "SELECT `password` FROM `user` WHERE `username`='%e';", SpielerName(playerid));//mysql_format(dbhandle, query, sizeof(query), "SELECT COUNT(*) AS `count` FROM `accounts` WHERE `username` = '%s' AND `password` = '%e'",SpielerName(playerid), whirlpoolHash);new Cache:result = mysql_query(dbhandle, query);cache_set_active(result);cache_get_value_name(0, "password", query, sizeof(query));if(!isnull(inputtext) && strlen(inputtext) > 4){if(!strcmp(inputtext, query))//SetTimerEx("LoadAccount", 1, false, "d", playerid); // test+SetTimerEx("LoadAccount", 750, false, "d", playerid);else{//SendClientMessage(playerid, COLOR_RED, "Das eingegebene Passwort ist falsch.");ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Das eingegebene Passwort ist falsch!\n\n{FFFFFF}Bitte gebe dein Passwort ein:", "Login", "Abbrechen");}}else{//SendClientMessage(playerid, COLOR_RED, "Bitte gib dein Passwort ein!");ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Das eingegebene Passwort ist falsch!\n\n{FFFFFF}Bitte gebe dein Passwort ein!", "Login", "Abbrechen");}cache_unset_active();cache_delete(result);return 1;}if(dialogid==DIALOG_REGISTER){if(!response)return Kick(playerid);if(!isnull(inputtext) && strlen(inputtext) > 4){new query[128];new whirlpoolHash[129];WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), inputtext);//mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), whirlpoolHash);mysql_query(dbhandle, query);SetTimerEx("LoadAccount", 1500, false, "d", playerid);}else{ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrierung", "{FF0000}Dein Passwort muss mindestens 4 Zeichen lang sein!\n\n{FFFFFF}Herzlich Willkommen auf ...!\nEs scheint so, als hättest du noch keinen Account.\nBitte gebe jetzt dein gewünschtes Passwort ein.", "Registrieren", "Abbrechen");}}


    //Edit: Komischerweise steht jetzt auch folgendes im Log:
    [14:53:03] Script[gamemodes/script.amx]: Run time error 19: "File or function is not found"


    ocmd@2:f,funk(playerid,params[])
    {
    #pragma unused params
    if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid, GRAU, "Du bist nicht eingeloggt!");
    if(SpielerDaten[playerid][pTot] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
    if(SpielerDaten[playerid][pCuffed] == 1)return SendClientMessage(playerid,GRAU,"Du bist gefesselt.");
    new text[96], string[128], string2[128], fv = IsAFraktionsVeh(playerid);
    if(sscanf(params, "s[96]", text))return SendClientMessage(playerid, GRAU, "Benutze: /funk [Nachricht]");
    if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");
    if(!(SpielerDaten[playerid][pFraktion] == 1 || SpielerDaten[playerid][pFraktion] == 2 || SpielerDaten[playerid][pFraktion] == 3))return SendClientMessage(playerid, GRAU, "Diesen Befehl kannst du nicht nutzen!");
    //if(!(SpielerDaten[playerid][pFraktion] == 1 || SpielerDaten[playerid][pFraktion] == 2))return SendClientMessage(playerid, GRAU, "Diesen Befehl kannst du nicht nutzen!");
    format(string ,sizeof(string), "[Funk] %s [%s]: %s", GetRoleplayName(playerid), GetRankName(SpielerDaten[playerid][pFraktion], SpielerDaten[playerid][pRank]), text);
    format(string2, sizeof(string2), "[Walki Talki] %s [%s]: %s", GetRoleplayName(playerid), GetRankName(SpielerDaten[playerid][pFraktion], SpielerDaten[playerid][pRank]), text);
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(Eingeloggt[i] == 1)
    {
    if(SpielerDaten[i][pFraktion] == 1 || SpielerDaten[i][pFraktion] == 2)
    {
    SendClientMessage(i, HELLBLAU, string);
    }
    else if(SpielerDaten[i][pFraktion] == 3)
    {
    SendClientMessage(i, HELLBLAU, string2);
    }
    }
    }
    return 1;
    }


    Hab es jetzt so geschrieben.
    Wenn man aber in der jeweiligen Fraktion ist, kann nur die ID: 0 schreiben. Wenn man bspw. ID 1 ist, steht dort, dass man ein Funkgerät braucht.

    Hi,
    komme gerade komplett nicht weiter.
    Bin gerade bei einem Kick-Befehl, der auch soweit funktioniert, allerdings bekommt der gekickte User die Kick Nachricht nicht.. Wieso?



    forward KickTimer(playerid);
    ocmd:kick(playerid,params[])
    {
    if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid, GRAU, "Du bist nicht eingeloggt!");
    if(isPlayerAnAdmin(playerid,2))
    {
    new pID, string[128], reason;
    if(sscanf(params,"us",pID, reason))return SendClientMessage(playerid,GRAU, "Befehl: [Name/Spieler-ID] [Grund]");
    {
    format(string, sizeof(string),"AdmCMD: %s hat %s gekickt. Grund: %s", SpielerDaten[playerid][pName], SpielerDaten[pID][pName], reason);
    SetTimerEx("KickTimer", 250, false, "i", pID);
    {
    SendClientMessage(pID, ADMCMD, string);
    SendClientMessageToAll(ADMCMD, string);
    Kick(pID);
    }
    }
    }
    return 1;
    }


    Hab noch ein Problem:
    Ich habe ein De/Aktivierungshotkey für den Keybinder erstellt.
    Der funktioniert aber nur teilweise.
    Die Hotkeys gehen aus wenn ich den Binder deaktiviere, aber ich kann Befehle aus dem Keybinder immer noch nutzen, warum? :/


    Befehl:

    !P::
    Pause::
    Suspend, Toggle
    StatusCheck := A_IsSuspended ? "{ff0000}deaktiviert{ffffff}!" : "{09ff00}aktiviert{ffffff}!"
    AddChatMessage(prefix "Der Keybinder wurde " StatusCheck)
    return

    Es reicht schon wenn du ein gutes Netzteil hast um es evtl. bei dem neuen weiterhin zu benutzen.
    Vllt. ist aber auch dein Mainboard mit einer viel besseren CPU kompatible als die jetzt enthalten ist.
    Oder vllt. kannst du dein RAM auch mitnehmen den du derzeit verbaut hast.
    Oder Graka.... etc.


    Deswegen sind so angaben was du derzeit hast wichtig und bringt dir evtl. sogar weniger ausgaben.

    Gab es nicht ein Programm, womit ich all meine Komponenten sehen kann?
    Würde die dann alle hier auflisten. :)

    @Eternity Reichen 400-500€ für die Spiele, die ich oben genannt habe?
    Habe letztens schon mal mit einem Kumpel, der sich gut mit PC's auskennt, darüber redet und er meinte auch, dass der PC für die Tonne ist. :D
    Würde ihn evtl. selbst zusammen bauen oder von einem guten Kumpel, der sich damit auskennt. :)

    Kann dir später gerne die ganzen Komponenten durchgeben, aber glaub mir, wenn ich sage, dass es ein Toaster ist, ist es einer. Da kann man nicht viel retten oder upgraden.


    Budget - Naya, so wenig wie möglich um die Spiele lagfrei und mit guter Grafik spielen zu können.

    Guten Tag,


    da ich mit meinem Toaster maximal SA:MP, CS:GO und Minecraft spielen kann, würde ich mir gerne einen neuen zulegen.
    Kann mir jemand einen PC empfehlen, mit welchem ich GTA V auf RP Servern und PubG spielen kann?
    Habe aktuell nicht soviel Budget übrig, da ich mich noch um ein neues Auto kümmern muss.
    Muss auch nicht auf High-Settings laufen. Muss nur anschaulich sein. :)


    Danke schon mal im voraus.


    Grüße
    Max