←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Godzina z serwera

Locked

  • +
  • -
Potatek's Photo Potatek 22.04.2010

Jak ustawić aby jakaś funkcja została wykonana o ustalonej godzinie? Np. od 4 do 8 rano grawitacja była by mniejsza (przykład)
Quote

  • +
  • -
sbstn's Photo sbstn 22.04.2010

Na chłopski rozum, mogłoby to wyglądać tak:
(aczkolwiek nie sprawdzałem)
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Funkcja 8:00-10:00"
#define VERSION "1.0"
#define AUTHOR "AMXX.pl"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
set_task(1.0,"checker",_,_,_,"b")
}

public checker()
{
new timer[9]
new clock=get_time("%H",timer,8)

if(8<=clock<10)
{
funkcja()
}
}

public funkcja()
{
// Whatever u like
}

EDIT: W sumie lepiej będzie raz na rundę sprawdzać, niż raz na 1s ;P
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Funkcja 8:00-10:00"
#define VERSION "1.0"
#define AUTHOR "AMXX.pl"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "checker", "a", "1=0", "2=0")
}

public checker()
{
new timer[9]
new clock=get_time("%H",timer,8)

if(8<=clock<10)
{
funkcja()
}
}

public funkcja()
{
// Whatever u like
}

Edited by sbstn, 22.04.2010 18:43.
Quote

  • +
  • -
Potatek's Photo Potatek 22.04.2010

A jeśli np miało być w konsoli wpisywana komenda np. o godzinie 5 w nocy na sayu informuje graczy że mamy właśnie tą godzine, jak powinien wyglądać kod ?
Edited by Potatek, 22.04.2010 20:29.
Quote

  • +
  • -
sbstn's Photo sbstn 22.04.2010

A jeśli np miało być w konsoli wpisywana komenda np. o godzinie 5 w nocy na sayu informuje graczy że mamy właśnie tą godzine, jak powinien wyglądać kod ?

Hmm... Wiele sposobów jest moim zdaniem, ale ja przytoczę taki jeden (chociaż i tak nie mam warunków do sprawdzenia):
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "5 nad ranem"
#define VERSION "1.0"
#define AUTHOR "AMXX.pl"

new bool:zrobione

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "checker", "a", "1=0", "2=0")
zrobione=false
}

public checker()
{
new timer[9]
new clock=get_time("%H",timer,8)
if(clock==5 && zrobione==false)
{
funkcja()
}
}

public funkcja()
{
console_print(0,"*********************************")
console_print(0,"[AMXX] Jest godzina 5:00... Co tak wczesnie?!")
console_print(0,"*********************************")
zrobione=true
return PLUGIN_HANDLED
}


EDIT: Zapomniałem o minusach tego kodu. Przypuśćmy, że mapa właśnie się zaczęła. Jest godzina 4:50. Gramy 10min. I w konsoli wszystkim się pokazuje (plaplaplapla). Mapa trwa 20min (ex.). Na następnej mapce również pokaże (plaplaplapla). I tak aż do godziny 5:59. Reasumując to tłumaczenie, plugin działa non stop od godziny 5:00 do 5:59, raz na mapę ;)
Edited by sbstn, 22.04.2010 20:55.
Quote

  • +
  • -
Potatek's Photo Potatek 22.04.2010

O kurde :/ Trzeba to jakoś zamknąć, nie może przez całą godzine pisać mi pewnej komendy... musi to zrobić raz
Quote

  • +
  • -
sbstn's Photo sbstn 22.04.2010

O kurde :/ Trzeba to jakoś zamknąć, nie może przez całą godzine pisać mi pewnej komendy... musi to zrobić raz


Nie zrozumiałeś mnie. Co mapę od godziny 5:00 do 5:59 1 raz wywoła komendę!

EDIT:
Np.:
godz. 4:50 de_dust 2 ->funkcja nie działa (OFF)
godz. 5:00 de_dust -> funkcja wywoływana raz na mapę!
godz. 5:25 de_nuke -> funkcja wywoływana raz na mapę!
godz. 5:59 de_inferno -> funkcja wywoływana raz na mapę!
godz. 6:00 de_inferno -> OFF
Edited by sbstn, 22.04.2010 21:35.
Quote

  • +
  • -
