Starting with the Reborn update, ability:ApplyDataDrivenModifier has started generating the following error: "Unsupported KeyValue type for key duration (type float64)". This causes modifiers to be applied with an infinite duration, leading to infinite stuns and whatnot.
Here is my datadriven ability code:
And here is the relevant Lua code:
In short, keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_invoker_retro_levitation", {duration = levitation_duration}) causes the following error:
Here is my datadriven ability code:
Code:
"invoker_retro_levitation" { // General //------------------------------------------------------------------------------------------------------------- "BaseClass" "ability_datadriven" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE" "AbilityTextureName" "invoker_retro_levitation" "AbilityCastAnimation" "ACT_DOTA_CAST_GHOST_WALK" "FightRecapLevel" "1" "MaxLevel" "1" "AbilityProcsMagicStick" "1" // Stats //------------------------------------------------------------------------------------------------------------- "AbilityCooldown" "15" "AbilityManaCost" "100" "precache" { "particle" "particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf" "soundfile" "soundevents/game_sounds_heroes/game_sounds_brewmaster.vsndevts" } // Special //------------------------------------------------------------------------------------------------------------- "AbilitySpecial" { "01" { "var_type" "FIELD_FLOAT" "duration" ".9 1.8 2.7 3.6 4.5 5.4 6.3 7.2" //Increases with Quas, Wex, and Exort. } "02" { "var_type" "FIELD_INTEGER" "cyclone_initial_height" "175 200 225 250 275 300 325 350" } "03" { "var_type" "FIELD_INTEGER" "cyclone_min_height" "125 150 175 200 225 250 275 300" } "04" { "var_type" "FIELD_INTEGER" "cyclone_max_height" "225 250 275 300 325 350 375 400" } "05" { "var_type" "FIELD_FLOAT" "pip_current" "1" } } "OnSpellStart" { "RunScript" { "ScriptFile" "heroes/hero_invoker/invoker_retro_levitation.lua" "Function" "invoker_retro_levitation_on_spell_start" } } "Modifiers" { "modifier_invoker_retro_levitation" { "States" { "MODIFIER_STATE_FLYING" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_NO_UNIT_COLLISION" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_STUNNED" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_ROOTED" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_DISARMED" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_INVULNERABLE" "MODIFIER_STATE_VALUE_ENABLED" "MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED" } "OnCreated" { "AttachEffect" { "EffectName" "particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf" "EffectAttachType" "world_origin" "Target" "CASTER" } "RunScript" { "ScriptFile" "heroes/hero_invoker/invoker_retro_levitation.lua" "Function" "TornadoHeight" } } "OverrideAnimation" "ACT_DOTA_DISABLED" } } }
And here is the relevant Lua code:
Code:
function invoker_retro_levitation_on_spell_start(keys) --Levitate's duration is dependent on the levels of Quas, Wex, and Exort. local quas_ability = keys.caster:FindAbilityByName("invoker_retro_quas") local wex_ability = keys.caster:FindAbilityByName("invoker_retro_wex") local exort_ability = keys.caster:FindAbilityByName("invoker_retro_exort") if quas_ability ~= nil and wex_ability ~= nil and exort_ability ~= nil then keys.caster:EmitSound("Brewmaster_Storm.Cyclone") local average_level = (quas_ability:GetLevel() + wex_ability:GetLevel() + exort_ability:GetLevel()) / 3 average_level = math.floor(average_level + .5) --Round to the nearest integer. --Ensure that the average level is in-bounds, just in case. if average_level < 1 then average_level = 1 end if average_level > 8 then average_level = 8 end local levitation_duration = keys.ability:GetLevelSpecialValueFor("duration", average_level - 1) keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_invoker_retro_levitation", {duration = levitation_duration}) --Stop the sound when the levitation ends. Timers:CreateTimer({ endTime = levitation_duration, callback = function() keys.caster:StopSound("Brewmaster_Storm.Cyclone") --keys.caster:RemoveModifierByName("modifier_invoker_retro_levitation") end }) end end
In short, keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_invoker_retro_levitation", {duration = levitation_duration}) causes the following error:
[ W General ]: Unsupported KeyValue type for key duration (type float64)