Advertisement
-DeimoS-

ds_skinselector.inc

Oct 8th, 2016 (edited)
472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 25.50 KB | None | 0 0
  1. /*
  2.                Автор инклуда - DeimoS
  3.                     08.10.16
  4.                    pro-pawn.ru
  5. */
  6.  
  7.  
  8. #if !defined CallSelectorFilterByID
  9. #define     CallSelectorFilterByID(%0,%1)   \
  10.             CallSelectorFilterByID__(playerid, classid, %0, %1, sizeof(%1))
  11. #endif
  12.  
  13. #if !defined CallSelectorFilterByName
  14. #define     CallSelectorFilterByName(%0,%1)     \
  15.             CallSelectorFilterByName__(playerid, classid, %0, %1, sizeof(%1))
  16. #endif
  17.  
  18. #if !defined CreateNewSelectorFilter
  19. #define     CreateNewSelectorFilter(%0,%1,%2)   \
  20.             CreateNewSelectorFilter__(%0,%1)
  21. #endif
  22.  
  23. #if !defined isnull
  24.     #define isnull(%1) \
  25.                 (((%1[0]) == 0) || ((%1[0]) == '\1') && ((%1[1]) == 0))
  26. #endif
  27.  
  28. #if !defined INVALID_SS_FILTER_ID
  29.     #define     INVALID_SS_FILTER_ID                -1
  30. #endif
  31.  
  32. #if !defined MAX_REGISTERED_ID_FILTERS
  33.     #define     MAX_REGISTERED_ID_FILTERS           10
  34. #endif
  35.  
  36. #if !defined MAX_REGISTERED_NAME_FILTERS
  37.     #define     MAX_REGISTERED_NAME_FILTERS         30
  38. #endif
  39.  
  40. /*
  41.     ================================================================================================
  42.     ================================================================================================
  43.     ================================================================================================
  44. */
  45.  
  46. enum e_DSKIN_SELECTOR_INFO
  47. {
  48.     bool:registered_id_filters,
  49.     registered_name_filters[MAX_REGISTERED_NAME_FILTERS+1],
  50. }
  51. new dss_info[MAX_REGISTERED_ID_FILTERS][e_DSKIN_SELECTOR_INFO],
  52.     dss_player_skin[MAX_PLAYERS],
  53.     default_skinfilter;
  54.  
  55.  
  56. /*
  57.     ================================================================================================
  58.     ================================================================================================
  59.     ================================================================================================
  60. */
  61. /*
  62.     Функция создаёт новый фильтр
  63.  
  64.     Для использования существует макрос, в котором, для наглядности, добавлен параметр для массива с скинами:
  65.         CreateNewSelectorFilter(filterskin_id, filter_name[], skins_array[])
  66.  
  67.     Возвращает:
  68.         1                       - Фильтр успешно создан
  69.         INVALID_SS_FILTER_ID    - Создать фильтр не удалось (превышен лимит/указан невалидный или занятый ID)
  70.  
  71.     Параметры:
  72.         skin_filter_id          - ID, под которым будет создан новый фильтр
  73.         filter_name[]           - Имя для нового фильтра
  74.         skins_array[]           - Массив, в котором хранятся скины для фильтра
  75. */
  76. stock CreateNewSelectorFilter__(filterskin_id, const filter_name[])
  77. {
  78.     if(strlen(filter_name) > MAX_REGISTERED_NAME_FILTERS)
  79.         return printf("\n\nОшибка: Превышен лимит символов в имени фильтра. Фильтр \"%s\" не создан\n\n", filter_name), INVALID_SS_FILTER_ID;
  80.     if(!(0 <= filterskin_id < MAX_REGISTERED_ID_FILTERS))
  81.         return printf("\n\nОшибка: Указан неверный ID фильтра. [Минимальный ID: 0] [Максимальный: %d]\nФильтр \"%s\" не создан\n\n", MAX_REGISTERED_ID_FILTERS-1, filter_name), INVALID_SS_FILTER_ID;
  82.     if(dss_info[filterskin_id][registered_id_filters] == false)
  83.     {
  84.         dss_info[filterskin_id][registered_id_filters] = true;
  85.         dss_info[filterskin_id][registered_name_filters][0] = '\0';
  86.         strcat(dss_info[filterskin_id][registered_name_filters], filter_name);
  87.         return filterskin_id;
  88.     }
  89.     return printf("\n\nОшибка: Обнаружена попытка записать фильтр (\"%s\") в занятый слот (%d).\nФильтр не создан.\n\n", filter_name, filterskin_id), INVALID_SS_FILTER_ID;
  90. }
  91.  
  92. /*
  93.     Функция обрабатывает созданный фильтр (используется в OnPlayerRequestClass) по указанному ID.
  94.  
  95.     Для использования существует удобный макрос, отсекающий ненужные параметры:
  96.         CallSelectorFilterByID(skin_filter_id, skins_array[])
  97.  
  98.     Возвращает:
  99.         1                       - В случае успешной обработки кода (фильтр создан и совпадает с тем, что включен у игрока)
  100.         INVALID_SS_FILTER_ID    - Фильтр не найден
  101.  
  102.     Параметры:
  103.         skin_filter_id          - ID фильтра для обработки
  104.         skins_array[]           - Массив, в котором хранятся скины для фильтра
  105. */
  106. stock CallSelectorFilterByID__(playerid, classid, skin_filter_id, const skins_array[], size = sizeof skins_array)
  107. {
  108.     if(!(0 <= skin_filter_id < MAX_REGISTERED_ID_FILTERS))
  109.         return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Обнаружена попытка обратиться к невалидному ID фильтра."), INVALID_SS_FILTER_ID;
  110.  
  111.     if(GetPVarInt(playerid, "Skins_Filter") != skin_filter_id)
  112.         return INVALID_SS_FILTER_ID;
  113.  
  114.     if(dss_info[skin_filter_id][registered_id_filters] == false)
  115.         return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Обнаружена попытка обратиться к несуществующему ID фильтра."), INVALID_SS_FILTER_ID;
  116.  
  117.     new bool:direction,
  118.         next_classid = GetPVarInt(playerid, "Next_ClassID"),
  119.         last_classid = GetPVarInt(playerid, "Last_ClassID");
  120.  
  121.     if(GetPVarInt(playerid, "SkinSelect_Death") == 2)
  122.     {
  123.         DeletePVar(playerid, "SkinSelect_Death");
  124.         for(new i, s = dss_player_skin[playerid]; i < size; i++)
  125.         {
  126.             if(s != skins_array[i]) continue;
  127.             SetPVarInt(playerid, "Next_ClassID", i);
  128.             SetPVarInt(playerid, "Last_ClassID", classid);
  129.             SetPlayerSkin(playerid, s);
  130.             break;
  131.         }
  132.     }
  133.     else
  134.     {
  135.         if(last_classid == -1) direction = (classid == 1 ? true : false);
  136.         else
  137.         {
  138.             if(classid > last_classid)
  139.             {
  140.                 if(last_classid != 0 || classid != 309) direction = true;
  141.                 else direction = false;
  142.                 //Игрок нажимает кнопку ">>"
  143.             }
  144.             else if(classid < last_classid)
  145.             {
  146.                 if(last_classid != 309 || classid != 0) direction = false;
  147.                 else direction = true;
  148.                 //Игрок нажимает кнопку "<<"
  149.             }
  150.         }
  151.  
  152.         if(last_classid == -1)
  153.         {
  154.             SetPlayerSkin(playerid, skins_array[0]);
  155.             next_classid = 0;
  156.         }
  157.         else
  158.         {
  159.             if(direction == true)
  160.             {
  161.                 if(next_classid == size-1) next_classid = 0;
  162.                 else if(next_classid > size-1) next_classid = 1;
  163.                 else next_classid++;
  164.             }
  165.             else
  166.             {
  167.                 if(next_classid <= 0 || next_classid > size-1) next_classid = size-1;
  168.                 else next_classid--;
  169.             }
  170.             SetPlayerSkin(playerid, skins_array[next_classid]);
  171.         }
  172.         SetPVarInt(playerid, "Next_ClassID", next_classid);
  173.         SetPVarInt(playerid, "Last_ClassID", classid);
  174.     }
  175.     return 1;
  176. }
  177.  
  178.  
  179. /*
  180.     Функция обрабатывает созданный фильтр (используется в OnPlayerRequestClass) по указанному имени.
  181.  
  182.     Для использования существует удобный макрос, отсекающий ненужные параметры:
  183.         CallSelectorFilterByName(_filter_name[], skins_array[])
  184.  
  185.     Возвращает:
  186.         1                       - В случае успешной обработки кода (фильтр создан и совпадает с тем, что включен у игрока)
  187.         INVALID_SS_FILTER_ID    - Фильтр не найден
  188.  
  189.     Параметры:
  190.         _filter_name[]          - Имя фильтра для обработки
  191.         skins_array[]           - Массив, в котором хранятся скины для фильтра
  192. */
  193. stock CallSelectorFilterByName__(playerid, classid, const _filter_name[], const skins_array[], size = sizeof skins_array)
  194. {
  195.     if(isnull(_filter_name))
  196.         return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Обнаружена попытка обратиться к фильтру без указания его имени."), INVALID_SS_FILTER_ID;
  197.  
  198.     new skin_filter_id = -1;
  199.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  200.     {
  201.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  202.         {
  203.             skin_filter_id = i;
  204.             break;
  205.         }
  206.     }
  207.  
  208.     if(skin_filter_id == -1)
  209.     {
  210.         new dss_string[48+MAX_REGISTERED_NAME_FILTERS+1];
  211.         format(dss_string, sizeof(dss_string), "Ошибка: {FFFFFF}Фильтр с именем \"%s\" не существует", _filter_name);
  212.         return SendClientMessage(playerid, 0xFF0000FF, dss_string), INVALID_SS_FILTER_ID;
  213.     }
  214.  
  215.     if(GetPVarInt(playerid, "Skins_Filter") != skin_filter_id)
  216.         return INVALID_SS_FILTER_ID;
  217.  
  218.     new bool:direction,
  219.         next_classid = GetPVarInt(playerid, "Next_ClassID"),
  220.         last_classid = GetPVarInt(playerid, "Last_ClassID");
  221.  
  222.     if(GetPVarInt(playerid, "SkinSelect_Death") == 2)
  223.     {
  224.         DeletePVar(playerid, "SkinSelect_Death");
  225.         for(new i, s = dss_player_skin[playerid]; i < size; i++)
  226.         {
  227.             if(s != skins_array[i]) continue;
  228.             SetPVarInt(playerid, "Next_ClassID", i);
  229.             SetPVarInt(playerid, "Last_ClassID", classid);
  230.             SetPlayerSkin(playerid, s);
  231.             break;
  232.         }
  233.     }
  234.     else
  235.     {
  236.         if(last_classid == -1) direction = (classid == 1 ? true : false);
  237.         else
  238.         {
  239.             if(classid > last_classid)
  240.             {
  241.                 if(last_classid != 0 || classid != 309) direction = true;
  242.                 else direction = false;
  243.                 //Игрок нажимает кнопку ">>"
  244.             }
  245.             else if(classid < last_classid)
  246.             {
  247.                 if(last_classid != 309 || classid != 0) direction = false;
  248.                 else direction = true;
  249.                 //Игрок нажимает кнопку "<<"
  250.             }
  251.         }
  252.  
  253.         if(last_classid == -1)
  254.         {
  255.             SetPlayerSkin(playerid, skins_array[0]);
  256.             next_classid = 0;
  257.         }
  258.         else
  259.         {
  260.             if(direction == true)
  261.             {
  262.                 if(next_classid == size-1) next_classid = 0;
  263.                 else if(next_classid > size-1) next_classid = 1;
  264.                 else next_classid++;
  265.             }
  266.             else
  267.             {
  268.                 if(next_classid <= 0 || next_classid > size-1) next_classid = size-1;
  269.                 else next_classid--;
  270.             }
  271.             SetPlayerSkin(playerid, dss_player_skin[playerid] = skins_array[next_classid]);
  272.         }
  273.         SetPVarInt(playerid, "Next_ClassID", next_classid);
  274.         SetPVarInt(playerid, "Last_ClassID", classid);
  275.     }
  276.     return 1;
  277. }
  278.  
  279. /*
  280.     Функция изменяет фильтр по умолчанию
  281.  
  282.     Возвращает:
  283.         ID фильтра               - Фильтр успешно изменён
  284.         INVALID_SS_FILTER_ID    - Фильтр не найден
  285.  
  286.     Параметры:
  287.         filterid                - ID фильтра для установки по умолчанию
  288. */
  289. stock SetDefaultSelectorFilter_ID(filterid)
  290. {
  291.     if(!(0 <= filterid < MAX_REGISTERED_ID_FILTERS))
  292.         return printf("Ошибка: {FFFFFF}Обнаружена попытка изменить фильтр по умолчанию на невалидный ID (%d | Мин: 0 | Макс: %d).", filterid, MAX_REGISTERED_ID_FILTERS-1), INVALID_SS_FILTER_ID;
  293.     else if(dss_info[filterid][registered_id_filters] == false)
  294.         return print("Ошибка: {FFFFFF}Обнаружена попытка изменить фильтр по умолчанию на несущестующий."),INVALID_SS_FILTER_ID;
  295.     else
  296.         return default_skinfilter = filterid;
  297. }
  298.  
  299. /*
  300.     Функция изменяет фильтр по умолчанию
  301.  
  302.     Возвращает:
  303.         ID фильтра               - Фильтр успешно изменён
  304.         INVALID_SS_FILTER_ID    - Фильтр не найден
  305.  
  306.     Параметры:
  307.         _filter_name[]          - Имя фильтра для установки по умолчанию
  308. */
  309. stock SetDefaultSelectorFilter_Name(const _filter_name[])
  310. {
  311.     if(isnull(_filter_name))
  312.         return print("Ошибка: {FFFFFF}Обнаружена попытка изменить фильтр по умолчанию без указания имени фильтра."), INVALID_SS_FILTER_ID;
  313.  
  314.     new filterid = -1;
  315.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  316.     {
  317.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  318.         {
  319.             filterid = i;
  320.             break;
  321.         }
  322.     }
  323.  
  324.     if(filterid == -1)
  325.     {
  326.         return printf("Ошибка: {FFFFFF}Фильтр с именем \"%s\" не существует", _filter_name), INVALID_SS_FILTER_ID;
  327.     }
  328.     else
  329.         return default_skinfilter = filterid;
  330. }
  331.  
  332. /*
  333.     Функция возвращает ID фильтра, установленного по умолчанию
  334.  
  335.     Возвращает:
  336.         ID фильтра
  337.  
  338.     Параметры:
  339.         ---
  340. */
  341. stock GetDefaultSelectorFilter()
  342. {
  343.     return default_skinfilter;
  344. }
  345.  
  346. /*
  347.     Функция удаляет указанный фильтр. Фильтр указывается в виде ID
  348.  
  349.     Возвращает:
  350.         ID фильтра               - Фильтр успешно удалён
  351.         INVALID_SS_FILTER_ID    - Фильтр не найден
  352.  
  353.     Параметры:
  354.         filterid                - ID фильтра для удаления
  355. */
  356. stock DeleteSelectorFilter_ID(filterid)
  357. {
  358.     if(!(0 <= filterid < MAX_REGISTERED_ID_FILTERS))
  359.         return printf("Ошибка: {FFFFFF}Обнаружена попытка удалить фильтр с указанием невалидного ID (%d | Мин: 0 | Макс: %d).", filterid, MAX_REGISTERED_ID_FILTERS-1), INVALID_SS_FILTER_ID;
  360.     else if(dss_info[filterid][registered_id_filters] == false)
  361.         return print("Ошибка: {FFFFFF}Обнаружена попытка удалить несуществующий фильтр."),INVALID_SS_FILTER_ID;
  362.     else
  363.     {
  364.         dss_info[filterid][registered_id_filters] = false;
  365.         dss_info[filterid][registered_name_filters][0] = '\0';
  366.     }
  367.     return filterid;
  368. }
  369.  
  370. /*
  371.     Функция удаляет указанный фильтр. Фильтр указывается в виде имени
  372.  
  373.     Возвращает:
  374.         ID фильтра               - Фильтр успешно удалён
  375.         INVALID_SS_FILTER_ID    - Фильтр не найден
  376.  
  377.     Параметры:
  378.         _filter_name[]          - Имя фильтра для удаления
  379. */
  380. stock DeleteSelectorFilter_Name(const _filter_name[])
  381. {
  382.     if(isnull(_filter_name))
  383.         return  print("Ошибка: {FFFFFF}Обнаружена попытка удалить фильтр без указания его имени."), INVALID_SS_FILTER_ID;
  384.  
  385.     new filterid = -1;
  386.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  387.     {
  388.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  389.         {
  390.             filterid = i;
  391.             break;
  392.         }
  393.     }
  394.  
  395.     if(filterid == -1)
  396.         return  print("Ошибка: {FFFFFF}Обнаружена попытка удалить несуществующий фильтр."), INVALID_SS_FILTER_ID;
  397.     else
  398.     {
  399.         dss_info[filterid][registered_id_filters] = false;
  400.         dss_info[filterid][registered_name_filters][0] = '\0';
  401.     }
  402.     return filterid;
  403. }
  404.  
  405. /*
  406.     Функция производит поиск фильтра по ID
  407.  
  408.     Возвращает:
  409.         Имя фильтра           - Фильтр существует
  410.         "Error"                 - Фильтр не найден
  411.  
  412.     Параметры:
  413.         filterid                - ID фильтра для поиска
  414. */
  415. stock GetSelectorFilterID(filterid)
  416. {
  417.     new dss_filter_string[MAX_REGISTERED_NAME_FILTERS+1] = "Error";
  418.     if(!(0 <= filterid < MAX_REGISTERED_ID_FILTERS) || dss_info[filterid][registered_id_filters] == false)
  419.         return dss_filter_string;
  420.     else
  421.     {
  422.         dss_filter_string[0] = '\0';
  423.         strcat(dss_filter_string, dss_info[filterid][registered_name_filters]);
  424.         return dss_filter_string;
  425.     }
  426. }
  427.  
  428. /*
  429.     Функция производит поиск фильтра по имени
  430.  
  431.     Возвращает:
  432.         ID фильтра               - Фильтр существует
  433.         INVALID_SS_FILTER_ID    - Фильтр не найден
  434.  
  435.     Параметры:
  436.         _filter_name[]          - Имя фильтра для поиска
  437. */
  438. stock GetSelectorFilterName(const _filter_name[])
  439. {
  440.     if(isnull(_filter_name))
  441.         return INVALID_SS_FILTER_ID;
  442.  
  443.     new filterid = -1;
  444.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  445.     {
  446.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  447.         {
  448.             filterid = i;
  449.             break;
  450.         }
  451.     }
  452.  
  453.     if(filterid == -1 ||  dss_info[filterid][registered_id_filters] == false)
  454.         return INVALID_SS_FILTER_ID;
  455.     else
  456.         return filterid;
  457. }
  458.  
  459. /*
  460.     Функция проверяет существование (валидность) фильтра. Фильтр указывается в виде ID
  461.  
  462.     Возвращает:
  463.         1                       - Фильтр существует
  464.         INVALID_SS_FILTER_ID    - Фильтр не найден
  465.  
  466.     Параметры:
  467.         filterid                - ID фильтра для поиска
  468. */
  469. stock IsSelectorFilterValid_ID(filterid)
  470. {
  471.     if(!(0 <= filterid < MAX_REGISTERED_ID_FILTERS) || dss_info[filterid][registered_id_filters] == false)
  472.         return INVALID_SS_FILTER_ID;
  473.     else
  474.         return 1;
  475. }
  476.  
  477. /*
  478.     Функция проверяет существование (валидность) фильтра. Фильтр указывается в виде имени
  479.  
  480.     Возвращает:
  481.         1                       - Фильтр существует
  482.         INVALID_SS_FILTER_ID    - Фильтр не найден
  483.  
  484.     Параметры:
  485.         _filter_name[]          - Имя фильтра для поиска
  486. */
  487. stock IsSelectorFilterValid_Name(const _filter_name[])
  488. {
  489.     if(isnull(_filter_name))
  490.         return INVALID_SS_FILTER_ID;
  491.  
  492.     new filterid = -1;
  493.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  494.     {
  495.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  496.         {
  497.             filterid = i;
  498.             break;
  499.         }
  500.     }
  501.  
  502.     if(filterid == -1 ||  dss_info[filterid][registered_id_filters] == false)
  503.         return INVALID_SS_FILTER_ID;
  504.     else
  505.         return 1;
  506. }
  507.  
  508. /*
  509.     Функция позволяет изменить ID фильтра для игрока, указав ID фильтра
  510.  
  511.     Возвращает:
  512.         1                       - Фильтр успешно изменён
  513.         INVALID_SS_FILTER_ID    - Произошла ошибка (игрок оффлайн/фильтр не существует и т.п.)
  514.  
  515.     Параметры:
  516.         playerid                - ID игрока, которому нужно изменить фильтр
  517.         filterid                - ID фильтра, который нужно установить игроку
  518.         skins_array[]           - Массив, в котором хранятся скины для фильтра
  519. */
  520. stock SetSelectorFilterForPlayer_ID(playerid, filterid, const skins_array[])
  521. {
  522.     if(filterid == INVALID_SS_FILTER_ID
  523.         || !IsPlayerConnected(playerid)
  524.         || dss_info[filterid][registered_id_filters] == false)
  525.             return INVALID_SS_FILTER_ID;
  526.     else
  527.     {
  528.         if(GetPVarInt(playerid, "SkinSelect_PlayerStatus"))
  529.             SetPlayerSkin(playerid, dss_player_skin[playerid] = skins_array[0]);
  530.  
  531.         DeletePVar(playerid, "Next_ClassID");
  532.         SetPVarInt(playerid, "Last_Skins_Filter", GetPVarInt(playerid, "Skins_Filter"));
  533.         SetPVarInt(playerid, "Skins_Filter", filterid);
  534.     }
  535.     return 1;
  536. }
  537.  
  538. /*
  539.     Функция позволяет изменить ID фильтра для игрока, указав имя фильтра
  540.  
  541.     Возвращает:
  542.         1                       - Фильтр успешно изменён
  543.         INVALID_SS_FILTER_ID    - Произошла ошибка (игрок оффлайн/фильтр не существует и т.п.)
  544.  
  545.     Параметры:
  546.         playerid                - ID игрока, которому нужно изменить фильтр
  547.         filter_name[]           - Имя фильтра, который нужно установить игроку
  548.         skins_array[]           - Массив, в котором хранятся скины для фильтра
  549. */
  550. stock SetSelectorFilterForPlayer_Name(playerid, const _filter_name[], const skins_array[])
  551. {
  552.     if(isnull(_filter_name))
  553.         return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Обнаружена попытка изменить фильтр для игрока без указания имени фильтра."), INVALID_SS_FILTER_ID;
  554.  
  555.     if(!IsPlayerConnected(playerid))
  556.             return INVALID_SS_FILTER_ID;
  557.  
  558.     new filterid = -1;
  559.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  560.     {
  561.         if(!strcmp(dss_info[i][registered_name_filters], _filter_name, true))
  562.         {
  563.             filterid = i;
  564.             break;
  565.         }
  566.     }
  567.  
  568.     if(filterid == -1)
  569.     {
  570.         new dss_string[48+MAX_REGISTERED_NAME_FILTERS+1];
  571.         format(dss_string, sizeof(dss_string), "Ошибка: {FFFFFF}Фильтр с именем \"%s\" не существует", _filter_name);
  572.         return SendClientMessage(playerid, 0xFF0000FF, dss_string), INVALID_SS_FILTER_ID;
  573.     }
  574.     else
  575.     {
  576.         if(GetPVarInt(playerid, "SkinSelect_PlayerStatus"))
  577.             SetPlayerSkin(playerid, dss_player_skin[playerid] = skins_array[0]);
  578.  
  579.         DeletePVar(playerid, "Next_ClassID");
  580.         SetPVarInt(playerid, "Last_Skins_Filter", GetPVarInt(playerid, "Skins_Filter"));
  581.         SetPVarInt(playerid, "Skins_Filter", filterid);
  582.     }
  583.     return 1;
  584. }
  585.  
  586. /*
  587.     Функция позволяет узнать ID фильтра, который установлен у игрока
  588.  
  589.     Возвращает:
  590.         ID фильтра               - Игрок онлайн
  591.         INVALID_SS_FILTER_ID    - Игрок оффлайн
  592.  
  593.     Параметры:
  594.         playerid                - ID игрока, фильтр которого нужно узнать
  595. */
  596. stock GetSelectorFilterForPlayer(playerid)
  597. {
  598.     if(!IsPlayerConnected(playerid))
  599.         return INVALID_SS_FILTER_ID;
  600.     return GetPVarInt(playerid, "Skins_Filter");
  601. }
  602.  
  603. /*
  604.     Функция возвращает первый свободный слот для фильтра
  605.  
  606.     Возвращает:
  607.         ID фильтра
  608.  
  609.     Параметры:
  610. */
  611. stock GetSelectorFilterFreeID()
  612. {
  613.     for(new i; i < MAX_REGISTERED_ID_FILTERS; i++)
  614.     {
  615.         if(dss_info[i][registered_id_filters] == false) return i;
  616.     }
  617.     return INVALID_SS_FILTER_ID;
  618. }
  619. /*
  620.     ================================================================================================
  621.     ================================================================================================
  622.     ================================================================================================
  623. */
  624. public OnGameModeInit()
  625. {
  626.     for(new i = 1, s = 0; i <= 311; i++, s++)
  627.     {
  628.         switch(i)
  629.         {
  630.             case 74: continue;
  631.             default:
  632.             {
  633.                 AddPlayerClass(i, 2016.5792, -1281.3159, 23.9816, 52.6876, 0, 0, 0, 0, 0, 0);
  634.             }
  635.         }
  636.     }
  637.     #if defined dss_OnGameModeInit
  638.         return dss_OnGameModeInit();
  639.     #else
  640.         return 1;
  641.     #endif
  642. }
  643. #if defined _ALS_OnGameModeInit
  644.     #undef OnGameModeInit
  645. #else
  646.     #define _ALS_OnGameModeInit
  647. #endif
  648. #define OnGameModeInit dss_OnGameModeInit
  649. #if defined dss_OnGameModeInit
  650.     forward dss_OnGameModeInit();
  651. #endif
  652.  
  653.  
  654. public OnPlayerConnect(playerid)
  655. {
  656.     SetPVarInt(playerid, "Last_Skins_Filter", default_skinfilter);
  657.     SetPVarInt(playerid, "Skins_Filter", default_skinfilter);
  658.     SetPVarInt(playerid, "Last_ClassID", -1);
  659.     SetPVarInt(playerid, "SkinSelect_PlayerStatus", 1);
  660.     #if defined dss_OnPlayerConnect
  661.         return dss_OnPlayerConnect(playerid);
  662.     #else
  663.         return 1;
  664.     #endif
  665. }
  666. #if defined _ALS_OnPlayerConnect
  667.     #undef OnPlayerConnect
  668. #else
  669.     #define _ALS_OnPlayerConnect
  670. #endif
  671. #define OnPlayerConnect dss_OnPlayerConnect
  672. #if defined dss_OnPlayerConnect
  673.     forward dss_OnPlayerConnect(playerid);
  674. #endif
  675.  
  676.  
  677. public OnPlayerRequestClass(playerid, classid)
  678. {
  679.     OnPlayerSelectedSkin(playerid, classid);
  680.     #if defined dss_OnPlayerRequestClass
  681.         return dss_OnPlayerRequestClass(playerid, classid);
  682.     #else
  683.         return 1;
  684.     #endif
  685. }
  686. #if defined _ALS_OnPlayerRequestClass
  687.     #undef OnPlayerRequestClass
  688. #else
  689.     #define _ALS_OnPlayerRequestClass
  690. #endif
  691. #define OnPlayerRequestClass dss_OnPlayerRequestClass
  692. #if defined dss_OnPlayerRequestClass
  693.     forward dss_OnPlayerRequestClass(playerid, classid);
  694. #endif
  695.  
  696. public OnPlayerSpawn(playerid)
  697. {
  698.     if(GetPVarInt(playerid, "SkinSelect_PlayerStatus"))
  699.     {
  700.         DeletePVar(playerid, "SkinSelect_PlayerStatus");
  701.         SetPlayerSkin(playerid, dss_player_skin[playerid]);
  702.     }
  703.     #if defined dss_OnPlayerSpawn
  704.         return dss_OnPlayerSpawn(playerid);
  705.     #else
  706.         return 1;
  707.     #endif
  708. }
  709. #if defined _ALS_OnPlayerSpawn
  710.     #undef OnPlayerSpawn
  711. #else
  712.     #define _ALS_OnPlayerSpawn
  713. #endif
  714. #define OnPlayerSpawn dss_OnPlayerSpawn
  715. #if defined dss_OnPlayerSpawn
  716.     forward dss_OnPlayerSpawn(playerid);
  717. #endif
  718.  
  719.  
  720.  
  721. public OnPlayerDeath(playerid, killerid, reason)
  722. {
  723.     SetPVarInt(playerid, "SkinSelect_PlayerStatus", 2);
  724.     #if defined dss_OnPlayerDeath
  725.         return dss_OnPlayerDeath(playerid, killerid, reason);
  726.     #else
  727.         return 1;
  728.     #endif
  729. }
  730. #if defined _ALS_OnPlayerDeath
  731.     #undef OnPlayerDeath
  732. #else
  733.     #define _ALS_OnPlayerDeath
  734. #endif
  735. #define OnPlayerDeath dss_OnPlayerDeath
  736. #if defined dss_OnPlayerDeath
  737.     forward dss_OnPlayerDeath(playerid, killerid, reason);
  738. #endif
  739.  
  740.  
  741. stock dss_AddPlayerClass()
  742. {
  743.     print("\n\n\n\nSkin Selector Error: Обнаружена функция AddPlayerClass.\nИспользование данной функции приведёт к ошибкам в работе инклуда \"Skin Selector\"\n");
  744.     return 1;
  745. }
  746. #if defined _ALS_AddPlayerClass
  747.     #undef AddPlayerClass
  748. #else
  749.     #define _ALS_AddPlayerClass
  750. #endif
  751.  
  752. #define AddPlayerClass(%1) dss_AddPlayerClass()
  753.  
  754. stock dss_AddPlayerClassEx()
  755. {
  756.     print("\n\n\n\nSkin Selector Error: Обнаружена функция AddPlayerClassEx.\nИспользование данной функции приведёт к ошибкам в работе инклуда \"Skin Selector\"\n");
  757.     return 1;
  758. }
  759. #if defined _ALS_AddPlayerClassEx
  760.     #undef AddPlayerClassEx
  761. #else
  762.     #define _ALS_AddPlayerClassEx
  763. #endif
  764.  
  765. #define AddPlayerClassEx(%1) dss_AddPlayerClassEx()
  766.  
  767.  
  768. stock dss_ForceClassSelection(playerid)
  769. {
  770.     SetPVarInt(playerid, "SkinSelect_PlayerStatus", 3);
  771.     return ForceClassSelection(playerid);
  772. }
  773. #if defined _ALS_ForceClassSelection
  774.     #undef ForceClassSelection
  775. #else
  776.     #define _ALS_ForceClassSelection
  777. #endif
  778.  
  779. #define ForceClassSelection dss_ForceClassSelection
  780.  
  781.  
  782. forward OnPlayerSelectedSkin(playerid, classid);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement