22 uint16_t spell_id =
spellAPI.getSpellID(_this->
CGdSpell, spell_index_of_type);
24 uint16_t current_damage = (spell_data.
params[1] * damage) / 100;
25 return current_damage;
29 uint16_t source_index,
30 uint16_t target_index,
43 uint16_t spell_index =
49 uint16_t return_damage = (damage * spell_data.
params[0]) / 100;
52 uint16_t final_damage = (damage - return_damage);
53 if (final_damage != 0)
56 source_index, return_damage, 0, 0, 0);
63 uint16_t source_index,
64 uint16_t target_index,
77 uint16_t spell_index =
82 return (damage * spell_data.
params[1]) / 100;
86 uint16_t source_index,
87 uint16_t target_index,
98 if (source_level + 5 <= target_level)
103 if (source_level - 0xf > target_level)
113 uint16_t tmp_damage = damage * spell_data.
params[1];
115 if (tmp_damage < hp_left)
120 tmp_damage = ((tmp_damage - hp_left) * 100) / tmp_damage;
121 uint16_t chance = 5 * tmp_damage *
122 (5 + (int16_t)(source_level - target_level));
131 uint16_t source_index,
132 uint16_t target_index,
150 uint16_t spell_index =
155 return (damage * spell_data.
params[1]) / 100;
159 uint16_t source_index,
160 uint16_t target_index,
182 uint16_t spell_index =
187 return (damage * spell_data.
params[1]) / 100;
191 uint16_t source_index,
192 uint16_t target_index, uint16_t damage)
218 uint16_t spell_index =
223 return (damage * spell_data.
params[1]) / 100;
227 uint16_t source_index,
228 uint16_t target_index,
232 if (damage == 0x7fff || damage == 0)
242 iteratorAPI.figureIteratorInit(&iter, 0, 0, 0x3ff, 0x3ff);
245 std::list<uint16_t> affected_figures;
246 uint16_t figure_id =
iteratorAPI.getNextFigure(&iter);
247 uint16_t element_count = 0;
248 while (figure_id != 0)
256 if (figure_id != target_index)
258 affected_figures.push_back(figure_id);
261 if (element_count == spell_data.
params[1])
269 if (element_count != 0)
271 uint16_t shared_damage = (damage / (element_count + 1));
272 uint16_t remainder = (damage % (element_count + 1));
278 for (
auto t : affected_figures)
281 uint32_t distance =
getDistance(&source_pos, &friend_pos);
282 distance = (distance * 0x578) / 1000;
290 friend_pos = friend_pos;
296 damage = shared_damage + remainder;
SpellFunctions * spellAPI
FigureFunctions * figureAPI
ToolboxFunctions * toolboxAPI
EffectFunctions effectAPI
IteratorFunctions iteratorAPI
uint32_t __thiscall getDistance(SF_Coord *pointA, SF_Coord *pointB)
bool __thiscall isActionMelee(SF_SGtFigureAction *_this)
@ kGdEffectSpellAssistanceHitFigure
@ kGdSpellLineAbilityTrueShot
@ kGdSpellLineAbilityDurability
@ kGdSpellLineAbilityCriticalHits
@ kGdSpellLineAbilityWarCry
@ kGdSpellLineAbilityRiposte
@ kGdSpellLineAbilityBerserk
@ kGdSpellLineAbilityEndurance
uint16_t __thiscall critical_hits_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall endurance_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall warcry_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall assistance_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall berserk_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall riposte_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall durability_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)
uint16_t __thiscall trueshot_onhit_handler(SF_CGdFigureJobs *_this, uint16_t source_index, uint16_t target_index, uint16_t damage)