Initial checkin

This commit is contained in:
Malcolm Roberts 2023-12-08 15:07:11 -06:00
parent 5409d97e81
commit cc3fc1da09
31 changed files with 24759 additions and 0 deletions

158
bot/MRBotSettings.iss Normal file
View File

@ -0,0 +1,158 @@
objectdef CastStackAbility
{
variable string Name
variable string AbilityTarget
variable string AbilityType
variable int Percentage
variable string Tag
method Initialize(jsonvalueref jo)
{
This:FromJSON[jo]
}
method FromJSON(jsonvalueref jo)
{
Name:Set["${jo.Get[Name]~}"]
AbilityTarget:Set["${jo.Get[AbilityTarget]~}"]
AbilityType:Set["${jo.Get[AbilityType]~}"]
Percentage:Set[${jo.Get[Percentage]~}]
; Tag:Set["${jo.Get[Tag]~}"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:SetString[Name, "${Name~}"]
jo:SetString[AbilityTarget, "${AbilityTarget~}"]
jo:SetString[AbilityType, "${AbilityType~}"]
jo:SetString[Percentage, ${Percentage~}]
jo:SetString[Tag, "${Tag~}"]
return jo
}
}
objectdef CastStackContainer
{
variable index:CastStackAbility Abilities
method AddAbilityFromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[object]}
{
return FALSE
}
Abilities:Insert[jo]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="[]"
variable iterator abilityIterator
Abilities:GetIterator[abilityIterator]
if ${abilityIterator:First(exists)}
{
do
{
jo:Add["${abilityIterator.Value.AsJSON~}"]
}
while ${abilityIterator:Next(exists)}
}
return jo
}
}
objectdef Profile
{
variable string Name
variable jsonvalue Settings = "{}"
variable jsonvalue Setup
variable jsonvalue Aliases
variable CastStackContainer CastStack
method Initialize(jsonvalueref jo)
{
This:FromJSON[jo]
}
member:bool GetSettingValue(string key)
{
echo "Profile.GetSettingValue[${key}]"
return ${This.Settings.Get["${key}"]}
}
method FromJSON(jsonvalueref jo)
{
Name:Set["${jo.Get["Name"]~}"]
Settings:SetValue["${jo.Get["Settings"]~}"]
Setup:SetValue["${jo.Get["Setup"]~}"]
Aliases:SetValue["${jo.Get["Aliases"]~}"]
jo.Get["CastStack"]:ForEach["CastStack:AddAbilityFromJSON[ForEach.Value]"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:Set["Name", "${This.Name.AsJSON~}"]
jo:Set["Settings", "${Settings.AsJSON~}"]
jo:Set["Setup", "${Setup.AsJSON~}"]
jo:Set["Aliases", "${Aliases.AsJSON~}"]
jo:Set["CastStack", "${CastStack.AsJSON~}"]
return jo
}
}
objectdef BotSettings
{
variable string DefaultProfile
variable collection:Profile Profiles
method FromFile(string filename)
{
variable jsonvalue settingsJson
variable BotSettings settings
settingsJson:ParseFile["${filename}"]
This:FromJSON[settingsJson]
}
member:bool IsSettingChecked(string key)
{
echo "BotSettings.IsSettingChecked[${key}]"
return ${This.CurrentProfile.GetSettingValue["${key}"].Equal[TRUE]}
}
method FromJSON(jsonvalueref jo)
{
DefaultProfile:Set[${jo.Get["DefaultProfile"]}]
variable jsoniterator profileIterator
jo.Get["Profiles"]:GetIterator[profileIterator]
if ${profileIterator:First(exists)}
{
do
{
Profiles:Set[${profileIterator.Key}, profileIterator.Value]
}
while ${profileIterator:Next(exists)}
}
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:Set[DefaultProfile, "${DefaultProfile.AsJSON~}"]
jo:Set[Profiles, "${Profiles.AsJSON~}"]
return jo
}
member:weakref CurrentProfile()
{
return Profiles.Element["${This.DefaultProfile}"]
}
}

File diff suppressed because it is too large Load Diff

178
bot/bot.iss Normal file
View File

@ -0,0 +1,178 @@
; objectdef CombatHelper
; {
; variable collection:CastStackAbility CastStack
; variable queue:CastStackAbility PrirortyAbilityQueue
; method Initialize(jsonvalueref jsonCastStackConfig)
; {
; CastStack:FromJSON[jsonCastStackConfig]
; }
; member:CastStackAbility CastNextAbility()
; {
; if ${PriorityAbilityQueue.Peek(exists)}
; {
; }
; }
; }
objectdef BotController
{
variable bool IsBotRunning = FALSE
variable bool IsShowingSettings = FALSE
member:string StartButtonText()
{
if ${IsBotRunning}
{
return "Stop"
}
else
{
return "Start"
}
}
member:string SettingsButtonText()
{
if ${IsShowingSettings}
{
return "Hide Settings"
}
else
{
return "Show Settings"
}
}
; member:string GetSettingsCheckBoxes()
; {
; variable jsonvalue checkboxes = "[]"
; variable jsoniterator settingKeysIterator
; setttingKeys:GetIterator[settingsKeyIterator]
; if ${settingKeysIterator:First(exists)}
; {
; echo "items"
; do
; {
; echo "looping"
; checkboxes:Add[$$>
; {
; "type": "checkbox",
; "name": "${settingKeysIterator.Value.key}",
; "content": "${settingKeysIterator.display_name}"
; }
; <$$]
; }
; while ${settingKeysIterator:Next(exists)}
; }
; echo "here ${checkboxes.AsJSON~}"
; return ${checkboxes.AsJSON~}
; }
method Initialize()
{
LGUI2:LoadPackageFile["bot.json"]
}
method Shutdown()
{
LGUI2:UnloadPackageFile["bot.json"]
}
method OnClose()
{
Script:End
}
method OnCloseSettings()
{
IsShowingSettings:Set[FALSE]
LGUI2.Element[mr.bot.settings]:SetVisibility[Hidden]
}
method ToggleBot()
{
IsBotRunning:Set[${IsBotRunning.Not}]
}
method ToggleSettings()
{
if ${IsShowingSettings}
{
LGUI2.Element[mr.bot.settings]:SetVisibility[Hidden]
}
else
{
LGUI2.Element["mr.bot.settings"]:SetVisibility[Visible]
}
IsShowingSettings:Set[${IsShowingSettings.Not}]
}
method Pulse()
{
; if ${IsBotRunning.Not}
; {
; return
; }
; echo "Test: ${settings.IsSettingChecked["test"]}"
; if ${Me.InCombat}
; {
; variable jsoniterator CastStackIterator
; settings.CastStack:GetIterator[CastStackIterator]
; if ${CastStackIterator:First(exists)}
; {
; do
; {
; if ${CastStackIterator.Value.Get["AbilityType"].Equal["Heal"]} && ${Me.Health} < ${CastStackIterator.Value.Get["Percentage"]}
; {
; echo "Casting Heal ${CastStackIterator.Value.Name}"
; return
; }
; elseif ${CastStackIterator.Value.Get["AbilityType"].Equal["Combat"]} && !${AbilityUsed.Element[${CastStackIterator.Value.Get["Name"]}]}
; {
; AbilityUsed:Set[${CastStackIterator.Value.Get["Name"]}, TRUE]
; echo "using Combat ${CastStackIterator.Value.Get["Name"]}"
; return
; }
; elseif ${CastStackIterator.Value.Get["AbilityType"].Equal["CA"]} && !${AbilityUsed.Element[${CastStackIterator.Value.Get["Name"]}]}
; {
; AbilityUsed:Set[${CastStackIterator.Value.Get["Name"]}, TRUE]
; echo "using CA ${CastStackIterator.Value.Get["Name"]}"
; return
; }
; else
; {
; }
; }
; while ${CastStackIterator:Next(exists)}
; }
; }
}
}
#include "settings_controller.iss"
variable(global) BotController MRBotController
variable(global) SettingsController MRSettingsController
function main()
{
while 1
{
MRBotController:Pulse
wait 5
}
}

141
bot/bot.json Normal file
View File

@ -0,0 +1,141 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"includes": ["cast_stack.json"],
"skin": {
"name": "MRSkin",
"brushes": {
"window.titleBar.backgroundBrush": {
"color": "#211C18"
}
},
"templates": {
"window.title": {
"verticalAlignment": "center",
"margin": [2, 0, 0, 0]
},
"button": {
"jsonTemplate": "default:button",
"margin": [2, 2, 2, 2],
"color": "#f4f3ee"
},
"checkbox": {
"jsonTemplate": "default:checkbox",
"margin": [2, 2, 2, 2]
},
"window": {
"jsonTemplate": "default:window",
"backgroundBrush": {
"color": "#463f3a"
},
"color": "#f4f3ee",
"font": {
"face": "Segoe UI",
"height": 16
}
},
"listbox.contentContainerFitWidth": {
"jsonTemplate": "listbox.contentContainer",
"horizontalScroll": "fit"
}
}
},
"elements": [
{
"type": "window",
"skin": "MRSkin",
"title": "MR Bot",
"name": "mr.bot.miniwindow",
"borderThickness": 2,
"hideOnClose": false,
"minSize": {
"width": 100,
"height": 50
},
"maxSize": {
"width": 150,
"height": 125
},
"eventHandlers": {
"onCloseButtonClick": ["method", "MRBotController", "OnClose"]
},
"content": {
"type": "stackpanel",
"uniform": true,
"heightFactor": 1,
"children": [
{
"type": "button",
"content": "${MRBotController.StartButtonText}",
"horizontalAlignment": "stretch",
"eventHandlers": {
"onRelease": ["method", "MRBotController", "ToggleBot"]
}
},
{
"type": "button",
"content": "${MRBotController.SettingsButtonText}",
"horizontalAlignment": "stretch",
"eventHandlers": {
"onRelease": ["method", "MRBotController", "ToggleSettings"]
}
}
]
}
},
{
"type": "window",
"skin": "MRSkin",
"title": "MR Bot Settings",
"name": "mr.bot.settings",
"borderThickness": 2,
"hideOnClose": true,
"visibility": "hidden",
"minSize": {
"width": 450,
"height": 200
},
"maxSize": {
"height": 600,
"width": 800
},
"eventHandlers": {
"onCloseButtonClick": ["method", "MRBotController", "OnCloseSettings"]
},
"content": {
"type": "tabcontrol",
"heightFactor": 1,
"horizontalAlignment": "stretch",
"verticalAlignment": "stretch",
"tabs": [
{
"type": "tab",
"header": "Cast Stack",
"name": "mr.bot.settings.castStack",
"content": {
"jsonTemplate": "settings.castStack",
"type": "stackpanel"
}
},
{
"type": "tab",
"header": "General",
"content": {
"type": "dockpanel",
"_dock": "top",
"padding": 2,
"horizontalAlignment": "stretch",
"children": [
{
"type": "textblock",
"text": "General Settings",
"horizontalAlignment": "center",
"verticalAlignment": "center"
}
]
}
}
]
}
}
]
}

595
bot/cast_stack.json Normal file
View File

