TheRunningMan
Участник
- Сообщения
- 147
- Реакции
- 10
Извините конечно, что задаю много вопросов по поводу программирования, но я не могу понять как исправить....
Вот то, что я написал, возможно можно сделать проще....
Идея такого, что когда время раунда приближается к 0 людей убивает, зомби остаются в живых, это у меня всегда все работает, но в функции killer есть условие ZR_IsClientHuman(client), он его просто игнорирует(следовательно не убивает), я сделал переменную, котора определят зомб клиент или нет, если ее значение ложь, то его убьет, но это не суть проблемы, главная проблема заключается в том, что по началу таймер срабатывает вовремя, но спустя несколько игр, он начинает жестоко тупить, и убивает то сразу после начала раунда, то секунд через 30(когда время раунда 2 минуты)или через минут, вообщем срабатывает раньше времени.....
P.S. Подскажите разбирающиеся люди имеющие опыт в программировании для игры CS Source!
Вот то, что я написал, возможно можно сделать проще....
PHP:
new Handle:t_timer[MAXPLAYERS+1] = INVALID_HANDLE;
new Float:g_cvarRoundTime;
new Float:ForTimer;
new bool: zombie[MAXPLAYERS+1];
public OnPluginStart()
{
HookEvent("round_freeze_end", RoundStart);
HookEvent("round_end", roundend);
}
public Action:RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if (t_timer[client] != INVALID_HANDLE) {
KillTimer(t_timer[client]);
t_timer[client] = INVALID_HANDLE;
}
g_cvarRoundTime = GetConVarFloat(FindConVar("mp_roundtime"));
ForTimer = (g_cvarRoundTime*60.0 - 2.0);
for(new Client = 1; Client <= MaxClients; Client++)
{
if (IsClientInGame(Client))
{
if (IsPlayerAlive(Client))
{
if (ZR_IsClientHuman(Client))
{
t_timer[Client] = CreateTimer(ForTimer, killer, Client);
zombie[Client] = false
}
}
}
}
}
public Action:ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:respawnOverride, &bool:respawn)
{
if (t_timer[client] != INVALID_HANDLE) {
KillTimer(t_timer[client]);
t_timer[client] = INVALID_HANDLE;
}
zombie[client] = true;
return Plugin_Continue;
}
public Action: killer(Handle:timer)
{
for(new client = 1; client <= MaxClients; client++)
{
if (IsClientInGame(client))
{
if (IsPlayerAlive(client))
{
if (ZR_IsClientHuman(client) && (zombie[client] == false))
{
ForcePlayerSuicide(client);
if (t_timer[client] != INVALID_HANDLE) {
KillTimer(t_timer[client]);
t_timer[client] = INVALID_HANDLE;
}
}
}
}
}
return Plugin_Handled;
}
public roundend(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if (t_timer[client] != INVALID_HANDLE) {
KillTimer(t_timer[client]);
t_timer[client] = INVALID_HANDLE;
}
}
P.S. Подскажите разбирающиеся люди имеющие опыт в программировании для игры CS Source!
Последнее редактирование: