Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

The new CalculateStats ~Ryouken

void Character::CalculateStats()
{
	ECF_Data *ecf = world->ecf->Get(this->clas);
    short buffstr = 0, buffint = 0, buffwis = 0, buffagi = 0, buffcon = 0, buffcha = 0;

    UTIL_FOREACH(this->statbuffs, buff)
    {
        buffstr += buff->str;
        buffint += buff->intl;
        buffwis += buff->wis;
        buffagi += buff->agi;
        buffcon += buff->con;
        buffcha += buff->cha;
    }

	this->adj_str = this->str + ecf->str + buffstr;
	this->adj_intl = this->intl + ecf->intl + buffint;
	this->adj_wis = this->wis + ecf->wis + buffwis;
	this->adj_agi = this->agi + ecf->agi + buffagi;
	this->adj_con = this->con + ecf->con + buffcon;
	this->adj_cha = this->cha + ecf->cha + buffcha;

	this->maxweight = 70;
	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_FOREACH(this->inventory, item)
	{
		this->weight += this->world->eif->Get(item.id)->weight * item.amount;

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

	UTIL_FOREACH(this->paperdoll, 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;
			this->adj_str += item->str;
			this->adj_intl += item->intl;
			this->adj_wis += item->wis;
			this->adj_agi += item->agi;
			this->adj_con += item->con;
			this->adj_cha += item->cha;
		}
	}

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

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

	this->maxhp += rpn_eval(rpn_parse(this->world->formulas_config["hp"]), formula_vars);
	this->maxtp += rpn_eval(rpn_parse(this->world->formulas_config["tp"]), formula_vars);
	this->maxsp += rpn_eval(rpn_parse(this->world->formulas_config["sp"]), formula_vars);
	this->maxweight = rpn_eval(rpn_parse(this->world->formulas_config["weight"]), formula_vars);

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

	if (this->world->config["UseClassFormulas"])
	{
		auto dam = rpn_eval(rpn_parse(this->world->formulas_config["class." + util::to_string(ecf->type) + ".damage"]), formula_vars);

		this->mindam += dam;
		this->maxdam += dam;
		this->armor += rpn_eval(rpn_parse(this->world->formulas_config["class." + util::to_string(ecf->type) + ".defence"]), formula_vars);
		this->accuracy += rpn_eval(rpn_parse(this->world->formulas_config["class." + util::to_string(ecf->type) + ".accuracy"]), formula_vars);
		this->evade += rpn_eval(rpn_parse(this->world->formulas_config["class." + util::to_string(ecf->type) + ".evade"]), formula_vars);
	}
	else
	{
		this->mindam += this->adj_str / 2;
		this->maxdam += this->adj_str / 2;
		this->accuracy += this->adj_agi / 2;
		this->evade += this->adj_agi / 2;
		this->armor += this->adj_con / 2;
	}

	if (this->mindam == 0 || !this->world->config["BaseDamageAtZero"])
		this->mindam += int(this->world->config["BaseMinDamage"]);

	if (this->maxdam == 0 || !this->world->config["BaseDamageAtZero"])
		this->maxdam += int(this->world->config["BaseMaxDamage"]);

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