//  !#! ##! ##! ### !#! ### 
//  # # # # # # #   # #   # 
//  # # ##  ##  ##! #    #  
//  # # # # # # #   # # #      
//  !#! ##! ! ! #!# !#! ### - przedmiot gildiowy ogrow z Gor Szarych.

inherit "/std/object";
inherit "/cmd/std/command_driver.c";
#include "ogry.h"
#include "spece.h"
#include </sys/filter_funs.h>

int zalozony;
int wear();
int remove();
string *material();
string wykonana();

void
create_object()
{
   ustaw_nazwe(({"obrecz","obreczy","obreczy","obrecz","obrecza","obreczy"}),
               ({"obrecze","obreczy","obreczom","obrecze","obreczami","obreczach"}), 
               PL_ZENSKI);
               
   dodaj_przym(({"ogrzy",material()[0]}),({"ogrze", material()[1]}));
   		
   add_name("_obrecz_ogrow_");
   set_long("Ogladasz jedna z najcenniejszych rzeczy, ktore posiadasz. "+
	    "Obrecz wspolnoty Ogrow z Gor wykonana zostala @@wykonana@@ niezwylke "+
	    "pieczolowicie i fachowo. Zdobia ja drobne ornamenty o regularnych "+
            "ksztaltach, a w samym centrum wygrawerowan@@pasy@@.\n");
   
   add_prop(OBJ_I_WEIGHT,   5000);
   add_prop(OBJ_I_VOLUME,    500);
   add_prop(OBJ_I_VALUE,   24000);
}

dodaj_propy()
{
    add_prop(OBJ_M_NO_SELL, "Nikt nie kupi od ciebie ogrzej obreczy!\n");
    add_prop(OBJ_M_NO_DROP, "Nie mozesz wyrzucic swojej ogrzej obreczy.\n");
    add_prop(OBJ_M_NO_GIVE, "Nie mozesz nikomu dac ogrzej obreczy.\n");
    add_prop(OBJ_M_NO_STEAL, 1);
    add_prop(OBJ_M_NO_GET,"Nie jestes w stanie podniesc ogrzej obreczy.\n");
}

usun_propy()
{
    remove_prop(OBJ_M_NO_SELL);
    remove_prop(OBJ_M_NO_DROP);
    remove_prop(OBJ_M_NO_GIVE);
    remove_prop(OBJ_M_NO_STEAL);
    remove_prop(OBJ_M_NO_GET);
}


int
wear()
{
    if (this_player()->query_subloc_obj(OBRECZ_SUBLOC))
    	{ remove_object(); return 1;}
    this_player()->add_subloc(OBRECZ_SUBLOC, this_object());
    TP->add_prop("ogr_szary",1);
    move(TP, OBRECZ_SUBLOC);
    zalozony=1;
    return 1;
}

int
remove()
{
    this_player()->remove_subloc(OBRECZ_SUBLOC);
    zalozony=0;
    move(TP);
    return 1;
}

void
enter_env(object ob, object from)
{
    ::enter_env(ob, from);
    dodaj_propy();
    wear();
}

string
show_subloc(string subloc, object on_obj, object for_obj)
{
    if (on_obj == for_obj)
        return "Piekna "+short()+" symbolizuje twa przynaleznosc do Ogrow z Gor.\n";
    return "Na reku nosi "+short(PL_BIE)+" Ogrow z Gor.\n";
}

string 
query_auto_load ()
{
        return MASTER_OB(this_object());
}

int no_way(string what)
{
   if (what=="obrecz") 
       {
             write("Nic z tego... Obrecz ta mozesz zdjac dopiero "+
                    "po wystapieniu z gildii.\n");
             say(QCIMIE(this_player(),PL_MIA)+" mocuje sie przez chwile "+
                    " z obrecza, ktora nosi na lewej rece, lecz bez skutku.\n");
             return 1;
       }
  return 0;
}

int
walnij(string str)
{
    string str1;
    object *cele;
    string *jak;
    notify_fail("Walnij <kogo> [jak]?\n");
    if (!str) return 0;

    jak = parse_adverb_with_space(str, "lekko", 1);
    cele = parse_this(jak[0], "%l:" + PL_BIE);
    if (sizeof(cele))
    {
        actor("Walisz" + jak[1], cele, PL_BIE, " ogrza obrecza w pysk.");
        all2actbb("wymierza", cele, PL_CEL, jak[1]+" cios obrecza w pysk.");
        target("wymierza ci" + jak[1] + " cios ogrza obrecza w pysk.", cele);
        return 1;
    }
    return 0;
}


int
ogpowiedz( string str )
{
int i;
object *liv = all_inventory(environment(TP));
liv = FILTER_LIVE(liv);

if (!str)
    {
    write("Burczysz...\n");
    tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" burczy...\n",({TP}));
    return 1;
    }
		    
    TP->catch_msg("Przemawiasz w ogrzej mowie: "+str+"\n");
        for ( i = 0; i < sizeof(liv); i++ )
            {
            if ( liv[i]->query_prop("ogr_szary") && liv[i] != TP )
                liv[i]->catch_msg(""+QCIMIE(TP,PL_MIA)+" mowi w "+
			            "ogrzym jezyku: "+str+"\n");
	            else
	            if (liv[i] != TP)
	            liv[i]->catch_msg(""+QCIMIE(TP,PL_MIA)+" sepleni cos...\n");
										
            }
					
return 1;
}
															



void init()
{
   ::init();
   add_action(no_way, "zdejmij");
   add_action(walnij, "walnij");
   add_action("usun", "usun");
   add_action("uderz","uderz");
   add_action("ogpowiedz","ogpowiedz");
}

string pasy()
{
   int i;
   string str;
   i = this_player()->query_stat(SS_RACE);
   switch(i)
   {
         case 0..10 : str = "y jest jeden szeroki okrag"; break;
	 case 11..20 : str = "e sa dwa wspolsrodkowe okregi"; break;
	 case 21..30 : str = "e sa trzy wspolsrodkowe okregi"; break;
	 case 31..40 : str = "e sa cztery okregi, tak iz jedna para o wspolnym "+
				       "srodku przecina sie z druga wspolsrodkowa para"; break;
	 case 41..50 : str = "ych jest piec okregow, dwa z lewej i dwa z "+
				       "prawej strony, ostatni umieszczony jest w centrum "+
				       "i przecina pozostale"; break;
	 default : str = "ych jest szesc okregow, podzielonych na trzy "+
				       "wspolsrodkowe pary przecinajace sie wzajemnie"; break;
   }
   return str;
}

string *material()
{
   int i;
   i = this_player()->query_stat(SS_OCCUP);
   switch(i)
   {
         case 0..20 : return ({"miedziany","miedziani"});
	 case 21..35 : return ({"srebrny","srebrni"});
	 case 36..45 :  return ({"zloty", "zloci"}); 
	 default : return ({"mithrylowy","mithrylowi"}); 
   }
}

string wykonana()
{
   int i;
   i = this_player()->query_stat(SS_RACE);
   switch(i)
   {
         case 0..20 : return "z miedzi";
	 case 21..35 : return "ze srebra";
	 case 36..45 :  return "ze zlota";
	 default : return "z mithrylu";
   }
}

int
wywal(object kto)
{
	string s;
 if (kto->wywalenie_z_ogra(kto))
 {
   write("Wywaliles "+QIMIE(kto, PL_BIE)+" z Ogrow z Gor.\n");
   kto->catch_msg(QCIMIE(TP, PL_MIA)+ " wyrzucil cie z Gildii Ogrow z Gor.\n");
   tell_room(Env, QCIMIE(TO,PL_MIA)+" wyrzucil "+QIMIE(kto, PL_BIE)+" z Gildii Ogrow z Gor.\n", ({kto, TP}));
   kto->set_exp_combat(4*(kto->query_exp_combat())/5);
   kto->remove_cmdsoul(SOUL);
   kto->update_hooks();
   kto->remove_prop(OG_PLAYER_OPUSZCZA_GILDIE);
   GILDIA->remove_imie(kto->query_real_name());
   (kto->query_subloc_obj(OBRECZ_SUBLOC))->remove_object();
   s=sprintf("%-16s:%s \n",kto->query_real_name(),ctime(time()));
   write_file(LEAVE,s);
   return 0;
 }
  return 1;
}


int
usun(string str)
{
	object *kogo;
	if (TP->query_herszt()!=TP->query_real_name()) return 0;
	if (!str) 
		return notify_fail("Kogo wyrzucic?\n");
	kogo=parse_this(str, "%l:"+PL_DOP);
	if (!sizeof(kogo))
		return notify_fail("Kogo usunac z gildii?\n");
	
	if (sizeof(kogo)>1)
		return notify_fail("Usuwac mozesz tylko pojedynczo.\n");
	
	if (kogo[0]->query_guild_name_race()!=GUILD_NAME)
		return notify_fail(QCIMIE(kogo[0], PL_MIA) +" nie jest Ogrem z Gor.\n");
	if (!interactive(kogo[0]))
	   return notify_fail("Nie mozesz go usunac!\n");
	wywal(kogo[0]);
	return 1;
}		 