Potatek's Photo Potatek 22.04.2010

No właśnie... a to ma tylko raz ją wykonać w ciągu 5:00 a 5:59 a nie co mapę bo wykona ją 3 razy :/

EDIT: Po co jest: new bool:zrobione ?? Niezbyt rozumiem tą zmienną po co ona wogóle jest
Edited by Potatek, 22.04.2010 21:39.
Quote

  • +
  • -
sbstn's Photo sbstn 22.04.2010

Bool:
Tzw. zmienna logiczna, która przechowuje tylko wartość true(1), lub false(0). Zazwyczaj używane do tego, żeby określić czy coś jest włączone, lub nie.
Deklaracja:

new bool:zmienna;

Scripting>Tutoriale>Zmienne- co i jak?

Jak napisane w poradniku @up, można ją porównać do przełącznika on/off. Poczytaj troszkę tutoriali! AMXX.pl ma nawet dobry zbiór!
Quote

  • +
  • -
Potatek's Photo Potatek 22.04.2010

No nie ukrywam że w programowaniu jestem zielony ale staram się rozwijać i coś tworzyć. Dzięki za wyjaśnienie :)
Ale nadal nie wiem co zrobić by ta komenda była tylko jeden raz w ciągu godziny
Quote

  • +
  • -
sbstn's Photo sbstn 22.04.2010

Zacznij od podstaw c++, a potem zacznij pawna... Bedzie Ci latwiej ogarnac.
@topic: nie da sie wywolac raz na godzine, chyba ze ustawisz czas mapy na 60min. funkcja 'public plugin_init' dziala zawsze po zmianie mapy.

Pozdrawiam, sbstn aka siwy. (Pisze z tel, wiec wybaczcie brak polskich znakow)
Quote

  • +
  • -
Potatek's Photo Potatek 22.04.2010

Podstaw ucze się z praktyki, pomocy kolegów i czytaniu + analiza gotowców... Jak znajde czas to zobacze podstawy, w weekend zajme się tutorialami z forum. Hmm a może by tak zrobić żeby o godz 6 zmieniało zmienną na true. Jutro zobacze jak to w praktyce zadziała.

Dzięki za pomoc, można zamknąć
Quote

  • +
  • -
sbstn's Photo sbstn 23.04.2010

Podstaw ucze się z praktyki, pomocy kolegów i czytaniu + analiza gotowców... Jak znajde czas to zobacze podstawy, w weekend zajme się tutorialami z forum. Hmm a może by tak zrobić żeby o godz 6 zmieniało zmienną na true. Jutro zobacze jak to w praktyce zadziała.

Dzięki za pomoc, można zamknąć

Jesli w tym kodzie uzyjesz plugin_init, to pamietaj ze funkcja bedzie wykonywana po zmianie mapy. Wiec musisz inaczej to wykombinowac... Nie mam pomyslu. (latwiej jest robic funkcje trwajace od czasu x do czasu x...)
«tel»
Quote

  • +
  • -
Portek's Photo Portek 23.04.2010

public checker()
{
new timer[9]
new hour = get_time("%H",timer,8)
new timerm[9]
new minut = get_time("%M",timerm,8)
if(hour==5 && minut==00 && zrobione==false)
{
funkcja()
}
}


albo w zasadzie, to powinno dać podobny efekt:
public checker()
{
new godzina, minuta
time(godzina,minuta)
if(godzina==5 && minuta==00 && zrobione==false)
{
funkcja()
}
}
Quote

  • +
  • -
sbstn's Photo sbstn 23.04.2010

Najprostsze rozwiazania sa najlepsze! Nie pomyslalem zeby zdeklarowac minuty. dorzuc jeszcze %S jako sekunde i bedziesz mial dokladny plugin, bo moze sie zdarzyc, ze cala minute bedzie Ci funkcje wywolywac... Good Job!
Quote

  • +
  • -
Potatek's Photo Potatek 23.04.2010

Dzięki wielkie

23 kwiecień 2010 - 14:38:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "Funkcja 8:00-10:00"
#define VERSION "1.0"
#define AUTHOR "AMXX.pl"

new bool:zrobione

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
        set_task(1.0,"checker",_,_,_,"b")
	zrobione=false
}

