
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <foreach>
#include <a_mysql>
//============================================================================//
// Define s //
//============================================================================//
#define SERVER_NAME ""
#define SERVER_TIME ""
#define SERVER_GRAVITY ""
#define SERVER_MAP ""
#define SERVER_WEBSITE ""
#define SQL_HOST ""
#define SQL_USER ""
#define SQL_PASS ""
#define SQL_DB ""
#define Blue "{003DF5}"
#define Red "{FF0000}"
#define Green "{66FF00}"
#define White "{FFFFFF}"
#define COLOR_RED 0xFF0000FF
#define COLOR_LIME 0xFF000000
#define DIALOG_REGISTER 100
#define DIALOG_LOGIN 101
#define DIALOG_POS 102
//============================================================================//
// New's //
//============================================================================//
enum pInfo
{
pScore,
pMoney,
pLevel,
pVIP,
pKMA,
pRank,
pKills,
pDeaths,
pMuted,
pJailed,
pFrozen,
pMutedTimes,
pJailedTimes,
pFrozenTimes,
pBanned,
pBannedBy[24],
pLogins,
pCookies,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
Float:pPosA
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new MoneyGiven[MAX_PLAYERS];
new IsRegistered[MAX_PLAYERS];
new Logged[MAX_PLAYERS];
new JustLogged[MAX_PLAYERS];
new Text:Textdraw1;
//============================================================================//
// Forwards //
//============================================================================//
forward HideMessage1(playerid);
//============================================================================//
// Main //
//============================================================================//
main(){}
//============================================================================//
// Publics //
//============================================================================//
public OnGameModeInit()
{
new stuff[128];
format(stuff, 128, "hostname %s", SERVER_NAME);
SendRconCommand(stuff);
format(stuff, 128, "mapname %s", SERVER_MAP);
SendRconCommand(stuff);
format(stuff, 128, "worldtime %s", SERVER_WEBSITE);
SendRconCommand(stuff);
SetGameModeText("Drift/Race/Freeroam");
AddPlayerClass(1, 1694.3789,1447.9192,10.7634,269.8285, 0, 0, 0, 0, 0, 0);
//================================================================//
// MySQL part //
//================================================================//
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
mysql_query("CREATE TABLE IF NOT EXISTS playerdata(user VARCHAR(24), password VARCHAR(40), score INT(20), money INT(20), level INT(20), vip INT(20), kma INT(20), rank INT(20), kills INT(20), deaths INT(20), muted INT(20), jailed INT(20), frozen INT(20), mutedtimes INT(20), jailedtimes INT(20), frozentimes INT(20), banned INT(20), bannedby VARCHAR(24), logins INT(20), posx INT(20), posy INT(20), posz INT(20), posa INT(20), IP VARCHAR(15) )");
mysql_debug(1);
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
//================================================================//
// MySQL part //
//================================================================//
if(!Logged[playerid])
{
if(!IsRegistered[playerid])
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""Blue"Please register",""White"Welcome to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to register!\n\n"White"Please insert a password below:", "Register", "Cancel");
return 0;
}
if(IsRegistered[playerid] == 1)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""Blue"Please log-in", ""White"Welcome back to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to log-in!\n\n"White"Please insert "Red"your"White" password below:", "Login", "Cancel");
return 0;
}
}
return 1;
}
public OnPlayerSpawn(playerid)
{
//================================================================//
// MySQL part //
//================================================================//
if(MoneyGiven[playerid] != -1)
{
GivePlayerMoney(playerid, MoneyGiven[playerid]);
MoneyGiven[playerid] = -1;
}
if(JustLogged[playerid] == 1)
{
ShowPlayerDialog(playerid, DIALOG_POS, DIALOG_STYLE_MSGBOX, ""Blue"Sucessfully logged-in!", ""White"You have sucessfully logged-in to your account!\n\n"White"Would you like to load you previous possition?", "Yes", "No");
JustLogged[playerid] = 0;
}
return 1;
}
public OnPlayerConnect(playerid)
{
RemoveUnderScore(playerid);
TextDrawHideForPlayer(playerid, Textdraw1);
//================================================================//
// MySQL part //
//================================================================//
MoneyGiven[playerid] = -1;
JustLogged[playerid] = 0;
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT IP FROM `playerdata` WHERE user = '%s' LIMIT 1", pname);
mysql_query(query);
mysql_store_result();
new rows = mysql_num_rows();
if(!rows)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""Blue"Please register",""White"Welcome to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to register!\n\n"White"Please insert a password below:", "Register", "Cancel");
}
if(rows == 1)
{
new IP[2][15];
mysql_fetch_field_row(IP[0],"IP");
GetPlayerIp(playerid, IP[1], 15);
if(strlen(IP[0]) != 0 && !strcmp(IP[0], IP[1], true))
{
MySQL_Login(playerid);
}
else if(!strlen(IP[0]) || strcmp(IP[0], IP[1], true))
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""Blue"Please log-in", ""White"Welcome back to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to log-in!\n\n"White"Please insert "Red"your"White" password below:", "Login", "Cancel");
IsRegistered[playerid] = 1;
}
}
mysql_free_result();
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//================================================================//
// MySQL part //
//================================================================//
if(Logged[playerid] == 1)
{
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
PlayerInfo[playerid][pPosX] = x;
PlayerInfo[playerid][pPosY] = y;
PlayerInfo[playerid][pPosZ] = z;
PlayerInfo[playerid][pPosA] = a;
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE playerdata SET score=%d, money=%d, level=%d, vip=%d, kma=%d, rank=%d, kills=%d, deaths=%d, muted=%d, jailed=%d, frozen=%d, mutedtimes=%d, jailedtimes=%d, frozentimes=%d, banned=%d, bannedby='%s', logins=%d, posx=%f, posy=%f, posz=%f, posa=%f WHERE user='%s'",
score,
money,
PlayerInfo[playerid][pLevel],
PlayerInfo[playerid][pVIP],
PlayerInfo[playerid][pKMA],
PlayerInfo[playerid][pRank],
PlayerInfo[playerid][pKills],
PlayerInfo[playerid][pDeaths],
PlayerInfo[playerid][pMuted],
PlayerInfo[playerid][pJailed],
PlayerInfo[playerid][pFrozen],
PlayerInfo[playerid][pMutedTimes],
PlayerInfo[playerid][pJailedTimes],
PlayerInfo[playerid][pFrozenTimes],
PlayerInfo[playerid][pBanned],
PlayerInfo[playerid][pBannedBy],
PlayerInfo[playerid][pLogins],
PlayerInfo[playerid][pPosX],
PlayerInfo[playerid][pPosY],
PlayerInfo[playerid][pPosZ],
PlayerInfo[playerid][pPosA],
pname);
mysql_query(query);
}
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 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 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[])
{
if(dialogid == DIALOG_POS)
{
if(response)
{
SetPlayerPos(playerid, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ]);
SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPosA]);
SendMessage(playerid, "~g~Info: ~w~Sucessfully loaded your last possition!");
}
else if(!response)
{
return 1;
}
}
//================================================================//
// MySQL part //
//================================================================//
if(dialogid == DIALOG_REGISTER)
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) > 100)
{
SendMessage(playerid, "~r~Error: ~w~You must insert a password between 1-100 characters!");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""Blue"Please register",""White"Welcome to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to register!\n\n"White"Please insert a password below:", "Register", "Cancel");
}
else if(strlen(inputtext) > 0 && strlen(inputtext) < 100)
{
new escpass[100];
mysql_real_escape_string(inputtext, escpass);
MySQL_Register(playerid, escpass);
}
}
if(!response)
{
SendMessage(playerid, "~r~Error: ~w~You must register before logging in!");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""Blue"Please register",""White"Welcome to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to register!\n\n"White"Please insert a password below:", "Register", "Cancel");
}
}
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
SendMessage(playerid, "~r~Error: ~w~You must login before you spawn!");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""Blue"Please log-in", ""White"Welcome back to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to log-in!\n\n"White"Please insert "Red"your"White" password below:", "Login", "Cancel");
}
if(response)
{
new query[200], pname[24], escapepass[100];
GetPlayerName(playerid, pname, 24);
mysql_real_escape_string(inputtext, escapepass);
format(query, sizeof(query), "SELECT `user` FROM playerdata WHERE user = '%s' AND password = SHA1('%s')", pname, escapepass);
mysql_query(query);
mysql_store_result();
new numrows = mysql_num_rows();
if(numrows == 1) MySQL_Login(playerid);
if(!numrows)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""Blue"Please log-in", ""White"Welcome back to "Red""SERVER_NAME""White"!\n"White"In order to start playing, you have to log-in!\n\n"White"Please insert "Red"your"White" password below:", "Login", "Cancel");
SendMessage(playerid, "~r~Error: ~w~Incorrect password!");
}
mysql_free_result();
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
//============================================================================//
// Player Commands //
//============================================================================//
CMD:savepossition(playerid, params[])
{
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
PlayerInfo[playerid][pPosX] = x;
PlayerInfo[playerid][pPosY] = y;
PlayerInfo[playerid][pPosZ] = z;
PlayerInfo[playerid][pPosA] = a;
SendMessage(playerid, "~g~Info: ~w~Possition saved!");
return 1;
}
CMD:sp(playerid, params[])
{
return cmd_savepossition(playerid, params);
}
CMD:loadpossition(playerid, params[])
{
SetPlayerPos(playerid, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ]);
SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPosA]);
SendMessage(playerid, "~g~Info: ~w~Possition loaded!");
return 1;
}
CMD:lp(playerid, params[])
{
return cmd_loadpossition(playerid, params);
}
//============================================================================//
// Admin Commands //
//============================================================================//
CMD:setadmin(playerid, params[])
{
new alevel, str[128], pname[24], Nam[24], ID;
if(!(PlayerInfo[playerid][pLevel] > 1)) return 0;
if(sscanf(params,"ui",ID,alevel)) return SendClientMessage(playerid,COLOR_RED,"USAGE:{FFFFFF} /setadmin [ID] [Level 1-2]");
if(alevel > 3) return SendClientMessage(playerid,COLOR_RED," ERROR:{FFFFFF} Levels avalible 1-2!");
if(!IsPlayerConnected(ID))return SendClientMessage(playerid,COLOR_RED,"ERROR: {FFFFFF}That user is not connected.");
if(PlayerInfo[ID][pLevel] == alevel) return SendClientMessage(playerid,COLOR_RED, "ERROR: {FFFFFF}That person is already this admin level!");
GetPlayerName(playerid,Nam, MAX_PLAYER_NAME);
GetPlayerName(ID,pname,MAX_PLAYER_NAME);
if(alevel == 0)
{
format(str, sizeof(str),"%s has your Admin level to %d on the server.",Nam,alevel);
SendClientMessage(ID,COLOR_RED,str);
format(str, sizeof(str),"You had set {FFFFFF}%s {FF0000}admin level to {FFFFFF}%d!",pname,alevel);
SendClientMessage(playerid,COLOR_RED,str);
PlayerInfo[ID][pLevel] = alevel;
return 1;
}
format(str, sizeof(str),"{FFFFFF}%s {FF0000}has set your admin level to {FFFFFF}%d {FF0000}on the server.",Nam,alevel);
SendClientMessage(ID,COLOR_RED,str);
format(str, sizeof(str),"You have set {FFFFFF}%s {FF0000}admin level {FFFFFF}%d!",pname,alevel);
SendClientMessage(playerid,COLOR_RED,str);
format(str,sizeof(str),"Administrator %s has set %s Admin level to %d",Nam,pname,alevel);
MessageToAdmins(COLOR_LIME,str);
PlayerInfo[ID][pLevel] = alevel;
return 1;
}
//============================================================================//
// Stocks / Publics //
//============================================================================//
public HideMessage1(playerid)
{
TextDrawHideForPlayer(playerid, Textdraw1);
return 1;
}
stock RemoveUnderScore(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
for(new i = 0; i < MAX_PLAYER_NAME; i++)
{
if(name[i] == '_') name[i] = ' ';
}
return name;
}
stock SendMessage(playerid, message[])
{
TextDrawHideForPlayer(playerid, Textdraw1);
TextDrawSetString(Textdraw1, message);
TextDrawShowForPlayer(playerid, Textdraw1);
SetTimer("HideMessage1", 5000, false);
return 1;
}
stock ErrorMessage(playerid, message[])
{
new string[128];
format(string, sizeof string, ""Red"[Error] "White"%s", message);
SendClientMessage(playerid, -1, string);
return 1;
}
stock MySQL_Register(playerid, passwordstring[])
{
new query[350], pname[24], IP[15];
new Bannedby[20];
format(Bannedby, 20, "Not Banned");
GetPlayerName(playerid, pname, 24);
GetPlayerIp(playerid, IP, 15);
format(query, sizeof(query), "INSERT INTO playerdata (user, password, score, money, level, vip, kma, rank, kills, deaths, muted, jailed, frozen, mutedtimes, jailedtimes, frozentimes, banned, bannedby, logins, posx, posy, posz, posa, IP) VALUES('%s', SHA1('%s'), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '%s', 0, 0, 0, 0, 0, '%s')", pname, passwordstring, Bannedby, IP);
mysql_query(query);
SendMessage(playerid, "~g~Info: ~w~You have been registered on this server!");
Logged[playerid] = 1;
return 1;
}
stock MySQL_Login(playerid)
{
new query[300], pname[24], savingstring[20];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT score, money, level, vip, kma, rank, kills, deaths, muted, jailed, frozen, mutedtimes, jailedtimes, frozentimes, banned, bannedby, logins, posx, posy, posz, posa FROM playerdata WHERE user = '%s'", pname);
mysql_query(query);
mysql_store_result();
while(mysql_fetch_row_format(query,"|"))
{
mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring));
mysql_fetch_field_row(savingstring, "money"); MoneyGiven[playerid] = strval(savingstring);
mysql_fetch_field_row(savingstring, "level"); PlayerInfo[playerid][pLevel] = strval(savingstring);
mysql_fetch_field_row(savingstring, "vip"); PlayerInfo[playerid][pVIP] = strval(savingstring);
mysql_fetch_field_row(savingstring, "kma"); PlayerInfo[playerid][pKMA] = strval(savingstring);
mysql_fetch_field_row(savingstring, "rank"); PlayerInfo[playerid][pRank] = strval(savingstring);
mysql_fetch_field_row(savingstring, "kills"); PlayerInfo[playerid][pKills] = strval(savingstring);
mysql_fetch_field_row(savingstring, "deaths"); PlayerInfo[playerid][pDeaths] = strval(savingstring);
mysql_fetch_field_row(savingstring, "muted"); PlayerInfo[playerid][pMuted] = strval(savingstring);
mysql_fetch_field_row(savingstring, "jailed"); PlayerInfo[playerid][pJailed] = strval(savingstring);
mysql_fetch_field_row(savingstring, "frozen"); PlayerInfo[playerid][pFrozen] = strval(savingstring);
mysql_fetch_field_row(savingstring, "mutedtimes"); PlayerInfo[playerid][pMutedTimes] = strval(savingstring);
mysql_fetch_field_row(savingstring, "jailedtimes"); PlayerInfo[playerid][pJailedTimes] = strval(savingstring);
mysql_fetch_field_row(savingstring, "frozentimes"); PlayerInfo[playerid][pFrozenTimes] = strval(savingstring);
mysql_fetch_field_row(savingstring, "banned"); PlayerInfo[playerid][pBanned] = strval(savingstring);
mysql_fetch_field_row(savingstring, "bannedby"); PlayerInfo[playerid][pBannedBy] = strval(savingstring);
mysql_fetch_field_row(savingstring, "logins"); PlayerInfo[playerid][pLogins] = strval(savingstring);
mysql_fetch_field_row(savingstring, "posx"); PlayerInfo[playerid][pPosX] = strval(savingstring);
mysql_fetch_field_row(savingstring, "posy"); PlayerInfo[playerid][pPosY] = strval(savingstring);
mysql_fetch_field_row(savingstring, "posz"); PlayerInfo[playerid][pPosZ] = strval(savingstring);
mysql_fetch_field_row(savingstring, "posa"); PlayerInfo[playerid][pPosA] = strval(savingstring);
}
mysql_free_result();
JustLogged[playerid] = 1;
Logged[playerid] = 1;
PlayerInfo[playerid][pLogins]++;
SendMessage(playerid, "~g~Info: ~w~You have been logged-in!");
return 1;
}
stock GetName(playerid)
{
new pname[24];
GetPlayerName(playerid, pname, 24);
return pname;
}
forward MessageToAdmins(color,const string[]);
public MessageToAdmins(color,const string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) == 1)
if(PlayerInfo[i][pLevel] > 0)
SendClientMessage(i, COLOR_LIME ,string);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new pnamee[24];
new string[39 + MAX_PLAYER_NAME];
GetPlayerName(playerid, pnamee, sizeof(pnamee));
switch(reason)
{
case 0: format(string, sizeof(string), "%s has left the server. (Lost Connection)", pnamee);
case 1: format(string, sizeof(string), "%s has left the server.", pnamee);
}
SendClientMessageToAll(COLOR_GREY, string);
//================================================================//
// MySQL part //
//================================================================//
if(Logged[playerid] == 1)
{
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE playedata SET score=%d, money=%d, admin=%d, vip=%d, skin=%d, banned=%d, bannedby='%s' WHERE user='%s'",score, money, PlayerInfo[playerid][pAdmin] ,PlayerInfo[playerid][pVIP] ,PlayerInfo[playerid][pSkin] ,
PlayerInfo[playerid][pBanned],
PlayerInfo[playerid][pBannedBy],
pname);
mysql_query(query);
}
return 1;
UPDATE `playedata` SET `score`=%d, `money`=%d, `admin`=%d, `vip`=%d, `skin`=%d, `banned`=%d, `bannedby`=%s WHERE `user`=%s LIMIT 1
forward SaveData(playerid);
public SaveData(playerid)
{
if(Logged[playerid] == 1)
{
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[380], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query),
"UPDATE `playedata` SET `score`=%d, `money`=%d, `admin`=%d, `vip`=%d, `skin`=%d, `banned`=%d, `bannedby`=%s WHERE `user`=%s LIMIT 1'",score, money, PlayerInfo[playerid][pAdmin] ,PlayerInfo[playerid][pVIP] ,PlayerInfo[playerid][pSkin] ,
PlayerInfo[playerid][pBanned],
PlayerInfo[playerid][pBannedBy], pname);
mysql_query(query);
}
return 1;
}
//And use in onplayerspawn or somewhere
SetPVarInt(playerid, "SaveDatas", SetTimerEx("SaveData", 5*2000, 1, "d", playerid));
|
you better remove the saving part from the OnPlayerDisconnect and save them in a 4sec timer instead
|
.
forward SaveStats();
OnGameModeInit():
SetTimer("SaveStats",4000,1);
public SaveStats()
{
for(new i;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
SavePlayer(playerid);
}
}
return 1;
}
stock SavePlayer(playerid)
{
if(Logged[playerid] == 1)
{
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE playedata SET score=%d, money=%d, admin=%d, vip=%d, skin=%d, banned=%d, bannedby='%s' WHERE user='%s'",score, money, PlayerInfo[playerid][pAdmin] ,PlayerInfo[playerid][pVIP] ,PlayerInfo[playerid][pSkin] ,
PlayerInfo[playerid][pBanned],
PlayerInfo[playerid][pBannedBy],
pname);
mysql_query(query);
}
return 1;
}
//============================================================================//
// Includes //
//============================================================================//
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <foreach>
#include <a_mysql>
#include <streamer>
//============================================================================//
// Define s //
//============================================================================//
#define SQL_HOST "127.0.0.1"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DB "drift"
#define Blue "{003DF5}"
#define Red "{FF0000}"
#define Green "{66FF00}"
#define White "{FFFFFF}"
#define DIALOG_REGISTER 100
#define DIALOG_LOGIN 101
#define DIALOG_POS 102
#define COLOR_CYAN 0x99FFFFAA
#define COLOR_INDIGO 0x4B00B0AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000FF
#define COLOR_LIME 0x10F441AA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_LIGHTBLUE 0xFF0000FF
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_PINK 0xFF66FFAA
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{FF0000}"
#define COL_GREEN "{00FF00}"
#define GELTONA 0xFFFF00FF
#define BALTA 0xFFFFFFFF
#define MAX_MESSAGES 50
#define MAX_API_LENGTH 38
#define MAX_PLAYER_IP 15
#define MAX_REASON_LENGTH 50
#define MAX_EXTRA_LENGTH 63
#define MAX_TIME_LENGTH 5
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define IsPlayerNotInVehicle(%0) (!IsPlayerInAnyVehicle(%0))
//============================================================================//
// New's //
//============================================================================//
enum MessageInfo
{
textmsg[182],
colormsg
}
new Doggy, Bogdan, Carl, ProDrift;
new msg[100];
new car;
new Messages[MAX_MESSAGES][MessageInfo];
new CurrentMessageID;
new TimerAlreadyActivated;
new Text:Textdraw20;
new Text:Textdraw21;
new SpawnedVehicles[MAX_PLAYERS];
new COLORMENU;
new Nam[MAX_PLAYER_NAME];
new VehicleNames[212][] = {
{"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},
{"Firetruck"},{"Trashmaster"},{"Stretch"},{"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},
{"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
{"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},
{"Banshee"},{"Predator"},{"Bus"},{"Rihno"},{"Barracks"},{"Hotknife"},{"Trailer 1"},{"Previon"},
{"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},
{"Admiral"},{"Squalo"},{"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},
{"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
{"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},
{"Sanchez"},{"Sparrow"},{"Patriot"},{"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},
{"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},{"Marquis"},
{"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},
{"Jetmax"},{"Hotring"},{"Sandking"},{"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},
{"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},{"Rancher"},
{"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},
{"Tanker"}, {"Roadtrain"},{"Nebula"},{"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},
{"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},{"FBI Truck"},
{"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},
{"Blade"},{"Freight"},{"Streak"},{"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},
{"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},{"Merit"},
{"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monster A"},{"Monster B"},{"Uranus"},{"Jester"},
{"Sultan"},{"Stratum"},{"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},
{"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},{"Duneride"},{"Sweeper"},
{"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},
{"Tug"},{"Trailer 3"},{"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},
{"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},{"Police Car (SFPD)"},
{"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},
{"Sadler"},{"Luggage Trailer A"},{"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},
{"Utility Trailer"}
};
enum pInfo
{
pScore,
pMoney,
pAdmin,
pVIP,
pSkin,
pBanned,
pBannedBy[24]
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new MoneyGiven[MAX_PLAYERS];
new IsRegistered[MAX_PLAYERS];
new Logged[MAX_PLAYERS];
//============================================================================//
// Forwards //
//============================================================================//
forward HideMessage1(playerid);
forward MessageToAdmins(color,const string[]);
forward SendAutoMessage();
forward TimeUpdate();
forward VehicleOccupied(vehicleid);
forward SaveStats();
//============================================================================//
// Main //
//============================================================================//
main(){}
//============================================================================//
// Publics //
//============================================================================//
public OnGameModeInit()
{
SetTimer("SaveStats",4000,1);
//================================================================//
// MySQL part //
//================================================================//
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
mysql_query("CREATE TABLE IF NOT EXISTS playedata(user VARCHAR(24), password VARCHAR(40), score INT(20) NULL, money INT(20) NULL, admin INT(20) NULL, vip INT(20) NULL, skin INT(20) NULL, banned INT(20) NULL, bannedby VARCHAR(24), IP VARCHAR(15) )");
mysql_debug(1);
Textdraw20 = TextDrawCreate(647.000000, 0.000000, "New Textdraw");
TextDrawBackgroundColor(Textdraw20, 255);
TextDrawFont(Textdraw20, 1);
TextDrawLetterSize(Textdraw20, 0.500000, 5.399997);
TextDrawColor(Textdraw20, -1);
TextDrawSetOutline(Textdraw20, 0);
TextDrawSetProportional(Textdraw20, 1);
TextDrawSetShadow(Textdraw20, 1);
TextDrawUseBox(Textdraw20, 1);
TextDrawBoxColor(Textdraw20, 255);
TextDrawTextSize(Textdraw20, -167.000000, 76.000000);
Textdraw21 = TextDrawCreate(647.000000, 342.000000, "New Textdraw");
TextDrawBackgroundColor(Textdraw21, 255);
TextDrawFont(Textdraw21, 0);
TextDrawLetterSize(Textdraw21, 0.500000, 5.999996);
TextDrawColor(Textdraw21, -1);
TextDrawSetOutline(Textdraw21, 0);
TextDrawSetProportional(Textdraw21, 1);
TextDrawSetShadow(Textdraw21, 1);
TextDrawUseBox(Textdraw21, 1);
TextDrawBoxColor(Textdraw21, 255);
TextDrawTextSize(Textdraw21, -167.000000, 76.000000);
return 1;
}
public OnGameModeExit()
{
TextDrawHideForAll(Textdraw20);
TextDrawDestroy(Textdraw20);
TextDrawHideForAll(Textdraw21);
TextDrawDestroy(Textdraw21);
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
SetPlayerTime(playerid, 0, 0 );
SetPlayerWeather( playerid, 17);
SetPlayerPos(playerid,1679.2479,1447.9485,47.7780);
SetPlayerFacingAngle(playerid, 89.8345);
SetPlayerCameraPos(playerid,1667.3199,1447.8243,47.7780);
SetPlayerCameraLookAt(playerid,1679.2479,1447.9485,47.7780);
return 1;
}
public OnPlayerSpawn(playerid)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
SetPlayerTime(playerid, 12, 0);
TextDrawHideForPlayer(playerid, Textdraw20);
TextDrawHideForPlayer(playerid, Textdraw21);
return 1;
}
public OnPlayerConnect(playerid)
{
SetPlayerWeather( playerid, 17);
SetPlayerTime(playerid, 0, 0 );
SetPlayerColor(playerid, COLOR_WHITE);
TextDrawShowForPlayer(playerid, Textdraw20);
TextDrawShowForPlayer(playerid, Textdraw21);
new pnamee[MAX_PLAYER_NAME], string[100 + MAX_PLAYER_NAME];
GetPlayerName(playerid, pnamee, sizeof(pnamee));
format(string, sizeof(string), "%s {FFFFFF}has joined the server", pnamee);
SendClientMessageToAll(COLOR_LIME, string);
//================================================================//
// MySQL part //
//================================================================//
MoneyGiven[playerid] = -1;
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT IP FROM `playedata` WHERE user = '%s' LIMIT 1", pname);
mysql_query(query);
mysql_store_result();
new rows = mysql_num_rows();
if(!rows)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
}
if(rows == 1)
{
new IP[2][15];
mysql_fetch_field_row(IP[0],"IP");
GetPlayerIp(playerid, IP[1], 15);
if(strlen(IP[0]) != 0 && !strcmp(IP[0], IP[1], true))
{
MySQL_Login(playerid);
}
else if(!strlen(IP[0]) || strcmp(IP[0], IP[1], true))
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
IsRegistered[playerid] = 1;
}
}
mysql_free_result();
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new pnamee[24];
new string[39 + MAX_PLAYER_NAME];
GetPlayerName(playerid, pnamee, sizeof(pnamee));
switch(reason)
{
case 0: format(string, sizeof(string), "%s has left the server. (Lost Connection)", pnamee);
case 1: format(string, sizeof(string), "%s has left the server.", pnamee);
}
SendClientMessageToAll(COLOR_GREY, string);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//================================================================//
// MySQL part //
//================================================================//
if(dialogid == DIALOG_REGISTER)
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) > 100)
{
SendClientMessage(playerid,COLOR_RED, "ERROR: {FFFFFF}You must insert a password between 1-100 characters!");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
}
else if(strlen(inputtext) > 0 && strlen(inputtext) < 100)
{
new escpass[100];
mysql_real_escape_string(inputtext, escpass);
MySQL_Register(playerid, escpass);
}
}
if(!response)
{
Kick(playerid);
}
}
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
Kick(playerid);
}
if(response)
{
if(strlen(inputtext) > 0 && strlen(inputtext) < 100)
{
new query[200], pname[24], escapepass[100];
GetPlayerName(playerid, pname, 24);
mysql_real_escape_string(inputtext, escapepass);
format(query, sizeof(query), "SELECT `user` FROM playedata WHERE user = '%s' AND password = SHA1('%s')", pname, escapepass);
mysql_query(query);
mysql_store_result();
new numrows = mysql_num_rows();
if(numrows == 1) MySQL_Login(playerid);
if(!numrows)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
}
mysql_free_result();
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
}
}
}
if(dialogid == COLORMENU)
{
if(response)
{
if(listitem == 0)
{
SetPlayerColor(playerid, COLOR_BLUE);
}
if(listitem == 1)
{
SetPlayerColor(playerid, COLOR_YELLOW);
}
if(listitem > 1)
{
SetPlayerColor(playerid, COLOR_ORANGE);
}
if(listitem == 3)
{
SetPlayerColor(playerid, COLOR_PINK);
}
if(listitem == 4)
{
SetPlayerColor(playerid, COLOR_GREY);
}
if(listitem == 5)
{
SetPlayerColor(playerid, COLOR_INDIGO);
}
if(listitem == 6)
{
SetPlayerColor(playerid, COLOR_CYAN);
}
}
return 1;
}
return 1;
}
//============================================================================//
// Admin commands //
//============================================================================//
CMD:setadmin(playerid, params[])
{
new levels, ID;
new pname[MAX_PLAYER_NAME];
new str[256];
if(!IsPlayerAdmin(playerid))return 0;
if(sscanf(params,"ui",ID,levels)) return SendClientMessage(playerid,COLOR_RED, "USAGE: /setadmin [ID] [Level 1-4]");//it will show this if you dont use the format properly
if(levels > 2) return SendClientMessage(playerid,COLOR_RED,"LEVELS AVAILABLE 1-2!");//Available levels
if(!IsPlayerConnected(ID))return SendClientMessage(playerid,COLOR_RED,"That user is not connected.");//Detect if the id/partofname is connected
if(PlayerInfo[ID][pAdmin] == levels) return SendClientMessage(playerid,COLOR_RED, "ERROR: That person is already this admin level!");//Detect if the guy is already the level you setted
GetPlayerName(playerid,Nam, MAX_PLAYER_NAME);//define the playerid name
GetPlayerName(ID,pname,MAX_PLAYER_NAME);//define the other person name
if(levels == 0)
{
format(str, sizeof(str),"%s has set your admin level to %d on the server.",Nam,levels);
SendClientMessage(ID,COLOR_RED,str);
format(str, sizeof(str),"You had set %s admin level to %d!",pname,levels);
SendClientMessage(playerid,COLOR_RED,str);
PlayerInfo[ID][pAdmin] = levels;//this sets the player level
return 1;
}
format(str, sizeof(str),"%s has your Admin level to %d on the server.",Nam,levels);
SendClientMessage(ID,COLOR_RED,str);
format(str, sizeof(str),"You had set %s Admin level to %d!",pname,levels);
SendClientMessage(playerid,COLOR_RED,str);
PlayerInfo[ID][pAdmin] = levels;
return 1;
}
//============================================================================//
// Stocks / Publics //
//============================================================================//
stock MySQL_Register(playerid, passwordstring[])
{
new query[350], pname[24], IP[15];
new Bannedby[20];
format(Bannedby, 20, "Not Banned");
GetPlayerName(playerid, pname, 24);
GetPlayerIp(playerid, IP, 15);
format(query, sizeof(query), "INSERT INTO playedata (user, password, score, money, admin, vip, skin, banned, bannedby, IP) VALUES('%s', SHA1('%s'), 0, 0, 0, 0, 0, 0, '%s', '%s')", pname, passwordstring, Bannedby, IP);
mysql_query(query);
SendClientMessage(playerid,COLOR_LIME, "You have been registered on this server!");
Logged[playerid] = 1;
return 1;
}
stock MySQL_Login(playerid)
{
new query[300], pname[24], savingstring[20];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT score, money, admin, vip, skin, banned, bannedby, FROM playedata WHERE user = '%s'", pname);
mysql_query(query);
mysql_store_result();
while(mysql_fetch_row_format(query,"|"))
{
mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring));
mysql_fetch_field_row(savingstring, "money"); MoneyGiven[playerid] = strval(savingstring);
mysql_fetch_field_row(savingstring, "admin"); PlayerInfo[playerid][pAdmin] = strval(savingstring);
mysql_fetch_field_row(savingstring, "vip"); PlayerInfo[playerid][pVIP] = strval(savingstring);
mysql_fetch_field_row(savingstring, "skin"); PlayerInfo[playerid][pSkin] = strval(savingstring);
mysql_fetch_field_row(savingstring, "banned"); PlayerInfo[playerid][pBanned] = strval(savingstring);
mysql_fetch_field_row(savingstring, "bannedby"); PlayerInfo[playerid][pBannedBy] = strval(savingstring);
}
mysql_free_result();
Logged[playerid] = 1;
SendClientMessage(playerid,COLOR_WHITE, "Welcome back, feel free to do what do you want!");
return 1;
}
stock IsValidSkin(SkinID)
{
if((SkinID >= 1 && SkinID <= 2)||(SkinID == 7)||(SkinID >= 9 && SkinID <= 41)||(SkinID >= 43 && SkinID <= 64)||(SkinID >= 66 && SkinID <= 73)||(SkinID >= 75 && SkinID <= 85)||(SkinID >= 87 && SkinID <= 118)||(SkinID >= 120 && SkinID <= 148)||(SkinID >= 150 && SkinID <= 207)||(SkinID >= 209 && SkinID <= 264)||(SkinID >= 274 && SkinID <= 288)||(SkinID >= 290 && SkinID <= 299)) return true;
else return false;
}
stock AddRandomMessage(Msgcolor,Msgtext[])
{
format(Messages[CurrentMessageID][textmsg],182,"%s",Msgtext);
Messages[CurrentMessageID][colormsg] = Msgcolor;
CurrentMessageID++;
if(TimerAlreadyActivated == 0)
{
#if defined MESSAGE_DELAY
SetTimer("SendAutoMessage",MESSAGE_DELAY*120000);
#else
SetTimer("SendAutoMessage",120000,true);
#endif
TimerAlreadyActivated = 1;
}
return 1;
}
public SendAutoMessage()
{
new randmsg = random(CurrentMessageID);
SendClientMessageToAll(Messages[randmsg][colormsg],Messages[randmsg][textmsg]);
return 1;
}
stock Nitro(vehicleid)
{
switch(GetVehicleModel(vehicleid))
{
case
520:
return false ;
}
return true ;
}
public MessageToAdmins(color,const string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) == 1)
if(PlayerInfo[i][pAdmin] > 0)
SendClientMessage(i, COLOR_LIME ,string);
}
return 1;
}
GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(VehicleNames[i], vname, true) != -1 )
return i + 400;
}
return -1;
}
////////////////////////////////////////////////////////////////////////////////
stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string);
i < j; i++)
{
if (string[i] > '9' || string[i] < '0')
return 0;
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
stock strtok(const str[], &index)
{
new length = strlen(str);
while ((index < length) && (str[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (str[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = str[index];
index++;
}
result[index - offset] = EOS;
return result;
}
////////////////////////////////////////////////////////////////////////////////
public VehicleOccupied(vehicleid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerInVehicle(i,vehicleid)) return 1;
}
return 0;
}
public SaveStats()
{
for(new i;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
new playerid;
SavePlayer(playerid);
}
}
return 1;
}
stock SavePlayer(playerid)
{
if(Logged[playerid] == 1)
{
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[300], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE playedata SET score=%d, money=%d, admin=%d, vip=%d, skin=%d, banned=%d, bannedby='%s' WHERE user='%s'",score, money, PlayerInfo[playerid][pAdmin] ,PlayerInfo[playerid][pVIP] ,PlayerInfo[playerid][pSkin] ,
PlayerInfo[playerid][pBanned],
PlayerInfo[playerid][pBannedBy],
pname);
mysql_query(query);
}
return 1;
}