@ -0,0 +1,595 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"skin": "MRSkin",
"templates": {
"settings.abilityListEntry": {
"jsonTemplate": "listboxitem",
"padding": 2,
"content": {
"type": "stackpanel",
"orientation": "vertical",
"-contentContainer": {
"jsonTemplate": "listbox.contentContainerFitWidth"
},
"children": [
{
"type": "textblock",
"horizontalAlignment": "stretch",
"textBinding": {
"pullFormat": "${_CONTEXTITEMDATA_.Get[Name]}"
}
}
]
}
},
"settings.castStack": {
"orientation": "vertical",
"children": [
{
"type": "panel",
"visibility": "hidden",
"name": "MRSettingsController.events"
},
{
"type": "stackpanel",
"orientation": "horizontal",
"heightFactor": 0.9,
"widthFactor": 1,
"horizontalAlignment": "left",
"children": [
{
"type": "stackpanel",
"orientation": "vertical",
"widthFactor": 0.3,
"margin": [0, 0, 5, 0],
"children": [
{
"type": "textblock",
"text": "Ability List",
"widthFactor": 1,
"horizontalAlignment": "left"
},
{
"type": "listbox",
"name": "abilityList",
"heightFactor": 0.9,
"itemsBinding": {
"pullFormat": "${MRSettingsController.abilityListItems}",
"pullOnce": true
},
"itemViewGenerators": {
"default": {
"type": "template",
"template": "settings.abilityListEntry"
}
},
"selectedItemBinding": {
"pullFormat": "${MRSettingsController.currentSelectedAvailableAbilityIndex}",
"pushFormat": [
"MRSettingsController:SetCurrentAbility[\"",
"\"]"
]
},
"-contentContainer": {
"jsonTemplate": "listbox.contentContainerFitWidth"
}
},
{
"type": "button",
"name": "castStack.addAbility",
"content": "Add Ability",
"horizontalAlignment": "stretch",
"eventHandlers": {
"onRelease": [
"method",
"MRSettingsController",
"AddAbility"
]
}
}
]
},
{
"type": "stackpanel",
"orientation": "vertical",
"widthFactor": 0.3,
"heightFactor": 1,
"verticalAlignment": "top",
"margin": [0, 0, 5, 0],
"padding": [0, 16, 0, 0],
"children": [
{
"type": "stackpanel",
"orientation": "horizontal",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "Type",
"width": 60
},
{
"type": "combobox",
"name": "castStack.ability.type",
"horizontalAlignment": "stretch",
"items": [
"Combat",
"CA",
"NamedCA",
"Heal",
"PowerHeal",
"Debuff",
"NamedDebuff",
"NonCombatBuff",
"Cure",
"Buff"
],
"selectedItemBinding": {
"pullFormat": "${MRSettingsController.newCastStackItem.Get[type]}",
"autoPull": false,
"pullHook": {
"elementName": "MRSettingsController.events",
"flags": "global",
"event": "onNewCastStackItemChanged"
}
},
"eventHandlers": {
"onSelectionChanged": {
"type": "method",
"object": "MRSettingsController",
"method": "OnCastStackAbilityComboChange"
}
}
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "Target",
"width": 60
},
{
"type": "combobox",
"name": "castStack.ability.target",
"horizontalAlignment": "stretch",
"itemsBinding": {
"pullFormat": "${MRSettingsController.GetTargetOptions}",
"pullOnce": true
},
"selectedItemBinding": {
"pullFormat": "${MRSettingsController.newCastStackItem.Get[target]}",
"autoPull": false,
"pullHook": {
"elementName": "MRSettingsController.events",
"flags": "global",
"event": "onNewCastStackItemChanged"
}
},
"eventHandlers": {
"onSelectionChanged": {
"type": "method",
"object": "MRSettingsController",
"method": "OnCastStackAbilityComboChange"
}
}
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "# targets",
"width": 60
},
{
"type": "textbox",
"name": "castStack.targetCount",
"horizontalAlignment": "stretch",
"textBinding": {
"pullFormat": "${MRSettingsController.SafeGetNewCastStackItemProperty[targetCount]}",
"autoPull": false,
"pullHook": {
"elementName": "MRSettingsController.events",
"flags": "global",
"event": "onNewCastStackItemChanged"
},
"pushFormat": [
"MRSettingsController:SafeSetNewCastStackItemProperty[\"targetCount\",\"",
"\"]"
],
"autoPush": false
},
"hooks": {
"onLostFocus": {
"flags": "self",
"event": "lostKeyboardFocus",
"eventHandler": {
"type": "forward",
"event": "pushTextBinding",
"flags": "self"
}
},
"onLostMouseFocus": {
"flags": "self",
"event": "lostMouseFocus",
"eventHandler": {
"type": "forward",
"event": "pushTextBinding",
"flags": "self"
}
}
}
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"children": [
{
"type": "textblock",
"text": "HP/MP %",
"width": 60
},
{
"type": "textbox",
"name": "castStack.percent",
"horizontalAlignment": "stretch",
"textBinding": {
"pullFormat": "${MRSettingsController.SafeGetNewCastStackItemProperty[percent]}",
"autoPull": false,
"pullHook": {
"elementName": "MRSettingsController.events",
"flags": "global",
"event": "onNewCastStackItemChanged"
},
"pushFormat": [
"MRSettingsController:SafeSetNewCastStackItemProperty[\"percent\",\"",
"\"]"
],
"autoPush": false
},
"hooks": {
"onLostFocus": {
"flags": "self",
"event": "lostKeyboardFocus",
"eventHandler": {
"type": "forward",
"event": "pushTextBinding",
"flags": "self"
}
},
"onLostMouseFocus": {
"flags": "self",
"event": "lostMouseFocus",
"eventHandler": {
"type": "forward",
"event": "pushTextBinding",
"flags": "self"
}
}
}
}
]
},
{
"type": "checkbox",
"name": "castStack.ignoreDuration",
"content": "Ignore Duration",
"horizontalAlignment": "stretch",
"margin": [2, 10, 0, 0]
},
{
"type": "checkbox",
"name": "castStack.ignoreEncounterNukes",
"content": "Ignore Encounter Nukes",
"horizontalAlignment": "stretch"
},
{
"type": "checkbox",
"name": "castStack.ignoreAENukes",
"content": "Ignore AE Nukes",
"horizontalAlignment": "stretch"
},
{
"type": "checkbox",
"name": "castStack.maxIncrements",
"content": "Max Increments",
"horizontalAlignment": "stretch"
},
{
"type": "checkbox",
"name": "castStack.namedOnly",
"content": "Named Only",
"horizontalAlignment": "stretch"
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 10, 0, 5],
"children": [
{
"type": "textblock",
"text": "Fervor",
"width": 70
},
{
"type": "textbox",
"name": "castStack.fervorRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.fervorRangeMax",
"width": 30
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "Dissonance",
"width": 70
},
{
"type": "textbox",
"name": "castStack.dissonanceRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.dissonanceRangeMax",
"width": 30
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "My HP",
"width": 70
},
{
"type": "textbox",
"name": "castStack.myHpRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.myHpRangeMax",
"width": 30
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "My Power",
"width": 70
},
{
"type": "textbox",
"name": "castStack.myPowerRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.myPowerRangeMax",
"width": 30
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "NPC HP",
"width": 70
},
{
"type": "textbox",
"name": "castStack.npcHpRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.npcHpRangeMax",
"width": 30
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"horizontalAlignment": "stretch",
"margin": [0, 0, 0, 5],
"children": [
{
"type": "textblock",
"text": "Aggro",
"width": 70
},
{
"type": "textbox",
"name": "castStack.aggroRangeMin",
"width": 30
},
{
"type": "textblock",
"text": "-",
"font": {
"bold": true,
"height": 24
},
"margin": [5, 0, 0, 0],
"width": 10
},
{
"type": "textbox",
"name": "castStack.aggroRangeMax",
"width": 30
}
]
}
]
},
{
"type": "stackpanel",
"orientation": "vertical",
"widthFactor": 1,
"heightFactor": 1,
"children": [
{
"type": "textblock",
"text": "Cast Order",
"widthFactor": 1,
"horizontalAlignment": "left"
},
{
"type": "listbox",
"name": "castStack.castOrder",
"horizontalAlignment": "stretch",
"heightFactor": 0.9,
"itemsBinding": {
"pullFormat": "${MRSettingsController.CastOrder}"
}
},
{
"type": "button",
"name": "castStack.castOrder.edit",
"content": "Edit Entry",
"horizontalAlignment": "stretch",
"eventHandlers": {
"onRelease": ["method", "MRSettingsController", "EditEntry"]
}
}
]
}
]
},
{
"type": "stackpanel",
"orientation": "horizontal",
"verticalAlignment": "stretch",
"horizontalAlignment": "stretch",
"children": [
{
"type": "stackpanel",
"orientation": "vertical",
"verticalAlignment": "stretch",
"horizontalAlignment": "left",
"children": [
{
"type": "button",
"name": "castStack.loadProfile",
"content": "Load Profile",
"horizontalAlignment": "left"
},
{
"type": "combobox",
"name": "castStack.profileList",
"horizontalAlignment": "left",
"itemsBinding": {
"pullFormat": "${MRSettingsController.ProfileList}",
"autoPull": true,
"pullHook": {
"elementName": "MRSettingsController.events",
"flags": "global",
"event": "onProfileListChanged"
}
}
}
]
}
]
}
]
}
}
}

278
bot/export_abilities.iss Normal file
View File

@ -0,0 +1,278 @@
#include "${LavishScript.HomeDirectory}/Scripts/mr/common/StringHelpers.iss"
variable jsonvalue stealthRequiredEffects = "[ \"I need to be stealthed!\", \"You must be in stealth to use this!\", \"You must be sneaking to use this ability.\"]"
variable jsonvalue flankingRequiredEffects = "[ \"Must be flanking or behind\" ]"
variable jsonvalue noEpicEffects = "[ \"Does not affect Epic targets\"]"
variable jsonvalue interruptEffects = "[ \"Interrupts target\" ]"
variable jsonvalue stunEffects = "[ \"Stuns target\" ]"
function:bool matchesItemInArray(jsonvalueref arr, string val)
{
if !${arr.Type.Equal[array]}
{
echo "effects is not an array ${arr.Type}"
return FALSE
}
variable jsoniterator iter
arr:GetIterator[iter]
if ${iter:First(exists)}
{
do
{
if ${val.Equal["${iter.Value}"]}
{
return TRUE
}
}
while ${iter:Next(exists)}
}
return FALSE
}
function:bool hasMatchingEffect(jsonvalueref effects, jsonvalueref specialEffects)
{
if !${effects.Type.Equal[array]}
{
echo "effects is not an array ${effects.Type}"
return FALSE
}
variable jsoniterator effectIterator
effects:GetIterator[effectIterator]
if ${effectIterator:First(exists)}
{
do
{
call matchesItemInArray specialEffects "${effectIterator.Value.Get["description"]}"
if ${Return}
{
return TRUE
}
}
while ${effectIterator:Next(exists)}
}
return FALSE
}
function:jsonvalueref extractDamageFromEffect(jsonvalueref effectJo)
{
variable string description
description:Set["${effectJo.Get["description"]}"]
if ${description.Left[8].NotEqual["Inflicts"]}
{
return "{}"
}
variable int64 minDamage
variable int64 maxDamage
variable string damageType
minDamage:Set["${description.Token[2, " "].Replace[",", ""]}"]
if ${description.Token[3, " "].Equal["-"]}
{
maxDamage:Set["${description.Token[4, " "].Replace[",", ""]}"]
damageType:Set["${description.Token[5, " "]}"]
}
else
{
maxDamage:Set["${description.Token[2, " "].Replace[",", ""]}"]
damageType:Set["${description.Token[3, " "]}"]
}
variable jsonvalue damage
damage:SetValue["$$>{
"type": "${damageType}",
"min": "${minDamage}",
"max": "${maxDamage}"
}<$$"]
if !${damageType(exists)}
{
echo "huh?: ${description}"
}
return ${damage.AsJSON~}
}
function main()
{
variable index:ability MyAbilities
variable iterator MyAbilitiesIterator
variable jsonvalue abilityList = "{}"
variable jsonvalue currentAbility = {}
variable jsonvalue effects = []
variable jsonvalue abilityEffect = {}
variable string abilityLineName
variable int idx = 1
variable int Counter = 1
variable int Timer = 0
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.Used}) - ${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}",
"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~}"]
call matchesItemInArray stealthRequiredEffects ${abilityEffect.Get["description"]}
if ${Return}
{
currentAbility:Set["requiresStealth", ${Return}]
}
call matchesItemInArray flankingRequiredEffects ${abilityEffect.Get["description"]}
if ${Return}
{
currentAbility:Set["requiresFlanking", ${Return}]
}
call matchesItemInArray noEpicEffects ${abilityEffect.Get["description"]}
if ${Return}
{
currentAbility:Set["noEpic", ${Return}]
}
call matchesItemInArray stunEffects ${abilityEffect.Get["description"]}
if ${Return}
{
currentAbility:Set["stuns", ${Return}]
}
call matchesItemInArray interruptEffects ${abilityEffect.Get["description"]}
if ${Return}
{
currentAbility:Set["interrupts", ${Return}]
}
call extractDamageFromEffect abilityEffect
if ${Return.Get["type"](exists)}
{
variable string damageType
variable int64 minDamage
damageType:Set["${Return.Get["type"]}"]
minDamage:Set["${Return.Get["min"]}"]
currentAbility:Set["doesDamage", TRUE]
if ${currentAbility.Has["damage", ${Return.Get["type"]}]}
{
variable int64 currentMinDamageTotal
currentMinDamageTotal:Set["${currentAbility.Get["damage", ${damageType}]}"]
currentMinDamageTotal:Inc[${minDamage}]
currentAbility.Get["damage", ${damageType}]:Set[${currentMinDamageTotal}]
}
else
{
if ${currentAbility.Has["damage"]}
{
currentAbility.Get["damage"]:Set["${damageType}", "${minDamage}"]
}
else
{
currentAbility:Set["damage", "$$>{
"${damageType}": ${minDamage},
}<$$"]
}
}
}
abilityEffect:Clear
}
currentAbility:Set["effects", "${effects.AsJSON~}"]
effects:Clear
abilityLineName:Set["${MRStringHelpers.StripRomanNumerals[${currentAbility.Get["name"]}]}"]
if !${abilityList.Has["${abilityLineName}"]}
{
abilityList:Set["${abilityLineName}", "[${currentAbility.AsJSON~}]"]
}
else
{
abilityList.Get["${abilityLineName}"]:Add["${currentAbility.AsJSON~}"]
}
Counter:Inc
Timer:Set[0]
}
while ${MyAbilitiesIterator:Next(exists)}
}
abilityList:WriteFile["${LavishScript.HomeDirectory}/Scripts/mr/bot/ability_exports/${Me.Name}_${Me.SubClass}.json", multiline]
}

View File

@ -0,0 +1,94 @@
; 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"]
; }

View File

@ -0,0 +1,792 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Generated by LavishSettings v2 -->
<InnerSpaceSettings>
<Set Name="Profiles">
<Setting Name="DefaultProfiles">Kaer T5</Setting>
<Set Name="Sample">
<Set Name="Settings">
<Setting Name="checkbox_settings_buffs">TRUE</Setting>
<Setting Name="checkbox_settings_combatarts">TRUE</Setting>
<Setting Name="checkbox_settings_namedcombatarts">TRUE</Setting>
<Setting Name="checkbox_settings_rangedattack">TRUE</Setting>
<Setting Name="checkbox_settings_autoattacktiming">TRUE</Setting>
<Setting Name="checkbox_settings_meleeattack">TRUE</Setting>
<Setting Name="checkbox_settings_turnoffattack">TRUE</Setting>
<Setting Name="checkbox_settings_res">TRUE</Setting>
<Setting Name="checkbox_settings_acceptres">TRUE</Setting>
<Setting Name="checkbox_settings_prioritytab">TRUE</Setting>
<Setting Name="checkbox_settings_doho">TRUE</Setting>
<Setting Name="checkbox_settings_acceptinvites">TRUE</Setting>
<Setting Name="checkbox_settings_movetoarea">TRUE</Setting>
<Setting Name="checkbox_settings_acceptloot">TRUE</Setting>
<Setting Name="checkbox_settings_dopowerheals">TRUE</Setting>
<Setting Name="checkbox_settings_autofollow">FALSE</Setting>
<Setting Name="checkbox_settings_enableonscreenassistant">TRUE</Setting>
<Setting Name="checkbox_settings_enablealiases">TRUE</Setting>
<Setting Name="checkbox_settings_encountersmartnukes">TRUE</Setting>
<Setting Name="checkbox_settings_aesmartnukes">TRUE</Setting>
<Setting Name="checkbox_settings_ignoretargettoattackhealthcheck">TRUE</Setting>
<Setting Name="checkbox_settings_loot">TRUE</Setting>
<Setting Name="checkbox_settings_enableannouncetab">TRUE</Setting>
<Setting Name="checkbox_settings_enableogremcp">TRUE</Setting>
<Setting Name="checkbox_settings_autotargetwhenhated">TRUE</Setting>
<Setting Name="checkbox_settings_shards">TRUE</Setting>
<Setting Name="checkbox_settings_manastone">TRUE</Setting>
<Setting Name="checkbox_settings_facenpc">FALSE</Setting>
<Setting Name="checkbox_settings_movemelee">FALSE</Setting>
<Setting Name="checkbox_settings_moveinfront">FALSE</Setting>
<Setting Name="checkbox_settings_raidoptions">TRUE</Setting>
<Setting Name="checkbox_settings_grindoptions">TRUE</Setting>
</Set>
<Set Name="Setup">
<Setting Name="textentry_setup_percenttoattack">99</Setting>
<Setting Name="textentry_setup_moveintoattackrangehealthpercent">99</Setting>
<Setting Name="textentry_setup_petpercenttoattack">99</Setting>
<Setting Name="textentry_setup_powertousecas">5</Setting>
<Setting Name="textentry_setup_healthtousecas">5</Setting>
<Setting Name="textentry_setup_percenttousemanastone">75</Setting>
<Setting Name="textentry_setup_percenttouseshards">50</Setting>
<Setting Name="textentry_setup_reswaittimer">5</Setting>
<Setting Name="textentry_setup_spellrangeextender">0</Setting>
<Setting Name="textentry_setup_moveintomeleerangemaxdistance">25</Setting>
<Setting Name="textentry_setup_autofollowmaxdistance">50</Setting>
<Setting Name="checkbox_setup_broadcasttellstouplink">FALSE</Setting>
<Setting Name="combobox_setup_shardcaster">Conjuror</Setting>
<Setting Name="combobox_setup_heartcaster">Necromancer</Setting>
<Setting Name="combobox_setup_autofollowname">NULL</Setting>
<Setting Name="checkbox_setup_receivetellsfromuplink">TRUE</Setting>
</Set>
<Set Name="Aliases">
<Set Name="1">
<Setting Name="__SourceName">*Priest</Setting>
<Setting Name="For">Editall</Setting>
</Set>
<Set Name="2">
<Setting Name="__SourceName">*Priest</Setting>
<Setting Name="For">Editall</Setting>
</Set>
<Set Name="3">
<Setting Name="__SourceName">*Priest</Setting>
<Setting Name="For">Editall</Setting>
</Set>
</Set>
<Set Name="CastStack">
<Set Name="1">
<Setting Name="%">20</Setting>
<Setting Name="__SourceName">Unyielding Resolve</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="2">
<Setting Name="%">25</Setting>
<Setting Name="__SourceName">Brawler's Tenacity</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="3">
<Setting Name="%">30</Setting>
<Setting Name="__SourceName">Ignore Pain</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="4">
<Setting Name="%">30</Setting>
<Setting Name="__SourceName">Rock Skin</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="5">
<Setting Name="%">35</Setting>
<Setting Name="__SourceName">Impenetrable Will</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="6">
<Setting Name="%">40</Setting>
<Setting Name="__SourceName">Inner Focus</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="7">
<Setting Name="__SourceName">Bruising Spirit</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="8">
<Setting Name="%">25</Setting>
<Setting Name="__SourceName">Stone Deaf</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="9">
<Setting Name="%">50</Setting>
<Setting Name="__SourceName">Soak Hit</Setting>
<Setting Name="Target">@NotSelfGroup</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="10">
<Setting Name="__SourceName">Stone Cold</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="11">
<Setting Name="%">50</Setting>
<Setting Name="__SourceName">Intercept</Setting>
<Setting Name="Target">@NotSelfGroup</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="12">
<Setting Name="%">50</Setting>
<Setting Name="__SourceName">Tag Team</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="13">
<Setting Name="__SourceName">Altruism</Setting>
<Setting Name="Target">*Priest</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="14">
<Setting Name="__SourceName">Shrug Off</Setting>
<Setting Name="Target">*Priest</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="15">
<Setting Name="%">40</Setting>
<Setting Name="__SourceName">Martial Leap</Setting>
<Setting Name="Target">@Group</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="16">
<Setting Name="__SourceName">Fist of Gorynn</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="17">
<Setting Name="__SourceName">Bodyguard</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="18">
<Setting Name="__SourceName">Bob and Weave</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="19">
<Setting Name="__SourceName">Brutality</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="20">
<Setting Name="__SourceName">Crane Twirl</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="21">
<Setting Name="%">75</Setting>
<Setting Name="__SourceName">Draconic Shout</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="22">
<Setting Name="__SourceName">Lightning Fists</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="23">
<Setting Name="__SourceName">Knockout Combination</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="24">
<Setting Name="__SourceName">Master's Rage</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="25">
<Setting Name="__SourceName">Abuse</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="26">
<Setting Name="__SourceName">Baton Flurry</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="27">
<Setting Name="__SourceName">Crane Sweep</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="28">
<Setting Name="__SourceName">Wild Beating</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="29">
<Setting Name="__SourceName">Beatdown</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="30">
<Setting Name="__SourceName">Savage Assault</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="31">
<Setting Name="__SourceName">Devastation Fist</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="32">
<Setting Name="__SourceName">Pressure Point</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="33">
<Setting Name="__SourceName">Uppercut</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="34">
<Setting Name="__SourceName">Merciless Stomp</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="35">
<Setting Name="__SourceName">Shoulder Charge</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="36">
<Setting Name="__SourceName">Blaze Kick</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="37">
<Setting Name="__SourceName">Pummel</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="38">
<Setting Name="__SourceName">Roundhouse</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="39">
<Setting Name="__SourceName">Sucker Punch</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="40">
<Setting Name="__SourceName">Meteor Fist</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="41">
<Setting Name="__SourceName">One Hundred Hand Punch</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="42">
<Setting Name="__SourceName">Eye Gouge</Setting>
<Setting Name="Type">CA</Setting>
</Set>
</Set>
<Set Name="Loot">
<Setting Name="checkbox_loot_confirmnotrade">TRUE</Setting>
<Setting Name="checkbox_loot_ffaaccept">TRUE</Setting>
</Set>
<Set Name="OSA">
<Setting Name="slider_osa_radius">45</Setting>
<Setting Name="textentry_osa_radius">45</Setting>
<Setting Name="checkbox_osa_targetsonly">TRUE</Setting>
<Setting Name="checkbox_osa_clipyaxis">TRUE</Setting>
</Set>
<Set Name="Announce">
<Set Name="1">
<Setting Name="__SourceName">Combat Mastery</Setting>
<Setting Name="Target">Group</Setting>
<Setting Name="Txt">Casting combat mastery</Setting>
</Set>
</Set>
<Set Name="AutoHunt">
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkhp">TRUE</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">FALSE</Setting>
<Setting Name="checkbox_autohunt_autohunt">FALSE</Setting>
<Setting Name="textentry_autohunt_scanradius">12</Setting>
<Setting Name="checkbox_autohunt_movementonly">FALSE</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="checkbox_autohunt_ignorenonaggro">FALSE</Setting>
<Setting Name="checkbox_autohunt_checkmana">FALSE</Setting>
<Setting Name="textentry_autohunt_checkmana">40</Setting>
<Setting Name="checkbox_autohunt_ignoregray">TRUE</Setting>
</Set>
<Set Name="AutoHunt_Path">
<Set Name="1">
<Setting Name="__SourceName">L1</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="2">
<Setting Name="__SourceName">L2</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="3">
<Setting Name="__SourceName">L3</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="4">
<Setting Name="__SourceName">L4</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="5">
<Setting Name="__SourceName">L5</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="6">
<Setting Name="__SourceName">L6</Setting>
</Set>
<Set Name="7">
<Setting Name="__SourceName">L7</Setting>
</Set>
<Set Name="8">
<Setting Name="__SourceName">L8</Setting>
</Set>
<Set Name="9">
<Setting Name="__SourceName">L9</Setting>
</Set>
<Set Name="10">
<Setting Name="__SourceName">L10</Setting>
</Set>
<Set Name="11">
<Setting Name="__SourceName">L11</Setting>
</Set>
<Set Name="12">
<Setting Name="__SourceName">L12</Setting>
</Set>
<Set Name="13">
<Setting Name="__SourceName">L13</Setting>
</Set>
<Set Name="14">
<Setting Name="__SourceName">L14</Setting>
</Set>
<Set Name="15">
<Setting Name="__SourceName">L15</Setting>
</Set>
</Set>
<Set Name="Other">
<Setting Name="combobox_other_curabledisable">Close Mind</Setting>
<Setting Name="checkbox_other_curabledisable">TRUE</Setting>
</Set>
<Set Name="AutoTarget">
<Setting Name="checkbox_autotarget_enabled">TRUE</Setting>
<Setting Name="slider_autotarget_scanradius">50</Setting>
<Setting Name="slider_autotarget_scanheight">5</Setting>
<Setting Name="slider_autotarget_rescantime">1</Setting>
</Set>
<Set Name="HUDs">
<Setting Name="checkbox_hud_pc">TRUE</Setting>
<Setting Name="checkbox_hud_npc">TRUE</Setting>
<Setting Name="checkbox_hud_group">TRUE</Setting>
</Set>
<Set Name="OgreConsole">
<Setting Name="checkbox_ogreconsole_showonload">TRUE</Setting>
</Set>
</Set>
<Set Name="Kaer T5">
<Set Name="Settings">
<Setting Name="checkbox_settings_buffs">TRUE</Setting>
<Setting Name="checkbox_settings_combatarts">TRUE</Setting>
<Setting Name="checkbox_settings_namedcombatarts">TRUE</Setting>
<Setting Name="checkbox_settings_rangedattack">TRUE</Setting>
<Setting Name="checkbox_settings_autoattacktiming">TRUE</Setting>
<Setting Name="checkbox_settings_meleeattack">TRUE</Setting>
<Setting Name="checkbox_settings_turnoffattack">TRUE</Setting>
<Setting Name="checkbox_settings_res">TRUE</Setting>
<Setting Name="checkbox_settings_acceptres">TRUE</Setting>
<Setting Name="checkbox_settings_prioritytab">TRUE</Setting>
<Setting Name="checkbox_settings_doho">TRUE</Setting>
<Setting Name="checkbox_settings_acceptinvites">TRUE</Setting>
<Setting Name="checkbox_settings_movetoarea">TRUE</Setting>
<Setting Name="checkbox_settings_acceptloot">TRUE</Setting>
<Setting Name="checkbox_settings_dopowerheals">TRUE</Setting>
<Setting Name="checkbox_settings_autofollow">FALSE</Setting>
<Setting Name="checkbox_settings_enableonscreenassistant">FALSE</Setting>
<Setting Name="checkbox_settings_enablealiases">TRUE</Setting>
<Setting Name="checkbox_settings_encountersmartnukes">TRUE</Setting>
<Setting Name="checkbox_settings_aesmartnukes">TRUE</Setting>
<Setting Name="checkbox_settings_ignoretargettoattackhealthcheck">TRUE</Setting>
<Setting Name="checkbox_settings_loot">TRUE</Setting>
<Setting Name="checkbox_settings_enableannouncetab">TRUE</Setting>
<Setting Name="checkbox_settings_enableogremcp">TRUE</Setting>
<Setting Name="checkbox_settings_autotargetwhenhated">TRUE</Setting>
<Setting Name="checkbox_settings_shards">TRUE</Setting>
<Setting Name="checkbox_settings_manastone">TRUE</Setting>
<Setting Name="checkbox_settings_facenpc">FALSE</Setting>
<Setting Name="checkbox_settings_movemelee">FALSE</Setting>
<Setting Name="checkbox_settings_moveinfront">FALSE</Setting>
<Setting Name="checkbox_settings_raidoptions">TRUE</Setting>
<Setting Name="checkbox_settings_grindoptions">TRUE</Setting>
</Set>
<Set Name="Setup">
<Setting Name="textentry_setup_percenttoattack">99</Setting>
<Setting Name="textentry_setup_moveintoattackrangehealthpercent">99</Setting>
<Setting Name="textentry_setup_petpercenttoattack">99</Setting>
<Setting Name="textentry_setup_powertousecas">5</Setting>
<Setting Name="textentry_setup_healthtousecas">5</Setting>
<Setting Name="textentry_setup_percenttousemanastone">75</Setting>
<Setting Name="textentry_setup_percenttouseshards">50</Setting>
<Setting Name="textentry_setup_reswaittimer">5</Setting>
<Setting Name="textentry_setup_spellrangeextender">0</Setting>
<Setting Name="textentry_setup_moveintomeleerangemaxdistance">25</Setting>
<Setting Name="textentry_setup_autofollowmaxdistance">50</Setting>
<Setting Name="checkbox_setup_broadcasttellstouplink">FALSE</Setting>
<Setting Name="combobox_setup_shardcaster">Conjuror</Setting>
<Setting Name="combobox_setup_heartcaster">Necromancer</Setting>
<Setting Name="combobox_setup_autofollowname">NULL</Setting>
<Setting Name="checkbox_setup_receivetellsfromuplink">TRUE</Setting>
</Set>
<Set Name="Aliases">
<Set Name="1">
<Setting Name="__SourceName">*Priest</Setting>
<Setting Name="For">Nivik</Setting>
</Set>
<Set Name="2">
<Setting Name="__SourceName">*Tank</Setting>
<Setting Name="For">Kaer</Setting>
</Set>
</Set>
<Set Name="CastStack">
<Set Name="1">
<Setting Name="%">40</Setting>
<Setting Name="__SourceName">Ignore Pain</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="2">
<Setting Name="%">30</Setting>
<Setting Name="__SourceName">Rock Skin</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="3">
<Setting Name="%">35</Setting>
<Setting Name="__SourceName">Impenetrable Will</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="4">
<Setting Name="__SourceName">Bruising Spirit</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="5">
<Setting Name="%">50</Setting>
<Setting Name="__SourceName">Intercept</Setting>
<Setting Name="Target">@NotSelfGroup</Setting>
<Setting Name="Type">Heal</Setting>
</Set>
<Set Name="6">
<Setting Name="__SourceName">Shrug Off</Setting>
<Setting Name="Target">*Priest</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="7">
<Setting Name="__SourceName">Bodyguard</Setting>
<Setting Name="Tag">Tank</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="8">
<Setting Name="__SourceName">Smoldering Fists</Setting>
<Setting Name="Tag">DPS</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="9">
<Setting Name="__SourceName">Bob and Weave</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="10">
<Setting Name="__SourceName">Brutality</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="11">
<Setting Name="__SourceName">Manhandle</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
<Set Name="12">
<Setting Name="__SourceName">Lightning Fists</Setting>
<Setting Name="Target">@Me</Setting>
<Setting Name="Type">Combat</Setting>
</Set>
<Set Name="13">
<Setting Name="__SourceName">Master's Rage</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="14">
<Setting Name="__SourceName">Abuse</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="15">
<Setting Name="__SourceName">Beatdown</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="16">
<Setting Name="__SourceName">Savage Assault</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="17">
<Setting Name="__SourceName">Devastation Fist</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="18">
<Setting Name="__SourceName">Uppercut</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="19">
<Setting Name="__SourceName">Merciless Stomp</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="20">
<Setting Name="__SourceName">Shoulder Charge</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="21">
<Setting Name="__SourceName">Blaze Kick</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="22">
<Setting Name="__SourceName">Pummel</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="23">
<Setting Name="__SourceName">Roundhouse</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="24">
<Setting Name="__SourceName">Sucker Punch</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="25">
<Setting Name="__SourceName">Meteor Fist</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="26">
<Setting Name="__SourceName">One Hundred Hand Punch</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="27">
<Setting Name="__SourceName">Eye Gouge</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="28">
<Setting Name="__SourceName">Strike of Consistency</Setting>
<Setting Name="Type">CA</Setting>
</Set>
<Set Name="29">
<Setting Name="__SourceName">Subtle Strikes</Setting>
<Setting Name="ATag">DPS</Setting>
<Setting Name="AType">Trigger Only</Setting>
<Setting Name="Type">Buff</Setting>
</Set>
</Set>
<Set Name="Loot">
<Setting Name="checkbox_loot_confirmnotrade">TRUE</Setting>
<Setting Name="checkbox_loot_ffaaccept">TRUE</Setting>
</Set>
<Set Name="OSA">
<Setting Name="slider_osa_radius">45</Setting>
<Setting Name="textentry_osa_radius">45</Setting>
<Setting Name="checkbox_osa_targetsonly">TRUE</Setting>
<Setting Name="checkbox_osa_clipyaxis">TRUE</Setting>
</Set>
<Set Name="Announce">
<Set Name="1">
<Setting Name="__SourceName">Combat Mastery</Setting>
<Setting Name="Target">Group</Setting>
<Setting Name="Txt">Casting combat mastery</Setting>
</Set>
</Set>
<Set Name="AutoHunt">
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkhp">TRUE</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">FALSE</Setting>
<Setting Name="checkbox_autohunt_autohunt">FALSE</Setting>
<Setting Name="textentry_autohunt_scanradius">12</Setting>
<Setting Name="checkbox_autohunt_movementonly">FALSE</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="checkbox_autohunt_ignorenonaggro">FALSE</Setting>
<Setting Name="checkbox_autohunt_checkmana">FALSE</Setting>
<Setting Name="textentry_autohunt_checkmana">40</Setting>
<Setting Name="checkbox_autohunt_ignoregray">TRUE</Setting>
</Set>
<Set Name="AutoHunt_Path">
<Set Name="1">
<Setting Name="__SourceName">L1</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="2">
<Setting Name="__SourceName">L2</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="3">
<Setting Name="__SourceName">L3</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="4">
<Setting Name="__SourceName">L4</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="5">
<Setting Name="__SourceName">L5</Setting>
<Setting Name="checkbox_autohunt_autohunt">TRUE</Setting>
<Setting Name="checkbox_autohunt_checkaggro">TRUE</Setting>
<Setting Name="checkbox_autohunt_looppath">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell1">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell2">TRUE</Setting>
<Setting Name="checkbox_autohunt_pullspell3">TRUE</Setting>
<Setting Name="combobox_autohunt_pullspell1">Slurred Insult</Setting>
<Setting Name="combobox_autohunt_pullspell2">Abuse</Setting>
<Setting Name="combobox_autohunt_pullspell3">Slurred Insult</Setting>
<Setting Name="textentry_autohunt_checkhp">80</Setting>
<Setting Name="textentry_autohunt_scanradius">8</Setting>
</Set>
<Set Name="6">
<Setting Name="__SourceName">L6</Setting>
</Set>
<Set Name="7">
<Setting Name="__SourceName">L7</Setting>
</Set>
<Set Name="8">
<Setting Name="__SourceName">L8</Setting>
</Set>
<Set Name="9">
<Setting Name="__SourceName">L9</Setting>
</Set>
<Set Name="10">
<Setting Name="__SourceName">L10</Setting>
</Set>
<Set Name="11">
<Setting Name="__SourceName">L11</Setting>
</Set>
<Set Name="12">
<Setting Name="__SourceName">L12</Setting>
</Set>
<Set Name="13">
<Setting Name="__SourceName">L13</Setting>
</Set>
<Set Name="14">
<Setting Name="__SourceName">L14</Setting>
</Set>
<Set Name="15">
<Setting Name="__SourceName">L15</Setting>
</Set>
</Set>
<Set Name="Other">
<Setting Name="combobox_other_curabledisable">Close Mind</Setting>
<Setting Name="checkbox_other_curabledisable">TRUE</Setting>
</Set>
<Set Name="AutoTarget">
<Setting Name="checkbox_autotarget_enabled">FALSE</Setting>
<Setting Name="slider_autotarget_scanradius">50</Setting>
<Setting Name="slider_autotarget_scanheight">5</Setting>
<Setting Name="slider_autotarget_rescantime">1</Setting>
<Setting Name="checkbox_autotarget_outofcombatscanning">FALSE</Setting>
</Set>
<Set Name="HUDs">
<Setting Name="checkbox_hud_pc">TRUE</Setting>
<Setting Name="checkbox_hud_npc">TRUE</Setting>
<Setting Name="checkbox_hud_group">TRUE</Setting>
</Set>
<Set Name="OgreConsole">
<Setting Name="checkbox_ogreconsole_showonload">TRUE</Setting>
</Set>
<Set Name="Items">
<Set Name="1">
<Setting Name="__SourceName">Manastone</Setting>
</Set>
</Set>
<Set Name="Tags_AddNew">
<Set Name="1">
<Setting Name="__SourceName">DPS</Setting>
</Set>
<Set Name="2">
<Setting Name="__SourceName">Tank</Setting>
</Set>
</Set>
<Set Name="Tags">
<Set Name="1">
<Setting Name="__SourceName">DPS</Setting>
</Set>
</Set>
</Set>
</Set>
</InnerSpaceSettings>

