[STOCK] Проверка моделей, случайные модели игроков

Программирование, примеры собственного кода. Синтаксис, помощь новичкам и пр. примеры..
Ответить
Аватара пользователя
*** ROOT ***
Администратор
Администратор
Сообщения: 96
Зарегистрирован: 02 дек 2014, 12:38
Откуда: Шелехов
Возраст: 29
Контактная информация:
Статус: Не в сети

[STOCK] Проверка моделей, случайные модели игроков

Сообщение *** ROOT *** » 18 апр 2017, 21:38

Описание: очень часто на своих серверах приходится работать со сменой команд и заменой моделей игроков, и когда необходимо восстановить модель по умолчанию согласно команде игрока, каждый раз городишь кучу кода. Избежать этого можно используя уже готовую функцию. Например этот сток позволяет узнать к какой команде пренадлежит текущая моделька игрока new CsTeams: plTeam = whatIsTheUserMdl(client) Если же задать параметр
forceToSetNewModel как true вторым параметром, тогда можно принудительно обновить модель игрока и так же получить индекс его команды. Напомню что возвращаемое значение функции - это результат массива CsTeams.

  1. /*
  2. ** Check player model, forceToSetNewModel == true
  3. ** checks team and fix players' model if needed..
  4. ** ****************************************************
  5. ** Return team as mdl
  6. **
  7. **      1 =>   TT MDL
  8. **      2 =>   CT MDL
  9. **      3 =>  VIP MDL
  10. **
  11. ** *************************************************
  12. */
  13. stock CsTeams: whatIsTheUserMdl(id, bool: forceToSetNewModel = false, bool: iNforceCheckTeam = false)
  14. {
  15.     new bufferUserMdl[16] = "", CsTeams: userMdlResult = CS_TEAM_UNASSIGNED;
  16.     new TeamBufferSize = sizeof CS_TT_PLAYER_MDLS - 1;
  17.    
  18.     new CsTeams: userTeam = cs_get_user_team(id);
  19.    
  20.     cs_reset_user_model(id);
  21.    
  22.     cs_get_user_model(id, bufferUserMdl, sizeof bufferUserMdl - 1);
  23.    
  24.     for(new i = 0; i <= TeamBufferSize; ++i)
  25.     {
  26.         if((containi(bufferUserMdl, CS_TT_PLAYER_MDLS[i]) != -1) || (containi(bufferUserMdl, CS_CT_PLAYER_MDLS[i]) != -1))
  27.         {
  28.             userMdlResult = ((containi(bufferUserMdl, CS_TT_PLAYER_MDLS[i]) != -1) ? CS_TEAM_T : CS_TEAM_CT);
  29.             break;
  30.         }
  31.     }
  32.    
  33.     if(forceToSetNewModel) 
  34.     {
  35.         if((userTeam != userMdlResult) && ((userTeam == CS_TEAM_T) || (userTeam == CS_TEAM_CT)))
  36.         {
  37.             if(userTeam == CS_TEAM_T)
  38.                 cs_set_user_model(id, CS_TT_PLAYER_MDLS[random_num(0, TeamBufferSize)]);
  39.            
  40.             if(userTeam == CS_TEAM_CT)
  41.                 cs_set_user_model(id, CS_CT_PLAYER_MDLS[random_num(0, TeamBufferSize)]);
  42.            
  43.             return userTeam;
  44.         }
  45.     }
  46.    
  47.     else
  48.     {      
  49.         if(iNforceCheckTeam && (userMdlResult != userTeam))
  50.             userMdlResult = userTeam;
  51.     }
  52.    
  53.     return userMdlResult;
  54. }


Где реально его можно использовать?

Как минимум в spawn событии, когда игроки появляются в новом раунде. Делать это можно для того если ленишься проверять каждую модельку отдельно или просто для того что бы рандомизировать модельки игроков, постоянно перемешивая их...

P.S. да, чуть не забыл. Необходимо еще 2 массива. Один для КТ, другой для ТТ.

new CS_CT_PLAYER_MDLS[4][16] = { "gign", "gsg9", "sas", "urban" };
new CS_TT_PLAYER_MDLS[4][16] = { "arctic", "guerilla", "leet", "terror" };

Это стандартные модели, если есть свои, можете добавить своих. Главное что бы их было поровну в обеих командах!

Пример: допустим у нас есть глобальная переменная которая хранит команду i_NNTeam, мы записали её в какой то момент. При респавне игрока мы сверяем команду игрока и команду модельки которую он записал ранее. Если всё ровно: ничего не делаем, если нет - стоком меняем её.. вот и всё.

Примеры использования





Ответить