Русское сообщество по скриптингу

По просьбе...  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

По просьбе...

Сообщение MayroN » 01 май 2020, 04:21

Пишу Вам по просьбе одного человека...

Уже довольно давно делаю плагин показа инфы сервера. Но дату и время надо клиентские зависимо от временного пояса и летнего времени (DST). Но если с переходом на летнее время я разберусь, то с поясами - беда.
Нарыл на Оленях один инклуд, и переделал его под нужды. Без квара в нижеуказанной строке кода время считается правильно (для примера взял наш киевский пояс):

Код: Выделить всё
UnixToTime(iTime,iYear,iMon,iDay,iHour,iMin,iSec,UT_TIMEZONE_PLUS_0200,iDST)


Но как из инклуда правильно передавать enum-значения в плагин - никак не пойму. Получилось пока нижеуказанный код (правда, есть подозрения, что нужно создавать в самом плагине массив временных зон, и потом его в цикле использовать, но сомневаюсь):

Код: Выделить всё
switch(iUTCTime)
{
case 0:UT_TIMEZONE_HOST
case 1
:UT_TIMEZONE_MINUS_1200
case 2
:UT_TIMEZONE_MINUS_1100
case 3
:UT_TIMEZONE_MINUS_1000
... и так вплоть до конца switch'a
case 38:UT_TIMEZONE_PLUS_1400
}

и передача
Код: Выделить всё
UnixToTime(iTime,iYear,iMon,iDay,iHour,iMin,iSec,iUTCTime,iDST)


В итоге выдает кучу предупреждений (41).


Код: Выделить всё
#if defined _file_unixtime_included
    #endinput
#endif
#define _file_unixtime_included

stock const YearSeconds[2]={31536000,31622400}

stock const MonthSeconds[12]={2678400,2419200,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400}

enum TimeZones{UT_TIMEZONE_HOST,UT_TIMEZONE_MINUS_1200,UT_TIMEZONE_MINUS_1100,UT_TIMEZONE_MINUS_1000,UT_TIMEZONE_MINUS_0930,
UT_TIMEZONE_MINUS_0900,UT_TIMEZONE_MINUS_0800,UT_TIMEZONE_MINUS_0700,UT_TIMEZONE_MINUS_0600,UT_TIMEZONE_MINUS_0500,UT_TIMEZONE_MINUS_0400,
UT_TIMEZONE_MINUS_0330,UT_TIMEZONE_MINUS_0300,UT_TIMEZONE_MINUS_0200,UT_TIMEZONE_MINUS_0100,UT_TIMEZONE_PLUS_0000,UT_TIMEZONE_PLUS_0100,
UT_TIMEZONE_PLUS_0200,UT_TIMEZONE_PLUS_0300,UT_TIMEZONE_PLUS_0330,UT_TIMEZONE_PLUS_0400,UT_TIMEZONE_PLUS_0430,UT_TIMEZONE_PLUS_0500,
UT_TIMEZONE_PLUS_0530,UT_TIMEZONE_PLUS_0545,UT_TIMEZONE_PLUS_0600,UT_TIMEZONE_PLUS_0630,UT_TIMEZONE_PLUS_0700,UT_TIMEZONE_PLUS_0800,
UT_TIMEZONE_PLUS_0845,UT_TIMEZONE_PLUS_0900,UT_TIMEZONE_PLUS_0930,UT_TIMEZONE_PLUS_1000,UT_TIMEZONE_PLUS_1030,UT_TIMEZONE_PLUS_1100,
UT_TIMEZONE_PLUS_1200,UT_TIMEZONE_PLUS_1245,UT_TIMEZONE_PLUS_1300,UT_TIMEZONE_PLUS_1400}

stock const TimeZoneOffset[TimeZones]={-1,-43200,-39600,-36000,-34200,-32400,-28800,-25200,-21600,-18000,-14400,-12600,-10800,-7200,-3600,0,3600,7200,10800,12600,14400,16200,
18000,19800,20700,21600,23400,25200,28800,31500,32400,34200,36000,37800,39600,43200,45900,46800,50400}

stock TimeZones:TimeZone

stock const DaySeconds
=86400

stock const HourSeconds
=3600

stock const MinuteSeconds
=60

