Какая красота!
- Код: Выделить всё
int __thiscall type_AI_spellcaster::get_disease_value(
type_AI_spellcaster *this,
const army *army,
type_enchant_data data)
{
int result; // eax
int totalCombatValue; // eax
double spellCastWorkChance; // st7
int result_1; // [esp+18h] [ebp+8h]
float result_2; // [esp+18h] [ebp+8h]
if ( ((1 << army->sideIndex) & this->shootingThreats) == 0 )
return 0;
if ( this->combatParams.isOpponentDangerous )
return 0;
totalCombatValue = (army::get_total_combat_value)(this->combatParams.heroAttack, this->combatParams.heroDefense);
result = ftol((totalCombatValue - totalCombatValue * 0.9) * data.spellDuration);
result_1 = result;
if ( data.a1 )
{
spellCastWorkChance = combatManager::SpellCastWorkChance(
combatManager,
SPL_WEAKNESS,
this->side[AI_CASTER],
army,
0,
1,
this->isCreatureCast);
result_2 = result_1;
return ftol(spellCastWorkChance * result_2);
}
return result;
}
Никаких LODWORD() и __int64 А смысл тот же, и округление сразу видно! Только одна беда-печаль: нужно все структуры переносить из старой базы.
Просто сравните с этим монстрокодом:
- Код: Выделить всё
int __thiscall type_AI_spellcaster::get_disease_value(
type_AI_spellcaster *this,
const army *army,
type_enchant_data data)
{
__int64 v5; // rax
int total_combat_value; // eax
float stack; // [esp+18h] [ebp+8h]
if ( ((1 << army->sideIndex) & this->shootingThreats) != 0 )
{
if ( this->combatParams.isOpponentDangerous )
{
LODWORD(v5) = 0;
}
else
{
total_combat_value = army::get_total_combat_value(
army,
this->combatParams.heroAttack,
this->combatParams.heroDefense);
v5 = ((total_combat_value - total_combat_value * 0.9) * data.spellDuration);
if ( data.a1 )
{
stack = v5;
return (combatManager::SpellCastWorkChance(
gpCombatManager,
SPL_WEAKNESS,
this->side[AI_CASTER],
army,
0,
1,
this->isCreatureCast)
* stack);
}
}
}
else
{
LODWORD(v5) = 0;
}
return v5;
}
Никаких больше __int64 при округлении. Я перенёс только основные структуры, а уже заметно, как преобразился код.
Чем ещё хорош мой хак? Тем, что тут можно ftol() смело заменять на (int)() и код будет компилироваться.