/* Plik wyliczajacy specjale */

#include "defs.h"

int query_skaven_hit(object skaven, object enemy);

int
query_skaven_pen(object skaven, object enemy)
{
	int slash_skill;
	int PEN;
	int SKILL;

	slash_skill = skaven->query_skill(SS_SKAVEN_SLASH);

    PEN = (skaven->query_stat(SS_OCCUP)*3)        +
           skaven->query_stat(SS_STR)*2           +
           skaven->query_skill(SS_UNARM_COMBAT)   +
           skaven->query_stat(SS_DEX)*2           +
           (40)                                  +
           (skaven->query_stat(SS_WIS)/4)         +
           (skaven->query_prop(SKAVEN_CLAWS_BLESS)*5) * 2;

    SKILL = skaven->query_skill(SS_SKAVEN_SLASH);
    return MIN(MAX_PEN, ftoi(itof(F_PENMOD(PEN, SKILL))*2.1));
}

int
query_skaven_hit(object skaven, object enemy)
{
    object combat;
    int tohit;
    mixed result;

    combat = enemy->query_combat_object();
    tohit = ((skaven->query_skill(SS_SKAVEN_SLASH) +
             skaven->query_skill(SS_UNARM_COMBAT)+
             MIN(160, skaven->query_stat(SS_STR))+
             skaven->query_prop(SKAVEN_CLAWS_BLESS) ));

    result = combat->cb_tohit(-1, tohit, 700, enemy);

    if(intp(result)) return result;
    if(objectp(result)) return 0;
    if(result[0] > 0) return result[0];
    return 0;
}

void
skaven_use_skill(object skaven, int skill)
{
	int i, pomoc;
	string opis;
	string log;

	if(skill == 0) return;

	i = 120 - skaven->query_skill(skill);
	switch(skaven->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_SKAVEN_SLASH: opis = "Czujesz ze coraz lepiej potrafisz poslugiwac sie swymi pazurami.\n"; log = "slash"; break;
			case SS_SKAVEN_SZAL: opis = "Wyraznie poczul" + garou->koncowka("es", "as") + " ze bardziej sie kontrolujesz podczas szalu.\n"; log = "szal"; break;
			case SS_SKAVEN_CZARY: opis = "Wydaje ci sie iz lepiej potrafisz wykorzystac dary Rogatego Szczura niz przedtem.\n"; log = "czary"; break;
		}
		skaven->set_skill(skill, skaven->query_skill(skill) + 1);
		skaven->catch_msg(opis);
		setuid();
		seteuid(getuid());
		write_file(LOGPATH + "skill_gain", capitalize(skaven->query_real_name()) + " polepszyl: " + log + " i ma teraz: " + skaven->query_skill(skill) + "\n");
	}
}

int
skaven_try_cast_spell(object skaven, int trudnosc)
{
	int skill;
	skill = garou->query_skill(SS_SKAVEN_CZARY);
	if(skill >= trudnosc) return 1;
	if(itof(trudnosc / (skill + 1)) > 2.8) return 0;
	if(skill > random(trudnosc)) return 1;
	return 0;
}
