Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <mxINI>
- #include <sscanf2>
- #if !defined FLOAT_INFINITY
- const Float:FLOAT_INFINITY = Float:0x7F800000;
- #endif
- const MAX_SERVER_NAME = 15;
- const MAX_GAMEMODE_NAME = 20;
- enum e_SERVER_INFO
- {
- sinfo_ServerName[MAX_SERVER_NAME],
- sinfo_GameModeName[MAX_GAMEMODE_NAME]
- };
- new const ServerInfo[e_SERVER_INFO] =
- {
- "Sniper Madness",
- "SM:Deathmatch R-3.0"
- };
- new const ACCOUNT_FILE_PATCH[] = "players/%s.txt";
- enum _:e_PLAYER_ACHIEVEMENTS
- {
- bool:achFirstKill,
- bool:achUltraKill
- /*
- bool:,
- bool:,
- bool:,
- ...
- */
- }
- enum e_PLAYER_INFO
- {
- pName[MAX_PLAYER_NAME],
- pKills,
- pDeaths,
- pAchievement[e_PLAYER_ACHIEVEMENTS]
- };
- new pInfo[playerid][e_PLAYER_INFO];
- new const NULL_pInfo[e_PLAYER_INFO] =
- {
- "",
- 0,
- 0,
- {0, 0}
- };
- /*
- ==== Карты
- */
- enum
- {
- MAP_KACC,
- //MAP_
- };
- /*
- ==== Диалоги
- */
- enum
- {
- dRegister_Rules
- };
- const INVALID_DIALOG_ID = -1;
- new PlayerDialogShown[MAX_PLAYERS];
- stock ac_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
- {
- PlayerDialogShown[playerid] = dialogid;
- return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
- }
- #if defined _ALS_ShowPlayerDialog
- #undef ShowPlayerDialog
- #else
- #define _ALS_ShowPlayerDialog
- #endif
- #define ShowPlayerDialog ac_ShowPlayerDialog
- stock ac_SetPlayerHealth(playerid, Float:health)
- {
- pInfo[playerid][pHealth] = health;
- return SetPlayerHealth(playerid, health);
- }
- #if defined _ALS_SetPlayerHealth
- #undef SetPlayerHealth
- #else
- #define _ALS_SetPlayerHealth
- #endif
- #define SetPlayerHealth ac_SetPlayerHealth
- main(){}
- public OnGameModeInit()
- {
- SetGameModeText(ServerInfo[sinfo_GameModeName]);
- EnableStuntBonusForAll(false);
- DisableInteriorEnterExits();
- UsePlayerPedAnims();
- ShowPlayerMarkers(0);
- ShowNameTags(false);
- CreateTextDrawLogo();
- return 1;
- }
- new bool:PlayerSkipSkinSelect[MAX_PLAYERS char];
- new PlayerSkipSkinSelectF4Bug[MAX_PLAYERS char];
- public OnPlayerConnect(playerid)
- {
- PlayerSkipSkinSelect{playerid} = true;
- TogglePlayerSpectating(playerid, true);
- TextDrawShowForPlayer(playerid, TD_LOGO);
- SetPlayerVirtualWorld(playerid, 1);
- SetWeather(PLAYER_WEATHER);
- SetWorldTime(PLAYER_TIME);
- PlayerDialogShown[playerid] = INVALID_DIALOG_ID;
- GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
- FindPlayerAccount(playerid);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetSpawnInfo(playerid, 111, 0, 2026.1704, 1343.6394, 10.8203, 266.7928, 24, 330, 0, 0, 0, 0);
- if(!PlayerSkipSkinSelect{playerid})
- {
- if(PlayerSkipSkinSelectF4Bug{playerid})
- {
- PlayerSkipSkinSelectF4Bug{playerid} = 0;
- return SpawnPlayer(playerid);
- }
- TogglePlayerSpectating(playerid, true);
- SetTimerEx("@__SkipSKinSelect_SpecOff", 500, 0, "i", playerid);
- }
- else
- {
- PlayerSkipSkinSelect{playerid} = false;
- SpawnPlayer(playerid);
- }
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- SavePlayerAccount(playerid)
- static const disconnect_reasons[3][13] =
- {
- "потеря связи",
- "выход",
- "кик/бан"
- }
- new string[43+MAX_PLAYER_NAME+11+sizeof(disconnect_reasons[])+1];
- format(string, sizeof(string), "%s [ID: %d] отсоединился от сервера. Причина: %s.",
- pNick(playerid), playerid, disconnect_reasons[reason]);
- SendClientMessageToAll(0xFFFFFFFF, string);
- ClearPlayerData(playerid);
- return 1;
- }
- stock FindPlayerAccount(playerid)
- {
- new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
- format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
- if(!fexist(file_patch))
- {
- ShowAccountSystemDialog(playerid, dRegister_Rules);
- }
- else
- {
- LoadPlayerAccount(playerid);
- if(pInfo[playerid][pBan])
- return Kick(playerid);
- ShowAccountSystemDialog(playerid, dLogin);
- }
- return 1;
- }
- stock CreatePlayerAccount(playerid)
- {
- new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
- format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
- new file = ini_createFile(file_patch);
- if(file >= 0)
- {
- ini_setString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
- ini_setInteger(file, "gender", pInfo[playerid][pGender]);
- ini_setInteger(file, "admin", pInfo[playerid][pAdmin]);
- ini_setInteger(file, "kills", pInfo[playerid][pKills]);
- ini_setInteger(file, "death", pInfo[playerid][pDeaths]);
- ini_setInteger(file, "vip", pInfo[playerid][pVip]);
- ini_setInteger(file, "ban", pInfo[playerid][pBan]);
- ini_setInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
- ini_setInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
- ini_closeFile(file)
- }
- }
- stock LoadPlayerAccount(playerid)
- {
- new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
- format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
- new file = ini_openFile(file_patch);
- if(file >= 0)
- {
- ini_getString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
- ini_getInteger(file, "gender", pInfo[playerid][pGender]);
- ini_getInteger(file, "admin", pInfo[playerid][pAdmin]);
- ini_getInteger(file, "kills", pInfo[playerid][pKills]);
- ini_getInteger(file, "death", pInfo[playerid][pDeaths]);
- ini_getInteger(file, "vip", pInfo[playerid][pVip]);
- ini_getInteger(file, "ban", pInfo[playerid][pBan]);
- ini_getInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
- ini_getInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
- ini_closeFile(file);
- }
- }
- stock SavePlayerAccount(playerid)
- {
- new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
- format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
- new file = ini_openFile(file_patch);
- if(file >= 0)
- {
- ini_setString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
- ini_setInteger(file, "gender", pInfo[playerid][pGender]);
- ini_setInteger(file, "admin", pInfo[playerid][pAdmin]);
- ini_setInteger(file, "kills", pInfo[playerid][pKills]);
- ini_setInteger(file, "death", pInfo[playerid][pDeaths]);
- ini_setInteger(file, "vip", pInfo[playerid][pVip]);
- ini_setInteger(file, "ban", pInfo[playerid][pBan]);
- ini_setInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
- ini_setInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
- ini_closeFile(file)
- }
- }
- stock ClearPlayerData(playerid)
- {
- pInfo[playerid] = NULL_pInfo;
- return 1;
- }
- stock ShowAccountSystemDialog(playerid, dialogid)
- {
- switch(dialogid)
- {
- case dRegister_Rules:
- {
- new dialog_header[15+MAX_SERVER_NAME+1];
- format(dialog_header, sizeof(dialog_header), "Регистрация на %s", ServerInfo[MAX_SERVER_NAME]);
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, dialog_header,
- "{FFFFFF}\
- Правила игры на сервере:\n\
- \n\
- 1) Не убивай.\n\
- 2) Не прелюбодействуй.\n\
- 3) Не кради.\n\
- 4) Не произноси ложного свидетельства на ближнего твоего.\
- ",
- "Далее", "Выйти");
- }
- case dLogin:
- {
- new dialog_string[];
- format(dialog_string, sizeof(dialog_string),
- "\
- {FFFFFF}Аккаунт с ником %s найден в базе данных сервера.\n\
- Для дальнейшего входа введите пароль от аккаунта в окно ниже:\
- ", pNick(playerid));
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_PASSWORD, "Авторизация",
- dialog_string,
- "Принять", "Выход");
- }
- }
- }
- @__SkipSKinSelect_SpecOff(playerid);
- @__SkipSKinSelect_SpecOff(playerid)
- {
- TogglePlayerSpectating(playerid, false),
- PlayerSkipSkinSelectF4Bug{playerid}++;
- }
Advertisement
Add Comment
Please, Sign In to add comment