/* 
  Napisal Blethrop
  19.I.98
  Przerobka dla Nuln 
  Silvy
  17.II.98
*/  

inherit "/lib/shop";
inherit "/d/Imperium/Nuln/std/npc"; 

#include <ss_types.h>
#include <money.h>
#include <cmdparse.h>
#include <language.h>
#include <composite.h>
#include <silvy.h>

#define MAGAZYN  NPATH + "sklepy/handlarz_m.c"

void
create_mieszczanin_nuln()
{
    ustaw_jak_daleko(3);
    ustaw_czy_wraca(1);

    ustaw_nazwe(({"klaus","klausa","klausowi","klausa","klausem","klausie"}),
        allocate(6),PL_MESKI_OS);
    dodaj_przym("sympatyczny","sympatyczni");
    dodaj_przym("pucolowaty","pucolowaci");    
    dodaj_nazwy(({ "handlarz", "handlarza","handlarzowi","handlarza",
    	       "handlarzem", "handlarzu"}), ({"handlarze", "handlarzy",
    	       "handlarzom", "handlarzy", "handlarzami", "handlarzach"}),	
                    PL_MESKI_OS);
    
    set_long("Masz przed soba mezczyzne w wieku lat okolo czterdziestu, "+
        "o sympatycznej, pucolowatej twarzy. Ubrany jest on w przedziwny stroj. Od stop do "+
        "glowy otulaja go wszelkiej masci skory i skorki zwierzat. Ten, swego "+
        "rodzaju kozuch ma zrobiony jest tak, ze futerka lsnia przy kazdym "+
        "poruszeniu sie mezczyzny.\n");
    	
    ustaw_odmiane_rasy(PL_CZLOWIEK);
    set_restrain_path(NPATH + "lokacje/");

    set_gender(G_MALE);
    set_living_name("handlarz_skor");
    
    add_prop(IMPERIUM_LIVE_I_NULN_CITIZEN,1);
 
    add_prop(CONT_I_WEIGHT, 70000);
    add_prop(CONT_I_HEIGHT, 175);

    set_skill(SS_DEFENCE, 25 + random(5));
    set_skill(SS_UNARM_COMBAT, 15 + random(5));
    set_skill(SS_PARRY, 15 + random(5));

    set_stats(({ 50, 50, 50, 30, 30, 50}));

    set_chat_time(9);
    add_chat("Jesli zechcesz sprzedac jakies skory, z przyjemnoscia z toba porozmawiam.");
    add_chat("Kupie kazda, warta tego skore. Za godziwa oplata oczywiscie.");
    add_chat("Ja ciebie nie oszukam. Mozesz byc tego pewien.");
    add_chat("Przybyszu. Nigdzie nie znajdziesz wspanialszej okazji pozbycia sie ciazacych ci "+
    	"skor za brzeczace monety!");
        
    set_cchat_time(6);
    add_cchat("Aaaa! Sam tego chciales!");
    
    set_act_time(12);
    add_act(({"hmm", "podrap sie", "chrzaknij cicho"}));
    add_act("emote wzdycha gleboko.");
    add_act("emote szczerzy swoje zdrowe zeby w szerokim usmiechu.");

    config_default_trade();
    set_store_room(MAGAZYN);

    dodaj_miedz(20);
    dodaj_srebro(10+random(15));
}

string
sk_answer(string co)
{
    return "Handlarz mowi: "+co;
}

void
init_living()
{
    init_shop();
    ::init_living();
}

/* ********************************************************************** */
//    HANDEL
/* ********************************************************************** */
int
query_buy_price(object ob)
{
    int seed;

    sscanf(OB_NUM(ob), "%d", seed);
    return 2 * ob->query_skora_value() * (query_money_greed_buy() +
	15 - this_player()->query_skill(SS_TRADING) / 4 +
	random(15, seed)) / 100;
}

int
query_sell_price(object ob)
{
    int seed;

    sscanf(OB_NUM(ob), "%d", seed);
    return ob->query_skora_value() * 100 / (query_money_greed_sell() +
	15 - this_player()->query_skill(SS_TRADING) / 3 + 
	random(15, seed + 1)); /* Use another seed than on buying */
}

int
shop_hook_allow_sell(object ob)
{
    if (ob->query_skora_value())
        return 1;
    else 
    {
        notify_fail(sk_answer("Skupuje tylko skory.\n"));
        return 0;
    }
}

int
shop_hook_buy_no_match(string str)
{
    notify_fail(sk_answer("Nie mam niczego takiego.\n"));
}

void
shop_hook_list_empty_store(string str)
{
    notify_fail(sk_answer("Nie mam w tej chwili zadnych skor na sprzedaz.\n"));
}

int
shop_hook_list_no_match(string str)
{
    notify_fail(sk_answer("Sprzedaje tylko skory.\n"));
}


object *
sell_it(object *ob, string str, int check) 
{
    int price, i, j, k, *tmp_arr, *null, *value_arr, *null_arr, err;
    object *sold;
    mixed tmp;

    call_other(store_room, "load_me"); /* Make sure store room is loaded */

    value_arr = allocate(sizeof(query_money_types()));
    null_arr = value_arr + ({});
    sold = allocate(sizeof(ob));

    for (i = 0; i < sizeof(ob); i++)
    {
	if (!shop_hook_allow_sell(ob[i]))
	    continue;

        if (ob[i]->query_skora_value() == 0)
	{
	    shop_hook_sell_no_value(ob[i]);
	    continue;
        }

	if (check && (ob[i]->query_worn() ||
		      ob[i]->query_wielded()))
	{
	    shop_hook_sell_worn_or_wielded(ob[i]);
	    continue;
        }
    
	if (tmp = ob[i]->query_prop(OBJ_M_NO_SELL))
	{
	    shop_hook_sell_no_sell(ob[i], tmp);
	    continue;
	}

	/* Save price if ob destructed in move */
	price = query_sell_price(ob[i]);

        if (price <= 0)
	{
	    shop_hook_sell_no_value(ob[i]);
	    continue;
        }

        if (err = ob[i]->move(store_room))
    	{
	    shop_hook_sell_object_stuck(ob[i], err);
	    continue;
    	}

        if (price > 0)
	{
            tmp_arr = calc_change(price, null, str);
            for (k = 0; k < sizeof(value_arr); k++)
                value_arr[k] += tmp_arr[k];

	    sold[j] = ob[i];
            j++;
	    if (j >= 20)
        	break;
    /*
     * Only let people sell 20 objects at once and hopefully we wont get
     * those too long evaluation problems.
     */
	}
    }

    sold = sold - ({ 0 });

    if (sizeof(sold) > 0)
    {
        change_money(null_arr + value_arr, this_player());
	shop_hook_sell_get_money(text(value_arr, 0));
    }

    return sold;
}


int
do_value(string str)
{
    object *item, store;
    int *arr, price, i, j, num, no_inv;

    if (!str || str =="")
    {
	notify_fail("Wycen co?");
	return 0;
    }

    num = sizeof(query_money_types());
    item = FIND_STR_IN_OBJECT(str, this_player(), PL_BIE);
    if (!sizeof(item))
	no_inv = 1;

    for (i = 0; i < sizeof(item); i++)
    {
	if (!shop_hook_allow_sell(item[i]) ||
		!item[i]->query_skora_value() ||
		item[i]->query_prop(OBJ_M_NO_SELL)) 
	{
	    shop_hook_value_not_interesting(item[i]);
	    continue;
	}

	price = query_sell_price(item[i]);
	arr = give(price, this_player(), "", 1);
	shop_hook_value_held(item[i], text(arr[num .. 2 * num - 1], 0));
	j++;
    }

    call_other(store_room, "load_me");
    store = find_object(store_room);
    item = FIND_STR_IN_OBJECT(str, store, PL_BIE);
    if (!sizeof(item) && no_inv)
	return shop_hook_value_no_match(str);

    for (i = 0; i < sizeof(item); i++)
    {
	price = query_buy_price(item[i]);
	arr = split_values(price); /* A price with few coins possible */
	shop_hook_value_store(item[i], text(arr, 0));
	j++;
    }	

    shop_hook_value_asking(str);
    if (j > 0)
	return 1;

    return 0;
}

void
add_introduced(string imie)
{
    set_alarm(2.0,0.0,"return_intro", imie);
}

varargs void 
return_intro(string kto)
{
    /* Przedstawia sie tylko graczom - w ten sposob unikamy zapetlenia. */

    command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
}


string
query_presentation()
{
    return"Klaus Meier, Mistrz Garbarski, czlowiek";
}    
