inherit "/d/Imperium/std/monster";

#include <pl.h>
#include "std_imp.h"
#include <stdproperties.h>
#include "atrybuty.h"
#include "ialfen.h"

#define WYBOR ({({"niski","niscy"}),\
                ({"krepy","krepi"}),({"wysoki","wysocy"}),\
                ({"barczysty","barczysci"}),({"umiesniony","umiesnieni"}),\
                ({"dobrze zbudowany","dobrze zbudowani"}),\
                ({"potezny","potezni"})})

#define L_PRZYM 7
#define PEN_SPECJALA 3*random(query_stat(0)+120)
#define TO this_object()
#define TP this_player()



private int is_follow_enemy=0,is_aggressive_mil=1,al_follow=0,is_random_adj=0;

nomask void set_follow_enemy(int bool=0);
nomask int query_follow_enemy();
nomask void set_random_adj(int bool=0) {is_random_adj=bool;}
public int want_we_attack();

public void
create_zolnierz()
{
   ustaw_krotki_opis(({ "zolnierz", "zolnierza", "zolnierzowi", "zolnierza",
       "zolnierzem", "zolnierzu" }), ({ "zolnierze", "zolnierzy",
       "zolnierzom", "zolnierzy", "zolnierzami", "zolnierzach" }),
       PL_MESKI_OS);
   
   set_stats(({500,500,500,500,500,500}));
   
   ustaw_odmiane_rasy(PL_CZLOWIEK);
   
   add_prop(LIVE_I_NEVERKNOWN, 1);
   
   set_follow_enemy(1);
}

/*funkcja losuje liczbe rzucajac kos iloscia kosci scia - sciennych*/
private int 
los(int kos, int scia = 6)
{
  int i, wyn=0;
  for (i=0; i < kos; i++)
    wyn += random (scia);
  return wyn;
}

public int
query_have_random_adj()
{
   return 0;
}

nomask void
create_monster()
{
  int i,s,skil;
  
  add_prop(CONT_I_WEIGHT, 76000);
  add_prop(CONT_I_HEIGHT, 172);

  add_prop(NPC_I_NO_FEAR, 1);
  
  s = los(3, 3);
  set_stats(({265 - los(11,2),265-los(11,2),265-los(11,2),65-los(11,2),
    265-los(11,2),265 - los(11,2)}));
  switch (s)
  {
        case 0 : 
                 skil = 5;
                 break;
        case 1 : 
                 skil = 10;
                 break;
        case 2 : 
                 skil = 15;
                break;
        case 3 : 
                 skil = 20;
                 break;
        case 4 : 
                 skil = 25;
                 break;
        case 5 : 
                 skil = 30;
                 break;
        case 6 : 
                 skil = 35;
                 break;
        default:  set_stats (({1,1,1,1,1,1}));
          command ("powiedz Cos mam zjebane! Zglos BUGA!");
          skil = 1;
  }
  skil += 30;
  set_skill(SS_WEP_SWORD, skil + 200 - los(2, 3));
  set_skill(SS_WEP_POLEARM, skil + 200 - los(2, 3));
  set_skill(SS_2H_COMBAT, skil + 200 - los(2,3));
  set_skill(SS_DEFENCE, skil + 200 - los(2));
  set_skill(SS_PARRY, skil+ 200 - los(2));
  set_skill(SS_AWARENESS, skil + 200 - los(2));


  set_gender(G_MALE);
  ustaw_odmiane_rasy(PL_CZLOWIEK);
  
  set_hp(query_max_hp());

if (query_have_random_adj())
      {
         s = random(L_PRZYM);

         if (random(3)){
             i = random (LPOCZY);
             dodaj_przym(OCZY[i][0], OCZY[i][1]);
         }
         else {
             i = random (LPWLOSY, 0);
             dodaj_przym(WLOSY[i][0], WLOSY[i][1]);
         }

         dodaj_przym(WYBOR[s][0],WYBOR[s][1]);
         
      }

   create_zolnierz();
   
   if (is_aggressive_mil)
      {
         set_npc_react(1);
         set_aggressive("@@want_we_attack");
      }
   
   add_prop(IMPERIUM_LIVE_I_GWARDZISTA, 1);
}

nomask int
query_imperium_military() { return 1;}

public int 
want_we_attack()
{
   if (member_array(TP,TO->query_enemy(-1))>-1) return 0;
   if (TP->query_prop(IMPERIUM_I_STWOR_CHAOSU)) return 1;
   if (TP->query_prop("chaosnik")) return 1;   
   if (TP->query_prop("wampir")) return 1;   
   if (TP->query_prop("nekro")) return 1;         
   if (TP->query_prop(IMPERIUM_I_BIJE_W_MIESCIE)) return 1;
   return 0;
}

nomask void 
set_follow_enemy(int bool=0)
{
   is_follow_enemy=bool;
}

nomask void
set_aggressive_mil(int bool=1)
{
   is_aggressive_mil=bool;
}

nomask int 
query_follow_enemy()
{
   return is_follow_enemy;
}

nomask int
query_aggressive_mil()
{
   return is_aggressive_mil;
}

public void
zol_hook_follow_enemy(object enemy)
{
   if (enemy->query_prop(IMPERIUM_I_STWOR_CHAOSU))
      command("krzyknij Stwor Chaosu! Nie ucieknie nam!");
   else
     command("krzyknij To " + enemy->query_nonmet_name(PL_MIA) + ". Nie mozemy " +
   	"dac " + enemy->query_zaimek(PL_CEL) + " uciec!");
}

nomask void
follow_enemy(object enemy)
{
   if (enemy!=query_follow()&&!sizeof(get_alarm(al_follow)))
      {
         zol_hook_follow_enemy(enemy);
         if (enemy->query_average_stat()>40)
            al_follow=set_alarm(0.001, 0.0, &set_follow(enemy, 0.001));
         else
            al_follow=set_alarm(0.001, 0.0, &set_follow(enemy, 0.001)); 
      }
}

public void
attacked_by(object wrog)
{
   if (is_follow_enemy) follow_enemy(wrog);
   
   ::attacked_by(wrog);
}

public void
attack_object(object ob)
{
   if (is_follow_enemy) follow_enemy(ob);
   
   ::attack_object(ob);
}

public void
notify_you_killed_me(object dead)
{
   set_alarm(0.5,0.0,&command("wez wszystko z ciala"));
}
