ConVar g_hCvar;
public void OnPluginStart()
{
if((g_hCvar = FindConVar("mp_ignore_round_win_conditions")) == null) SetFailState("No found cvar: mp_ignore_round_win_conditions");
HookEvent("round_prestart", view_as<EventHook>(RoundPreStart), EventHookMode_PostNoCopy);
HookEvent("player_death", view_as<EventHook>(PlayerDeath), EventHookMode_Pre);
}
void RoundPreStart()
{
g_hCvar.SetInt(1);
}
void PlayerDeath(Event hEvent)
{
int i, iCount;
for(i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && IsPlayerAlive(i)) iCount++;
}
if(iCount < 2) g_hCvar.SetInt(0);
}
Да, там что-то не работает. Потому что когда я тестил, то ничего не изменилось. Но спасибо за идею.PHP:ConVar g_hCvar; public void OnPluginStart() { if((g_hCvar = FindConVar("mp_ignore_round_win_conditions")) == null) SetFailState("No found cvar: mp_ignore_round_win_conditions"); HookEvent("round_prestart", view_as<EventHook>(RoundPreStart), EventHookMode_PostNoCopy); HookEvent("player_death", view_as<EventHook>(PlayerDeath), EventHookMode_Pre); } void RoundPreStart() { g_hCvar.SetInt(1); } void PlayerDeath(Event hEvent) { int i, iCount; for(i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && IsPlayerAlive(i)) iCount++; } if(iCount < 2) g_hCvar.SetInt(0); }
Не проверял, да и скорее всего надо будет дорабатывать код, т.к эта не самая лучшая реализация, много моментов не учел... Но работать по идеи должно.
Действительно, ничего не меняется...Да, там что-то не работает. Потому что когда я тестил, то ничего не изменилось. Но спасибо за идею.
Понятно. Если зайти 2-м или большему количеству игроков за одну команду, а за другую не заходить, то тогда плагин не срабатывает. А так он работает.Действительно, ничего не меняется...
Что? Если больше 1 игрока в живых, раунд не будет заврешен.П
Понятно. Если зайти 2-м или большему количеству игроков за одну команду, а за другую не заходить, то тогда плагин не срабатывает. А так он работает.
Вы не поняли. Да, он не будет завершён, но проблема в другом. Если в начале раунда все игроки зашли за террористов, а за кт никто не зашёл, то тогда плагин не сработает, когда останется 1 в живых игрок. Да это уже неважно (по крайней мере для меня), так как я смог решить эту проблему автобалансом команд.Что? Если больше 1 игрока в живых, раунд не будет заврешен.
В следующий раз будьте добры оставить 'свое' решение в теме, не вы один можете сталкиваться с подобной проблемой.так как я смог решить эту проблему автобалансом команд.
#pragma semicolon 1
#pragma newdecls required
#include <cstrike>
#include <sdktools_functions>
int aliveTNum;
public void OnPluginStart()
{
HookEvent("player_death", EventPlayerDeath);
HookEvent("player_spawn", EventPlayerSpawn);
}
public void EventPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
if(GetClientTeam(GetClientOfUserId(event.GetInt("userid"))) == CS_TEAM_T) aliveTNum++;
}
public void OnClientDisconnect(int client)
{
if(GetClientTeam(client) != CS_TEAM_T) return;
aliveTNum--;
if(aliveTNum == 1) OnLastMan();
}
public void EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
if(GetClientTeam(GetClientOfUserId(event.GetInt("userid"))) != CS_TEAM_T) return;
aliveTNum--;
if(aliveTNum == 1) OnLastMan();
}
void OnLastMan()
{
CS_TerminateRound(0.1, CSRoundEnd_CTWin, false)
}
#pragma semicolon 1
#pragma newdecls required
#include <cstrike>
int aliveTNum,
aliveCTNum;
public void OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath);
HookEvent("player_spawn", Event_PlayerSpawn);
}
public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
int client;
if(!(client = GetClientOfUserId(event.GetInt("userid"))))
return;
switch(GetClientTeam(client))
{
case 2: aliveTNum++;
case 3: aliveCTNum++;
}
}
public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
int client;
if((client = GetClientOfUserId(event.GetInt("userid")))) SubPlayers(client);
}
public void OnClientDisconnect(int client)
{
SubPlayers(client);
}
stock void SubPlayers(int client)
{
switch(GetClientTeam(client))
{
case 2:
{
aliveTNum--;
if(aliveTNum == 1) CS_TerminateRound(0.1, CSRoundEnd_CTWin, false);
}
case 3:
{
aliveCTNum--;
if(aliveCTNum == 1) CS_TerminateRound(0.1, CSRoundEnd_TerroristWin, false);
}
}
}
Можешь сделать когда в команде нет живых игроков но раунд заканчивался! Либо бывает Анти афк игрока переводит в наблюдатели и раунд не заканчивается!хм, когда-то кому-то делал, чтобы при последнем живом террористе заканчивало раунд--- Добавлено позже ---PHP:#pragma semicolon 1 #pragma newdecls required #include <cstrike> #include <sdktools_functions> int aliveTNum; public void OnPluginStart() { HookEvent("player_death", EventPlayerDeath); HookEvent("player_spawn", EventPlayerSpawn); } public void EventPlayerSpawn(Event event, const char[] name, bool dontBroadcast) { if(GetClientTeam(GetClientOfUserId(event.GetInt("userid"))) == CS_TEAM_T) aliveTNum++; } public void OnClientDisconnect(int client) { if(GetClientTeam(client) != CS_TEAM_T) return; aliveTNum--; if(aliveTNum == 1) OnLastMan(); } public void EventPlayerDeath(Event event, const char[] name, bool dontBroadcast) { if(GetClientTeam(GetClientOfUserId(event.GetInt("userid"))) != CS_TEAM_T) return; aliveTNum--; if(aliveTNum == 1) OnLastMan(); } void OnLastMan() { CS_TerminateRound(0.1, CSRoundEnd_CTWin, false) }
Можно аналогичное сделать для обеих команд
--- Добавлено позже ---
Вот для обеих команд:Если у тебя КСГО, то сталось дождаться когда пофиксят CS_TerminateRound()PHP:#pragma semicolon 1 #pragma newdecls required #include <cstrike> int aliveTNum, aliveCTNum; public void OnPluginStart() { HookEvent("player_death", Event_PlayerDeath); HookEvent("player_spawn", Event_PlayerSpawn); } public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { int client; if(!(client = GetClientOfUserId(event.GetInt("userid")))) return; switch(GetClientTeam(client)) { case 2: aliveTNum++; case 3: aliveCTNum++; } } public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) { int client; if((client = GetClientOfUserId(event.GetInt("userid")))) SubPlayers(client); } public void OnClientDisconnect(int client) { SubPlayers(client); } stock void SubPlayers(int client) { switch(GetClientTeam(client)) { case 2: { aliveTNum--; if(aliveTNum == 1) CS_TerminateRound(0.1, CSRoundEnd_CTWin, false); } case 3: { aliveCTNum--; if(aliveCTNum == 1) CS_TerminateRound(0.1, CSRoundEnd_TerroristWin, false); } } }