Timer

TheRunningMan

Участник
Сообщения
147
Реакции
10
Не знал в какой теме создать, вообщем нужна помощь в написании плагина, ибо по программированию на языке sourcepawn я полный нуб)))
C-подобный:
#include <sourcemod>

new count = 10;
new Handle:Seconds[MAXPLAYERS+1] = {INVALID_HANDLE, ...};
public Plugin:myinfo =
{
	author = "Uknown",
	name = "Counter",
	description = "Countdown",
};

public OnPluginStart()
{
	RegAdminCmd("sm_counter", admcmd_counter, ADMFLAG_SLAY, "Countdown");
	HookEvent("player_spawn", spawn);
}

public spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
}

public Action:admcmd_counter(client, args)
{
		Seconds[client] = CreateTimer(1.0, PrintMsg, TIMER_REPEAT, client)
}

public Action:PrintMsg(Handle:timer, any:client)
{	
	if(count >= 0)
	{
		PrintHintText(client, "Осталось %i секунд(а)!",count--);
	}
}

public OnClientDisconnect(client)
{
	if(Seconds[client] != INVALID_HANDLE)
	{
		KillTimer(Seconds[client]);
		Seconds[client] = INVALID_HANDLE;
	}
}
Я хотел сделать плагин отсчета времени, но отсчет происходит некорректно, т.е. я например включаю его, он считает, но если включает другой игрок, то нет и бывало если одновременно активируют два игрока, то у меня к примеру счет идет по четным через 2 секунды, у другого по нечетным тоже через две секунды....
Если вы не можете помочь в данном опросе, то подкиньте ссылку на русскоязычный сайт по данному языку.....
 
Последнее редактирование:

fallen1994

Участник
Сообщения
2,357
Реакции
538
Код нужно сделать в code , а то хрен поймешь что у тебя там какарякано)
 

TheRunningMan

Участник
Сообщения
147
Реакции
10
все сделал, но при вводе sm_counter в консоль ничего не происходит....
пишет только что "не известная команда", но она и раньше писалась и вообще как сделать что не писало....
сори пишет...(косорукий я :) )
но там числа мллиардные и имзеняются в непонятном порядке, после этого сервер падает...

т.е. он выводить каждую секунду(за 10 секунд), какие-то радомные числа....
 

maza511

Участник
Сообщения
882
Реакции
407
Edit*
C-подобный:
#include <sourcemod>

new count[MAXPLAYERS+1] = 10;
new Handle:Seconds[MAXPLAYERS+1] = {INVALID_HANDLE, ...};

public OnPluginStart()
{
	RegAdminCmd("sm_counter", admcmd_counter, ADMFLAG_SLAY, "Countdown");
}

public Action:admcmd_counter(client, args)
{
	if(Seconds[client] != INVALID_HANDLE)
	{
		KillTimer(Seconds[client]);
		Seconds[client] = INVALID_HANDLE;
	}
	
	count[client] = 10;
	Seconds[client] = CreateTimer(1.0, PrintMsg, client, TIMER_REPEAT)
}

public Action:PrintMsg(Handle:timer, any:client)
{
	if(count[client] >= 0)
	{
		PrintHintText(client, "Осталось %i секунд(а)!", count[client]);
		count[client]--;
	}
}

public OnClientDisconnect(client)
{
	if(Seconds[client] != INVALID_HANDLE)
	{
		KillTimer(Seconds[client]);
		Seconds[client] = INVALID_HANDLE;
	}
}
 

TheRunningMan

Участник
Сообщения
147
Реакции
10
ВСе спасибо)))
Я тоже так делал, но думал что не правильно когда увидел какие цыфры он выводит))

Добавлено через 43 минуты
Может знаешь как сделать чтоб при активации, чел становился не видим на радаре и его ника не было видно, просто я даже не представляю какие команды за это отвечают...
 
Последнее редактирование:

TheRunningMan

Участник
Сообщения
147
Реакции
10
НУ хотя бы а этот вопрос можно ответить:
как получить значение таймера раунда в данный момент(т.е. промежуточное), ну или хотя бы вообще его получить, т.е. значение с которого начинается отсчет до конца раунда...
 

maza511

Участник
Сообщения
882
Реакции
407
Может знаешь как сделать чтоб при активации, чел становился не видим на радаре и его ника не было видно, просто я даже не представляю какие команды за это отвечают...
Еслиб знали как это сделать, ни кто не парился бы по поводу убирания радара.

Вообще значение таймера раунда получить можно:
C-подобный:
new Handle:round_Time = FindConVar("mp_roundtime");

Чтоб вычислить текущее время до конца раунда, запоминай время в начале раунда.
И потом вычитай когда тебе надо.
 
Сверху Снизу