FFXIV-CombatReborn / BossmodReborn

BossMod FFXIV dalamud plugin, but with modules
33 stars 32 forks source link

Bossmod Reborn - output error #431

Closed Theletha closed 3 weeks ago

Theletha commented 3 weeks ago

I keep getting these errors from a snd script trying to send commands to bossmod, im running same script on other instances using same files and they are not showing that error.

[12:25]Field not found OverridePositional, Valid fields: [12:25]- ShowDTR [12:25]- DrawUI [12:25]- FocusTargetLeader [12:25]- BroadcastToSlaves [12:25]- FollowSlot [12:25]- ForbidActions [12:25]- ForbidMovement [12:25]- FollowDuringCombat [12:25]- FollowDuringActiveBossModule [12:25]- FollowOutOfCombat [12:25]- FollowTarget [12:25]- DesiredPositional [12:25]- MaxDistanceToSlot [12:25]- MaxDistanceToTarget

[12:23]Failed to set AIConfig.MaxDistanceToTarget to 2.6: System.FormatException: The input string '2.6' was not in a correct format. at System.Number.ThrowFormatException[TChar](ReadOnlySpan1 value) at BossMod.ConfigRoot.FromConsoleString(String str, Type t) in D:\a\BossmodReborn\BossmodReborn\BossMod\Config\ConfigRoot.cs:line 173 at BossMod.ConfigRoot.ConsoleCommand(IReadOnlyList1 args, Boolean save) in D:\a\BossmodReborn\BossmodReborn\BossMod\Config\ConfigRoot.cs:line 82

Im not sure why it is pointing to a D: drive when i have nothing there, quite weird? image

CarnifexOptimus commented 3 weeks ago

Did you find out the cause of the problem since you closed the issue?

Theletha commented 3 weeks ago

Did you find out the cause of the problem since you closed the issue?

it seems to be working better with a updated script but the new script is not working so good for me on other parts instead so im stuck using the older one still.

This is the scirpt

