Advertisement
lochlenn

Untitled

Sep 11th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. int32 ACombatManager::RollSpellDamage(FCharacterData CasterData, FSpell SpellBeingCast)
  2. {
  3.     int32 finalRoll = 0;
  4.     int32 casterLevel = CasterData.CharacterBaseStats.Level;
  5.     int32 modifiedMax = 0;
  6.     int32 modifiedMin = 0;
  7.  
  8.     // only modify if stat should be increased (ie. a multiple of levels/max increase or level is high enough for mod to have happened previously)
  9.     if (casterLevel % SpellBeingCast.SpellLevelsPerMaxIncrease == 0 || (casterLevel >= SpellBeingCast.SpellLevelsPerMaxIncrease))
  10.     {                                          
  11.         int32 modCasterLevel = FMath::FloorToInt(casterLevel / SpellBeingCast.SpellLevelsPerMaxIncrease);
  12.         // clamp to avoid spell growing over level cap, and so max cannot be zero
  13.         modifiedMax = FMath::Clamp(((SpellBeingCast.SpellLevelsPerMaxIncrease / modCasterLevel) * SpellBeingCast.SpellMaxIncreaseAmount),
  14.             SpellBeingCast.SpellBaseMax,
  15.             (((SpellBeingCast.SpellLevelsPerMaxIncrease / SpellBeingCast.SpellLevelCap) * SpellBeingCast.SpellMaxIncreaseAmount) + SpellBeingCast.SpellBaseMax));
  16.     }
  17.     else
  18.     {
  19.         modifiedMax = SpellBeingCast.SpellBaseMax;
  20.     }
  21.     // clamp to avoid spell growing over level cap, and so min cannot be zero
  22.     if (casterLevel % SpellBeingCast.SpellLevelsPerMinIncrease == 0 || (casterLevel >= SpellBeingCast.SpellLevelsPerMinIncrease))
  23.     {                                              
  24.         int32 modCasterLevel = FMath::FloorToInt(casterLevel / SpellBeingCast.SpellLevelsPerMinIncrease);
  25.         // clamp to avoid spell growing over level cap, and so min cannot be zero
  26.         modifiedMax = FMath::Clamp(((SpellBeingCast.SpellLevelsPerMinIncrease / modCasterLevel) * SpellBeingCast.SpellMinIncreaseAmount),
  27.             SpellBeingCast.SpellBaseMin,
  28.             (((SpellBeingCast.SpellLevelsPerMinIncrease / SpellBeingCast.SpellLevelCap) * SpellBeingCast.SpellMinIncreaseAmount) + SpellBeingCast.SpellBaseMin));
  29.     }
  30.     else
  31.     {
  32.         modifiedMin = SpellBeingCast.SpellBaseMin;
  33.     }
  34.    
  35.     // roll damage with modified min/max
  36.     finalRoll = FMath::RandRange(modifiedMin, modifiedMax);
  37.     return finalRoll;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement