mrbot/bot/bot.iss

204 lines
5.0 KiB
Plaintext

objectdef BotController
{
variable bool IsBotRunning = FALSE
variable bool IsShowingSettings = FALSE
variable jsonvalue savedSettings = "{}"
variable jsonvalue currentProfile = "{}"
variable jsoniterator castStackIterator
variable jsonvalue abilities = "{}"
method Initialize()
{
LGUI2:LoadPackageFile["bot.json"]
savedSettings:ParseFile["${LavishScript.HomeDirectory}/scripts/mr/bot/profiles/${Me.Name}_${Me.SubClass}.json"]
if ${savedSettings.Type.NotEqual["object"]}
{
echo "Error parsing saved settings"
return
}
abilities:ParseFile["${LavishScript.HomeDirectory}/scripts/mr/bot/ability_exports/${Me.Name}_${Me.SubClass}.json"]
if ${jo.Type.NotEqual["object"]}
{
echo "Error parsing ability list"
return
}
currentProfile:SetValue["${savedSettings.Get[${savedSettings.Get["default"]}]}"]
currentProfile.Get["castStack"]:GetIterator[castStackIterator]
}
method Shutdown()
{
LGUI2:UnloadPackageFile["bot.json"]
}
member:string StartButtonText()
{
if ${IsBotRunning}
{
return "Stop"
}
else
{
return "Start"
}
}
member:string SettingsButtonText()
{
if ${IsShowingSettings}
{
return "Hide Settings"
}
else
{
return "Show Settings"
}
}
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}]
}
member:jsonvalueref GetHighestVersionOfAbility(string abilityName)
{
if !${abilityName(exists)}
{
echo "ability name not set"
return
}
variable jsonvalueref highestVersion = "{}"
variable jsoniterator abilityIterator
abilities.Get["${abilityName}"]:GetIterator[abilityIterator]
if ${abilityIterator:First(exists)}
{
do
{
if !${highestVersion.Get["level"]}
{
highestVersion:SetReference[abilityIterator.Value]
}
elseif ${highestVersion.Get["level"]} < ${abilityIterator.Value.Get["level"]}
{
highestVersion:SetReference[abilityIterator.Value]
}
}
while ${abilityIterator:Next(exists)}
}
return highestVersion
}
member:string GetBuiltinAlias(string aliasName)
{
if ${aliasName.Equal["@Me"]}
{
return Me.Name
}
}
member:string GetActualTarget(string givenTarget)
{
if ${givenTarget.Left[1].Equal["*"]}
{
; look up alias
}
elseif ${givenTarget.Left[1].Equal["@"]}
{
; built up alias
return This.GetBuiltinAlias[${givenTarget}]
}
elseif ${givenTarget.Left[4].Equal["Pet:"]}
{
; pet
}
else
{
return givenTarget
}
}
method Pulse()
{
if ${IsBotRunning.Not}
{
return
}
variable int64 currentAbilityId
variable string abilityTarget
if ${Me.CastingSpell}
{
return
}
if ${castStackIterator:First(exists)}
{
do
{
if ${castStackIterator.Value.Get["action"].Equal["ability"]} && ${castStackIterator.Value.Get["type"].Equal["Buff"]}
{
currentAbilityId:Set[${This.GetHighestVersionOfAbility[${castStackIterator.Key}].Get["id"]}]
if ${currentAbilityId} > 0
{
if ${Me.Ability[id, ${currentAbilityId}].IsReady}
{
abilityTarget:Set[]
echo "Target ${castStackIterator.Value.Get["target"]}"
echo "Casting ${castStackIterator.Key}"
Me.Ability[id, ${currentAbilityId}]:Use
return
}
}
}
}
while ${castStackIterator:Next(exists)}
}
}
}
#include "settings_controller.iss"
variable(global) BotController MRBotController
variable(global) SettingsController MRSettingsController
function main()
{
while 1
{
MRBotController:Pulse
wait 5
}
}