/* szczur przenoszacy wiadomosci
 * napisane przez Alfena
 */
#include "local.h"
#include <pl.h>
#include <stdproperties.h>
#include <wa_types.h>
#include <macros.h>
inherit GPATH + "std/golab";
#define TIMES 5
#define SLOWLY 20 + random(10)
#define UNKNOWN "unknown"
void
create_creature()
{
	ustaw_odmiane_rasy(({ "szczur", "szczura", "szczurowi", "szczura",
            "szczurem", "szczurze" }), ({ "szczury", "szczurow",
            "szczurom", "szczury", "szczurami", "szczurach" }),
            PL_MESKI_NOS_ZYW);
	dodaj_przym("czarny","czarni");
	dodaj_przym("bystry","bystrzy");
	
	ustaw_nazwe(({ "szczur", "szczura", "szczurowi", "szczura",
            "szczurem", "szczurze" }), ({ "szczury", "szczurow",
            "szczurom", "szczury", "szczurami", "szczurach" }),
            PL_MESKI_NOS_ZYW);
	
	set_long("Spogladasz na "+short(PL_BIE)+", siedzacego na twoim"+
        " ramieniu. Jezeli pragniesz komus wyslac wiadomosc poprzez niego"+
        " wystarczy ze wyslesz go do tej osoby <wyslij szczura do -imie->"
#if TIMES > 1
        + " lub <wyslij odpowiedz>"
#endif
        + ". Jesli szczurowi z jakis powodow nie uda sie dostarczyc wiadomosci"
        + " mozesz zawsze sprobowac wyslac go ponownie <wyslij ponownie>.\n");
	add_prop(CONT_I_WEIGHT, 350);
	add_prop(CONT_I_VOLUME, 350);
	add_prop(OBJ_I_NO_GET, 0);
	add_prop(OBJ_I_NO_DROP, 0);
	add_prop(LIVE_I_NEVERKNOWN, 1);
	add_prop(NPC_I_NO_FEAR, 1);
	add_prop(NPC_M_NO_ACCEPT_GIVE, " nie jest w stanie uniesc nic" +
		" innego niz wiadomosc.\n");
	
	set_attack_unarmed(1, 5, 5, W_IMPALE, 50, "ostrymi zebami");
	set_attack_unarmed(1, 7, 7, W_SLASH, 50, "ostrymi pazurami");
	set_hitloc_unarmed(1, 7, 100, "pokryte czrna sierscia cialo");
	
	set_stats( ({10, 10, 10, 10, 10, 10}) );
}
int
resend()
{
    object target;
    if (!gSender || !gWho || this_player() != find_player(gSender))
    {
        notify_fail("Nie mozesz wyslac ponownie jezeli najpierw nie wyslesz szczura.\n");
        return 0;
    }
    if (target = find_player(gWho))
    {
        write("Wysylasz szczura aby sprobowal dostarczyc jeszcze raz wiadomosc.\n");
        move("/d/Imperium/obj/golebnik.c");
        set_alarm(itof(SLOWLY), 0.0, "deliver");
        return 1;
    }
    notify_fail("Szczur jest zbyt wyczerpany aby dostarczyc ta wiadomosc.\n");
    return 0;
}
int
do_send(string str)
{
  string who;
    string known, intro, remem;
    object target, tp;
    
  if(!str) return 0;
  if(str=="ponownie") return resend();
   sscanf(str,"szczura do %s",who);    
 
    if ((!who || who == "") && str!="odpowiedz")
        return 0;
  
    tp = this_player();
    if (tp != environment())
        return 0;
    if (gUsage >= TIMES)
    {
        write("Szczur jest zbyt wyczerpany aby dostarczyc kolejna wiadomosc.\n");
        return 1;
    }
/*
    if (environment(tp)->query_prop(ROOM_I_INSIDE))
    {
        write("Aby wyslac golebia musisz wyjsc na otwarty teren.\n");
        return 1;
    }
*/
    dWho = who;
    gWho =trans_przyp(PL_DOP,PL_MIA,dWho);   
    if (str == "odpowiedz")
    {
        /* Has a message been written before? */
        if (!gUsage)
        {
            write("Nie otrzymales wiadomosci, aby wyslac odpowiedz.\n");
            return 1;
        }
        gWho = gSender;
    }
 /* If a player knows the name of another player, let him send the pigeon. */
   
    gSender = lower_case(tp->query_name(PL_MIA));
    target = find_player(gWho);
 /* It is useless to write a message to someone who isn't in the game. */
    /* Save the location of the player. Only if s/he stays, there will be
     * confirmation.
     */
    if (objectp(environment(tp)))
    {
        gLocation = file_name(environment(tp));
    }
    else
    {
        gLocation = UNKNOWN;
    }
    write("Napisz swoja wiadomosc.\n"
        +"Zakoncz linia, w ktorej znajduja sie ** aby wyslac wiadomosc, lub"+
        " ~q aby przerwac jej pisanie.\n");
    gMessage = "";
    write("-->");
    input_to("write_more");
    return 1;
}
void
send_mail()
{
    if (gMessage == "")
    {
        write("Wpisywanie wiadomosci przerwane.\n");
        return;
    }
    write("Zwijasz wiadomosc w rulonik i przyczepiasz do karku szczura.\n");
    say(QCTNAME(this_player()) + " zwija wiadomosc w rulonik i przyczepia" +
        " do karku swojego szczura.\n");
    say("Szczur wyprostowuje sie gwaltownie na swoich lapkach, po czym "+
        "skacze i szybkimi susami biegnie w dal.\n");
      write("Szczur wyprostowuje sie gwaltownie na swoich lapkach, po czym "+
        "skacze i szybkimi susami biegnie w dal.\n");
 /* Move the object to a temporary room */
    move("/d/Imperium/obj/golebnik.c");
    set_alarm(itof(SLOWLY), 0.0, "deliver");
    return;
}
void
write_more(string str)
{
    if (str == "**")
    {
        send_mail();
        return;
    }
    if (str == "~q")
    {
        write("Pisanie wiadomosci przerwane.\n");
        return;
    }   
    gMessage += (str + "\n");
    write("-->");
    input_to("write_more");
    return;
}
void
deliver()
{
    object target, message;
/* Does our initial target still exist? We check for the objectpointer and
 * we also check the room. If the target is inside, he does not exist as
 * far as the pigeon is concerned.
 */
    target = find_player(gWho);
/* If the target is not found, the sender is tracked. If s/he moved, the
 * pigeon is not able to re-locate him/her.
 */
    if (!target)
    {
        target = find_player(gSender);
        if ((gLocation == UNKNOWN) ||
            (objectp(target) && (file_name(environment(target)) != gLocation)))
        {
            target = 0;
        }
        if (!objectp(target))
        {
            remove_object();
            return;
        }
    }
 /* Go to the target */
    move(target);
    if (target == find_player(gSender))
    {
        tell_object(target, "Twoj szczur powrocil nie mogac" +
               " znalezc adresata.\n");
        return;
    }
    else
        tell_object(target,"Na twoje ramie niespodziewanie wskoczyl"+
                " szczur. Na jego karku znajduje sie zwinieta"+
                " wiadomosc przeznaczona dla ciebie.\n");
    say("Niespodziewanie na ramie " + QIMIE(target,PL_DOP) +
         " wskoczyl szczur z przyczepiona do karku wiadomoscia.\n");
    message = clone_object("/d/Imperium/obj/message");
    message->set_message(gMessage);
    message->set_sender(gSender);
    message->move(target);
    gUsage++;
    if (gUsage >= TIMES)
        set_alarm(10.0, 0.0, "return_home");
}
void
return_home()
{
    object room;
    if (living(room = environment()))
        room = environment(room);
	say("Szczur zakolysal sie powoli, po czym nagle skoczyl i zniknal w cienu.\n");
	write("Szczur zakolysal sie powoli, po czym nagle skoczyl i zniknal w cienu.\n");
    remove_object();
}
