#include "local.h"

inherit STD_KZ_HALFING;
inherit "/std/act/add_things.c";

#include "/d/Imperium/sys/alarm.h"

string my_nam, dodom_chat, wdom_chat, doplace_chat,
       wplace_chat, postoj, orbis, *ucieczka_dzien, *ucieczka_noc;
mixed temp_przym; // tymczasowe przymiotniki na noc.
mixed temp_seq = ({ 0, 0 }); // zapamietanie stanu _mon_chat i _mon_ran_act.
int spie;

int zasnij();
int obudz_sie();

public void
create_orbis_halfling()
{
}

public nomask void
create_halfling()
{
    if (!IS_CLONE)
        return; // Zeby zapobiec master objectom panoszacym sie wokol.
    
    dodom_chat   = "emote zbiera swoje rzeczy i wyrusza do domu znikajac ci z oczu.";
    wdom_chat    = "'Jak milo byc w domu.";
    doplace_chat = "'Czas mi w droge.";
    wplace_chat  = "'Jak milo przywitac kolejny dzionek.";
    postoj = ROOM_DIR + "dkoryt3";
    orbis  = ROOM_DIR + "private2";
    
    seq_new(STD_SEQ_NAME);
    // 0 - 4 heartbeaty czasu oczekiwania zanim zacznie dzialac.
    seq_addfirst(STD_SEQ_NAME, ({ random(5), "@@query_halfseq" }) );
    
    this_object()->create_orbis_halfling();

    ustaw_czas_wystepowania(({({"wiosna",({"swit"})})}));
      
}

public void // Miejsce, gdzie udaje sie na dzien.
set_postoj(string str)
{
    postoj = str;
    if (str[-2..-1] == ".c") // kasujemy '.c'
        postoj = postoj[0..-3];
}

public string
query_postoj()
{
    return postoj;
}

public void  // Miejsce udaje sie na spoczynek.
set_place(string str)
{
    orbis = str;
    if (str[-2..-1] == ".c") // kasujemy '.c'
        orbis = postoj[0..-3];
}

public string
query_place(string str)
{
    return orbis;
}

public void 
set_noc(string str1,string str2)
{
    dodom_chat = str1;
    wdom_chat = str2;
}

public void 
set_dzien(string str1,string str2)
{
    doplace_chat = str1;
    wplace_chat = str2;
}

public void
do_strazy_dzien(string *str)
{
    ucieczka_dzien = str + ({});
}

public void
do_strazy_noc(string *str)
{
    ucieczka_noc = str + ({});
}

public void 
czas(string time)
{
    int x;
    
    if (!IS_CLONE)
        return ;
        
    switch (time) 
    {
    case "noc":
        if (file_name(environment(TO)) != orbis) // nie jestesmy na miejscu..
        {
	    command(dodom_chat);
	    this_object()->move_living("M", orbis);
	}
	command(wdom_chat);
	
	do_strazy(ucieczka_noc);
	
	zasnij();
	
	break;
	
    case "wczesny ranek":
    
        obudz_sie();

        if (file_name(environment(TO)) != postoj) // nie jestesmy na miejscu..
        {
	    command(doplace_chat);
	    this_object()->move_living("M", postoj);
	}
	command(wplace_chat);

	do_strazy(ucieczka_dzien);

	break;
    }
}

void
zasnij()
{
    int x;
    
    if (spie)
        return;
    
    temp_przym = query_przymiotniki();
    x = sizeof(temp_przym);
    while (--x >= 0)
        remove_adj(temp_przym[x]); // Usuwanie wszystkich przymiotnikow
    dodaj_przym("spiacy", "spiacy");

    seq_delete(STD_SEQ_NAME);

    temp_seq[0] = seq_query("_mon_chat");
    temp_seq[1] = seq_query("_mon_ran_act");

    seq_delete("_mon_chat");
    seq_delete("_mon_ran_act");

    seq_new("_mon_ran_act");
    seq_addfirst("_mon_ran_act", ({ "@@query_noc_act" }) );
           
    spie = 1;
}

void
obudz_sie()
{
    int x;
    
    if (!spie)
        return;

    remove_adj("spiacy");
    x = sizeof(temp_przym[0]);
    while (--x >= 0)
        dodaj_przym(temp_przym[0][x], temp_przym[1][x]);

    seq_new(STD_SEQ_NAME);
    // 0 - 2 heartbeaty czasu oczekiwania zanim zacznie dzialac.
    seq_addfirst(STD_SEQ_NAME, ({ random(3), "@@query_halfseq" }) );

    seq_delete("_mon_ran_act");

    seq_new("_mon_chat");
    seq_addfirst("_mon_chat", temp_seq[0]);
    seq_new("_mon_ran_act");
    seq_addfirst("_mon_ran_act", temp_seq[1]);

    spie = 0;
}

string
query_noc_act()
{
    seq_addlast("_mon_ran_act", ({ random(2) + 1, "@@query_noc_act" }));
    
    switch(random(5))
    {
        case 0: return "emote mruczy cos przez sen.";
        case 1: return "emote cichutko chrapie.";
        case 2: return "emote usmiecha sie blogo. Pewnie sni " +
           this_object()->query_zaimek(PL_CEL, 0) + " sie jakis " +
           "posilek.";
        case 3: return "emote wierci sie przez sen.";
        case 4: return "emote przewraca sie z boku na bok.";
    }
}


public void 
set_my_id(string ide)
{
    my_nam = ide;
} 

public string
query_my_id()
{
    return my_nam;
}

public void 
do_die(object kiler)
{
    find_object(orbis)->npc_martwy(my_nam, kiler->query_nazwa(PL_MIA));
    ::do_die(kiler);
}

public void
attacked_by(object ob)
{
    int x;
    
    if (spie)
    {
        obudz_sie();

// We'll see

    seq_delete(STD_SEQ_NAME);

    temp_seq[0] = seq_query("_mon_chat");
    temp_seq[1] = seq_query("_mon_ran_act");

    seq_delete("_mon_chat");
    seq_delete("_mon_ran_act");

//
        
        command("emote budzi sie nagle z przerazeniem.");
    }
    
    ::attacked_by(ob);
}

void
pomoz_mi(object ob)
{
    if (spie)
    {
        obudz_sie();
        command("emote zrywa sie ze snu obudzon" + koncowka("y", "a", "e") +
            " krzykami.");
    }
    
    ::pomoz_mi(ob);
}
