Guest User

Reborn Project Sniper Madness

a guest
Jul 30th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.98 KB | None | 0 0
  1. #include <a_samp>
  2. #include <mxINI>
  3. #include <sscanf2>
  4.  
  5. #if !defined FLOAT_INFINITY
  6.     const Float:FLOAT_INFINITY = Float:0x7F800000;
  7. #endif
  8.  
  9. const MAX_SERVER_NAME = 15;
  10. const MAX_GAMEMODE_NAME = 20;
  11. enum e_SERVER_INFO
  12. {
  13.     sinfo_ServerName[MAX_SERVER_NAME],
  14.     sinfo_GameModeName[MAX_GAMEMODE_NAME]
  15. };
  16. new const ServerInfo[e_SERVER_INFO] =
  17. {
  18.     "Sniper Madness",
  19.     "SM:Deathmatch R-3.0"
  20. };
  21.  
  22. new const ACCOUNT_FILE_PATCH[] = "players/%s.txt";
  23.  
  24. enum _:e_PLAYER_ACHIEVEMENTS
  25. {
  26.     bool:achFirstKill,
  27.     bool:achUltraKill
  28.  
  29.     /*
  30.     bool:,
  31.     bool:,
  32.     bool:,
  33.     ...
  34.     */
  35. }
  36. enum e_PLAYER_INFO
  37. {
  38.     pName[MAX_PLAYER_NAME],
  39.     pKills,
  40.     pDeaths,
  41.     pAchievement[e_PLAYER_ACHIEVEMENTS]
  42. };
  43. new pInfo[playerid][e_PLAYER_INFO];
  44. new const NULL_pInfo[e_PLAYER_INFO] =
  45. {
  46.     "",
  47.     0,
  48.     0,
  49.     {0, 0}
  50. };
  51.  
  52.  
  53. /*
  54.     ====    Карты
  55. */
  56. enum
  57. {
  58.     MAP_KACC,
  59.     //MAP_
  60. };
  61.  
  62. /*
  63.     ====    Диалоги
  64. */
  65.  
  66. enum
  67. {
  68.     dRegister_Rules
  69. };
  70.  
  71. const INVALID_DIALOG_ID = -1;
  72. new PlayerDialogShown[MAX_PLAYERS];
  73. stock ac_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
  74. {
  75.     PlayerDialogShown[playerid] = dialogid;
  76.     return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
  77. }
  78. #if defined _ALS_ShowPlayerDialog
  79.     #undef ShowPlayerDialog
  80. #else
  81.     #define _ALS_ShowPlayerDialog
  82. #endif
  83. #define ShowPlayerDialog ac_ShowPlayerDialog
  84.  
  85. stock ac_SetPlayerHealth(playerid, Float:health)
  86. {
  87.     pInfo[playerid][pHealth] = health;
  88.     return SetPlayerHealth(playerid, health);
  89. }
  90. #if defined _ALS_SetPlayerHealth
  91.     #undef SetPlayerHealth
  92. #else
  93.     #define _ALS_SetPlayerHealth
  94. #endif
  95. #define SetPlayerHealth ac_SetPlayerHealth
  96.  
  97.  
  98. main(){}
  99.  
  100.  
  101. public OnGameModeInit()
  102. {
  103.     SetGameModeText(ServerInfo[sinfo_GameModeName]);
  104.     EnableStuntBonusForAll(false);
  105.     DisableInteriorEnterExits();
  106.     UsePlayerPedAnims();
  107.     ShowPlayerMarkers(0);
  108.     ShowNameTags(false);
  109.  
  110.  
  111.     CreateTextDrawLogo();
  112.  
  113.     return 1;
  114. }
  115.  
  116. new bool:PlayerSkipSkinSelect[MAX_PLAYERS char];
  117. new PlayerSkipSkinSelectF4Bug[MAX_PLAYERS char];
  118.  
  119.  
  120.  
  121. public OnPlayerConnect(playerid)
  122. {
  123.     PlayerSkipSkinSelect{playerid} = true;
  124.     TogglePlayerSpectating(playerid, true);
  125.  
  126.  
  127.     TextDrawShowForPlayer(playerid, TD_LOGO);
  128.     SetPlayerVirtualWorld(playerid, 1);
  129.     SetWeather(PLAYER_WEATHER);
  130.     SetWorldTime(PLAYER_TIME);
  131.  
  132.     PlayerDialogShown[playerid] = INVALID_DIALOG_ID;
  133.     GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
  134.     FindPlayerAccount(playerid);
  135.  
  136.     return 1;
  137. }
  138.  
  139. public OnPlayerRequestClass(playerid, classid)
  140. {
  141.     SetSpawnInfo(playerid, 111, 0, 2026.1704, 1343.6394, 10.8203, 266.7928, 24, 330, 0, 0, 0, 0);
  142.     if(!PlayerSkipSkinSelect{playerid})
  143.     {
  144.         if(PlayerSkipSkinSelectF4Bug{playerid})
  145.         {
  146.             PlayerSkipSkinSelectF4Bug{playerid} = 0;
  147.             return SpawnPlayer(playerid);
  148.         }
  149.         TogglePlayerSpectating(playerid, true);
  150.         SetTimerEx("@__SkipSKinSelect_SpecOff", 500, 0, "i", playerid);
  151.     }
  152.     else
  153.     {
  154.         PlayerSkipSkinSelect{playerid} = false;
  155.         SpawnPlayer(playerid);
  156.     }
  157.     return 1;
  158. }
  159.  
  160.  
  161. public OnPlayerDisconnect(playerid, reason)
  162. {
  163.     SavePlayerAccount(playerid)
  164.  
  165.     static const disconnect_reasons[3][13] =
  166.     {
  167.         "потеря связи",
  168.         "выход",
  169.         "кик/бан"
  170.     }
  171.  
  172.     new string[43+MAX_PLAYER_NAME+11+sizeof(disconnect_reasons[])+1];
  173.     format(string, sizeof(string), "%s [ID: %d] отсоединился от сервера. Причина: %s.",
  174.         pNick(playerid), playerid, disconnect_reasons[reason]);
  175.     SendClientMessageToAll(0xFFFFFFFF, string);
  176.  
  177.     ClearPlayerData(playerid);
  178.     return 1;
  179. }
  180.  
  181.  
  182.  
  183. stock FindPlayerAccount(playerid)
  184. {
  185.     new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
  186.     format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
  187.  
  188.     if(!fexist(file_patch))
  189.     {
  190.         ShowAccountSystemDialog(playerid, dRegister_Rules);
  191.     }
  192.     else
  193.     {
  194.         LoadPlayerAccount(playerid);
  195.  
  196.         if(pInfo[playerid][pBan])
  197.             return Kick(playerid);
  198.  
  199.         ShowAccountSystemDialog(playerid, dLogin);
  200.     }
  201.     return 1;
  202. }
  203.  
  204. stock CreatePlayerAccount(playerid)
  205. {
  206.     new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
  207.     format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
  208.     new file = ini_createFile(file_patch);
  209.  
  210.     if(file >= 0)
  211.     {
  212.         ini_setString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
  213.         ini_setInteger(file, "gender", pInfo[playerid][pGender]);
  214.         ini_setInteger(file, "admin", pInfo[playerid][pAdmin]);
  215.         ini_setInteger(file, "kills", pInfo[playerid][pKills]);
  216.         ini_setInteger(file, "death", pInfo[playerid][pDeaths]);
  217.         ini_setInteger(file, "vip", pInfo[playerid][pVip]);
  218.         ini_setInteger(file, "ban", pInfo[playerid][pBan]);
  219.         ini_setInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
  220.         ini_setInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
  221.  
  222.         ini_closeFile(file)
  223.     }
  224. }
  225.  
  226. stock LoadPlayerAccount(playerid)
  227. {
  228.     new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
  229.     format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
  230.     new file = ini_openFile(file_patch);
  231.  
  232.     if(file >= 0)
  233.     {
  234.         ini_getString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
  235.         ini_getInteger(file, "gender", pInfo[playerid][pGender]);
  236.         ini_getInteger(file, "admin", pInfo[playerid][pAdmin]);
  237.         ini_getInteger(file, "kills", pInfo[playerid][pKills]);
  238.         ini_getInteger(file, "death", pInfo[playerid][pDeaths]);
  239.         ini_getInteger(file, "vip", pInfo[playerid][pVip]);
  240.         ini_getInteger(file, "ban", pInfo[playerid][pBan]);
  241.         ini_getInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
  242.         ini_getInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
  243.  
  244.         ini_closeFile(file);
  245.     }
  246. }
  247.  
  248. stock SavePlayerAccount(playerid)
  249. {
  250.     new file_patch[sizeof(ACCOUNT_FILE_PATCH)-2+MAX_PLAYER_NAME+1];
  251.     format(file_patch, sizeof(file_patch), ACCOUNT_FILE_PATCH, pNick(playerid));
  252.     new file = ini_openFile(file_patch);
  253.  
  254.     if(file >= 0)
  255.     {
  256.         ini_setString(file, "password", pInfo[playerid][pPassword], MAX_PLAYER_PASSWORD);
  257.         ini_setInteger(file, "gender", pInfo[playerid][pGender]);
  258.         ini_setInteger(file, "admin", pInfo[playerid][pAdmin]);
  259.         ini_setInteger(file, "kills", pInfo[playerid][pKills]);
  260.         ini_setInteger(file, "death", pInfo[playerid][pDeaths]);
  261.         ini_setInteger(file, "vip", pInfo[playerid][pVip]);
  262.         ini_setInteger(file, "ban", pInfo[playerid][pBan]);
  263.         ini_setInteger(file, "ach__first_kill", pInfo[playerid][pAchievement][achFirstKill]);
  264.         ini_setInteger(file, "ach__ultra_kill", pInfo[playerid][pAchievement][achUltraKill]);
  265.  
  266.         ini_closeFile(file)
  267.     }
  268. }
  269.  
  270. stock ClearPlayerData(playerid)
  271. {
  272.     pInfo[playerid] = NULL_pInfo;
  273.     return 1;
  274. }
  275.  
  276.  
  277. stock ShowAccountSystemDialog(playerid, dialogid)
  278. {
  279.     switch(dialogid)
  280.     {
  281.         case dRegister_Rules:
  282.         {
  283.             new dialog_header[15+MAX_SERVER_NAME+1];
  284.             format(dialog_header, sizeof(dialog_header), "Регистрация на %s", ServerInfo[MAX_SERVER_NAME]);
  285.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, dialog_header,
  286.                 "{FFFFFF}\
  287.                     Правила игры на сервере:\n\
  288.                     \n\
  289.                     1) Не убивай.\n\
  290.                     2) Не прелюбодействуй.\n\
  291.                     3) Не кради.\n\
  292.                     4) Не произноси ложного свидетельства на ближнего твоего.\
  293.                 ",
  294.                 "Далее", "Выйти");
  295.         }
  296.         case dLogin:
  297.         {
  298.             new dialog_string[];
  299.             format(dialog_string, sizeof(dialog_string),
  300.                 "\
  301.                     {FFFFFF}Аккаунт с ником %s найден в базе данных сервера.\n\
  302.                     Для дальнейшего входа введите пароль от аккаунта в окно ниже:\
  303.                 ", pNick(playerid));
  304.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_PASSWORD, "Авторизация",
  305.                 dialog_string,
  306.                 "Принять", "Выход");
  307.         }
  308.     }
  309. }
  310.  
  311. @__SkipSKinSelect_SpecOff(playerid);
  312. @__SkipSKinSelect_SpecOff(playerid)
  313. {
  314.     TogglePlayerSpectating(playerid, false),
  315.     PlayerSkipSkinSelectF4Bug{playerid}++;
  316. }
Advertisement
Add Comment
Please, Sign In to add comment