/** ** Calculate damage. ** ** @param attacker Attacker. ** @param goal Goal unit. ** ** @return damage produces on goal. */ static int CalculateDamage(const CUnit &attacker, const CUnit &goal) { if (!Damage) { // Use old method. return CalculateDamageStats(*attacker.Stats, *goal.Stats, attacker.Variable[BLOODLUST_INDEX].Value); } Assert(Damage); UpdateUnitVariables(const_cast<CUnit &>(attacker)); UpdateUnitVariables(const_cast<CUnit &>(goal)); TriggerData.Attacker = const_cast<CUnit *>(&attacker); TriggerData.Defender = const_cast<CUnit *>(&goal); const int res = EvalNumber(Damage); TriggerData.Attacker = NULL; TriggerData.Defender = NULL; return res; }
/** ** Calculate damage. ** ** @param attacker Attacker. ** @param goal Goal unit. ** @param formula Formula used to calculate damage. ** ** @return damage produces on goal. */ int CalculateDamage(const CUnit &attacker, const CUnit &goal, const NumberDesc *formula) { if (!formula) { // Use old method. //Wyrmgus start // return CalculateDamageStats(*attacker.Stats, *goal.Stats, // attacker.Variable[BLOODLUST_INDEX].Value); return CalculateDamageStats(attacker, *goal.Stats, &goal); //Wyrmgus end } Assert(formula); UpdateUnitVariables(const_cast<CUnit &>(attacker)); UpdateUnitVariables(const_cast<CUnit &>(goal)); TriggerData.Attacker = const_cast<CUnit *>(&attacker); TriggerData.Defender = const_cast<CUnit *>(&goal); const int res = EvalNumber(formula); TriggerData.Attacker = NULL; TriggerData.Defender = NULL; return res; }