#pragma strict_types

inherit "/std/object.c";
inherit "/cmd/std/command_driver.c";

#include <exec.h>
#include <macros.h>
#include <stdproperties.h>
#include <malzonkowie.h>

string Partner; // Partner, ustawiany podczas slubu

void
create_object()
{
    ustaw_nazwe(({"obraczka", "obraczki", "obraczce", "obraczke", "obraczka", "obraczce"}),
		({"obraczki", "obraczek", "obraczkom", "obraczki", "obraczkami", "obraczkach"}), PL_ZENSKI);
    Partner = "";
    add_prop(OBR_I_NO_ZALOZ, 1);
}

void
init()
{
    add_action("zaloz", "zaloz");
    ::init();
}

int
zaloz(string str)
{
    object *cele;

    cele = parse_this(str, "%o:" + PL_BIE);
    if(!sizeof(cele) || !member_array(TO, cele))
    {
	notify_fail("Zaloz co?\n");
	return 0;
    }
    if(sizeof(cele) > 1)
    {
	notify_fail("Badz bardziej konkretny.\n");
	return 0;
    }
    if(query_prop(OBR_I_NO_ZALOZ))
    {
	notify_fail("Nie mozesz zalozyc obraczki przed slubem.\n");
	return 0;
    }
    TP->add_subloc(SUBLOC_OBRACZKA_SLUBNA, TO);
    move(TP, SUBLOC_OBRACZKA_SLUBNA);
}

int
ustaw_obraczke()
{
    string *oczko, *metal;
    string *typp, *typm;
    int rodz_oczka, rodz_typu, value, volume, weight;

    switch(query_prop(OBR_I_METAL))
    {
    case 1:
	metal = ({"srebrny", "srebrni"});
	value = 100;
	weight = 10;
	break;

    case 2:
	metal = ({"zloty", "zloci"});
	value = 200;
	weight = 20;
	break;

    case 3:
	metal = ({"platynowy", "platynowi"});
	value = 300;
	weight = 25;
	break;
       
    case 4:
	metal = ({"mithrylowy", "mithrylowi"});
	value = 350;
	weight = 35;
	break;

    default:
	return 0;
    }

    switch(query_prop(OBR_I_TYP))
    {
    case 1:
	typp = ({"pierscionek", "pierscionka", "pierscionkowi", "pierscionek",
		 "pierscionkiem", "pierscionku"});
	typm = ({"pierscionki", "pierscionkow", "pierscionkom", "pierscionki",
		 "pierscionkami", "pierscionkach"}); 
	rodz_typu = PL_MESKI_NZYW;
	add_prop(OBJ_I_VOLUME, 2);
	break;

    default:
	return 0;
    }

    switch(query_prop(OBR_I_OCZKO))
    {
    case 1:
	oczko = ({"diamentowy", "diamentowi"});
	value += 400;
	break;

    case 2:
	oczko = ({"rubinowy", "rubinowi"});
	value += 100;
	break;

    default:
	return 0;
    }

    add_prop(OBJ_I_VALUE, value);
    add_prop(OBJ_I_WEIGHT, weight);
    
    dodaj_nazwy(typp, typm, rodz_typu);
    dodaj_przym(metal[0], metal[1]);
    ustaw_shorty(({oblicz_przym(metal[0], metal[1], PL_MIA, rodz_typu, 0) +
		       " " + typp[0] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		       " oczku",
		       oblicz_przym(metal[0], metal[1], PL_DOP, rodz_typu, 0) +
		      " " + typp[1] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		      " oczku",
		       oblicz_przym(metal[0], metal[1], PL_CEL, rodz_typu, 0) +
		       " " + typp[2] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		       " oczku",
		       oblicz_przym(metal[0], metal[1], PL_BIE, rodz_typu, 0) +
		       " " + typp[3] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		       " oczku",
		       oblicz_przym(metal[0], metal[1], PL_NAR, rodz_typu, 0) +
		       " " + typp[4] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		       " oczku",
		       oblicz_przym(metal[0], metal[1], PL_MIE, rodz_typu, 0) +
		       " " + typp[5] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 0) +
		       " oczku"}),
		 ({oblicz_przym(metal[0], metal[1], PL_MIA, rodz_typu, 1) +
		       " " + typm[0] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach",
		       oblicz_przym(metal[0], metal[1], PL_DOP, rodz_typu, 1) +
		       " " + typm[1] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach",
		       oblicz_przym(metal[0], metal[1], PL_CEL, rodz_typu, 1) +
		       " " + typm[2] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach",
		       oblicz_przym(metal[0], metal[1], PL_BIE, rodz_typu, 1) +
		       " " + typm[3] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach",
		       oblicz_przym(metal[0], metal[1], PL_NAR, rodz_typu, 1) +
		       " " + typm[4] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach",
		       oblicz_przym(metal[0], metal[1], PL_MIE, rodz_typu, 1) +
		       " " + typm[5] + " o " +
		       oblicz_przym(oczko[0], oczko[1], PL_MIE, PL_NIJAKI_NOS, 1) +
		       " oczkach"}), rodz_typu);

    set_long("Pierscionek i tyle :) \n");
    return 1;
}

int
query_recover()
{
    return 0;
}

string
query_auto_load()
{
    return OBR_S_MASTER + ":" + query_prop(OBR_I_METAL) + "," + 
	query_prop(OBR_I_OCZKO) + "," + query_prop(OBR_I_TYP) + "," +
	query_prop(OBR_I_NO_ZALOZ) + "," + Partner;
}

public void
init_arg(string arg)
{
    int tmp1, tmp2, tmp3, tmp4;
    
    sscanf(arg, "%d,%d,%d,%d,%s", tmp1, tmp2, tmp3, tmp4, Partner);
    add_prop(OBR_I_METAL, tmp1);
    add_prop(OBR_I_OCZKO, tmp2);
    add_prop(OBR_I_TYP, tmp3);
    add_prop(OBR_I_NO_ZALOZ, tmp4);
    if(!ustaw_obraczke())
	throw("Porazka przy ustawianiu obraczki.");
}

/*
 * Funkcja zwraca obiekt partnera, jesli jest w grze
 * w przeciwnym przypadku imie w mianowniku
 */
mixed
query_partner()
{
    if(find_player(Partner))
	return(find_player(Partner)); 
    return Partner;
}

int
set_partner(string str)
{
    Partner = str;
}

string
show_subloc(string subloc, object on_obj, object for_obj)
{
}

void
debug_setup()
{
    add_prop(OBR_I_METAL, 2);
    add_prop(OBR_I_OCZKO, 1);
    add_prop(OBR_I_TYP, 1);
    dump_array(query_prop(OBR_I_METAL));
}