`gearsets = {
0, 0, 0
}
repairat = 30
dorepairs = true
selfrepair = false
targeting = 5
retryque = 25
gracetime = 180
killclient = false
repairgil = 9000
maxpraetime = 1200
dochat = 1
zoneid = 1044
nofruns = 0
confplugins = true

--[[ .

]]

keepgoing = true leader = false leadertest = false gearfine = true inprae = 0 notarget = 0 isdead = 0 currentgear = 0 maxzone = 0 zoneleft = 0 targetcooldown = 0 outprae = 0 grace = 0 reque = 0 runsdone = 0 bossmode = 0 bossposition = "Any" trashposition = "Any" bossrange = 2.6 trashrange = 2.6

local function isLeader() return leader end

local function getPositions() -- Proto Ultima Arm Unit -- Magitek Vanguard H-1 -- Magitek Colossus -- Cermet Blast Door

-- Paladin 19, Warrior 21, Dark Knight 32, Gunbreaker 37 -- Monk 20, Dragoon 22, Ninja 30, Samurai 34, Reaper 39, Viper 31 -- White Mage 24, Scholar 28, Astrologian 33, Sage 40 -- Bard 23, Machinist 31, Dancer 38 -- Black Mage 25, Summoner 27, Red Mage 35, Pictomancer 42, Blue Mage 36

-- Positional will be role based: Tank front, healer rear, dps flank -- Distance will be set based on efficient AoE distance, but swapped for some classes against boss (e.g. dancer and scholar move back) -- Positionals: 0 = any, 1 = flank, 2 = rear, 3 = front myClass = GetClassJobId() trashposition = 0 if myClass == 19 or myClass == 21 or myClass == 32 or myClass == 37 then -- tank bossposition = 3 bossrange = "4,0" trashrange = "2,6" end if myClass == 20 or myClass == 22 or myClass == 30 or myClass == 34 or myClass == 31 then -- melee dps bossposition = 1 bossrange = "4,0" trashrange = "2,6" end if myClass == 24 or myClass == 28 or myClass == 40 then -- healer bossposition = 2 if myClass == 24 then -- whm always ranged, others melee trash trashrange = "6,0" else trashrange = "2,6" end if myClass == 28 then -- sch always melee (ok autoattack dps), others ranged boss bossrange = "4,0" else bossrange = "8,0" end end if myClass == 23 or myClass == 31 or myClass == 38 then -- physical ranged bossposition = 1 bossrange = "10,0" if myClass == 38 then -- dancer melee trash trashrange = "2,6" else trashrange = "6,0" end end if myClass == 25 or myClass == 27 or myClass == 35 or myClass == 42 then -- magic dps except BLU bossposition = 1 if myClass == 35 then -- red mage is sort of hybrid melee bossrange = "4,0" trashrange = "2,6" else -- others can stay at range at all times bossrange = "10,0" trashrange = "6,0" end end if myClass == 36 then -- blue mage can do whatever bossposition = 1 bossrange = "8,0" trashrange = "6,0" end return end

local function setPosition() if not HasTarget() then return end myTarget = GetTargetName() if type(myTarget == "string") and ( myTarget == "Nero tol Scaeva" or myTarget == "Magitek Death Claw" or myTarget == "Mark II Magitek Colossus" or myTarget == "Gaius van Baelsar" or myTarget == "Phantom Gaius" ) then if bossmode == 1 then return end getPositions() yield("/vbm cfg AIConfig DesiredPositional " .. bossposition) yield("/vbm cfg AIConfig MaxDistanceToTarget " .. bossrange) bossmode = 1 return end if bossmode == 2 then return end getPositions() yield("/vbm cfg AIConfig DesiredPositional " .. trashposition) yield("/vbm cfg AIConfig MaxDistanceToTarget " .. trashrange) bossmode = 2

return

end

local function swapgear() -- swap to next gearset if available. -- return true if swapped, false if not (indicating need to repair)

currentgear = currentgear + 1
if currentgear > #gearsets or gearsets[currentgear] == 0 then
    currentgear = currentgear - 1
    return false
end

yield("/gs change " .. gearsets[currentgear])
yield("/wait 2")
return true

end

local function chat(message) if dochat == 2 then yield("/p " .. message) end if dochat == 1 then yield("/echo " .. message) end return end

local function leaveDuty() yield("/ad stop") while IsInZone(zoneid) do if IsAddonVisible("SelectYesno") then yield("/click SelectYesno Yes") else yield("/leaveduty") end yield("/wait 2") end return end

local function clearContentsFinderConfirm() if IsAddonVisible("ContentsFinderConfirm") and IsAddonReady("ContentsFinderConfirm") then yield("/click ContentsFinderConfirm Withdraw") end return end

local function testLeader(enternow) local lisleader = false

if leadertest then
    return
end

-- if we start inside instance, can only assume someone else brought us there
if IsInZone(zoneid) then
    leadertest = true
    return false
end

PauseYesAlready()
if IsAddonVisible("ContentsFinder") then
    yield("/pcall ContentsFinder true -1")
    while IsAddonVisible("ContentsFinder") do
        yield("/wait 0.1")
    end
end
yield("/wait 0.5")
yield("/finder")
yield("/wait 2.5")
if IsAddonVisible("ContentsFinder") then
    yield("/pcall ContentsFinder true -1")
    while IsAddonVisible("ContentsFinder") do
        yield("/wait 0.1")
    end
else
    lisleader = true
    if enternow then
        RestoreYesAlready()
        if IsAddonVisible("ContentsFinderConfirm") and IsAddonReady("ContentsFinderConfirm") then
            yield("/click ContentsFinderConfirm Commence")
        end
        yield("/wait 0.5")
        return lisleader
    end
end
RestoreYesAlready()
yield("/wait 0.5")
clearContentsFinderConfirm()
yield("/wait 0.5")
leadertest = true
return lisleader

end

local function goRepair() gearfine = true -- we're not multithreading, so just be preemptive

if swapgear() then
    return
end

-- we're at end of gearsets, swap back to first one
currentgear = 0
swapgear()

if not dorepairs then
    -- we're not to do repairs, so all we can do is just
    -- swap gearsets every run from here on, and hope they last
    return
end

-- here we do repairs for first set

yield("/ad repair")
iloop = 15
while iloop > 0 do
    clearContentsFinderConfirm()
    yield("/wait 1")
    iloop = iloop - 1
end

-- we should now bet at repair person, loop through the rest of the sets
while swapgear() do
    yield("/ad repair")
    iloop = 5
    while iloop > 0 do
        clearContentsFinderConfirm()
        yield("/wait 1")
        iloop = iloop - 1
    end
end

-- finally go back to inn and swap back to original first set

yield("/ad goto inn")
iloop = 15
while iloop > 0 do
    clearContentsFinderConfirm()
    yield("/wait 1")
    iloop = iloop - 1
end

yield("/ad stop")

currentgear = 0
swapgear()
return

end

if confplugins then -- rsr settings RSRChangeOperatingMode(1) yield("/rotation Settings AutoOffBetweenArea False") yield("/rotation Settings AutoOffSwitchClass False") yield("/rotation Settings AutoOffCutScene False") yield("/rotation Settings AddEnemyListToHostile True") yield("/rotation Settings OnlyAttackInEnemyList False") yield("/rotation Settings AutoOffAfterCombat False") yield("/rotation Settings AutoOffWhenDead False") yield("/rotation Settings AutoOffWhenDutyCompleted False") yield("/rotation Settings AoEType Full") yield("/rotation Settings HostileType AllTargetsWhenSoloInDuty") -- bossmod ai on yield("/vbmai on") -- ad settings yield("/ad cfg AutoExitDuty false") yield("/ad cfg AutoManageVnavAlignCamera true") yield("/ad cfg OverridePartyValidation true") if dorepairs then yield("/ad cfg AutoRepair true") yield("/ad cfg AutoRepairPct " .. repairat) if selfrepairs then yield("/ad cfg AutoRepairSelf true") else yield("/ad cfg AutoRepairSelf false") end end yield("/ad cfg FollowDuringCombat true") yield("/ad cfg FollowDuringActiveBossModule true") yield("/ad cfg FollowOutOfCombat false") yield("/ad cfg FollowTarget true") yield("/ad cfg FollowSelf true") yield("/ad cfg maxDistanceToTargetRoleBased false") yield("/ad cfg PositionalRoleBased false") yield("/ad cfg autoManageBossModAISettings false") yield("/ad cfg HideBossModAIConfig true")

yield("/vbm cfg AIConfig FollowDuringCombat true")
yield("/vbm cfg AIConfig FollowDuringActiveBossModule true")
yield("/vbm cfg AIConfig FollowOutOfCombat false")
yield("/vbm cfg AIConfig FollowTarget true")
yield("/vbm cfg AIConfig FollowSlot 0")

end

leader = testLeader(true) if leader then chat("I'm the leader") else chat("I'm NOT the leader") end

if currentgear == 0 and repairat > 0 then swapgear() end

if confplugins then setPosition() end

while keepgoing do yield("/wait 1") -- wait 1 second, this is also timer for instance if IsInZone(zoneid) then zoneleft = GetContentTimeLeft() if type(zoneleft) == "number" and zoneleft > 100 then if zoneleft > maxzone then maxzone = zoneleft end inprae = maxzone - zoneleft if inprae > 60 then if IsAddonVisible("SelectYesno") and IsAddonReady("SelectYesno") then yield("/click SelectYesno Yes") end if IsPlayerDead() then isdead = isdead + 1 if isdead > 120 then chat("I'm dead, bye") leaveDuty() end else isdead = 0 end if inprae > maxpraetime then chat("This is taking forever, I'm out") NavRebuild() while not NavIsReady() do yield("/wait 1") end leaveDuty() end end end end if IsPlayerAvailable() and not IsPlayerDead() then if IsInZone(zoneid) then -- -------------- inside prae

        if gearfine and repairat > 0 and NeedsRepair(repairat) and not (GetGil() < repairgil) then
            chat("I'll need repairs after this run")
            PauseYesAlready()
            gearfine = false
        end

        if confplugins then
            setPosition()
        end

        if targeting > 0 and not HasTarget() then
            targetcooldown = targetcooldown - 1
            if targetcooldown < 1 then
                TargetClosestEnemy(30)
                targetcooldown = targeting
            end
        else
            targetcooldown = targeting
        end

    else -- -------------- outside prae

        if not gearfine then
            goRepair()
            RestoreYesAlready()
        end

        if inprae > 0 then
            -- we have just returned, stop ad and start counting time outside
            runsdone = runsdone + 1
            chat("I think we finished run " .. runsdone)
            yield("/ad stop")
            bossmode = 0
            inprae = 0
            outprae = 0
            if nofruns > 0 and runsdone == nofruns then
                gracetime = 1
            end
        end

        outprae = outprae + 1
        if gracetime > 0 and outprae > gracetime then
            keepgoing = false
            if killclient then
                if HasPlugin("AutoRetainer") then
                    yield("/ays shutdown 0:0:10")
                else
                    CrashTheGame()
                end
            end
        end

        if isLeader() then
            reque = reque + 1
            if reque > retryque then
                if IsAddonVisible("ContentsFinder") then
                    yield("/pcall ContentsFinder true -1")
                else
                    reque = 0
                    yield("/finder")
                end
            end -- leader or not
        end -- inprae counter
    end -- prae or not
end -- player available

end -- main loop `

McVaxius commented 3 weeks ago

shouldn't you post this over in the snd channel ? i feel like this isnt a bossmod problem

this looks like rituskos script