/* NPC reagujacy na emoty i przedstawiajacy sie.
 * Napisal Rasputin
 */

inherit "/std/monster"; /* jest to osobnik humanoidalny */
inherit "/std/act/add_things"; /* zebysmy mogli korzystac z add_weapon() i
				  add_armour() */

#include <ss_types.h>
#include <macros.h>
#include <stdproperties.h>
#include "defs.h"

#define TO    this_object()
#define MIECZ "/doc/examples/bronie/miecz.c"
#define BUTY  "/doc/examples/zbroje/buty.c"
#define ZBRO "/doc/examples/zbroje/kolczuga.c"
#define SPOD "/doc/examples/zbroje/spodnie.c"

czy_podoba_mi_sie_ten_gracz_w_mojej_gildii(object gracz);
czy_podobaja_mi_sie_inne_gildie_w_ktorych_jest_gracz(object gracz);

void
create_monster()
{
    object ekwipunek;
               
/* Ta funkcja odmieni nam krotka nazwe - z niej beda pobierane dane, 
   gdy zajdzie potrzeba wyswietlenia krotkiego opisu dowodczyni. 
   ALE, ta funkcja nie dodaje nazw, ktore gracz moglby 'zahaczyc' (czyli
   takich, ktore moglby uzyc w komendzie). Dlatego tez bedziemy musieli
   uzyc funkcji dodaj_nazwy() i dodaj_przym().
*/
    ustaw_shorty(({ "dowodczyni strazy", "dowodczyni strazy",
       		    "dowodczyni strazy", "dowodczynie strazy",
       		    "dowodczynia strazy", "dowodczyni strazy"}),
                 ({ "dowodczynie strazy", "dowodczyn strazy",
                    "dowodczyniom strazy", "dowodczynie strazy", 
                    "dowodczyniami strazy", "dowodczyniach strazy" }),
                    PL_ZENSKI);

/* 
 * Dodajemy nazwe 'dowodczyni'. Dane z tej tablicy nie beda 
 * uzywane do wyswietlenia na ekranie. Beda tylko sluzyly do 
 * porownywania z tym, co gracz wpisze, np w 'zaatakuj dowodczynie'.
 */
    dodaj_nazwy(({ "dowodczyni", "dowodczyni", "dowodczyni", "dowodczynie", 
    		   "dowodczynia", "dowodczyni" }), ({ "dowodczynie", 
    		   "dowodczyn", "dowodczyniom", "dowodczynie", "dowodczyniami",
                   "dowodczyniach" }), PL_ZENSKI);

    set_living_name("_dowodca_kadetow_Nuln");

/*
 * Ustawiamy dlugi opis dowodczyni - taki, ktory sie nam ukarze
 * po wpisaniu 'obejrzyj dowodczynie'.
 */                
    set_long("Jest to dowodczyni strazy miejskiej, kobieta niezwyklej urody. "+
             "Dlugie, czarne wlosy spiete z tylu opadaja jej na plecy. Rownie "+
             "czarne oczy swieca jakims niezwyklym blaskiem. Jej bujne ksztalty "+
             "skryte sa pod twarda kolczuga, a skorzane, obcisle spodnie "+
             "opasuja jej kragle biodra i podkreslaja niezwykla zgrabnosc "+
             "jej dlugich nog. Wysokie, podkute buty dodaja jej subtelnego "+
             "uroku. Jej twarz promienieje radoscia i dziewczeca niewinnoscia. "+
             "Rece ma smukle, a dlonie niezwykle gladkie, jakby stworzone "+
             "do pieszczot, a nie do dzierzenia miecza. Az trudno uwierzyc, ze "+  
             "tak urocza istota trudni sie wojaczka.\n");

/*
 * Ktos mily juz odmienil za nas odmiane rasy elfki. My po prostu korzystamy
 * z tego. Makra do odmiany sa zdefiniowane w /sys/pl.h
 */
    ustaw_odmiane_rasy(PL_ELFKA);

/*
 * Ustalamy plec dowodczyni.. jak sama nazwa wskazuje bedzie to kobieta :-)
 */    
    set_gender(G_FEMALE);
 
/* 
 * Nikt nigdy nie pozna imienia dowodczyni.
 */
    add_prop(LIVE_I_NEVERKNOWN, 1);
 
 /* 
  * 'Rozmiary' dowodczyni :-)
  */
    add_prop(CONT_I_WEIGHT, 55000);
    add_prop(CONT_I_HEIGHT, 170);

    set_skill(SS_DEFENCE, 25 + random(5));
    set_skill(SS_WEP_SWORD, 25 + random(10));
    set_skill(SS_UNARM_COMBAT, 15 + random(5));
    set_skill(SS_PARRY, 15 + random(10));

    set_stats(({ 25, 25, 22, 30, 30, 40}));

    set_cchat_time(5);
    add_cchat("A masz!");
    add_cchat("Teraz popamietasz!");
    add_cchat("I po co ci to?");

/*
 * Uzbrajamy nasze malenstwo. Swiat jest taki brutalny...
 */

    add_weapon(MIECZ);
    add_armour(ZBRO);
    add_armour(BUTY);
    add_armour(SPOD);
}

