204 lines
5.0 KiB
Plaintext
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
|
|
}
|
|
} |