Вывести счёт команд в hud посстоянно.

pokypka20

Участник
Сообщения
244
Реакции
31
Помогите составить код, нужно вывести в hud счёт команд террористов и спецназ, чтобы посстоянно он был и обновлялся каждые 1-2 сек.

Пример:
PHP:
Террористы - 1
Спецназ - 1
в hud окне.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
pokypka20,
PHP:
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT);

public Action:Timer_PrintHud(Handle:hTimer)
{
/*Выводишь сообщение*/
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
И пущай во время смены карты тоже мелькает, сервер нагружает... Больше флагов для повторяющегося таймера будто нет.
Ты ему подробнее распиши, он же не знает натива для получения счёта команд. Да и вообще, бред это - на таймере строить.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
AlmazON, я не ставил флаг TIMER_FLAG_NO_MAPCHANGE т.к. предполагал что создавать будет через Handle:g_hTimer = CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT);
 

artyrka94

Участник
Сообщения
181
Реакции
38
Помогите составить код, нужно вывести в hud счёт команд террористов и спецназ, чтобы посстоянно он был и обновлялся каждые 1-2 сек.

Пример:
PHP:
Террористы - 1
Спецназ - 1
в hud окне.

PHP:
#include <sdktools>
CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT);

public Action:Timer_PrintHud(Handle:hTimer)
    PrintHintTextToAll("Террористы - %d | Спецназ - %d", GetTeamScore(2), GetTeamScore(3))

и в server.cfg добавь: sv_hudhint_sound 0
а то всех будет напрягать звук от худа
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
PHP:
#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));
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Зачем? Если условия показа ставить, например, когда народ есть, то лучше делать через изменение переменных GetTeamScore. Если сделать PrintHintTextToAll не исчезающим, то можно просто изменять счёт, когда он действительно меняется.
Я как раз об этом думал, но забыл квар. :)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Счет меняется реже чем 3-4 сек
Чего это он так? Или мы говорим о разных счётах? Речь же идёт о победах команды КТ и Т, например, 1:0 или общее количество фрагов команды/ещё что-то?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #10
AlmazON, ну смотри, продолжительность показа PrintHintTextToAll 3-4 сек. Счет команд так быстро не меняется.
Продлить его можно разве что таймером, а тогда проще сделать как уже сделано.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Спасибо большое всем кто помогал, особенное спасибо RIKO.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
продолжительность показа PrintHintTextToAll 3-4 сек
Вот ты о чём. Проще то проще, но, всё равно, мне кажется, лучше просто обновлять Hint для показа, извлекая в него уже давно сохранённые в переменных данные и обновлять сами переменные счёта при их реальном изменении, а не высчитывать каждый раз. Можно даже просто одним махом сделать обновление по концам раунда (раунд окончен - счёт по любому новый, раньше - нет и позже - нет), если сервер не специфичен.
pokypka20, обязательно останови таймер, если на сервере никого или боты. А то такими примитивными плагинами посадишь сервер, да и вообще fps при таком варианте работе.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Извините за глупый вопрос как создать клиента когда его нет?
PHP:
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)");
}

Вот так пишет ошибку что неправильно?
на mytest внимание не обращать, я для примера написал.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #14
Вот ты о чём. Проще то проще, но, всё равно, мне кажется, лучше просто обновлять Hint для показа, извлекая в него уже давно сохранённые в переменных данные и обновлять сами переменные счёта при их реальном изменении, а не высчитывать каждый раз. Можно даже просто одним махом сделать обновление по концам раунда (раунд окончен - счёт по любому новый, раньше - нет и позже - нет), если сервер не специфичен.
а, ну это само собой. Я только подал идею вывода, не более.

pokypka20, обязательно останови таймер, если на сервере никого или боты. А то такими примитивными плагинами посадишь сервер, да и вообще fps при таком варианте работе.
Вот потому я вначале и писал об Handle:g_hTimer = CreateTimer(1.0, Timer_PrintHud, _, TIMER_REPEAT); чтобы им было удобно управлять.

pokypka20, его не создать, пускай цикл по всем игрокам
PHP:
for(new i=1; i <= MaxClients; i++)
{
	if(IsClientInGame(i) && !IsFakeClient(i))
	{
		/* Код
		i  это и будет твой клиент*/
	}
}



MyTest(client, "Террористы: [%d], GetTeamScore(2)");
Кавычки не там закрываешь
PHP:
MyTest(client, "Террористы: [%d]", GetTeamScore(2));
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
pokypka20, скажи конкретно чего хочешь, а то точно сервер посадишь лишними переменными, таймерами и циклами.
чтобы им было удобно управлять
bool отнимает меньше памяти SM, да и каким способом? Уж не убить ли таймер собираешься?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #16
AlmazON, можно просто пропускать выполнение после проверки игроков.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Ладно выпалили меня таймер хочю сделать как в cs 1.6
PHP:
#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();
}

Конечно всё коряво и не обновляется, но я в поиске решения :D
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
пропускать выполнение после проверки игроков
Т.е.? Хинт то общий... всем. Как и таймер. Делать вариант таймера для каждого клиента - ещё хуже.
Сделай ты ему нормально, а то сам "я бы такой плагин на свой сервер не поставил", а другим советуешь. :-D
Откуда такой натив? Его нет, это наверное сокращение функции. Это сообщение в левом верхнем углу?
 

Webman

Nevermind
Сообщения
803
Реакции
330
Не проще вести переменные для выведения в худ?
То есть в конце раунда получаем счет - записываем в переменные, выводим в худ и висит в течение всего раунда.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #20
Сделай ты ему нормально, а то сам "я бы такой плагин на свой сервер не поставил", а другим советуешь.
Я советую только реализацию его идеи, на свой сервер я ставлю только то что нужно и максмимально оптимизировав.


Делать вариант таймера для каждого клиента - ещё хуже.
Этого я не говорил.

Т.е.? Хинт то общий... всем. Как и таймер.
Тогда к чему геморой? Делать всегда вывод сообщения и не напрягатся по поводу пустого сервера или ботов. К тому же if(IsClientInGame(i) && !IsFakeClient(i))


pokypka20,
PHP:
#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)");
	}
}

Webman, обсуждали на первой странице. Я этого писать не буду, нет времени. Реализацию я предложил, а вот оптимизация уже не моя забота.
 
Сверху Снизу