[Beta] Scenario Scripting Engine

Forum Forums Discussion [Beta] Scenario Scripting Engine

This topic contains 123 replies, has 52 voices, and was last updated by Miqobot Miqobot 1 year, 1 month ago.

Viewing 15 posts - 1 through 15 (of 124 total)
  • Author
  • #3193

    EDIT: Scenario Engine is available in full release.
    When the important Shadowbringers upgrades are in place, new features will be branched off into beta again.

    Download Miqobot


    We happily present you Miqobot v1.2.6 Beta ๐Ÿ™‚
    This release introduces a brand new layer of Miqobot – scripting engine to connect and streamline activities in almost any way you can imagine.

    Scenario Engine

    What Is Scenario

    You can think of scenario as an adventure, a movie script written by you, starring your character.
    Miqobot is the director and you are the creator.
    You describe what you want to see, and Miqobot follows your instructions to recreate the finished movie directly on your screen.

    Scenario consists of chapters.
    A chapter is a sequence of logically connected actions made to achieve a certain goal.
    For example, when you want to fish, you teleport to a desired location, navigate to a fishing spot, equip a bait, choose what skills to use, decide how long to do it, and then finally start fishing. Until today Miqobot could only do the last step. From now on she is capable to do all of them. You only have to tell her what exactly to do.

    Chapter consists of script lines.
    Each script line describes a single action – teleport, navigate, select bait. In technical language we call them functions.

    Function consists of function name and arguments.

    • Name describes the action itself: teleport.
    • Arguments describe details: teleport(where).

    So if you want to teleport to Zenith, you would write: teleport(Zenith)

    And that’s it.
    By combining multiple actions together you create a detailed script of what you want Miqobot to do with your character. She will follow your script step by step and will try her best to recreate your adventure.


    This is the list of currently implemented functions.
    Full documentation is available directly in Miqobot. Press ? button to open it.

    Please note that many functions have aliases.
    Aliases are designed to make script easier to write, read, and manage. We highly recommend using aliases whenever possible.

    1. startFishing() – Commence fishing.
    2. startGathering() – Commence gathering.
    3. startCrafting() – Commence crafting.
    4. startDesynthesis() – Commence desynthesis.
    5. startRacing() – Commence chocobo racing.
    6. startMinigames() – Commence minigames activity.
    7. startSquadronDungeons() โ€“ Commence squadron dungeons activity.
    8. startAetherialReduction() – Commence aetherial reduction.
    9. startMateriaExtraction() – Extract materia from equipped gear.
    10. deliverCollectables() – Deliver collectables to the closest NPC.
    11. deliverGCGear() โ€“ Make expert delivery to the closest NPC.
    12. diademBoom() โ€“ Release a blast of Aetheromatic Auger.
    13. diademBoomTarget() – Add target for Aetheromatic Auger.
    14. selectFishPreset() – Select preset for fishing.
    15. selectGatherPreset() – Select preset for gathering.
    16. selectGatherRotation() – Select rotation for gathering.
    17. selectCraftMacro() – Select macro for crafting.
    18. selectSolverPreset() – Select preset for crafting solver.
    19. selectDesynthesisList() – Select preset for desynthesis.
    20. selectGrid() – Select grid for navigation.
    21. selectRaceWaypoints() – Select waypoints for chocobo racing.
    22. sendKey() – Send key into the game.
    23. sendIcon() – Press hotbar icon.
    24. holdKey() – Hold key in the game.
    25. afkFor() – Do nothing for amount of time.
    26. afkUntil() – Do nothing until specified time.
    27. workFor() – Stop next activity after amount of time.
    28. workUntil() – Stop next activity at specified time.
    29. randomAfkFor() – Do nothing for random number of seconds.
    30. addGoodWeather() – Add specified weather to whitelist.
    31. skipBadWeather() – Check whitelist for current weather.
    32. resetGoodWeather() – Clear weather whitelist.
    33. goToXYZ() – Navigate to specified coordinates.
    34. goToWaypoint() – Navigate to waypoint on the grid.
    35. goToWaypointPrecise() – Navigate to precise coordinates of the specified waypoint.
    36. goToRandomWaypoint() – Navigate to random waypoint from the list.
    37. goToRandomNearby() – Navigate to random coordinates in the vicinity of waypoint.
    38. goToZoneGate() – Navigate to another zone and wait until it loads.
    39. turnToAngle() – Turn camera to specified horizontal angle.
    40. turnToVAngle() – Turn camera to specified vertical angle.
    41. mount() – Summon a mount.
    42. dismount() – Dismiss a mount.
    43. fly() – Rise in the air.
    44. land() – Land on the ground.
    45. sneak() – Activate sneak.
    46. unsneak() – Deactivate sneak.
    47. sit() – Sit down.
    48. standUp() – Stand up.
    49. repair() – Mend equipment with dark matter.
    50. repairNpc() โ€“ Mend equipment at the closest NPC.
    51. return() – Return to your home point.
    52. teleport() – Teleport to previously attuned aetheryte.
    53. teleportIfNotThere() – Teleport to previously attuned aetheryte.
    54. teleportNpc() – Teleport using NPC or aethernet.
    55. changeJob() – Equip gear set of specified class or job.
    56. changeBait() – Equip new bait for fishing.
    57. changeGig() – Equip new gig for spearfishing.
    58. findFish() – Find fishing spot in given direction.
    59. setFishNoIntuitionBait() – Bait to equip when no Fisher’s Intuition.
    60. setFishNoIntuitionPreset() – Preset to select when no Fisher’s Intuition.
    61. setFishIntuitionBait() – Bait to equip when Fisher’s Intuition is active.
    62. setFishIntuitionPreset() – Preset to select when Fisher’s Intuition is active.
    63. addFishMoochPreset() – Preset to select when moochable fish is hooked.
    64. addFishMoochBlacklist() – Prevent mooching specified fish.
    65. holdFishMoochUntil() – Hold a moochable fish until specified time.
    66. setFishPatienceGP() – Set the required GP amount for Patience to activate.
    67. setFishWeatherBait() – Assign bait to switch during specified weather.
    68. setFishWeatherPreset() – Assign preset to select during specified weather.
    69. setFishDoubleHookTug() – Limit double hook usage to specific tugs.
    70. gatherTouch() – Open and close gathering node.
    71. setGatherSlot() โ€“ Set slot number for gathering.
    72. addGatherRotationIfGP() – Add gathering rotation to GP-based selector.
    73. setCraftRecipe() – Craft next recipe by name.
    74. setCraftNQHQRatio() – Define preferred NQ:HQ ratio for next recipe.
    75. setCraftIgnoreQuality() – Define “ignore quality” setting.
    76. setAutoSneak() – Define “auto-sneak” setting.
    77. setAutoSprint() – Define “auto-sprint” setting.
    78. setRaceClass() – Set class for chocobo racing.
    79. setRaceCourse() – Set course for chocobo racing.
    80. setRaceAbility() – When to use abilities in chocobo racing.
    81. setRaceAccelerate() – Set accelerate condition in chocobo racing.
    82. setRaceDecelerate() – Set decelerate condition in chocobo racing.
    83. setMinigameDifficulty() – Set difficulty for MGP minigames.
    84. setMinigameEachCount() – How many times to play each MGP minigame before switching.
    85. setMinigameDoubleUntil() – Set condition for Double Down choice in MGP minigames.
    86. setMinigamePlayFor() – How many minutes to play MGP minigames.
    87. setMinigameAfkFor() – How many minutes to afk at MGP minigames.
    88. setSquadronDungeon() โ€“ Select a dungeon preset for squadron dungeons.
    89. setSquadronFullClear() โ€“ Set โ€œfull clearโ€ setting for squadron dungeons.
    90. setSquadronOpenCoffers() โ€“ Set โ€œopen coffersโ€ setting for squadron dungeons.
    91. koCheckpoint() – Set the current chapter and line as KO checkpoint.
    92. koSetCatchUp() – Mark the current chapter as catch-up chapter.
    93. koResetCatchUp() – Forget the previously marked catch-up chapter.
    94. repeatChapter() – How many times to repeat current chapter.
    95. repeatChapterFor() – Repeat current chapter for amount of time.
    96. repeatChapterUntil() – Repeat current chapter until specified time.
    97. repeatAll() – How many times to repeat scenario.

    In addition, a script may contain comments.
    Type // to write a comment. Anything after // is considered common text and is not interpreted by Miqobot.

    An important note!
    The previous version of Miqobot is not aware of scenarios. If you launch Miqobot v1.2.54 from the same folder, your scenarios and new presets will be lost.

    Of course, you can always restore them from automatic backups.

    Planned Functions

    This is only the beginning.
    There will be many more actions available in the future. We will be making new functions for you to experiment with.

    • Vendor NPC interactions.
    • Equipping recommended gear.
    • Retrieving items from retainer.
    • Assigning retainer ventures.
    • Converting spiritbonded gear.
    • Accepting and initiating levequests.
    • Training chocobos in stables.
    • Custom popups.
    • Switching chapters and scenarios.
    • Fish whitelist to customize Release feature.
    • GP-based and hidden-based rotations selection.
    • Smart cordials usage.
    • Smart food and manuals usage.

    There are already lots of accepted feature requests that will be implemented as addional modules for Scenario Engine.
    But first, please try creating scenarios with the current toolkit.
    And please give us your feedback!


    Scenario Examples

    (This post is reserved for examples.)


    Additional Features

    Scenario Engine is the main theme of this release.
    But it is worth noting there are some minor adjustments and improvements to existing features as well.

    To avoid distracting your attention too much, we’ll just name a few.

    • General: Gathering presets are implemented. Now you can select grid and gathering rotation in a single click.
    • General: Crafting Solver presets are implemented. Two presets are created by default: ‘recommended’ and ‘fastest’.
    • General: Scenarios are added to Import / Export.
    • General: Feast Hellhound mounts are supported.
    • General: Mount roulettes are supported.
    • Gathering: Error recognition is implemented. If you run out of inventory space during gathering, Miqobot will automatically stop.
    • Gathering: Aetherial reduction is implemented. It’s a scenario function startAetherialReduction().
    • Crafting: Automatic selection of NQ/HQ materials is implemented.
    • Crafting: ‘Max’ count is implemented. When specified, Miqobot will craft as many items as possible.
    • MGP Minigames: Navigation is improved. Miqobot will no longer run through center of the room, but instead use an integrated grid.
      (If it’s still not enough for you, you can create custom randomized routes with Scenario Engine.)


    This looks awesome thanks so much for all of your hard work!


    This is really nice news, thank you! Time to try scenarios ^^


    Thanks ! Seems difficult xD


    As a fellow programmer, this is awesome! Will definitely be writing up some custom scenarios. Great work!

    • This reply was modified 5 years, 1 month ago by IceDeathTK IceDeathTK.


    Fantastic, thank you so much! A question, though, since I don’t see it on the list (or I missed it); can we also set it up to buy from NPCs? (for desynthing grinds)



    Looks interesting! Can we teleport to set coordinates?

    It would be also cool to setup a keybind to quickly teleport to anywhere on the map?

    • This reply was modified 5 years, 1 month ago by  seeshiv.

    Fantastic, thank you so much! A question, though, since I donโ€™t see it on the list (or I missed it); can we also set it up to buy from NPCs? (for desynthing grinds)

    Not at the moment, this is one of the next functions in our todo list ๐Ÿ™‚
    We apologize for inconvenience.


    Looks interesting! Can we teleport to set coordinates?

    No, only to attuned aetherytes. Teleporting to coordinates is a hack and we will never implement hacks ๐Ÿ™‚
    You can however navigate to any specific coordinates.



    Looks interesting! Can we teleport to set coordinates?

    No, only to attuned aetherytes. Teleporting to coordinates is a hack and we will never implement hacks ๐Ÿ™‚
    You can however navigate to any specific coordinates.

    right! okay, makes sense. Thank you for the quick reply.



    Fantastic, thank you so much! A question, though, since I donโ€™t see it on the list (or I missed it); can we also set it up to buy from NPCs? (for desynthing grinds)

    Not at the moment, this is one of the next functions in our todo list ๐Ÿ™‚
    We apologize for inconvenience.

    You are actually able to buy from NPCs using key commands for example

    key(num12) //select the closest NPC
    key(num0) //activate the npc
    key(num2) //scroll down through npc until you find the item repeat as needed
    key(num0) //buy the item
    key(esc) //close out of menus

    The idea is that you can treat it as you would if you use a controller. Because vendor items don’t change order this should be safe to use over and over again.

    Happy times. This gives us sooo much power now to come up with custom scenarios.

    • This reply was modified 5 years, 1 month ago by  ExarchCoercer.
    • This reply was modified 5 years, 1 month ago by  ExarchCoercer.

    Yes, you are right.
    This is the idea behind sendKey() and sendIcon() functions. The only flaw is that you can’t move mouse too much, or some keys will miss. And that’s why we are planning to implement more robust functions which will constantly receive feedback from the game and verify every step.

    But of course, you have the absolute right to use your imagination to create new ways and new activities. And we will be supporting your ideas by enhancing and polishing tools at your disposal ๐Ÿ™‚

    Thank you for your feedback very much!



    Thank you Miqobot! Very excited!

    @exarchcoercer That’s awesome thanks!

    Here is a breakdown of a scenario that I’m working on… As this is the Gold Saucer event, it seems timely!

    Go into Gold Saucer…
    Teleport to minion square,
    Move over by the mini games (I always start at a specific machine, I’m a miqo of habit!)
    Use an item “Gold Saucer VIP Card” (Do this with a hot bar button press)
    Start playing the games!
    Now wait till 44 minutes after the hour real time (I see a few options to do this… not sure which one works best yet)
    Navigate to the tele crystal in minion square
    Teleport to event square,
    navigate to GATE NPC, and talk to them

    Now here is where things get tricky….
    If it is “Typhoon”… I want to join the gate! ExarchCoercer’s method works for selecting options, and I can use the navigation to get to the spot I want and wait for the gate to end…

    How do I get MiqoBot to detect if its going to be the Typhoon GATE? I want to just go back to minigames if it turns out to be one of the other gates. (I suck at that dancing one)

    Anyone have any thoughts?

Viewing 15 posts - 1 through 15 (of 124 total)

The topic ‘[Beta] Scenario Scripting Engine’ is closed to new replies.