GTAMulti - GTA Türkiye

San Andreas Multiplayer => Yardım Talepleri => PAWN Kodlama => Kilitli Konular => Konuyu başlatan: furkaen - 14 Mayıs 2020, 09:35:51

Başlık: MySQL ile alakalı yardım
Gönderen: furkaen - 14 Mayıs 2020, 09:35:51
modumda para ve skor kaydetmeme sorunu var kontrol ettim fakat sorunu anlıyamadım yardım etmek isteyen kişi olursa yoruma discord adını atsın ekliyim halledelim
Başlık: Ynt: MySQL ile alakalı yardım
Gönderen: jyonsae - 14 Mayıs 2020, 12:30:44
hacı allah rızası için istenmeden kodları atın. kodları at bakalım(register & login callbacklerini)
Başlık: Ynt: MySQL ile alakalı yardım
Gönderen: furkaen - 15 Mayıs 2020, 00:57:41
Alıntı yapılan: Fyunkan - 14 Mayıs 2020, 12:30:44
hacı allah rızası için istenmeden kodları atın. kodları at bakalım(register & login callbacklerini)

Hepsi bu

#include <a_samp>
#include <a_mysql>
#include <foreach>
#include <easydialog>

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DB "sa-mp"

new MySQL: mysqlConnect, corruptCheck[MAX_PLAYERS];

enum playerData
{
    ID,
    Name[25],

    Password[65],
    Salt[11],

    passwordFails,

    Kills,
    Deaths,

    Score,
    Cash,

    Cache: playerCache,
    bool: loggedIn
}
new playerInfo[MAX_PLAYERS][playerData];

public OnGameModeInit()
{
 SetGameModeText("Gungrounds v0.1 (r)");

 new MySQLOpt: optionID = mysql_init_options();
 mysql_set_option(optionID, AUTO_RECONNECT, true);

 mysqlConnect = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB, optionID);

 if(mysqlConnect == MYSQL_INVALID_HANDLE || mysql_errno(mysqlConnect) != 0)
 {
 print("MySQL baglantisi basariyla kuruldu.");

 SendRconCommand("exit");
 return 1;
 }

 print("MySQL baglantisi basarisiz oldu.");


 mysql_tquery(mysqlConnect, "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`))");

 return 1;
}

public OnGameModeExit()
{
 foreach(new i: Player)
    {
 if(IsPlayerConnected(i))
 {
 OnPlayerDisconnect(i, 1);
 }
 }

 mysql_close(mysqlConnect);
 return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
 SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
 SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
 SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
 return 1;
}

