Функция ChangeClientTeam и mp_limitteams
|
|
Admin0912
|
Дата: Пятница, 01.02.2013, 20:32:31 | Сообщение # 1 |
|
Сообщений: 57
Репутация: 3 [ +/- ]
|
|
Подскажите как сделать, чтобы функция учитывала значение 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 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Попроб
Гости не могут скачивать файлы
|
|
|
| |
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 [ +/- ]
|
|
Попробуй так:
Гости не могут скачивать файлы
|
|
|
| |
TEIN
|
Дата: Суббота, 02.02.2013, 18:06:53 | Сообщение # 9 |
|
Сообщений: 563
Репутация: 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 |
|
Сообщений: 563
Репутация: 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 |
|
Сообщений: 563
Репутация: 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 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
ILlga80 А причем тут ты? Ты выложил плагин для других, а они могут использовать другое значение..
|
|
| |