so I'm working on a server base for sa-mp using pwn and have finished the script guide I followed they are all really old so they come with issues, I tried to fix them but have no clue what I'm doing lol.these are the errors I am getting
This is the code that's giving the error
#include <a_samp>
#include <zcmd>
#include <a_mysql>
#include <sscanf2>
#include <bcrypt>
#undef MAX_PLAYERS
#define MAX_PLAYERS 50
#define BCRYPT_COST 12
#define MYSQL_HOST " "
#define MYSQL_USER " "
#define MYSQL_PASSWORD " "
#define MYSQL_DATABASE " "
#define SECONDS_TO_LOGIN 60
//Default Spawn
#define DEFAULT_POS_X 1958.3783
#define DEFAULT_POS_Y 1343.1572
#define DEFAULT_POS_Z 15.3746
#define DEFAULT_POS_A 240.1425
forward OnPlayerDataLoaded(playerid);
forward OnLoginTimeout(playerid);
forward _KickPlayerDelayed(playerid);
forward OnPasswordHashed(playerid);
forward OnPasswordChecked(playerid);
forward OnPlayerRegister(playerid);
new MySQL: g_SQL;
enum E_PLAYERINFO {
ID,
Name[MAX_PLAYER_NAME],
Password[65],
Kills,
Deaths,
Float: X_Pos,
Float: Y_Pos,
Float: Z_Pos,
Float: A_Pos,
Interior,
Virtualworld,
Cache: Cache_ID,
boll: IsLoggedIn,
LoginAttemtps,
LoginTimer
}
new PlayerInfo[MAX_PLAYERS][E_PLAYERINFO];
enum {
DIALOG_UNUSED,
DIALOG_LOGIN,
DIALOG_REGISTER,
}
main(){ } //Keep this or the gamemode will break retard :]//
public OnGameModeInit()// server starts
{
SetGameModeText("Roleplay");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
new MySQLOpt: option_id = mysql_init_options();
mysql_set_option(option_id, AUTO_RECONNECT, true);
g_SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) !=-) {
print("[SERVER][MySQL] Connection could not be established. The server is shutting down.");
SendRconCommand("exit");
return 1;
}
print("[SERVER][MySQL] Connection could not be established.");
SetupPlayerTable();
return 1;
}
//CallBacks
public OnGameModeExit()
{
mysql_close(g_SQL);
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)
{
static const empty_player[E_PLAYERINFO];
PlayerInfo[playerid] = empty_player;
GetPlayerName(playerid, PlayerInfo[playerid][Name], MAX_PLAYERS_NAME);
new query[103];
mysql_format(g_SQL, query, sizeof(query), "SELECT * 'players' WHERE 'username' = '%e' LIMIT 1", PlayerInfo[playerid][Name]);
mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "d", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
UpdatePlayerData(playerid, reason);
if(cache_is_valid(PlayerInfo[playerid][Cache_ID])) {
cache_delete(PlayerInfo[playerid][Cache_ID]);
}
if(PlayerInfo[playerid][LoginTimer]) {
KillTimer(PlayerInfo[playerid][LoginTimer]);
PlayerInfo[playerid][LoginTimer] = 0;
}
PlayerInfo[playerid][IsLoggedIn] = false;
return 1;
}
public OnPlayerDataLoaded(playerid) {
new string[240];
if(cache_num_rows() > 0) {
cache_get_value(0, "password", PlayerInfo[playerid][password], 65);
PlayerInfo[playerid][Cache_ID] = cache_save();
format(string, sizeof(string), "This account (%s) already exists. Log in!", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Interrupt");
PlayerInfo[playerid][LoginTimer] = SetTimerEx("OnLoginTimeout", SECONDS_TO_LOGIN * 1000, false, "d", playerid);
} else {
format(string, sizeof(string), "This account (%s) does not exist. Please register.", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", string, "Login", "Interrupt");
}
return 1;
}
AssignPlayerData(playerid) {
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_float(0, "x", PlayerInfo[playerid][X_Pos]);
cache_get_value_float(0, "y", PlayerInfo[playerid][Y_Pos]);
cache_get_value_float(0, "z", PlayerInfo[playerid][Z_Pos]);
cache_get_value_float(0, "a", PlayerInfo[playerid][A_Pos]);
cache_get_value_int (0, "interior", PlayerInfo[playerid][Interior]);
cache_get_value_int (0, "virtualworld", PlayerInfo[playerid][Virtualworld]);
}
UpdatePlayerData(playerid, reason) {
if(!PlayerInfo[playerid][IsLoggedIn]) return 1;
if(reason == 1) {
GetPlayerPos(playerid, PlayerInfo[playerid][X_Pos], PlayerInfo[playerid][Y_Pos], PlayerInfo[playerid][Z_Pos]);
GetPlayerFacingAngle(playerid, PlayerInfo[playerid][A_Pos]);
}
new query[145];
mysql_format(g_SQL, query, sizeof(query), "UPDATE 'players' SET 'x' = '%f', 'y' = '%f', 'z' = '%f', 'a' = '%f', 'interior' = %d, 'virtualworld' = %d WHERE 'id' = %d LIMIT 1",
PlayerInfo[playerid][X_Pos], PlayerInfo[playerid][Y_Pos], PlayerInfo[playerid][Z_Pos], PlayerInfo[playerid][A_Pos],
PlayerInfo[playerid][Interior], PlayerInfo[playerid][Virtualworld], PlayerInfo[playerid][ID]);
mysql_tquery(g_SQL, query);
return 1;
}
public OnPlayerRegister(playerid) {
PlayerInfo[playerid][ID] = cache_insert_id();
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Registration", "Your account has been successfully registered!", "Okay", "");
PlayerInfo[playerid][IsLoggedIn] = true;
PlayerInfo[playerid][X_Pos] = DEFAULT_POS_X;
PlayerInfo[playerid][Y_Pos] = DEFAULT_POS_Y;
PlayerInfo[playerid][Z_Pos] = DEFAULT_POS_Z;
PlayerInfo[playerid][A_Pos] = DEFAULT_POS_A;
SetSpawnInfo(playerid, NO_TEAM, 0, PlayerInfo[playerid][X_Pos], PlayerInfo[playerid][Y_Pos], PlayerInfo[playerid][Z_Pos], PlayerInfo[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
return 1;
}
SetupPlayerTable() {
mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS 'players' (\
'id' int(11) NOT NULL AUTO_INCREMENT, \
'username' varchar(24) NOT NULL, \
'password' char(64) NOT NULL, \
'kills' mediumint(8) NOT NULL DEFAULT '0',\
'deaths' mediumint(8) NOT NULL DEFAULT '0',\
'x' float NOT NULL DEFAULT '0', \
'y' float NOT NULL DEFAULT '0', \
'z' float NOT NULL DEFAULT '0', \
'a' float NOT NULL DEFAULT '0', \
'interior' tinyint(3) NOT NULL DEFAULT '0', \
'virtualworld' tinyint(3) NOT NULL DEFAULT '0', \
PRIMARY KEY('id'), UNIQUE KEY 'unsername'('username'))");
return 1;
}
public OnLoginTimeout(playerid){
PlayerInfo[playerid][LoginTimer] = 0;
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", "You were kicked because you took too long to log in!", "Okay", "");
DelayedKick(playerid);
return 1;
}
DelayedKick(playerid, time = 500) {
SetTimerEx("_KickPlayerDelayed", time, false, "d", playerid);
return 1;
}
public _KickPlayerDelayed(playerid) {
return Kick(playerid);
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
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)
{
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[])
{
switch(diaglogid) {
case DIALOG_UNUSED: return 1;
case DIALOG_LOGIN: {
if(!response) return Kick(playerid);
bcrypt_check(inputtext, PlayerInfo[playerid][password], "OnPasswordChecked", "d", playerid);
return 1;
}
case DIALOG_REGISTER: {
if(!response) return Kick(playerid);
if(strlen(inputtext) <= 5) {
format(string, sizeof(string), "This account (%s) does not exist. Please register.\nYour password is too short.", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", string, "Login", "Interrupt");
return 1;
}
bcrypt_hash(inputtext, BCRYPT_COST, 'OnPasswordHashed', "d", playerid);
return 1;
}
}
return 1;
}
public OnPasswordHashed(playerid) {
bcrypt_get_hash(PlayerInfo[playerid][Password]);
new query[128];
mysql_format(g_SQL, query, sizeof(query), "INSERT INTO 'players' ('username', 'password') VALUES ('%e', '%e')", PlayerInfo[playerid][Name], PlayerInfo[playerid][Password]);
mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
return 1;
}
public OnPasswordChecked(playerid) {
new query[128];
if (bcrypt_is_equal()) {
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", "You have been successfully logged in.", "Okay", "");
cache_set_active(PlayerInfo[playerid][Cache_ID]);
AssignPlayerData(playerid);
KillTimer(PlayerInfo[playerid][LoginTimer]);
PlayerInfo[playerid][LoginTimer] = 0;
PlayerInfo[playerid][IsLoggedIn] = true;
SetSpawnInfo(playerid, NO_TEAM, 0, PlayerInfo[playerid][X_Pos], PlayerInfo[playerid][Y_Pos], PlayerInfo[playerid][Z_Pos], PlayerInfo[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
} else {
PlayerInfo[playerid][LoginAttempts]++;
if(PlayerInfo[playerid][LoginAttempts] >= 3) {
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", "You have entered your password incorrectly too many times!", "Okay", "");
DelayedKick(playerid):
} else {
format(string, sizeof(string), "This account (%s) already exists. Log in!\nPassword is Correct", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Interrupt");
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
//Functions
I haven't touched the errors that I have no clue about I fixed so easy things like not defining specific things ect, the only thing I have scripted is a login/register system I followed a tutorial but they are all outdated it just supposed to show a text box to register and a text box to input the details u made on registration to login
Looks like you are using old libraries/plugins
First update samp-stdlib and pawn-stdlib (https://github.com/pawn-lang/samp-stdlib - https://github.com/pawn-lang/pawn-stdlib)
Upgrade MySQL plugin to MySQL R41-4 (https://github.com/pBlueG/SA-MP-MySQL/releases)
If the issue still occurs get help from open.mp Discord server. A community for sa-mp scripters.