/* plik:         admin.c
 * autor:        Silvy
 * data:         17.05.98
 * update:       17.05.98
 * opis:         Plik administrujacy napadem bandy trolli na
 *               wioske Ciemny Staw w Averlandzie
 */

inherit "/d/Imperium/std/room.c";
// Najwygodniej jak bedzie to pomieszczenie - zawsze bede mogl
// tam isc, movnac jakichs npcow itd.
#include "local.h"

void zaczynamy_zabawe(int del);
void reset_bandy();
void reset_wioski(int faza);

int query_trolle();
int query_ludzie();

void engine_napadu(int faza);
void grupa1(int faza);
void grupa2(int faza);
void grupa3(int faza);

void czekamy1(int od, int dodd, int faza_nastepna, string gdzie);
void czekamy2(int od, int dodd, int faza_nastepna, string gdzie);
void czekamy3(int od, int dodd, int faza_nastepna, string gdzie);
void czekamy4(int od, int dodd, int faza_nastepna, string gdzie);

int czy_walka(object kto);
void wykoncz(int od, int dod, int kogo);

object *troll = allocate(9);
object *ludzie = allocate(16);
object mlot, maczuga;

float delay;
int j = 0;
int g1,g2,g3;
void
create_imperium_room()
{
    set_short("Serce Wioski");
    set_long("Witamy w Sercu Napadu na Wioske Ciemny Staw. Czuj sie jak "+
        "u siebie w dodmu.\n");
    zaczynamy_zabawe(1);
}

void
zaczynamy_zabawe(int del)
{
    int i = 0;

    while(i < 17)
    {
       set_alarm(itof(i)/10.0,0.0,&reset_wioski(i));
       i++;
    }

    set_alarm(1.0,0.0,&reset_bandy());
    delay = itof((random(4)+del)*2);
    set_alarm(delay,0.0,"zwiad");
}

void
zwiad()
{
    troll[8]->move(HOME + "droga6.c");
    set_alarm(60.0,0.0,"napad");
}

void
napad()
{
    troll[8]->command("emote usmiecha sie chytrze i znika biegiem w lesie.\n");
    troll[8]->remove_object();

    engine_napadu(0);
}

void
engine_napadu(int faza)
{
  int i;

  switch(faza)
  {
    case 0:
    j = 0;
    while(i < 8)
    {
      troll[i] -> move_living("M",HOME + "droga6.c");
      i++;
    }
    set_alarm(5.0,0.0,&engine_napadu(1));
    break;

    case 1:
    czekamy1(0,7,2,"x");
    break;

    case 2:
    troll[7]->command("emote skrzeczy Na kosci mego ojca klne sie, jak ktorys z was cos "+
        "spieprzy to mu gnaty policze!!!");
    troll[7]->command("krzyknij Naprzod!!!");
    troll[2]->command("krzyknij Taaa jest!");
    troll[6]->command("krzyknij Krwiiiii!");
    czekamy1(0,7,3,"zachod");
    break;

    case 3:
    czekamy1(0,7,4,"poludniowy-zachod");
    break;

    case 4:
    wykoncz(0,7,11);
    czekamy1(0,7,5,"x");
    break;

    case 5:
    troll[7]->command("emote skrzeczy: Rozdzielamy sie!");
    set_alarm(5.0,0.0,&grupa1(0));
    czekamy1(2,7,6,"polnocny-zachod");
    break;

    case 6:
    wykoncz(2,7,10);
    czekamy1(2,7,7,"polnoc");
    break;
    case 7:
    czekamy1(2,7,8,"polnocny-zachod");
    break;
    case 8:
    czekamy1(2,7,9,"zachod");
    break;
    case 9:
    troll[7]->command("emote skrzeczy: Wy dwaj na polnoc!");
    czekamy1(2,7,10,"x");
    break;
    case 10:
    troll[2]->command("emote krzyczy: Taaa jest!");
    set_alarm(1.0,0.0,&grupa2(0));
    czekamy1(4,7,11,"zachod");
    break;
    case 11:
    wykoncz(4,7,6);
    troll[7]->command("emote skrzeczy: Tylko cichcem i nie zostawiac swiadkow!");
    czekamy1(4,7,12,"x");
    break;
    case 12:
    troll[4]->command("usmiechnij sie krwio");
    set_alarm(1.0,0.0,&grupa3(0));
    czekamy1(6,7,13,"zachod");
    break;
    case 13:
    wykoncz(6,7,3);
    czekamy1(6,7,14,"polnoc");
    break;
    case 14:
    wykoncz(6,7,2);
    czekamy1(6,7,15,"poludnie");
    break;
    case 15:
    czekamy1(6,7,16,"poludnie");
    break;
    case 16:
    wykoncz(6,7,0);
    czekamy1(6,7,17,"x");
    break;
    case 17:
    wykoncz(6,7,1);
    czekamy1(6,7,18,"x");
    break;
    case 18:
    troll[7]->command("zasmiej sie krwio");
    troll[7]->command("emote skrzeczy: Kolejne latwe zwyciestwo!");
    set_alarm(1800.0,0.0,&engine_napadu(19));
    break;
    case 19:
    troll[7]->command("emote skrzeczy: Pora na nas, zmywamy sie stad!");
    czekamy1(0,7,20,"polnoc");
    break;
    case 20:
    czekamy1(0,7,21,"wschod");
    break;
    case 21:
    czekamy1(0,7,22,"wschod");
    break;
    case 22:
    czekamy1(0,7,23,"wschod");
    break;
    case 23:
    czekamy1(0,7,24,"poludniowy-wschod");
    break;
    case 24:
    czekamy1(0,7,25,"poludnie");
    break;
    case 25:
    czekamy1(0,7,26,"poludniowy-wschod");
    break;
    case 26:
    czekamy1(0,7,27,"polnocny-wschod");
    break;
    case 27:
    czekamy1(0,7,28,"wschod");
    break;
    case 28:
    troll[7]->command("emote skrzeczy: Spadamy stad!");
    troll[4]->command("krzyknij Taaa jest!");
    set_alarm(5.0,0.0,"trolle_odchodza");
    set_alarm(1800.0,0.0,&zaczynamy_zabawe(1));
    break;
  }
}

void
grupa1(int faza)
{
  int i;
  switch(faza)
  {
    case 0:
    czekamy2(0,1,1,"poludniowy-zachod");
    break;
    case 1:
    czekamy2(0,1,2,"zachod");
    break;
    case 2:
    czekamy2(0,1,3,"zachod");
    break;
    case 3:
    wykoncz(0,1,12);
    czekamy2(0,1,4,"poludnie");
    break;
    case 4:
    czekamy2(0,1,5,"poludnie");
    break;
    case 5:
    wykoncz(0,1,14);
    czekamy2(0,1,6,"zachod");
    break;
    case 6:
    czekamy2(0,1,7,"zachod");
    break;
    case 7:
    wykoncz(0,1,13);
    czekamy2(0,1,8,"poludnie");
    break;
    case 8:
    czekamy2(0,1,9,"zachod");
    break;
    case 9:
    wykoncz(0,1,15);
    czekamy2(0,1,10,"wschod");
    break;
    case 10:
    czekamy2(0,1,11,"polnocny-wschod");
    break;
    case 11:
    czekamy2(0,1,12,"polnocny-wschod");
    break;
    case 12:
    czekamy2(0,1,13,"polnocny-wschod");
    break;
    case 13:
    czekamy2(0,1,14,"wschod");
    break;
    case 14:
    czekamy2(0,1,15,"polnocny-wschod");
    break;
    case 15:
    czekamy2(0,1,16,"polnocny-zachod");
    break;
    case 16:
    wykoncz(0,1,10);
    czekamy2(0,1,17,"polnoc");
    break;
    case 17:
    czekamy2(0,1,18,"polnocny-zachod");
    break;
    case 18:
    czekamy2(0,1,19,"zachod");
    break;
    case 19:
    czekamy2(0,1,20,"zachod");
    break;
    case 20:
    wykoncz(0,1,6);
    czekamy2(0,1,21,"zachod");
    break;
    case 21:
    wykoncz(0,1,3);
    czekamy2(0,1,22,"poludnie");
    break;
    case 22:
    wykoncz(0,1,0);
    czekamy2(0,1,23,"x");
    break;
    case 23:
    wykoncz(0,1,1);
    break;
  }
}

void
grupa2(int faza)
{
    switch(faza)
    {
      case 0:
      czekamy3(2,3,1,"polnoc");
      break;
      case 1:
      czekamy3(2,3,2,"wschod");
      break;
      case 2:
      wykoncz(2,3,9);
      czekamy3(2,3,3,"zachod");
      break;
      case 3:
      czekamy3(2,3,4,"polnoc");
      break;
      case 4:
      wykoncz(2,3,7);
      czekamy3(2,3,5,"x");
      break;
      case 5:
      wykoncz(2,3,8);
      czekamy3(2,3,6,"poludnie");
      break;
      case 6:
      czekamy3(2,3,7,"poludnie");
      break;
      case 7:
      czekamy3(2,3,8,"zachod");
      break;
      case 8:
      wykoncz(2,3,6);
      czekamy3(2,3,9,"zachod");
      break;
      case 9:
      wykoncz(2,3,3);
      czekamy3(2,3,10,"poludnie");
      break;
      case 10:
      wykoncz(2,3,0);
      czekamy3(2,3,11,"x");
      break;
      case 11:
      wykoncz(2,3,1);
      break;
    }
}