public checker()
{
        new godzina, minuta
        time(godzina,minuta)
        if(godzina==15 && minuta==30 && zrobione==false)
        {
        funkcja()
        }
}

public funkcja()
{
        client_print(0, print_chat, "*******")
        client_print(0, print_chat, "15:30")
        client_print(0, print_chat, "*******")
        zrobione=true
        return PLUGIN_HANDLED
	
}

To jest poprawne? bo nie wyświetliło godziny :/ Chciałem zrobić test i nie działa :/
Edited by Potatek, 23.04.2010 13:56.
Quote

  • +
  • -
sbstn's Photo sbstn 23.04.2010

1. Pamiętaj, że przed sprawdzeniem pluginu, zmień mapę!

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "15:30"
#define VERSION "1.0"
#define AUTHOR "AMXX.pl"

new bool:zrobione

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
zrobione=false
set_task(30.0,"checker",_,_,_,"b")
}

public checker()
{
new time_h[9]
new time_m[9]
new hour=get_time("%H",time_h,8)
new minutes=get_time("%M",time_m,8)

if(hour==15 && minutes==30 && zrobione==false)
{
funkcja()
return PLUGIN_CONTINUE
}
return PLUGIN_HANDLED
}

public funkcja()
{
client_print(0, print_chat, "*******")
server_cmd("wait")
client_print(0, print_chat, "15:30")
server_cmd("wait")
client_print(0, print_chat, "*******")
server_cmd("wait")
zrobione=true
return PLUGIN_CONTINUE
}


EDIT: Funkcja time, z tego co pamiętam, jest w module "core". Nie masz w kodzie #include <core>.
Edited by sbstn, 23.04.2010 14:57.
Quote

  • +
  • -
Potatek's Photo Potatek 23.04.2010

#include <amxmodx>
#include <amxmisc>
#include <core>

#define PLUGIN "test"
#define VERSION "1.0"
#define AUTHOR "GuitarGryf"

new bool:zrobione

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
        zrobione=false
        set_task(30.0,"checker",_,_,_,"b")
}

public checker()
{
        new time_h[9]
        new time_m[9]
        new hour=get_time("%H",time_h,8)
        new minutes=get_time("%M",time_m,8)
        
        if(hour==14 && minutes==22 && zrobione==false)
        {
                funkcja()
                return PLUGIN_CONTINUE
        }
        return PLUGIN_HANDLED
}

public funkcja()
{
        client_print(0, print_chat, "*******************")
        server_cmd("wait")
        client_print(0, print_chat, "Plugin Dziala!")
        server_cmd("wait")
        client_print(0, print_chat, "*******************")
        server_cmd("wait")
        zrobione=true
        return PLUGIN_CONTINUE
}

Teoretycznie dobrze a na serwerze nic się nie działo :( na pewno dobrze skonstruowane pobieranie czasu?

24 kwiecień 2010 - 08:54:
ReF
Edited by Potatek, 23.04.2010 20:04.
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 24.04.2010

core się nie include'uje, jakby brakowało to by się nie skompilowało.

Poza tym kto mi wytłumaczy co zwraca funkcja get_time ?
new time_h[9]
        new time_m[9]
        new hour=get_time("%H",time_h,8)
        new minutes=get_time("%M",time_m,8)
Nie testowałem, ale w dokumentacji nie ma nic o tym żeby zwracała jakiś wynik, jedynie do stringa podanego jako parametr.
A tutaj...
Trzeba by zrobić tak:
new time_h[9]
        get_time("%H",time_h,8)
        new hour=str_to_num(time_h)
Tylko po co tak kombinować skoro to załatwić się da w 2 linijkach, bez stringów, bez przekształceń:
new godzina, minuta
        time(godzina,minuta)

Poza tym czas na serwerze może być inaczej ustawiony niż u ciebie. Wpisz w say "thetime"
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 24.04.2010

time samo w sobie zwraca czas od poczatku ery lajnuxowej a godziny/minuty/sekundy zwraca przez referencje
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 24.04.2010

time samo w sobie zwraca czas od poczatku ery lajnuxowej a godziny/minuty/sekundy zwraca przez referencje

pisałem o get_time a nie o time...
Quote
Locked