Вывод сообщения в TOP (левый верхний угол)

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Хочу сделать плагин выводящий время в TOP
Примерная часть кода:
PHP:
public OnClientAuthorized(client, const String:auth[])
{
    if(client > 0 && IsClientInGame(client) && !IsFakeClient(client))
    {
        new time = GetTime()
        new String:nowtime[256]
        FormatTime(nowtime, sizeof(nowtime), "%H:%M:%S", time)
        PrintTopToAll(color, "Время: %s", nowtime); //не знаю какую команду вставить
    }
}
Помогите сделать как положено :)
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
EPacker2, там не так просто.

PHP:
	new String:message[100];
	VFormat(message, sizeof(message), text, 4);	
	
	new Handle:kv = CreateKeyValues("Stuff", "title", message);
	KvSetColor(kv, "color", g_Colors[color][0], g_Colors[color][1], g_Colors[color][2], 255);
	KvSetNum(kv, "level", 1);
	KvSetNum(kv, "time", 10);
	
	CreateDialog(client, kv, DialogType_Msg);
	
	CloseHandle(kv);
как то так, но это для одного клиента. Нужно или изменить на всех, или циклом
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
PHP:
    new String:message[100];
    VFormat(message, sizeof(message), text, 4);    
    
    new Handle:kv = CreateKeyValues("Stuff", "title", message);
    KvSetColor(kv, "color", g_Colors[color][0], g_Colors[color][1], g_Colors[color][2], 255);
    KvSetNum(kv, "level", 1);
    KvSetNum(kv, "time", 10);
    
    CreateDialog(client, kv, DialogType_Msg);
    
    CloseHandle(kv);
Видел это в SmTSay
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
EPacker2, это и есть оттуда. Еще можешь в knifefight глянуть
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Проверил через Advertisements. В топе не получится ежесекундно обновлять.
Жаль что чат, центр, и HUD уже заняты.
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Кто-нибудь аукнется мне на помощь? :)
 

vanbka9

Участник
Сообщения
14
Реакции
13
Чего не получится ?
KvSetNum(kv, "time", 1);
Ты пробовал??? У меня не получается...

Жаль что чат, центр, и HUD уже заняты.
Кто-нибудь аукнется мне на помощь? :)
:)Вот держи, сделал принт во все области, только обновлять каждую секунду в топе не получается...:dntknw: Обновляется раз в 10 сек.:mda:
Ненужное думаю уберешь сам
PHP:
#pragma semicolon 1

new Handle:TOP = INVALID_HANDLE;
new c_red = 75, 
	c_green = 75, 
	c_blue = 255, 
	c_alpha = 255;
new String:Msg[24];

public OnPluginStart()
{
	StartTimer();
	TOP = CreateKeyValues("TOP");
	KvSetNum(TOP, "level", 0);
	KvSetNum(TOP, "time", 10);
}

stock StartTimer()
	CreateTimer(1.0, Timer_CallBack, _, TIMER_REPEAT);

public Action:Timer_CallBack(Handle:timer)
{
	decl String:time[9];
	// http://www.cplusplus.com/reference/ctime/strftime/
	FormatTime(time, sizeof(time), "%X");
	Format(Msg, sizeof(Msg), "TIME => %s", time);
	// Принт в ТОП
	PrintToTopAll(c_red, c_green, c_blue, c_alpha, Msg);
	// Принт в панель
	PrintToPanelAll(Msg);
	// Принт в чат
	PrintToChatAll(Msg);
	// Принт в центре
	PrintCenterTextAll(Msg);
	// Принт справа
	PrintKeyHintTextToAll(Msg);
	// Принт внизу
	PrintHintTextToAll(Msg);
	return Plugin_Continue;
}

PrintToTopAll(r, g, b, a, const String:g_Msg[], any:...)
{
	decl String:Buffer[56];
	VFormat(Buffer, sizeof(Buffer), g_Msg, 6);
	if(TOP != INVALID_HANDLE)
	{
		KvSetString(TOP, "title", Buffer);
		KvSetColor(TOP, "color", r, g, b, a);
		for(new i = 1; i <= MaxClients; i++)
			if(IsClientInGame(i))
				CreateDialog(i, TOP, DialogType_Msg);
	}
}

PrintToPanelAll(const String:g_Msg[])
{
	new Handle:panel = CreatePanel(); 
	SetPanelTitle(panel, g_Msg);
	for (new i = 1; i < MaxClients; i++)
		if(IsClientInGame(i))
			SendPanelToClient(panel, i, Func_Panel, 0);
}

public Func_Panel(Handle:panel, MenuAction:action, client, option) 
{
}

PrintKeyHintTextToAll(const String:g_Msg[])
{
	new Handle:Message = StartMessageAll("KeyHintText");
	if (Message != INVALID_HANDLE)
	{
		BfWriteByte(Message, 1);
		BfWriteString(Message, g_Msg);
		EndMessage();
	}
}
 
