/*
 *  Plik inheritowany ( orginalnie : includowany (?)) przez standardowa
 *  lokacje, zawierajacy
 *  kilka przydatnych funkcji. Umozliwia dostosowanie eventow do dnia/nocy.
 *  Niestety funkcja add_event() byla nomask, co nieco skomplikowalo
 *  sytuacje i zmusilo mnie do namawiania Silvego.
 *  /d/Imperium/std/room/events.c
 *
 *  Udostepnione dzieki uprzejmosci Silviego, 1997.
 *  Przerobiony przez Mithandira mimo wyraznego niedowiarstwa Tanisa. 1998
 *  Zmienilem trzy rzeczy: zamiast tablicy eventow zrobilem dwie. Kazda
 *            przechowywuje eventy w odpowiednio dzien/nocy.
 *  w add_action() treaz w zaleznosci od 2. parametru wpisuje event do
 *            dnia/nocy/(dnia+nocy)
 *            UWAGA: To _jest_kompatybilne_wstecz.Jesli sie nie poda
 *            parametru lub poda 0, event zostanie wpisany do OBU tablic
 *  w run_events na poczatku podmieniamy tablice wlasciwa dla aktualnej pory.
 *
 *  Calosc jest tak piekna, ze jesli bedzie dzialac, to bede najszczesliwszym
 *  wizem na Arkadii. No,chyba ze znow mnie trafi ( sz ) laaaaag.
 *  Ale sie dzisiaj uwzialem na pisanie dlugich komentarzy :)) To juz
 *  czwarty taki :)).
 */

#pragma strict_types

#include <filter_funs.h>
#include <mudtime.h>

private int events_on = 0,
            events_running = 0;

private float start_time = 0.0,
              repeat_time = 0.0;

private string *event_listd = ({});
private string *event_listn = ({});



static nomask void
set_event_time(float start, float repeat)
{
    start_time = start;
    repeat_time = repeat;
}

static void
run_events()
{
    string *event_list= 
        (((this_object()->pora_dnia())=="noc") ? event_listn : event_listd);
    int num = sizeof(event_list);

    if (events_on && num && sizeof(FILTER_PLAYERS(all_inventory(this_object()))))
    {
        tell_room(this_object(), event_list[random(num)]);
        if (repeat_time != 0.0)
        {
            set_alarm(repeat_time, 0.0, "run_events");
            return;
        }
    }
}

static void
set_events_on(int i)
{
    events_on = i;
}


varargs static int
add_event(string event,int pora)
{
    switch(pora)
    {
        case 0: event_listd += ({event});
                event_listn += ({event});
                break;
        case 1: event_listd += ({event});
                break;
        case 2: event_listn += ({event});
    }
    return 1;
}

static nomask void
clear_events()
{
  event_listd = ({});
  event_listn = ({});
  events_running = 0;
  events_on = 0;
}
