/* 
 * Kompania Krogulca
 *
 * Copyright(C):    Khazzar (jedrekz@pascom.pl)
 * Data:            01.09.2003
 * 
 */

int
awansuj(string str)
{
    object *cel = parse_this(str,"%l:"+PL_BIE);

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Kogo chcesz awansowac?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest " +
                "zolnierzem Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie mozesz " + cel[0]->koncowka("go","jej") +
                " wyzej awansowac.\n");
    if ( ENGINE->query_data(cel[0], RANGA) == 
         ENGINE->query_data(TP, RANGA) -1 ) return 0;

    notify_fail("Nie mozesz " + cel[0]->koncowka("go","jej") +
                "wyzej awansowac.\n");
    if ( !ENGINE->promote(cel[0],0) ) return 0;

    TP->catch_msg("Awansowal" + TP->koncowka("es","as") + " " +
                  QIMIE(cel[0], PL_BIE) + " do rangi " + 
                  TYTULB[ENGINE->query_data(cel[0], RANGA)] + ".\n");
    cel[0]->catch_msg(QIMIE(TO, PL_MIA) + " awansowal" + 
                      TP->koncowka("","a") + " cie do rangi " +
                      TYTULB[ENGINE->query_data(cel[0], RANGA)] +
                      ".\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " awansowal" + 
              TP->koncowka("","a") + " " + QIMIE(cel[0], PL_BIE) + 
              " do rangi " + TYTULB[ENGINE->query_data(cel[0], RANGA)] +
              ".\n",({TP, cel[0]}));
    return 1;
}

int
przydziel(string str)
{
    object *cel;
    string gdzie = "", kogo = "";
    int selector;

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Przydziel kogo do jakiego plutonu?\n");
    if (!stringp(str) || (sscanf(str, "%s do plutonu %s", kogo, gdzie) != 2))
        return 0;

    cel =  parse_this(kogo, "%l:" + PL_BIE);

    notify_fail("Kogo chcesz przydzielic do plutonu?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest " +
                "zolnierzem Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Przydziel " + QIMIE(cel[0],PL_MIA) + " do plutonu alfa " +
                "czy delta?\n");
    if (gdzie == "alfa")       selector = ALFA;
    else if (gdzie == "delta") selector = DELTA;
         else return 0;

    notify_fail("Nie mozesz tego zrobic.\n");
    if ( !(ENGINE->query_data(cel[0], RANGA) <
         ENGINE->query_data(TP, RANGA)) ) return 0;

    notify_fail("Wystapil blad. Funkcja join.\n");
    if ( !ENGINE->join(cel[0], selector) ) return 0;

    cel[0]->catch_msg(QIMIE(TP,PL_MIA) + " przydzielil" + TP->koncowka("","a") +
                      " cie do nowego odzialu.\n");
    TP->catch_msg("Przydzieli;" + TP->koncowka("es","as") + " " + 
          QIMIE(cel[0],PL_BIE) + " do nowego oddzialu.\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " przydzielil" + 
              TP->koncowka("","a") + " " + QIMIE(cel[0], PL_BIE) + 
              " do nowego odzdzialu.\n",({TP, cel[0]}));
    return 1;
}

int
lista(string str)
{
    int i, ilosc, wszyscy;
    mapping members   = ENGINE->get_members();
    object *players   = users();
    mixed czlonkowie  = m_indices(members);
    string *zolnierze = ({"","","","","","","","","","","",""});

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Moze lista wszystkich?\n");
    if (!str) wszyscy = 0;
    else if ( str != "wszystkich" ) return 0;
         else wszyscy = 1;

    ilosc = m_sizeof(members);

    for (i=0; i<ilosc; i++)
    {
        if (wszyscy || find_player(czlonkowie[i]))
            zolnierze[members[czlonkowie[i]][RANGA]] += "  " +
                TYTULM[members[czlonkowie[i]][RANGA]] + " " + 
                capitalize(czlonkowie[i]) + " " + 
                members[czlonkowie[i]][NAZWISKO] + "\n";
    }

    write("Zolnierze obecnie przebywajacy w swiecie: \n");
    for (i=KAPITAN; i>0; i--)
    {
        if (zolnierze[i] != "" )
            write("\n" + zolnierze[i]);
    }

    return 1;
}

