И пущай во время смены карты тоже мелькает, сервер нагружает... Больше флагов для повторяющегося таймера будто нет.TIMER_REPEAT
Помогите составить код, нужно вывести в hud счёт команд террористов и спецназ, чтобы посстоянно он был и обновлялся каждые 1-2 сек.
Пример:
в hud окне.PHP:Террористы - 1 Спецназ - 1
#include <sdktools>
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT);
public Action:Timer_PrintHud(Handle:hTimer)
PrintHintTextToAll("Террористы - %d | Спецназ - %d", GetTeamScore(2), GetTeamScore(3))
#include <sourcemod>
#pragma semicolon 1
public OnMapStart() CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
public Action:Timer_PrintHud(Handle:hTimer) PrintHintTextToAll("Террористы - %d\nСпецназ - %d", GetTeamScore(2), GetTeamScore(3));
Зачем? Если условия показа ставить, например, когда народ есть, то лучше делать через изменение переменных GetTeamScore. Если сделать PrintHintTextToAll не исчезающим, то можно просто изменять счёт, когда он действительно меняется.g_hTimer
Я как раз об этом думал, но забыл квар. :)sv_hudhint_sound 0
Чего это он так? Или мы говорим о разных счётах? Речь же идёт о победах команды КТ и Т, например, 1:0 или общее количество фрагов команды/ещё что-то?Счет меняется реже чем 3-4 сек
Вот ты о чём. Проще то проще, но, всё равно, мне кажется, лучше просто обновлять Hint для показа, извлекая в него уже давно сохранённые в переменных данные и обновлять сами переменные счёта при их реальном изменении, а не высчитывать каждый раз. Можно даже просто одним махом сделать обновление по концам раунда (раунд окончен - счёт по любому новый, раньше - нет и позже - нет), если сервер не специфичен.продолжительность показа PrintHintTextToAll 3-4 сек
public OnMapStart()
{
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:Timer_PrintHud(Handle:event, hTimer)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"))
MyTest(client, "Террористы: [%d], GetTeamScore(2)");
}
а, ну это само собой. Я только подал идею вывода, не более.Вот ты о чём. Проще то проще, но, всё равно, мне кажется, лучше просто обновлять Hint для показа, извлекая в него уже давно сохранённые в переменных данные и обновлять сами переменные счёта при их реальном изменении, а не высчитывать каждый раз. Можно даже просто одним махом сделать обновление по концам раунда (раунд окончен - счёт по любому новый, раньше - нет и позже - нет), если сервер не специфичен.
Вот потому я вначале и писал об Handle:g_hTimer = CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT); чтобы им было удобно управлять.pokypka20, обязательно останови таймер, если на сервере никого или боты. А то такими примитивными плагинами посадишь сервер, да и вообще fps при таком варианте работе.
for(new i=1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i))
{
/* Код
i это и будет твой клиент*/
}
}
Кавычки не там закрываешьMyTest(client, "Террористы: [%d], GetTeamScore(2)");
MyTest(client, "Террористы: [%d]", GetTeamScore(2));
bool отнимает меньше памяти SM, да и каким способом? Уж не убить ли таймер собираешься?чтобы им было удобно управлять
#include <sourcemod>
#include <easy_hudmessage>
#pragma semicolon 1
public OnMapStart()
{
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
Timer()
for(new i=1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i))
{
SendHudMessage(i, 6, -0.511998, -1.027999, 0xFF0000FF, 0xFFFFFFFF, 0, 1.0, 1.0, 5.0, 2.0, "Террористы: [%d], GetTeamScore(2)");
}
}
public Action:Timer_PrintHud(Handle:hTimer)
{
Timer();
}
Т.е.? Хинт то общий... всем. Как и таймер. Делать вариант таймера для каждого клиента - ещё хуже.пропускать выполнение после проверки игроков
Откуда такой натив? Его нет, это наверное сокращение функции. Это сообщение в левом верхнем углу?SendHudMessage
Я советую только реализацию его идеи, на свой сервер я ставлю только то что нужно и максмимально оптимизировав.Сделай ты ему нормально, а то сам "я бы такой плагин на свой сервер не поставил", а другим советуешь.
Этого я не говорил.Делать вариант таймера для каждого клиента - ещё хуже.
Тогда к чему геморой? Делать всегда вывод сообщения и не напрягатся по поводу пустого сервера или ботов. К тому же if(IsClientInGame(i) && !IsFakeClient(i))Т.е.? Хинт то общий... всем. Как и таймер.
#include <sourcemod>
#include <easy_hudmessage>
#pragma semicolon 1
public OnMapStart()
{
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:Timer_PrintHud(Handle:hTimer)
{
for(new i=1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i)) SendHudMessage(i, 6, -0.511998, -1.027999, 0xFF0000FF, 0xFFFFFFFF, 0, 1.0, 1.0, 5.0, 2.0, "Террористы: [%d], GetTeamScore(2)");
}
}