void
grupa3(int faza)
{
    switch(faza)
    {
      case 0:
      czekamy4(4,5,1,"polnoc");
      break;
      case 1:
      czekamy4(4,5,2,"polnoc");
      break;
      case 2:
      czekamy4(4,5,3,"polnocny-wschod");
      break;
      case 3:
      wykoncz(4,5,4);
      czekamy4(4,5,4,"poludniowy-zachod");
      break;
      case 4:
      czekamy4(4,5,5,"poludnie");
      break;
      case 5:
      czekamy4(4,5,6,"wschod");
      break;
      case 6:
      czekamy4(4,5,7,"poludnie");
      break;
      case 7:
      wykoncz(4,5,5);
      czekamy4(4,5,8,"polnoc");
      break;
      case 8:
      czekamy4(4,5,9,"zachod");
      break;
      case 9:
      czekamy4(4,5,10,"poludnie");
      break;
      case 10:
      czekamy4(4,5,11,"zachod");
      break;
      case 11:
      wykoncz(4,5,3);
      czekamy4(4,5,12,"poludnie");
      break;
      case 12:
      wykoncz(4,5,0);
      czekamy4(4,5,13,"x");
      break;
      case 13:
      wykoncz(4,5,1);
      break;
    }
}

void
reset_bandy()
{
  int i = 0;
  while(i < 7)
  {
    if(!troll[i]) troll[i] = clone_object(HOME + "troll.c");
    i++;
  }
  // Siedem trolli - od troll[0] dod troll[6]
  if(!troll[7])
  {
    troll[7] = clone_object(HOME + "trollboss.c");
    if(!mlot)
    {
      mlot = clone_object(HOME + "mlotb");
      mlot -> move(troll[7]);
      troll[7] -> command("dobadz mlota");
    }
    else
    {
      maczuga = clone_object(HOME + "maczuga.c");
      maczuga -> move(troll[7]);
      troll[7] -> command("dobadz maczugi");
    }
  }
  // Magiczny mlot Aegis-fang jest unikalny.
  if(!troll[8]) troll[8] = clone_object(HOME + "zwiadowca.c");
  // Ork zwiadodwca
  i = 0;
  while(i < 9)
  {
      troll[i]->move(this_object());
      i++;
  }
}

void
reset_wioski(int faza)
{
    switch(faza)
    {
    case 0:
    if(!ludzie[0]) ludzie[0] = clone_object(HOME + "wojt.c");
    // Wodz
    if(!ludzie[1]) ludzie[1] = clone_object(HOME + "karczmarz.c");
    // Karczmarz
    if(!ludzie[2]) ludzie[2] = clone_object(HOME + "sklepowy.c");
    // Sklepikarz
    if(!ludzie[3]) ludzie[3] = clone_object(HOME + "baba.c");
    // Kobieta na placyku
    if(!ludzie[4]) ludzie[4] = clone_object(HOME + "baba.c");
    // Kobieta w lesie
    if(!ludzie[5]) ludzie[5] = clone_object(HOME + "chlopek.c");
    // Chlopek w wedzarni
    if(!ludzie[6]) ludzie[6] = clone_object(HOME + "chlop.c");
    // Chlop na drodze
    if(!ludzie[7]) ludzie[7] = clone_object(HOME + "baba.c");
    // Kobieta w dodmu
    break;
    case 1:
    if(!ludzie[8]) ludzie[8] = clone_object(HOME + "dziecko.c");
    // Dziecko w dodmu
    if(!ludzie[9]) ludzie[9] = clone_object(HOME + "chlop.c");
    // Chlop w stododle
    if(!ludzie[10]) ludzie[10] = clone_object(HOME + "chlopek.c");
    // Chlopek na rozstaju
    if(!ludzie[11]) ludzie[11] = clone_object(HOME + "dziecko.c");
    // Dziecko na rozstaju
    if(!ludzie[12]) ludzie[12] = clone_object(HOME + "chlop.c");
    // Chlop na polu
    if(!ludzie[13]) ludzie[13] = clone_object(HOME + "chlop.c");
    // Chlop na polu
    if(!ludzie[14]) ludzie[14] = clone_object(HOME + "chlopek.c");
    // Chlopek na rozstaju
    if(!ludzie[15]) ludzie[15] = clone_object(HOME + "chlopek.c");
    // Chlopek na rozstaju
    break;
    case 2:
    ludzie[0]->move(HOME + "karczma.c");
    ludzie[1]->move(HOME + "karczma.c");
    (HOME + "karczma")->set_karczmarz(ludzie[1]);
    break;
    case 3:
    ludzie[2]->move(HOME + "sklep.c");
    (HOME + "sklep")->set_sklepikarz(ludzie[2]);
    break;
    case 4:
    ludzie[3]->move(HOME + "placyk.c");
    break;
    case 5:
    ludzie[4]->move(HOME + "m11.c");
    break;
    case 6:
    ludzie[5]->move(HOME + "wedzarni.c");
    break;
    case 7:
    ludzie[6]->move(HOME + "m7.c");
    break;
    case 8:
    ludzie[7]->move(HOME + "n1.c");
    break;
    case 9:
    ludzie[8]->move(HOME + "n1.c");
    break;
    case 10:
    ludzie[9]->move(HOME + "o1.c");
    break;
    case 11:
    ludzie[10]->move(HOME + "droga3.c");
    break;
    case 12:
    ludzie[11]->move(HOME + "droga4.c");
    break;
    case 13:
    ludzie[12]->move(HOME + "laka10.c");
    break;
    case 14:
    ludzie[13]->move(HOME + "laka4.c");
    break;
    case 15:
    ludzie[14]->move(HOME + "laka6.c");
    break;
    case 16:
    ludzie[15]->move(HOME + "laka1.c");
    break;
  }
}