public OnPlayerConnect(playerid)
{
 new dbQuery[115];

 playerInfo[playerid][Kills] = 0;
 playerInfo[playerid][Deaths] = 0;
 playerInfo[playerid][passwordFails] = 0;

 GetPlayerName(playerid, playerInfo[playerid][Name], MAX_PLAYER_NAME);
 corruptCheck[playerid]++;

 mysql_format(mysqlConnect, dbQuery, sizeof(dbQuery), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", playerInfo[playerid][Name]);
 mysql_tquery(mysqlConnect, dbQuery, "OnPlayerDataCheck", "ii", playerid, corruptCheck[playerid]);

 return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
 corruptCheck[playerid]++;

 new dbQuery[256];
 mysql_format(mysqlConnect, dbQuery, sizeof(dbQuery), "UPDATE `PLAYERS` SET `SCORE` = %d, `CASH` = %d, `KILLS` = %d, `DEATHS` = %d WHERE `ID` = %d LIMIT 1",
 playerInfo[playerid][Score], playerInfo[playerid][Cash], playerInfo[playerid][Kills], playerInfo[playerid][Deaths], playerInfo[playerid][ID]);

 mysql_tquery(mysqlConnect, dbQuery);

 if(cache_is_valid(playerInfo[playerid][playerCache]))
 {
 cache_delete(playerInfo[playerid][playerCache]);
 playerInfo[playerid][playerCache] = MYSQL_INVALID_CACHE;
 }

 playerInfo[playerid][loggedIn] = false;
 print("OnPlayerDisconnect has been called.");

 return 1;
}

public OnPlayerSpawn(playerid)
{
 return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
 if(killerid != INVALID_PLAYER_ID)
 {
     playerInfo[killerid][Kills]++;
     playerInfo[playerid][Deaths]++;
 }
 return 1;
}

public OnVehicleSpawn(vehicleid)
{
 return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
 return 1;
}

public OnPlayerText(playerid, text[])
{
 return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
 return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
 return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
 return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
 return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
 return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
 return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
 return 1;
}

public OnRconCommand(cmd[])
{
 return 1;
}

public OnPlayerRequestSpawn(playerid)
{
 if(playerInfo[playerid][loggedIn] == false) return 0;
 return 1;
}

public OnObjectMoved(objectid)
{
 return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
 return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
 return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
 return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
 return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
 return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
 return 1;
}

public OnPlayerExitedMenu(playerid)
{
 return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
 return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
 return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
 return 1;
}

public OnPlayerUpdate(playerid)
{
 return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
 return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
 return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
 return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
 return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
 return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
 return 1;
}

forward OnPlayerDataCheck(playerid, corrupt_Check);
public OnPlayerDataCheck(playerid, corrupt_Check)
{
 if (corrupt_Check != corruptCheck[playerid]) return Kick(playerid);

 new String[150];
 if(cache_num_rows() > 0)
 {
 cache_get_value(0, "PASSWORD", playerInfo[playerid][Password], 65);
 cache_get_value(0, "SALT", playerInfo[playerid][Salt], 11);

 playerInfo[playerid][playerCache] = cache_save();

 format(String, sizeof(String), "{FFFFFF}Welcome back, %s.\n\n{0099FF}This account is already registered.\n\
 {0099FF}Please, input your password below to proceed to the game.\n\n", playerInfo[playerid][Name]);
 Dialog_Show(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Login System", String, "Login", "Leave");
 }
 else
 {
 format(String, sizeof(String), "{FFFFFF}Welcome %s.\n\n{0099FF}This account is not registered.\n\
 {0099FF}Please, input your password below to proceed to the game.\n\n", playerInfo[playerid][Name]);
 Dialog_Show(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Registration System", String, "Register", "Leave");
 }
 return 1;
}

forward OnPlayerRegister(playerid);
public OnPlayerRegister(playerid)
{
 SendClientMessage(playerid, -1, "You are now registered and has been logged in.");
    playerInfo[playerid][loggedIn] = true;
    return 1;
}

Dialog:dialogLogin(playerid, response, listitem, inputtext[])
{
    if(!response) return Kick(playerid);

    new Salted_Key[65];
    SHA256_PassHash(inputtext, playerInfo[playerid][Salt], Salted_Key, 65);

    if(strcmp(Salted_Key, playerInfo[playerid][Password]) == 0)
    {
        cache_set_active(playerInfo[playerid][playerCache]);

        cache_get_value_int(0, "ID", playerInfo[playerid][ID]);

        cache_get_value_int(0, "KILLS", playerInfo[playerid][Kills]);
        cache_get_value_int(0, "DEATHS", playerInfo[playerid][Deaths]);

        cache_get_value_int(0, "SCORE", playerInfo[playerid][Score]);
        cache_get_value_int(0, "CASH", playerInfo[playerid][Cash]);

        SetPlayerScore(playerid, playerInfo[playerid][Score]);

        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, playerInfo[playerid][Cash]);

        cache_delete(playerInfo[playerid][playerCache]);
        playerInfo[playerid][playerCache] = MYSQL_INVALID_CACHE;

        playerInfo[playerid][loggedIn] = true;
        SendClientMessage(playerid, 0x00FF00FF, "Logged in to the account.");
    }
    else
    {
        new String[150];

        playerInfo[playerid][passwordFails] += 1;
        printf("%s has been failed to login. (%d)", playerInfo[playerid][Name], playerInfo[playerid][passwordFails]);

        if (playerInfo[playerid][passwordFails] >= 3)
        {
            format(String, sizeof(String), "%s has been kicked Reason: {FF0000}(%d/3) Login fails.", playerInfo[playerid][Name], playerInfo[playerid][passwordFails]);
            SendClientMessageToAll(0x969696FF, String);
            Kick(playerid);
        }
        else
        {
            format(String, sizeof(String), "Wrong password, you have %d out of 3 tries.", playerInfo[playerid][passwordFails]);
            SendClientMessage(playerid, 0xFF0000FF, String);

            format(String, sizeof(String), "{FFFFFF}Welcome back, %s.\n\n{0099FF}This account is already registered.\n\
            {0099FF}Please, input your password below to proceed to the game.\n\n", playerInfo[playerid][Name]);
            Dialog_Show(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Login System", String, "Login", "Leave");
        }
    }
 return 1;
}

Dialog:dialogRegister(playerid, response, listitem, inputtext[])
{
    if(!response) return Kick(playerid);

    if(strlen(inputtext) <= 5 || strlen(inputtext) > 60)
    {
        SendClientMessage(playerid, 0x969696FF, "Invalid password length, should be 5 - 60.");

        new String[150];

        format(String, sizeof(String), "{FFFFFF}Welcome %s.\n\n{0099FF}This account is not registered.\n\
        {0099FF}Please, input your password below to proceed.\n\n", playerInfo[playerid][Name]);
        Dialog_Show(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Registration System", String, "Register", "Leave");
    }
    else
    {

        for (new i = 0; i < 10; i++)
        {
            playerInfo[playerid][Salt][i] = random(79) + 47;
        }

        playerInfo[playerid][Salt][10] = 0;
        SHA256_PassHash(inputtext, playerInfo[playerid][Salt], playerInfo[playerid][Password], 65);

        new DB_Query[225];

        mysql_format(mysqlConnect, DB_Query, sizeof(DB_Query), "INSERT INTO `PLAYERS` (`USERNAME`, `PASSWORD`, `SALT`, `SCORE`, `KILLS`, `CASH`, `DEATHS`)\
        VALUES ('%e', '%s', '%e', '20', '0', '0', '0')", playerInfo[playerid][Name], playerInfo[playerid][Password], playerInfo[playerid][Salt]);
    mysql_tquery(mysqlConnect, DB_Query, "OnPlayerRegister", "d", playerid);
    }
 return 1;
}
Başlık: Ynt: MySQL ile alakalı yardım
Gönderen: furkaen - 15 Mayıs 2020, 16:27:30
Kodları attım yardımcı olur musunuZ?
@Fyunkan
Başlık: Ynt: MySQL ile alakalı yardım
Gönderen: Enkei - 25 Mayıs 2020, 01:18:47
Alıntı yapılan:  Bölüm kuralları
Açılan taleplerin son iletisi 10 günü geçmesi durumunda; konu kilitlenip, kilitli konular bölümüne taşınacaktır. Sorunu çözülen konularınızı kilitleyip, moderatörlere bildiriniz.

K/A.