View File

@ -0,0 +1,218 @@
{
"DefaultProfile": "kaer lvl50",
"Profiles": {
"kaer lvl50": {
"Name": "kaer lvl50",
"Settings": {
"test": true
},
"Setup": {},
"CastStack": [
{
"Name": "Abuse",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Beatdown",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Blaze Kick",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Bob and Weave",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Bodyguard",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "Tank"
},
{
"Name": "Bruising Spirit",
"AbilityTarget": "@Me",
"AbilityType": "Combat",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Brutality",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Devastation Fist",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Eye Gouge",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Ignore Pain",
"AbilityTarget": "NULL",
"AbilityType": "Heal",
"Percentage": "40",
"Tag": "NULL"
},
{
"Name": "Impenetrable Will",
"AbilityTarget": "NULL",
"AbilityType": "Heal",
"Percentage": "35",
"Tag": "NULL"
},
{
"Name": "Intercept",
"AbilityTarget": "@NotSelfGroup",
"AbilityType": "Heal",
"Percentage": "50",
"Tag": "NULL"
},
{
"Name": "Lightning Fists",
"AbilityTarget": "@Me",
"AbilityType": "Combat",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Manhandle",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Master's Rage",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Merciless Stomp",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Meteor Fist",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "One Hundred Hand Punch",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Pummel",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Rock Skin",
"AbilityTarget": "NULL",
"AbilityType": "Heal",
"Percentage": "30",
"Tag": "NULL"
},
{
"Name": "Roundhouse",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Savage Assault",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Shoulder Charge",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Shrug Off",
"AbilityTarget": "*Priest",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Smoldering Fists",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "DPS"
},
{
"Name": "Strike of Consistency",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Subtle Strikes",
"AbilityTarget": "NULL",
"AbilityType": "Buff",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Sucker Punch",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
},
{
"Name": "Uppercut",
"AbilityTarget": "NULL",
"AbilityType": "CA",
"Percentage": "0",
"Tag": "NULL"
}
],
"Aliases": {}
}
}
}

464
bot/setting_keys.json Normal file
View File

@ -0,0 +1,464 @@
{
"settings": [
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack",
"content": "Disable Cast Stack(CS)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_buffs",
"content": "Disable CS_Buffs",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_buffs\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_cure",
"content": "Disable CS_Cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_cure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_curecurse",
"content": "Disable CS_CureCurse",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_curecurse\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_heal",
"content": "Disable CS_Heal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_heal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_powerheal",
"content": "Disable CS_PowerHeal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_powerheal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_res",
"content": "Disable CS_Res",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_res\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_combat",
"content": "Disable CS_Combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_combat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_ca",
"content": "Disable CS_CA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_ca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_namedca",
"content": "Disable CS_NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_namedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nonnamedca",
"content": "Disable CS_NonNamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nonnamedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_debuff",
"content": "Disable CS_Debuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_debuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nameddebuff",
"content": "Disable CS_NamedDebuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nameddebuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_items",
"content": "Disable CS_Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_items\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_cancelabilitiestogroupcure",
"content": "X abilities to group cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_cancelabilitiestogroupcure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_forcenamedcatab",
"content": "Force NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_forcenamedcatab\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
{
"type": "checkbox",
"name": "checkbox_settings_acceptloot",
"content": "Accept Loot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_acceptloot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot",
"content": "Loot Corpses/Chests",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot_incombat",
"content": "Loot InCombat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot_incombat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_facenpc",
"content": "Face mob in combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_facenpc\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_rangedattack",
"content": "Ranged Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_rangedattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_meleeattack",
"content": "Melee Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_meleeattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movemelee",
"content": "Move into Melee Range",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movemelee\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movebehind",
"content": "Move behind mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movebehind\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_moveinfront",
"content": "Move in front of mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_moveinfront\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_turnoffattack",
"content": "Turn Off Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_turnoffattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoremovetoattackhealthcheck",
"content": "Ignore NPC HP to move",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoremovetoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoretargettoattackhealthcheck",
"content": "Ignore NPC HP (100%)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoretargettoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space1",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space1\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_consumeitems",
"content": "Enable Consume Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_consumeitems\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space3",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space3\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disable_dbc_claim",
"content": "Disable DBC Claim",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disable_dbc_claim\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space5",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space5\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space6",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space6\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_encountersmartnukes",
"content": "Encounter Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_encountersmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_aesmartnukes",
"content": "AE Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_aesmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movetoarea",
"content": "Allow Camp Spot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movetoarea\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_assist",
"content": "Auto Assist",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_assist\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
}
]
}

