[CS: Source] New Year Seconds

Сообщения
288
Реакции
577
Показывает сколько осталось сек до Нового Года, а потом "С Новым Годом!!!".

Код:
// Время (timestamp) начала Нового Года
new_year_timestamp "1356998401"
Это загадочное число можно узнать, например,

Пожалуйста войдите или зарегистрируйтесь чтобы видеть скрытый текст.

. Вводите нужную дату и время, жмёте "Дату в Timestamp", и ниже покажет "Epoch timestamp: число"

Новая версия New Year Seconds
---------------
KeyHintText на v34 не работает.
 

Вложения

Последнее редактирование модератором:
Сообщения
148
Реакции
18
schmidt спасибо. А можно сделать формата
Дней:Часов:Минут:Секунд ?
 
Сообщения
288
Реакции
577
Попроб так:

PHP:
if (!g_NewYear)
{
    new sec = NewYearSec - GetTime();
    if (sec > 0)
    {
        new D = sec / 3600 / 24;
        new H = sec / 3600 % 24;
        new M = sec / 60 % 60;
        new S = sec % 60;
        Format(g_Msg, 150, "До Нового Года осталось:\nдней: %d, часов: %d, минут: %d, сек: %02d", D, H, M, S);
    }
    else
    {
        strcopy(g_Msg, 150, "С Новым Годом!!!");
        g_NewYear = true;
    }
}
 
Сообщения
748
Реакции
197
Такой вопрос:
у меня на сервере, хотя наверно у всех так, играют люди с разными часовыми поясами, тоесть ктото в Москве живет у тех GMT+3, кто-то в Екатеринбурге GMT+5 ну и т.д.
Плагин будет корректно всем игрокам отображать дату, согласно их часовому поясу?
 
Сообщения
125
Реакции
20
В Интернете так принятно, если Россия то время Московское для всех (в случае ксс сервера, так же может использоваться время сервера) и не важно из какого ты города. Если я сообщаю группе людей в интернете что в такое то время что-то будет, я говорю Московское время, и не важно что я не из Москвы, как неважно и то из каких городов люди прочитают эту информацию, хех
 
Сообщения
292
Реакции
184
legend1998, Оффтоп
Оффтоп

Код совсем простой:
PHP:
#pragma semicolon 1

#include <sourcemod>

new Handle:LeftTimestamp;

public OnPluginStart()
{
    LeftTimestamp = CreateConVar("sm_left_ts", "1357070400");

    CreateTimer(1.0, RunTimer, GetConVarInt(LeftTimestamp), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:RunTimer(Handle:timer, any:timestamp)
{
    new time = timestamp - GetTime();
    decl String:event[64];

    if(time > 0)
    {
        FormatTime(event, sizeof(event), "%eд. %mмес. %Hч %Mм %Sс", time);
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && !IsFakeClient(i))
                PrintHintText(i, "До события осталось: %s", event);
        }
    }
    else
    {
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && !IsFakeClient(i))
                PrintHintText(i, "Событие произошло!");
        }
    }
}
Делал под v34 и выводится снизу экрана в табличке.
 
Последнее редактирование:
Сообщения
288
Реакции
577
legend1998, ты хоть тестировал свой код? Символ %e не в теме, да и если сделать:
Код:
FormatTime(event, sizeof(event), "%mмес. %Hч %Mм %Sс", time);
То бред будет показывать, потому что в качестве параметра, где сейчас time, должно быть время в timestamp, а не кол-во оставшихся сек до НГ. Ну и о других багах говорить даже не хочется, например, твой таймер после смены карты умрет навсегда/будет зря работать, если на сервере никого нет и тд :wacko:
 
Сообщения
410
Реакции
14
Версия с показом в худе(спасибо ws) и с днями, часами.
PHP:
#pragma semicolon 1
#include <sourcemod>

public Plugin:myinfo = 
{
	name = "New Year Seconds",
	author = "wS / Schmidt",
	description = "Сколько осталось сек до Нового Года",
	version = "1.0",
	url = "http://world-source.ru/"
};

new Handle:g_Timer = INVALID_HANDLE;
new Handle:g_new_year_timestamp;
new String:g_Msg[150];
new bool:g_NewYear = false;

public OnPluginStart()
{
	g_new_year_timestamp = CreateConVar("new_year_timestamp", "1356998401", "timestamp начала Нового Года", FCVAR_NOTIFY);
	HookConVarChange(g_new_year_timestamp, cvar_changed);
}

///

public cvar_changed(Handle:cvar, const String:OldValue[], const String:NewValue[])
{
	wS_Kill_Timer();
	wS_StartTimer();
}

wS_Kill_Timer()
{
	g_NewYear = false;
	if (g_Timer != INVALID_HANDLE)
	{
		KillTimer(g_Timer);
		g_Timer = INVALID_HANDLE;
	}
}

///

