I tried long ago to make the maths on how damage is calculated to know what's the best output, the break point on damage between bow hybrid builds, but I wasn't able to do it.
Here is my maths, I was able to calculate exactly hp/mp/phy and mag balance. But the most important, the damage didn't matched at all in game, I give up.
calcs.py
PHP Code:
### Define your server settings
StatsPointsPerLevel = 3
BaseSTR = 20
BaseINT = 20
### Define your character
## (Bow lv.135 | 3:0 | FullBlue | Devil 15% | Fire/Cold)
Level = 100
BalancePointsSTR = 1 # Ex. 9:10 => 9 STR : 10 INT
BalancePointsINT = 1
SetTotalSTR = 0#12*3 # 11 items * 8 STR
SetTotalINT = 0#12*3 # 11 items * 8 INT
ExtraSTR = 5
ExtraINT = 0
ExtraHP = 0#30*3
ExtraMP = 0#30*3
ExtraHPPercent = 0 # 15% Devil
ExtraMPPercent = 0 #
ExtraPhyDamagePercent = 5 # 5% avatar
ExtraMagDamagePercent = 5
### Define your weapon (Bow | Legendary D15 +15)
PhyAtkPwrMin = 6750
PhyAtkPwrMax = 7798
PhyReinforceMin = 496.7
PhyReinforceMax = 608.7
MagAtkPwrMin = 10814
MagAtkPwrMax = 12491
MagReinforceMin = 794.8
MagReinforceMax = 974.0
### WARNING !!!
### Math alert, read by your own risk ...
BalancePointsTotal = BalancePointsSTR+BalancePointsINT
StatsPointsTotal = (Level-1)*StatsPointsPerLevel
BalanceTotalSTR = StatsPointsTotal*(BalancePointsSTR*1.0/BalancePointsTotal)
BalanceTotalINT = StatsPointsTotal*(BalancePointsINT*1.0/BalancePointsTotal)
STR = BaseSTR + (Level-1) + BalanceTotalSTR + SetTotalSTR + ExtraSTR
INT = BaseINT + (Level-1) + BalanceTotalINT + SetTotalINT + ExtraINT
HP = round(pow(1.02,(Level-1)) * STR * 10) + ExtraHP
MP = round(pow(1.02,(Level-1)) * INT * 10) + ExtraMP
HP = HP + (ExtraHPPercent * HP / 100)
MP = MP + (ExtraMPPercent * MP / 100)
M = 28 +Level*4
PhysicalBalance = 100-100*2/3*(M - STR)/M #round(100-(100*2/3*(StatsPointsTotal-STR)/StatsPointsTotal))
MagicalBalance = 100*INT/M
if PhysicalBalance > 120:
PhysicalBalance = 120
if MagicalBalance > 120:
MagicalBalance = 120
PhyAtkMin = (PhyAtkPwrMin+(STR*PhyReinforceMin/100))*(1+ExtraPhyDamagePercent/100)
PhyAtkMax = (PhyAtkPwrMax+(STR*PhyReinforceMax/100))*(1+ExtraPhyDamagePercent/100)
MagAtkMin = (MagAtkPwrMin+(INT*MagReinforceMin/100))*(1+ExtraMagDamagePercent/100)
MagAtkMax = (MagAtkPwrMax+(INT*MagReinforceMax/100))*(1+ExtraMagDamagePercent/100)
### Your Results are on screen! ->
print("SRO Hybrid Solutions v0.0.1")
print()
print("HP: "+str(HP))
print("MP: "+str(MP))
print()
print("STR: "+str(STR))
print("INT: "+str(INT))
print("Stat points distribuited: "+str(StatsPointsTotal))
print()
print("Physical balance: "+str(int(PhysicalBalance))+"(%) "+str(PhysicalBalance))
print("Magical balance: "+str(int(MagicalBalance))+"(%) "+str(MagicalBalance))
print()
print("Phy. Atk. Pwr: "+str(int(PhyAtkMin))+" to "+str(int(PhyAtkMax)))
print("Mag. Atk. Pwr: "+str(int(MagAtkMin))+" to "+str(int(MagAtkMax)))
print("Total Atk. Pwr: "+str(int(PhyAtkMin + MagAtkMin))+" to "+str(int(PhyAtkMax + MagAtkMax)))
print("Total Atk. Pwr. (Critical): "+str(int(PhyAtkMin*(1+PhysicalBalance/100) + MagAtkMin))+" to "+str(int(PhyAtkMax*(1+PhysicalBalance/100) + MagAtkMax)))
Let me know if you can
Edit: Oh, and to answer your question, yeah, skill should be flat added to the damage of the weapon based on the percentage it says at the end between parenthesis for each hit.
1 hit (+%100) = x1
3 hit (+%80) = x0.8 + x0.8 + x0.8 so each hit is calculated separately with different dice/roll.