/* Plik:   boss.c
 * Autor:  by Tarkin :)
 * Data:   21.1.1998
 * Opis:   Moja proba napisania dobrze dzialajacego NPC'a a 
 *         przy okazji boss Karak-Varn
 */
 
inherit "/d/Imperium/std/monster";
#include <money.h>
#include "local.h"

#define   PLAYER_I_DOSTAL_ZADANIE2_NULN  "_player_i_dostal_zadanie2_nuln"

void oddaj_rzecz(object ob, object from);
void oddal_list(object from);
void ile_doswiadczenia(object who);

#define PEN_SPECJALA 500

#include "/d/Imperium/funkcje/specjal1.c"

void
create_monster()
{
  ustaw_odmiane_rasy(PL_KRASNOLUD);
  
  dodaj_przym("siwobrody", "siwobrodzi");
  dodaj_przym("powazny","powazni");
  
  
  ustaw_nazwe( ({"khadin","khadina","khadinowi","khadina","khadinem",
  "khadinie"}),
  ({"khadinowie","khadinow","khadinom","khadinow","khadinami","khadinach"}),
  PL_MESKI_OS);
  
  set_long("Ten starszy krasnolud wyglada bardzo powaznie i dostojnie. "+
  "Widac ze jest doswiadczonym wojownikiem i szanowanym obywatelem Karak-Varn, "+
  "zapewne jego zdanie liczy sie najbardziej na odbywajacych sie w tym miejscu "+
  "zgromadzeniach i naradach.\n");
  
  set_gender(G_MALE);
  
  add_prop(CONT_I_WEIGHT, 90000);
  add_prop(CONT_I_HEIGHT, 160);

  remove_prop(NPC_M_NO_ACCEPT_GIVE);

  set_stats(({ 85, 50, 70, 40, 50, 50}));  

  set_skill(SS_WEP_AXE, 95);
  set_skill(SS_CLIMB, 40 + random(10));
  set_skill(SS_DEFENCE, 95);
  set_skill(SS_PARRY, 95);

set_act_time(30+random(30));
add_chat("Powiedz jak podoba ci sie w naszym podziemnym miescie?");
add_chat("Pamietaj nie wszczynaj tutaj zadnych burd, nasza straz "+
"dobrze pilnuje porzadku !");
add_chat("Czy wiesz, ze w tunelach pod miastem panosza sie pomioty Chaosu?"+
    " Trzeba je wytepic zanim same zaatakuja.");

set_chat_time(20+random(20));
add_act("emote gladzi sobie brode.");
add_act("emote poprawia wielki topor przy swoim pasie.");
add_act("emote usmiecha sie przyjacielsko.");
add_act("emote patrzy uwaznie na ciebie.");

set_cact_time(10+random(20));
add_cact("emote mowi: Nie wygrasz ze mna tak latwo.");
add_cact("emote patrzy sie na ciebie drwiaco.");
add_cact("emote krzyczy: Zginiesz !");
add_cact("emote z gracja przeskakuje nad wystajacym kamieniem.");




add_weapon(MPATH + "topor2.c");
add_armour(MPATH + "kolczuga.c");
add_armour(MPATH + "helm.c");

}


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));
}

string
query_presentation()
{
  return"Khadin Khaman, Przywodca Krasnoludow z Karak-Varn, krasnolud";
}
   

void
enter_inv(object ob, object from)
{
    ::enter_inv(ob, from);

    if(!from) return;    
    if(ob->id("_list_do_khadina_"))
    {
       set_alarm(1.0, 0.0, &oddal_list(from));
       return; 
    } 
    if(ob->query_coin_type() == "zloto") 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 mowi: Co to jest ? Po co mi to dajesz ?.");
    command("emote dodaje: Zabierz to! ");
    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_ZADANIE2_NULN))
   {
      command("emote mowi: O, moj list. Musialem go zgubic."); 
      return;
   }
   command("emote mowi: List do mnie? Dziekuje ci serdecznie.");
   ile_doswiadczenia(from); 
   return;
}

void
ile_doswiadczenia(object who)
{

   int xp_base = 300;
 
   if (who->test_bit("imperium", 0, 14))
   { 
      who->catch_msg("To znowu ty ? Nie nauczysz sie zbyt wiele robiac w kolko to samo.\n");
      return;
   }
   command("emote mowi: Masz tu pare groszy.");
   MONEY_MAKE_GC(3)->move(TO);
   command("daj 3 zlote monety " + who->query_real_name(2));

   who->catch_msg("Czujesz sie troszke bardziej doswiadczon" +
   	who->koncowka("y","a") + ".\n");
   who->add_exp(xp_base, 0); 
   who->set_bit(0, 14);

   seteuid("silvy");
   write_file("/d/Imperium/private/questlog/0_14.log",
              ctime(time()) + ": " + who->query_name() + ", " + xp_base
            + " xp\n");
   return;
}

public void
wesprzyj(object ob)
{
    if (query_attack())
    {
/*
        switch(random(3))
        {
            case 0: command("emote syczy glosno."); break;
            case 1: command("krzyknij Besssstio!"); break;
            case 2: command("krzyknij Ku chwale gadow!"); break;
        }
*/        
        return ;
    }
    
    command("wesprzyj " + OB_NAME(ob));
    
    if (query_attack())
    {
        switch(random(5))
        {
            case 0: command("krzyknij Zgin Bestio!"); break;
            case 1: command("krzyknij Do broni!"); break;
            case 2: command("krzyknij Krasnoludow sie bic zachcialo, A?"); break;
            case 3: command("krzyknij Zgin pomiocie Chaosu!"); break;
            case 4: command("krzyknij Na smierc!"); break;
        }
        return ;
    }

}

public void
pomocy()
{
    (all_inventory(environment(this_object())) - ({ this_object() }))->wesprzyj(this_object());
}

void
attacked_by(object wrog)
{
    command("krzyknij Do boju!");
    set_alarm(0.1, 0.0, "pomocy");
    return ::attacked_by(wrog);
}
