Vuu combat system for Nexus

RocketCatRocketCat Posts: 96Member ✭✭✭

Hi everyone! This thread marks the release of my PvP system for Nexus. The system is free and works for all classes. This is the third rewrite of a combat system I’ve done for Starmourn, so I’ve taken the lessons learned and tried my best to implement them here. You can use Vuu as a starting point for the development of your own personalized system with more advanced tricks, or you can just use Vuu as it is. Vuu has everything someone with no PvP experience needs to get started. Experienced PvPers can use this to hop on an alt and start playing around with the other classes and maybe learn a thing!


- Automation, should you choose to accept it: Vuu offers command automation to send commands automatically. By default there are 5 varieties of such commands, which may be moved around in priority in any order: Keepup, Queue, Offense, Heal, and Mend. Each is discussed separately below. For most classes, if Vuu does not find a command from one of these subroutines, it will send a default command (the spammable combat skill for the offensive strategy you’re using).

-NB: You can use Vuu without automation and it will still keep track of everything for you, or you can select which subroutines out of the above you want to automate and keep the remainder manual. Several setting profiles (below) allow you to control whether Vuu is ‘automated’, ‘assisted’, or ‘manual’, and otherwise you can tweak the settings to your liking.

- Defups and keepups: Define a list of defs that you want to have up from the moment you login or after you die and Vuu will set them up for you. You can also define a separate list of keepup defs which Vuu will reapply if they are lost for any reason in the flow of combat. (Note that due to the present limitations of GMCP Char.Defences.List this is a bit janky).

- Heal: Simple enough, define a threshold to use your class heal if you have heal balance.

- Mend: Define a set of mending priorities and Vuu will try to mend systems if they’re damaged and below a defined threshold and above a defined efficacy. In case the efficacy of the #1 priority system is getting low it can also perform a lookahead to the second priority to see if it should be mended instead (for matchups where you need to defend two systems).

- Offense: Each class comes with one implemented class offense logic. They are not particularly advanced or self-aware but they’re enough to start killing your friends. When you’re ready, you can start defining your own offense logics and Vuu lets you switch between offense logics on the fly.

- Queue: In certain situations you will want to load an array of commands which you want to send in order, particularly starter and finisher combos for some classes but also some mid-fight ones. You can either load things up to the queue via aliases or load up pre-defined combos.

- Balance methods: Vuu can send commands on balance recovery or to the queue on balance use. Sending to the queue is recommended as a general practice since it will save you ping, but there are situations where you can’t use the queue (command separators do not work). Therefore, you can switch balance methods manually or tie balance method swapping automatically to different aliases. You can also just send commands on balance recovery if that’s your style. You can still issue manual commands off-balance to be sent on-balance.

- Recalcs: If you are sending commands to the queue, you can automatically send a new command if you receive new information. You can use a set of built-in ‘recalc events’ or define your own to trigger Vuu to rethink its previous decision. For instance, you’ve already sent Crackshot to the queue but Rapidfire comes off cooldown, a recalc event will tell Vuu to recalculate the command to send with this new information.

- Command validation: Every command you send (as long as Vuu knows the command) will be validated through GMCP Combat Messages or Triggers to ensure that it succeeds. If it fails for any reason, Vuu will resend it. This is generally very helpful, but can create situations where Vuu is trying to execute a command which you simply cannot for some reason, leading to a loop. Vuu should detect such a loop. If the alias is tied to a cooldown, Vuu will manually put it off cooldown to try to fix the issue. If that doesn’t work, the command will be blocked. If it tries to send it again, Vuu will just throw an error and stop. With a bit of tinkering, you can fix this up for the next fight. At least you won’t have to restart your browser.

- Focing commands and reacting: A manual command you send beginning in ‘/’ will override all automation until it succeeds. Vuu also includes a reaction logic which allows Vuu to react to triggers or GMCP Combat Messages which originate from your target, for instance if you want to automatically interrupt a channeled ability. If you choose, automatic reactions can be set to override manual commands.

- State tracking: Vuu listens to GMCP and triggers and processes incoming data for later use (without manipulating the GMCP objects which are used by the client). Vuu has objects and variables for just about everything you might need. All of this is tied to an event router system which allows you to define your own scripts when certain events occurr (more on this later).

- Props and cover: Vuu does not contain a fully coded prop logic, as these are quite convoluted to code and are highly class and matchup sensitive. What it does contain rather are the beginnings of a prop logic designed at the very least to assist you in dealing with an opponent using props. When your opponent takes cover, Vuu will try to load that prop’s id into a variable which you can use later, either by covering behind it yourself (“/cv”) or by attacking the prop somehow with a manual alias (you’ll have to set it up). There are limitations to this, however. It has no way of knowing which prop an opponent is using if there are multiple props in the room of the same name. It will load one such prop in the prop target variable, but it may be wrong. Vuu does not know which props are coverable and which are not, so it cannot determine which prop you should use. Vuu also doesn’t know anything about climbing, but then neither do most combatants and anyway climbable props are rare.

