Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Функция ChangeClientTeam и mp_limitteams
Функция ChangeClientTeam и mp_limitteams
Admin0912 Дата: Пятница, 01.02.2013, 20:32:31 | Сообщение # 1
Сообщений: 57
Репутация: 3 [ +/- ]
Подскажите как сделать, чтобы функция
Код
ChangeClientTeam
учитывала значение mp_limitteams
Поясню. При написании игроком одного словечка ему меняется команда, игнорируя значение mp_limitteams. Мжет так вся команда перейти за другую и 0 игроков останется в противоположной :D
 
scorpion2904 Дата: Пятница, 01.02.2013, 21:24:28 | Сообщение # 2
Сообщений: 68
Репутация: 5 [ +/- ]
Так вроде бы должно работать:

Код
#include <sourcemod>

new t = 0; // Количество t
new ct = 0; // Количество ct

public OnPluginStart()
{
  RegConsoleCmd("sm_team", team); // Команда для смены команды
}

public Action:team(client,args){
  check(); // Вызов функции
  new Handle:limit = FindConVar("mp_limitteams"); // Поиск квара
  new team1 = t - ct; // Разность между количеством t и ct
  new team2 = ct - t; // Разность между количеством ct и t
  if(GetClientTeam(client) == 2 && GetConVarInt(limit) >= team2){ /* Если значение mp_limitteams больше разности  ct и t, то происходит смена команды*/
  ChangeClientTeam(client, 3)
  }
  if(GetClientTeam(client) == 3 && GetConVarInt(limit) >= team1){ /* Если значение mp_limitteams больше разности  t и ct, то происходит смена команды*/
  ChangeClientTeam(client, 2)
  }
   
}
    
public check(){ //Функция, проверяющая количество t и ct
  for (new client = 1; client <= MaxClients; client++) {
   if(GetClientTeam(client) == 2) t += 1;
   if(GetClientTeam(client) == 3) ct += 1;
  }
}  
 
Admin0912 Дата: Суббота, 02.02.2013, 11:01:34 | Сообщение # 3
Сообщений: 57
Репутация: 3 [ +/- ]
scorpion2904,
Код
L 02/02/2013 - 14:00:30: "blabla<2><STEAM_0:1:0000000><CT>" say "!team"
L 02/02/2013 - 14:00:30: [SM] Native "GetClientTeam" reported: Client 4 is not i
n game
L 02/02/2013 - 14:00:30: [SM] Displaying call stack trace for plugin "limitteams
.smx":
L 02/02/2013 - 14:00:30: [SM] [0] Line 27, D:\servers\TEST\75\css\cstrike\add
ons\sourcemod\scripting\limitteams.sp::check()
L 02/02/2013 - 14:00:30: [SM] [1] Line 12, D:\servers\TEST\75\css\cstrike\add
ons\sourcemod\scripting\limitteams.sp::team()


Сообщение отредактировал Admin0912 - Суббота, 02.02.2013, 11:02:51
 
scorpion2904 Дата: Суббота, 02.02.2013, 11:12:13 | Сообщение # 4
Сообщений: 68
Репутация: 5 [ +/- ]
Так ошибок не должно быть:

Код
#include <sourcemod>

new t = 0; // Количество t
new ct = 0; // Количество ct

public OnPluginStart()
{
  RegConsoleCmd("sm_team", team); // Команда для смены команды
}

public Action:team(client,args){
  check(); // Вызов функции
  new Handle:limit = FindConVar("mp_limitteams"); // Поиск квара
  new team1 = t - ct; // Разность между количеством t и ct
  new team2 = ct - t; // Разность между количеством ct и t
  if(IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client)) {
   if(GetClientTeam(client) == 2 && GetConVarInt(limit) >= team2){ /* Если значение mp_limitteams больше разности  ct и t, то происходит смена команды*/
   ChangeClientTeam(client, 3)
   }
   if(GetClientTeam(client) == 3 && GetConVarInt(limit) >= team1){ /* Если значение mp_limitteams больше разности  t и ct, то происходит смена команды*/
   ChangeClientTeam(client, 2)
   }
  }
}
    
public check(){ //Функция, проверяющая количество t и ct
  for (new client = 1; client <= MaxClients; client++) {
  if(IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client)) {
   if(GetClientTeam(client) == 2) t += 1;
   if(GetClientTeam(client) == 3) ct += 1;
  }
  }
}  
 
Admin0912 Дата: Суббота, 02.02.2013, 12:21:21 | Сообщение # 5
Сообщений: 57
Репутация: 3 [ +/- ]
scorpion2904, Не работает. Пробовал даже убрать !IsFakeClient(client) толку нет


Сообщение отредактировал Admin0912 - Суббота, 02.02.2013, 12:46:52
 
TEIN Дата: Суббота, 02.02.2013, 12:54:14 | Сообщение # 6
Сообщений: 568
Репутация: 78 [ +/- ]
Попроб

Прикрепления: forum.sp(0.4 Kb)
 
Admin0912 Дата: Суббота, 02.02.2013, 16:59:56 | Сообщение # 7
Сообщений: 57
Репутация: 3 [ +/- ]
DoK_1997, Вообще не реагирует на команду switch_team_t
Во сделал.
Ты перепутал наверно вместо > поставил < и весто / поставил -

Код
#include <sourcemod>
#include <sdktools_functions>

new Handle:CVAR_TEAM_LIMIT;

public OnPluginStart()   
{
   CVAR_TEAM_LIMIT = FindConVar("mp_limitteams");
   RegConsoleCmd("switch_team_t", CallBack);
}

public Action:CallBack(client, args)
{
   if (client > 0)
   {
    if (GetClientTeam(client) != 2 && (GetConVarInt(CVAR_TEAM_LIMIT) > (GetTeamClientCount(2) / GetTeamClientCount(3))))
    {
     ChangeClientTeam(client, 2);
    }
   }
   return Plugin_Handled;
}

Соотношение команд же долдно делится друг на друга чтобы получить так называемый ratio и значение квара mp_limitteams должно быть выше чем значение T/CT


Сообщение отредактировал Admin0912 - Суббота, 02.02.2013, 17:23:08
 
scorpion2904 Дата: Суббота, 02.02.2013, 17:09:26 | Сообщение # 8
Сообщений: 68
Репутация: 5 [ +/- ]
Попробуй так:

Прикрепления: team.sp(0.6 Kb)
 
TEIN Дата: Суббота, 02.02.2013, 18:06:53 | Сообщение # 9
Сообщений: 568
Репутация: 78 [ +/- ]
Зачем мне соотношение, если мне нужна разность?
 
Admin0912 Дата: Суббота, 02.02.2013, 19:15:10 | Сообщение # 10
Сообщений: 57
Репутация: 3 [ +/- ]
Цитата (DoK_1997)
Зачем мне соотношение, если мне нужна разность?

и как это будет выглядеть?
mp_limitteams 1
в командах по 2 игрока(2x2)
игрок КТ пишет switch_team_t
идет подсчет 2-2 =0 а это < значения mp_limitteams равного 1
В итоге игрок переходит за Т и становится 1 на 3!
Так что тут нужно деление (/)
 
TEIN Дата: Воскресенье, 03.02.2013, 07:01:21 | Сообщение # 11
Сообщений: 568
Репутация: 78 [ +/- ]
Например
Игроков за Террористов: 6
Игроков за Спецназ: 5
Игрок напишет команду
6т - 5кт = 1
6т - 6кт = 0
5т - 6кт = -1
Теперь самое главное условие поставить
Если mp_limitteams = 1, то
Ставим > условие, так?
Только нужно еще условие, если количество Т = Количество КТ, то плагин не перемещает..
 
ILlga80 Дата: Воскресенье, 03.02.2013, 07:04:27 | Сообщение # 12
Сообщений: 57
Репутация: 3 [ +/- ]
DoK_1997, Вот поэтому я и говорю / чтобы не засорять кучей условий.
 
TEIN Дата: Воскресенье, 03.02.2013, 07:49:37 | Сообщение # 13
Сообщений: 568
Репутация: 78 [ +/- ]
Есть одно, НО..
Например, mp_limitteams = 6
Допустим у нас 18 Т и 12 КТ
Я за КТ, пишу команду, то выполнится условие
18/12 = 1.5
То есть, по твоему условию, 6 > 1.5 - человек переместится..
Твой плагин настроен только для mp_limitteams = 1, а теперь подумай на счет разности
 
ILlga80 Дата: Воскресенье, 03.02.2013, 08:07:34 | Сообщение # 14
Сообщений: 57
Репутация: 3 [ +/- ]
ну да я другое значение mp_limitteams не использую. или 0 или 1
 
TEIN Дата: Воскресенье, 03.02.2013, 08:10:31 | Сообщение # 15
Сообщений: 568
Репутация: 78 [ +/- ]
ILlga80
А причем тут ты? Ты выложил плагин для других, а они могут использовать другое значение..
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Функция ChangeClientTeam и mp_limitteams
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: