/* Shadow gildii Klan Tygrysa
 *
 *
 *
 * Autor: Lisev
 */
#include "defs.h"
inherit "/std/guild/guild_occ_sh";
private int cios, piesn;

private int shape = 0;

void
set_shape(int i)
{
	shape = i;
}

int
query_shape()
{
	return shape;
}

void
set_piesn(int i)
{
	piesn = i;
}
int
query_piesn()
{
	return piesn;
}
void
set_cios(int i)
{
	cios = i;
}
int
query_cios()
{
	return cios;
}
public int
query_guild_tax_occ()
{
    return GUILD_TAX;
}
public string
query_guild_name_occ()
{
	return GUILD_NAZWA;
}
public string
query_guild_title_occ()
{
	string title;
	title = (SILNIK->query_data(shadow_who->query_real_name(), KLAN_NAZWISKO) ?
	        SILNIK->query_data(shadow_who->query_real_name(), KLAN_NAZWISKO) + ", ": "") +
	        (SILNIK->query_data(shadow_who->query_real_name(), KLAN_RANGA) == DAIMYO ? "Glowny Daimyo Klanu Tygrysa, " : "") +
	        (SILNIK->query_data(shadow_who->query_real_name(), KLAN_RANGA) == HATAMOTO ? "Hatamoto Klanu Tygrysa, " : "") +
	        SILNIK->query_exp_title(shadow_who) +
	        (SILNIK->query_data(shadow_who->query_real_name(), KLAN_PRZYDOMEK) ? ", zwany " +
	        SILNIK->query_data(shadow_who->query_real_name(), KLAN_PRZYDOMEK) : "");
	return title;
}
public mixed
query_guild_trainer_occ()
{
    return GUILD_TRAINER;
}
void
startuj()
{
	SILNIK->logowanie(shadow_who);
}
int
query_guild_keep_player(object player)
{
    set_alarm(2.0, 0.0, startuj);
    return 1;
}
void
add_klan_soul()
{
	setuid();
	seteuid(getuid());
	shadow_who->add_cmdsoul(SOUL);
	shadow_who->update_hooks();
}
public void
usun_gildia_occ()
{
	object *itemy;
	int i;
	itemy = deep_inventory(shadow_who);
	for(i=0; i<sizeof(itemy); i++)
	   if(MASTER_OB(itemy[i]) == GUILD_ITEM)
	     itemy[i]->remove_object();
	SILNIK->remove_member(shadow_who->query_real_name());
	shadow_who->remove_guild_occ();
	shadow_who->clear_guild_stat(SS_OCCUP);
	shadow_who->set_guild_pref(SS_OCCUP, 0);
	shadow_who->remove_autoshadow(SHADOW);
	shadow_who->remove_cmdsoul(SOUL);
	shadow_who->update_hooks();
	remove_shadow();
}
public mixed
query_guild_skill_name(int type)
{
  if (type == PIRUET) return "piruet";
}

void
help_me(object whom, object attacker)
{
	if(shadow_who->query_attack()) return;
    shadow_who->attack_object(attacker);
    attacker->catch_msg(QCIMIE(shadow_who, PL_MIA) + " z furia atakuje cie!\n");
}
void
attacked_by(object ob)
{
	object *ble = ({});
    if(wildmatch(PATH + "room*", MASTER_OB(environment(shadow_who))))
    {
		ble = all_inventory(environment(shadow_who)) - ({ shadow_who });
		ble->help_me(shadow_who, ob);
	}
    shadow_who->attacked_by(ob);
}

void
heal_hp(int hp)
{
	shadow_who->heal_hp(hp);
    if(wildmatch(PATH + "room*", MASTER_OB(environment(shadow_who))))
    {
		if(shadow_who->query_attack())
		{
			all_inventory(environment(shadow_who))->heal_me(shadow_who,
			                                        shadow_who->query_attack(),
			                                        shadow_who->query_hp());
		}
	}
}