- The class router: Vuu comes packaged as two groups. The first group contains all the core functions, triggers, and aliases which are class-independent. Throughout this core system, Vuu will call a class-based event router which asks whether there is any class-specific logic to execute before continuing. The class router is therefore the way to interact with the core of Vuu without changing the core Vuu (which you’re nevertheless free to do, just if updates come to the core functions it’ll be annoying).

- Command-specific callbacks: Command aliases can have callback functions tied to them which fire before an alias is sent, after it’s sent, or after the command succeeds. Vuu will execute these functions accordingly. This keeps your code organized and lets you do some neat things in cases where you want to send a command or update a variable before you send a command, after you send it, or after it succeeds!

- Extra small bits of functionality, should you desire: Vuu will stand before it sends a command if you are knocked prone. Vuu will automatically pull your opponent from the skies if necessary. If Vuu is going (via VGO), Vuu will automatically attack your target if they enter the room or if you enter their room. Anti-invisibility functionality will spam attacks on room change if it’s an invisibility matchup. Crashing will resend if you are somehow interrupted, and redundant crash commands will not be sent (ONLY if Vuu is going, and only so long as you use the ‘/C<dir>’ alias. Using the normal ‘CRASH <dir>’ commands while Vuu is going will cause issues.)

- Setting profiles: All of the settings (see vs.settings in the code for a more complete list) can be defined in profiles which you can swap between (preferably before a fight, swapping settings profiles mid-fight might cause issues depending on the particular settings being changed).

- Small tweaks to Nexus: 1) The prompt will show up in logs. You can still use the native settings “Only show the last status/prompt line received” or “Do not show any prompt lines at all” and the prompt will still show at its normal intervals. Vuu also has a prompt with conditional coloring and more options built-in, read more below. 2) The tooltips which show up when you hover over the bottom buttons and bars have been removed.

Installation and setup

Download the package located here and load it into Nexus. If you’re using the Condition Prompt (see below), load oj.nxs first (link below) and type ‘onLoad’ or restart your client. Now load up Vuu and type ‘onLoad’ again or restart your client. The first time you run Vuu, you will need to tell Vuu who you are with VME <fullname>, making sure to include your Dynasty surname if you have one and use capitalization just in case. Vuu will turn CONFIG USEQUEUEING ON. The first time you run Vuu, it will CONFIG SHOWBALANCE ON. Vuu needs the balance use message. If you don’t like it, gag it. If you don’t intend to use queueing, change the value of vs.settings.defaultBalMethod. Other than that, there might be some class-specific stuff for you to take care of, see below. You should mostly be able to have Vuu on and use all your existing packages without Vuu interfering, Vuu should never send commands unless you VGO or you send a manual ‘/’ command. If you intend on using Vuu’s automation, take care that other packages (especially ones that do stuff on balance use/recovery) aren’t getting in the way while resolving issues.

Using Vuu

Use VGO to start (or VGOO if you’re a pk god) and VSTOP to stop. Everything else is just spice. Generally speaking, Vuu is not very front-facing (it’d be triple the work for me to make it so). If you want to customize Vuu to your needs, you’ll have to venture into the Javascript. I’ve done my best to comment the code to explain what’s going on.

VS: Start up Vuu. This command is sent when you load the game. You can send it again and it will reset Vuu to how it was at the start of the session, or after you make changes.

- NB: Using this will reset everything including cooldown information, so Vuu might try to send abilities which are still on cooldown! Don’t use VS mid-fight.

VGO: Start hitting them. Bind this.

VSTOP: Stop. Bind this.

VCONT: Manually validate the current command Vuu is trying to send to allow Vuu to do something else. There might be a game effect which Vuu is unaware of preventing you from doing something. In the early days of Vuu you’ll probably need to use this a lot, so bind it.

VOF <strat>: Switch between offense logics.

VSET <profile>: Tell Vuu which setting profile to use. Vuu comes with some pre-baked profiles. The vsBeast, vsNano, vsFury, vsEngi, vsScoundrel, and vsAll profiles tweak ww priorities, thresholds for health and mending, some other things like maybe defups (like Intercept for Nanoseer), and whether or not to use anti-invisibility spam. The profiles ‘automated’, ‘assisted’, and ‘manual’ control the amount of automation to use with Vuu. If you want to define your own profiles, do so in vuu.settingProfiles

