Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ================ account.inc ==================
- #if defined _inc_account
- #undef _inc_account
- #endif
- #include <YSI_Coding/y_hooks>
- #define MAX_ACCOUNT_PASSWORD 32
- enum E_ACC_DATA
- {
- E_ACC_ID,
- E_ACC_USERNAME[MAX_PLAYER_NAME],
- E_ACC_ADMIN,
- E_ACC_CHARACTER_SLOTS,
- }
- new g_AccData[MAX_PLAYERS][E_ACC_DATA];
- enum E_ACC_TEMP_DATA
- {
- E_ACC_TEMP_REGISTRATION_USERNAME[MAX_PLAYER_NAME],
- E_ACC_TEMP_REGISTRATION_PASSWORD[MAX_ACCOUNT_PASSWORD],
- E_ACC_TEMP_LOGIN_PASSWORD[MAX_ACCOUNT_PASSWORD],
- E_ACC_TEMP_LOGIN_ATTEMPTS_LEFT
- }
- new g_AccTempData[MAX_PLAYERS][E_ACC_TEMP_DATA];
- hook function Foo(bar)
- {
- printf("hook Foo(%d)@%03d", bar, UNIQUE_SYMBOL);
- return continue(bar);
- }
- hook OnPlayerConnect(playerid)
- {
- defer OnPlayerConnectTimer(playerid);
- }
- timer OnPlayerConnectTimer[1000](playerid)
- {
- // Setting up the scene
- ClearChat(playerid);
- TogglePlayerControllable(playerid, false);
- SetPlayerPos(playerid, 200, 3250, 10);
- TogglePlayerSpectating(playerid, true);
- InterpolateCameraPos(playerid, 200, 3300, -20, 200, 3310, 10, 8000, CAMERA_MOVE);
- InterpolateCameraLookAt(playerid, 200, 3300, -30, 200, 3330, 10, 8000, CAMERA_MOVE);
- new query[64];
- mysql_format(g_Sql, query, sizeof(query), "SELECT id FROM accounts WHERE username = '%e'", ReturnPlayerName(playerid));
- mysql_tquery(g_Sql, query, "OnPlayerAccountCheck", "i", playerid);
- return 1;
- }
- hook function ShowPlayerPremadeDialog(playerid, dialogid)
- {
- if (dialogid == DIALOG_ACCOUNT_CREATE_USERNAME)
- {
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Account Creation",
- "{"#COLOR_THEME"}Welcome to "#SERVER_NAME"!\n\n\
- {FFFFFF}Please enter a username for your new Master Account in the field below.\n\n\
- {808080}TIP: All characters you create will be associated with this account, and its name will be displayed in-game for other players.",
- "Next", "Quit");
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_CREATE_PASSWORD)
- {
- new string[256];
- format(string, sizeof(string),
- "{"#COLOR_THEME"}Username: {FFFFFF}%s\n\
- {"#COLOR_THEME"}Password:\n\n\
- {FFFFFF}Please create a password for your account.\n\n\
- {"#COLOR_TIP"}TIP: Passwords must contain 6-31 characters.",
- g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_USERNAME]);
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_PASSWORD, "Account Creation", string, "Next", "Back");
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_CREATE_PASSWORD_CONFIRM)
- {
- new string[300], maskedPassword[MAX_ACCOUNT_PASSWORD];
- MaskString(g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_PASSWORD], "*", maskedPassword);
- format(string, sizeof(string),
- "{"#COLOR_THEME"}Username: {FFFFFF}%s\n\
- {"#COLOR_THEME"}Password: {FFFFFF}%s\n\n\
- {FFFFFF}Please confirm your password by entering it once again in the text field below.",
- g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_USERNAME], maskedPassword);
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_PASSWORD, "Account Creation", string, "Next", "Back");
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_LOGIN)
- {
- new string[86];
- format(string, sizeof(string), "{"#COLOR_THEME"}Welcome back, %s!\n\n\
- {FFFFFF}Please enter your password to log in.", ReturnPlayerName(playerid));
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Quit");
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT)
- {
- new query[86];
- mysql_format(g_Sql, query, sizeof(query), "SELECT name, bounty FROM characters WHERE account_id = %d", g_AccData[playerid][E_ACC_ID]);
- mysql_tquery(g_Sql, query, "OnShowPlayerAccountDialog", "i", playerid);
- return 1;
- }
- return continue(playerid, dialogid);
- }
- hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if (dialogid == DIALOG_ACCOUNT_CREATE_USERNAME)
- {
- if (!response) return KickPlayer(playerid, INVALID_PLAYER_ID, "You have left the server", true, 500);
- if (!strlen(inputtext) || !IsValidNickName(inputtext))
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "Usernames must contain 3-23 characters, and certain symbols are disallowed.");
- ShowPlayerPremadeDialog(playerid, dialogid);
- return 1;
- }
- format(g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_USERNAME], MAX_PLAYER_NAME, "%s", inputtext);
- new query[128];
- mysql_format(g_Sql, query, sizeof(query), "SELECT id FROM accounts WHERE username = '%e'", inputtext);
- mysql_tquery(g_Sql, query, "OnPlayerUsernameCheck", "i", playerid);
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_CREATE_PASSWORD)
- {
- if (!response) return ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_USERNAME);
- new length = strlen(inputtext);
- if (!length || length < 6 || length > 31)
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "Passwords must contain 6-31 characters!");
- ShowPlayerPremadeDialog(playerid, dialogid);
- return 1;
- }
- format(g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_PASSWORD], MAX_ACCOUNT_PASSWORD, "%s", inputtext);
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_PASSWORD_CONFIRM);
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_CREATE_PASSWORD_CONFIRM)
- {
- if (!response) return ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_PASSWORD);
- if (!strlen(inputtext) || strcmp(inputtext, g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_PASSWORD]))
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "Passwords don't match, please try again or press on the Back button.");
- ShowPlayerPremadeDialog(playerid, dialogid);
- return 1;
- }
- bcrypt_hash(playerid, "OnPlayerRegistrationPasswordHashed", inputtext, BCRYPT_COST);
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT_LOGIN)
- {
- if (!response) return KickPlayer(playerid, INVALID_PLAYER_ID, "You have left the server.");
- if (!strlen(inputtext))
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "You must enter a password to log in!");
- ShowPlayerPremadeDialog(playerid, dialogid);
- return 1;
- }
- new query[128], username[MAX_PLAYER_NAME];
- GetPlayerName(playerid, username);
- format(g_AccTempData[playerid][E_ACC_TEMP_LOGIN_PASSWORD], MAX_ACCOUNT_PASSWORD, "%s", inputtext);
- mysql_format(g_Sql, query, sizeof(query), "SELECT password FROM accounts WHERE username = '%e'", username);
- mysql_tquery(g_Sql, query, "OnPlayerLoginAttempt", "i", playerid);
- return 1;
- }
- else if (dialogid == DIALOG_ACCOUNT)
- {
- if (!response) return ShowPlayerPremadeDialog(playerid, dialogid);
- if (listitem == 0)
- {
- ShowPlayerPremadeDialog(playerid, DIALOG_CHARACTER_CREATE_NAME);
- return 1;
- }
- new query[66];
- mysql_format(g_Sql, query, sizeof(query), "SELECT * FROM characters WHERE name = '%e'", inputtext);
- mysql_tquery(g_Sql, query, "OnPlayerLoadCharacter", "i", playerid);
- return 1;
- }
- return 1;
- }
- forward OnPlayerAccountCheck(playerid);
- public OnPlayerAccountCheck(playerid)
- {
- new rows; cache_get_row_count(rows);
- if (!rows)
- {
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_USERNAME);
- return 1;
- }
- else
- {
- g_AccTempData[playerid][E_ACC_TEMP_LOGIN_ATTEMPTS_LEFT] = 3;
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_LOGIN);
- return 1;
- }
- }
- forward OnPlayerRegistrationPasswordHashed(playerid);
- public OnPlayerRegistrationPasswordHashed(playerid)
- {
- new hashedPassword[BCRYPT_HASH_LENGTH];
- bcrypt_get_hash(hashedPassword);
- new query[128];
- mysql_format(g_Sql, query, sizeof(query), "INSERT INTO accounts (username, password) VALUES ('%e', '%e')", g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_USERNAME], hashedPassword);
- mysql_tquery(g_Sql, query, "OnPlayerRegister", "i", playerid);
- return 1;
- }
- forward OnPlayerRegister(playerid);
- public OnPlayerRegister(playerid)
- {
- SetPlayerName(playerid, g_AccTempData[playerid][E_ACC_TEMP_REGISTRATION_USERNAME]);
- SendPlayerMessage(playerid, MESSAGE_TYPE_POSITIVE, "ACCOUNT", "Your account has been successfully created, please log in to proceed!");
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_LOGIN);
- return 1;
- }
- forward OnPlayerLoginAttempt(playerid);
- public OnPlayerLoginAttempt(playerid)
- {
- new rows; cache_get_row_count(rows);
- // No account found despite being on the login dialog
- if (!rows)
- {
- new string[128], username[MAX_PLAYER_NAME];
- GetPlayerName(playerid, username);
- format(string, sizeof(string), "Could not find username named \"%s\" in the database, please report this issue!", username);
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", string);
- KickPlayer(playerid, INVALID_PLAYER_ID, "Critical Error!", true);
- return 0;
- }
- new storedPassword[BCRYPT_HASH_LENGTH];
- cache_get_value_name(0, "password", storedPassword);
- bcrypt_verify(playerid, "OnPlayerLoginPasswordVerify", g_AccTempData[playerid][E_ACC_TEMP_LOGIN_PASSWORD], storedPassword);
- return 1;
- }
- forward OnPlayerLoginPasswordVerify(playerid, bool:success);
- public OnPlayerLoginPasswordVerify(playerid, bool:success)
- {
- // When a wrong password is entered
- if (!success)
- {
- g_AccTempData[playerid][E_ACC_TEMP_LOGIN_ATTEMPTS_LEFT]--;
- if (g_AccTempData[playerid][E_ACC_TEMP_LOGIN_ATTEMPTS_LEFT] <= 0)
- {
- KickPlayer(playerid, INVALID_PLAYER_ID, "Failure to log in.", true);
- return 0;
- }
- new string[64];
- format(string, sizeof(string), "Invalid password, %d attempts left!", g_AccTempData[playerid][E_ACC_TEMP_LOGIN_ATTEMPTS_LEFT]);
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", string);
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_LOGIN);
- return 0;
- }
- new username[MAX_PLAYER_NAME];
- GetPlayerName(playerid, username);
- LoadPlayerAccount(playerid, username);
- return 1;
- }
- forward LoadPlayerAccount(playerid, const string:username[]);
- public LoadPlayerAccount(playerid, const string:username[])
- {
- new query[186];
- mysql_format(g_Sql, query, sizeof(query), "SELECT * FROM accounts WHERE username = '%e'", username);
- mysql_tquery(g_Sql, query, "OnPlayerLoadAccount", "i", playerid);
- return 1;
- }
- forward OnPlayerLoadAccount(playerid);
- public OnPlayerLoadAccount(playerid)
- {
- if (!IsPlayerConnected(playerid)) return 0; // Security check due to async callback
- cache_get_value_name(0, "username", g_AccData[playerid][E_ACC_USERNAME]);
- cache_get_value_name_int(0, "admin", g_AccData[playerid][E_ACC_ADMIN]);
- cache_get_value_name_int(0, "character_slots", g_AccData[playerid][E_ACC_CHARACTER_SLOTS]);
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT);
- return 1;
- }
- forward OnShowPlayerAccountDialog(playerid);
- public OnShowPlayerAccountDialog(playerid)
- {
- new title[MAX_PLAYER_NAME + 10], body[512] = "Character Name\tBounty\n{55FF55}[+] {99FF99}Create a new character";
- format(title, sizeof(title), "%s (Character Slots: %d)", g_AccData[playerid][E_ACC_USERNAME], g_AccData[playerid][E_ACC_CHARACTER_SLOTS]);
- new rows; cache_get_row_count(rows);
- for(new i = 0; i < rows; i++)
- {
- new name[MAX_PLAYER_NAME], bounty, bountyC[14];
- cache_get_value_name(i, "name", name);
- cache_get_value_name_int(i, "bounty", bounty);
- new string[48];
- if(bounty < 1)
- {
- format(string, sizeof(string), "\n%s\tNone", name);
- }
- else
- {
- FormatComma(bounty, bountyC);
- format(string, sizeof(string), "\n%s\tB%s", name, bountyC);
- }
- strcat(body, string);
- }
- ShowPlayerDialog(playerid, DIALOG_ACCOUNT, DIALOG_STYLE_TABLIST_HEADERS, title, body, "Select", "");
- return 1;
- }
- forward OnPlayerUsernameCheck(playerid);
- public OnPlayerUsernameCheck(playerid)
- {
- new rows; cache_get_row_count(rows);
- if (rows)
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "This username is already taken!");
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_USERNAME);
- return 0;
- }
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT_CREATE_PASSWORD);
- return 1;
- }
- ==================== character.inc ======================
- #if defined _inc_character
- #undef _inc_character
- #endif
- #include <YSI_Coding/y_hooks>
- enum E_CHAR_DATA
- {
- E_CHAR_NAME[MAX_PLAYER_NAME],
- E_CHAR_BOUNTY,
- E_CHAR_CREW[32],
- E_CHAR_SKIN,
- E_CHAR_MONEY,
- E_CHAR_STRENGTH,
- E_CHAR_DEXTERITY,
- E_CHAR_STAMINA,
- E_CHAR_INTELLIGENCE,
- E_CHAR_BRAWL,
- E_CHAR_MELEE,
- E_CHAR_FIREARMS,
- E_CHAR_BLOCK,
- E_CHAR_DODGE,
- E_CHAR_PERCEPTION,
- E_CHAR_STEALTH,
- E_CHAR_NAVIGATION,
- E_CHAR_CRAFTS,
- E_CHAR_PERFORMANCE,
- E_CHAR_MEDICINE
- }
- new g_CharData[MAX_PLAYERS][E_CHAR_DATA];
- hook function Foo(bar)
- {
- printf("hook Foo(%d)@%03d", bar, UNIQUE_SYMBOL);
- return continue(bar);
- }
- forward OnPlayerLoadCharacter(playerid);
- public OnPlayerLoadCharacter(playerid)
- {
- cache_get_value_name(0, "name", g_CharData[playerid][E_CHAR_NAME]);
- cache_get_value_name_int(0, "bounty", g_CharData[playerid][E_CHAR_BOUNTY]);
- cache_get_value_name_int(0, "skin", g_CharData[playerid][E_CHAR_SKIN]);
- return 1;
- }
- hook function ShowPlayerPremadeDialog(playerid, dialogid)
- {
- if (dialogid == DIALOG_CHARACTER_CREATE_NAME)
- {
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Character Creation", "{FFFFFF}Please enter a name for your character in the text field below.\n\n\
- {"#COLOR_TIP"}TIP: Names must follow a Surname_Firstname format (e.g., Krell_Balthazar).",
- "Next", "Back");
- return 1;
- }
- return continue(playerid, dialogid);
- }
- hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if (dialogid == DIALOG_CHARACTER_CREATE_NAME)
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_POSITIVE, "Test", "Checking that OnDialogResponse triggers");
- if (!response)
- {
- ShowPlayerPremadeDialog(playerid, DIALOG_ACCOUNT);
- return 1;
- }
- if (!IsCharacterNameValid(inputtext))
- {
- SendPlayerMessage(playerid, MESSAGE_TYPE_NEGATIVE, "ERROR", "This name does not follow the Surname_Firstname naming format!");
- ShowPlayerPremadeDialog(playerid, dialogid);
- return 1;
- }
- SendPlayerMessage(playerid, MESSAGE_TYPE_POSITIVE, "NICE", "That's a correct name, TODO: mSelection for skins");
- return 1;
- }
- return 1;
- }
Add Comment
Please, Sign In to add comment