/* Plik wyliczajacy specjale */

#include "defs.h"

int query_garou_hit(object garou, object enemy);

int
query_garou_pen(object garou, object enemy)
{
	int slash_skill;
	int PEN;
	int SKILL;

	slash_skill = garou->query_skill(SS_GAROU_SLASH);

    PEN = (garou->query_stat(SS_OCCUP)*5)        +
           garou->query_stat(SS_STR)*4           +
           garou->query_skill(SS_UNARM_COMBAT)*2   +
           garou->query_stat(SS_DEX)*3           +
           (40)                                  +
           (garou->query_stat(SS_WIS)/2)         +
           (garou->query_prop(GAROU_CLAWS_BLESS)*5) *4;

    SKILL = garou->query_skill(SS_GAROU_SLASH);
    return MIN(MAX_PEN, ftoi(itof(F_PENMOD(PEN, SKILL))*2.1));
}

int
query_garou_hit(object garou, object enemy)
{
    object combat;
    int tohit;
    mixed result;

    combat = enemy->query_combat_object();
    tohit = ((garou->query_skill(SS_GAROU_SLASH) +
             garou->query_skill(SS_UNARM_COMBAT)+
             MIN(160, garou->query_stat(SS_STR))+
             garou->query_prop(GAROU_CLAWS_BLESS) )/4);

    result = combat->cb_tohit(-1, tohit, 1000, enemy);

    if(intp(result)) return result;
    if(objectp(result)) return 0;
    if(result[0] > 0) return result[0];
    return 0;
}

void
garou_use_skill(object garou, int skill)
{
	int i, pomoc;
	string opis;
	string log;

	if(skill == 0) return;

	i = 120 - garou->query_skill(skill);
	switch(garou->query_skill(skill))
	{
		case 0..40: pomoc = 1000; break;
		case 41..60: pomoc = 1500; break;
		case 61..75: pomoc = 1750; break;
		case 76..85: pomoc = 2000; break;
		case 86..100: pomoc = 3000; break;

	}

	if(random(pomoc) < i)
	{
		switch(skill)
		{
			case SS_GAROU_SLASH: opis = "Czujesz ze coraz lepiej potrafisz poslugiwac sie swymi pazurami.\n"; log = "slash"; break;
			case SS_GAROU_SZAL: opis = "Wyraznie poczul" + garou->koncowka("es", "as") + " ze bardziej sie kontrolujesz podczas szalu.\n"; log = "szal"; break;
			case SS_GAROU_CZARY: opis = "Wydaje ci sie iz lepiej potrafisz wykorzystac dary Gaii niz przedtem.\n"; log = "czary"; break;
		}
		garou->set_skill(skill, garou->query_skill(skill) + 1);
		garou->catch_msg(opis);
		setuid();
		seteuid(getuid());
		write_file(LOGPATH + "skill_gain", capitalize(garou->query_real_name()) + " polepszyl: " + log + " i ma teraz: " + garou->query_skill(skill) + "\n");
	}
}

int
garou_try_cast_spell(object garou, int trudnosc)
{
	int skill;
	skill = garou->query_skill(SS_GAROU_CZARY);
	if(skill >= trudnosc) return 1;
	if(itof(trudnosc / (skill + 1)) > 2.8) return 0;
	if(skill > random(trudnosc)) return 1;
	return 0;
}