VDEF: Def up according to your currently active defup profile. Use VSET to modify defupMode (and keepupMode).

‘/’: Everything which sends a command to the game should begin with ‘/’. With Vuu you do not make aliases the normal way. Instead, it will try to find the alias as a key of the object vuu.abs which contains all the structured information Vuu needs to know to run that command for you. If the alias does not exist in vuu.abs, you’ll just get an error. You can send normal aliases without ‘/’ but a) they will not be validated, b) they may be overwritten if you are using recalc, and c) if your balMethod is ‘recovered’ you just won’t be able to send it. Take a look through the vs.abs and vs.<class>abs functions to see which abilities have been defined so far in Vuu.

VERBOSE <all|strict|gag|off>: Vuu has debugging notices peppered throughout, VERBOSE ALL will show them all. STRICT lets you only look at debug info from certain parts of code (defined in vuu.settings.strictVerbose), while GAG will disable certain parts (defined in vuu.settings.gagVerbose).

VPU: Manually toggles pursuit mode.

VQ <cmd>: Adds a command (must be in vs.abs) to the front of the ability queue. Not the game’s queue but Vuu’s queue, as discussed above. Useful in situations where you want to send a command AFTER the currently queued command. Also useful if you’ve used VSTOP (maybe for a regen or Pax), and you want to give Vuu a command to execute when you VGO again!

VQL <cmd>: Like VQ but adds it to the end of the ability queue instead of the front.

VCO <combo>: Like VQ but adds the combo (as defined in vs.combos) to the queue.

VHELP: Doesn’t exist. Use this thread.


Hi, I'm Ata. Oh and maybe some other people, too. o:) Check out my various packages for Nexus: Vuu combat system, Global Pathfinder, Slicer Tools, Ship compass, JS from command line, and Vitals Tracker.


  • MatlkaelMatlkael Posts: 316Member ✭✭✭
    edited May 10

    Mereas Eyrlock

  • RocketCatRocketCat Posts: 96Member ✭✭✭
    Matlkael said:

    The studies are in. It still takes 10 years.
    Hi, I'm Ata. Oh and maybe some other people, too. o:) Check out my various packages for Nexus: Vuu combat system, Global Pathfinder, Slicer Tools, Ship compass, JS from command line, and Vitals Tracker.
  • MatlkaelMatlkael Posts: 316Member ✭✭✭
    yes but now I can relax and eat a hinka while the system does all that busywork!
    Mereas Eyrlock

  • RocketCatRocketCat Posts: 96Member ✭✭✭
    edited May 15
    Reserving another post awkwardly here

    Known issues:
    - Efficacy regeneration does not update in the system
    - Affinity Empyreal does not update properly, and in any case I need to change Affinity to include multiple Empyreals. I did not realize that Affinity could stack multiple times.
    - Forcefeed does not send properly when it is loaded from the FF combo. It still works when you manually send '/GFF'.
    - GMCP Players.Remove throws an error message and does not remove the player from vs.playersHere.
    - Currently no way to IED Fling anything other than shrapnel modded ieds.

    I'll be fixing these issues and adding some more functionality this week.
    Hi, I'm Ata. Oh and maybe some other people, too. o:) Check out my various packages for Nexus: Vuu combat system, Global Pathfinder, Slicer Tools, Ship compass, JS from command line, and Vitals Tracker.
  • RocketCatRocketCat Posts: 96Member ✭✭✭

    Bug fixes:
    - Efficacy regeneration should correctly update now, and resets after VR matches.
    - Affinity Empyreals reworked a bit but still not 100%
    - Forcefeed should now send properly when sent as part of the FF combo.
    - No more errors when a player leaves the room.
    - Antiflight should work correctly now
    - Various improvements and fixes

    Aside from that there's lots of new features for Scoundrel in this update:
    - VICON <#> <ied> <mod> will IED CONSTRUCT the ied specified until you've constructed the specified number. VICON STOP to end this prematurely.
    - VIEDMOD <mod> to switch what mod you are tossing. Use this together with VIED <ied> to swap between different types of ieds and mods.
    - VAFF <aff> will swap your ammo to deliver a specific aff and swap back to your current ammo once the aff is delivered. If vs.settings.switchAtZero is true (which it is by default), the first gun switch will only happen when you have 0 bullets, for a balanceless gun switch.
    - VFL <ied> [mod] will fling exactly one ied of the type the next time you are out of bullets.

    Again, let me know if you encounter issues.
    Hi, I'm Ata. Oh and maybe some other people, too. o:) Check out my various packages for Nexus: Vuu combat system, Global Pathfinder, Slicer Tools, Ship compass, JS from command line, and Vitals Tracker.
Sign In or Register to comment.