; function main() ; { ; variable KnowledgeBook kb ; variable index:ability MyAbilities ; variable iterator MyAbilitiesIterator ; variable jsonvalue effects = [] ; variable jsonvalue abilityEffect = {} ; variable int idx = 1 ; variable int Counter = 1 ; variable int Timer = 0 ; variable jsonvalue currentAbility = {} ; Me:QueryAbilities[MyAbilities] ; MyAbilities:GetIterator[MyAbilitiesIterator] ; if ${MyAbilitiesIterator:First(exists)} ; { ; do ; { ; if (!${MyAbilitiesIterator.Value.IsAbilityInfoAvailable}) ; { ; do ; { ; wait 2 ; } ; while (!${MyAbilitiesIterator.Value.IsAbilityInfoAvailable} && ${Timer:Inc} < 1500) ; } ; wait 5 ; echo "Exporting (${Counter} / ${MyAbilities.Size}) - ${MyAbilitiesIterator.Value.ToAbilityInfo.Name} (ID: ${MyAbilitiesIterator.Value.ID})" ; currentAbility:SetValue["$$>{ ; "ID": "${MyAbilitiesIterator.Value.ID}", ; "Name": "${MyAbilitiesIterator.Value.ToAbilityInfo.Name}", ; "Description": ${MyAbilitiesIterator.Value.ToAbilityInfo.Description.AsJSON~}, ; "Level": "${MyAbilitiesIterator.Value.ToAbilityInfo.Class[${Me.SubClass}].Level}", ; "Tier": "${MyAbilitiesIterator.Value.ToAbilityInfo.Tier}", ; "HealthCost": "${MyAbilitiesIterator.Value.ToAbilityInfo.HealthCost}", ; "PowerCost": "${MyAbilitiesIterator.Value.ToAbilityInfo.PowerCost}", ; "DissonanceCost": "${MyAbilitiesIterator.Value.ToAbilityInfo.DissonanceCost}", ; "SavageryCost": "${MyAbilitiesIterator.Value.ToAbilityInfo.SavageryCost}", ; "ConcentrationCost": "${MyAbilitiesIterator.Value.ToAbilityInfo.ConcentrationCost}", ; "MainIconID": "${MyAbilitiesIterator.Value.ToAbilityInfo.MainIconID}", ; "HOIconID": "${MyAbilitiesIterator.Value.ToAbilityInfo.HOIconID}", ; "CastingTime": "${MyAbilitiesIterator.Value.ToAbilityInfo.CastingTime}", ; "RecoveryTime": "${MyAbilitiesIterator.Value.ToAbilityInfo.RecoveryTime}", ; "RecastTime": "${MyAbilitiesIterator.Value.ToAbilityInfo.RecastTime}", ; "MaxDuration": "${MyAbilitiesIterator.Value.ToAbilityInfo.MaxDuration}", ; "NumClasses": "${MyAbilitiesIterator.Value.ToAbilityInfo.NumClasses}", ; "NumEffects": "${MyAbilitiesIterator.Value.ToAbilityInfo.NumEffects}", ; "BackDropIconID": "${MyAbilitiesIterator.Value.ToAbilityInfo.BackDropIconID}", ; "HealthCostPerTick": "${MyAbilitiesIterator.Value.ToAbilityInfo.HealthCostPerTick}", ; "PowerCostPerTick": "${MyAbilitiesIterator.Value.ToAbilityInfo.PowerCostPerTick}", ; "DissonanceCostPerTick": "${MyAbilitiesIterator.Value.ToAbilityInfo.DissonanceCostPerTick}", ; "SavageryCostPerTick": "${MyAbilitiesIterator.Value.ToAbilityInfo.SavageryCostPerTick}", ; "MaxAOETargets": "${MyAbilitiesIterator.Value.ToAbilityInfo.MaxAOETargets}", ; "IsBeneficial": "${MyAbilitiesIterator.Value.ToAbilityInfo.IsBeneficial}", ; "DoesNotExpire": "${MyAbilitiesIterator.Value.ToAbilityInfo.DoesNotExpire}", ; "GroupRestricted": "${MyAbilitiesIterator.Value.ToAbilityInfo.GroupRestricted}", ; "AllowRaid": "${MyAbilitiesIterator.Value.ToAbilityInfo.AllowRaid}", ; "IsBeneficial": "${MyAbilitiesIterator.Value.ToAbilityInfo.IsBeneficial}", ; "EffectRadius": "${MyAbilitiesIterator.Value.ToAbilityInfo.EffectRadius}", ; "TargetType": "${MyAbilitiesIterator.Value.ToAbilityInfo.TargetType}", ; "SpellBookType": "${MyAbilitiesIterator.Value.ToAbilityInfo.SpellBookType}", ; "MinRange": "${MyAbilitiesIterator.Value.ToAbilityInfo.MinRange}", ; "MaxRange": "${MyAbilitiesIterator.Value.ToAbilityInfo.MaxRange}" ; }<$$"] ; for (idx:Set[1] ; ${idx} < ${MyAbilitiesIterator.Value.ToAbilityInfo.NumEffects} ; idx:Inc ) ; { ; abilityEffect:SetValue["$$>{ ; "PercentSuccess": ${MyAbilitiesIterator.Value.ToAbilityInfo.Effect[${idx}].PercentSuccess}, ; "Indentation": ${MyAbilitiesIterator.Value.ToAbilityInfo.Effect[${idx}].Indentation}, ; "Description": ${MyAbilitiesIterator.Value.ToAbilityInfo.Effect[${idx}].Description.AsJSON~} ; }<$$"] ; effects:Add["${abilityEffect.AsJSON~}"] ; abilityEffect:Clear ; } ; currentAbility:Set["Effects", "${effects.AsJSON~}"] ; effects:Clear ; kb:AddAbilityFromJSON[currentAbility] ; Counter:Inc ; Timer:Set[0] ; } ; while ${MyAbilitiesIterator:Next(exists)} ; } ; kb:WriteFile["${LavishScript.HomeDirectory}/Scripts/mr/bot/ability_exports/${Me.Name}_${Me.SubClass}.json"] ; }