int
nadaj(string str)
{
    object *cel;
    string co = "", komu = "", text = "";
    int selector;

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Nadaj komu funkcje lub nazwisko jakie?\n");
    if (!stringp(str) || (sscanf(str, "%s %s %s", komu, co, text) != 3))
        return 0;

    notify_fail("Nadaj funkcje czy nazwisko?\n");
    if (co == "nazwisko")     selector = NAZWISKO;
    else if (co == "funkcje") selector = FUNKCJA;
         else return 0;

    cel =  parse_this(komu, "%l:" + PL_CEL);

    notify_fail("Komu chcesz nadac nowy tytul?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest " +
                "zolnierzem Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie mozesz tego zrobic.\n");
    if ( !(ENGINE->query_data(cel[0], RANGA) <
         ENGINE->query_data(TP, RANGA)) ) return 0;

    notify_fail("Wystapil blad. Funkcja set_data.\n");
    if ( !ENGINE->set_data(cel[0], selector, text) ) return 0;

    cel[0]->catch_msg(QIMIE(TP,PL_MIA) + " nadal" + TP->koncowka("","a") +
                      " ci nowy tytul.\n");
    TP->catch_msg("Nadal" + TP->koncowka("es","as") + " nowy tytul " + 
          QIMIE(cel[0],PL_CEL) + ".\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " nadal" + 
              TP->koncowka("","a") + " " + QIMIE(cel[0], PL_CEL) + 
              " nowy tytul.\n",({TP, cel[0]}));
    return 1;
}


int
pomoc()
{
    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    write("Wraz z przystapieniem do Kompanii Krogulca uzyskales mozliwosc " +
          "uzywania dodatkowych komend.\n" +
          "\n" +
          "  Specjalne ataki:\n" +
          "    uderz        - uderzenie (bronia dwureczna)\n" +
          "    blokuj       - blokowanie przeciwnika\n" +
          "    pusc         - zaprzestanie blokowania\n" +
          "\n" +
          "  Dodatkowe komendy:\n" +
          "    wystap       - wystapienie z Kompanii Krogulca\n" +
          "    nlista       - lista zolnierzy Kompanii\n" +
          "    nemocje      - lista dostepnych emocji\n" +
          "    npomoc       - ta oto pomoc\n" +
          "    nznaki lub . - jezyk znakow Kompanii Krogulca\n" +
          "\n");

    if (ENGINE->query_data(TP, RANGA) == KAPITAN) 
        write("  Komendy dla Kapitana Kompani:\n" +
              "    nawansuj     - awansowanie zolnierza Kompanii\n" +
              "    nzdegraduj   - zdegradowanie zolnierza Kompanii\n" +
              "    nprzekaz     - przekazanie dowodztwa nad Kompania\n" +
              "    nnadaj       - nadanie nazwiska lub funkcji\n" +
              "    nprzyjmij    - przyjecie nowego rekruta do Kompanii\n" +
              "    nwyrzuc      - wyrzucenie zolnierza z Kompanii\n" +
              "    npowiedz     - mowa stanowczym glosem\n" +
              "\n");

    if (ENGINE->query_data(TP, RANGA) == PORUCZNIK) 
        write("  Komendy dla Porucznika Kompani:\n" +
              "    nawansuj     - awansowanie zolnierza Kompanii\n" +
              "    nzdegraduj   - zdegradowanie zolnierza Kompanii\n" +
              "    nnadaj       - nadanie nazwiska lub funkcji\n" +
              "    nprzyjmij    - przyjecie nowego rekruta do Kompanii\n" +
              "    nwyrzuc      - wyrzucenie zolnierza z Kompanii\n" +
              "    npowiedz     - mowa stanowczym glosem\n" +
              "\n");
    write("Opiekunem Kompanii Krogulca jest niesmiertelny Khazzar, wiec " +
          "ewentualne bledy oraz pomysly zglaszaj do niego.\n");
    return 1;
}