public string
query_race_name()
{
    if (shadow_who->query_ghost())
        return shadow_who->query_race_name();

    if (query_shape())
    {
        return "smok";
    }

    return shadow_who->query_race_name();
}

string
race_sound()
{
    if (query_shape())
        return "grzmi poteznie";

    return shadow_who->race_sound();
}

string
query_nonmet_name(int przyp)
{
	string *smok_bialy;

	smok_bialy = ({ "bialy smukly smok", "bialego smuklego smoka",
	                 "bialemu smuklemu smoku", "bialego smuklego smoka",
	                 "bialym smuklym smokiem", "bialym smuklym smoku"});

	if(!query_shape()) return shadow_who->query_nonmet_name(przyp);


    switch (przyp)
    {
        case PL_MIA: return smok_bialy[0];
        case PL_DOP: return smok_bialy[1];
        case PL_CEL: return smok_bialy[2];
        case PL_BIE: return smok_bialy[3];
        case PL_NAR: return smok_bialy[4];
        case PL_MIE: return smok_bialy[5];
    }
}

varargs public string
query_rasa(int przyp)
{
	string *rasa = ({ "smok", "smoka", "smoku", "smoka", "smokiem", "smoku" });
	if(!query_shape()) return shadow_who->query_rasa(przyp);

    if (sizeof(rasa) == 6)
        return rasa[przyp];

    return 0;
}

public string
*query_rasy()
{
	if(!query_shape()) return shadow_who->query_rasy();
    return ({ "smok", "smoka", "smoku", "smoka", "smokiem", "smoku" }) + ({});
}

varargs public string
query_prasa(int przyp)
{
	string *rasa = ({ "smoki", "smokow", "smokom", "smoki", "smokami", "smokach" });
	if(!query_shape()) return shadow_who->query_prasa(przyp);

    if (sizeof(rasa) == 6)
        return rasa[przyp];

    return 0;
}

public string
*query_prasy()
{
	if(!query_shape()) return shadow_who->query_prasy();
    return ({ "smoki", "smokow", "smokom", "smoki", "smokami", "smokach" }) + ({});
}


public string *
parse_command_adjectiv1_id_list()
{
	if(!query_shape()) return shadow_who->parse_command_adjectiv1_id_list();
    return ({"bialy", "smukly"});
}

public string *
parse_command_adjectiv2_id_list()
{
	if(!query_shape()) return shadow_who->parse_command_adjectiv2_id_list();
    return ({"biali", "smukli"});
}

public string *
parse_command_id_list(int przyp)
{
	string *rasa = ({ "smok", "smoka", "smoku", "smoka", "smokiem", "smoku" });
	string *wynik = shadow_who->parse_command_id_list(przyp);
	if(!query_shape()) return wynik;
	wynik[2] = rasa[przyp];
    return wynik;
}

public string *
parse_command_plural_id_list(int przyp)
{
	string *rasa = ({ "smoki", "smokow", "smokom", "smoki", "smokami", "smokach" });
	string *wynik = shadow_who->parse_command_plural_id_list(przyp);
	if(!query_shape()) return wynik;
	wynik[0] = rasa[przyp];
    return wynik;

}

public varargs mixed
query_przym(int arg, int przyp, int rodzaj = this_object()->query_real_rodzaj())
{
	int liczba;
	string *wynik = ({});
	if(!query_shape()) return shadow_who->query_przym(arg, przyp, rodzaj);

    if (rodzaj < 0)
    {
        liczba = 1;
        rodzaj = -rodzaj;
    }
    else liczba = 0;

    if (arg)
    {
        wynik = wynik + ({ oblicz_przym("bialy", "biali", przyp, rodzaj, liczba) });
        wynik = wynik + ({ oblicz_przym("smukly", "smukli", przyp, rodzaj, liczba) });

        return wynik;
    }

    return oblicz_przym("bialy", "biali", przyp, rodzaj, liczba);
}