wS_StartTimer()
{
	g_Timer = CreateTimer(1.0, wS_StartTimer_CallBack, GetConVarInt(g_new_year_timestamp), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action:wS_StartTimer_CallBack(Handle:timer, any:NewYearSec)
{
	if (!g_NewYear) 
{ 
    new sec = NewYearSec - GetTime(); 
    if (sec > 0) 
    { 
        new D = sec / 3600 / 24; 
        new H = sec / 3600 % 24; 
        new M = sec / 60 % 60; 
        new S = sec % 60; 
        Format(g_Msg, 150, "До Нового Года осталось:\nдней: %d, часов: %d, минут: %d, сек: %02d", D, H, M, S); 
    } 
    else 
    { 
        strcopy(g_Msg, 150, "С Новым Годом!!!"); 
        g_NewYear = true; 
    } 
}

	PrintHintTextToAll(g_Msg);

	return Plugin_Continue;
}

bool:wS_PlayerInServer(ignore_client)
{
	static i;
	for (i = 1; i <= MaxClients; i++)
	{
		if (i != ignore_client && IsClientInGame(i)) return true;
	}
	return false;
}

///

public OnClientDisconnect(client)
{
	if (!wS_PlayerInServer(client)) wS_Kill_Timer();
}

public OnClientPutInServer(client)
{
	if (g_Timer == INVALID_HANDLE) wS_StartTimer();
}
Если кого-то раздражает свист буду кэпом он отключается переменной в server.cfg
PHP:
sv_hudhint_sound 0
Пожалуйста, если кто может, то сделайте чтобы код был не снизу в табличке, а справа. Чтобы время показывал в том месте, где показывает на скринах в первом сообщении темы. Мне на сервере снизу не удобно, там идет время ножевого раунда и таймера бомбы.
 
Сообщения
410
Реакции
14
Metamoto, Что тебе мешает скачать из первого поста? А если тебе надо с показом дней и часов то post #3
А вот сам код если не умеешь переделывать и откомпиленный файл во вложении
PHP:
#pragma semicolon 1
#include <sourcemod>

public Plugin:myinfo = 
{
    name = "New Year Seconds",
    author = "wS / Schmidt",
    description = "Сколько осталось сек до Нового Года",
    version = "1.0",
    url = "http://world-source.ru/"
};

new Handle:g_Timer = INVALID_HANDLE;
new Handle:g_new_year_timestamp;
new String:g_Msg[150];
new bool:g_NewYear = false;

public OnPluginStart()
{
    g_new_year_timestamp = CreateConVar("new_year_timestamp", "1356998401", "timestamp начала Нового Года", FCVAR_NOTIFY);
    HookConVarChange(g_new_year_timestamp, cvar_changed);
}

///

public cvar_changed(Handle:cvar, const String:OldValue[], const String:NewValue[])
{
    wS_Kill_Timer();
    wS_StartTimer();
}

wS_Kill_Timer()
{
    g_NewYear = false;
    if (g_Timer != INVALID_HANDLE)
    {
        KillTimer(g_Timer);
        g_Timer = INVALID_HANDLE;
    }
}

///

wS_StartTimer()
{
    g_Timer = CreateTimer(1.0, wS_StartTimer_CallBack, GetConVarInt(g_new_year_timestamp), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action:wS_StartTimer_CallBack(Handle:timer, any:NewYearSec)
{
    if (!g_NewYear) 
{ 
    new sec = NewYearSec - GetTime(); 
    if (sec > 0) 
    { 
        new D = sec / 3600 / 24; 
        new H = sec / 3600 % 24; 
        new M = sec / 60 % 60; 
        new S = sec % 60; 
        Format(g_Msg, 150, "До Нового Года осталось:\nдней: %d, часов: %d, минут: %d, сек: %02d", D, H, M, S); 
    } 
    else 
    { 
        strcopy(g_Msg, 150, "С Новым Годом!!!"); 
        g_NewYear = true; 
    } 
}

    new Handle:Message = StartMessageAll("KeyHintText");
    if (Message != INVALID_HANDLE)
    {
        BfWriteByte(Message, 1);
        BfWriteString(Message, g_Msg);
        EndMessage();
    }

    return Plugin_Continue;
}

bool:wS_PlayerInServer(ignore_client)
{
    static i;
    for (i = 1; i <= MaxClients; i++)
    {
        if (i != ignore_client && IsClientInGame(i)) return true;
    }
    return false;
}

///

public OnClientDisconnect(client)
{
    if (!wS_PlayerInServer(client)) wS_Kill_Timer();
}

public OnClientPutInServer(client)
{
    if (g_Timer == INVALID_HANDLE) wS_StartTimer();
}
Да, я не разбираюсь в кодах. Поэтому и попросил отредактировать его. Чтобы полное время как в этом коде показывалось справа, а не снизу ) Ты отредактировал, время теперь справа будет? Или так же в табличке?
 
Сообщения
292
Реакции
184
legend1998, ты хоть тестировал свой код? Символ %e не в теме, да и если сделать:
Код:
FormatTime(event, sizeof(event), "%mмес. %Hч %Mм %Sс", time);
То бред будет показывать, потому что в качестве параметра, где сейчас time, должно быть время в timestamp, а не кол-во оставшихся сек до НГ. Ну и о других багах говорить даже не хочется, например, твой таймер после смены карты умрет навсегда/будет зря работать, если на сервере никого нет и тд :wacko:
legend1998,
L 11/28/2012 - 07:54:08: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:08: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:08: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:09: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:09: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:09: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:10: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:10: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:10: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:11: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:11: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:11: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:12: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:12: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:12: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:13: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:13: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:13: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:14: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:14: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:14: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:16: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:16: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:16: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:17: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:17: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:17: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:18: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:18: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:18: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:19: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:19: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:19: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:20: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:20: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:20: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:21: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:21: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:21: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:22: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:22: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:22: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:23: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:23: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:23: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
L 11/28/2012 - 07:54:24: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
L 11/28/2012 - 07:54:24: [SM] Displaying call stack trace for plugin "second.smx":
L 11/28/2012 - 07:54:24: [SM] [0] Line 21, D:\servers\75\css\cstrike\addons\sourcemod\scripting\second.sp::RunTimer()
Работает нормально, без ошибок.
Выводится все правильно, и %e я вставил в тему(можно вставить и %d).
Таймер не умерал, но соглашусь, что будет работать зря.
Можно добавить считывание кол-во игроков, которые на сервере и если их 0, то отключать таймер).

ilga80, может что-то редактировал? Буфера вполне хватает и даже немного больше.(как в моем коде), да и формат даты нормальный.
 
Сообщения
410
Реакции
14
Metamoto, Ты просил сделать с показом дней и часов сбоку слева - я сделал как ты сказал!

legend1998, НЕТ! Я скопировал твой код без изменений!
То, что ты сделал постоянно мигает, что весьма раздражает глаз ))) И еще попробуй сделать чтобы не мигало постоянно и чтобы слева было интересно как смотреться будет. Заранее спасибо
 