int
czy_walka(object kto)
{
    if(kto->query_attack()) return 1;
    return 0;
}

// Dla engine_napadu
void
czekamy1(int od, int dod, int faza_nastepna, string gdzie)
{
    int ktory = od;

    while(!troll[ktory])
    {
      ktory++;
      if(ktory == dod+1) return;
    }
    if(czy_walka(troll[ktory]))
    {
      ktory = 0;
      set_alarm(20.0,0.0,&czekamy1(od,dod,faza_nastepna,gdzie));
      return;
    }
    ktory = od;
    while(ktory < dod+1)
    {
      troll[ktory]->command(gdzie);
      ktory++;
    }
    set_alarm(20.0,0.0,&engine_napadu(faza_nastepna));
    return;
}

// Dla grupa1
void
czekamy2(int od, int dod, int faza_nastepna, string gdzie)
{
    int ktory = od;

    while(!troll[ktory])
    {
      ktory++;
      if(ktory == dod+1) return;
    }
    if(czy_walka(troll[ktory]))
    {
      ktory = 0;
      set_alarm(20.0,0.0,&czekamy2(od,dod,faza_nastepna,gdzie));
      return;
    }
    ktory = od;
    while(ktory < dod+1)
    {
      troll[ktory]->command(gdzie);
      ktory++;
    }
    set_alarm(20.0,0.0,&grupa1(faza_nastepna));
    return;
}

// Dla grupa2
void
czekamy3(int od, int dod, int faza_nastepna, string gdzie)
{
    int ktory = od;

    while(!troll[ktory])
    {
      ktory++;
      if(ktory == dod+1) return;
    }
    if(czy_walka(troll[ktory]))
    {
      ktory = 0;
      set_alarm(20.0,0.0,&czekamy3(od,dod,faza_nastepna,gdzie));
      return;
    }
    ktory = od;
    while(ktory < dod+1)
    {
      troll[ktory]->command(gdzie);
      ktory++;
    }
    set_alarm(20.0,0.0,&grupa2(faza_nastepna));
    return;
}

// Dla grupa3
void
czekamy4(int od, int dod, int faza_nastepna, string gdzie)
{
    int ktory = od;

    while(!troll[ktory])
    {
      ktory++;
      if(ktory == dod+1) return;
    }
    if(czy_walka(troll[ktory]))
    {
      ktory = 0;
      set_alarm(20.0,0.0,&czekamy4(od,dod,faza_nastepna,gdzie));
      return;
    }
    ktory = od;
    while(ktory < dod+1)
    {
      troll[ktory]->command(gdzie);
      ktory++;
    }
    set_alarm(20.0,0.0,&grupa3(faza_nastepna));
    return;
}

void
wykoncz(int od, int dod, int kogo)
{
    int i;
    i = od;

    if(!ludzie[kogo]) return;

    while(i < dod+1)
    {
        troll[i]->command("zabij "+OB_NAME(ludzie[kogo]));
        i++;
    }
}

void
trolle_odchodza()
{
    int i = 0;
    while(i < 8)
    {
        troll[i]->move(this_object());
        i++;
    }
}

int
query_trolle()
{
    int ile = 0;
    int i = 0;
    while(i < 8)
    {
        if(troll[i]) ile++;
        i++;
    }
    return ile;
}

int
query_ludzie()
{
    int ile = 0;
    int i = 0;
    while(i < 16)
    {
        if(ludzie[i]) ile++;
        i++;
    }
    return ile;
}

