blankkor icon

MySQL GM Skeleton for [MP]Ditch

blankkor | PRO | 04/06/12 12:13:26 AM UTC | 0 ⭐ | 364 👁️ | Never ⏰ | []
Pawn |

2.95 KB

|

None

|

0 👍

/

0 👎

#include <a_samp>
#include <a_mysql>
#include <sscanf2>
// Modify below as needed.
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_DB "dbname"
#define MYSQL_PASS ""
enum P_ENUM
    {
    pUID,
    pPWHash[129], // Suited for Whirlpool, modify as needed.
    pMoney,
    pALevel,
    pScore
    }
new pData[MAX_PLAYERS][P_ENUM];
forward LoadPlayerData(playerid);
forward LoadPlayerData_THREAD(query[], index, extraid, connectionHandle);
forward SavePlayerData(playerid);
forward SavePlayerData_THREAD(query[], index, extraid, connectionHandle);
forward ClearPlayerData(playerid);
main() {}
public OnGameModeInit()
    {
    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_DB,MYSQL_PASS); // Connecting to the database.
    }
public OnPlayerConnect(playerid)
    {
    LoadPlayerData(playerid); // Load data when the player connects.
    }
public OnPlayerDisconnect(playerid,reason)
    {
    SavePlayerData(playerid); // Save data on disconnect apart from the password hash & constant UID
    ClearPlayerData(playerid); // Clear the data from the server
    }
public ClearPlayerData(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    strdel(pData[playerid][pPWHash],0,129);
    for(new i = 0;i<sizeof(pData[]);i++)
        {
        pData[playerid][P_ENUM:i] = 0;
        }
    printf("Cleared data for %s",name);
    }
public LoadPlayerData(playerid)
    {
    new name[MAX_PLAYER_NAME],escaped[32];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    if(!mysql_ping()) { return printf("Error loading user data for %s",name); }
    new query[128];
    mysql_real_escape_string(name,escaped);
    format(query,sizeof(query),"SELECT * FROM users WHERE username = '%s'",escaped);
    mysql_query_callback(playerid,query,"LoadPlayerData_THREAD");
    return 1;
    }
public LoadPlayerData_THREAD(query[], index, extraid, connectionHandle)
    {
    new name[MAX_PLAYER_NAME],result[512];
    GetPlayerName(index,name,MAX_PLAYER_NAME);
    mysql_store_result();
    if(!mysql_num_rows()) { mysql_free_result();return printf("User %s does not exist",name); } 
    mysql_fetch_row_format(result);
    sscanf(result,"e<p<|>d{s[20]}s[129]ddd>",pData[index]);
    printf("Data loaded for %s",name);
    mysql_free_result();
    return 1;
    }
public SavePlayerData(playerid)
    {
    new query[128],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    if(!mysql_ping()) { return printf("Error saving user data for %s",name); }
    format(query,sizeof(query),"UPDATE users SET money=%d,level=%d,score=%d WHERE username='%s'",
    pData[playerid][pMoney],pData[playerid][pALevel],pData[playerid][pScore],name);
    mysql_query_callback(playerid,query,"SavePlayerData_THREAD");
    return 1;
    }
public SavePlayerData_THREAD(query[], index, extraid, connectionHandle)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(index,name,MAX_PLAYER_NAME);
    mysql_store_result();
    if(!mysql_errno())
        {
        printf("Data saved for %s",name);
        }
    else
        {
        printf("Could not save data for %s",name);
        }
    mysql_free_result();
    return 1;
    }

Comments