559
bot/settings.json Normal file
View File

@ -0,0 +1,559 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"elements": [
{
"type": "window",
"title": "MR Bot Settings",
"name": "mr.bot.settings",
"borderThickness": 2,
"hideOnClose": false,
"minSize": {
"width": 450,
"height": 200
},
"maxSize": {
"height": 600,
"width": 800
},
"eventHandlers": {
"onCloseButtonClick": [
"method",
"MRBotController",
"ToggleSettings"
]
},
"content": {
"type": "stackpanel",
"heightFactor": 1,
"orientation":"horizontal",
"horizontalAlignment": "stretch",
"children": [
{
"type": "wrappanel",
"name": "mr.bot.settings.nav",
"orientation":"horizontal",
"childSize": {
"width": 90,
"height": 35
},
"width": 193,
"uniform": true,
"borderThickness": 2,
"borderBrush":{
"color":"#ff0000"
},
"verticalAlignment": "stretch",
"children": [
{
"type": "button",
"content": "Settings",
"widthFactor": 1,
"heightFactor": 1
},
{
"type": "button",
"content": "Setup",
"widthFactor": 1,
"heightFactor": 1
},
{
"type": "button",
"content": "Aliases",
"widthFactor": 1,
"heightFactor": 1
},
{
"type": "button",
"content": "Cast Stack",
"widthFactor": 1,
"heightFactor": 1
}
]
},
{
"type": "wrappanel",
"name": "mr.bot.settings.settings",
"heightFactor": 1,
"childSize": {
"width": 220,
"height": 50
},
"horizontalAlignment": "stretch",
"uniform": true,
"borderThickness": 2,
"borderBrush":{
"color":"#ff0000"
},
"verticalAlignment": "stretch",
"children": [
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack",
"content": "Disable Cast Stack(CS)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_buffs",
"content": "Disable CS_Buffs",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_buffs\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_cure",
"content": "Disable CS_Cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_cure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_curecurse",
"content": "Disable CS_CureCurse",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_curecurse\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_heal",
"content": "Disable CS_Heal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_heal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_powerheal",
"content": "Disable CS_PowerHeal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_powerheal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_res",
"content": "Disable CS_Res",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_res\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_combat",
"content": "Disable CS_Combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_combat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_ca",
"content": "Disable CS_CA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_ca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_namedca",
"content": "Disable CS_NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_namedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nonnamedca",
"content": "Disable CS_NonNamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nonnamedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_debuff",
"content": "Disable CS_Debuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_debuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nameddebuff",
"content": "Disable CS_NamedDebuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nameddebuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_items",
"content": "Disable CS_Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_items\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_cancelabilitiestogroupcure",
"content": "X abilities to group cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_cancelabilitiestogroupcure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_forcenamedcatab",
"content": "Force NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_forcenamedcatab\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
{
"type": "checkbox",
"name": "checkbox_settings_acceptloot",
"content": "Accept Loot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_acceptloot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot",
"content": "Loot Corpses/Chests",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot_incombat",
"content": "Loot InCombat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot_incombat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_facenpc",
"content": "Face mob in combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_facenpc\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_rangedattack",
"content": "Ranged Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_rangedattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_meleeattack",
"content": "Melee Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_meleeattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movemelee",
"content": "Move into Melee Range",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movemelee\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movebehind",
"content": "Move behind mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movebehind\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_moveinfront",
"content": "Move in front of mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_moveinfront\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_turnoffattack",
"content": "Turn Off Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_turnoffattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoremovetoattackhealthcheck",
"content": "Ignore NPC HP to move",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoremovetoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoretargettoattackhealthcheck",
"content": "Ignore NPC HP (100%)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoretargettoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space1",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space1\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_consumeitems",
"content": "Enable Consume Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_consumeitems\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space3",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space3\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disable_dbc_claim",
"content": "Disable DBC Claim",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disable_dbc_claim\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space5",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space5\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space6",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space6\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_encountersmartnukes",
"content": "Encounter Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_encountersmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_aesmartnukes",
"content": "AE Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_aesmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movetoarea",
"content": "Allow Camp Spot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movetoarea\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_assist",
"content": "Auto Assist",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_assist\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
}
]
}
]
}
}
]
}

View File

@ -0,0 +1,90 @@
#include "${LavishScript.HomeDirectory}/scripts/mr/common/KnowledgeBook.iss"
#include "${LavishScript.HomeDirectory}/scripts/mr/common/JsonHelpers.iss"
objectdef SettingsController
{
variable jsonvalue abilityListItems = "[]"
variable jsonvalue currentCastStack = "[]"
variable int currentSelectedAvailableAbilityIndex = -1
variable jsonvalue newCastStackItem = "{}"
method Initialize()
{
LavishScript:RegisterEvent[onNewCastStackItemChanged]
variable jsonvalue jo
jo:ParseFile["${LavishScript.HomeDirectory}/scripts/mr/bot/ability_exports/Ihaihu_shadowknight.json"]
abilityListItems:SetValue["${MRJsonHelper.FilterArray[jo, "Details.SpellBookType", "<", 2].AsJSON~}"]
}
method Shutdown()
{
}
method OnClose()
{
}
method SetCurrentAbility(int selectedIndex)
{
currentSelectedAvailableAbilityIndex:Set[${selectedIndex}]
LGUI2.Element[MRSettingsController.events]:FireEventHandler[onNewCastStackItemChanged]
newCastStackItem:SetValue["$$>{
"action": "ability",
"name": "${abilityListItems.Get[${selectedIndex}, "Name"]}"
"id": "${abilityListItems.Get[${selectedIndex}, "CurrentID"]}"
}<$$"]
}
method OnCastStackAbilityComboChange(string param)
{
echo "param: ${param}"
echo "OnCastStackAbilityComboChange: ${Context.AsJSON~}"
newCastStackItem:Set["${Context.Source.Name.Token[3, "."]}", "${Context.Source.SelectedItem.Data.AsJSON~}"]
echo "${Context.Source.Name.Token[3, "."]} = ${Context.Source.SelectedItem.Data}"
echo "newCastStackItem: ${newCastStackItem.AsJSON[multiline]~}"
}
method SafeSetNewCastStackItemProperty(string propertyName, string value)
{
echo "SafeSetNewCastStackItemProperty: ${propertyName} = ${value}"
if ${value(exists)} && ${value.NotEqual[""]}
{
newCastStackItem:Set["${propertyName}", "${value}"]
}
}
member:string SafeGetNewCastStackItemProperty(string propertyName)
{
if ${newCastStackItem.Has[${propertyName}]}
{
return ${newCastStackItem.Get[${propertyName}]}
}
return ""
}
member GetTargetOptions()
{
variable jsonvalue targetOptions
targetOptions:SetValue[$$>"[
"@Group",
"@Raid",
"@Me",
"@Tank",
"@Healer",
"@DPS"
]"<$$]
; TODO: Add alias options once aliases are supported
return ${targetOptions}
}
method AddAbility()
{
echo "AddAbility: ${newCastStackItem.AsJSON[multiline]~}"
}
}

273
common/JsonHelpers.iss Normal file
View File

