/* Plik:          deluvian.c
 * Autor:         Silvy
 * Data:          13.10.97
 * Last update:   13.10.97
 * Opis:          Przykladowy npc w domenie Imperium
 */

inherit "/d/Imperium/std/monster";
// Dziedziczymy standardowego npc'a Imperium.

#include "silvy.h"
// Definicje lokalne.

#define   PLAYER_I_DOSTAL_ZADANIE6_NULN  "_player_i_dostal_zadanie6_nuln"

void oddaj_rzecz(object ob, object from);
void oddal_list(object from);
void ile_doswiadczenia(object who);

void
create_monster()
{
    ustaw_nazwe(({"deluvian", "deluviana", "deluvianowi", "deluviana", "deluvianem",
        "deluvianie"}), ({"", "", "", "", "", ""}), PL_MESKI_NZYW);
// Nazwiemy go Deluvian. Liczby mnogiej nie ustalamy bo nie przewidujemy jego
// obecnosci w wiecej niz jednej osobie.
    set_gender(G_MALE);
    ustaw_odmiane_rasy(PL_ELF); 
// Ustalamy jego plec i rase. 
    dodaj_przym("wysoki", "wysocy");
    dodaj_przym("ciemnoskory", "ciemnoskorzy");
// Dla osob postronnych ma to byc ciemnoskory przygarbiony elf. 
    set_alignment(-100);
// Zdecydowanie zly. 
    set_long("Masz przed soba ciemnoskorego, wysokiego mezczyzne. " +
        "Ma on na sobie dluga szate, tak dopasowana, by " +
        "nie krepowac ruchow jej wlasciciela. Para blyszczacych, jasnych oczu " +
        "nie pasuje do pomarszczonego, ciemnobrunatnego oblicza, jest " +
        "jakby z innego swiata. " +
        "Czujesz niepokojaca aure bijaca od tego elfa.\n");
// Jego 'dlugi opis'.
    set_stats(({ 266, 200, 250, 80, 80, 70 }));
// Wartosci jego wspolczynnikow. Musza byc zgodne z wytycznymi z pliku
// wielkosci.txt
    set_skill(SS_DEFENCE, 95);
    set_skill(SS_AWARENESS, 90);
    set_skill(SS_WEP_SWORD, 75);
    set_skill(SS_BLIND_COMBAT, 50);
    set_skill(SS_PARRY, 95);
// Jego zdolnosci.    
    set_chat_time(20+random(10));
    add_chat("Czego tu chcesz?");
    add_chat("Idz stad, tylko mi przeszkadzasz.");
    add_chat("Ktos cie tutaj zaprosil?");
// Losowe 'odzywki' naszego elfa. Bedzie je generowal co okolo 20 sekund.    
    set_act_time(12 + random(20));
    add_act("emote wpatruje sie z wyrazem oczekiwania w blask " +
        "bijacy z pentagramu na podlodze.");
    add_act(({"westchnij demon", "usmiechnij sie sadys", "wzdrygnij sie"}));
    add_act("emote mruzy na chwile oczy i zaczyna cos mamrotac.");
// Losowe emoty.    
    set_cchat_time(3 + random(5));
    add_cchat("Zaatakowales mnie ... nawet sobie nie wyobrazasz jaki to blad.");
    add_cchat("Bedziesz cierpial ty i cala twoja rodzina.");
    add_cchat("Twoje cierpienie bedzie dla mnie radoscia.");
// Losowe 'odzywki' podczas walki.    
    set_cact_time(5);
    add_cact(({"krzyknij", "zasmiej sie szale"}));
    add_cact("emote podnosi do gory obie rece i mruzac oczy zaczyna cos nucic.");
    add_cact("emote krzyczy: Nie wyjdziesz stad zywy ...");
    add_cact("emote krzyczy: Derthmogu ... przybywaj !!! Potrzebuje twej mocy !!!");
    add_cact("emote cofa sie w strone czerwonego otworu w posadzce.");
// Losowe emoty podczas walki.
    add_armour(NPATH + "zbroje/szaty.c");
    add_armour(NPATH + "zbroje/ring.c");
    add_armour(NPATH + "zbroje/naszyjn.c");
    add_weapon(NPATH + "bronie/scimitar.c");
// Dodajemy sciezki do uzbrojenia w jakie zaopatrzymy naszego elfa.

    remove_prop(NPC_M_NO_ACCEPT_GIVE);

}