public varargs mixed
query_pprzym(int arg, int przyp, int rodzaj = this_object()->query_real_rodzaj())
{
	int liczba;
	string *wynik = ({});
	if(!query_shape()) return shadow_who->query_przym(arg, przyp, rodzaj);

    if (rodzaj < 0)
    {
        liczba = 1;
        rodzaj = -rodzaj;
    }
    else liczba = 0;

    if (arg)
    {
        wynik = wynik + ({ oblicz_przym("bialy", "biali", przyp, rodzaj, liczba) });
        wynik = wynik + ({ oblicz_przym("smukly", "smukli", przyp, rodzaj, liczba) });

        return wynik;
    }

    return oblicz_przym("bialy", "biali", przyp, rodzaj, liczba);
}

public mixed
query_przymiotniki()
{
	if(!query_shape()) return shadow_who->query_przymiotniki();
    return ({ ({"bialy", "smukly" }), ({ "biali", "smukli" }) }) + ({ });
}


public string
cr_attack_desc(int aid)
{
    if(query_shape())
    {
        switch(aid)
        {
        case W_RIGHT:return (random(100) > 50 ? "poteznym uderzeniem prawej lapy" :
                                                "poteznym uderzeniem lewej lapy");
        case W_LEFT: return "gryzac mocno swa szczeka";
        case W_BOTH: return "swym umyslem";
        case W_FOOTR:return "wyprowadzajac cios poteznym ogonem";
        case W_FOOTL:return "mocnym uderzeniem skrzydla";
        }

        return "mind";
    }

    return shadow_who->cr_attack_desc(aid);
}

public void
cr_reset_attack(int aid)
{
	int uskill = shadow_who->query_skill(SS_UNARM_COMBAT);
	if(!query_shape()) return shadow_who->cr_reset_attack(aid);


	if (!sizeof(shadow_who->query_ua_attack(aid)))
    {
		switch(aid)
		{
			case W_RIGHT:
                (shadow_who->query_combat_object())->cb_add_attack(45, 40, W_BLUDGEON, 40, aid, uskill);
                break;
            case W_LEFT:
                (shadow_who->query_combat_object())->cb_add_attack(30, 60, W_BLUDGEON, 20, aid, uskill + 10);
                break;
            case W_BOTH:
                /*
                 * We use the hands separately in unarmed combat
                 */
                (shadow_who->query_combat_object())->cb_add_attack(0, 0, W_SLASH, 0, aid, uskill + 6);
                break;
            case W_FOOTR:
                (shadow_who->query_combat_object())->cb_add_attack(30, 60, W_BLUDGEON, 20, aid, uskill);
                break;
            case W_FOOTL:
                (shadow_who->query_combat_object())->cb_add_attack(60, 40, W_BLUDGEON, 20, aid, uskill);
                break;
        }
    }
}

public void
cr_reset_hitloc(int hid)
{
	if(!query_shape()) return shadow_who->cr_reset_hitloc(hid);

    if (!sizeof(shadow_who->query_ua_hitloc(hid)))
        {
            switch(hid)
            {
            case A_HEAD:
                (shadow_who->query_combat_object())->cb_add_hitloc(200, 10, "gadzi pysk", hid);
                break;
            case A_L_ARM:
                (shadow_who->query_combat_object())->cb_add_hitloc(50, 0, "lewe ramie", hid);
                break;
            case A_R_ARM:
                (shadow_who->query_combat_object())->cb_add_hitloc(50, 0, "prawe ramie", hid);
                break;
            case A_TORSO:
                (shadow_who->query_combat_object())->cb_add_hitloc(200, 80, "gadzie cialo", hid);
                break;
            case A_LEGS:
                (shadow_who->query_combat_object())->cb_add_hitloc(200, 10, "gadzi ogon", hid);
                break;
            }
       }
}


