/// <summary> /// Defines the <see cref="CustomFunctions"/> for the DynamoExpression interpreter. /// </summary> public static void PrepareCustomFunctions() { //date("2012-12-25") var dateFormats = new[] { "yyyy-MM-dd" }; Func <string, DateTime> date = (s) => XmlConvert.ToDateTime(s, dateFormats); CustomFunctions.Add("date", date); //date and time("2012-12- 24T23:59:00") var dateAndTimeFormats = new[] { "yyyy-MM-ddTHH:mm:sszzzzzz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mm" }; Func <string, DateTime> dateAndTime = (s) => XmlConvert.ToDateTime(s, dateAndTimeFormats); CustomFunctions.Add("date_and_time", dateAndTime); CustomFunctionTranslations.Add("date and time", "date_and_time"); //time("23:59:00") var timeFormats = new[] { "HH:mm:sszzzzzz", "HH:mm:ss", "HH:mm" }; Func <string, DateTime> time = (s) => XmlConvert.ToDateTime(s, timeFormats); CustomFunctions.Add("time", time); //duration("P3Y") Func <string, TimeSpan> duration = XmlConvert.ToTimeSpan; CustomFunctions.Add("duration", duration); }
/// <summary> /// Adds one of the properties to the relevant area. /// </summary> /// <param name="property"></param> /// <param name="operation"></param> public bool Add(object property, EImportAction operation) { try { switch (property) { case DexihHubVariable a: HubVariables.Add(a, operation); break; case DexihDatajob a: Datajobs.Add(a, operation); break; case DexihDatalink a: Datalinks.Add(a, operation); break; case DexihConnection a: Connections.Add(a, operation); break; case DexihTable a: Tables.Add(a, operation); break; case DexihColumnValidation a: ColumnValidations.Add(a, operation); break; case DexihCustomFunction a: CustomFunctions.Add(a, operation); break; case DexihFileFormat a: FileFormats.Add(a, operation); break; case DexihRemoteAgentHub a: RemoteAgentHubs.Add(a, operation); break; case DexihDatalinkTest a: DatalinkTests.Add(a, operation); break; case DexihView a: Views.Add(a, operation); break; case DexihApi a: Apis.Add(a, operation); break; case DexihDashboard a: Dashboards.Add(a, operation); break; case DexihListOfValues a: ListOfValues.Add(a, operation); break; case DexihTag a: Tags.Add(a, operation); break; case DexihTagObject a: TagObjects.Add(a, operation); break; default: return(false); } return(true); } catch (Exception ex) { throw new AggregateException($"Failed to add item. {ex.Message}", ex); } }
public override void Initialize() { //Aimsharp.DebugMode(); Aimsharp.PrintMessage("Vid Shadow - v 1.0", Color.Blue); Aimsharp.PrintMessage("These macros can be used for manual control:", Color.Blue); Aimsharp.PrintMessage("/xxxxx NoAOE", Color.Blue); Aimsharp.PrintMessage("--Toggles AOE mode on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx Potions", Color.Blue); Aimsharp.PrintMessage("--Toggles using buff potions on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveCooldowns", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of big cooldowns on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx CouncilDotsOff", Color.Blue); Aimsharp.PrintMessage("--Will keep SW:P and VT up on focus and Boss 1-4.", Color.Blue); Aimsharp.PrintMessage("/xxxxx StartCombat", Color.Blue); Aimsharp.PrintMessage("--Will initiate combat on by itself.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("--Replace xxxxx with first 5 letters of your addon, lowercase.", Color.Blue); Aimsharp.Latency = 50; Aimsharp.QuickDelay = 125; Aimsharp.SlowDelay = 250; MajorPower = GetDropDown("Major Power"); TopTrinket = GetDropDown("Top Trinket"); BotTrinket = GetDropDown("Bot Trinket"); FiveLetters = GetString("First 5 Letters of the Addon:"); AmountHP = GetSlider("Don't dot below HP Amount"); PercentHP = GetSlider("Don't dot below HP%"); Spellbook.Add(MajorPower); Spellbook.Add("Agony"); Spellbook.Add("Corruption"); Spellbook.Add("Seed of Corruption"); Spellbook.Add("Unstable Affliction"); Spellbook.Add("Summon Darkglare"); Spellbook.Add("Unending Resolve"); Spellbook.Add("Command Demon"); Spellbook.Add("Malefic Rapture"); Spellbook.Add("Siphon Life"); Spellbook.Add("Vile Taint"); Spellbook.Add("Phantom Singularity"); Spellbook.Add("Shadow Bolt"); Spellbook.Add("Drain Soul"); Spellbook.Add("Haunt"); Spellbook.Add("Dark Soul: Misery"); Spellbook.Add("Unending Resolve"); Items.Add("Healthstone"); Buffs.Add("Bloodlust"); Buffs.Add("Heroism"); Buffs.Add("Time Warp"); Buffs.Add("Ancient Hysteria"); Buffs.Add("Netherwinds"); Buffs.Add("Drums of Rage"); Buffs.Add("Lifeblood"); Buffs.Add("Void Miasma"); Debuffs.Add("Concentrated Flame"); Debuffs.Add("Corruption"); Debuffs.Add("Siphon Life"); Debuffs.Add("Agony"); Debuffs.Add("Unstable Affliction"); Debuffs.Add("Vile Taint"); Debuffs.Add("Phantom Singularity"); Debuffs.Add("Seed of Corruption"); Items.Add(TopTrinket); Items.Add(BotTrinket); Items.Add(GetDropDown("Potion Type")); Macros.Add(TopTrinket, "/use " + TopTrinket); Macros.Add(BotTrinket, "/use " + BotTrinket); Macros.Add("TopTrink", "/use 13"); Macros.Add("BotTrink", "/use 14"); Macros.Add("potion", "/use " + GetDropDown("Potion Type")); Macros.Add("Healthstone", "/use Healthstone"); Macros.Add("crash cursor", "/cast [@cursor] Shadow Crash"); Macros.Add("MassDispel", "/cast [@cursor] Mass Dispel"); Macros.Add("MassDispelOff", "/" + FiveLetters + " MassDispel"); Macros.Add("S2MOff", "/" + FiveLetters + " S2M"); Macros.Add("DispelOff", "/" + FiveLetters + " DispelMagic"); Macros.Add("DispersionOff", "/" + FiveLetters + " Dispersion"); Macros.Add("MindControlOff", "/" + FiveLetters + " MindControl"); Macros.Add("PsychicScreamOff", "/" + FiveLetters + " PsychicScream"); Macros.Add("PsychicHorrorOff", "/" + FiveLetters + " PsychicHorror"); Macros.Add("DispelMagicOff", "/" + FiveLetters + " DispelMagic"); Macros.Add("AgonyFocus", "/cast [@focus] Agony"); Macros.Add("AgonyBoss1", "/cast [@boss1] Agony"); Macros.Add("AgonyBoss2", "/cast [@boss2] Agony"); Macros.Add("AgonyBoss3", "/cast [@boss3] Agony"); Macros.Add("AgonyBoss4", "/cast [@boss4] Agony"); Macros.Add("CorruptionFocus", "/cast [@focus] Corruption"); Macros.Add("CorruptionBoss1", "/cast [@boss1] Corruption"); Macros.Add("CorruptionBoss2", "/cast [@boss2] Corruption"); Macros.Add("CorruptionBoss3", "/cast [@boss3] Corruption"); Macros.Add("CorruptionBoss4", "/cast [@boss4] Corruption"); Macros.Add("SLFocus", "/cast [@focus] Siphon Life"); Macros.Add("SLBoss1", "/cast [@boss1] Siphon Life"); Macros.Add("SLBoss2", "/cast [@boss2] Siphon Life"); Macros.Add("SLBoss3", "/cast [@boss3] Siphon Life"); Macros.Add("SLBoss4", "/cast [@boss4] Siphon Life"); CustomCommands.Add("NoAOE"); CustomCommands.Add("Prepull"); CustomCommands.Add("Potions"); CustomCommands.Add("SaveCooldowns"); CustomCommands.Add("MassDispel"); CustomCommands.Add("JustEssences"); CustomCommands.Add("CouncilDotsOff"); CustomCommands.Add("SavePS"); CustomCommands.Add("StartCombat"); CustomFunctions.Add("UACount", "local UACount = 0\nfor i=1,20 do\nlocal unit = \"nameplate\" .. i\nif UnitExists(unit) then\nif UnitCanAttack(\"player\", unit) then\nfor j = 1, 40 do\nlocal name,_,_,_,_,_,source = UnitDebuff(unit, j)\nif name == \"Unstable Affliction\" and source == \"player\" then\nUACount = UACount + 1\nend\nend\nend\nend\nend\nreturn UACount"); CustomFunctions.Add("CorruptionCount", "local CorruptionCount = 0\nfor i=1,20 do\nlocal unit = \"nameplate\" .. i\nif UnitExists(unit) then\nif UnitCanAttack(\"player\", unit) then\nfor j = 1, 40 do\nlocal name,_,_,_,_,_,source = UnitDebuff(unit, j)\nif name == \"Corruption\" and source == \"player\" then\nCorruptionCount = CorruptionCount + 1\nend\nend\nend\nend\nend\nreturn CorruptionCount"); CustomFunctions.Add("CorruptionTargets", "local CorruptionTargets = 0\nfor i=1,20 do\nlocal unit = \"nameplate\" .. i\nif UnitExists(unit) then\nif UnitCanAttack(\"player\", unit) and UnitHealthMax(unit) > 90000 and UnitHealth(unit) > 60000 then\nCorruptionTargets = CorruptionTargets + 1\nend\nend\nend\nreturn CorruptionTargets"); CustomFunctions.Add("SoCCount", "local SoCCount = 0\nfor i=1,20 do\nlocal unit = \"nameplate\" .. i\nif UnitExists(unit) then\nif UnitCanAttack(\"player\", unit) then\nfor j = 1, 40 do\nlocal name,_,_,_,_,_,source = UnitDebuff(unit, j)\nif name == \"Seed of Corruption\" and source == \"player\" then\nSoCCount = SoCCount + 1\nend\nend\nend\nend\nend\nreturn SoCCount"); CustomFunctions.Add("TargetID", "local TargetID = 0;" + "\nif UnitExists(\"target\") then" + "\nTargetID = tonumber(UnitGUID(\"target\"):match(\"-(%d+)-%x+$\"), 10);" + "\nend" + "\nreturn TargetID;" ); CustomFunctions.Add("Boss1ID", "local Boss1ID = 0;" + "\nif UnitExists(\"boss1\") and UnitCanAttack(\"player\", \"boss1\") then" + "\nBoss1ID = tonumber(UnitGUID(\"boss1\"):match(\"-(%d+)-%x+$\"), 10);" + "\nend" + "\nreturn Boss1ID;" ); CustomFunctions.Add("Boss2ID", "local Boss2ID = 0;" + "\nif UnitExists(\"boss2\") and UnitCanAttack(\"player\", \"boss2\") then" + "\nBoss2ID = tonumber(UnitGUID(\"boss2\"):match(\"-(%d+)-%x+$\"), 10);" + "\nend" + "\nreturn Boss2ID;" ); CustomFunctions.Add("Boss3ID", "local Boss3ID = 0;" + "\nif UnitExists(\"boss3\") and UnitCanAttack(\"player\", \"boss3\") then" + "\nBoss3ID = tonumber(UnitGUID(\"boss3\"):match(\"-(%d+)-%x+$\"), 10);" + "\nend" + "\nreturn Boss3ID;" ); CustomFunctions.Add("Boss4ID", "local Boss4ID = 0;" + "\nif UnitExists(\"boss4\") and UnitCanAttack(\"player\", \"boss4\") then" + "\nBoss4ID = tonumber(UnitGUID(\"boss4\"):match(\"-(%d+)-%x+$\"), 10);" + "\nend" + "\nreturn Boss4ID;" ); }
public override void Initialize() { Aimsharp.PrintMessage("Kyber Vengenace DH Shadowlands - v 2.3", Color.Blue); Aimsharp.PrintMessage("Recommended talents: 1233221", Color.Blue); Aimsharp.PrintMessage("These macros can be used for manual control:", Color.Blue); Aimsharp.PrintMessage("/xxxxx SaveMeta", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Metamorphosis on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveCovenant", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Covenant abilities on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx AOE", Color.Blue); Aimsharp.PrintMessage("--Toggles AOE mode on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx Autodisrupt", Color.Blue); Aimsharp.PrintMessage("--Toggles Auto interrupt mode on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx Autoinfernal", Color.Blue); Aimsharp.PrintMessage("--Toggles Auto infernal Strike mode on/off.", Color.Blue); Aimsharp.PrintMessage("will use 1 charge for added dps and save 1 charge for movement.", Color.Purple); Aimsharp.PrintMessage("--Replace xxxxx with first 5 letters of your addon, lowercase.", Color.Blue); Aimsharp.Latency = 50; Aimsharp.QuickDelay = 125; Aimsharp.SlowDelay = 250; //Main Skills foreach (string skill in VengeanceSpells) { Spellbook.Add(skill); } //Covenant foreach (string Spell in CovenantAbilities) { Spellbook.Add(Spell); } //Buffs foreach (string buff in VengeanceBuffs) { Buffs.Add(buff); } //Debuffs foreach (string debuff in VengeanceDebuffs) { Debuffs.Add(debuff); } foreach (string Buff in BloodlustEffects) { Buffs.Add(Buff); } Items.Add(GetDropDown("Potion name:")); Macros.Add("DPS Pot", "/use " + GetDropDown("Potion name:")); Macros.Add("TopTrinket", "/use 13"); Macros.Add("BottomTrinket", "/use 14"); Macros.Add("sigil self", "/cast [@player] Sigil of Flame"); Macros.Add("infernal self", "/cast [@player] Infernal Strike"); Macros.Add("Elysian self", "/cast [@player] Elysian Decree"); CustomCommands.Add("SaveMeta"); CustomCommands.Add("AOE"); CustomCommands.Add("Autoinfernal"); CustomCommands.Add("Autodisrupt"); CustomCommands.Add("SaveCovenant"); CustomFunctions.Add("GetCovenant", "local spell = 0 local i = 1 while true do local spellName, spellSub = GetSpellBookItemName(i, BOOKTYPE_SPELL) if not spellName then do break end end if spellName == 'Fodder to the Flame' then spell = 4 elseif spellName == 'The Hunt' then spell = 3 elseif spellName == 'Sinful Brand' then spell = 2 elseif spellName == 'Elysian Decree' then spell = 1 end i = i + 1 end return spell"); CustomFunctions.Add("GetLegendarySpellID", "local power = 0 for i=1,15,1 do local xcs = ItemLocation:CreateFromEquipmentSlot(i) if(C_Item.DoesItemExist(xcs)) then if(C_LegendaryCrafting.IsRuneforgeLegendary(xcs)) then local id = C_LegendaryCrafting.GetRuneforgeLegendaryComponentInfo(xcs)[\"powerID\"] power = C_LegendaryCrafting.GetRuneforgePowerInfo(id)[\"descriptionSpellID\"] end end end return power"); }
public override void Initialize() { Aimsharp.PrintMessage("Kyber Vengenace DH V3.1", Color.Blue); Aimsharp.PrintMessage("These macros can be used for manual control:", Color.Blue); Aimsharp.PrintMessage("/xxxxx SaveCovenant", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Covenant abilities on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx AOE", Color.Blue); Aimsharp.PrintMessage("--Toggles AOE mode on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveMeta", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Metamorphosis on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveInfernal", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Infernal Strike on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveFiery", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Fiery Brand on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveFelDev", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of Fel Devastation on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx Shriekwing", Color.Blue); Aimsharp.PrintMessage("--Toggles Shriekwing Tanking on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("--Replace xxxxx with first 5 letters of your addon, lowercase.", Color.Blue); Aimsharp.Latency = 40; Aimsharp.QuickDelay = 100; Aimsharp.SlowDelay = 225; //Main Skills foreach (string skill in VengeanceSpells) { Spellbook.Add(skill); } //Covenant foreach (string Spell in CovenantAbilities) { Spellbook.Add(Spell); } //Buffs foreach (string buff in VengeanceBuffs) { Buffs.Add(buff); } //Debuffs foreach (string debuff in VengeanceDebuffs) { Debuffs.Add(debuff); } foreach (string Buff in BloodlustEffects) { Buffs.Add(Buff); } addonName = GetString("First 5 Letter of your Addon:"); Items.Add(GetString("Potion name:")); Macros.Add("TopTrinket", "/use 13"); Macros.Add("BottomTrinket", "/use 14"); Macros.Add("DPS Pot", "/use " + GetString("Potion name:")); Macros.Add("sigil self", "/cast [@player] Sigil of Flame"); Macros.Add("Elysian self", "/cast [@player] Elysian Decree"); Macros.Add("sigilC", "/cast [@cursor] Sigil of Flame"); Macros.Add("ElysianC", "/cast [@cursor] Elysian Decree"); Macros.Add("infernal self","/cast [@player] Infernal Strike"); Macros.Add("ElysianDisable", "/" + addonName + " UseElysian"); Macros.Add("FieryDisable", "/" + addonName + " UseFiery"); Macros.Add("FelDevDisable", "/" + addonName + " UseFelDev"); Macros.Add("SigilMDisable", "/" + addonName + " UseMisery"); Macros.Add("SigilSDisable", "/" + addonName + " UseSilence"); Macros.Add("SigilCDisable", "/" + addonName + " UseChains"); Macros.Add("SigilMC", "/cast [@cursor] Sigil of Misery"); Macros.Add("SigilMSelf", "/cast [@player] Sigil of Misery"); Macros.Add("SigilSC", "/cast [@cursor] Sigil of Silence"); Macros.Add("SigilSSelf", "/cast [@player] Sigil of Silence"); Macros.Add("SigilCC", "/cast [@cursor] Sigil of Chains"); Macros.Add("SigilCSelf", "/cast [@player] Sigil of Chains"); Macros.Add("BoP Killer", "/cancelaura Blessing of Protection"); CustomCommands.Add("AOE"); CustomCommands.Add("SaveCovenant"); CustomCommands.Add("SaveFiery"); CustomCommands.Add("SaveFelDev"); CustomCommands.Add("UseFiery"); CustomCommands.Add("UseMisery"); CustomCommands.Add("UseSilence"); CustomCommands.Add("UseChains"); CustomCommands.Add("UseElysian"); CustomCommands.Add("UseFelDev"); CustomCommands.Add("SaveMeta"); CustomCommands.Add("SaveInfernal"); CustomCommands.Add("Shriekwing"); CustomFunctions.Add("ThreatStatus", "if (UnitDetailedThreatSituation(\"player\", \"target\"))\nthen\nreturn 1;\nend\nreturn 0;"); CustomFunctions.Add("GetLegendarySpellID", "local power = 0 for i=1,15,1 do local xcs = ItemLocation:CreateFromEquipmentSlot(i) if(C_Item.DoesItemExist(xcs)) then if(C_LegendaryCrafting.IsRuneforgeLegendary(xcs)) then local id = C_LegendaryCrafting.GetRuneforgeLegendaryComponentInfo(xcs)[\"powerID\"] power = C_LegendaryCrafting.GetRuneforgePowerInfo(id)[\"descriptionSpellID\"] end end end return power"); }
public override void Initialize() { Aimsharp.PrintMessage("Kyber Destruction Warlock - v 1.0", Color.Blue); Aimsharp.PrintMessage("These macros can be used for manual control:", Color.Blue); Aimsharp.PrintMessage("Recommended talents: 3203012", Color.Blue); Aimsharp.PrintMessage("/xxxxx SaveCovenant", Color.Blue); Aimsharp.PrintMessage("--Toggles using Covenant abilities on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx SaveCooldowns", Color.Blue); Aimsharp.PrintMessage("--Toggles the use of big cooldowns on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("/xxxxx AOE", Color.Blue); Aimsharp.PrintMessage("--Toggles AOE mode on/off.", Color.Blue); Aimsharp.PrintMessage(" "); Aimsharp.PrintMessage("--Replace xxxxx with first 5 letters of your addon, lowercase.", Color.Blue); Aimsharp.PrintMessage("This rotation will use Havoc on your focus target, so please make a macro to set focus quickly.", Color.Blue); Aimsharp.PrintMessage("/focus [@mouseover,nodead,exists]; [@target,exists]", Color.Blue); Aimsharp.Latency = 50; Aimsharp.QuickDelay = 125; Aimsharp.SlowDelay = 250; foreach (string Spell in SpellsList) { Spellbook.Add(Spell); } foreach (string Spell in CovenantAbilities) { Spellbook.Add(Spell); } foreach (string Spell in Racials) { Spellbook.Add(Spell); } foreach (string Buff in GeneralBuffs) { Buffs.Add(Buff); } foreach (string Buff in BuffsList) { Buffs.Add(Buff); } foreach (string Buff in BloodlustEffects) { Buffs.Add(Buff); } foreach (string Debuff in DebuffsList) { Debuffs.Add(Debuff); } foreach (string Debuff in GeneralDebuffs) { Debuffs.Add(Debuff); } foreach (string Totem in TotemsList) { Totems.Add(Totem); } Items.Add(GetString("Potion name:")); Macros.Add("DPS Pot", "/use " + GetString("Potion name:")); Macros.Add("havoc focus", "/cast [@focus] Havoc"); Macros.Add("cata cursor", "/cast [@cursor] Cataclysm"); Macros.Add("rof cursor", "/cast [@cursor] Rain of Fire"); Macros.Add("inf cursor", "/cast [@cursor] Summon Infernal"); Macros.Add("TopTrink", "/use 13"); Macros.Add("BotTrink", "/use 14"); foreach (string MacroCommand in MacroCommands) { CustomCommands.Add(MacroCommand); } CustomFunctions.Add("GetCovenant", "local spell = 0 local i = 1 while true do local spellName, spellSub = GetSpellBookItemName(i, BOOKTYPE_SPELL) if not spellName then do break end end if spellName == 'Decimating Bolt' then spell = 4 elseif spellName == 'Soul Rot' then spell = 3 elseif spellName == 'Impending Catastrophe' then spell = 2 elseif spellName == 'Scouring Tithe' then spell = 1 end i = i + 1 end return spell"); CustomFunctions.Add("GetLegendarySpellID", "local power = 0 for i=1,15,1 do local xcs = ItemLocation:CreateFromEquipmentSlot(i) if(C_Item.DoesItemExist(xcs)) then if(C_LegendaryCrafting.IsRuneforgeLegendary(xcs)) then local id = C_LegendaryCrafting.GetRuneforgeLegendaryComponentInfo(xcs)[\"powerID\"] power = C_LegendaryCrafting.GetRuneforgePowerInfo(id)[\"descriptionSpellID\"] end end end return power"); }