Последнее редактирование:
Сообщения
93
Реакции
5
Metamoto, Что тебе мешает скачать из первого поста? А если тебе надо с показом дней и часов то post #3
А вот сам код если не умеешь переделывать и откомпиленный файл во вложении
PHP:
#pragma semicolon 1
#include <sourcemod>

public Plugin:myinfo = 
{
    name = "New Year Seconds",
    author = "wS / Schmidt",
    description = "Сколько осталось сек до Нового Года",
    version = "1.0",
    url = "http://world-source.ru/"
};

new Handle:g_Timer = INVALID_HANDLE;
new Handle:g_new_year_timestamp;
new String:g_Msg[150];
new bool:g_NewYear = false;

public OnPluginStart()
{
    g_new_year_timestamp = CreateConVar("new_year_timestamp", "1356998401", "timestamp начала Нового Года", FCVAR_NOTIFY);
    HookConVarChange(g_new_year_timestamp, cvar_changed);
}

///

public cvar_changed(Handle:cvar, const String:OldValue[], const String:NewValue[])
{
    wS_Kill_Timer();
    wS_StartTimer();
}

wS_Kill_Timer()
{
    g_NewYear = false;
    if (g_Timer != INVALID_HANDLE)
    {
        KillTimer(g_Timer);
        g_Timer = INVALID_HANDLE;
    }
}

///

wS_StartTimer()
{
    g_Timer = CreateTimer(1.0, wS_StartTimer_CallBack, GetConVarInt(g_new_year_timestamp), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action:wS_StartTimer_CallBack(Handle:timer, any:NewYearSec)
{
    if (!g_NewYear) 
{ 
    new sec = NewYearSec - GetTime(); 
    if (sec > 0) 
    { 
        new D = sec / 3600 / 24; 
        new H = sec / 3600 % 24; 
        new M = sec / 60 % 60; 
        new S = sec % 60; 
        Format(g_Msg, 150, "До Нового Года осталось:\nдней: %d, часов: %d, минут: %d, сек: %02d", D, H, M, S); 
    } 
    else 
    { 
        strcopy(g_Msg, 150, "С Новым Годом!!!"); 
        g_NewYear = true; 
    } 
}

    new Handle:Message = StartMessageAll("KeyHintText");
    if (Message != INVALID_HANDLE)
    {
        BfWriteByte(Message, 1);
        BfWriteString(Message, g_Msg);
        EndMessage();
    }

    return Plugin_Continue;
}

bool:wS_PlayerInServer(ignore_client)
{
    static i;
    for (i = 1; i <= MaxClients; i++)
    {
        if (i != ignore_client && IsClientInGame(i)) return true;
    }
    return false;
}

///

public OnClientDisconnect(client)
{
    if (!wS_PlayerInServer(client)) wS_Kill_Timer();
}

public OnClientPutInServer(client)
{
    if (g_Timer == INVALID_HANDLE) wS_StartTimer();
}
Сделай плиз такой же только что бы был снизу по центру а не справа
 
Сообщения
18
Реакции
0
Куда настройки прописать? закинул, в итоге у меня на сервере сразу надпись С Новым Годом
 
Сообщения
2,585
Реакции
1,332
Журналюга, Потому что ты закинул плагин с прошлогодней датой, бери исходник замени дату и компилируй заново.
 
Сверху