@ -0,0 +1,273 @@
objectdef MRJsonHelper
{
static member:jsonvalueref QueryJsonArray(jsonvalueref ref, string queryString)
{
if !${ref.Type.Equal[array]}
{
echo "JsonHelper:QueryJsonArray - First parameter should be a json array, but it is currently ${ref.Type}"
return NULL
}
variable jsonvalue result = "[]"
variable jsoniterator refIterator
variable int tokenCount
variable int currentTokenNumber
variable jsonvalue currentValue
tokenCount:Set[${queryString.Count["."]}]
tokenCount:Inc
ref:GetIterator[refIterator]
if ${refIterator:First(exists)}
{
do
{
currentValue:SetValue["${refIterator.Value.AsJSON~}"]
if ${tokenCount.Equal[1]}
{
currentValue:SetValue["${currentValue.Get["${queryString}"].AsJSON~}"]
}
else
{
for(currentTokenNumber:Set[1]; ${currentTokenNumber} <= ${tokenCount}; currentTokenNumber:Inc)
{
currentValue:SetValue["${currentValue.Get["${queryString.Token[${currentTokenNumber}, "."]}"].AsJSON~}"]
}
}
result:Add[${currentValue.AsJSON~}]
}
while ${refIterator:Next(exists)}
}
return result
}
static member:jsonvalueref QueryJson(jsonvalueref ref, string queryString)
{
if ${ref.Type.Equal[array]}
{
return ${This.QueryJsonArray[ref, ${queryString}]}
}
}
static member:jsonvalueref FilterArray(jsonvalueref ref, string queryString, string operator, int value)
{
echo "int version"
}
static member:jsonvalueref FilterArray(jsonvalueref ref, string queryString, string operator, string value)
{
if !${ref.Type.Equal[array]}
{
echo "JsonHelper:FilterArray - First parameter should be a json array, but it is currently ${ref.Type}"
return NULL
}
variable jsonvalue result = "[]"
variable jsoniterator refIterator
variable int tokenCount
variable int currentTokenNumber
variable jsonvalue currentValue
tokenCount:Set[${queryString.Count["."]}]
tokenCount:Inc
ref:GetIterator[refIterator]
if ${refIterator:First(exists)}
{
do
{
if ${tokenCount.Equal[1]}
{
currentValue:SetValue["${refIterator.Value.Get["${queryString}"].AsJSON~}"]
}
else
{
currentValue:SetValue["${refIterator.Value.AsJSON~}"]
for(currentTokenNumber:Set[1]; ${currentTokenNumber} <= ${tokenCount}; currentTokenNumber:Inc)
{
currentValue:SetValue["${currentValue.Get["${queryString.Token[${currentTokenNumber}, "."]}"].AsJSON~}"]
}
}
if ${operator.Equal["=="]}
{
echo "Checking equality"
echo "currentValue: ${currentValue.AsString}, value: ${value}"
echo "${currentValue.AsString.Equal[${value}]}"
if ${currentValue.AsString.Equal[${value}]}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
elseif ${operator.Equal[!=]}
{
if ${currentValue.NotEqual[${value}]}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
elseif ${operator.Equal[">"]}
{
if ${currentValue} > ${value}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
elseif ${operator.Equal["<"]}
{
if ${currentValue} < ${value}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
elseif ${operator.Equal[">="]}
{
if ${currentValue} >= ${value}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
elseif ${operator.Equal["<="]}
{
if ${currentValue} <= ${value}
{
result:Add["${refIterator.Value.AsJSON~}"]
}
}
else
{
echo "JsonHelper:FilterArray - Second parameter should be a valid operator, but it is currently ${operator}"
return NULL
}
}
while ${refIterator:Next(exists)}
}
return result
}
static member:bool Any(jsonvalueref ref, weakref obj, string functionName)
{
if !${ref.Type.Equal[array]}
{
echo "JsonHelper:Any - First parameter should be a json array, but it is currently ${ref.Type}"
return NULL
}
variable jsoniterator iter
ref:GetIterator[iter]
if ${iter:First(exists)}
{
do
{
if ${obj.${functionName}[iter.Value]}
{
return true
}
}
while ${iter:Next(exists)}
}
}
static member:jsonvalueref Map(jsonvalueref arr, weakref mapFunc)
{
if !${arr.Type.Equal[array]}
{
echo "JsonHelper:Map - First parameter should be a json array, but it is currently ${arr.Type}"
return NULL
}
variable jsonvalue result
variable jsoniterator arrIterator
arr:GetIterator[arrIterator]
if ${arrIterator:First(exists)}
{
do
{
echo "current: ${arrIterator.Value}, type: ${arrIterator.Value.Type}"
result:Add["mapFunc["arrIterator.Value"]"]
}
while ${arrIterator:Next(exists)}
}
return result
}
}
; objectdef test
; {
; member:string MapName(jsonvalueref obj)
; {
; if !${obj.Type.Equal[object]}
; {
; echo "JsonHelper:MapName - First parameter should be a json object, but it is currently ${obj.Type}"
; return NULL
; }
; if !${obj.Has[Name]}
; {
; echo "JsonHelper:MapName - First parameter should be a json object with a Name property, but it is currently ${obj.Type}"
; return NULL
; }
; return ${obj.Get[Name]}
; }
; member:jsonvalueref testArray()
; {
; ; variable jsonvalue testObj
; ; testObj:SetValue[$$>"{
; ; "Name": "Obj1"
; ; }"<$$]
; ; echo "ObjTest: ${This.MapName[testObj]}"
; variable jsonvalue testArray
; testArray:SetValue[$$>"[
; {"Id": 1, "Name": "Obj1", "Type": { "Name": "Obj1Type" }},
; {"Id": 2, "Name": "Obj2", "Type": { "Name": "Obj2Type" }},
; {"Id": 3, "Name": "Obj3", "Type": { "Name": "Obj3Type" }}
; ]"<$$]
; ;echo "${MRJsonHelper.QueryJson[testArray, "Type.Name"]}"
; ;echo "${MRJsonHelper.Map[testArray, This.MapName]}"
; echo "${MRJsonHelper.FilterArray[testArray, "Id", "<=", 2]}"
; ; echo ${testArray.Get[, "Name"]}
; ; results:SetValue[${}]
; }
; }
; function main()
; {
; variable test testObj
; echo ${testObj.testArray}
; }

315
common/KnowledgeBook.iss Normal file
View File

@ -0,0 +1,315 @@
#include "${LavishScript.HomeDirectory}/Scripts/mr/common/StringHelpers.iss"
objectdef AbilityEffect
{
variable int64 ID
variable int64 Indentation
variable string Description
method Initialize(jsonvalueref jo)
{
This:FromJSON[jo]
}
method FromJSON(jsonvalueref jo)
{
echo "AbilityEffect:FromJSON ${jo.Type}"
if !${jo.Type.Equal[object]}
{
return FALSE
}
ID:Set["${jo.Get[ID]~}"]
Indentation:Set["${jo.Get[Indentation]~}"]
Description:Set["${jo.Get[Description]~}"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:SetInteger[ID, "${ID~}"]
jo:SetInteger[Indentation, "${Indentation~}"]
jo:SetString[Description, "${Description~}"]
return jo
}
}
objectdef AbilityEffectCollection
{
variable index:AbilityEffect Effects
method AddEffectFromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[object]}
{
echo "AbilityEffectCollection:AddEffectFromJSON jo is not an object"
return FALSE
}
Effects:Insert[jo]
}
method FromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[array]}
{
return FALSE
}
jo:ForEach["This:AddEffectFromJSON[ForEach.Value]"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="[]"
variable iterator effectIterator
Effects:GetIterator[effectIterator]
if ${effectIterator:First(exists)}
{
do
{
jo:Add["${effectIterator.Value.AsJSON~}"]
}
while ${effectIterator:Next(exists)}
}
return jo
}
}
objectdef AbilityDetail
{
variable int64 ID
variable string Name
variable string Description
variable int Level
variable string Tier
variable int HealthCost
variable int PowerCost
variable int DissonanceCost
variable int SavageryCost
variable int ConcentrationCost
variable float CastingTime
variable float RecoveryTime
variable float RecastTime
variable float MaxDuration
variable int HealthCostPerTick
variable int PowerCostPerTick
variable int DissonanceCostPerTick
variable int SavageryCostPerTick
variable int MaxAOETargets
variable bool IsBeneficial
variable bool DoesNotExpire
variable bool GroupRestricted
variable bool AllowRaid
variable int TargetType
variable int SpellBookType
variable float MinRange
variable float MaxRange
variable AbilityEffectCollection Effects
method Initialize(jsonvalueref jo)
{
This:FromJSON[jo]
}
method FromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[object]}
{
return FALSE
}
Name:Set["${jo.Get[Name]~}"]
Description:Set["${jo.Get[Description]~}"]
ID:Set["${jo.Get[ID]~}"]
Level:Set["${jo.Get[Level]~}"]
Tier:Set["${jo.Get[Tier]~}"]
HealthCost:Set["${jo.Get[HealthCost]~}"]
PowerCost:Set["${jo.Get[PowerCost]~}"]
DissonanceCost:Set["${jo.Get[DissonanceCost]~}"]
SavageryCost:Set["${jo.Get[SavageryCost]~}"]
ConcentrationCost:Set["${jo.Get[ConcentrationCost]~}"]
CastingTime:Set["${jo.Get[CastingTime]~}"]
RecoveryTime:Set["${jo.Get[RecoveryTime]~}"]
RecastTime:Set["${jo.Get[RecastTime]~}"]
MaxDuration:Set["${jo.Get[MaxDuration]~}"]
HealthCostPerTick:Set["${jo.Get[HealthCostPerTick]~}"]
PowerCostPerTick:Set["${jo.Get[PowerCostPerTick]~}"]
DissonanceCostPerTick:Set["${jo.Get[DissonanceCostPerTick]~}"]
SavageryCostPerTick:Set["${jo.Get[SavageryCostPerTick]~}"]
MaxAOETargets:Set["${jo.Get[MaxAOETargets]~}"]
IsBeneficial:Set["${jo.Get[IsBeneficial]~}"]
DoesNotExpire:Set["${jo.Get[DoesNotExpire]~}"]
GroupRestricted:Set["${jo.Get[GroupRestricted]~}"]
AllowRaid:Set["${jo.Get[AllowRaid]~}"]
TargetType:Set["${jo.Get[TargetType]~}"]
SpellBookType:Set["${jo.Get[SpellBookType]~}"]
MinRange:Set["${jo.Get[MinRange]~}"]
MaxRange:Set["${jo.Get[MaxRange]~}"]
Effects:FromJSON["${jo.Get["Effects"]~}"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:SetString[Name, "${Name~}"]
jo:SetString[Description, "${Description~}"]
jo:SetString[ID, "${ID~}"]
jo:SetInteger[Level, "${Level~}"]
jo:SetString[Tier, "${Tier~}"]
jo:SetInteger[HealthCost, "${HealthCost~}"]
jo:SetInteger[PowerCost, "${PowerCost~}"]
jo:SetInteger[DissonanceCost, "${DissonanceCost~}"]
jo:SetInteger[SavageryCost, "${SavageryCost~}"]
jo:SetInteger[ConcentrationCost, "${ConcentrationCost~}"]
jo:SetNumber[CastingTime, "${CastingTime~}"]
jo:SetNumber[RecoveryTime, "${RecoveryTime~}"]
jo:SetNumber[RecastTime, "${RecastTime~}"]
jo:SetNumber[MaxDuration, "${MaxDuration~}"]
jo:SetInteger[HealthCostPerTick, "${HealthCostPerTick~}"]
jo:SetInteger[PowerCostPerTick, "${PowerCostPerTick~}"]
jo:SetInteger[DissonanceCostPerTick, "${DissonanceCostPerTick~}"]
jo:SetInteger[SavageryCostPerTick, "${SavageryCostPerTick~}"]
jo:SetInteger[MaxAOETargets, "${MaxAOETargets~}"]
jo:SetBool[IsBeneficial, "${IsBeneficial~}"]
jo:SetBool[DoesNotExpire, "${DoesNotExpire~}"]
jo:SetBool[GroupRestricted, "${GroupRestricted~}"]
jo:SetBool[AllowRaid, "${AllowRaid~}"]
jo:SetInteger[TargetType, "${TargetType~}"]
jo:SetInteger[SpellBookType, "${SpellBookType~}"]
jo:SetNumber[MinRange, "${MinRange~}"]
jo:SetNumber[MaxRange, "${MaxRange~}"]
jo:Set[Effects, "${Effects.AsJSON~}"]
return jo
}
}
objectdef Ability
{
variable string Name
variable AbilityDetail Details
variable int HighestLevel
variable int CurrentID
method Initialize(jsonvalueref jo)
{
This:FromJSON[jo]
}
method FromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[object]}
{
echo "Ability:FromJson jo is not an object"
return FALSE
}
Name:Set["${jo.Get[Name]~}"]
CurrentID:Set[${jo.GetInteger["CurrentID"]}]
HighestLevel:Set[${jo.GetInteger["HighestLevel"]}]
Details:FromJSON["${jo.Get["Details"]~}"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:SetString[Name, "${Name~}"]
jo:SetInteger[CurrentID, ${CurrentID}]
jo:SetInteger[HighestLevel, ${HighestLevel}]
jo:Set[Details, "${Details.AsJSON~}"]
return jo
}
}
objectdef KnowledgeBook
{
variable collection:Ability Abilities
method AddAbilityFromJSON(jsonvalueref jo)
{
variable StringHelpers stringHelpers
variable string abilityLine = "${stringHelpers.StripRomanNumerals[${jo.Get["Name"]}]}"
if ${jo.GetInteger["Level"]} < ${Abilities.Element["${abilityLine}"].HighestLevel}
{
return
}
variable jsonvalue tiers = "[]"
variable jsonvalue abilityLineJSON = "{}"
abilityLineJSON:SetValue[$$>"{
"Name": "${abilityLine~}",
"HighestLevel": ${jo.GetInteger["Level"]},
"CurrentID": ${jo.GetInteger["ID"]},
"Details": ${jo.AsJSON~}
}"<$$]
Abilities:Set["${abilityLine}", abilityLineJSON]
}
method FromFile(string filename)
{
variable jsonvalue jo
jo:ParseFile["${filename}"]
This:FromJSON[jo]
}
method WriteFile(string filename)
{
This.AsJSON:WriteFile["${filename}", multiline]
}
method AddAbilityLineFromJson(jsonvalueref jo)
{
if !${jo.Type.Equal[object]}
{
return FALSE
}
Abilities:Set[${jo.Get["Name"].AsJSON}, jo]
}
method FromJSON(jsonvalueref jo)
{
if !${jo.Type.Equal[array]}
{
echo "jo is not an array ${jo.Type}"
return FALSE
}
jo:ForEach["This:AddAbilityLineFromJson[ForEach.Value]"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="[]"
variable iterator abilityIterator
Abilities:GetIterator[abilityIterator]
if ${abilityIterator:First(exists)}
{
do
{
jo:Add["${abilityIterator.Value.AsJSON~}"]
}
while ${abilityIterator:Next(exists)}
}
return jo
}
}

52
common/MRSkin.json Normal file
View File

@ -0,0 +1,52 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"skin": {
"name": "MRSkin",
"brushes": {
"window.titleBar.backgroundBrush": {
"color": "#211C18"
}
},
"templates": {
"window.title": {
"verticalAlignment": "center",
"margin": [
2,
0,
0,
0
]
},
"button": {
"jsonTemplate": "default:button",
"margin": [
2,
2,
2,
2
],
"color": "#f4f3ee"
},
"checkbox": {
"jsonTemplate": "default:checkbox",
"margin": [
2,
2,
2,
2
],
},
"window": {
"jsonTemplate": "default:window",
"backgroundBrush": {
"color": "#463f3a"
},
"color": "#f4f3ee",
"font": {
"face": "Segoe UI",
"height": 16
}
}
}
}
}

37
common/StringHelpers.iss Normal file
View File

@ -0,0 +1,37 @@
objectdef MRStringHelpers
{
static member:string GetLastWord(string spellName)
{
variable int tokenCount = ${spellName.Count[" "]}
return ${spellName.Token[${tokenCount:Inc}, " "].Trim}
}
static member:bool IsRomanNumearl(string value)
{
variable int currentIndex
for (currentIndex:Set[1] ; ${currentIndex} < ${value.Length} ; currentIndex:Inc)
{
if !${value.Mid[${currentIndex}, 1].Equal["i"]} && !${value.Mid[${currentIndex}, 1].Equal["v"]} && !${value.Mid[${currentIndex}, 1].Equal["x"]}
{
return FALSE
}
}
return TRUE
}
static member:string StripRomanNumerals(string spellName)
{
variable string lastWord = ${MRStringHelpers.GetLastWord[${spellName}]}
if ${MRStringHelpers.IsRomanNumearl[${lastWord}]}
{
variable int baseStringLength
baseStringLength:Set[${spellName.Length} - ${lastWord.Length}]
return ${spellName.Mid[1, ${baseStringLength}].Trim}
}
return ${spellName}
}
}

25
encounter/vs.iss Normal file
View File

@ -0,0 +1,25 @@
function main()
{
variable index:actor Actors
variable iterator ActorIterator
EQ2:QueryActors[Actors]
Actors:GetIterator[ActorIterator]
while 1
{
do
{
echo "Aura: ${ActorIterator.Value.Aura}"
if ${ActorIterator.Value.Aura.Equal["result_fire_green"]}
{
echo "Clicking statue: ${ActorIterator.Value.ID}"
EQ2Execute apply_verb ${ActorIterator.Value.ID} "Open soulbox briefly"
}
}
while ${ActorIterator:Next(exists)}
wait 5
echo "Loop"
ActorIterator:First
}
}

0
faction/tg.iss Normal file
View File

22
mr.iss Normal file
View File

@ -0,0 +1,22 @@
function main(... params)
{
if ${params[1].Lower.Equal["osa"]}
{
run mr/osa/osa
}
elseif ${params[1].Lower.Equal["bot"]}
{
run mr/bot/bot
}
elseif ${params[1].Lower.Equal["export"]}
{
run mr/bot/export_abilities
}
elseif ${params[1].Lower.Equal["test"]}
{
ConsoleClear
run mr/test
}
}

147
osa/osa.iss Normal file
View File

@ -0,0 +1,147 @@
objectdef ActorToMonitor
{
variable string ID
variable string Name
variable int Health
variable string TargetName
variable int ThreatToNext
variable float Distance
method Initialize(string id, string name, int health, string targetName, int threatToNext, float distance)
{
ID:Set["${id}"]
Name:Set["${name}"]
Health:Set[${health}]
TargetName:Set["${targetName}"]
ThreatToNext:Set[${threatToNext}]
Distance:Set[${distance}]
}
method FromJSON(jsonvalueref jo)
{
ID:Set["${jo.Get[ID]~}"]
Name:Set["${jo.Get[Name]~}"]
Health:Set["${jo.Get[Health]~}"]
TargetName:Set["${jo.Get[Health]~}"]
ThreatToNext:Set["${jo.Get[ThreatToNext]~}"]
Distance:Set["${jo.Get[Distance]~}"]
}
member:jsonvalueref AsJSON()
{
variable jsonvalue jo="{}"
jo:SetString[ID, "${ID~}"]
jo:SetString[Name, "${Name~}"]
jo:SetString[Health, "${Health~}"]
jo:SetString[TargetName, "${TargetName~}"]
jo:SetString[ThreatToNext, "${ThreatToNext~}"]
jo:SetString[Distance, "${Distance}"]
return jo
}
}
objectdef OSAController
{
variable string SelectedItem
variable collection:ActorToMonitor ActorsWithTarget
variable string locationStorageFile = "${LavishScript.HomeDirectory}/Scripts/mr/saves/osa/location.json"
variable string windowName = "mr.osa.window"
method Initialize()
{
variable jsonvalue location
location:ParseFile["${locationStorageFile}"]
LGUI2:LoadPackageFile[osa.json]
LGUI2.Element["${windowName}"]:ApplyStyleJSON["${location.AsJSON~}"]
}
method Shutdown()
{
variable jsonvalue location = ${LGUI2.Element["${windowName}"].StorePlacement[1]}
location:WriteFile["${locationStorageFile}"]
LGUI2:UnloadPackageFile[osa.json]
}
method OnClose()
{
Script:End
}
method OnChangeTarget()
{
Actor[${SelectedItem}]:DoTarget
Context:SetHandled[1]
}
method RefreshMobs()
{
variable index:actor Actors
variable iterator ActorIterator
variable set CurrentActors
variable bool FireRefreshEvent=FALSE
EQ2:QueryActors[Actors, Type =- "NPC" && Target != NULL]
Actors:GetIterator[ActorIterator]
if ${ActorIterator:First(exists)}
{
do
{
if ${ActorIterator.Value.Target.Name.NotNULLOrEmpty}
{
; TODO: Maybe implement group/raid only checkbox instead of that being the default?
if ${Me.Name.Equal[${ActorIterator.Value.Target.Name}]} || ${Me.Group[${ActorIterator.Value.Target.Name}](exists)} || ${Me.Raid[${ActorIterator.Value.Target.Name}](exists)}
{
if !${ActorsWithTarget.Element[${ActorIterator.Value.ID}](exists)}
{
ActorsWithTarget:Set["${ActorIterator.Value.ID}", "${ActorIterator.Value.ID}", "${ActorIterator.Value.Name}", ${ActorIterator.Value.Health}, "${ActorIterator.Value.Target.Name}", ${ActorIterator.Value.ThreatToNext}, ${ActorIterator.Value.Distance}]
}
else
{
ActorsWithTarget.Element["${ActorIterator.Value.ID}"].TargetName:Set["${ActorIterator.Value.Target.Name}"]
ActorsWithTarget.Element["${ActorIterator.Value.ID}"].Health:Set["${ActorIterator.Value.Health}"]
ActorsWithTarget.Element["${ActorIterator.Value.ID}"].ThreatToNext:Set["${ActorIterator.Value.ThreatToNext}"]
ActorsWithTarget.Element["${ActorIterator.Value.ID}"].Distance:Set["${ActorIterator.Value.Distance}"]
}
FireRefreshEvent:Set[TRUE]
CurrentActors:Add["${ActorIterator.Value.ID}"]
}
}
}
while ${ActorIterator:Next(exists)}
}
if ${ActorsWithTarget.FirstKey(exists)}
{
do
{
if !${CurrentActors.Contains[${ActorsWithTarget.CurrentKey}]}
{
ActorsWithTarget:Erase[${ActorsWithTarget.CurrentKey}]
FireRefreshEvent:Set[TRUE]
}
}
while ${ActorsWithTarget.NextKey(exists)}
}
if ${FireRefreshEvent}
{
LGUI2.Element[MrOSAController.events]:FireEventHandler[onUpdateActors]
}
}
}
variable(global) OSAController MrOSAController
function main()
{
while 1
{
MrOSAController:RefreshMobs
wait 5
}
}

151
osa/osa.json Normal file
View File

@ -0,0 +1,151 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"templates": {
"ActorsWithTargetsView": {
"jsonTemplate": "listboxitem",
"padding": 2,
"content": {
"type": "stackpanel",
"orientation": "horizontal",
"children": [
{
"type": "textblock",
"width": 120,
"padding": 2,
"margin": [
0,
0,
2,
0
],
"textBinding": {
"pullFormat": "${_CONTEXTITEMDATA_.Get[Name]}",
"pullReplaceNull": ""
}
},
{
"type": "textblock",
"width": 45,
"padding": 2,
"textBinding": {
"pullFormat": "@ ${_CONTEXTITEMDATA_.Get[Health]}%",
"pullReplaceNull": ""
}
},
{
"type": "textblock",
"width": 75,
"padding": 2,
"textBinding": {
"pullFormat": "on ${_CONTEXTITEMDATA_.Get[TargetName]}",
"pullReplaceNull": ""
}
},
{
"type": "textblock",
"width": 45,
"padding": 2,
"textBinding": {
"pullFormat": "T: ${_CONTEXTITEMDATA_.Get[ThreatToNext]}",
"pullReplaceNull": ""
}
},
{
"type": "textblock",
"width": 45,
"padding": 2,
"textBinding": {
"pullFormat": "D: ${_CONTEXTITEMDATA_.Get[Distance]}",
"pullReplaceNull": ""
}
}
]
}
}
},
"elements": [
{
"type": "panel",
"visibility": "hidden",
"name": "MrOSAController.events"
},
{
"type": "window",
"title": "OSA",
"name": "mr.osa.window",
"borderThickness": 2,
"hideOnClose": false,
"minSize": {
"width": 175,
"height": 200
},
"height": 200,
"width": 350,
"maxSize": {
"width": 400,
"height": 300
},
"backgroundBrush": {
"color": [
0,
0,
0
]
},
"eventHandlers": {
"onCloseButtonClick": [
"method",
"MrOSAController",
"OnClose"
]
},
"content": {
"type": "stackpanel",
"uniform": true,
"heightFactor": 1,
"font": {
"face": "Terminal",
"fixed": true,
"height": 10
},
"children": [
{
"type": "listbox",
"name": "mobs",
"verticalAlignment": "stretch",
"horizontalAlignment": "stretch",
"itemsBinding": {
"pullFormat": "${MrOSAController.ActorsWithTarget.AsJSON[array]}",
"pullHook": {
"elementName": "MrOSAController.events",
"flags": "global",
"event": "onUpdateActors"
}
},
"eventHandlers": {
"onSelectionChanged": [
"method",
"MrOSAController",
"OnChangeTarget"
]
},
"selectedItemBinding": {
"pushFormat": [
"MrOSAController.SelectedItem:Set[\"",
"\"]"
],
"pullFormat": "${MrOSAController.selectedItem}"
},
"selectedItemBindingProperty": "ID",
"itemViewGenerators": {
"default": {
"type": "template",
"template": "ActorsWithTargetsView"
}
}
}
]
}
}
]
}

