Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

reclasstats

void Character::ClassStats()
{
     UTIL_PTR_VECTOR_FOREACH(this->world->ecf->data, ECF_Data, c)
    {
        if( this->clas == c->id && !this->classupdated)
        {
            this->str +=  c->str;
            this->intl += c->intl;
            this->wis += c->wis;
            this->agi += c->agi;
            this->con += c->con;
            this->cha += c->cha;
        }
        else if(this->clas == c->id && this->classupdated)
        {
            this->str -=  c->str;
            this->intl -= c->intl;
            this->wis -= c->wis;
            this->agi -= c->agi;
            this->con -= c->con;
            this->cha -= c->cha;
        }
    }
}

// TODO: calculate equipment bonuses, check formulas
void Character::CalculateStats()
{

	short calcstr = this->str;
	short calcintl = this->intl;
	short calcwis = this->wis;
	short calcagi = this->agi;
	short calccon = this->con;
	short calccha = this->cha;
	this->maxweight = 70 + this->str;

	if (this->maxweight < 70 || this->maxweight > 250)
	{
		this->maxweight = 250;
	}

	this->weight = 0;
	this->maxhp = 0;
	this->maxtp = 0;
	this->mindam = 0;
	this->maxdam = 0;
	this->accuracy = 0;
	this->evade = 0;
	this->armor = 0;
	this->maxsp = 0;

	UTIL_PTR_LIST_FOREACH(this->inventory, Character_Item, item)
	{
		this->weight += this->world->eif->Get(item->id)->weight * item->amount;

		if (this->weight >= 250)
		{
			break;
		}
	}

	UTIL_ARRAY_FOREACH_ALL(this->paperdoll, int, 15, i)
	{
		if (i)
		{
			EIF_Data *item = this->world->eif->Get(i);
			this->weight += item->weight;
			this->maxhp += item->hp;
			this->maxtp += item->tp;
			this->mindam += item->mindam;
			this->maxdam += item->maxdam;
			this->accuracy += item->accuracy;
			this->evade += item->evade;
			this->armor += item->armor;
			calcstr += item->str;
			calcintl += item->intl;
			calcwis += item->wis;
			calcagi += item->agi;
			calccon += item->con;
			calccha += item->cha;
		}
	}

	if (this->weight < 0 || this->weight > 250)
	{
		this->weight = 250;
	}

    UTIL_PTR_VECTOR_FOREACH(this->world->ecf->data, ECF_Data, c)
    {
       if (this->clas == c->id)
       {

            std::tr1::unordered_map<std::string, double> formula_vars;
            this->FormulaVars(formula_vars);

            std::string formstruct = ("class." + util::to_string(c->type) + ".");
            int fdam = rpn_eval(rpn_parse(this->world->formulas_config[formstruct + "damage"]),formula_vars);
            int facc = rpn_eval(rpn_parse(this->world->formulas_config[formstruct + "accuracy"]),formula_vars);
            int fevade = rpn_eval(rpn_parse(this->world->formulas_config[formstruct + "evade"]), formula_vars);
            int fdef = rpn_eval(rpn_parse(this->world->formulas_config[formstruct + "defense"]), formula_vars);

            int mhp = rpn_eval(rpn_parse(this->world->formulas_config["hp"]), formula_vars);
            int mtp = rpn_eval(rpn_parse(this->world->formulas_config["tp"]), formula_vars);
            int msp = rpn_eval(rpn_parse(this->world->formulas_config["sp"]), formula_vars);

            formula_vars["weight"] = this->maxweight;
            formula_vars["str"] = calcstr;
            formula_vars["int"] = calcintl;
            formula_vars["wis"] = calcwis;
            formula_vars["agi"] = calcagi;
            formula_vars["con"] = calccon;
            formula_vars["cha"] = calccha;
            formula_vars["level"] = this->level;

            this->maxhp += mhp;
	        this->maxtp += mtp;
	        this->mindam += fdam;
	        this->maxdam += fdam;
	        this->accuracy += facc;
	        this->evade += fevade;
	        this->armor += fdef;
	        this->maxsp += std::min(msp,100);
       }
    }

	if (this->party)
	{
		this->party->UpdateHP(this);
	}
}