// This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #include #include // MySQL Plugin // Server Configuration #define SERVER_HOST_NAME "Roleplay Server" #define SERVER_GAME_MODE "RP Server" #define SERVER_GAME_MODE_VERSION "1.0.0" // MySQL Configuration #define MYSQL_HOST "127.0.0.1" #define MYSQL_USER "root" #define MYSQL_PASS "" #define MYSQL_DATA "samp" // Character Configuration #define STARTING_X -1424.1989 #define STARTING_Y -290.9463 #define STARTING_Z 14.1484 #define STARTING_A 145.5745 #define STARTING_MONEY 1000 #define GENDER_MALE 0 #define GENDER_FEMALE 1 #define MALE_SKIN 299 #define FEMALE_SKIN 298 // Login / Registration Data enum PlayerData { ID, Name[MAX_PLAYER_NAME], Password[129], IP[16], Admin, VIP, Money, Gender, Skin, Float:Health, Float:Armour, Float:posX, Float:posY, Float:posZ, Float:posA }; new Player[MAX_PLAYERS][PlayerData]; // Login / Registration Dialog enum { DIALOG_LOGIN, DIALOG_REGISTER, DIALOG_GENDER }; new mysql; native WP_Hash(buffer[], len, const str[]); // Whirlpool #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { } #endif public OnGameModeInit() { SendRconCommand("hostname "SERVER_HOST_NAME" ("SERVER_GAME_MODE_VERSION")"); SendRconCommand("gamemodetext "SERVER_GAME_MODE" v"SERVER_GAME_MODE_VERSION""); // MySQL mysql_log(LOG_ALL); mysql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATA, MYSQL_PASS); if(mysql_errno() != 0) { printf("[MySQL] The connection has failed."); } else { printf("[MySQL] The connection was successful."); } return true; } public OnGameModeExit() { return 1; } public OnPlayerRequestClass(playerid, classid) { return 1; } public OnPlayerConnect(playerid) { TogglePlayerSpectating(playerid, true); new query[512], playername[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername, sizeof(playername)); mysql_format(mysql, query, sizeof(query), "SELECT `Password`, `ID` FROM `accounts_data` WHERE `Name` = '%e' LIMIT 1", playername); mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid); return true; } public OnPlayerDisconnect(playerid, reason) { new query[2048], Float:pos[4], Float:PlayerHealth, Float:PlayerArmour; GetPlayerPos(playerid, pos[0], pos[1], pos[2]); GetPlayerFacingAngle(playerid, pos[3]); GetPlayerHealth(playerid, PlayerHealth); GetPlayerArmour(playerid, PlayerArmour); mysql_format(mysql, query, sizeof(query), "UPDATE `accounts_data` SET `Money` = %d, `Gender` = %d, `Skin` = %d, `Health` = %f, `Armour` = %f, `PosX` = %f, `PosY` = %f, `PosZ` = %f, `PosA` = %f WHERE `ID` = %d", GetPlayerMoney(playerid), Player[playerid][Gender], Player[playerid][Skin], PlayerHealth, PlayerArmour, pos[0], pos[1], pos[2], pos[3], Player[playerid][ID]); mysql_tquery(mysql, query, "", ""); return 1; } 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[]) { 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) { 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_LOGIN) { if(!response) Kick(playerid); new hashpass[129], query[128], playername[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername, sizeof(playername)); WP_Hash(hashpass, sizeof(hashpass), inputtext); if(!strcmp(hashpass, Player[playerid][Password])) { mysql_format(mysql, query, sizeof(query), "SELECT * FROM `accounts_data` WHERE `Name` = '%e' LIMIT 1", playername); mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid); } else { ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Welcome player!\nYour account has been found in our database. Please fill in your password:", "Login", "Quit"); } } if(dialogid == DIALOG_REGISTER) { new string[128], playername[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername, sizeof(playername)); format(string, sizeof(string), "Register - {FFD700}%s", playername); if(!response) return Kick(playerid); if(strlen(inputtext) < 10) { ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, string, "Password must be atleast 10 characters. Please fill up again your desired password.", "Register", "Quit"); } WP_Hash(Player[playerid][Password], 129, inputtext); ShowPlayerDialog(playerid, DIALOG_GENDER, DIALOG_STYLE_MSGBOX, "Gender", "Select your Gender.", "Male", "Female"); } if(dialogid == DIALOG_GENDER) { if(!response) return Kick(playerid); switch(listitem) { case 0: // Male { Player[playerid][Gender] = GENDER_MALE; Player[playerid][Skin] = MALE_SKIN; SendRegisterQuery(playerid); } case 1: // Female { Player[playerid][Gender] = GENDER_FEMALE; Player[playerid][Skin] = FEMALE_SKIN; SendRegisterQuery(playerid); } } } return 0; } SendRegisterQuery(playerid) { new query[512], playername[MAX_PLAYER_NAME], playerip[16]; GetPlayerName(playerid, playername, sizeof(playername)); GetPlayerIp(playerid, playerip, sizeof(playerip)); mysql_format(mysql, query, sizeof(query), "INSERT INTO `accounts_data` (`Name`, `Password`, `IP`, `Admin`, `VIP`, `Money`, `Gender`, `Skin`, `Health`, `Armour`, `PosX`, `PosY`, `PosZ`, `PosA`) VALUES ('%e', '%e', '%e', 0, 0, 0, %d, %d, 0, 0, %f, %f, %f, %f)", playername, Player[playerid][Password], playerip, Player[playerid][Gender], Player[playerid][Skin], STARTING_X, STARTING_Y, STARTING_Z, STARTING_A); mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid); return 1; } public OnPlayerClickPlayer(playerid, clickedplayerid, source) { return 1; } forward OnAccountCheck(playerid); public OnAccountCheck(playerid) { new rows, fields; cache_get_data(rows, fields, mysql); new string[128], name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name)); format(string, sizeof(string), "Register - {FFD700}%s", name); if(rows) { cache_get_field_content(0, "Password", Player[playerid][Password], mysql, 129); Player[playerid][ID] = cache_get_field_content_int(0, "ID"); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Welcome player!\nYour account has been found in our database. Please fill in your password:", "Login", "Quit"); } else { ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, string, "Please enter your password\nPassword:", "Register", "Quit"); } return true; } forward OnAccountLoad(playerid); public OnAccountLoad(playerid) { Player[playerid][Admin] = cache_get_field_content_int(0, "Admin"); Player[playerid][VIP] = cache_get_field_content_int(0, "VIP"); Player[playerid][Money] = cache_get_field_content_int(0, "Money"); Player[playerid][Gender] = cache_get_field_content_int(0, "Gender"); Player[playerid][Skin] = cache_get_field_content_int(0, "Skin"); Player[playerid][Health] = cache_get_field_content_float(0, "Health"); Player[playerid][Armour] = cache_get_field_content_float(0, "Armour"); Player[playerid][posX] = cache_get_field_content_float(0, "PosX"); Player[playerid][posY] = cache_get_field_content_float(0, "PosY"); Player[playerid][posZ] = cache_get_field_content_float(0, "PosZ"); Player[playerid][posA] = cache_get_field_content_float(0, "PosA"); TogglePlayerSpectating(playerid, false); GivePlayerMoney(playerid, Player[playerid][Money]); SetPlayerHealth(playerid, Player[playerid][Health]); SetPlayerArmour(playerid, Player[playerid][Armour]); SetSpawnInfo(playerid, 0, Player[playerid][Skin], Player[playerid][posX], Player[playerid][posY], Player[playerid][posZ], Player[playerid][posA], 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); return true; } forward OnAccountRegister(playerid); public OnAccountRegister(playerid) { Player[playerid][ID] = cache_insert_id(); printf("[Registration] New account registered. Database ID: [%d]", Player[playerid][ID]); TogglePlayerSpectating(playerid, false); GivePlayerMoney(playerid, STARTING_MONEY); SetSpawnInfo(playerid, 0, Player[playerid][Skin], STARTING_X, STARTING_Y, STARTING_Z, STARTING_A, 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); return true; }