int
przekarz(string str)
{
    object *cel = parse_this(str,"'dowodztwo' %l:"+PL_CEL);

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) != KAPITAN ) return 0;

    notify_fail("Przekaz dowodztwo komu?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest zolnierzem " +
                "Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie udalo ci sie przekazac dowodztwa " +
                QIMIE(cel[0], PL_CEL) + ".\n");
    if ( !ENGINE->demote(TP, ZOLNIERZ)) return 0;
    if ( !ENGINE->promote(cel[0], KAPITAN)) return 0;

    TP->catch_msg("Przekazal" + TP->koncowka("es","as") + " dowodztwo " + 
                  "nad Kompania Krogulca " + QIMIE(cel[0], PL_CEL) + ".\n");
    cel[0]->catch_msg(QIMIE(TP, PL_MIA) + " przekazal" + TP->koncowka("","a") +
                     " ci dowodztwo nad Kompania Krogulca. Od teraz jestes " +
                     "nowym Kapitanem.\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " przelazal" + 
              TP->koncowka("","a") + " dowodztwo nad Kompania Krogulca " + 
              QIMIE(cel[0], PL_CEL) + ".\n",
              ({TP, cel[0]}));
    return 1;
}

int
przyjmij(string str)
{
    object *cel = parse_this(str,"%l:"+PL_BIE);

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Kogo chcesz przyjac do Kompanii Krogulca?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " juz jest zolnierzem " +
                "Kompanii Krogulca.\n");
    if ( ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie udalo sie przyjac " + cel[0]->koncowka("go","jej") +
                " do Kompanii Krogulca.\n");
    if ( !ENGINE->add_member(cel[0], TP->QRN) ) return 0;

    TP->catch_msg("Przyjal" + TP->koncowka("es","as") + " " +
                  TYTULB[ENGINE->query_data(cel[0], RANGA)] + " " +
                  QIMIE(cel[0], PL_BIE) + " do Kompanii Krogulca.\n");
    cel[0]->catch_msg(QIMIE(TP, PL_MIA) + " przyj" + TP->koncowka("a","ela") +
                      " cie do Kompanii Krogulca.\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " przyj" + 
              TP->koncowka("al","ela") + " " +
              TYTULB[ENGINE->query_data(cel[0], RANGA)] + " " + 
              QIMIE(cel[0], PL_BIE) + " do Kompanii Krogulca.\n",
              ({TP, cel[0]}));
    return 1;
}

int
usun(string str)
{
    object *cel;
    string co = "", komu = "", text = "";
    int selector;

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Usun komu funkcje lub nazwisko?\n");
    if (!stringp(str) || (sscanf(str, "%s %s", komu, co) != 2))
        return 0;

    cel =  parse_this(komu, "%l:" + PL_CEL);

    notify_fail("Komu chcesz usunac tytul?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest " +
                "zolnierzem Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie mozesz tego zrobic.\n");
    if ( !(ENGINE->query_data(cel[0], RANGA) <
         ENGINE->query_data(TP, RANGA)) ) return 0;

    notify_fail("Usun funkcje czy nazwisko?\n");
    if (co == "nazwisko")     selector = NAZWISKO;
    else if (co == "funkcje") selector = FUNKCJA;
         else return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie ma tego tytulu.\n");
    if ( ENGINE->query_data(cel[0], selector) == "" ) return 0;

    notify_fail("Wystapil blad. Funkcja set_data.\n");
    if ( !ENGINE->set_data(cel[0], selector, text) ) return 0;

    cel[0]->catch_msg(QIMIE(TP,PL_MIA) + " usun" + TP->koncowka("al","ela") +
                      " ci tytul.\n");
    TP->catch_msg("Usun" + TP->koncowka("ales","elas") + " tytul " + 
          QIMIE(cel[0],PL_CEL) + ".\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " usun" + 
              TP->koncowka("al","ela") + " " + QIMIE(cel[0], PL_CEL) + 
              " tytul.\n",({TP, cel[0]}));
    return 1;
}

