84 lines
2.3 KiB
Lua
84 lines
2.3 KiB
Lua
local BattleUtils = {}
|
|
local CONSTS = require "datas.consts.battle"
|
|
local protectypes = require "datas.gamedata.battles.protectypes"
|
|
|
|
local STATS = require "datas.consts.stats"
|
|
|
|
function BattleUtils.computeLaunchingDamages(base, fighter, isSpecial)
|
|
local damages = base / CONSTS.DAMAGE.DIVISOR
|
|
if (isSpecial) then
|
|
damages = damages * fighter:getStat(STATS.POWER)
|
|
else
|
|
damages = damages * fighter:getStat(STATS.ATTACK)
|
|
end
|
|
|
|
damages = damages * BattleUtils.computerArmorAndDamage(fighter:getStat(STATS.DAMAGE))
|
|
|
|
if (BattleUtils.rollDice(fighter:getStat(STATS.CRITICAL))) then
|
|
damages = damages * 2
|
|
end
|
|
|
|
return damages
|
|
end
|
|
|
|
function BattleUtils.computeReceivingDamages(base, fighter, isSpecial, isDefending)
|
|
local damages = base
|
|
if (isSpecial) then
|
|
damages = damages / fighter:getStat(STATS.MIND)
|
|
else
|
|
damages = damages / fighter:getStat(STATS.DEFENSE)
|
|
end
|
|
|
|
damages = damages * BattleUtils.computerArmorAndDamage(fighter:getStat(STATS.ARMOR), true)
|
|
|
|
if (isDefending) then
|
|
damages = damages * CONSTS.DAMAGE.DEFFACTOR
|
|
end
|
|
|
|
return damages
|
|
end
|
|
|
|
function BattleUtils.applyProtectTypes(value, type, protectypeList)
|
|
for _, protectype in ipairs(protectypeList) do
|
|
local protecttypeData = protectypes[protectype]
|
|
if protecttypeData ~= nil then
|
|
if (utils.table.contain(protecttypeData.resistTo, type)) then
|
|
value = value * CONSTS.ATKWRONGTYPE
|
|
end
|
|
else
|
|
core.debug:warning("battleutils", "protectype " .. protectype .. " doesn't exists ")
|
|
end
|
|
end
|
|
return value
|
|
end
|
|
|
|
function BattleUtils.applyWeaknesses(damages, element, weaknessList)
|
|
if (utils.table.contain(weaknessList, element)) then
|
|
damages = damages * 1.2
|
|
end
|
|
return damages
|
|
end
|
|
|
|
function BattleUtils.applyResistences(damages, element, resistsList)
|
|
if (utils.table.contain(resistsList, element)) then
|
|
damages = damages * 0.8
|
|
end
|
|
return damages
|
|
end
|
|
|
|
function BattleUtils.rollDice(stat)
|
|
local stat = stat or 100
|
|
return (math.random(100) <= stat)
|
|
end
|
|
|
|
function BattleUtils.computerArmorAndDamage(stat, isNegative)
|
|
if (isNegative) then
|
|
stat = stat * -1
|
|
end
|
|
if (stat < 0) then
|
|
stat = stat * STATS.ARMOR_AND_DAMAGE_RATIO
|
|
end
|
|
return (100 + (stat))/100
|
|
end
|
|
|
|
return BattleUtils
|