void
add_introduced(string imie)
{
    set_alarm(2.0,0.0,"return_intro", imie);
}

varargs void 
return_intro(string kto)
{
    command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
}
// Dwie powyzsze funkcje pozwalaja naszemu elfowi przedstawiac sie.

string
query_presentation()
{
    return"Deluvian Demonolog, Straznik Wiezy Przeznaczenia, mroczny elf";
}
// Maskujemy funkcje query_presentation() by wygenerowac to, jak   
// Deluvian sie ma przedstawiac.

void
meczymy(object kogo)
{
    command("emote wykonuje kilka niezrozumialych gestow, szepczac przy tym jakies "+
       "slowa.");     
       
    // Tu przydaloby sie uzaleznic efekt od resistance na ten 
    // typ magii ale skoro nie ma magii zdefiniowanej na razie to 
    // ja to olewam na razie   
    
    kogo->catch_msg("Czujesz dziwna aure, ktora zabiera ci energie. " +
        "Czujesz sie bardziej zmeczon"+kogo->koncowka("y","a")+".\n");
    kogo->add_fatigue(-(kogo->query_fatigue()/2));
}

void
attacked_by(object ob)
{
     command("krzyknij Derthmogu! Wspomoz mnie!");
     meczymy(ob);
     ::attacked_by(ob);
}
               

void
enter_inv(object ob, object from)
{
    ::enter_inv(ob, from);

    if(function_exists("create_heap",ob))
    {
      command("usmiechnij sie przebie");
      return; 
    }

    if(!from) return;    
    if(ob->id("_list_do_deluviana_"))
    {
       set_alarm(1.0, 0.0, &oddal_list(from));
       ob->remove_object();
       return; 
    } 
    set_alarm(1.0, 0.0, &oddaj_rzecz(ob, from));
    return;
}

void
oddaj_rzecz(object ob, object from)
{

    command("emote kreci glowa zdziwiony.");
    command("emote dodaje: Zabierz to, albo porozmawiamy inaczej! ");
    command("daj " + ob->query_nazwa(3) + " " + from->query_nazwa(2));

} 

void
oddal_list(object from)
{
   string who,
   what;
   
   who = from->query_real_name();
   
   if (!from->query_prop(PLAYER_I_DOSTAL_ZADANIE6_NULN))
   {
      command("emote mowi: O, moj list. Musialem go zgubic."); 
      return;
   }
   command("emote mowi: List do mnie? Dziekuje.");
   ile_doswiadczenia(from); 
   command("emote mowi: Ciekawe jak mnie znalazl"+from->koncowka("es","as")+" ...");
   command("emote usmiecha sie demonicznie.");
   command("emote mowi: Niestety, nie moge pozwolic, bys przekazal"
       +from->koncowka("","a")+" "+
       "innym miejsca mego pobytu. Przykro mi, ale juz tu zostaniesz " +
       "na wieki.");
   command("zasmiej sie diabel");
   meczymy(from);
   command("zabij " + from->query_real_name(PL_BIE));    
   return;
}

void
ile_doswiadczenia(object who)
{
   int xp_base = 1000;
 
   if (who->test_bit("imperium", 0, 17))
   { 
      who->catch_msg("To znowu ty ? Nie nauczysz sie zbyt wiele robiac w kolko to samo.\n");
      return;
   }

   who->catch_msg("Czujesz sie troche bardziej doswiadczony.\n");
   who->add_exp(xp_base, 0); 
   who->set_bit(0, 17);

   seteuid("silvy");
   write_file("/d/Imperium/private/questlog/0_17.log",
              ctime(time()) + ": " + who->query_name() + ", " + xp_base
            + " xp\n");
   return;
}

