
/* Plik       :      caenk.c
 * Autor      :	     Flex, Silvy
 * Data	      :	     10.12.97
 * Last Update:      10.01.98
 * Opis       : Npc - questowy, gra w kosci, po przegraniu 150 monet gra o
 *                    przedmiot questowy - medalion.
 */
   
inherit "/d/Imperium/std/monster";

#include <silvy.h>
#include <money.h>

#define PEN_SPECJALA 500

#include "/d/Imperium/funkcje/specjal1.c"

#define PLAYER_I_DOSTAL_QUEST_ZOLTANA     "_player_i_dostal_quest_zoltana" 
#define PLAYER_I_WYGRAL_GRE               "_player_i_wygral_gre_caena_"
#define PLAYER_I_DOSTAL_QUEST_CAENA       "_player_i_dostal_quest_caena" 
#define PLAYER_I_DAL_MONETY               "_player_i_dal_monety"

int quest_wziety;
int quest_zrobiony = 1;
int ile_ma = 720;
int stawia = 0;

object medal;
object gracz;
object kasa1,medal;
        
void
create_monster()
{ 
    ustaw_imie( ({"caen", "caena", "caenowi", "caena", "caenem", 
        "caenie" }), PL_MESKI_NZYW);
        
    dodaj_nazwy(({ "rycerz", "rycerza", "rycerzowi", "rycerza",
        "rycerzem", "rycerzu" }), ({ "rycerze", "rycerzy", "rycerzom",
        "rycerzy", "rycerzami", "rycerzach" }), PL_MESKI_OS);
    	
    dodaj_przym("ogorzaly","ogorzali");
    dodaj_przym("barczysty","barczysci");
    
    set_long("Barczysty rycerz nie wyglada na zadowolonego z dzisiejszego dnia. " +
        "Jest wysoki i poteznie zbudowany, wyglada jak doswiadczony woj. " +
        "Jego twarz ma wyrazne rysy i jest spokojna, a wysokie czolo dodaje jej dostojenstwa. " +
        "To zdecydowanie nie moze byc twarz bezlitosnego, brutalnego mordecy.\n");
    set_gender(G_MALE);
    ustaw_odmiane_rasy(PL_CZLOWIEK);
        
    add_prop(CONT_I_WEIGHT, 95000);
    add_prop(CONT_I_HEIGHT, 185);
    add_prop(IMPERIUM_LIVE_I_NULN_CITIZEN,1);

    remove_prop(NPC_M_NO_ACCEPT_GIVE);
    
    set_skill(SS_DEFENCE, 95);
    set_skill(SS_WEP_SWORD, 95);
    set_skill(SS_UNARM_COMBAT, 80);
    set_skill(SS_PARRY, 95);
    
    set_stats(({70, 65, 70, 50, 50, 50}));
    
    set_chat_time(25);
    add_chat("Alez nuda jak nie ma wojny.");
    add_chat("Przydalby sie jakis turniej.");
    add_chat("Ej ty nie masz ochoty sie zmierzyc?");
    add_chat("Nie uwazasz, ze jest tu zbyt spokojnie?");
    
    set_cchat_time(10);
    add_cchat("Oz ty!");
    add_cchat("Ha, policze ci tewe gnaty!");
    add_cchat("Znikaj zoltodziobie!");
    add_cchat("Myslisz, ze sobie ze mna poradzisz?");
    
    set_act_time(11);
    add_act("emote rozglada sie z zaciekawieniem po sali.");
    add_act("emote nerwowo spoglada wokol."); 

    add_cmd_item( ({"kosci", "koscmi"}),({"rzuc", "rzucmy"}), "@@rzuc");    
    
    add_ask( ({"gre","zoltana","medalion","medalik"}),  VBFC_ME("re_medalion"));
    add_ask( ({"reguly", "reguly gry"}), VBFC_ME("re_reguly"));
    add_ask( ({"nagrode","zamiane"}), VBFC_ME("re_nagroda"));

    set_default_answer(VBFC_ME("odpowiedz_standardowa"));

    set_alarm(1.0,1800.0,"reset_questa");

    add_weapon(NPATH + "bronie/dwmiecz1.c");
    add_armour(NPATH + "zbroje/kolczug2.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));
}

 /* --------------------------------------------------------------- */
 /*  Standardowa odpowiedz                                          */
 /* --------------------------------------------------------------- */
 
string
odpowiedz_standardowa()
{
     command("powiedz Nie mam pojecia o co ci chodzi.");
     return "";
}     

 /* --------------------------------------------------------------- */
 /*  Odpowiedz na pytanie o nagrode                                 */
 /* --------------------------------------------------------------- */
 
string
re_nagroda()
{
     if (!this_player()->query_prop(PLAYER_I_DOSTAL_QUEST_ZOLTANA))
     {
         command("powiedz O czym ty mowisz?");
         command("emote mruga oczami ze zdziwienia.");
         return "";
     }    
   command("powiedz Po prostu zagrajmy. Byc moze o medalion.");
   return "";
}      

 /* --------------------------------------------------------------- */
 /* Glowna procedura odpowiadajaca za przydzielenie graczowi questa */
 /* --------------------------------------------------------------- */

string
re_medalion(int chat_nr)    
{   
         object gracz = this_player();
    
         if(this_player()->test_bit("imperium", 0, 16))
         {
             command("emote zamysla sie przez chwile.");
             command("powiedz Nie potrzebuje pomocy "+
                 "od ciebie. Znikaj.");
             return "";
         }
     
         if(quest_zrobiony)
         {
             command("powiedz Eee idz i mi tu glowy "+
                 "nie zawracaj.");
             command("emote szczerzy zeby w krzywym usmieszku.");   
             return "";
         }    
              
         if(this_player()->query_prop(PLAYER_I_DOSTAL_QUEST_CAENA))
         {
             command("powiedz A mowilem ci zabys sluchal "+
                 "uwaznie! Nie bede sobie nadarmo strzepil "+
                 "jezyka.");
             command("emote mruczy cos pod nosem.");
             return ""; 
         }
            
         command("emote spoglada badawczo.");
         command("powiedz Medalion? Pewnie znowu Zoltan sie wyglupia.");
         command("usmiechnij sie");
         command("powiedz Sluchaj uwaznie co ci powiem.");
         command("powiedz Zoltan to klamca, medalion jest moj. "+
             "Nie musialem go krasc, sam mi go dal. "+
             "Powiedz no, chcesz medalion, tak? "+
     	     "Ale co ty mozesz dac mi w zamian. ");
         command("powiedz Moze umilisz mi wieczor i zagramy? "+
             "Zagrajmy w kosci a postawie medalion, nie od razu ale postawie.");
         command("emote mowi: Jesli chcesz grac to zdradze ci reguly gry" +
             " jesli nie to znikaj mi z oczu.");
              
         this_player()->add_prop(PLAYER_I_DOSTAL_QUEST_CAENA, 1);	
            
         return "";
}    

void
daj_medalion(object gracz)
{
     gracz->add_prop(PLAYER_I_WYGRAL_GRE, 1);     
     command("powiedz Ubawiles mnie ta gra. Oto on, medalion.");             
     command("daj medalion " + gracz->query_real_name(PL_CEL));
 
     command("daj 20 srebrnych monet " + gracz->query_real_name(PL_CEL));
     quest_zrobiony=1;
     command("powiedz Jak powiedzialem tak sie stalo. Widzisz, ze jestem uczciwy.");
     return;
}

void
wyplac(object gracz)
{
    if (stawia)
    {
        set_alarm(1.0,0.0,&daj_medalion(gracz));
        return;
    }
    
    command("daj 40 srebrnych monet " + gracz->query_real_name(PL_CEL));
    ile_ma -= 480;
         
    if (ile_ma < 240)
    {
        command("powiedz Dosc kasy juz przegralem. W nastepnej grze postawie " +
            "medalion, dobra?");
        stawia = 1;    	
        return;
    }          
}    

string
rzuc()
{
   int los,jednaC, drugaC, trzeciaC, jednaG, drugaG, trzeciaG;
   gracz = this_player();

   if (this_player()->query_prop(PLAYER_I_DAL_MONETY))
   {
      jednaC   = random(5) + 1;
      drugaC   = random(5) + 1;
      trzeciaC = random(5) + 1;

      jednaG   = random(5) + 1;
      drugaG   = random(5) + 1;
      trzeciaG = random(5) + 1;
      los = random(2);
 
      this_player()->remove_prop(PLAYER_I_DAL_MONETY);
      command("emote rzuca koscmi.");
      
      if (jednaC + drugaC + trzeciaC >= jednaG + drugaG + trzeciaG)
      {
         if ((jednaC + drugaC + trzeciaC) == (jednaG + drugaG + trzeciaG))
         {
            command("emote usmiecha sie diabolicznie.");
         }
         command("powiedz Twe rzuty to : " + jednaG + ", " +
            drugaG + ", " + trzeciaG + ", a moje: " + jednaC + 
            ", " + drugaC + ", " + trzeciaC + ". Mial" + koncowka("es","as") + " pecha.");
         stawia = 0;
      }
      else
      {
           set_alarm(1.0,0.0,&wyplac(this_player()));
	   command("powiedz Poszczescilo ci sie, twe rzuty to : " + jednaG + ", " +
              drugaG + ", " + trzeciaG + ", a moje: " + jednaC + 
              ", " + drugaC + ", " + trzeciaC + ". Gratulacje.");
            
      }
   }
   else
   {
       command("powiedz Najpierw daj mi pieniadze do gry." +
          " Umawialismy sie na 20 sztuk srebra, no nie?");
   }
   return"";
}

string
re_reguly()
{
    if (this_player()->query_prop(PLAYER_I_DOSTAL_QUEST_ZOLTANA))
    {
        command("powiedz Juz ci wyjasniam.");
        command("powiedz Przy remisie ja wygrywam.");
        command("usmiechnij sie diabel");    
        command("powiedz Zaczynam ja, rzucamy trzema koscmi.");
        command("powiedz Jak chcesz rzucac koscmi to powiedz, ja mam kubek i ja " +
            "rzadze gra - ty tylko powiedz: Rzuc kosci, a ja rzuce je na stol.");
        return "";
    }
    command("powiedz Tak graja tu czasami w kosci i nie tylko. "+
        "Poszukaj a znajdziesz grajacych. " +
        "Z nimi zagraj, ja nie mam czasu teraz!");
    return "";
}     
 
 /* --------------------------------------------------------------- */
 /*  Oddajemy nie potrzebne nam przedmioty                          */
 /* --------------------------------------------------------------- */   
 
void
oddaj_spowrotem(object ob, object from)
{
     command("daj " + OB_NAME(ob) + " " + from->query_real_name(PL_CEL));
     command("powiedz Nie prosilem o to.");
    
}

 /* --------------------------------------------------------------- */   

void
oddaj_kase(object from, int ilosc_monet)
{
         command("emote marszczy czolo.");
         command("powiedz To za malo, ja gram tylko przy stawce rownej " +
           "20 sztuk srebra, ni mniej ni wiecej, dasz wiecej" +
           ", nie ma sprawy, ale gramy tylko o 20.");
    command("emote mowi: Mimo wszystko dziekuje.");
         command("emote usmiecha sie przewrotnie.");
}


void
oddaj_kase1(object from, int ilosc_monet)
{
         command("emote marszczy czolo.");
         command("powiedz Hmmm ... Mowilem o srebrze, masz problemy "+
            "ze sluchem?");
     command("powiedz Ale i takie sie przydadza.");
}

void
oddaj_kase2(object from, int ilosc_monet)
{
    command("emote usmiecha sie ze zdziwieniem.");
    command("powiedz Hmmm ... Po co mi te pieniadze?");
    command("powiedz Nie umawialismy sie przeciez dzisiaj na gre.");
    command("powiedz Mimo wszystko dziekuje.");
}

void
dobra_ilosc(object kto)
{
    command("usmiechnij sie szczerze");
    command("powiedz Teraz mozemy rzucac.");
    kto->add_prop(PLAYER_I_DAL_MONETY, 1);                  
}

void
enter_inv(object ob, object from)
{
    int wartosc, ilosc_monet;

    ::enter_inv(ob, from);
    
    if(!from) return;

    if(MASTER_OB(ob) == "/std/coins")
    {
	 ilosc_monet = ob->query_prop(OBJ_I_VALUE);        
         
	 if(!from->query_prop(PLAYER_I_DOSTAL_QUEST_CAENA))
	 {
             set_alarm(1.0,0.0,&oddaj_kase2(from,ilosc_monet));            
             return;    
	 }    
	 
         if(!(ob->query_coin_type() == "srebro"))
         {
             set_alarm(1.0,0.0,&oddaj_kase1(from,ilosc_monet));
             return;
         }    
         
         if(ilosc_monet > 239)
 	 {
             ile_ma += ilosc_monet;
      
             set_alarm(1.0,0.0,&dobra_ilosc(from));
             return;
         }
         set_alarm(2.0,0.0,&oddaj_kase(from,ilosc_monet));
         return;
    }    
    set_alarm(1.0,0.0,&oddaj_spowrotem(ob,from));
    return;
}


string
query_presentation()
{
    return"Caen Sternfern, czlowiek";
}

void
reset_questa()
{
    if(quest_zrobiony)
    {
        seteuid(getuid());
        medal = clone_object(NPATH + "obj/medalion.c");
        medal -> move(this_object());
        kasa1 = MONEY_MAKE_SC(60);
        kasa1 -> move(this_object());
        quest_zrobiony = 0;
    }
}        