stock UnixToTime
(iTimeStamp,&iYear,&iMonth,&iDay,&iHour,&iMinute,&iSecond,TimeZones:tzTimeZone=UT_TIMEZONE_PLUS_0000,&iDST)
{
    new iTemp
    iYear
=1970
    iMonth
=1
    iDay
=1
    iHour
=0
    if
(tzTimeZone==UT_TIMEZONE_HOST)tzTimeZone=GetTimeZone()
    iTimeStamp+=TimeZoneOffset[tzTimeZone]
    if(iDST==1)iTimeStamp+=HourSeconds
    while
(iTimeStamp>0)
    {
        iTemp=IsLeapYear(iYear)
        if((iTimeStamp-YearSeconds[iTemp])>=0)
        {
            iTimeStamp-=YearSeconds[iTemp]
            iYear++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        iTemp=SecondsInMonth(iYear,iMonth)
        if((iTimeStamp-iTemp)>=0)
        {
            iTimeStamp-=iTemp
            iMonth
++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        if((iTimeStamp-DaySeconds)>=0)
        {
            iTimeStamp-=DaySeconds
            iDay
++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        if((iTimeStamp-HourSeconds)>=0)
        {
            iTimeStamp-=HourSeconds
            iHour
++
        }
        else break
    
}
    iMinute=(iTimeStamp/60)
    iSecond=(iTimeStamp%60)
}

stock TimeToUnix(const iYear,const iMonth,const iDay,const iHour,const iMinute,const iSecond,TimeZones:tzTimeZone=UT_TIMEZONE_PLUS_0000)
{
    new i,iTimeStamp
    for
(i=1970;i<iYear;i++)iTimeStamp+=YearSeconds[IsLeapYear(i)]
    for(i=1;i<iMonth;i++)iTimeStamp+=SecondsInMonth(iYear,i)
    iTimeStamp+=((iDay-1)*DaySeconds)
    iTimeStamp+=(iHour*HourSeconds)
    iTimeStamp+=(iMinute*MinuteSeconds)
    iTimeStamp+=iSecond
    if
(tzTimeZone==UT_TIMEZONE_HOST)tzTimeZone=GetTimeZone()
    return(iTimeStamp+TimeZoneOffset[tzTimeZone])
}

stock TimeZones:GetTimeZone()
{
    if(TimeZone)return TimeZone
    new TimeZones
:iZone,iOffset,iTime,iYear,iMonth,iDay,iHour,iMinute,iSecond
    date
(iYear,iMonth,iDay)
    time(iHour,iMinute,iSecond)
    iTime=TimeToUnix(iYear,iMonth,iDay,iHour,iMinute,iSecond,UT_TIMEZONE_PLUS_0000)
    iOffset=iTime-get_systime()
    for(iZone=TimeZones:0;iZone<TimeZones;iZone++)
    {
        if(iOffset==TimeZoneOffset[iZone])break
    }
    return(TimeZone=iZone)
}

stock SecondsInMonth(const iYear,const iMonth)
{
    return((IsLeapYear(iYear)&&(iMonth==2))?(MonthSeconds[iMonth-1]+DaySeconds):MonthSeconds[iMonth-1])
}

stock IsLeapYear(const iYear)
{
    return(((iYear%4)==0)&&(((iYear%100)!=0)||((iYear%400)==0)))
}


Код: Выделить всё
#include amxmodx
#include unixtime
new hiutc,vip,round=-1

public plugin_init
()
{
    register_plugin("Host Information","1.0","Stanley Kid")
    register_logevent("start",2,"1=Round_Start")
    register_logevent("com",2,"1&Restart_Round_","1&Game_Commencing")
    register_dictionary("host_info.txt")
    register_concmd("hi_utc","hi_utc")
    register_concmd("hi_dst","hi_dst",0,"<0|1>")
}

public client_putinserver(id)
{
    if(get_user_flags(id)&ADMIN_KICK)vip++
    set_task(1.0,"info",id,_,_,"b")
}

public client_disconnect(id)if(get_user_flags(id)&ADMIN_KICK)vip--

public start()round++

public com()round=0

public info
(id)
{
    new iTime=get_systime(),iYear,iMon,iDay,iHour,iMin,iSec,iDST=get_cvar_num("hi_dst"),iUTCTime=get_cvar_num(hiutc)
    new iUTCDiff,utcdiff[2],localtime[64],play=get_playersnum(),mp=get_maxplayers(),ip[32],left=get_timeleft()
    switch(iUTCTime)
    {
        case 0:UT_TIMEZONE_HOST;case 1:UT_TIMEZONE_MINUS_1200;case 2:UT_TIMEZONE_MINUS_1100;case 3:UT_TIMEZONE_MINUS_1000
        case 4
:UT_TIMEZONE_MINUS_0930;case 5:UT_TIMEZONE_MINUS_0900;case 6:UT_TIMEZONE_MINUS_0800;case 7:UT_TIMEZONE_MINUS_0700
        case 8
:UT_TIMEZONE_MINUS_0600;case 9:UT_TIMEZONE_MINUS_0500;case 10:UT_TIMEZONE_MINUS_0400;case 11:UT_TIMEZONE_MINUS_0330
        case 12
:UT_TIMEZONE_MINUS_0300;case 13:UT_TIMEZONE_MINUS_0200;case 14:UT_TIMEZONE_MINUS_0100;case 15:UT_TIMEZONE_PLUS_0000
        case 16
:UT_TIMEZONE_PLUS_0100;case 17:UT_TIMEZONE_PLUS_0200;case 18:UT_TIMEZONE_PLUS_0300;case 19:UT_TIMEZONE_PLUS_0330
        case 20
:UT_TIMEZONE_PLUS_0400;case 21:UT_TIMEZONE_PLUS_0430;case 22:UT_TIMEZONE_PLUS_0500;case 23:UT_TIMEZONE_PLUS_0530
        case 24
:UT_TIMEZONE_PLUS_0545;case 25:UT_TIMEZONE_PLUS_0600;case 26:UT_TIMEZONE_PLUS_0630;case 27:UT_TIMEZONE_PLUS_0700
        case 28
:UT_TIMEZONE_PLUS_0800;case 29:UT_TIMEZONE_PLUS_0845;case 30:UT_TIMEZONE_PLUS_0900;case 31:UT_TIMEZONE_PLUS_0930
        case 32
:UT_TIMEZONE_PLUS_1000;case 33:UT_TIMEZONE_PLUS_1030;case 34:UT_TIMEZONE_PLUS_1100;case 35:UT_TIMEZONE_PLUS_1200
        case 36
:UT_TIMEZONE_PLUS_1245;case 37:UT_TIMEZONE_PLUS_1300;case 38:UT_TIMEZONE_PLUS_1400
    
}
    new iTimeAdjust=TimeToUnix(iYear,iMon,iDay,iHour,iMin,iSec,iUTCTime)
    UnixToTime(iTime,iYear,iMon,iDay,iHour,iMin,iSec,iUTCTime,iDST)
    iUTCDiff=(86400+iTimeAdjust)/60
    utcdiff
=(iUTCDiff/60<0)?"-":"+"
    format(localtime,63,"%d.%02d.%02d %02d:%02d:%02d (UTC %s%02d:%02d)",iYear,iMon,iDay,iHour,iMin,iSec,utcdiff,abs(iUTCDiff/60),iUTCDiff%60)
    get_user_ip(0,ip,charsmax(ip),0)
    set_hudmessage(255,255,255,-1.0,0.01,0,_,1.0)
    show_hudmessage(id,"%s; %02d / %02d %L (%02d VIP)^nIP-%L %s^n%L %d; %L %02d:%02d",localtime,play,mp,id,"HI_PLAYER",vip,id,"HI_IP",ip,id,"HI_ROUND",round,id,"HI_TIME",left/60,left%60)
}

Код: Выделить всё
#include amxmodx
#include unixtime
new vip,round=-1

public plugin_init
()
{
    register_plugin("Host Information","1.0","Stanley Kid")
    register_logevent("start",2,"1=Round_Start")
    register_logevent("com",2,"1&Restart_Round_","1&Game_Commencing")
    register_dictionary("host_info.txt")
    //register_concmd("hi_utc","hi_utc")
    register_concmd("hi_dst","hi_dst",0,"<0|1>")
}

public client_putinserver(id)
{
    if(get_user_flags(id)&ADMIN_KICK)vip++
    set_task(1.0,"info",id,_,_,"b")
}

public client_disconnect(id)if(get_user_flags(id)&ADMIN_KICK)vip--

public start()round++

public com()round=0

public info
(id)
{
    new iTime=get_systime(),iYear,iMon,iDay,iHour,iMin,iSec,iDST=get_cvar_num("hi_dst")
    new iUTCDiff,utcdiff[2],localtime[64],play=get_playersnum(),mp=get_maxplayers(),ip[32],left=get_timeleft()
    new iTimeAdjust=TimeToUnix(iYear,iMon,iDay,iHour,iMin,iSec,UT_TIMEZONE_PLUS_0200)
    UnixToTime(iTime,iYear,iMon,iDay,iHour,iMin,iSec,UT_TIMEZONE_PLUS_0200,iDST)
    iUTCDiff=(86400+iTimeAdjust)/60
    utcdiff
=(iUTCDiff/60<0)?"-":"+"
    format(localtime,63,"%d.%02d.%02d %02d:%02d:%02d (UTC %s%02d:%02d)",iYear,iMon,iDay,iHour,iMin,iSec,utcdiff,abs(iUTCDiff/60),iUTCDiff%60)
    get_user_ip(0,ip,charsmax(ip),0)
    set_hudmessage(255,255,255,-1.0,0.01,0,_,1.0)
    show_hudmessage(id,"%s; %02d / %02d %L (%02d VIP)^nIP-%L %s^n%L %d; %L %02d:%02d",localtime,play,mp,id,"HI_PLAYER",vip,id,"HI_IP",ip,id,"HI_ROUND",round,id,"HI_TIME",left/60,left%60)
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: По просьбе...

Сообщение MayroN » 02 май 2020, 16:04

Я продвинулся в плагине слегка, но вопрос по передачи значений или индексов enum-массива из unixtime.inc остался. В плагине явно нужен цикл, а то прописывать все через case нагрузочно для кода.

Код: Выделить всё
#include amxmodx
#include unixtime
new utc,dst,vip,round=-1

public plugin_init
()
{
    register_plugin("Host Information","1.0","Stanley Kid")
    register_logevent("start",2,"1=Round_Start")
    register_logevent("com",2,"1&Restart_Round_","1&Game_Commencing")
    register_dictionary("host_info.txt")
    register_concmd("hi_utcdst","UTC_DST",0,"utc><dst>")
}

public client_putinserver(id)
{
    if(get_user_flags(id)&ADMIN_KICK)vip++
    set_task(1.0,"info",id,_,_,"b")
}

public client_disconnect(id)if(get_user_flags(id)&ADMIN_KICK)vip--

public start()round++

public com()round=0

public UTC_DST
()
{
    new arg[3],arg1[2]
    read_argv(1,arg,2);utc=clamp(str_to_num(arg),0,39)
    read_argv(2,arg1,1);dst=clamp(str_to_num(arg1),0,1)
}

public info(id)
{
    new iTime=get_systime(),iYear,iMonth,iDay,iHour,iMinute,iSecond,TimeZones:utczone,utcdiff,utcdiffsym[2],localtime[64],play=get_playersnum(),mp=get_maxplayers(),ip[32]
    new left=get_timeleft()
    switch(utc)
    {
        case 0:utczone=UT_TIMEZONE_HOST
        case 1
:utczone=UT_TIMEZONE_MINUS_1200
        
// etc...
        case 17:utczone=UT_TIMEZONE_PLUS_0200
        
// etc...
        case 39:utczone=UT_TIMEZONE_PLUS_1400
    
}
    new iTimeAdjust=TimeToUnix(iYear,iMonth,iDay,iHour,iMinute,iSecond,utczone)
    UnixToTime(iTime,iYear,iMonth,iDay,iHour,iMinute,iSecond,utczone,dst)
    utcdiff=(86400+iTimeAdjust)/60
    utcdiffsym
=(utcdiff/60<0)?"-":"+"
    format(localtime,63,"%d.%02d.%02d %02d:%02d:%02d (UTC %s%02d:%02d)",iYear,iMonth,iDay,iHour,iMinute,iSecond,utcdiffsym,abs(utcdiff/60),utcdiff%60)
    get_user_ip(0,ip,charsmax(ip),0)
    set_hudmessage(255,255,255,-1.0,0.01,0,_,1.0)
    show_hudmessage(id,"%s; %02d / %02d %L (%02d VIP)^nIP-%L %s^n%L %d; %L %02d:%02d",localtime,play,mp,id,"HI_PLAYER",vip,id,"HI_IP",ip,id,"HI_ROUND",round,id,"HI_TIME",left/60,left%60)
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: По просьбе...  [Решено]

Сообщение RevCrew » 02 май 2020, 17:00

Не понятно в чем проблема?

Код: Выделить всё
new TimeZones:utczone TimeZones:utc
new iTimeAdjust=TimeToUnix(iYear,iMonth,iDay,iHour,iMinute,iSecondutczone)
 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: По просьбе...

Сообщение MayroN » 02 май 2020, 18:25

RevCrew,
"Заказчик остался доволен и благодарит".

Код: Выделить всё
#if defined _file_unixtime_included
    #endinput
#endif
#define _file_unixtime_included

stock const YearSeconds[2]={31536000,31622400}

stock const MonthSeconds[12]={2678400,2419200,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400}

enum TimeZones(+=1){UT_TIMEZONE_HOST,UT_TIMEZONE_MINUS_1200,UT_TIMEZONE_MINUS_1100,UT_TIMEZONE_MINUS_1000,UT_TIMEZONE_MINUS_0930,
UT_TIMEZONE_MINUS_0900,UT_TIMEZONE_MINUS_0800,UT_TIMEZONE_MINUS_0700,UT_TIMEZONE_MINUS_0600,UT_TIMEZONE_MINUS_0500,UT_TIMEZONE_MINUS_0400,
UT_TIMEZONE_MINUS_0330,UT_TIMEZONE_MINUS_0300,UT_TIMEZONE_MINUS_0200,UT_TIMEZONE_MINUS_0100,UT_TIMEZONE_PLUS_0000,UT_TIMEZONE_PLUS_0100,
UT_TIMEZONE_PLUS_0200,UT_TIMEZONE_PLUS_0300,UT_TIMEZONE_PLUS_0330,UT_TIMEZONE_PLUS_0400,UT_TIMEZONE_PLUS_0430,UT_TIMEZONE_PLUS_0500,
UT_TIMEZONE_PLUS_0530,UT_TIMEZONE_PLUS_0545,UT_TIMEZONE_PLUS_0600,UT_TIMEZONE_PLUS_0630,UT_TIMEZONE_PLUS_0700,UT_TIMEZONE_PLUS_0800,
UT_TIMEZONE_PLUS_0845,UT_TIMEZONE_PLUS_0900,UT_TIMEZONE_PLUS_0930,UT_TIMEZONE_PLUS_1000,UT_TIMEZONE_PLUS_1030,UT_TIMEZONE_PLUS_1100,
UT_TIMEZONE_PLUS_1200,UT_TIMEZONE_PLUS_1245,UT_TIMEZONE_PLUS_1300,UT_TIMEZONE_PLUS_1400}

stock const TimeZoneOffset[TimeZones]={-1,-43200,-39600,-36000,-34200,-32400,-28800,-25200,-21600,-18000,-14400,-12600,-10800,-7200,-3600,0,3600,7200,10800,12600,14400,16200,
18000,19800,20700,21600,23400,25200,28800,31500,32400,34200,36000,37800,39600,43200,45900,46800,50400}

stock TimeZones:TimeZone

stock const DaySeconds
=86400

stock const HourSeconds
=3600

stock const MinuteSeconds
=60

stock UnixToTime
(iTimeStamp,&iYear,&iMonth,&iDay,&iHour,&iMinute,&iSecond,TimeZones:tzTimeZone=UT_TIMEZONE_PLUS_0000,&iDST)
{
    new iTemp
    iYear
=1970
    iMonth
=1
    iDay
=1
    iHour
=0
    if
(tzTimeZone==UT_TIMEZONE_HOST)tzTimeZone=GetTimeZone()
    iTimeStamp+=TimeZoneOffset[tzTimeZone]
    if(iDST==1)iTimeStamp+=HourSeconds
    while
(iTimeStamp>0)
    {
        iTemp=IsLeapYear(iYear)
        if((iTimeStamp-YearSeconds[iTemp])>=0)
        {
            iTimeStamp-=YearSeconds[iTemp]
            iYear++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        iTemp=SecondsInMonth(iYear,iMonth)
        if((iTimeStamp-iTemp)>=0)
        {
            iTimeStamp-=iTemp
            iMonth
++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        if((iTimeStamp-DaySeconds)>=0)
        {
            iTimeStamp-=DaySeconds
            iDay
++
        }
        else break
    
}
    while(iTimeStamp>0)
    {
        if((iTimeStamp-HourSeconds)>=0)
        {
            iTimeStamp-=HourSeconds
            iHour
++
        }
        else break
    
}
    iMinute=(iTimeStamp/60)
    iSecond=(iTimeStamp%60)
}

stock TimeToUnix(const iYear,const iMonth,const iDay,const iHour,const iMinute,const iSecond,TimeZones:tzTimeZone=UT_TIMEZONE_PLUS_0000)
{
    new i,iTimeStamp
    for
(i=1970;i<iYear;i++)iTimeStamp+=YearSeconds[IsLeapYear(i)]
    for(i=1;i<iMonth;i++)iTimeStamp+=SecondsInMonth(iYear,i)
    iTimeStamp+=((iDay-1)*DaySeconds)
    iTimeStamp+=(iHour*HourSeconds)
    iTimeStamp+=(iMinute*MinuteSeconds)
    iTimeStamp+=iSecond
    if
(tzTimeZone==UT_TIMEZONE_HOST)tzTimeZone=GetTimeZone()
    return(iTimeStamp+TimeZoneOffset[tzTimeZone])
}

stock TimeZones:GetTimeZone()
{
    if(TimeZone)return TimeZone
    new TimeZones
:iZone,iOffset,iTime,iYear,iMonth,iDay,iHour,iMinute,iSecond
    date
(iYear,iMonth,iDay)
    time(iHour,iMinute,iSecond)
    iTime=TimeToUnix(iYear,iMonth,iDay,iHour,iMinute,iSecond,UT_TIMEZONE_PLUS_0000)
    iOffset=iTime-get_systime()
    for(iZone=TimeZones:0;iZone<TimeZones;iZone++)
    {
        if(iOffset==TimeZoneOffset[iZone])break
    }
    return(TimeZone=iZone)
}

stock SecondsInMonth(const iYear,const iMonth)
{
    return((IsLeapYear(iYear)&&(iMonth==2))?(MonthSeconds[iMonth-1]+DaySeconds):MonthSeconds[iMonth-1])
}

stock IsLeapYear(const iYear)
{
    return(((iYear%4)==0)&&(((iYear%100)!=0)||((iYear%400)==0)))
}

Код: Выделить всё
#include amxmodx
#include unixtime
new utc,dst,vip,round=-1

public plugin_init
()
{
    register_plugin("Host Information","1.0","Stanley Kid")
    register_logevent("start",2,"1=Round_Start")
    register_logevent("com",2,"1&Restart_Round_","1&Game_Commencing")
    register_dictionary("host_info.txt")
    register_concmd("hi_utcdst","UTC_DST",0,"<utc><dst>")
}

public client_putinserver(id)
{
    if(get_user_flags(id)&ADMIN_KICK)vip++
    set_task(1.0,"info",id,_,_,"b")
}

public client_disconnect(id)if(get_user_flags(id)&ADMIN_KICK)vip--

public start()round++

public com()round=0

public UTC_DST
()
{
    new arg[3],arg1[2]
    read_argv(1,arg,2);utc=clamp(str_to_num(arg),0,38)
    read_argv(2,arg1,1);dst=clamp(str_to_num(arg1),0,1)
}

public info(id)
{
    new iTime=get_systime(),iYear,iMonth,iDay,iHour,iMinute,iSecond,TimeZones:utczone=TimeZones:utc,utcdiff,utcdiffsym[2],localtime[64],play=get_playersnum()
    new mp=get_maxplayers(),ip[32],left=get_timeleft(),iTimeAdjust=TimeToUnix(iYear,iMonth,iDay,iHour,iMinute,iSecond,utczone)
    UnixToTime(iTime,iYear,iMonth,iDay,iHour,iMinute,iSecond,utczone,dst)
    utcdiff=(86400+iTimeAdjust)/60
    utcdiffsym
=(utcdiff/60<0)?"-":"+"
    format(localtime,63,"%d.%02d.%02d %02d:%02d:%02d (UTC %s%02d:%02d)",iYear,iMonth,iDay,iHour,iMinute,iSecond,utcdiffsym,abs(utcdiff/60),utcdiff%60)
    get_user_ip(0,ip,charsmax(ip),0)
    set_hudmessage(255,255,255,-1.0,0.01,0,_,1.0)
    show_hudmessage(id,"%s; %02d / %02d %L (%02d VIP)^nIP-%L %s^n%L %d; %L %02d:%02d",localtime,play,mp,id,"HI_PLAYER",vip,id,"HI_IP",ip,id,"HI_ROUND",round,id,"HI_TIME",left/60,left%60)
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: По просьбе...

Сообщение RevCrew » 03 май 2020, 09:16

MayroN, рад помочь)
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 7

cron