1
saves/osa/location.json Normal file
View File

@ -0,0 +1 @@
{"x":767.0,"y":1356.0,"xFactor":0.0,"yFactor":0.0,"width":361.0,"height":200.0,"widthFactor":0.0,"heightFactor":0.0,"minSize":[150.0,200.0],"maxSize":[400.0,300.0],"margin":[0.0,0.0,0.0,0.0],"padding":[0.0,0.0,0.0,0.0],"horizontalAlignment":"left","verticalAlignment":"top","opacity":1.0,"visibility":"visible","strata":0.50,"clipToParent":false,"anchorMode":"static","anchorLocation":[0.0,0.0],"anchorLocationFactor":[0.0,0.0],"anchorOffset":[0.0,0.0],"anchorOffsetFactor":[0.0,0.0]}

File diff suppressed because it is too large Load Diff

464
settings/setting_keys.json Normal file
View File

@ -0,0 +1,464 @@
{
"settings": [
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack",
"content": "Disable Cast Stack(CS)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_buffs",
"content": "Disable CS_Buffs",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_buffs\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_cure",
"content": "Disable CS_Cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_cure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_curecurse",
"content": "Disable CS_CureCurse",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_curecurse\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_heal",
"content": "Disable CS_Heal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_heal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_powerheal",
"content": "Disable CS_PowerHeal",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_powerheal\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_res",
"content": "Disable CS_Res",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_res\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_combat",
"content": "Disable CS_Combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_combat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_ca",
"content": "Disable CS_CA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disablecaststack_ca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_namedca",
"content": "Disable CS_NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_namedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nonnamedca",
"content": "Disable CS_NonNamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nonnamedca\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_debuff",
"content": "Disable CS_Debuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_debuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_nameddebuff",
"content": "Disable CS_NamedDebuff",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_nameddebuff\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disablecaststack_items",
"content": "Disable CS_Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_disablecaststack_items\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_cancelabilitiestogroupcure",
"content": "X abilities to group cure",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_cancelabilitiestogroupcure\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_forcenamedcatab",
"content": "Force NamedCA",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_forcenamedcatab\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
},
{
"type": "checkbox",
"name": "checkbox_settings_acceptloot",
"content": "Accept Loot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_acceptloot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot",
"content": "Loot Corpses/Chests",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_loot_incombat",
"content": "Loot InCombat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_loot_incombat\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_facenpc",
"content": "Face mob in combat",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_facenpc\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_rangedattack",
"content": "Ranged Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_rangedattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_meleeattack",
"content": "Melee Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_meleeattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movemelee",
"content": "Move into Melee Range",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movemelee\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movebehind",
"content": "Move behind mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movebehind\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_moveinfront",
"content": "Move in front of mob",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_moveinfront\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_turnoffattack",
"content": "Turn Off Attack",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_turnoffattack\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoremovetoattackhealthcheck",
"content": "Ignore NPC HP to move",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoremovetoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_ignoretargettoattackhealthcheck",
"content": "Ignore NPC HP (100%)",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting([\"checkbox_settings_ignoretargettoattackhealthcheck\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space1",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space1\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_consumeitems",
"content": "Enable Consume Items",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_consumeitems\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space3",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space3\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_disable_dbc_claim",
"content": "Disable DBC Claim",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_disable_dbc_claim\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space5",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space5\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_row2space6",
"content": "Spacer",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_row2space6\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_encountersmartnukes",
"content": "Encounter Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_encountersmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_aesmartnukes",
"content": "AE Smart Nukes",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_aesmartnukes\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_movetoarea",
"content": "Allow Camp Spot",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_movetoarea\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
},
{
"type": "checkbox",
"name": "checkbox_settings_assist",
"content": "Auto Assist",
"checkedBinding": {
"pullFormat": "MRBotController.GetSetting[\"checkbox_settings_assist\"]",
"pushFormat": [
"MRBotController:SetSetting[\"",
"\"]"
]
}
}
]
}

188
settings/settings.iss Normal file
View File

@ -0,0 +1,188 @@
; objectdef CastStackAbility
; {
; variable string Name
; variable string AbilityTarget
; variable string AbilityType
; variable int Percentage
; variable string Tag
; method Initialize(jsonvalueref jo)
; {
; This:FromJSON[jo]
; }
; method FromJSON(jsonvalueref jo)
; {
; Name:Set["${jo.Get[Name]~}"]
; AbilityTarget:Set["${jo.Get[AbilityTarget]~}"]
; AbilityType:Set["${jo.Get[AbilityType]~}"]
; Percentage:Set[${jo.Get[Percentage]~}]
; ; Tag:Set["${jo.Get[Tag]~}"]
; }
; member:jsonvalueref AsJSON()
; {
; variable jsonvalue jo="{}"
; jo:SetString[Name, "${Name~}"]
; jo:SetString[AbilityTarget, "${AbilityTarget~}"]
; jo:SetString[AbilityType, "${AbilityType~}"]
; jo:SetString[Percentage, ${Percentage~}]
; jo:SetString[Tag, "${Tag~}"]
; return jo
; }
; }
; objectdef CastStackContainer
; {
; variable index:CastStackAbility Abilities
; method AddAbilityFromJSON(jsonvalueref jo)
; {
; if !${jo.Type.Equal[object]}
; {
; return FALSE
; }
; Abilities:Insert[jo]
; }
; member:jsonvalueref AsJSON()
; {
; variable jsonvalue jo="[]"
; variable iterator abilityIterator
; Abilities:GetIterator[abilityIterator]
; if ${abilityIterator:First(exists)}
; {
; do
; {
; jo:Add["${abilityIterator.Value.AsJSON~}"]
; }
; while ${abilityIterator:Next(exists)}
; }
; return jo
; }
; }
; objectdef Profile
; {
; variable string Name
; variable jsonvalue Settings = "{}"
; variable jsonvalue Setup
; variable jsonvalue Aliases
; variable CastStackContainer CastStack
; method Initialize(jsonvalueref jo)
; {
; This:FromJSON[jo]
; }
; member:bool GetSettingValue(string key)
; {
; echo "Profile.GetSettingValue[${key}]"
; return ${This.Settings.Get["${key}"]}
; }
; method FromJSON(jsonvalueref jo)
; {
; Name:Set["${jo.Get["Name"]~}"]
; Settings:SetValue["${jo.Get["Settings"]~}"]
; Setup:SetValue["${jo.Get["Setup"]~}"]
; Aliases:SetValue["${jo.Get["Aliases"]~}"]
; jo.Get["CastStack"]:ForEach["CastStack:AddAbilityFromJSON[ForEach.Value]"]
; }
; member:jsonvalueref AsJSON()
; {
; variable jsonvalue jo="{}"
; jo:Set["Name", "${This.Name.AsJSON~}"]
; jo:Set["Settings", "${Settings.AsJSON~}"]
; jo:Set["Setup", "${Setup.AsJSON~}"]
; jo:Set["Aliases", "${Aliases.AsJSON~}"]
; jo:Set["CastStack", "${CastStack.AsJSON~}"]
; return jo
; }
; }
; objectdef BotSettings
; {
; variable string DefaultProfile
; variable collection:Profile Profiles
; method FromFile(string filename)
; {
; variable jsonvalue settingsJson
; variable BotSettings settings
; settingsJson:ParseFile["${filename}"]
; This:FromJSON[settingsJson]
; }
; member:bool IsSettingChecked(string key)
; {
; echo "BotSettings.IsSettingChecked[${key}]"
; return ${This.CurrentProfile.GetSettingValue["${key}"].Equal[TRUE]}
; }
; method FromJSON(jsonvalueref jo)
; {
; DefaultProfile:Set[${jo.Get["DefaultProfile"]}]
; variable jsoniterator profileIterator
; jo.Get["Profiles"]:GetIterator[profileIterator]
; if ${profileIterator:First(exists)}
; {
; do
; {
; Profiles:Set[${profileIterator.Key}, profileIterator.Value]
; }
; while ${profileIterator:Next(exists)}
; }
; }
; member:jsonvalueref AsJSON()
; {
; variable jsonvalue jo="{}"
; jo:Set[DefaultProfile, "${DefaultProfile.AsJSON~}"]
; jo:Set[Profiles, "${Profiles.AsJSON~}"]
; return jo
; }
; member:weakref CurrentProfile()
; {
; return Profiles.Element["${This.DefaultProfile}"]
; }
; }
objectdef SettingsController
{
method Initialize()
{
LGUI2:LoadPackageFile["${LavishScript.HomeDirectory}/scripts/mr/common/MRSkin.json"]
LGUI2:LoadPackageFile["settings.json"]
}
method Shutdown()
{
LGUI2:UnloadPackageFile["settings.json"]
Event[OnBotClose]:Execute
}
method OnClose()
{
Script:End
}
}
variable(global) SettingsController MRSettingsController
function main()
{
while 1
{
wait 5
}
}

71
settings/settings.json Normal file
View File

@ -0,0 +1,71 @@
{
"$schema": "http://www.lavishsoft.com/schema/lgui2Package.json",
"elements": [
{
"type": "window",
"title": "MR Bot Settings",
"name": "mr.bot.settings",
"borderThickness": 2,
"hideOnClose": false,
"minSize": {
"width": 450,
"height": 200
},
"maxSize": {
"height": 600,
"width": 800
},
"eventHandlers": {
"onCloseButtonClick": [
"method",
"MRSettingsController",
"OnClose"
]
},
"content": {
"type": "tabcontrol",
"heightFactor": 1,
"horizontalAlignment": "stretch",
"verticalAlignment": "stretch",
"tabs": [
{
"type": "tab",
"header": "General",
"content": {
"type": "dockpanel",
"_dock": "top",
"padding": 2,
"horizontalAlignment": "stretch",
"children": [
{
"type": "textblock",
"text": "General Settings",
"horizontalAlignment": "center",
"verticalAlignment": "center"
}
]
}
},
{
"type": "tab",
"header": "Cast Stack",
"content": {
"type": "dockpanel",
"_dock": "top",
"padding": 2,
"horizontalAlignment": "stretch",
"children": [
{
"type": "textblock",
"text": "Cast Stack Settings",
"horizontalAlignment": "center",
"verticalAlignment": "center"
}
]
}
}
]
}
}
]
}

View File

@ -0,0 +1,25 @@
function main()
{
; LavisSettings:AddSet[Test Set 1]
variable settingsetref Profiles
variable settingsetref CurrentProfile
variable settingsetref CastStack
LavishSettings:Import["EQ2Save_Antonia Bayle_Ihaihu.xml"]
Profiles:Set[${LavishSettings[Profiles]}]
CurrentProfile:Set[${Profiles.FindSet[${Profiles.FindSetting[DefaultProfiles]}]}]
CastStack:Set[${CurrentProfile.FindSet[CastStack]}]
variable iterator CastStackIterator
CastStack:GetSetIterator[CastStackIterator]
if ${CastStackIterator:First(exists)}
{
do
{
echo "${CastStackIterator.Value.FindSetting[Type]}: ${CastStackIterator.Value.FindSetting[__SourceName]}"
}
while ${CastStackIterator:Next(exists)}
}
}

39
test.iss Normal file
View File

@ -0,0 +1,39 @@
#include "${LavishScript.HomeDirectory}/Scripts/mr/common/KnowledgeBook.iss"
function main()
{
variable jsonvalue effect
effect:SetValue[$$>{
"description": "Inflicts 559 disease damage on targets in Area of Effect."
}<$$]
variable string description
description:Set["${effect.Get["description"]}"]
if ${description.Left[8].NotEqual["Inflicts"]}
{
echo "0"
return 0
}
variable int64 minDamage
variable int64 maxDamage
variable string damageType
minDamage:Set["${description.Token[2, " "].Replace[",", ""]}"]
if ${description.Token[3, " "].Equal["-"]}
{
maxDamage:Set["${description.Token[4, " "].Replace[",", ""]}"]
damageType:Set["${description.Token[5, " "]}"]
}
else
{
maxDamage:Set["${description.Token[2, " "].Replace[",", ""]}"]
damageType:Set["${description.Token[3, " "]}"]
}
echo "${description}"
echo "${minDamage} - ${maxDamage} ${damageType} damage"
}

View File

@ -0,0 +1,88 @@
objectdef MRConfigConverter
{
member OgreProfileToMRProfile(string ogreSettingsFilePath, string mrSettingsFilePath)
{
variable settingsetref ogreSetttings
variable settingsetref profiles
LavishSettings:Import[${ogreSettingsFilePath}]
profiles:Set[${LavishSettings[Profiles]}]
}
}
; objectdef SettingsHelper
; {
; method ConvertFromOgre(string settingsFile)
; {
; ; variable settingsetref Profiles
; ; variable settingsetref AliasSettings
; ; variable settingsetref CurrentProfile
; ; variable settingsetref CastStackSettings
; ; variable collection:CastStackAbility CastStack
; ; variable collection:string Aliases
; LavishSettings:Import[${settingsFile}]
; Profiles:Set[${LavishSettings[Profiles]}]
; CurrentProfile:Set[${Profiles.FindSet[${Profiles.FindSetting[DefaultProfiles]}]}]
; CastStackSettings:Set[${CurrentProfile.FindSet["CastStack"]}]
; AliasSettings:Set[${CurrentProfile.FindSet["Aliases"]}}]
; ; variable string settingsFile = "profiles/EQ2Save_${EQ2.ServerName}_${Me.Name}.xml"
; ; echo "Init ${settingsFile}"
; ; LavishSettings:Import[${settingsFile}]
; ; Profiles:Set[${LavishSettings[Profiles]}]
; ; CurrentProfile:Set[${Profiles.FindSet[${Profiles.FindSetting[DefaultProfiles]}]}]
; ; CastStackSettings:Set[${CurrentProfile.FindSet["CastStack"]}]
; ; AliasSettings:Set[${CurrentProfile.FindSet["Aliases"]}}]
; ; variable iterator CastStackIterator
; ; CastStackSettings:GetSetIterator[CastStackIterator]
; ; if ${CastStackIterator:First(exists)}
; ; {
; ; do
; ; {
; ; CastStack:Set[ \
; ; "${CastStackIterator.Value.FindSetting[__SourceName]}", \
; ; "${CastStackIterator.Value.FindSetting[__SourceName]}", \
; ; "${CastStackIterator.Value.FindSetting[Target]}", \
; ; "${CastStackIterator.Value.FindSetting[Type]}", \
; ; "${CastStackIterator.Value.FindSetting["%"]}", \
; ; "${CastStackIterator.Value.FindSetting[Tag]}"\
; ; ]
; ; }
; ; while ${CastStackIterator:Next(exists)}
; ; }
; ; variable iterator AliasIterator
; ; AliasSettings:GetSetIterator[AliasIterator]
; ; if ${AliasIterator:First(exists)}
; ; {
; ; do
; ; {
; ; echo "Alias: ${AliasIterator.Value.FindSetting["__SourceName"]}", "${AliasIterator.Value.FindSetting["For"]}
; ; Aliases:Set["${AliasIterator.Value.FindSetting["__SourceName"]}", "${AliasIterator.Value.FindSetting["For"]}"]
; ; }
; ; while ${AliasIterator:Next(exists)}
; ; }
; ; echo "######"
; ; echo "Aliases: ${Aliases.AsJSON~}"
; ; echo "######"
; ; variable BotSettings settings
; ; variable jsonvalue jo="{}"
; ; jo:Set["CastStack", "${CastStack.AsJSON~}"]
; ; jo:Set["Aliases", "${Aliases.AsJSON~}"]
; ; settings:FromJSON[jo]
; ; settings.AsJSON:WriteFile["profiles/${EQ2.ServerName}_${Me.Name}.json", TRUE]
; }
; member:BotSettings LoadSettings(string filename)
; {
; }
; }

