1.          Our team is looking for new blood.... could it be you?

          Help us move MBII forward with developing exciting new features!
          Support your favorite mod while gaining valuable experience!


          Join the MBII Team as a Beta Tester, Development Partner or Developer today! Click here for details.

Hosting Server Class Limits Plugin Script

Discussion in 'Support' started by Viserys, Mar 13, 2017.

  1. Viserys

    Viserys Project Leader Movie Battles II Team Code Leader

    Posts:
    512
    Likes Received:
    453
    Class Limit Plugin V2.3
    Credits to @LoU for the idea and the original script​


    Hello community. As some of you may know, I recently started writing a script that would allow for an automated way to limit the amount of players that are allowed to join a class in MovieBattles II Open Mode.

    This script is external to MovieBattles II and functions as a plugin, similar to the RTV/RTM plugin.

    As such, it does not have the optimal functionality (for example it cannot prevent people from selecting a class and can only display warning messages at a certain time). But that's ok, since it was meant as a quick way to introduce class limits in MBII gameplay, as a temporary solution until class limits are properly coded within MBII itself, at which point they should have all expected functionality.

    The script works by reading the server log and sending svsay and forceteam commands to the server according to classes picked by the players.
    If a player picks a class after its limit has been reached, he/she will receive a warning.
    If the player doesn't switch classes in time to an available one, the script will forceteam him/her to spectator.

    Due to the nature of the script, the time between warning and forceteam may be limited to a few seconds, so it's advisable that a player looks at which classes are available before a new round begins. This can be done by joining a team and pressing "TAB". The classes of the players in the team will be shown in the scoreboard.

    The class limits themselves are announced by the script once they are enabled. For repeat announcements, it is advisable to use the embedded DisplayMessage functionality (see below).

    This script can be used by any server owner and is currently used on OFFICIAL HARDCORE servers (COMPETITIVE mode) and BG Class Limits server (LIMITS mode).

    The following files are attached in this thread:

    ClassLimits.exe - This is the script itself
    cl.cfg - an example configuration file, similar to rtvrtm.cfg for RTV
    readme.txt - the readme
    LimitsCalculator.exe - a quick app I put together that allows you to easily calculate the limits you want and creates the configuration string for cl.cfg

    Please note that while the script has been extensively debugged, it may still have bugs that I am unaware of.

    Credits for helping with the debugging to: @AaronAaron, @DaloLorn, @eksha, @fortiseven, @FRANK LAMPART, @HuntresS, @Liniyka_xddd, @Mcbober, @Nex, @NPC, @Quinto, @qwerty, @Threepwood




    Mode explanation:


    This script supports two modes: LIMITS and COMPETITIVE. A third option is to disabled all limits with DISABLED mode.

    *****************************************************************************************************************
    DISABLED Mode
    *****************************************************************************************************************
    To allow for class limits to be disabled without stopping this script, the Mode in cl.cfg can be changed to DISABLED.
    This removes the need to start the script on an empty server if you want to enable COMPETITIVE mode, as all you have to do is start the script on an empty server once, then use DISABLED Mode to disable all limits until you want to enable them again.
    You can then switch to COMPETITIVE mode while the server is populated.

    *****************************************************************************************************************
    LIMITS Mode
    *****************************************************************************************************************
    The LIMITS mode applies predefined limits for each class to the server.
    These limits can be changed anytime on the cl.cfg script by editing the Limits variable.
    The script will detect new limits every 5 seconds.
    Supported limits range from 0 (class disabled) to 32 for all classes.

    The class order on the Limits variable is: Reb Soldier, Jedi, Hero, Mandalorian, Wookiee, Droideka, Clone Trooper, Reb Commander, Super Battle Droid, Arc Trooper, Bounty Hunter, Imp Soldier, Sith, Imp Commander

    For example, if Limits is defined as: Limits=00-00-01-00-00-00-00-00-00-00-00-00-00-01 then the script will allow 1 Hero and one Imp Commander. All other classes will be disabled.

    WARNING: The script does not check if the defined limits allow all players to join a class. This means if your limits allows for 3 class spots in total but your server supports 12 players, then 9 players will not be able to play. It is up to you to define the limits correctly.

    *****************************************************************************************************************
    COMPETITIVE Mode
    *****************************************************************************************************************
    The COMPETITIVE mode functions on the premise that all classes have the same limit, which depends on the total number of people on the server.

    The limit changes between the values of 1, 2 and 3 depending on the number of players in the server.
    The number of players at which the limit will change to 2 or 3 is defined in the cl.cfg with the Limits2 and Limits3 variables.

    These are checked to ensure that all players in the server can join the game. This means that Limits2 cannot be larger than 15 (as a limit of 1 supports up to 14 players) and Limits3 cannot be larger than 29 (as a limit of 2 supports up to 28 players).

    *****************************************************************************************************************



    Configuration:

    Please enter the following values in cl.cfg:
    1. IP: Server IP
    2. Port: Server port
    3. RCON: Server rconpassword
    4. log_path: Absolute path to server log file
    5. DisplayMessage: Message you want to be repeated via svsay on the server (leave blank to disable). Make sure it doesn't contain an '=' character
    6. DisplayMessage2: Second message you want to be repeated via svsay on the server (leave blank to disable). Make sure it doesn't contain an '=' character
    7. RepeatInterval: How often the DisplayMessages will be repeated, in seconds (between 5 and 1800)
    8. Mode: LIMITS or COMPETITIVE or DISABLED
    9. Limits: The predefined Class Limits, in XX format, for all 14 classes separated by a -, for example: 00-00-01-00-00-00-00-00-00-00-00-00-00-01 (for LIMITS mode). Class order: Reb Soldier, Jedi, Hero, Mandalorian, Wookiee, Droideka, Clone Trooper, Reb Commander, Super Battle Droid, Arc Trooper, Bounty Hunter, Imp Soldier, Sith, Imp Commander
    10. Limits2: Number of players that must be connected to the server for Class Limit to increase to 2 (for COMPETITIVE mode)
    11. Limits3: Number of players that must be connected to the server for Class Limit to increase to 3 (for COMPETITIVE mode)




    How to use:

    The script is configured in the cl.cfg configuration file, which must be saved in the same directory as the executable. The script reads cl.cfg for any changes every 5 seconds.

    • Start this script after the server has been started and while the server is empty.
    • There is no requirement to clean the server log before starting this script.
    • If you only want to use LIMITS mode, the script can be activated when the server is populated.
    • COMPETITIVE mode will NOT work unless the script was started on empty server.
    • If the script was started on a populated server then COMPETITIVE mode will only start working properly when server becomes empty again.
    • Until that happens, the script won't count the population properly and the limits won't be changed when they should.
    TIP: You can prevent players from joining the server while you start this script by temporarily setting a g_password.
    TIP: To remove the g_password, set it to "none"

    V2.1: The mode can now be also controlled via /smod say and /rcon say by typing "!mode <mode>" where <mode> is COMPETTIVE, LIMITS, or DISABLED. This will overwrite the mode defined in cl.cfg until cl.cfg mode is changed again.


    KNOWN ISSUES:

    • This script sends rcon commands to the server. If a forceteam command happens to overlap with commands from another source (e.g. automessages, RTV, manual rcon commands), it is possible that the forceteam will NOT go through and therefore the script will allow that player to exceed the class limit until he either joins spectator or changes class. This is unlikely but may still happen.
    • RTV archiving may interfere with this script as a few lines (1 line probably) might NOT be written in the log while RTV archives. Unlikely that these lines will be important, but if they are related to a client disconnect this could cause a problem with the script.






    Download here
     
    Last edited: Apr 2, 2017
  2. LoU

    LoU Space Janitor R2D2 Movie Battles II Team Retired

    Posts:
    738
    Likes Received:
    532
    Threepwood, Viserys and Puppytine like this.
  3. DaloLorn

    DaloLorn Movie Battles II Team

    Posts:
    308
    Likes Received:
    137
    Yay, my kills and occasional deaths have not been in vain! :D
     
    eksha likes this.
  4. fortiseven

    fortiseven

    Posts:
    11
    Likes Received:
    6
    And don't forget to check the bloody counters ;)
     
    Viserys likes this.
  5. Vitéz

    Vitéz

    Posts:
    132
    Likes Received:
    85
    Hey!
    Some feedback: I played on the BG Class Limit server, and I noticed that the script replaces some "special" characters like the "é" character in my name to a question mark (?) when it gives notification about the class limit (for example: "Vit?z, Ok, your class is fine now").
    Anyway, good job on this script, it works well, good to see some improvement for Open mode.
     
  6. Viserys

    Viserys Project Leader Movie Battles II Team Code Leader

    Posts:
    512
    Likes Received:
    453
    Updated script to V2.2.

    It was reported to me that a bug caused an incorrect warning spam, even for disconnected players. So I looked it up and indeed found a bug that would cause the script to think that disconnected players were still in the server (I actually introduced it when I tried to fix the reconnect issue). However this would have only occured if the script crashed and restarted automatically, but the crash log doesn't report any script restarts.

    So I'm puzzled, but fixed the bug anyway. I haven't had a chance to debug the fix extensively, so hopefully I didn't break something else with my midnight coding!

    This still doesn't explain what happened yesterday, so there might be another underlying bug. If the script goes crazy again, please report it here!

    Edit: now I'm pretty sure this is related to RTV archiving the logs but need to look into it further
     
    Last edited: Mar 17, 2017
    Nex likes this.
  7. Viserys

    Viserys Project Leader Movie Battles II Team Code Leader

    Posts:
    512
    Likes Received:
    453
    ok so I managed to replicate what happens when RTV archives the logs. A log line could be lost while that happens so I've disabled RTV archiving for class limits servers (and replaced it with my own script). Still no idea what happened that day though
     
  8. Rajive

    Rajive

    Posts:
    32
    Likes Received:
    19
    If possible, it would be nice to know when a class become available like "Hero slot is now available" so we don't have to check tab every time.
     
  9. LoU

    LoU Space Janitor R2D2 Movie Battles II Team Retired

    Posts:
    738
    Likes Received:
    532
    People change class too often, that's not needed, AFAIK script should post summary every few minutes tho.
     
    DaloLorn likes this.
  10. DaloLorn

    DaloLorn Movie Battles II Team

    Posts:
    308
    Likes Received:
    137
    It might also be nice if you could ask the script to give you the summary early. (The response might have to go through PMs, to avoid spam.)
     
  11. Rajive

    Rajive

    Posts:
    32
    Likes Received:
    19
    I didn't think about that. Following DaloLorn idea, maybe we could ask the script to tell us when a specific class is available by private message then ?
     
  12. Viserys

    Viserys Project Leader Movie Battles II Team Code Leader

    Posts:
    512
    Likes Received:
    453
    there is no way to PM from the server and even if there were, the server sends too many messages as is. Every message adds delay to the script.
     
  13. Viserys

    Viserys Project Leader Movie Battles II Team Code Leader

    Posts:
    512
    Likes Received:
    453
    minor Update to 2.3, messages now don't display if limits are disabled
     

Share This Page