Name | Type | is_array | initial_value |
Skill | abilcode | No | |
Total | real | No |
-- in 1.31 and upto 1.32.9 PTR (when I wrote this). Frames are not correctly saved and loaded, breaking the game.
-- This runs all functions added to it with a 0s delay after the game was loaded.
FrameLoader = {
OnLoadTimer = function ()
for _,v in ipairs(FrameLoader) do v() end
end
,OnLoadAction = function()
TimerStart(FrameLoader.Timer, 0, false, FrameLoader.OnLoadTimer)
end
}
function FrameLoaderAdd(func)
if not FrameLoader.Timer then
FrameLoader.Trigger = CreateTrigger()
FrameLoader.Timer = CreateTimer()
TriggerRegisterGameEvent(FrameLoader.Trigger, EVENT_GAME_LOADED)
TriggerAddAction(FrameLoader.Trigger, FrameLoader.OnLoadAction)
end
table.insert(FrameLoader, func)
end
--[[ HoverOriginButton V1.3 by Tasyen
This System gives a easy way setup callbacks when a originframe Button is hovered. It uses Tooltips hence the executed callbacks are async.
I created this because one can do this Tooltip approach to know hovering only once per map so that systems don't have to fight over that feature but use it.
function HoverOriginButton.Add(originframeType, function(buttonIndex) end[, everyTime])
originframeType ORIGIN_FRAME_COMMAND_BUTTON or ORIGIN_FRAME_HERO_BUTTON ...
everyTime (false) only happens when the current Frame was not hovered lastTime.
action the callback
function(buttonIndex)
yourCode
yourCode
end
returns the new objects can be used for HoverOriginButton.Remove
function HoverOriginButton.AddClose(function() end)
add a callback that happens when the user stops hoveringer a Command/Item Button, async.
function()
yourCode
yourCode
end
function HoverOriginButton.Remove(object)
removes the table from the callback List
--]]
do
HoverOriginButton = {}
local SystemSpeed = 1/32.0 -- How Fast is the System
local this = HoverOriginButton
local function CreateTooltipForOrigin(originframeType, firstIndex, lastIndex)
for int = firstIndex, lastIndex do
local button = BlzGetOriginFrame(originframeType, int)
local frame = BlzCreateFrameByType("SIMPLEFRAME", "", button, "", 0)
BlzFrameSetTooltip(button, frame)
BlzFrameSetVisible(frame, false)
this[frame] = {originframeType, int}
table.insert(this.Frames, frame)
end
end
local function CreateTooltipForBuffs(firstIndex, lastIndex)
if ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR then
local parent = BlzGetOriginFrame(ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR, 0)
for int = firstIndex, lastIndex do
local button = BlzFrameGetChild(parent, int)
local frame = BlzCreateFrameByType("SIMPLEFRAME", "", button, "", 0)
BlzFrameSetTooltip(button, frame)
BlzFrameSetVisible(frame, false)
this[frame] = {ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR, int}
table.insert(this.Frames, frame)
end
end
end
local function InitFrames()
this.Frames = {}
local frame, button, CurrentSelectedButtonIndex, selectedAnything
CreateTooltipForOrigin(ORIGIN_FRAME_COMMAND_BUTTON, 0, 11)
CreateTooltipForOrigin(ORIGIN_FRAME_ITEM_BUTTON, 0, 5)
CreateTooltipForOrigin(ORIGIN_FRAME_HERO_BUTTON, 0, 6)
CreateTooltipForOrigin(ORIGIN_FRAME_SYSTEM_BUTTON, 0, 3)
CreateTooltipForOrigin(ORIGIN_FRAME_MINIMAP_BUTTON, 0, 4)
CreateTooltipForBuffs(0, 7)
button = nil
frame = nil
-- saves the last selected Button, async
CurrentSelectedButtonIndex = nil
TimerStart(this.Timer, SystemSpeed, true, function()
selectedAnything = false
-- loop all tooltips and check for the visible one
for tooltipIndex, tooltip in ipairs(this.Frames) do
if BlzFrameIsVisible(tooltip) then
selectedAnything = true
local actionType = this[tooltip][1]
local buttonIndex = this[tooltip][2]
-- the new selected is not the same as the current one?
for _, v in ipairs(this.Actions[actionType]) do
if CurrentSelectedButtonIndex ~= tooltipIndex or v[2] then
v[1](buttonIndex)
end
end
CurrentSelectedButtonIndex = tooltipIndex
end
end
-- now selects nothing?
if not selectedAnything and CurrentSelectedButtonIndex then
for _, v in ipairs(this.ActionsClose) do v[1]() end
CurrentSelectedButtonIndex = nil
end
end)
end
local function Init()
this.Timer = CreateTimer()
InitFrames()
if FrameLoaderAdd then FrameLoaderAdd(InitFrames) end
this.Actions = {}
this.ActionsClose = {}
end
function HoverOriginButton.Add(originframeType, action, everyTime)
if not this.Timer then Init() end
if not everyTime then everyTime = false end
local object = {action, everyTime}
if not originframeType then originframeType = ORIGIN_FRAME_COMMAND_BUTTON end
if not this.Actions[originframeType] then this.Actions[originframeType] = {} end
table.insert(this.Actions[originframeType], object)
return object
end
function HoverOriginButton.AddClose(action)
if not this.Timer then Init() end
local object = {action}
table.insert(this.ActionsClose, object)
return object
end
function HoverOriginButton.Remove(object)
for _, actions in pairs(this.Actions) do
for i, v in ipairs(actions) do
if v == object then
table.remove(actions, i)
return
end
end
end
for i, v in ipairs(this.ActionsClose) do
if v == object then
table.remove(this.ActionsClose, i)
return
end
end
end
end
--[[ TasAbilityFieldTooltip V2 by Tasyen
fills placeHolders in a extended ability Tooltip with current values of a 'abilityLevelField' can do simple displayFormating.
Calls down 'Hbz1' freezing ice shard waves; Deals 'Hbz2,*Hbz1' damage to units in an area over 'Hbz1,*acas'.
displays fraction digits 'Hbz1,2' -> 10.xx 'Hbz1,1' -> 10.x
displays value*100 without fraction digits 'Hbz4,%'
One can do 1 math action onto the field for displaying purposes '<field>,<mathOp><Factor>'.
mathop is one of them + - * /
Factor is either a number or another AbilityLevelField RawCodeString when an RawCodeString is given it reads from the same ability
'Hbz2,*adur' display Blizzard Wavedamage*duration(unit)
'Hbz2,+10' display the value of 'Hbz2'+10
function TasAbilityFieldTooltip.InitAuto(addLearned)
start the auto updating, which only works correctly for single unit selection
needs HoverOriginButton by Tasyen https://www.hiveworkshop.com/threads/hoveroriginbuttonv1-3.353560/
addLearned = (true) autodetects learned skills and adds them to the unitCode of the learner
function TasAbilityFieldTooltip.GetRuntimeText(unit, abilityCode) -> string
function TasAbilityFieldTooltip.UpdateRuntimeText(unit, abilityCode)
update the extended tooltip replace the placeholders with current values
beaware that in V1.31.1 this will update the global extended tooltip for this skill.
Credits: Slayer of Reforged, Mayday, Zed
--]]
do
local PercentChar = "\x25"
TasAbilityFieldTooltip = {
DefaultTooltip = {}
,Selected = {}
}
local this = TasAbilityFieldTooltip
-- the skills for an unitCode to update for the automatic hoverOriginButton approach. Learned hero skills are added when they are learned the first time.
-- so you only would need to add not learnedSkills
this.HeroSkills = {
Hamg = "AHbz,AHab,AHwe,AHmt"
--,Hpal = "AHhb,AHds,AHre,AHad"
}
local enumAbi, enumIndex
local pattern = "'....?,?.?"..PercentChar.."w*'"
local NoDigit = PercentChar..".0f"
local function TextEnum(s)
--print(s)
-- 'Hbz1' -> Hbz1
local fieldCode = string.sub(s,2,5)
if this.AbilityFieldData[fieldCode] then
--print(fieldCode)
local func = this.AbilityFieldData[fieldCode]
local field = func(FourCC(fieldCode))
--print(string.len( s ))
-- 'Hbz1' or advanced like 'Hbz1,2'
if string.len(s) > 6 then
local digits = string.sub(s,7,string.len( s ) - 1)
local firstDigit = string.sub(digits, 1, 1)
--print("'"..digits.."'")
-- display value*100
if digits == PercentChar then
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex)*100)
-- inline Math ,* ,+,-,/
elseif firstDigit == "*" or firstDigit == "/" or firstDigit == "+" or firstDigit == "-" then
-- do one math action onto the display
local remain = string.sub(digits, 2)
local func2 = this.AbilityFieldData[remain]
local value2
if func2 then
local field2 = func2(FourCC(remain))
value2 = this.AbilityFieldData[func2][1](enumAbi, field2, enumIndex)
else
value2 = tonumber(remain)
end
if firstDigit == "*" then
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex) * value2)
elseif firstDigit == "/" then
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex) / value2)
elseif firstDigit == "+" then
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex) + value2)
elseif firstDigit == "-" then
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex) - value2)
end
-- when everything goes wrong
return s
-- display with this amount of fractions?
-- this has to happen after inline Math because +1/-1 are interpreted as inline math but tonumber would see them as number
elseif tonumber(digits) then
return string.format(PercentChar.."."..digits.."f", this.AbilityFieldData[func][1](enumAbi, field, enumIndex))
else
print("unsupported TasAbilityFieldTooltip")
print(GetObjectName(abilityCode), "Level", enumIndex+1, s)
return s
end
else
return string.format(NoDigit, this.AbilityFieldData[func][1](enumAbi, field, enumIndex))
end
else
return s
end
end
function this.GetRuntimeText(unit, abilityCode)
if type(abilityCode) == "string" then abilityCode = FourCC(abilityCode) end
local index = GetUnitAbilityLevel(unit, abilityCode) - 1
local abi = BlzGetUnitAbility(unit, abilityCode)
-- use the backup string or generate it on first use of this ability[index]
local text = this.DefaultTooltip[abilityCode ..",".. index]
if not text then text = BlzGetAbilityExtendedTooltip(abilityCode, index) this.DefaultTooltip[abilityCode ..",".. index] = text end
--local result = string.gsub(text, "'....,?"..PercentChar.."d?"..PercentChar.."p?"..PercentChar.."p?'", TextEnum
enumAbi = abi
enumIndex = index
local result = string.gsub(text, pattern, TextEnum)
abi = nil
enumAbi = nil
return result
end
function this.UpdateRuntimeText(unit, abilityCode)
--xpcall(function()
if GetLocalizedString("REFORGED") == "REFORGED" then
BlzSetAbilityExtendedTooltip(abilityCode, this.GetRuntimeText(unit, abilityCode), GetUnitAbilityLevel(unit, abilityCode) - 1)
else
BlzSetAbilityStringLevelField(BlzGetUnitAbility(unit, abilityCode), ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED, GetUnitAbilityLevel(unit, abilityCode) - 1, this.GetRuntimeText(unit, abilityCode))
end
--end, print)
end
function this.InitAuto(addLearned)
-- transform Hamg = "AHbz,AHab,AHwe,AHmt"
-- -> FourCC("Hamg") = {FourCC["AHbz"] = true , FourCC["AHab"] = true ...}
-- this is done for easier setup in this.HeroSkills
for key, v in pairs(this.HeroSkills) do
if type(v) == "string" then
local vNew = {}
local startIndex = 1
while startIndex + 3 <= string.len(v) do
local skillCode = string.sub(v, startIndex, startIndex + 3)
startIndex = startIndex + 5
skillCode = FourCC(skillCode)
vNew[skillCode] = true
end
v = vNew
end
if type(key) == "string" then this.HeroSkills[FourCC(key)] = v end
end
if HoverOriginButton then
HoverOriginButton.Add(ORIGIN_FRAME_COMMAND_BUTTON, function(int)
local unitCode = GetUnitTypeId(this.Selected[GetLocalPlayer()])
if this.HeroSkills[unitCode] then
for abiCode in pairs(this.HeroSkills[unitCode]) do
this.UpdateRuntimeText(this.Selected[GetLocalPlayer()], abiCode)
end
end
end)
local trigger = CreateTrigger()
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_SELECTED)
TriggerAddAction(trigger, function()
this.Selected[GetTriggerPlayer()] = GetTriggerUnit()
end)
end
-- when wanted auto add learned skills to the update que for the learner's unitCode
if addLearned then
trigger = CreateTrigger()
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_HERO_SKILL)
TriggerAddAction(trigger, function()
local unitCode = GetUnitTypeId(GetTriggerUnit())
if not this.HeroSkills[unitCode] then this.HeroSkills[unitCode] = {} end
this.HeroSkills[unitCode][GetLearnedSkill()] = true
end)
end
end
local fLInt = ConvertAbilityIntegerLevelField
local fLReal = ConvertAbilityRealLevelField
-- this data tells what to do with the given field 4 digit codeString
-- This only cares about Ability Level Fields
this.AbilityFieldData = {
[fLInt] = {BlzGetAbilityIntegerLevelField, BlzSetAbilityIntegerLevelField},
[fLReal] = {BlzGetAbilityRealLevelField, BlzSetAbilityRealLevelField},
-- AbilityBooleanLevelField is not used it is AbilityIntegerLevelField instead
--[ConvertAbilityBooleanLevelField] = {BlzGetAbilityBooleanLevelField,BlzSetAbilityBooleanLevelField},
[ConvertAbilityStringLevelField] = {BlzGetAbilityStringLevelField,BlzSetAbilityStringLevelField},
acas = fLReal,
adur = fLReal,
ahdu = fLReal,
acdn = fLReal,
amcs = fLInt,
aare = fLReal,
aran = fLReal,
Hbz1 = fLInt,
Hbz2 = fLReal,
Hbz3 = fLInt,
Hbz4 = fLReal,
Hbz5 = fLReal,
Hbz6 = fLReal,
Hab1 = fLReal,
Hab2 = fLInt,
Hmt1 = fLInt,
Hmt2 = fLReal,
Hmt3 = fLInt,
Hwe1 = fLInt,
Hwe2 = fLInt,
Oww1 = fLReal,
Oww2 = fLReal,
Ocr1 = fLReal,
Ocr2 = fLReal,
Ocr3 = fLReal,
Ocr4 = fLReal,
Ocr5 = fLInt,
Ocr6 = fLInt,
Omi1 = fLInt,
Omi2 = fLReal,
Omi3 = fLReal,
Omi4 = fLReal,
Owk1 = fLReal,
Owk2 = fLReal,
Owk3 = fLReal,
Owk4 = fLInt,
Owk5 = fLInt,
Uan1 = fLInt,
Uan3 = fLInt,
Udc1 = fLReal,
Udp1 = fLReal,
Udp2 = fLReal,
Udp3 = fLInt,
Udp4 = fLInt,
Udp5 = fLInt,
Uau1 = fLReal,
Uau2 = fLReal,
Uau3 = fLInt,
Eev1 = fLReal,
Eim1 = fLReal,
Eim2 = fLReal,
Eim3 = fLReal,
Emb1 = fLReal,
Emb2 = fLReal,
Emb3 = fLReal,
Eme1 = fLInt,
Eme2 = morphFlags,
Eme3 = fLReal,
Eme4 = fLReal,
Eme5 = fLReal,
Ncr5 = fLReal,
Ncr6 = fLReal,
Nrg5 = fLInt,
Nrg6 = fLInt,
ave5 = fLReal,
Emeu = fLInt,
Usl1 = fLReal,
Uav1 = fLReal,
Ucs1 = fLReal,
Ucs2 = fLReal,
Ucs3 = fLReal,
Ucs4 = fLReal,
Uin1 = fLReal,
Uin2 = fLReal,
Uin3 = fLReal,
Uin4 = fLInt,
Ocl1 = fLReal,
Ocl2 = fLInt,
Ocl3 = fLReal,
Oeq1 = fLReal,
Oeq2 = fLReal,
Oeq3 = fLReal,
Oeq4 = fLReal,
Ofs1 = fLInt,
Osf1 = fLInt,
Osf2 = fLInt,
Eer1 = fLReal,
Efn1 = fLInt,
Efnu = fLInt,
Eah1 = fLReal,
Eah2 = fLInt,
Etq1 = fLReal,
Etq2 = fLReal,
Etq3 = fLReal,
Etq4 = fLReal,
Udd1 = fLReal,
Udd2 = fLReal,
Ufa1 = fLReal,
Ufa2 = fLReal,
Ufn1 = fLReal,
Ufn2 = fLReal,
Ufn5 = fLReal,
Hfa1 = fLReal,
Esf1 = fLReal,
Esf2 = fLReal,
Esf3 = fLReal,
Ear1 = fLReal,
Ear2 = fLInt,
Ear3 = fLInt,
Ear4 = fLInt,
Hav1 = fLReal,
Hav2 = fLReal,
Hav3 = fLReal,
Hav4 = fLReal,
Hbh1 = fLReal,
Hbh2 = fLReal,
Hbh3 = fLReal,
Hbh4 = fLReal,
Hbh5 = fLInt,
Htb1 = fLReal,
Htc1 = fLReal,
Htc2 = fLReal,
Htc3 = fLReal,
Htc4 = fLReal,
Htc5 = fLReal,
Had1 = fLReal,
Had2 = fLInt,
Hds1 = fLInt,
Hhb1 = fLReal,
Hre1 = fLInt,
Hre2 = fLInt,
Hca1 = fLReal,
Hca2 = fLReal,
Hca3 = fLReal,
Hca4 = stackFlags,
Oae1 = fLReal,
Oae2 = fLReal,
Ore1 = fLReal,
Osh1 = fLReal,
Osh2 = fLReal,
Osh3 = fLReal,
Osh4 = fLReal,
Nfd1 = fLReal,
Nfd2 = fLReal,
Nfd3 = fLReal,
Ndp1 = unitList,
Ndp2 = fLInt,
Ndp3 = fLInt,
Nrc1 = fLInt,
Nrc2 = fLInt,
Ams1 = fLReal,
Ams2 = fLReal,
Ams3 = fLInt,
Ams4 = fLInt,
Apl1 = fLReal,
Apl2 = fLReal,
Apl3 = fLReal,
Aplu = fLInt,
Oar1 = fLReal,
Oar2 = fLInt,
Akb1 = fLReal,
Adm1 = fLReal,
Adm2 = fLReal,
Btl1 = fLInt,
Btl2 = fLInt,
Bli1 = fLReal,
Bli2 = fLInt,
Bgm1 = fLInt,
Bgm2 = fLReal,
Bgm3 = fLInt,
Bgm4 = fLReal,
Blo1 = fLReal,
Blo2 = fLReal,
Blo3 = fLReal,
Can1 = fLReal,
Can2 = fLReal,
Car1 = fLInt,
Dev2 = fLReal,
Dev3 = fLInt,
Chd1 = fLReal,
Chd2 = fLReal,
Chd3 = fLReal,
Cha1 = fLInt,
Cri1 = fLReal,
Cri2 = fLReal,
Cri3 = fLReal,
Crs = fLReal,
Dda1 = fLReal,
Dda2 = fLReal,
Dda3 = fLReal,
Dda4 = fLReal,
Sds1 = fLReal,
Sds6 = fLInt,
Uco5 = fLReal,
Uco6 = fLReal,
Def1 = fLReal,
Def2 = fLReal,
Def3 = fLReal,
Def4 = fLReal,
Def5 = fLReal,
Def6 = fLReal,
Def7 = fLReal,
Def8 = fLReal,
Dev1 = fLInt,
Eat1 = fLReal,
Eat2 = fLReal,
Eat3 = fLReal,
Ens1 = fLReal,
Ens2 = fLReal,
Ens3 = fLReal,
ent1 = fLInt,
Egm1 = fLInt,
Egm2 = fLReal,
Fae1 = fLInt,
Fae2 = fLInt,
Fla1 = fLInt,
Fla2 = fLReal,
Fla3 = fLInt,
Gld1 = fLInt,
Gld2 = fLReal,
Gld3 = fLInt,
Gyd1 = fLInt,
Gyd2 = fLReal,
Gyd3 = fLReal,
Gydu = fLInt,
Har1 = fLInt,
Har2 = fLInt,
Har3 = fLInt,
Hea1 = fLReal,
Inf1 = fLReal,
Inf2 = fLInt,
Inf3 = fLReal,
Inf4 = fLReal,
Lit1 = fLReal,
Lit2 = fLReal,
Lsh1 = fLReal,
Loa1 = fLInt,
Mbt1 = fLReal,
Mbt2 = fLReal,
Mbt3 = fLReal,
Mbt4 = fLReal,
Mbt5 = fLInt,
Mil1 = fLInt,
Mil2 = fLInt,
Min1 = fLReal,
Min2 = fLReal,
Neu1 = fLReal,
Neu2 = fLInt,
Neu3 = fLInt,
Neu4 = fLInt,
Ndt1 = fLInt,
Ndt2 = fLInt,
Ndt3 = fLInt,
Ans5 = ConvertAbilityStringLevelField,
Ans6 = fLInt,
Arm1 = fLReal,
Arm2 = fLInt,
Poi1 = fLReal,
Poi2 = fLReal,
Poi3 = fLReal,
Poi4 = stackFlags,
Poa1 = fLReal,
Poa2 = fLReal,
Poa3 = fLReal,
Poa4 = fLReal,
Poa5 = stackFlags,
Ply1 = fLInt,
Ply2 = unitList,
Ply3 = unitList,
Ply4 = unitList,
Ply5 = unitList,
Pos1 = fLInt,
Pos2 = fLReal,
Pos3 = fLInt,
Pos4 = fLInt,
War1 = fLReal,
War2 = fLReal,
War3 = fLReal,
War4 = fLReal,
Prg1 = fLInt,
Prg2 = fLInt,
Prg3 = fLReal,
Prg4 = fLReal,
Prg5 = fLReal,
Prg6 = fLInt,
Rai1 = fLInt,
Rai2 = fLInt,
Rai3 = fLInt,
Rai4 = fLInt,
Raiu = fLInt,
Ucb5 = fLInt,
Ucb6 = fLInt,
Rej1 = fLReal,
Rej2 = fLReal,
Rej3 = fLInt,
Rej4 = fLInt,
Rpb3 = fLReal,
Rpb4 = fLReal,
Rpb5 = fLInt,
Rpb6 = fLInt,
Rep1 = fLReal,
Rep2 = fLReal,
Rep3 = fLReal,
Rep4 = fLReal,
Rep5 = fLReal,
Rtn1 = fLInt,
Rtn2 = fLInt,
Roa1 = fLReal,
Roa2 = fLInt,
Roa3 = fLReal,
Roa4 = fLReal,
Roa5 = fLInt,
Roa6 = fLInt,
Roa7 = fLInt,
Nbr1 = fLReal,
Roo1 = attackBits,
Roo2 = attackBits,
Roo3 = fLInt,
Roo4 = defenseTypeInt,
Sal1 = fLReal,
Sal2 = fLInt,
Esn1 = fLReal,
Esn2 = fLReal,
Esn3 = fLReal,
Esn4 = fLInt,
Esn5 = fLReal,
Shm1 = fLReal,
Shm2 = fLReal,
Shm3 = fLReal,
Shm4 = fLInt,
Slo1 = fLReal,
Slo2 = fLReal,
Slo3 = fLInt,
Spo1 = fLReal,
Spo2 = fLReal,
Spo3 = fLReal,
Spo4 = stackFlags,
Sod1 = fLInt,
Sod2 = fLInt,
Spa1 = fLInt,
Sta1 = fLReal,
Sta2 = fLReal,
Sta3 = fLReal,
Sta4 = fLReal,
Sta5 = fLReal,
Stau = fLInt,
Uhf1 = fLReal,
Uhf2 = fLReal,
Wha1 = fLReal,
Wha2 = fLInt,
Wha3 = fLReal,
Wrp1 = fLReal,
Wrp2 = fLReal,
Iagi = fLInt,
Iint = fLInt,
Istr = fLInt,
Ihid = fLInt,
Iatt = fLInt,
Idef = fLInt,
Isn1 = fLInt,
Ist1 = fLInt,
Isn2 = fLInt,
Ist2 = fLInt,
Ixpg = fLInt,
Ihpg = fLInt,
Impg = fLInt,
Ihp2 = fLInt,
Imp2 = fLInt,
Ivam = fLReal,
Idic = fLInt,
Iarp = fLInt,
Idam = fLReal,
Iob5 = fLInt,
Iob2 = fLReal,
Iob3 = fLReal,
Iob4 = fLReal,
Iobu = fLInt,
Ilev = fLInt,
Ilif = fLInt,
Iman = fLInt,
Igol = fLInt,
Ilum = fLInt,
Ifa1 = fLInt,
Idel = fLReal,
Icre = fLInt,
Imvb = fLInt,
Ihpr = fLInt,
Isib = fLInt,
Icfd = fLInt,
Icfm = fLInt,
Icfx = fLInt,
Idet = fLInt,
Idim = fLInt,
Idid = fLInt,
Iild = fLReal,
Iilw = fLReal,
Irec = fLInt,
Imrp = fLReal,
Ircd = fLInt,
irc2 = fLInt,
irc3 = fLInt,
Ihps = fLInt,
Imps = fLInt,
Ispi = fLReal,
Itpm = fLInt,
Itp2 = fLInt,
Idps = fLReal,
Cad1 = fLInt,
Cac1 = fLReal,
Cor1 = fLReal,
Isx1 = fLReal,
Wrs1 = fLReal,
Wrs2 = fLReal,
Wrs3 = fLInt,
Ctc1 = fLReal,
Ctc2 = fLReal,
Ctc3 = fLReal,
Ctc4 = fLReal,
Ctb1 = fLReal,
Ibl1 = unitList,
Uds1 = fLInt,
Uds2 = fLReal,
Ndc1 = unitRace,
Ndc2 = fLInt,
Nsl1 = fLInt,
Chl1 = fLInt,
Det1 = fLInt,
Dtn1 = fLReal,
Dtn2 = fLReal,
Eth1 = fLInt,
Eth2 = fLInt,
Gho1 = fLInt,
Gho2 = fLInt,
Gho3 = fLInt,
Ivs1 = fLReal,
Nmr1 = fLReal,
Nsp1 = fLInt,
Nsp2 = fLInt,
Nsp3 = fLInt,
Ssk1 = fLReal,
Ssk2 = fLReal,
Ssk3 = fLReal,
Ssk4 = fLInt,
Ssk5 = fLInt,
Hfs1 = fLReal,
Hfs2 = fLReal,
Hfs3 = fLReal,
Hfs4 = fLReal,
Hfs5 = fLReal,
Hfs6 = fLReal,
Nms1 = fLReal,
Nms2 = fLReal,
Uim1 = fLReal,
Uim2 = fLReal,
Uim3 = fLReal,
Uim4 = fLReal,
Uim5 = fLInt,
Uim6 = fLInt,
Uls1 = fLInt,
Uls2 = fLReal,
Uls3 = fLInt,
Uls4 = fLReal,
Uls5 = fLReal,
Ulsu = fLInt,
Uts1 = fLReal,
Uts2 = fLReal,
Uts3 = fLReal,
Nba1 = fLReal,
Nba2 = fLInt,
Nba3 = fLReal,
Nbau = fLInt,
Nch1 = fLInt,
Cmg2 = fLReal,
Cmg3 = fLReal,
Ndr1 = fLReal,
Ndr2 = fLReal,
Ndr3 = fLReal,
Ndr4 = fLReal,
Ndr5 = fLReal,
Ndr6 = fLReal,
Ndr7 = fLReal,
Ndr8 = fLReal,
Ndr9 = fLReal,
NdrA = fLInt,
Nsi1 = fLInt,
Nsi2 = fLReal,
Nsi3 = fLReal,
Nsi4 = fLReal,
Ntou = fLInt,
Tdg1 = fLReal,
Tdg2 = fLReal,
Tdg3 = fLReal,
Tdg4 = fLReal,
Tdg5 = fLReal,
Tsp1 = fLReal,
Tsp2 = fLReal,
Nbf5 = fLReal,
Ebl1 = fLReal,
Ebl2 = fLReal,
Efk1 = fLReal,
Efk2 = fLReal,
Efk3 = fLInt,
Efk4 = fLReal,
Esh1 = fLReal,
Esh2 = fLReal,
Esh3 = fLReal,
Esh4 = fLReal,
Esh5 = fLReal,
Esv1 = fLInt,
Esvu = fLInt,
abs1 = fLReal,
abs2 = fLReal,
bsk1 = fLReal,
bsk2 = fLReal,
bsk3 = fLReal,
coau = fLInt,
coa1 = fLInt,
coa2 = fLInt,
cyc1 = fLInt,
dcp1 = fLInt,
dcp2 = fLInt,
dvm1 = fLReal,
dvm2 = fLReal,
dvm3 = fLReal,
dvm4 = fLReal,
dvm5 = fLReal,
dvm6 = fLInt,
exh1 = fLInt,
exhu = fLInt,
fak1 = fLReal,
fak2 = fLReal,
fak3 = fLReal,
fak4 = fLReal,
fak5 = fLReal,
hwdu = fLInt,
inv1 = fLInt,
inv2 = fLInt,
inv3 = fLInt,
inv4 = fLInt,
inv5 = fLInt,
liq1 = fLReal,
liq2 = fLReal,
liq3 = fLReal,
liq4 = fLInt,
mim1 = fLReal,
mfl1 = fLReal,
mfl2 = fLReal,
mfl3 = fLReal,
mfl4 = fLReal,
mfl5 = fLReal,
mfl6 = fLInt,
tpi1 = fLInt,
tpi2 = fLInt,
spl1 = fLReal,
spl2 = fLInt,
irl1 = fLReal,
irl2 = fLReal,
irl3 = fLInt,
irl4 = fLInt,
irl5 = fLInt,
idc1 = fLReal,
idc2 = fLReal,
idc3 = fLInt,
imo1 = fLInt,
imo2 = fLReal,
imo3 = fLReal,
imou = fLInt,
ict1 = fLInt,
ict2 = fLInt,
isr1 = fLReal,
isr2 = fLReal,
ipv1 = fLReal,
ipv2 = fLReal,
ipv3 = fLInt,
mec1 = fLInt,
spb1 = ConvertAbilityStringLevelField,
spb2 = fLInt,
spb3 = fLInt,
spb4 = fLInt,
spb5 = ConvertAbilityStringLevelField,
ast1 = fLReal,
ast2 = fLReal,
gra1 = fLReal,
gra2 = fLReal,
gra3 = fLInt,
gra4 = fLInt,
gra5 = fLInt,
ipmu = fLInt,
Npr1 = fLInt,
Nsa1 = fLInt,
Nsa2 = fLReal,
Nsa3 = fLReal,
Nsa4 = fLReal,
Nsa5 = fLReal,
Iaa1 = fLInt,
Ixs1 = fLReal,
Ixs2 = fLReal,
Nef1 = unitList,
Npa5 = fLInt,
Npa6 = fLReal,
Igl1 = fLInt,
Iglu = fLInt,
Nse1 = fLReal,
Ndo1 = fLReal,
Ndo2 = fLInt,
Ndo3 = fLReal,
Ndo4 = fLInt,
Ndo5 = fLReal,
Ndou = fLInt,
flk1 = fLReal,
flk2 = fLReal,
flk3 = fLReal,
flk4 = fLReal,
flk5 = fLReal,
Hbn1 = fLReal,
Hbn2 = fLReal,
fbk1 = fLReal,
fbk2 = fLReal,
fbk3 = fLReal,
fbk4 = fLReal,
fbk5 = fLReal,
nca1 = fLReal,
pxf1 = fLReal,
pxf2 = fLReal,
mls1 = fLReal,
sla1 = fLInt,
Nst1 = fLInt,
Nst2 = fLReal,
Nst3 = fLReal,
Nst4 = fLReal,
Nst5 = fLReal,
sla2 = fLInt,
Ncl1 = fLReal,
Ncl2 = fLInt,
Ncl3 = fLInt,
Ncl4 = fLReal,
Ncl5 = fLInt,
Ncl6 = ConvertAbilityStringLevelField,
Nab1 = fLReal,
Nab2 = fLReal,
Nab3 = fLInt,
Nab4 = fLReal,
Nab5 = fLReal,
Nab6 = fLReal,
Nhs6 = fLInt,
Ntm1 = fLReal,
Ntm2 = fLReal,
Ntm3 = fLInt,
Ntm4 = fLInt,
Neg1 = fLReal,
Neg2 = fLReal,
Neg3 = ConvertAbilityStringLevelField,
Neg4 = ConvertAbilityStringLevelField,
Neg5 = ConvertAbilityStringLevelField,
Neg6 = ConvertAbilityStringLevelField,
Ncs1 = fLReal,
Ncs2 = fLReal,
Ncs3 = fLInt,
Ncs4 = fLReal,
Ncs5 = fLReal,
Ncs6 = fLReal,
Nsy1 = fLReal,
Nsy2 = fLInt,
Nsy3 = fLReal,
Nsy4 = fLReal,
Nsy5 = fLReal,
Nsyu = fLInt,
Nfy1 = fLReal,
Nfy2 = fLReal,
Nfyu = fLInt,
Nde1 = fLReal,
Nde2 = fLReal,
Nde3 = fLReal,
Nde4 = fLReal,
Nic1 = fLReal,
Nic2 = fLReal,
Nic3 = fLReal,
Nic4 = fLReal,
Nic5 = fLReal,
Nic6 = fLReal,
Nso1 = fLReal,
Nso2 = fLReal,
Nso3 = fLReal,
Nso4 = fLReal,
Nso5 = fLReal,
Nlm2 = fLReal,
Nlm3 = fLInt,
Nlm4 = fLReal,
Nlm5 = fLReal,
Nlm6 = fLInt,
Nvc1 = fLInt,
Nvc2 = fLInt,
Nvc3 = fLReal,
Nvc4 = fLReal,
Nvc5 = fLReal,
Nvc6 = fLReal,
Nvcu = fLInt,
Tau1 = fLInt,
Tau2 = fLInt,
Tau3 = fLInt,
Tau4 = fLInt,
Tau5 = fLReal,
Idg1 = fLInt,
Idg2 = fLInt,
Idg3 = targetList,
Uuf1 = fLInt,
Uuf2 = fLInt,
Uuf3 = targetList,
Hsb1 = fLReal,
Hsb2 = fLReal,
Hsb3 = defenseTypeInt,
Iofr = fLReal,
AIvu = fLInt,
Akb2 = fLInt,
ausk = unitSkinList,
Aat1 = fLInt,
}
end