void
change_shape()
{

    if (!query_shape())
    {
        cr_reset_attack(TS_LWEAPON);
        cr_reset_attack(TS_RWEAPON);

        cr_reset_hitloc(A_HEAD);
        cr_reset_hitloc(A_L_ARM);
        cr_reset_hitloc(A_R_ARM);
        cr_reset_hitloc(A_TORSO);
        cr_reset_hitloc(A_LEGS);
    }
    else
    {
		cr_reset_attack(W_LEFT);
        cr_reset_attack(W_RIGHT);
        cr_reset_attack(W_FOOTR);
        cr_reset_attack(W_FOOTL);
        cr_reset_hitloc(A_HEAD);
        cr_reset_hitloc(A_L_ARM);
        cr_reset_hitloc(A_R_ARM);
        cr_reset_hitloc(A_TORSO);
        cr_reset_hitloc(A_LEGS);
	}

}

public int
prevent_enter(object ob, object from)
{
    if(query_shape())
    {
        if(from)
        {
            if(interactive(from))
            {
                write("To nie jest zbyt madre by dawac cos temu smoku..\n");
                return 1;
            }
        }

        if((function_exists("create_object", ob) == ARMOUR_OBJECT) ||
           (function_exists("create_object", ob) == WEAPON_OBJECT))
        {
            write("Nie masz jak tego chwycic..\n");

            return 1;
        }

    }

    return shadow_who->prevent_enter(ob, from);
}


wield(object wep)
{
	if(query_shape())
        return "Nie masz gdzie tego chwycic.\n";

    return shadow_who->wield(wep);
}


string
long(object dla)
{
    string kondycja;

    kondycja = explode(query_shadow_who()->show_sublocs(dla, ({"_subloc_misc_extra"})), "\n")[1] + "\n";

    if(!query_shape()) return shadow_who->long(dla);

    if (dla == query_shadow_who())
    {
        return "Jestes bialym, smuklym smokiem. Twoje cialo pokryte jest" +
               " mocna luska, a szyje ozdabia imponujacych rozmiarow grzebien." +
               " Ogromne skrzydla, ktore wyrastaja ci z grzebietu, majestatycznie" +
               " rozposcieraja sie nad toba. Kontakt z poteznym ogonem zakonczonym" +
               " czyms na ksztalt maczugi na pewno nie nalezy do przyjemnych." +
               " Twoje oczy blyszcza leciwym wiekiem, wiedza i rozbawieniem.\n" +
               "Znany jestes jako:\n" +
               query_shadow_who()->query_presentation() + ".\n" +
               kondycja
             + query_shadow_who()->show_sublocs(dla, ({ "_soul_cmd_extra"}) );
    }
    else
    {
        return "Jest bialym, smuklym smokiem. Jego cialo pokryte jest" +
               " mocna luska, a szyje ozdabia imponujacych rozmiarow grzebien." +
               " Ogromne skrzydla, ktore wyrastaja z grzebietu gada, majestatycznie" +
               " rozposcieraja sie nad nim. Kontakt z poteznym ogonem zakonczonym" +
               " czyms na ksztalt maczugi na pewno nie nalezy do przyjemnych. Przekrwione" +
               " oczy poczwary blyszcza leciwym wiekiem, wiedza i rozbawieniem.\n" +
               kondycja + query_shadow_who()->show_sublocs(dla, ({ "_soul_cmd_extra"}) );
    }
}


public string
query_presentation()
{
    string title;
    if(!query_shape()) return shadow_who->query_presentation();

    if(calling_function() == "print_who")
        return capitalize(shadow_who->query_real_name()) + " " +
               shadow_who->query_title() + ", " +
               shadow_who->query_race_name();

    return shadow_who->query_presentation();
}

public int
query_max_hp()
{
	if(!query_shape()) return shadow_who->query_max_hp();

	return 30000;
}