int
przylacz(object gracz, string str)
{
    object shadow;
    int result;

    if (!str || str != "sie")
    {
         notify_fail("Kogo chcesz zapisac?\n");
         return 0;
    }

    notify_fail("Nie spelniasz wymagan, jakich oczekujemy od naszych "+
        "czlonkow.\n");
        
    if (!czy_podoba_mi_sie_ten_gracz_w_mojej_gildii(gracz))
	return 0;

    notify_fail("Juz sie przylaczyl" + gracz->koncowka("es", "as") +
        " do innej gildii, ktorej czlonkowie nie sa tu mile widziani.\n");
        
    if (!czy_podobaja_mi_sie_inne_gildie_w_ktorych_jest_gracz(gracz))
	return 0;

    notify_fail("Z przyczyn obiektywnych nie mozesz sie do nas przylaczyc.\n");
    
    shadow = clone_object(SHADOW);
    
    if ((result = shadow->shadow_me(gracz, GUILD_TYPE, 
        GUILD_STYLE, GUILD_NAME)) != 1)
    {
    /* result = -1 (brak nazwy), -2 (zly typ), -3 (brak stylu),
                -4 (gildie, w ktorych jest gracz nie chca tej gildii.)
		-5 (klopoty z zalozeniem shadowa. ) */
    /* shadow_me() zapewne zatroszczy sie o stosowny komunikat bledu */

        shadow->remove_object();
        
	return 0;
    }
    dump_array(result);
    
    gracz->add_cmdsoul(SOUL);
    gracz->update_hooks();

    write("Od teraz jestes kadetem!\n");
    return 1;
}

int
wypisz(object gracz, string str)
{
    if (!str || str != "sie")
    {
         notify_fail("Kogo chcesz wypisac?\n");
         return 0;
    }

    
    if (gracz->query_guild_name_lay() != GUILD_NAME)
    {
        notify_fail("Alez ty nie jestes czlonkiem naszej gildii!\n");
	return 0;
    }

    if (gracz->remove_guild_lay())
    {
        gracz->remove_cmdsoul(SOUL);
        gracz->update_hooks();
	write("Wypisal" + this_player()->koncowka("es", "as") + " sie " +
	    "z naszej ukochanej gildii...\n");
    }
    else
	write("Wystapil jakis dziwny blad i chyba musisz sie jeszcze "+
	   "z nami troche pomeczyc. Proponuje napsac list do kogos "+
	   "odpowiedzialnego za to stowarzyszenie.\n");

    return 1;
}

int
czy_podoba_mi_sie_ten_gracz_w_mojej_gildii(object gracz)
{
    string rasa;
    
    rasa = gracz->query_race_name();
    if ( (rasa == "ogr") || (rasa == "ogrzyca"))
    {
	notify_fail("Ta szkola nie jest dostepna dla ogrow.\n");
	return 0;
    }

    if (gracz->query_guild_member(GUILD_NAME))
    {
	notify_fail("Alez juz jestes kadet" + 
	   gracz->koncowka("em", "ka") + "\n");
	return 0;
    }

/* Tu mozesz sprawdzic czy gracz rozwiazal questa wejsciowego, lub 
    czy spelnia jakiekolwiek inne wymagania... */
    
    return 1;
}

int
czy_podobaja_mi_sie_inne_gildie_w_ktorych_jest_gracz(object gracz)
{
    if (gracz->query_guild_member(GUILD_TYPE))
    {
	notify_fail("Alez juz jestes czlonkiem innej gildii laymanskiej!\n"); 
	return 0;
    }

    return 1;
}

podawaj_spis(int indeks)
{
  switch (indeks)
  {
    case 0 : command("emote grzebie przez chwilke w papierach.");
	     set_alarm(2.0, 0.0, "podawaj_spis", 1);
	     break;
    case 1 : command("' Zaraz ci powiem, do jakich gildii nalezysz. " +
		"Wszystko jest gdzies zapisane...");
	     set_alarm(2.0, 0.0, "podawaj_spis", 2);
	     break;
    case 2 : command("emote mruczy pod nosem: Tylko gdzie...");
             set_alarm(3.0, 0.0, "podawaj_spis", 3);
	     break;
    case 3 : command("emote wertuje jakies papiery.");
	     break;
  }
}

podaj_spis(object gracz)
{
    string str;

    command("' Mam!");

    str = gracz->list_mayor_guilds();
    if (str)
    {
      write("Dowodczyni strazy pokazuje ci kartke ze spisem gildii:\n" + str);
      say("Dowodczyni strazy pokazuje " + QIMIE(gracz, 2) + " jakas kartke.");
    }
    else
      command("' Nie jestes czlonkiem zadnej gildii.");

    return 1;
}

spis(object gracz)
{
  set_alarm(1.0, 0.0, "podawaj_spis", 0);
  set_alarm(10.0, 0.0, "podaj_spis", gracz);
}