View File

@ -0,0 +1,93 @@
objectdef MrNavigation
{
variable string autorun="num lock"
variable string forward=w
variable string backward=s
variable string strafeleft=q
variable string straferight=e
variable string turnleft=a
variable string turnright=d
method FollowPath(... path)
{
variable int index
for (index:Set[1]; ${index} < ${path.Size}; index:Inc)
{
variable point3f targetLocation
targetLocation:Set[${path[index]:Token[1,","]},${path[index]:Token[2,","]},${path[index]:Token[3,","]}]
echo ${targetLocation}
call This.MoveTo path[index]
}
}
function MoveTo(float x, float z, float percision)
{
if !${percision}
{
percision:Set[5]
}
variable float angle
echo "Moving to ${x}, ${z}"
press "${autorun}"
do
{
echo "${Math.Distance[${Me.X},${Me.Z}, x, z]} units away from target"
face ${x} ${z}
wait 5
}
while ${Math.Distance[${Me.X},${Me.Z}, locatoin.X, location.Z]} > ${percision}
press "${autorun}"
}
function Follow(int targetId)
{
echo "Following ${Actor[${targetId}].Name}"
if !${percision}
{
percision:Set[5]
}
variable float angle
variable point3f targetLocation
do
{
targetLocation:Set[${Actor[${targetId}].Loc}]
wait 5
if ${Actor[${targetId}].Distance} <= 3
{
if ${Me.IsMoving}
{
echo "Target is close enough"
press "${autorun}"
}
continue
}
else
{
if !${Me.IsMoving}
{
echo "Target is too far away"
press "${autorun}"
}
}
echo " ${Actor[${targetId}].Distance} units away from target"
face ${targetLocation.X} ${targetLocation.Z}
}
while TRUE
}
}
function main()
{
variable int followTargetId = ${Me.Target.ID}
variable MrNavigation nav
call nav.Follow ${followTargetId}
}

85
utilities/NpcHelpers.iss Normal file
View File

@ -0,0 +1,85 @@
objectdef QuestHelpers
{
member:bool IsQuestPending()
{
return ${EQ2UIPage[PopUp,RewardPack].Child[button,RewardPack.ButtonComposite.Accept](exists)}
}
method AcceptQuest()
{
EQ2UIPage[PopUp,RewardPack].Child[button,RewardPack.ButtonComposite.Accept]:LeftClick
}
}
objectdef NpcHelpers
{
variable QuestHelpers QuestHelper
function GetQuestFromNpc(... params)
{
if ${params.Size} < 1
{
echo "Usage: GetQuestFromNpc <NPC Name> [...Dialog Choices(optional)]"
return
}
variable string npcName = ${params[1]};
Actor[Query, Name =- "${npcName}"]:DoubleClick
if ${params.Size} > 1
{
variable int idx
for (idx:Set[2]; ${idx} <= ${params.Size}; idx:Inc)
{
variable string choice = ${params[i]};
EQ2UIPage[ProxyActor,Conversation].Child[composite,replies].Child[button,choice]:LeftClick
wait 5
}
}
else
{
variable int dialogOptionsTaken = 0;
do
{
dialogOptionsTaken:Inc
EQ2UIPage[ProxyActor,Conversation].Child[composite,replies].Child[button,1]:LeftClick
wait 5
}
while !${RewardWindow(exists)} && ${dialogOptionsTaken} < 10
}
wait 5
if ${QuestHelper.IsQuestPending}
{
wait 5
QuestHelper:AcceptQuest
}
else
{
echo "Quest not offered"
return
}
}
}
atom atexit()
{
echo "Exiting..."
}
function main()
{
; variable NpcHelpers NpcHelper
; variable NavHelpers NavHelper
; echo "Starting test"
; /*
; 910.060730,12.070809,239.235611
; 913.628540,10.217931,170.337494
; 907.632385,10.002500,152.857849
; 897.398376,10.180861,146.060623
; */
; ; wait 5
; ; call NpcHelper.GetQuestFromNpc "Germa"
; call NavHelper.FollowPath()
; return
}