Последнее редактирование:

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
EPacker2, Собственно на что откликаться, вроде все уже обсудили с рико?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
че у вас тут не выходит? Надо будет попробывать

Добавлено через 4 часа 42 минуты
нашел вам ответ. Хотя не уверен
PHP:
SendDialogToOne(client, color[3], time, String:text[], any:...)
{
	new String:message[100];
	VFormat(message, sizeof(message), text, 5); 

	new Handle:kv = CreateKeyValues("Stuff", "title", message);
	KvSetColor(kv, "color", color[0], color[1], color[2], 255);
	KvSetNum(kv, "level", 1);
	KvSetNum(kv, "time", time);

	CreateDialog(client, kv, DialogType_Msg);

	CloseHandle(kv); 
}
 
Последнее редактирование:

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
vanbka9, поправь пожалуйста, как правильно сделать..
PHP:
#pragma semicolon 1

new Handle:TOP = INVALID_HANDLE;
new String:Msg[24];

public OnPluginStart()
{
    StartTimer();
    TOP = CreateKeyValues("TOP");
}

stock StartTimer()
    CreateTimer(1.0, Timer_CallBack, _, TIMER_REPEAT);

public Action:Timer_CallBack(Handle:timer)
{
    decl String:time[9];
    FormatTime(time, sizeof(time), "%d.%m.%Y - %H:%M");
    Format(Msg, sizeof(Msg), "%s", time);

    PrintToTopAll(Msg);
}

PrintToTopAll(const String:g_Msg[], any:...)
{
    decl String:Buffer[56];
    VFormat(Buffer, sizeof(Buffer), g_Msg, 6);
    if(TOP != INVALID_HANDLE)
    {
        KvSetString(TOP, "title", Buffer);
        KvSetNum(TOP, "level", 1);
        KvSetNum(TOP, "time", 10);
        KvSetColor(TOP, "color", 255, 255, 0);

        for(new i = 1; i <= MaxClients; i++)
            if(IsClientInGame(i))
                CreateDialog(i, TOP, DialogType_Msg);
    }
}
А то выдает такую ошибку:
C-подобный:
L 10/02/2013 - 05:43:13: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 10/02/2013 - 05:43:13: [SM] Displaying call stack trace for plugin "time.smx":
L 10/02/2013 - 05:43:13: [SM]   [0]  Line 18, time.sp::Timer_CallBack()
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
девятку до 48 как минимум
Теперь выдает эту ошибку:
C-подобный:
L 10/02/2013 - 23:11:01: [SM] Native "VFormat" reported: Argument index is invalid: 6
L 10/02/2013 - 23:11:01: [SM] Displaying call stack trace for plugin "time.smx":
L 10/02/2013 - 23:11:01: [SM]   [0]  Line 27, time.sp::PrintToTopAll()
L 10/02/2013 - 23:11:01: [SM]   [1]  Line 21, time.sp::Timer_CallBack()
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
EPacker2, так сделай
PHP:
#pragma semicolon 1

new Handle:TOP = INVALID_HANDLE,
	Handle:g_hTimer;
new String:Msg[56];

public OnPluginStart()
	TOP = CreateKeyValues("TOP");

public OnMapStart()
	StartTimer();

public OnMapEnd()
{
	if (g_hTimer != INVALID_HANDLE)
	{
		KillTimer(g_hTimer);
	}
}	

stock StartTimer()
    g_hTimer = CreateTimer(5.0, Timer_CallBack, _, TIMER_REPEAT);

public Action:Timer_CallBack(Handle:timer)
{
	decl String:time[56];
	FormatTime(time, sizeof(time), "%d.%m.%Y - %H:%M");
	Format(Msg, sizeof(Msg), "%s", time);

	PrintToTopAll(Msg);
}

PrintToTopAll(const String:g_Msg[])
{
	decl String:Buffer[56];
	Format(Buffer, sizeof(Buffer), g_Msg);
	if(TOP != INVALID_HANDLE)
	{
		KvSetString(TOP, "title", Buffer);
		KvSetNum(TOP, "level", 1);
		KvSetNum(TOP, "time", 5);
		KvSetColor(TOP, "color", 75, 75, 255, 255);

		for(new i = 1; i <= MaxClients; i++)
			if(IsClientInGame(i))
				CreateDialog(i, TOP, DialogType_Msg);
	}
}
Не знаю зачем делать через "VFormat" если пашет норм при "Format". И зачем делать таймер на каждую секунду, сделал 5 секунд сообщение и таймер, вроде пашет как надо и меньше нагрузка таймерами.
 
Последнее редактирование:

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Серый™, спасибо, все шикарно работает. :beer:
frkfnu9feZI.jpg

Тему можно закрыть.
 
Последнее редактирование:
Сверху Снизу