Last active
September 2, 2015 12:09
-
-
Save TeoTwawki/a49311d25ce25470dee5 to your computer and use it in GitHub Desktop.
example of monster using onSpikesDamage() for elemental damage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Some things are not perfect here, existing examples in trunk are written this way however. | |
require("scripts/globals/status"); | |
require("scripts/globals/magic"); | |
----------------------------------- | |
-- onMobInitialize Action | |
----------------------------------- | |
function onMobInitialize(mob) | |
mob:setMobMod(MOBMOD_AUTO_SPIKES, 1); -- Can be any non zero number, enables scripting of spikes. | |
-- Additionaly, ANY spike status effect or setting the modifiier for spike effect power manually, is require to activate. | |
-- I would like to change that in a later refactor, as it is a stupid requirement. | |
mob:addStatusEffect(EFFECT_ICE_SPIKES, 10, 0, 0); -- This effect is setting the base power of spikes before LV or stat adjustments | |
mob:getStatusEffect(EFFECT_ICE_SPIKES):setFlag(32); -- Makes effect unable to be dispelled | |
end; | |
----------------------------------- | |
-- onSpikesDamage | |
----------------------------------- | |
function onSpikesDamage(mob,target,damage) | |
local INT_diff = mob:getStat(MOD_INT) - target:getStat(MOD_INT); | |
if (INT_diff > 20) then | |
INT_diff = 20 + ((INT_diff - 20)*0.5); -- INT above 20 is half as effective. | |
end | |
local dmg = ((damage+INT_diff)*0.5); -- INT adjustment and base damage averaged together. | |
local params = {}; | |
params.bonusmab = 0; | |
params.includemab = false; | |
dmg = addBonusesAbility(mob, ELE_ICE, target, dmg, params); -- Checks for things like weather bonus | |
dmg = dmg * applyResistanceAddEffect(mob, target, ELE_ICE, 0); -- Elemental resist and level correction happen here | |
dmg = adjustForTarget(target, dmg, ELE_ICE); -- Checks for absorb/null element modifiers | |
dmg = finalMagicNonSpellAdjustments(mob, target, ELE_ICE, dmg); -- Needed to check stoneskin, phalanx, etc. | |
if (dmg < 0) then | |
dmg = 0; | |
end | |
return SUBEFFECT_ICE_SPIKES, 44, dmg; | |
end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment