Announce post #3165: Command rate limit

2/3/2021 at 0:13
Razmael, the Synthesist
Everyone
Command rate limit

Hi folks,

Today I'm introducing a rate-limit to how many commands you can enter per second. I'm starting this at a rate of 50 commands per second, which should be generous enough to not affect most people, but may lower it in the future depending on further analysis.

What this means is that after you've entered 50 commands in a second, any further input will be rejected - with a message informing you as such. As a note, queued commands will count towards the rate limit at the time of the queue firing, not when the queue is prepared (but the QUEUE command itself will count towards the 50 commands at the time it's entered). e.g. with a stacked separator queue of "QUEUE thing1\thing2\thing3\thing4\thing5\thing6\thing7", this counts as 1 command at the time it's entered, and 7 commands at the time it goes off.

This has become necessary to implement as sometimes people's system can go haywire in fight group fights, for example: while monitoring this for the past few days somebody's system was sending over 600 commands every second in one lesser fight. This creates a lot of unnecessary overhead (especially as each of those commands generates a prompt and gmcp vitals) and can contribute to group combat lag when it happens.

Penned by my hand on Kinsday, the 8th of Arios, in the year 493 MA.
Iesid

Comments

  • No horses, orels, or war boars were injured during this new features consideration for implementation.
    Copperhead of the Third Spoke says to you, "Intelligence matrix in moniker Bulrok reveals above average results when compared alongside proximal presence."
    LinMazzionBenedictoTetchtaTaiyangRihrinIllikaalMoxie
  • LinLin Blackbird The Moonglade

    2/3/2021 at 0:13

    ... for example: while monitoring this for the past few days somebody's system was sending over 600 commands every second in one lesser fight.

    oh my god
    IesidSryaen
  • edited February 2021
    Fun fact it wasn't my Mjolls system that did that.
    Copperhead of the Third Spoke says to you, "Intelligence matrix in moniker Bulrok reveals above average results when compared alongside proximal presence."
    IesidMjollAlelaGavramel
  • edited February 2021
    Fun fact it wasn't mine either. edit: technically
    BulrokRihrinIesidMjollBenedictoZeheia
  • The system i got for being carnifex didnt do anything wrong

    AlmolBulrokTetchtaAlelaMjoll
  • Is it really necessary to set the limit so low? I understand that 600 commands is pretty crazy. Would 150 be possible? 100 even? 50 is just really low and has affected me personally with every day tasks that aren't even combat related.
  • TiurTiur Producer
    ...seriously? How can you need to input more than 6, let alone more than 50? Even if you need to just spray commands everywhere, I think that's beyond a reasonable burden of expectation for the game itself to handle.
    MazzionTetchtaDrystinMjollGavramelAlelaIllikaalLinKxrachusFezzix
  • If you don't use firstaid, you are stacking up to 4 input easy. Play indorani, you can stack a lot. So if you check for hidden (which is like 10 by itself) 3 or 4 different things in your offense, and sending cures can easily net 25+ in one or two prompts, let alone half a second.
  • I will add on, since editing is for cowards. 50 isn't horrible. There is a lot of clean up many of us system builders can do. I have a lot of lazy code personally that could be tightened up, which I am doing, if it leads to less game lag in big fights. I don't know what the magic number is, but I would guess 75 is probably very nice but 50 is a good first number to work toward.
    TetchtaBenedictoBulrok
  • TiurTiur Producer
    Yeah, this should clean up a large amount of group lag. Raz is pretty intelligent for finding this. Previously we had used a special game flag that limited the number of commands Rapture would accept in a given 'tick', and when we turned it on, lag would vanish. But until he wrote the command to track input/s, the scale wasn't something we were aware of.

    I guess that's part of why I was always a helper in combat instead of a champion. I figured... 3-5 cures, a balance, an eq, some stand/amnesia protection. I would only be going in bursts of 10-20, but not per second at all. I get the stacking for classes like Indorani, but their offbalance/offeq combat beats should bring their average down.
    Mazzion
  • TetchtaTetchta The Innocent
    edited February 2021
    Tiur said:

    How can you need to input more than 6

    Bro are you kidding me lmao you should play the game sometime. I agree 50 is totally on the high end and is a good first target but six? SIX?! TIUR WHAT

    Illikaal
  • edited February 2021
    Hiddens exacerbate the amount of commands being sent quite a bit. Certain classes make using first aid not a great idea if you can avoid it(shaman) and curing is a bunch of commands also that can in certain scenarios be changed around really quickly in queues. Add in stuff for stupidity but no idea if that counts against the command limit. Also needing to call affs for certain attacks into web as well I guess since venoms don't have a 3rd person.

    TetchtaDrystinFezzix
  • RijettaRijetta Nowhere Important
    Attempting to handle stormtouched curing with first-aid requires resetting nearly your entire cureset every single time you cure an aff via herb eat. At minimum you need to handle every other aff in that tree. That's in addition to hidden checks (vital, shaman can give lots) and offensive commands. I think it'd be very possible to hit this rate limiter in a lot of scenarios.
    A low, sultry voice resounds within the depths of your mind, "I look forward to seeing your descent."
    Drystin
  • TetchtaTetchta The Innocent
    edited February 2021
    Spent the day optimizing my basher to be less-bad and now literally basically all it does is run around and attack mobs with almost no command waste, and it will break 8 commands/second just doing the very basic gameplay. No venoms, no client-side curing, nothing extraneous.

    I'm gonna be laughing at "six commands per second" for a long time and I hope all of y'all are prepared for that because it is extremely silly. With venoms, ent commands, and literally any client-side handling you're going to be regularly breaking 10-20 commands-per-second at times, especially if you're moving around and doing various free checks. And that's not to mention target and affliction calling, which are extremely common in groups.

    Haven
  • Stupidity, Amnesia, Disorientation, and Aeon all need to either flat out be removed or looked at very carefully while we're still adjusting to this.
    Copperhead of the Third Spoke says to you, "Intelligence matrix in moniker Bulrok reveals above average results when compared alongside proximal presence."
    SeurimasTetchtaMjollDrystinAlelaBenedictoSryaen
  • This came with no warning, and now the system and offense I've been using for six years is hamstrung to the point of being useless. It's not worth updating my system; I have to get a new one and rebuild my offense, aliases, macros, and combat style from the ground up.

    My client side curing system had a lot of spam, but I'd turn it off during group combat so that I could remain functional. It worked extremely well for me in 1v1 where the command input wasn't an issue for the rest of the game, and now it's useless. As far as I'm aware, I wasn't slowing the game down, and now I'm being punished.

    I can understand being mistaken when it comes to the higher intricacies in PvP, but the fact you think SIX commands is a high input in combat is informative, and not in a good way. You have allowed a MASSIVE change to the largest cornerstone of Aetolia without understanding the fundamentals of what it is you are changing. You're the Producer, and this shows a disconnect between you and the game you're running (along with its players). The fact you think you can make this change (because you didn't think it was a big deal) with NO WARNING illustrates this disconnect even further.

    In a 1v1 fight, any good offense will be constantly refreshing commands as your opponent cures (tree/renew/pill/pipe/poultice/passives/actives), as they shield, as they fly/swing/move, as rebounding activates, etc. Within a single second, more than a dozen variables can change that cause your system to input commands. The same is said for client-side curing. As afflictions are cured, tree/focus/renew queues are activated or cleared. Curing priorities change. Pipes are filled, pills are pulled from the cache, Amnesia checks happen, hidden affliction checks happen (touch tree/focus/fly/concentrate, etc), compensating for Aeon happens, and the list goes on.

    My offense and client side curing was clunky because I'm not a coder, but it worked really well in 1v1. With this cap, you're hurting anyone who isn't an expert coder and are putting the onus on the players to develop systems that have few to no superfluous commands. The cap is making it that much more difficult to get results in game.

    I've had the rug pulled out from under me multiple times while playing this game, but never to this scale. I've poured so much of my time and effort into Fezzix, into Spinesreach, and into the Syssin, and I'm reaching the point where I question if it's worth it anymore.

    The players whose company I enjoy, the sunk cost fallacy, and my own stubbornness keep me around, though. With a lot of help from some friends, I'm sure I'll manage to dig out of this hole before you open another.
    RobynDrystin
  • TiurTiur Producer
    Oh, I had no substantive opinion in the input detection design other than "Okay, that's enough lag that we have to fix it". I just helped math up ways to detect it. I said six because that's a rough average of the number of things you can successfully DO per second in the game, on an average. I had never really coded in the idea of input loading with queues and nonsense. I used internal methods for handling my tarot aliases and such, negating a need to send three from my computer, as letting Rapture was 'faster' (depends on how that particular game coded the alias decipherer.)

    600 commands per second is insane, and that does indeed cause lag. I still find 50 unacceptable, save for cases where you have multiple input afflictions stacked on you. If your method of dealing/detecting those things is to throw massive amounts of commands, any attached system needs some basic logic to prevent that. As a silly example, a crude fix for amnesia is to send "stand" before every command you ever send. It also detects hidden prone! But it's terrible code and not sustainable for a multiplayer game.

    What I'm saying is that your argument to beat isn't me being goofy about saying "six commands". That's an offhand comment when I didn't even pick the numbers involved.

    If you send everything every time all the time, it's not going to work anymore.

    Note that the average system using fighter was 10-40. And the egregious offenders WERE reached out to.
  • TetchtaTetchta The Innocent
    edited February 2021
    Overall I think this change was a good one for the game but I'm sympathetic to Fezzix a little here. I am a much better coder than when I first started coding in mudlet a year ago, and probably JUST became good enough to actually optimize my basher in a day to get under the limit, so I do kinda feel that anxiety about not being a good enough coder to cope with the limitations.

    This is a good change overall for the game, but I would definitely caution against going much lower without a recalibration of combat speed. Aetolian combat is pretty fast, and while there's a reasonable limit to what players can expect the game to chug along and process, there's also a reasonable expectation that if the cap gets TOO low, the game might need rebalanced to compensate for that.

    Although if pve slowed down any more I'd be sad.

  • edited February 2021
    You may swallow another pill.
    In your stupidity, you forgot what you were trying to do. Oops.
    In your stupidity, you forgot what you were trying to do. Oops.
    You remove 1 coagulation, bringing the total in the cache to 1694.
    In your stupidity, you forgot what you were trying to do. Oops.
    You remove 1 antipsychotic, bringing the total in the cache to 1562.
    In your stupidity, you forgot what you were trying to do. Oops.
    You remove 1 antipsychotic, bringing the total in the cache to 1561.
    In your stupidity, you forgot what you were trying to do. Oops.


    Eight (8!!!!) commands to cure one (1) affliction and it didn't even cure it.

    edit: I went into the raw log from my sect scorebook.

    You may swallow another pill.
    [Herb Queue]: touch flaws&&outc coagulation&&eat coagulation&&outc coagulation&&eat coagulation
    >>> touch flaws
    You have no flaws.
    >>> outc coagulation
    In your stupidity, you forgot what you were trying to do. Oops.
    >>> eat coagulation
    In your stupidity, you forgot what you were trying to do. Oops.
    >>> outc coagulation
    You remove 1 coagulation, bringing the total in the cache to 1694.
    >>> eat coagulation
    In your stupidity, you forgot what you were trying to do. Oops.
    >>> queue pill touch flaws&&outc antipsychotic&&eat antipsychotic&&outc antipsychotic&&eat antipsychotic
    [Herb Queue]: touch flaws&&outc antipsychotic&&eat antipsychotic&&outc antipsychotic&&eat antipsychotic
    >>> touch flaws
    You have no flaws.
    >>> outc antipsychotic
    You remove 1 antipsychotic, bringing the total in the cache to 1562.
    >>> eat antipsychotic
    In your stupidity, you forgot what you were trying to do. Oops.
    >>> outc antipsychotic
    You remove 1 antipsychotic, bringing the total in the cache to 1561.
    >>> eat antipsychotic
    In your stupidity, you forgot what you were trying to do. Oops.
    Toz says, "Dishonor on you (Mjoll), dishonor on your family (Seirath), dishonor on your cow (Bulrok)"
    TetchtaLinDrystin
  • Again I have to ask... is 50 set in stone? Why is this the magic number? Why is 80 too much or 60 even? I just want to know before I decide if I really want to sit down and recode half of my scripts.
  • Honestly I think 50 is reasonable. Changing what is in the queue only counts as 1 command.

    I think what this has uncovered is how ridiculous hidden checks are. What is the point of having hidden affs if a vast majority of them are meant to be trivial to check for? Imo we should move away from hidden affs if the only result is that top tier pvpers feel the need to add a bunch of commands that are useless 99% of the time.
    SaidennMjollTetchtaElene
  • KerocKeroc A small cupboardAdministrator, Immortal
    You don't need to do hidden checks all the time. If someone has a skill that can deliver either impatience, anorexia, or confusion, you only need to check eat and meditate once and then never again until the next time they hit you with the skill.

    Infact it helps to add them to a 'hidden' pool, because if you rule out both impatience and anorexia, you now know you have confusion.

    Hidden checks can be easily streamlined and non-spammy.
    LinHaven
  • Sure, people can code it to be less wasteful, but why haven't they? Because these checks are actually trivial and cost nothing (except, as it turns out, more overall processing by the server). My point is if in your example 2 of the 3 can be checked so trivially what is the point of having any of it be hidden at all? Why not just make it unhidden and not require anyone to code in any checks at all, and balance those classes around this fact?

    All the current situation encourages is for people who want to eke out these advantages to do so. You can point the finger at the people inputting hundreds of commands a second, but ultimately those are just extreme symptoms of an underlying problem that has a much easier fix. The game is fortunate in that a vast majority of people don't try to eke out those advantages, or we'd all be running in these problems a lot more often.
    Tetchta
  • Rate limit how fast Celani and Tiur are allowed to implement new code/progs. Thanks.
    Copperhead of the Third Spoke says to you, "Intelligence matrix in moniker Bulrok reveals above average results when compared alongside proximal presence."
    AlelaTetchta
  • TeaniTeani Shadow Mistress Sweden
    As Fezzix says, this makes getting involved in combat even more of a hurdle for people who are not good at coding.

    There is a reason why I am not on the various free systems out there; I can't handle the flashy UIs. The system I'm on is a very old one, tweaked and fiddled with by me over time, and a patch or two from other kind coders, but without me actually knowing much about how to make bigger changes. Right now it's screaming stuff at me whenever I log in because it's trying to run its normal setup and it can't.

    While I can agree that 600 is excessive, reaching out to those individuals sounds like a reasonable solution. A rewrite for this cap, however, is beyond simple fixes like finding flawed triggers. I only know my offense (which is completely my own), not the curing part. I doubt I'm alone in that kind of situation.



  • Keroc said:
    You don't need to do hidden checks all the time. If someone has a skill that can deliver either impatience, anorexia, or confusion, you only need to check eat and meditate once and then never again until the next time they hit you with the skill.

    Infact it helps to add them to a 'hidden' pool, because if you rule out both impatience and anorexia, you now know you have confusion.

    Hidden checks can be easily streamlined and non-spammy.
    I’m still waiting to face you in Sect Keroc. You can’t hide those master combat scripts forever.
    RijettaRihrin
  • edited February 2021
    I’m a bit confused on how someone can get to 600 commands so quickly. Most of my combat is ran from stored queues. 

    Do Firstaid commands count to this limit?
  • LinLin Blackbird The Moonglade
    It's gonna turn out all this time that it was Didi spamming "sagenod me"
    AlmolTetchtaSeurimasTsarraZeheia
  • TetchtaTetchta The Innocent
    I sat on my enter key with one command and it only produced ~30 CPS with the fastest keyboard repeat rate so she'd had to have coded a system just to send 20 sagenods per command tick XD

  • try it stacked 10x with separators

Sign In or Register to comment.