int
wyrzuc(string str)
{
    object *cel = parse_this(str,"%l:"+PL_BIE);

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Kogo chcesz wyrzucic z Kompanii Krogulca?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest zolnierzem " +
                "Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie mozesz tego zrobic.\n");
    if ( !(ENGINE->query_data(cel[0], RANGA) <
         ENGINE->query_data(TP, RANGA)) ) return 0;

    cel[0]->usun_gildia_occ();

    notify_fail("Nie udalo sie wyrzucic " + cel[0]->koncowka("go","jej") +
                " z Kompanii Krogulca.\n");
    if ( ENGINE->query_member(cel[0]) ) return 0;

    TP->catch_msg("Wyrzucil" + TP->koncowka("es","as") + " " +
                  TYTULB[ENGINE->query_data(cel[0], RANGA)] + " " + 
                  QIMIE(cel[0], PL_BIE) + " z Kompanii Krogulca.\n");
    cel[0]->catch_msg(QIMIE(TP, PL_MIA) + " wyrzucil" + TP->koncowka("","a") +
                      " cie z Kompanii Krogulca.\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " wyrzucil" +
              TP->koncowka("","a") + " " + 
              TYTULB[ENGINE->query_data(cel[0], RANGA)] + " " +
              QIMIE(cel[0], PL_BIE) + " z Kompanii Krogulca.\n",
              ({TP, cel[0]}));
    return 1;
}

int
wystap(string str)
{
    string ranga = TYTULM[ENGINE->query_data(TP, RANGA)];

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Skad chcesz wystapic? Moze z Kompanii Krogulca?\n");
    if ( str != "z Kompanii Krogulca" )
        if ( str != "z kompanii krogulca" ) return 0;

    notify_fail("Zanim opuscisz Kompanie Krogulca, musisz przekazac " +
                "dowodztwo kompetentnej osobie, ktora zajmie twoje " +
                "miejsce.\n");
    if ( ENGINE->query_data(TP, RANGA) == KAPITAN ) return 0;

    TP->usun_gildia_occ();

    notify_fail("Nie udalo ci sie wystapic z Kompanii Krogulca.\n");
    if ( ENGINE->query_member(TP) ) return 0;

    TP->catch_msg("Wystapiles z Kompanii Krogulca.\n");
    tell_room(environment(TP), ranga + " " + QIMIE(TP,PL_MIA) + 
              " wystapil z Kompanii Krogulca.\n",({TP}));
    return 1;
}

int
zdegraduj(string str)
{
    object *cel = parse_this(str,"%l:"+PL_BIE);

    notify_fail("Slucham?\n");
    if ( !ENGINE->query_member(TP) ) return 0;

    notify_fail("Slucham?\n");
    if ( ENGINE->query_data(TP, RANGA) < PORUCZNIK ) return 0;

    notify_fail("Kogo chcesz zdegradowac?\n");
    if ( !sizeof(cel) ) return 0;

    notify_fail(cel[0]->koncowka("On","Ona") + " nie jest " +
                "zolnierzem Kompanii Krogulca.\n");
    if ( !ENGINE->query_member(cel[0]) ) return 0;

    notify_fail("Nie mozesz " + cel[0]->koncowka("go","jej") +
                " zdegradowac.\n");
    if ( ENGINE->query_data(cel[0], RANGA) >= 
         ENGINE->query_data(TP, RANGA) ) return 0;

    notify_fail("Nie mozesz " + cel[0]->koncowka("go","jej") +
                " nizej zdegradowac.\n");
    if ( !ENGINE->demote(cel[0],0) ) return 0;

    TP->catch_msg("Zdegradowal" + TP->koncowka("es","as") + " " +
                  QIMIE(cel[0], PL_BIE) + " do rangi " + 
                  TYTULB[ENGINE->query_data(cel[0], RANGA)] + ".\n");
    cel[0]->catch_msg(QIMIE(TO, PL_MIA) + " zdegradowal" + 
                      TP->koncowka("","a") + " cie do rangi " +
                      TYTULB[ENGINE->query_data(cel[0], RANGA)] +
                      ".\n");
    tell_room(environment(TP),QIMIE(TP,PL_MIA) + " zdegradowal" + 
              TP->koncowka("","a") + " " + QIMIE(cel[0], PL_BIE) + 
              " do rangi " + TYTULB[ENGINE->query_data(cel[0], RANGA)] +
              ".\n",({TP, cel[0]}));
    return 1;
}
