←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

get_time prośba o wytłumaczenie

Zablokowany

  • +
  • -
Drzanas - zdjęcie Drzanas 05.11.2011

Witam.
Chciałbym zrobić w pluginie aby o godzinie 12:00 działo się coś, o godzinie 13:00 działo się coś i tak dalej.
Za sprawdzenie godziny odpowiada (chyba) funkcja
get_time
.
Czy mógłby mi ktoś wytłumaczyć na jakimś przykładzie jak używać tego?
Załóżmy że jeżeli jest godzina 13:00 na serwerze pojawia się napisa w say
Mamy godzinę 13:00
. A jak jest godzina 14:00 pojawia się tekst
Wybiła godzina 14:00
Proszę mi nie podawać linku do tego pluginu http://forums.allied...read.php?t=1263 oraz tego http://amxx.pl/topic...-by-justinhomi/
Z góry dziękuję za odpowiedź.
Użytkownik Drzanas edytował ten post 05.11.2011 14:34
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 05.11.2011

Możesz zrobić to np. tak:

#include <amxmodx>
#include <engine>

new szDate[64];

public plugin_init() {
register_plugin("Test", "0.1", "MarWit")
register_think("msgent", "MsgEnt_Think")

new g_iMsgEnt = create_entity("info_target")
entity_set_string(g_iMsgEnt, EV_SZ_classname, "msgent")
entity_set_float(g_iMsgEnt, EV_FL_nextthink, get_gametime() + 1.0)
}

public MsgEnt_Think(iEnt)
{
get_time("%X", szDate, 63)

if(equali(szDate, "15:00:00"))
{
// Tu dajesz kod co ma sie wykonac o godzinie 15:00:00
}

entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 1.0)
}


Działa to na takiej zasadzie:
Tworzysz byt i ustawiasz mu nextthinka co sekunde. Wtedy pobierany jest czas ( format: gg:mm:ss ) i sprawdzany
if(equali(szDate, "15:00:00"))

Jak chcesz aby coś się stało np. o 18:30, tworzysz następnego if'a ( analogicznie do pierwszego ) np.

if(equali(szDate, "18:30:00"))
{
// Tu dajesz kod co ma sie wykonac o godzinie 18:30:00
}

Użytkownik MarWit edytował ten post 05.11.2011 14:56
Odpowiedz

  • +
  • -
Drzanas - zdjęcie Drzanas 05.11.2011

public MsgEnt_Think(iEnt)
{
get_time("%X", szDate, 63)

if(equali(szDate, "15:00:00"))
{
// Tu dajesz kod co ma sie wykonac o godzinie 15:00:00
}
if(equali(szDate, "16:00:00"))
{
//cod
}


entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 1.0)
}

I będzie dobrze?
Użytkownik Drzanas edytował ten post 05.11.2011 15:15
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 05.11.2011

Tak
Użytkownik MarWit edytował ten post 05.11.2011 15:32
Odpowiedz

  • +
  • -
Drzanas - zdjęcie Drzanas 07.11.2011

Dziękuje.
Można zamknąć.

A jednak jeszcze mam jedno pytanie.
Jak zrobić obliczanie ile zostało do danej godziny?
Jest 12:15 a chce aby wyświetlało (w minutach) ile pozostało czasu czasu do 13?

Albo ile zostało do godziny 14:05 jak mamy np 13:58.
Najlepiej żeby w hud to było, ale mogę sobie przerobić.
Użytkownik Drzanas edytował ten post 07.11.2011 16:20
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 07.11.2011

Wyliczyć ile zostało do danej godziny nie jest trudno. Przykładowy kod:

#include <amxmodx>
#include <amxmisc>

public plugin_init()
register_clcmd("say /do16", "cmdDo16")

public cmdDo16(id)
{
new szDate[64], szTemp[2][5]
new iNum[3]

get_time("%H:%M", szDate, 63)
split(szDate, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), ":")

iNum[0] = (str_to_num(szTemp[0]) * 60 ) + str_to_num(szTemp[1])
iNum[1] = (16 * 60)

if(iNum[0] < iNum[1])
iNum[2] = iNum[1] - iNum[0]
else
iNum[2] = ( 24 * 60 ) + ( iNum[0] - iNum[1] )


client_print(id, print_chat, "Do godziny 16:00 zostalo: %d min. !", iNum[2])
}


Po wpisaniu w say'u komendy /do16 w chacie wyświetli sie ile zostało minut do 16:00
sebul (11.04.2012 20:42):
Trochę odkopię tą notką, ale chyba zdecydowanie lepiej użyć tutaj funkcji time ;]

Użytkownik MarWit edytował ten post 07.11.2011 17:15
Odpowiedz
Zablokowany