Отсчёт времени до начала раунда

pokypka20

Участник
Сообщения
244
Реакции
31
Помогите составить код: (понятия не имею как делать)

Допустим у меня стоит mp_freezetime 3, помогите сделать чтобы во время фриз тайм происходил отчёт в центре экрана до начала раунда.
PHP:
Приготовьтесь к бою: 3
Приготовьтесь к бою: 2
Приготовьтесь к бою: 1

Заранее спасибо.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
pokypka20, хукаешь событие начала раунда и с него запускаешь повторяющийся таймер. Время окончания приравниваешь к mp_freezetime. Давал же код таймера.
в центре экрана
Хинт или выше, крупнее?
Оффтоп
PHP:
new sec;

public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	sec = GetConVarInt(FindConVar("mp_freezetime"));
	CreateTimer(1.0, AreYouReady, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:AreYouReady(Handle:timer)
{
	if (--sec > 0)
	{
		PrintHintTextToAll("Приготовьтесь к бою: %d", sec);
		return Plugin_Continue;
	}
	return Plugin_Stop;
}
Хинт видят все, даже наблюдатели. Из-за того, что ты не хочешь видеть 0, хинт будет висеть секунды 3 на 1.
 
Последнее редактирование:

pokypka20

Участник
Сообщения
244
Реакции
31
AlmazON, Спасибо, помогло. Если возможно подскажите можно ли каждый секунде присвоить свой текст? каждой секунде таймера тоесть.
PHP:
Приготовьтесь к бою: 3 --> Закупаемся
Приготовьтесь к бою: 2 --> Разминаемся
Приготовьтесь к бою: 1 --> Побежали

примерно так.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
каждый секунде присвоить свой текст
Элементарно, например, через условия:
PHP:
if (sec == 3) PrintHintTextToAll("Приготовьтесь к бою: 3 --> Закупаемся");
else if (sec == 2) PrintHintTextToAll("Приготовьтесь к бою: 2 --> Разминаемся");
else if (sec == 1) PrintHintTextToAll("Приготовьтесь к бою: 1 --> Побежали");
 

TolikCorp

Участник
Сообщения
874
Реакции
334
PHP:
new sec;
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    sec = GetConVarInt(FindConVar("mp_freezetime"));
    CreateTimer(1.0, AreYouReady, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:AreYouReady(Handle:timer)
{
    if (--sec > 0)
    {
        switch(sec)
        {
            case 1:PrintHintTextToAll("Приготовьтесь к бою: %d --> Побежали", sec);
            case 2:PrintHintTextToAll("Приготовьтесь к бою: %d --> Разминаемся", sec);
            case 3:PrintHintTextToAll("Приготовьтесь к бою: %d --> Закупаемся", sec);
            default:PrintHintTextToAll("Приготовьтесь к бою: %d", sec);
        }
        return Plugin_Continue;
    }
    return Plugin_Stop;
}
 

pokypka20

Участник
Сообщения
244
Реакции
31
Элементарно, например, через условия:
PHP:
if (sec == 3) PrintHintTextToAll("Приготовьтесь к бою: 3 --> Закупаемся");
else if (sec == 2) PrintHintTextToAll("Приготовьтесь к бою: 2 --> Разминаемся");
else if (sec == 1) PrintHintTextToAll("Приготовьтесь к бою: 1 --> Побежали");

Работает, спасибо.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
pokypka20, лучше вообще так, если надписей много (3 и более):
PHP:
new sec;

public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	sec = GetConVarInt(FindConVar("mp_freezetime"));
	CreateTimer(1.0, AreYouReady, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:AreYouReady(Handle:timer)
{
	if (--sec > 0)
	{
		decl String:t[50];
		switch(sec)
		{
			case 1: t = " --> Побежали";
			case 2: t = " --> Разминаемся";
			case 3: t = " --> Закупаемся";
			default: t[0] = '\0';
		}
		PrintCenterTextAll("Приготовьтесь к бою: %d%s", sec, t);
		return Plugin_Continue;
	}
	return Plugin_Stop;
}
Это крупно, немного выше центра.
 

pokypka20

Участник
Сообщения
244
Реакции
31
pokypka20, лучше вообще так, если надписей много (3 и более):
PHP:
new sec;

public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	sec = GetConVarInt(FindConVar("mp_freezetime"));
	CreateTimer(1.0, AreYouReady, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:AreYouReady(Handle:timer)
{
	if (--sec > 0)
	{
		decl String:t[50];
		switch(sec)
		{
			case 1: t = " --> Побежали";
			case 2: t = " --> Разминаемся";
			case 3: t = " --> Закупаемся";
			default: t[0] = '\0';
		}
		PrintCenterTextAll("Приготовьтесь к бою: %d%s", sec, t);
		return Plugin_Continue;
	}
	return Plugin_Stop;
}
Это крупно, немного выше центра.

Я использую sedhud в любом углу экрана :)
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
PHP:
new const String:message[][] = {"закупаемся", "разминаемся", "побежали"};

// В OnPluginStart получаем значение переменной, т.к. нет смысла каждый раунд ее получать

// ...
PrintHintTextToAll("приготовьтесь к бою: %d. %s", sec, message[sec - 1]);
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
При старте плагина переменную получать?!
Приравниваем, получаем 3 (у него так), таймер минусует и получаем 0. Дальше что? С 0 уже работать не будет. Значение то надо возвращать.
А со строкой хорошо придумал) Но, не к месту! Сообщение не отображается вовсе, когда пытаются извлечь и показать несуществующий индекс строки.
Хоть я и добил сей факт, но, в итоге, получается также или, может даже хуже по оптимизации.
"закупаемся", "разминаемся", "побежали"
Надо указывать в обратном порядке.
 
Последнее редактирование:
Сверху Снизу