Skip to content

Changelog

Person8880 edited this page Dec 2, 2023 · 442 revisions

Workshop addon changelog

Revision 350 - 02/12/23

Chatbox

  • Fixed errors/layout issues in the emoji picker when rapidly scrolling.

Tweaks

  • Fixed minimap highlighting script error when running on a map with missing/invalid location data.

Revision 349 - 25/11/23

Improved Chat

  • Added an option to control whether a sound is played when a chat message is displayed.

Misc

  • Fixed various minor bugs.

Revision 348 - 04/11/23

This is the final major update to Shine after nearly 11 years of development and the end of the game's active development. There's quite a few notable new features and refinements that hopefully end things on a high note. Obviously, if there's any bug fixes required from these changes then there may be some follow up hotfixes, but this is the end of feature development (unless I feel nostalgic one day and there's still people playing).

The mod has lasted a lot longer and grown a lot bigger than I anticipated when I first started working on it back in December 2012. I initially started it just to explore the NS2 Lua API and see if I could build something like the admin mods I'd used in Garry's Mod (another game with a Lua API). I wasn't expecting it to become the de-facto standard mod on every server.

I want to thank all the server admins past and present that have used it and provided feedback over the years. Many things have gone well, but there's also been some mistakes that I've learnt from, both technically and in terms of what constitutes a good player/admin experience. Sadly, with the modern trend of games no longer having dedicated servers, mods like this are mostly relegated to the past, so there's unlikely to be another game I build something like this for.

Most people will probably only remember Shine for its shuffle system and the endless debates around it. It's always generated a lot of comments and a fair amount of criticism, but I'd like to think it did the job that was needed. As the old adage goes:

A good compromise makes everyone equally unhappy.

With that, I'll sign off! Below is a summary of the changes in this update. Anyone still building on top of Shine may want to check the pull request for this update for more technical details on API changes/improvements (there's a fairly large amount of improvements under the hood, especially in SGUI).

General

  • The standard webpage window now shows the URL and a security indicator (tied to the browser's notion of a "secure context") as well as back, forward and refresh buttons. Mouse buttons 4 and 5 (usually side buttons) can also now be used for back/forward navigation. webpage_controls
  • The client config plugins tab has been redesigned, with a much more readable list, switches for enabled/disabled state, and the ability for plugins to define a translated name and description. Official plugins (i.e. those in the official mod) are highlighted with a blue tick. client_plugins_tab
  • Removed the beta extensions concept. Plugins can now avoid being added to the base config by omitting the DefaultState key. This accomplishes the same goal as the beta system, but without needing extra config and complexity in the code. Any plugins under ActiveBetaExtensions will be migrated automatically to live under ActiveExtensions.
  • Numerous visual changes have been made across the UI, including improved tabs on the config and admin menus, background shadows being rendered on windows, modal dialogs darkening their parent window and various other refinements.

Admin Menu

  • Redesigned the plugins tab.
    • Instead of a list, it now shows cards for each plugin with controls to enable/disable, as well as seeing whether the current state has been saved.
    • Official plugins (i.e. those in the official mod) are marked with a blue tick.
    • A search box has been added to find plugins by name. admin_menu_plugins_tab
  • Redesigned the maps tab.
    • The list now has a preview section on the right showing the map's loading page/workshop preview image (same as the map vote menu).
    • Human readable names are displayed in the map list if the map vote plugin is enabled.
    • If the map has mods assigned to it, they are listed and can be viewed in the workshop by clicking on the name.
    • A search box has been added to search over maps by name. admin_menu_maps_tab

Fun Commands

  • Added the following new commands:
    • sh_goto_location - teleports to the given location name.
    • sh_sendto - sends the given player to another player's position.
    • sh_sendto_location - sends the given player to the given location name.

Improved Chat

  • Shadows are now rendered on chat text when using the improved chat plugin (most noticeable when the background opacity is 0).
  • Emoji support has been added to the chat, including rich text editing in the chatbox, auto-completion, and an emoji picker that remembers frequently used emoji.
    • The default emoji set covers the basic unicode emoji smilies, emotes and hand gestures.
    • Additional emoji can be added by server operators, just have to declare a simple JSON file describing where to find the texture file(s) for them.
    • Emoji can be restricted per group.
    • Each emoji is internally encoded in chat messages to have a fixed length, so the length of an emoji's name does not affect how many can be in a chat message.
    • Adverts and welcome messages can include emoji by specifying "ParseEmoji": true in the advert/welcome message definition.
    • See the wiki page for more details.

Map Vote

  • Added the GroupCycleMode config option:
    • SEQUENTIAL retains the current group cycle behaviour, advancing through groups at every map change, with the current group limiting the vote options.
    • WEIGHTED_CHOICE allows using groups as buckets to select maps from. Specify a select value on each group to control how many maps are selected from the group (if omitted, all maps from the group are included).
    • See the wiki page for more details.

Name Filter

  • Filters can now define a set of excluded NS2 IDs in addition to just a single NS2 ID by providing an array or object to the Excluded field.
  • Improved config validation.

Pregame

  • Fixed client-side prediction issues when the AllowAttackPreGame option is set to false. Weapons will no longer appear to fire momentarily, nor will it be possible to trigger a reload by spamming the button.

Tweaks Plugin

  • Added a new plugin that provides small tweaks on the client.
  • Currently this consists of minimap location highlighting, which works on all maps by generating highlighted minimap segment textures dynamically using the location trigger bounds for each location. No additional work is required by mappers.
  • Colours can be configured in the config menu.

minimap_highlight_marine_glow minimap_highlight_alien_glow minimap_highlight_hostile_glow

API

  • Plugins can now load within the prediction VM, subject to various restrictions.
  • Many improvements have been made to SGUI to improve performance and add new features. Highlights include:
    • Significantly improved layout performance, reducing 60+ms spikes down to sub 10ms.
    • 50% faster word wrapping performance on plain text.
    • Automatic handling of alpha inheritance down an entire tree of elements, making fading in/out entire windows easy.
    • Support for rounded corners on elements with a shader (currently used to round off radio checkboxes and switches).
    • Various new controls have been added, including a colour picker, modal dialog, switch, vertical sliders and a virtual scrolling panel for near-infinite vertical scrolling.
    • The wiki docs for SGUI have also been updated to cover the more modern approach to using it, though the codebase itself provides plenty of examples too.
  • Added a flexible render pipeline system to render various shader effects over GUIView textures in a declarative format. This is used by the tweaks plugin to render the minimap highlighting, and to render window shadows.
  • See the pull request for this update for more details.

Revision 347 - 29/07/23

Bans

  • Fixed error when converting NS2 ban format from remote ban data.

Vote Shuffle

  • Fixed historic team preferences not being recorded as expected, resulting in team preferences not being weighted properly.

Revision 346 - 24/10/22

General

  • Pre-emptively fixed compatibility with upcoming Lua sandbox changes in the next game update.

Revision 345 - 15/10/22

General

  • Fixed a rare client script error on startup.
  • Fixed a script error on lists when clicking a column to sort by if the list data contains unexpected non-numeric values.

Revision 344 - 24/07/22

Pregame

  • The MaxPlayers option now applies to the number of players on the server that are not in spectate, rather than the number of players on playing teams.

Vote Shuffle

  • Fixed bots sometimes preventing human players from being assigned to teams when ApplyToBots is true.

Revision 343 - 04/07/22

Base Commands

  • Fixed the sh_stopvote command not detecting a running vote since the last game update.

Improved Chat

  • Fixed a script error if a user has been configured with no group when assigning a chat tag.

Pregame

  • Added the MaxPlayers configuration option. If the number of players exceeds this value, the vanilla starting rules will be used instead of the configured mode, enforcing two commanders to start.

Revision 342 - 30/01/22

Chatbox

  • Improved text overflow handling on checkbox labels.

General

  • Updated Russian translations (contributed by Blueberryy).
  • Dropdowns with large options now expand their menu to display the entire text if it exceeds the size of the dropdown itself.

Revision 341 - 20/12/21

Map Vote

  • Added support for the new number format for mod IDs in the map cycle file when detecting mods for maps.

Revision 340 - 01/11/21

Vote Shuffle

  • Fixed script errors if friend groups contained bots on the previous map and those groups attempt to restore themselves.

Welcome Messages

  • Generic welcome messages are no longer repeated every map change, only players that have not previously connected will be displayed.

Revision 339 - 03/10/21

Map Vote

  • Players are no longer blocked from entering spectator mode during the end of map vote and cycling delay.
  • The special infest_ map prefix is now properly identified as the current map if there is a map cycle entry for it, the current map is the ns2_ equivalent, and the currently loaded mods include the infested marines mod. In addition, the map vote menu now displays the appropriate map preview with an infested overlay (contributed by ailmanki).
  • Fixed the map vote notification being left on screen after a vote has completed if the map vote menu is closed right as the vote ends.

Pregame

  • Added the AbortIfTeamsEmpty option which determines which teams should cause the game start to be aborted if they are empty. This can be used with gamemodes that do not require both teams to have players to start a round.

Revision 338 - 19/09/21

Badges

  • Named badge lists can now be defined once in the Badges section of the user config and then re-used elsewhere in the file. This avoids needing to repeat the same badge list multiple times. See the wiki for details.
  • Reduced performance impact when handling a large number of badges across multiple columns for users where user data is not reloaded after startup.

Misc

  • User data is no longer reloaded and saved when user data loaded remotely does not differ from the locally cached data.

Revision 337 - 07/08/21

Bans

  • Improved handling of vanilla ban data to ensure values have the expected type.

Misc

  • Improved HTTP request error handling to provide a more informative reason for failed requests.
  • Fixed dropdown menus getting stuck on the screen when closing the client config menu or chatbox with the escape button while a menu is open.

Revision 336 - 25/04/21

Bans

  • Added the sh_ban_family_share_immune permission, which can be used to make certain users immune to family sharing checks.

Base Commands

  • Fixed a rare script error with the sh_forcerandom command.

Revision 335 - 04/04/21

Vote Shuffle

  • Added the BalanceModeConfig.HIVE.BlendAlienCommanderAndFieldSkills option. When enabled, shuffle will use the average of an alien commander's field and commander skill, instead of just their commander skill. This may improve results for commanders that frequently leave the hive to fight.

Revision 334 - 27/03/21

AFK Kick

  • Fixed players that join a team during the round start countdown being ignored until moved to the ready room/spectators.
  • Added the sh_afk_status command which prints a summary of the AFK state of a player or all players to the console.

Revision 333 - 07/03/21

Map Vote

  • Fixed a rare error when a next map vote fails and no map is permitted in the map cycle. The current map will now be extended in this case.
  • Improved error handling when moving players into the ready room after a round.

User Management

  • Fixed an error when using the sh_listusers command if some users do not have a group assigned.

Vote Draw

  • Fixed a round ending not resetting the vote immediately.

Misc

  • Improved plugin config file loading error messages.

Revision 332 - 20/12/20

Vote Surrender

  • Updated configuration format to add proper units to field names.

Misc

  • Fixed a script error that occurred as a commander when notifications are visible.
  • Fixed chat positioning issues in the upcoming build 336 game update.

Revision 331 - 06/12/20

Map Vote

  • Added the VoteSettings.ConsiderSpectatorsDuringActiveRound option. When false, spectators cannot vote during an active round. Note that the existing VoteSettings.ConsiderSpectatorsInVotes option must still be true for spectators to be able to vote.

Vote All Talk

  • Added the VoteSettings.ConsiderSpectatorsDuringActiveRound option.

Vote Shuffle

  • Added the VoteSettings.ConsiderSpectatorsDuringActiveRound option.
  • Fixed errors related to logging when loading the plugin.

Revision 330 - 29/11/20

Vote Shuffle

  • Friend groups are now saved across map changes and will be restored for up to 5 minutes after a map change by default (controlled by the TeamPreferences.FriendGroupRestoreTimeoutSeconds option).
  • Fixed team optimisation using incorrect skill values if external plugins altered the teams to have more than a 1 player size difference before a shuffle.

Revision 329 - 08/11/20

Base Commands

  • The sh_setteam command now has a 3rd parameter to force the player onto the given team (which will ignore even team size restrictions) and will indicate when changing a player's team fails.

Map Vote

  • Fixed the full screen map vote menu using the wrong colour for alien commanders or while respawning on the alien team.

Pregame

  • Fixed the round starting twice if a round start is forced while a round start timer is active.

Vote Shuffle

  • Fixed commander bots being forced onto the wrong team when using the player assignment enforcement mode.
  • Fixed rare possible case where commander bots may be swapped to the opposite team when shuffling right after they join the team.

Misc

  • Improved the behaviour of SGUI windows in the commander UI:
    • The mouse now changes to the standard UI cursor when inside an SGUI window and avoids showing actions when hovered where a structure or unit would be underneath.
    • Clicking buttons near the logout button (such as the close/config buttons in the full screen map vote menu) now properly captures the input instead of also clicking the logout button.
    • Fixed tooltips not displaying.

Revision 328 - 31/10/20

Map Vote

  • Fixed the vote menu button not displaying the number of votes cast to start a map vote.

Pregame

  • Added a new AutoAddCommanderBots option (default true) that will add commander bots when starting a game for any team without a commander.

Vote Shuffle

  • Commander bots are no longer removed by a shuffle when ApplyToBots is false.
  • The sh_teamstats command will now indicate whether team/commander skills are being used or not.

Revision 327 - 21/10/20

Adverts

  • Fixed a rare script error at startup.

Misc

  • Fixed a few more issues with the upcoming build 335 game update.

Revision 326 - 18/10/20

AFK Kick

  • Improved detection of certain commander actions such as dropping medpacks.

Improved Chat

  • Fixed the chat position not being reset correctly when disabling the "move outer messages" option in the chatbox.

Vote Shuffle

  • Added support for team and commander skill values which are enabled by default. Use the BalanceModeConfig.HIVE section of the plugin config to enable/disable them. Note that these will only work with the upcoming build 335 game update. See the plugin's wiki page for details on how these new values are used.

Misc

  • Applied various compatibility fixes for changes to the chat in the upcoming build 335 game update.

Revision 325 - 04/10/20

  • Fixed the base config being saved unnecessarily after every map change.

Revision 324 - 13/09/20

AFK Kick

  • Fixed players that join a team without moving their mouse or pressing movement buttons being treated as AFK.

Server Switch

  • Fixed a rare script error when the plugin is disabled after the vote menu page has been opened.

Misc

  • Fixed some minor UI layout issues.

Revision 323 - 12/07/20

Chatbox

  • Added an icon on the left hand side of the text entry to indicate the current mode (team/all chat).
  • Improved readability of settings labels when in front of a bright background.
  • Settings for the improved chat plugin are now also added to the chatbox settings as a second tab to improve ease of access.

Misc

  • Reduced blurriness of icons at 1280x720.

Revision 322 - 21/06/20

Vote Draw

  • Fixed the vote not resetting after a round ends.

Misc

  • Added minor performance improvements to various areas.

Revision 321 - 14/06/20

Reserved Slots

  • Altered the disconnect message when a player is rejected due to a reserved spectator slot to make it clearer that the slot was reserved, rather than the server being full.

Vote Shuffle

  • Added an option to automatically accept friend group requests from Steam friends (with the default being to accept them).

Misc

  • Fixed console table output sometimes being mis-aligned.

Revision 320 - 03/05/20

Badges

  • Added the BadgeNames option which allows setting the names displayed when hovering over badges in the scoreboard. See the wiki page for details.

Misc

  • Fixed a few minor bugs in SGUI.
  • Added minor performance improvements to the improved chat plugin's chat message display.

Revision 319 - 15/04/20

Chatbox

  • Fixed a rare script error when auto-completing chat commands.
  • Fixed chat command completions sometimes being invisible.
  • Fixed the settings scrollbar sometimes being invisible.
  • Fixed the main scrollbar sometimes having the wrong colour when dragging it.

Map Vote

  • Fixed the map vote menu incorrectly stating that only one map may be chosen when multiple choice is enabled and the menu is opened automatically before a client has pressed a key.

Unstuck

  • Improved the algorithm for finding a safe position to reduce the number of times unsticking a player fails.
  • Added the MovementToleranceDistance option which controls the maximum distance a player's position is allowed to move from the location they request to be unstuck from. This can help in cases where a player is stuck jittering around a location.

Vote Draw

The votedraw plugin is a new plugin that provides a vote to end the current round as a draw. Players on both teams can vote after a configurable time has passed since the round started. This can be used as an alternative to conceding when the game reaches a stalemate and neither team wishes to lose.

For more information see the wiki page.

Misc

  • Improved performance of many hotspots in the code (hook calls, SGUI control events etc.).
  • Added a system error notification when a plugin fails to load due to a Lua error.
  • Datatable values are now sent at client connection time, rather than waiting for input.

API

  • Various API changes have been made around hooks and SGUI. For details, see the PR on GitHub.

Revision 318 - 22/03/20

Admin Menu

  • Added a new "Status" tab, which provides a way to see various system notifications from startup or reloading remote configuration.
    • Notifications include:
      • JSON syntax errors in the base configuration, plugin configurations or remotely loaded configuration.
      • Validation errors in the base, user and plugin configurations.
      • Plugins configured to load but not installed.
    • This requires access to sh_view_system_notifications.
  • Fixed various errors when loading/unloading plugins while the admin menu is open.

Improved Chat

  • Fixed a rare script error when animations are disabled and a message goes off screen.

Map Vote

  • Added an option to use approval voting by setting VotingMode to MULTIPLE_CHOICE.
    • This allows players to select more than 1 map in a vote. The map with the most votes at the end will win.
    • The maximum number of choices a player can make is controlled by the MaxVoteChoicesPerPlayer option.

Misc

  • Significantly reduced the potential performance impact of JSON parsing when reloading remote configuration during a round by incrementally parsing over multiple server ticks. For large (>1MiB) JSON configuration data, this should prevent the server freezing momentarily which can disrupt gameplay.
  • Fixed vertical tab panels (e.g. the admin menu and client config menu) not sizing their tab buttons correctly at resolutions > 1920x1080 when expanded.

API

  • Absolutely positioned SGUI controls can now use auto-fonts and aspect ratios (as PreComputeWidth and PreComputeHeight are now called at layout time).
  • Vote menu pages can now specify a third callback argument to VoteMenu:AddPage(), which will be called when the page is being switched away. This allows cleaning up non-standard UI elements associated with the page or other such logic.

Revision 317 - 01/03/20

Badges

  • Fixed regression in the previous update that prevented forced badges from being assigned to members of the default group or reconnecting players.

Map Vote

  • Fixed the current winning map(s) not being highlighted when opening the map vote menu after votes have been cast.

Misc

  • Improved performance of JSON serialisation (most noticeable when saving large configuration files).

Revision 316 - 27/02/20

Badges

  • Improved performance of badge assignment by assigning badges lazily as users connect or to connected users on reload, rather than parsing the entire user data every time it reloads.

Misc

  • Improved performance of saving the daily log file after startup.

Revision 315 - 23/02/20

Improved Chat

  • Empty chat tag text is now ignored.

Map Vote

  • Fixed the map vote notification sometimes blocking mouse input (most noticeable when attempting to click the chatbox settings button).

Server Switch

  • Fixed config validation preventing use of hostnames.
  • Improved config validation to reject invalid IP address values.
  • Hostnames can now be up to 63 bytes long (up from 15).

Misc

  • Fixed mouse input being blocked in the main menu when an SGUI window is opened (such as the MOTD).
  • TextEntry controls now handle the Home and End buttons as expected.
  • Fixed text sometimes disappearing when clicking a slider's label to edit it.

Revision 314 - 17/02/20

Base Commands

  • Fixed a script error when permanently enabling a server-side only plugin that was not previously loaded.

Map Vote

  • Improved behaviour of map preview loading to avoid texture pop-in for maps not loaded from mods.
  • Improved map mod detection logic to avoid false positives in certain cases.
  • Fixed a rare script error when updating the map vote notification.

Revision 313 - 16/02/20

This update overhauls the map vote to use a full-screen grid menu that shows preview images for maps, both vanilla and mods, as well as being able to display overviews for both vanilla and mod maps.

Map Vote

  • Map voting is now performed in a full-screen menu, showing a grid of options with preview images for each. Previews for mod maps are loaded using the Steam mod's preview image.
  • Maps that are mods are detected automatically by querying Steam for information about each mod in the mods list per map in the map cycle.
    • If the Steam query fails for any reason, the first mod in a map's mods list is assumed to be the mod for the map itself.
    • This data is queried once and then cached, so as long as the first query for a previously unseen mod succeeds there is no further reliance on Steam responding correctly.
  • Maps are now referred to using more friendly names, e.g. "Docking" instead of "ns2_docking". Gamemodes can define an OnGetNiceMapName hook to decide how to name their maps. The naming has defaults for common mod prefixes:
    • "co" becomes "Combat:"
    • "sg" becomes "Siege:"
    • "gg" becomes "Gun Game:"
    • "sws" becomes "SWS:"
    • "ls" becomes "Last Stand:"
  • The old map vote menu can still be used by altering the map vote settings, either in the client config menu, or using the settings button at the top right of the new menu. It has been enhanced to also be able to load overviews for mod maps.
  • Both the old and new menus now highlight the current winner of the vote in green. In the case of a tie, each map is highlighted in yellow.
  • The old screentext used to indicate a map vote is in progress has been replaced with a more distinct UI element that clearly shows the required key to press to open the vote menu, as well as the countdown of time remaining.
    • When in the ready room/spectate, this element is placed at the bottom centre of the screen to make it more obvious.
    • When on a playing team, it remains at the top right to avoid being too distracting.
    • If a user has not bound the vote menu, the old screen text will be shown.

API Changes

  • More improvements have been made to SGUI, as well as the addition of a dynamic texture loading API. See the PR on GitHub for more information.

Revision 312 - 10/02/20

Chatbox

  • Fixed more scaling issues at resolutions other than 1920x1080.
  • Added a button to open the config menu chat settings.
  • Altered the settings scrollbar to be permanently visible.
  • Fixed occasional script error when auto-completing commands/arguments.

Improved Chat

  • Fixed occasional script error when displaying a message due to the local player having no chat sound.

Vote Shuffle

  • Fixed potential script error when shuffling players with friend groups.

Revision 311 - 09/02/20

This update adds a new plugin, "improvedchat", that overhauls the chat system outside the chatbox (and updates the chatbox to account for it) to allow for rich text messages.

This overhaul is entirely optional, the underlying chat interaction has been refactored into an API, where the improvedchat plugin is simply a provider that allows for rich text. If the plugin is disabled, the old vanilla chat is used and any rich text messages are converted into 2-colour messages.

Improved Chat

  • Enables rich text messages in the chat, allowing other plugins to enrich messages with colour/images.
  • Allows certain users/groups to have a chat tag that is displayed before their chat messages, which consists of coloured text and an optional image (e.g. a badge icon). See the wiki page for an explanation of how to configure chat tags.
  • Overhauls how chat is displayed, making new messages appear in a fixed position with old messages moving upwards, and enforcing a limit on the number of messages on screen to avoid them going off screen entirely. The behaviour can be configured, including:
    • Configurable font size (automatic based on resolution, or a fixed size).
    • Configurable background opacity (where the background is a black gradient that fades out from left to right).
    • Configurable max messages to display before fading.
    • Configurable positioning behaviour, either moving old messages upwards (the default), or using the old vanilla behaviour where new messages appear after old ones (with all the downsides of that approach).
  • When using the new display mode and not using a custom chat position (due to moving the chatbox and setting it to position outer messages), the chat position adapts automatically to the various UI elements:
    • When playing as an alien, the chat avoids overlapping any status indicators.
    • When playing as a commander, the chat avoids overlapping both the minimap and control group icons.
    • When spectating, the chat avoids overlapping the minimap.

Adverts

  • Advert messages can now be defined as rich text when the improvedchat plugin is active. Use an array of strings and colours for the Message field in an advert to make it rich text.

Chatbox

  • The font size used in the chatbox can now be configured in its options.
  • Added an option to display timestamps against messages.
  • Improved how the chatbox size is derived from the current screen resolution and fixed numerous scaling issues.
  • Chat command parameters can now display auto-completions. This is populated for certain types by default. To auto-complete parameters, add an AutoCompletions table or function that returns a table to the command argument definition.

Vote Shuffle

  • Improved the sh_teamstats command:
    • Fixed sometimes including duplicate players in the team skill lists.
    • Fixed counting spectators in the total number of players expected to be on the same team as the last shuffle.
    • The number of players on each team is now shown.
    • Added the player's current team preference weighting multiplier.

Welcome Messages

  • Join/leave messages can now be defined as rich text, as with adverts.

Misc

  • Fixed user config validation expecting a default group when it is not required.
  • Fixed TextEntry placeholders scaling incorrectly at resolutions other than 1920x1080.
  • Fixed scaling issues with NS2+'s global scaling option.
  • Fixed the local all talk option in the client config menu being inverted.
  • Screentext now has a shadow by default to make it slightly easier to read. This can be controlled on the client using the ShadowEnabled, ShadowOffset and ShadowColour fields.

API Changes

  • Many improvements have been made to client side plugins and SGUI. See the pull request on GitHub for a list of notable API changes.

Revision 310 - 25/01/20

Vote Shuffle

  • Fixed skill difference constraints preventing a shuffle when team player counts differ by 1 and there is an eligible player in the ready room that could be shuffled to make the teams even.
  • Added an indication of the team preference of the friend group a player is in to make it clear when a player's own preference differs from the rest of the group.

Misc

  • Pressing the escape key when the vote menu is open now only closes the vote menu and does not also open the main menu.
  • Improved validation of user data.

Revision 309 - 01/01/20

AFK Kick

  • Fixed players being kicked when a round is not in progress, OnlyCheckOnStarted is true and KickOnConnect is true.
  • MinPlayers is now used when KickOnConnect is true providing it is between the number of player slots, and the number of player + spectator slots.

Logging

  • Added log messages when the Alien commander starts consuming, cancels consuming, and finishes consuming buildings, controlled by the LogConsuming config option (defaulting to true).
  • Added a log message when a Marine commander cancels recycling a building (controlled by the existing LogRecycling config option).

Map Vote

  • Added VoteSettings.ConsiderSpectatorsInVotes option to control whether spectators are included in votes.

Shuffle

  • Spectators are no longer considered part of the total player count for MinPlayerFractionToConstrainSkillDiff.
  • Added VoteSettings.ConsiderSpectatorsInVotes option to control whether spectators are included in votes.

Vote All Talk

  • Added VoteSettings.ConsiderSpectatorsInVotes option to control whether spectators are included in votes.

Misc

  • The admin menu button in the vote menu no longer pops into view the first time the menu is opened, and it will be added/removed automatically if user data is reloaded and a player's access to the admin menu has changed.

Revision 308 - 24/12/19

Adverts

  • Advert cycles and individual adverts can now specify a MinPlayers and/or MaxPlayers constraint to prevent them displaying if the player count is not in bounds.
    • Cycles with no trigger will automatically start/stop as the player count changes.
    • Cycles with a trigger will stop if the player count is no longer in range, but will not automatically start if the player count changes to be in range. The player count conditions are evaluated when the cycle's trigger fires only.
    • A cycle with adverts with their own player count range will skip each advert that is not valid for the current player count until one is found that is.

AFK Kick

  • Warning time, kick time and marking players AFK can now be configured based on player count using an array of intervals in the PlayerCountRules field.

Base Commands

  • The sh_listmaps command is now allowed for all players by default.

Map Vote

  • Fixed occasional script error when moving players back to the ready room.

Shuffle

  • Enforcement policies can now specify MinPlayers and MaxPlayers to decide when they apply.
  • Starting and passing conditions for the shuffle vote can now be configured depending on the current game state (PreGame or InGame) in the same way as VotePassActions.
    • A grace time can be specified (StartOfRoundGraceTimeInSeconds) to delay the transition to InGame to allow votes to use more lenient pass conditions at the very start of a round.
  • Added BlockBotsAfterShuffle option to configure whether bots should be prevented from being added to teams after a shuffle vote (applies only if ApplyToBots is false).
  • Improved behaviour of automatic shuffling:
    • Auto-shuffling now occurs after a reset round is started again.
    • Shuffling due to previous votes now has a configurable delay time (EndOfRoundShuffleDelayInSeconds) after a round ends before it is applied.

Revision 307 - 21/11/19

Map Vote

  • Buttons that conflict with the vote menu binding are now listed with the action they are bound to during a map vote.
  • Fixed a benign error when no map can be found in the map cycle that passes the configured restrictions when cycling the map.

Misc

  • Moved all talk text down below the team HUD when it's displayed at the top of the screen.
  • Removed old startup console messages.

Revision 306 - 03/11/19

AFK Kick

  • Improved debug log output to better explain what the plugin is attempting to do when applying warning actions.

Chatbox

  • Fixed labels at the top of the chat history sometimes being invisible until scrolled into view.

Commander Bans

  • Fixed script error that could occur when switching between the bans and commander bans tabs in quick succession.

Misc

  • Fixed off-by-one error in TextEntry mouse to cursor translation which meant clicking near the start of a character would put the caret at the end of it.
  • Label controls now ensure they render properly when they are beneath a cropped element.
  • Sending network messages using Shine:ApplyNetworkMessage (e.g. through the plugin SendNetworkMessage method) now defaults to setting the reliable flag to true when omitted rather than throwing an error.

Revision 305 - 11/10/19

Chatbox

  • Fixed some labels (commander/rookie tags and wrapped lines) being invisible in the chatbox.

Misc

  • Fixed an error being thrown when a plugin that uses a logger has an invalid LogLevel in its configuration file. Invalid levels are now replaced with INFO and a warning is logged.
  • Fixed tooltips and menus not inheriting styling from their parent element.

Revision 304 - 05/10/19

MOTD

  • The message displayed on connect now only displays the first time a player connects to the server, and not after every map change. If a player disconnects, then they will see the message again the next time they connect.
  • The Mode option now uses an enum instead of a number.

Misc

  • Fixed List controls not resizing their scrollbar to match changes in the list's size (which caused the admin menu player list's scrollbar to be tiny).
  • All SGUI elements that made use of a stencil box now use the new cropping functionality instead.
    • This makes nesting cropped elements finally possible.
    • Note that certain text elements with a negative position will not be rendered at all inside a cropping box (an engine feature/bug).
  • SGUI labels now make use of the new multi-line text alignment functionality.
    • This allows vertical button element's text to be centre-aligned properly now.
  • The ShadowLabel control has been deprecated and is now just an alias for Label. Label controls can now have a shadow specified (and make use of the new engine-level shadow functionality).
  • SGUI controls can now have multiple styling states enabled at once. Use the new AddStlyingState/RemoveStylingState methods instead of the old SetStylingState. When multiple states define a value for the same property, the last state to be added wins.
  • Fixed TextEntry carets being slightly offset too far to the left when deleting text.

Revision 303 - 18/09/19

  • Fixed ClientConnect event being hooked too early after changes in the last update, which meant plugins such as AFK kick would fail to handle connection events properly.
  • Prevented welcome messages plugin from handling bad calls to Server.DisconnectClient().

Revision 302 - 15/09/19

Bans

  • Fixed alignment of page text entry.

Map Vote

  • Fixed script error when moving players to the ready room at the end of the round when some players are bots.

Revision 301 - 14/07/19

Chatbox

  • Fixed a script error when running older mods that include an old version of GUIChat.

Logging

  • Added logging messages when votes are started through the game's built-in voting system. These can be controlled by the LogGameVotes configuration option (defaulting to true).

User Management

  • Fixed script error when viewing group information of a group that has commands that have argument restrictions or are explicitly denied in a whitelist.

Revision 300 - 20/06/19

Map Vote

  • Fixed the map vote opening on top of other menus (such as NS2+'s end of round stats). The vote menu will now wait until all other menus are closed before opening automatically.

Vote Shuffle

  • Fixed a script error that occurred when assigning players to teams caused by build 328 changes.

Misc

  • Fixed various issues with SGUI:
    • Skins now work as expected, and a new light theme skin has been added.
    • Fixed hidden windows capturing mouse focus.
    • Fixed scrolling behaviour when a panel can be scrolled both horizontally and vertically.
    • Fixed inconsistent layout invalidation behaviour.
  • Translucent web pages no longer show the "Loading..." text when they have finished loading in the standard web page viewer.
  • Fixed a few other minor script errors.

Revision 299 - 22/04/19

Admin Menu

  • Fixed tab button text overflowing in non-English languages (though alignment is not centred when wrapped as NS2's text rendering does not support it).
  • Tabs now display icons to make them stand out better and allow collapsing the tabs for more room.

Config Menu

  • Re-organised client settings into tabs per plugin to make it clearer which settings belong to which plugins.
  • Added translations for tab buttons.

Bans

  • Added AlwaysBlockFamilySharedPlayers option to decide whether all players using family sharing should be blocked from the server, or just those that are sharing with a player that is banned. Note that this requires CheckFamilySharing to be enabled, and a Steam API key set in the base config.

Base Commands

  • Added CustomVotePrefix option to set a prefix for custom vote messages, defaulting to POLL: . This makes it clearer that a custom vote is not going to perform any action at the end.

Map Vote

  • Player-initiated map votes now prevent a round from starting (providing they occur during pre-game and not the countdown) until they complete to avoid rounds starting when the map is going to be changed.
  • The nominate command now accepts partial map names (e.g. "veil" instead of "ns2_veil").

Vote Shuffle

  • Added RemoveAFKPlayersFromTeams option to control whether AFK players are moved to the ready room/ignored when shuffling, or placed onto teams. This defaults to true to preserve the existing behaviour.
  • Improved friend grouping functionality:
    • There are now 3 client options for handling friend grouping requests:
      • Always accept - existing default behaviour.
      • Ask whether to accept - a new option that will display an invite that can be accepted/rejected when a player tries to add you to a group.
      • Never accept - existing block group requests option.
    • Additionally, there is now the concept of a group leader, which is the player that first added another player. The leader can remove other players from the group, and optionally restrict invites to only come from themselves. This should prevent random players from joining a friend group uninvited.

Misc

  • Fixed detection of the vote menu button to account for a clash between menu binds and binds set with the bind console command. If the vote menu button is bound to a button also set in the options menu, it is assumed the button is not bound and a warning will be displayed during map votes.

API

  • Plugins are now loaded in alphabetical order on the client, matching the server's behaviour.
  • Added AddClientSetting helper method for client-side plugins, making it easier to add settings to the client config menu. Additionally, to group settings in a tab, add a ConfigGroup field to the plugin with an optional Icon field. The name is taken from the CLIENT_CONFIG_TAB translation key by default.
  • Many improvements to SGUI, see the full changes on GitHub.

Revision 298 - 04/02/19

Map Vote

  • Improved configuration options for nominations:
    • Added options to impose a maximum number of nominations, either absolute or based on a fraction of the current player count.
    • Added option to decide what happens if a nomination would bring the total map options above the maximum limit.
    • Added options to allow nominating maps that are not in the map cycle or that would be excluded due to being played recently.

Vote Shuffle

  • Added friend grouping, which allows players to indicate to the shuffle optimiser that they want to play on the same team.
    • Like team preferences, this can be configured at 4 weighting levels using the PlayWithFriendsWeighting option: NONE, LOW, MEDIUM and HIGH. Higher levels may result in less balanced teams but will favour keeping groups together more strongly.
    • Groups have a maximum size limit that can be configured using the MaxFriendGroupSize option.
    • Joining a group is performed using the scoreboard. Simply click a player and choose "Join friend group". To leave a friend group, click yourself and choose "Leave friend group".
    • Players can be prevented from adding others to friend groups on the server by denying access to sh_add_to_friendgroup.
    • Players can also individually opt out of being added to friend groups by others using the client config menu (or the sh_shuffle_block_friend_groups command).

Tournament Mode

  • Fixed script errors with countdown messages.

Misc

  • Fixed plugin conflicts not being applied.
  • Altered plugin loading to ensure that all plugin names are lower case, regardless of the case of files on the file system.
  • Groups that inherit from other groups no longer need to define a Commands list.

Revision 297 - 13/01/19

Base Commands

  • Added sh_reloadmap command.
  • Fixed local voice chat all talk using the wrong origin for spectators that are observing a specific player in first person.

Vote All Talk

  • Added BlockUntilSecondsIntoMap option.

Vote Shuffle

  • Added BlockUntilSecondsIntoMap option, which determines how long to wait after a map change before a shuffle vote is allowed.
  • Renamed other time-based options to clarify their units.
  • Removed tolerance value options as they do not affect shuffle results in a positive way.
  • Team preference configuration is now output in sh_teamstats.
  • Fixed all players flashing on the scoreboard when opening it for the first time with players already on teams.

Misc

  • Consistency checking is now enforced for extensions and other dynamically loaded files regardless of the server's consistency configuration to ensure only those present on the server may be loaded.
  • It is no longer possible to load/unload the client side of a shared plugin using console commands or the auto-load system.

API

  • Extensions are now loaded in a way that permits catching and reporting syntax/execution errors during the load process. As a side effect of this, file hooks will no longer detect extension files being loaded.
  • Added a new way to define plugins that avoids needing to call Shine:RegisterExtension(). All plugins included in the main mod now use this approach, though the old approach will also continue to work and will not be removed.
  • Consistency checking is now enforced on all dynamically loaded scripts automatically when using Shine.LoadScriptsByPath on the server.

Revision 296 - 06/01/19

Bans

  • Fixed a script error that could occur when a vanilla ban entry has a non-number time value.

Base Commands

  • sh_changelevel (!map) now accepts map names without the ns2_ prefix, as well as partial map names. It will first attempt to find an exact matching map, then add ns2_ to the start, and finally search all known maps for exactly one that contains the given map name. If a map is unknown (i.e. not in the map cycle or mounted as a .level file), it will no longer attempt to load it blindly and instead display an error message.

Chatbox

  • Fixed an empty space being left at the bottom of the chatbox sometimes after many messages have been received.

Pregame

  • The default start delay time is now 30 seconds.
  • Updated the configuration format to be more clear around time units and the selected mode.

Vote Shuffle

  • Fixed an incorrect message being displayed when automatic score based/random teams are enabled/disabled.
  • When auto-assigning is enabled, the "you have been placed on a team" message will no longer show when the assigned team matches the desired team.

User Config

  • Fixed a script error when evaluating permissions if the InheritsFrom value in a group is not an array.
  • String values for InheritsFrom are now interpreted as a single group whose name is the given string, rather than ignored.
  • Using the string value "true" for the IsBlacklist group flag is now interpreted the same as boolean true.

API

  • Hooks are no longer duplicated when Hook.SetupClassHook or Hook.SetupGlobalHook are called with the same hook name and function/class method.
  • Adding the same hook name more than once with Hook.SetupClassHook or Hook.SetupGlobalHook against a different function/class method will now log a warning message.
  • Providing an unknown mode name to Hook.SetupClassHook or Hook.SetupGlobalHook will now result in an error rather than silently failing.

Revision 295 - 02/12/18

Vote Shuffle

  • Players that have never moved since loading in will now be treated as AFK and not placed on a team, regardless of how long they have been idle.

Misc

  • Removed old NS2:Combat compatibility layer.

Revision 294 - 18/11/18

Base Commands

  • Added sh_listgags command to print all gagged players to the console.

Vote Shuffle

  • Team preference can now be accounted for during team optimisation. Set the TeamPreferences.CostWeighting to one of LOW, MEDIUM or HIGH to control how strongly to consider team preference. Higher values may result in slightly more imbalanced teams, but should better respect team preferences.
  • Improved behaviour when team preference weighting is NONE to no longer ignore potential swaps when players have a team preference but are not on the team they want.
  • Team preferences are now automatically set whenever a player intentionally joins a team using either console commands or walking through a team door.
    • This is set even if they cannot yet join the given team.
    • This preference is reset at the end of a round.
    • The existing team preference option is used as a default if no team has been selected.
  • The vote menu now displays the current team preference if one is set.

API

Hooks
  • PreLoadScript and PostLoadScript are now always available, even after map load. They will be called only once per script (unless the script is reloaded by passing true to Script.Load).
  • In addition to the generic hooks, it is now possible to target specific script files with the convention PreLoadScript:lua/path/to/script.lua(and similarly for PostLoadScript).
  • JoinTeam is no longer called for plugins when shuffle is applying its team swaps to avoid plugins incorrectly interfering with the result. Use PostJoinTeam to track team changes, or PreShuffleOptimiseTeams to control team sizes.
SGUI
  • Added ShadowLabel control, which provides a way to render text with a shadow behind it.
  • Updated ColourLabel to be able to use ShadowLabel controls and to layout its text elements vertically instead of horizontally.

Revision 293 - 13/10/18

  • Fixed the name filter plugin not always renaming players correctly.

Revision 292 - 15/09/18

Adverts

  • Triggered adverts can now specify a game state filter.

AFK Kick

  • Altered the format of the warning message when enough players are present to kick and KickOnConnect is not enabled to no longer use the vanilla AFK message.

Base Commands

  • Fixed rate settings not applying correctly on the high rate alpha build and for any future changes to default rates, and moved them to their own Rates section of the config.
  • Added Rates.ApplyRates option to control whether rate values in the config should be applied or not. Set this to false to always use the default rates.

Vote Shuffle

  • Updated sh_teamstats to indicate when the shuffling algorithm has been modified, and to show the number of players that got their preferred team in the last shuffle.

Other

  • Fixed votes "passing" when the server becomes empty.

Revision 291 - 19/08/18

Adverts

  • Added new advert triggers:
    • COMMANDER_LOGGED_IN
    • MARINE_COMMANDER_LOGGED_IN
    • ALIEN_COMMANDER_LOGGED_IN
    • COMMANDER_LOGGED_OUT
    • MARINE_COMMANDER_LOGGED_OUT
    • ALIEN_COMMANDER_LOGGED_OUT
    • COMMANDER_EJECTED
    • MARINE_COMMANDER_EJECTED
    • ALIEN_COMMANDER_EJECTED
  • Each of the new triggers may be formatted with the commander's name using {CommanderName}.

Badges

  • Badges can now be forced by adding a ForcedBadges entry to either a user or group.

Base Commands

Chatbox

  • Added an option to make the outer chat follow the chatbox when moved.

Map Vote

  • Players nominating a map that has conditions that may mean it does not appear are now informed that conditions exist.

Vote Shuffle

  • Players will no longer be auto-assigned to a team when both playing teams are empty.

Other

  • NS2 votes can now be blocked for users/groups by assigning permissions of the form sh_ns2_<votename>. See the wiki for a list.

Revision 290 - 22/07/18

Adverts

Misc

  • Fixed chat commands accepting too many possible characters to be triggered. They can now only be triggered by either ! or /.

Revision 289 - 08/07/18

AFK Kick

  • Any activity now immediately prevents a player from being eligible for kicking when using KickOnConnect and strict mode, rather than requiring activity relative to the time AFK.
  • Fixed a rare script error when attempting to move players into spectate/ready room.

Revision 288 - 17/06/18

Admin Menu

  • Fixed being unable to permanently gag players using the admin menu.

Vote Shuffle

  • Fixed the new team skill icon overlapping the standard deviation values on the scoreboard.

Other

  • Player matching in commands now favours Steam ID over game ID when provided a number. Use #<ID> to target by game ID specifically.

Revision 287 - 05/06/18

AFK Kick

  • Improved the message displayed when a player is warned and the server has less than MinPlayers connected. It will now inform them that they will be kicked only if they exceed KickTime and the number of players reaches MinPlayers.
  • The plugin now overrides the vanilla AFK timer to ensure infantry portals know when players are AFK.

Vote Shuffle

  • Team statistics for sh_teamstats and vote constraints are now cached to improve performance in certain cases.

Other

  • Added a rate limit to command execution. This can be changed with the MaxCommandsPerSecond option in the base config.

Revision 286 - 12/05/18

Admin Menu

  • Fixed script error when the bans tab has never been opened and a ban is being added through the commands tab.

Base Commands

  • Added a hook for other mods/plugins to change the position and visibility of the "All talk is enabled" text to better fit extra HUD elements.

Vote Shuffle

  • Added VoteConstraints configuration options to constrain when a vote can occur based on the current difference in average skill and optionally standard deviation of skill.
  • Fixed bots showing up in sh_teamstats.

Revision 285 - 28/04/18

Admin Menu

  • The admin menu has been overhauled to make it more useful.
    • Notifications will be displayed when errors occur or actions are performed, rather than displaying in the chat or the console.
    • The size has been increased slightly to allow lists to display more at once.
    • The menu now scales correctly at resolutions larger than 1920x1080.
  • Commands tab:
    • Buttons are now disabled until player(s) are selected. Commands that apply to only one player will be disabled when selecting multiple.
    • Players are now sorted by team, then name by default.
    • Added command buttons to ban players from the server or commanding to avoid needing to go into the respective ban tab.
    • Fixed applying commands to bots always choosing a random bot. Commands will now properly apply to the selected bot(s).
  • Bans/Comm Bans tab:
    • Data is now paginated, allowing much easier navigation and avoiding the list having excessive entries. Use the forward/back buttons, or click the page number to edit it.
    • Bans can now be filtered using the search box at the top of the tab.
    • Hovering over a ban entry will display more information (the duration, date issued and reason if available).
  • Plugins tab:
    • Plugin state is now displayed using coloured icons rather than text to make it easier to read.

Base Commands

  • Vanilla pregamealltalk will now be automatically disabled if AllTalkPreGame is enabled.
  • The "All talk is enabled" text will now persist if global all talk is enabled and no longer misleadingly state it is disabled when a game is about to start.
  • Fixed the "All talk is enabled" text overlapping the inventory at the bottom of the screen. It will now hide itself when the inventory is temporarily visible, and move itself to the top of the screen if the inventory is configured to be permanently visible.
  • It is no longer possible to gag bots.

Map Vote

  • Fixed players not always being moved into the ready room at the end of a map due to changed behaviour in NS2 build 322.

Vote Shuffle

  • Added !forceshuffle and sh_forceshuffle aliases to the sh_enablerandom command.

General

  • Command notifications will now always be sent to the player that executed the command, even when NotifyOnCommand is disabled.
  • Improved error messages when targeting Steam IDs where the player is on the server. It will now use their name rather than their Steam ID in this case.

Revision 284 - 08/04/18

AFK Kick

  • Removed Steam overlay checking due to the game not always seeing the correct Steam overlay state.
  • Improved performance by sampling move commands rather than checking them all. Use the SampleIntervalInSeconds to set how frequently to sample move commands.

Chatbox

  • Added option to always scroll to the bottom when opening the chatbox.

Map Vote

  • Added BlockAfterRoundTimeInMinutes option to block map votes after a given number of minutes in a round have passed.
  • Added ExcludeLastMaps.UseStrictMatching option to determine whether to strictly match previous map names when removing them from vote options. If false, then maps such as ns2_veil and ns2_veil_five are considered equal and thus if either were previously played they will exclude each other.
  • Added ConsiderSimilarMapsAsExtension option to determine if maps named similarly to the current map should be blocked from being vote options when extension of the current map is denied.
  • Added VoteTimeoutInSeconds option to allow votes to initiate a map vote to time-out if players stop voting to change the map.

General

  • Improved performance of the hook system.
  • Improved performance of UTF-8 parsing.
  • Removed some unnecessary Think hooks in basecommands and mapvote.
  • Added LinkedList type, and changed Queue to use a more simplified approach.

Revision 283 - 01/04/18

Chatbox

  • Fixed text potentially wrapping badly on lower resolutions.
  • Fixed the history always scrolling to the bottom when opened, regardless of previous scroll state.
  • Fixed changing the size of the chatbox always re-opening it in global chat mode regardless of the previous mode.

Shuffle

  • Improved automatic team assignment logic when teams are blocked to better determine which team a new player should be placed on.

Vote Surrender

  • Fixed votes not being reset correctly.
  • Prevented multiple surrender votes from passing simultaneously.

General

  • Votes will now pass when a player leaving causes the total required votes to equal the total votes cast, rather than requiring another vote.

Revision 282 - 25/03/18

  • Fixed edge cases that would result in the cursor disappearing when becoming a commander if menus were open at the time of entry.
  • Fixed edge cases where menus would remain on the screen without a mouse cursor when leaving a command structure.

Revision 281 - 18/03/18

  • Fixed a minor script error when joining a server during a map vote.

Revision 280 - 17/03/18

AFK Kick

  • Checking the Steam overlay can now be disabled using the config option CheckSteamOverlay = false.

Chatbox

  • Opening the chatbox in team chat will now change the background colour slightly to reflect the team you are on. This should help make it clearer when it has been opened in team chat mode vs. global chat.

Map Vote

  • The map vote menu may now be opened automatically for players when a map vote starts using the config option ForceMenuOpenOnMapVote = true.
    • The menu will not open if a game is in progress or about to start.
    • Clients may override this behaviour in the client config menu or using the sh_mapvote_onvote command in the console.

Vote Shuffle

  • Implemented an improved team optimisation pass that produces much more balanced teams compared to the old method in most cases.
    • The optimisation process will pick the best team composition from the old and new methods.
    • The new method is unaffected by the StandardDeviationTolerance option. This option should be considered deprecated.
    • The behaviour of AverageValueTolerance remains unchanged.
  • When forcing shuffles with AlwaysEnabled = true, the vote will now be to disable the automatic shuffle for the next round start. If it is disabled, it can still be voted back to enabled again as long as the round doesn't start.

Welcome Messages

  • Join and leave messages for specific players can now have their own colour, prefix and prefix colour.
  • The config is no longer used to track which players have had their message displayed across map changes. This has been moved to a separate file to prevent the config being constantly changed by the server.

Revision 279 - 03/03/18

Adverts

  • Fixed map filters not being applied.
  • Improvements:
    • It is now possible to specify multiple cycles of adverts.
    • Cycles can now have start/stop triggers.
    • Cycles can now have looping disabled so that they only display their advert list once.
    • Cycles can now have a default template.
    • Messages can now use multiple templates, with earlier templates overriding later ones.
    • Messages/templates can now specify their own delays to override a cycle's default interval.
    • Messages/templates can now specify a team filter to show the message only to players in the given team(s).
  • For more information, see the wiki page.

AFK Kick

  • The AFK prefix will now only show on the scoreboard and not interfere with auto-complete or the admin menu.

Base Commands

  • Added a new command, sh_slotsummary, to display a summary of player slot usage in the console.

Map Vote

  • The "Map Vote" button now opens the voting page when clicked during a map vote, rather than displaying an error message.

Reserved Slots

  • Fixed reserved slots being consumed by spectators when TakeSlotsInstantly is enabled and SlotType is PLAYABLE.

Revision 278 - 24/02/18

AFK Kick

  • Fixed spectators in first person being warned/kicked unfairly.

Chatbox

  • Added auto-completion of location and player names. Press the tab key to cycle through available completions, and hold shift to cycle in reverse order.
    • You may use the start of words, acronyms and abbreviations (e.g. xroads, ops), as well as a more loose containment match.
    • For example, typing dc and pressing tab could complete the location named Data Core, or typing xr may complete Crossroads.

Tournament Mode

  • Fixed a script error when a player rejoins the game.

Vote All Talk

  • Added a new plugin named votealltalk which adds a vote to enable or disable global all talk.

Other

  • TextEntry objects can now have an auto-completion handler added to them. See the chatbox plugin for an example.
  • Multi-select lists (such as the admin menu's player list) now require holding either ctrl or shift to select multiple rows.
  • Plugins can now declare dependencies on other plugins being enabled by adding a DependsOnPlugins field, which should be a list of names of plugins that must be enabled to allow the given plugin to be enabled.
  • Fixed generated configs (created when a plugin has no config file) not having the plugin's version added to them.

Revision 277 - 03/02/18

Reserved Slots

  • Added new SlotType option. Can be either:
    • PLAYABLE - the existing behaviour.
    • ALL - treats all slots as a single max player limit, including spectator slots. This allows for reserving spectator slots.

Map Vote

  • The end of map vote now blocks vanilla votes that would interfere or not function correctly while it is ongoing.

Other

  • Changed the error message when attempting to vote kick a player that has a higher immunity to state they cannot be targeted.
  • Fixed a few issues with datatables.

Revision 276 - 27/01/18

AFK Kick

  • Time resetting behaviour can now be configured to one of 3 modes:
    • STRICT - the existing mode, where time is only reduced with activity, not reset.
    • LENIENT_FOR_SPECTATORS - equivalent to the old LenientModeForSpectators option, resets time for spectator activity, but still applies strict tracking to non-spectators.
    • LENIENT - resets time for any player activity.

Unstuck

  • The plugin will no longer unstick players that are trapped in bone walls.
  • Added the DelayBeforeMovingInSeconds option, which allows for enforcing a delay between a player using the unstuck command and them being moved. If the player moves between this delay they will not be unstuck.

Revision 275 - 20/01/18

Adverts

  • Adverts can now use templates to avoid repeating colours in messages.
  • Adverts can now have a coloured prefix.
  • Adverts can now be triggered on certain events, such as a round starting, as well as having a cycle.
  • Adverts may be filtered by map/game state.

Vote Menu

  • When voting, buttons will show a tick on the button if you have already voted.
  • The "Map Vote" button now displays a counter for the current number of votes to change the map.

Config

  • Fixed web configs not properly validating/migrating data.
  • Added a recursive config check option (CheckConfigRecursively) for plugins, which checks all values in the default config except arrays and explicitly ignored tables using Shine.IgnoreWhenChecking().
  • Added OnWebConfigReloaded event for plugins.
  • Improved the output format of configs when they are updated to make it more readable.

Revision 274 - 08/01/18

  • Fixed shuffling not ignoring commanders when player team satisfaction is low.

Revision 273 - 28/12/17

Shuffle Improvements

  • Team preferences can now be explicitly specified by players.
  • When shuffling, a history of previous rounds indicating which players got to play the team they prefer is used to determine an overall score for how satisfied players are with their teams. If there are more players unhappy than happy, the final teams will be swapped entirely (i.e. marine becomes alien and vice-versa).

AFK Tracking

  • Player AFK state is now always tracked, regardless of player count/round state. However, no action will be taken until the minimum player count/correct round state is reached.
  • When the minimum player count/correct round state is reached, any player that has been AFK for greater than the warn/kick time will be warned/kicked immediately, rather than starting from 0 AFK time.

Revision 272 - 10/12/17

AFK Kick

  • Can now specify separate warn actions for players that have partial immunity (through sh_afk_partial), and no immunity.
  • Players in a frozen state now have their AFK time tracked, rather than reset, but will not be punished while they are frozen if they are providing no input.
  • See the wiki page for the new format.

Map Vote

  • Can now specify constraints on how many votes are needed to start a vote, pass a started vote, and pass an end-of-map vote.
  • Can also specify constraints on how many votes are needed to finish a started vote, and an end-of-map vote early.
  • See the wiki page for the new format.

Vote Shuffle

  • Refactored the configuration to be more understandable.
    • Balance modes are now strings, rather than a number (e.g. "HIVE" for Hive based).
    • Actions to take on passing a vote are now configured separately for votes passed in the pre-game, and those in a round.
    • The cooldown time for a vote is no longer tied to its enforcement duration.
  • See the wiki page for the new format.

Other

  • Fixed the tournament mode plugin breaking the vanilla server configuration.
  • Fixed plugins calling NetworkUpdate when they are not enabled, and ensured errors are caught.
  • Made the chatbox command auto-completion return results faster.
  • SGUI elements no longer need to pass true to Destroy.
  • Error reports now contain a more detailed stack trace.

Revision 271 - 16/09/17

  • Bots are now prevented from re-joining until the end of a round after a shuffle vote has passed and ApplyToBots is set to false.
  • Added Finnish translations for the afkkick plugin (thanks MisterOizo!)

Revision 270 - 24/08/17

  • Updated the reserved slot plugin to not block spectator slots.
  • Updated the shuffle plugin to not shuffle players in spectator slots.

Revision 269 - 29/07/17

  • The amount of time before a player is considered AFK when shuffling is now controlled by the VoteSettings.AFKTimeInSeconds option.
  • Players can now be persistently gagged using sh_gagid/sh_ungagid.
  • Players can now be persistently renamed with the name filter plugin using sh_renameid/sh_unrenameid.
  • New options for surrender votes:
    • PercentNeededInEarlyGame - When non-zero, sets the percentage of votes needed to surrender during the VoteDelay duration after a round start.
    • LastCommandStructureMinHealthPercent - When non-zero, sets the percentage of health required on the last command structure to allow a surrender vote.
  • The commander bot vote delay can now be set with the CommanderBotVoteDelayInSeconds option in the base commands plugin.
  • Small Chinese translation fix (thanks axamdy).

Revision 268 - 11/06/17

  • Fixed vanilla chat showing behind the chatbox.
  • The admin menu no longer preserves player selections when closed and re-opened.
  • Added Chinese (Simplified) translations (thanks axamdy!)

Revision 267 - 27/05/17

  • Fixed kick votes not respecting immunity after the last NS2 update.

Revision 266 - 26/05/17

  • The vote menu, admin menu and configuration menu now all hide themselves when the help menu is displayed.
  • Updated fiFI translations (thanks MisterOizo!)

Revision 265 - 16/05/17

  • Added BanSharerOnSharedBan option to the bans plugin. When enabled, banning a player that is playing the game through family sharing will also ban the account that is sharing the game to them. Combine this with the CheckForFamilySharing option to prevent players from using family sharing to avoid bans.
  • User groups set to be whitelists can now deny commands that are allowed by default.

Revision 264 - 11/04/17

  • Fixed shuffling rarely causing incorrect team compositions, including swapping commanders when told to ignore them.

Revision 263 - 29/03/17

  • Fixed the chatbox not always correctly wrapping text.

Revision 262 - 11/03/17

  • Fixed the all-talk message not behaving quite correctly in some cases.
  • Fixed being able to use string formatting in csay messages.
  • Replaced behaviour added in build 314 to fix all talk being disabled when the warm up mode ends (but only when using the pregame plugin).
  • Fixed datatable change listeners not receiving the old value.

Revision 260/261 - 05/03/17

  • Fixed nominations not always being added to the final vote list.
  • AFK players can now be excluded from all votes, both Shine's and the vanilla votes.
  • Fixed maps not respecting min/max/percent values.
  • Changed the AFK warning when KickOnConnect is enabled to indicate that the player may be kicked when a new player joins.

Revision 259 - 28/02/17

  • Fixed nominations not working correctly when excluding previous maps after the last update.

Revision 258 - 19/02/17

Map vote

  • Configuration format for ExcludeLastMaps is now an object with Min and Max fields.
    • Min determines the absolute minimum previous maps that must be removed from the choices.
    • Max is an optional upper limit on the number to remove.
    • Without an upper limit, the maximum will be the number of maps that can be removed that still allows for MaxOptions number of choices available.
    • The old value for this has been migrated to emulate the old behaviour by setting Min = Max = Old value.
  • Default VoteLength value is now 1 minute.

API

Revision 257 - 29/01/17

  • Players in the Steam overlay are now always considered AFK.
  • Fixed not kicking bots correctly when shuffling players.

Revision 256 - 20/11/16

  • Fixed script error caused by changes to badges functionality in the game.
  • Fixed script error in vote shuffle's local stats when the game ends in a draw.

Revision 255 - 02/11/16

  • Fixed a script error in the vote shuffle plugin when using local stats recording.
  • Fixed the escape button not closing command menus in the admin menu.
  • Added a text entry for a custom kick reason to the kick command's menu.
  • Made move detection more forgiving for spectators, and added the LenientModeForSpectators option to make AFK time reset to 0 when spectators move.
  • Vote shuffle and vote surrender are now disabled automatically for the new infected gamemode.

Revision 254 - 18/10/16

  • Fixed players being blocked from entering spectate when team enforcing is enabled after a shuffle vote.
  • Fixed a script error in the shuffle plugin when AlwaysEnabled mode is true.
  • Fixed a script error in the base commands plugin when toggling local all-talk.

Revision 253 - 19/09/16

  • The shuffle plugin no longer moves commanders to the ready room if they are AFK and IgnoreCommanders is true.
  • Fixed standard deviation not being correct on the scoreboard due to a logic flaw.

Revision 252 - 14/08/16

  • Added the MaxNominationsPerPlayer option to the map vote plugin. This determines the maximum number of maps an individual player is allowed to nominate per vote.

Revision 251 - 17/07/16

  • Fixed bots being counted towards votes in the vote surrender plugin.
  • Defaulted showing connection messages for bots to disabled. Controlled by the ShowForBots setting.
  • Added a 4th mode to the pregame plugin, which waits for a minimum team player count before allowing the game to start with 2 commanders.
  • Renamed the mode option in the pregame plugin from RequireComs to Mode, and made the scale from 1 - 4 for each mode described on the wiki page. This will be automatically changed for you.
  • Prevented the warmup bots from interfering with team shuffling. Use the new ApplyToBots setting to allow them to be shuffled (defaults to false, which removes them on a shuffle).

Revision 250 - 10/06/16

  • Updated to account for the new warm-up game state (thanks Ghoul).
  • Fixed a rare script error in chat message handling.

Revision 249 - 29/05/16

  • sh_listplugins can now be used by anyone.
  • Czech translation improvements (thanks kparal).
  • Fixed the admin menu having some text going outside the window.
  • Changed some commands in the base commands plugin to no longer log/broadcast messages that should only be seen by the player running the command.

Revision 248 - 20/05/16

  • MOTD text colour can now be changed with the MessageColour option.
  • The AFK prefix on players can be disabled with the MarkPlayersAFK option.
  • Shuffle vote notifications can now be set to not show when players vote in the chat with the NotifyOnVote option. A counter will also now be displayed on the vote menu button showing how many people have voted for a shuffle, and how many votes are required.
  • Fixed spectator entries in the scoreboard constantly flashing when HighlightTeamSwaps is enabled.
  • Added the sh_stopvote command to the base commands plugin. This will immediately stop any running vanilla vote.
  • Fixed a script error when a plugin defines conflicts on the client. Conflict resolution on the client will now be correctly ignored, as conflict resolution is for the server only.

Revision 246/247 - 13/05/16

  • Added NotifyOnWarn option to the AFK kick plugin. Sets whether players should have their taskbar icon for NS2 flashed, and a sound played when they are warned for being AFK.
  • Added MovementDelaySeconds option to the AFK kick plugin. Sets the number of seconds to wait after warning a player before performing a move action.
  • Fixed some issues in the AFK plugin that made it less friendly to inheritance than intended.
  • Fixed surrender votes not triggering the concede sequence (thanks Ghoul!). There is now also an option called SkipSequence, which when set to true will disable the concede sequence.
  • Fixed the chatbox not properly word wrapping messages that go beyond 2 lines, or that are added while it is closed.
  • (247) Fixed AFK warnings not working as intended after previous update's changes.

Revision 245 - 08/05/16

  • Languages can now define their plural forms, and the Pluralise transformer can support any number of plural forms based on the language's definition.
  • Messages that were using substitution of other messages/team names have now been expanded to one message per variation.
  • Added two utility commands for translation editing:
    • sh_missingtranslations <langcode> outputs all missing translation keys for the given language compared to enGB.
    • sh_testpluralform <langcode> <number> outputs the selected plural form for the given language code when given the provided number.
  • Czech translations have been improved based on these changes (thanks to kparal for all the feedback and updating the translations).

Revision 244 - 04/05/16

  • Added Finnish translation (thanks MisterOizo!)
  • Added French translation (thanks Pelargir!)
  • Updated German translation with some typo/grammar fixes (thanks Ghoul!)
  • Fixed pregame countdown text not always displaying, and looking odd when fading out if the countdown is cancelled.
  • Fixed the padding on the chatbox border looking uneven at lower resolutions.

Revision 243 - 28/04/16

  • Fixed locale detection not always using the in-game setting.
  • Added Czech translation (thanks kparal!)
  • Added the KickTimeIsAFKThreshold option to the AFK kick plugin to control the fraction of the kick time that a player must be AFK for to be considered AFK on the scoreboard (thanks lancehilliard!).
  • Added an event to the AFK plugin whenever a player's AFK scoreboard state changes (thanks lancehilliard!).

Revision 242 - 23/04/16

  • Added German translation (thanks ChrisStark and Ghoul!)
  • The ready room plugin now respawns players that attempt to spectate when spectating is disabled, rather than assigning them to a team.
  • Fixed a script error in the user management plugin when listing groups and users where some of the groups/users did not have an immunity value set.
  • Prevented plugins from creating/updating screen text items with bad formatting arguments.

Revision 241 - 19/04/16

  • Updated the default move rate in the base commands plugin to be 26 (thanks Ghoul).
  • All connection refusals (i.e. reserved slots and bans) now indicate to the player why the connection was refused.

Revision 240 - 12/04/16

  • All kicks performed by Shine now display a reason to the kicked player.
  • Improved a workaround to an NS2 team switching bug when shuffling players.

Revision 239 - 05/03/16

  • Fixed commands with no help message causing a script error.
  • Fixed commanders being swapped in team shuffles when IgnoreCommanders is set to true.
  • Fixed an NS2 bug around disconnecting bots which sometimes prevented team shuffling from swapping players.

Revision 238 - 13/02/16

Enhancements

  • Team shuffling now produces generally better results than it did before.
  • It is no longer possible to disable the use of standard deviation when sorting players. This almost always leads to unacceptably bad teams.
  • The output of sh_teamstats is improved to display when the last shuffle occurred, and how many players on the server are currently on the same team they were shuffled to last.
  • Bots are no longer counted in the scoreboard standard deviation value.

API Changes

  • Deprecated screen text functions have been removed.
  • Passing an invalid string to SetText() for screen text when it is set to format the string will now throw an error immediately.
  • A new event, PreShuffleOptimiseTeams, is fired right before the shuffle plugin optimises the teams. Use this to remove players from teams to avoid disrupting the team balance.

Revision 237 - 05/02/16

  • Fixed server rate validation being incorrect in some cases (thanks Ghoul).
  • Fixed the AverageValueTolerance setting not terminating team swapping correctly if the tolerance was hit in the first, team preference respecting pass.

Revision 236 - 02/02/16

  • Added Russian translations (thanks welldotru!)
  • Added AverageValueTolerance option to the shuffle plugin. This setting controls how much of a difference between average skill of the teams is enough to stop switching players. If the difference reaches at or below this value, no more switches will be performed.
  • The sh_teamstats command now displays the server configured tolerance values for standard deviation and average.
  • Really fixed the chatbox scrolling when opened after more messages have been added.

Revision 235 - 31/01/16

  • Fixed the chatbox layout breaking when opening without a new message.
  • Fixed a script error when attempting to vote for shuffled teams when the map is cycling.
  • Fixed a script error in the local stats functionality of the shuffle plugin when a player disconnected before they had any playtime set.

Revision 234 - 30/01/16

Enhancements

  • Errors in command arguments are now translatable.
  • The shuffle plugin can now record stats locally and balance by KDR/SPM using the locally recorded stats instead of Hive. The Hive values will be used to initially populate data for any players not seen before. The local values will also influence who is considered a rookie. For more information, see here.
  • It is now possible to grant users access to NS2 sv_* commands using the user config. Just add the sv_* commands you want to the commands table in the same way as Shine's commands.
  • Error reporting is now more reliable.

Bug Fixes

  • Players that are not rookies will no longer be moved onto teams in a rookie only server when a team shuffle occurs.
  • Missing translations in a language file will now fallback to the default language.
  • Fixed sh_groupinfo throwing a script error when given a group name.

API Changes

  • Plugins are now easier to split into separate parts. Modules merge themselves into the plugin, and can listen for events that the plugin calls for them.
  • Refactored object definition, and added the event dispatcher and storage objects.
  • SGUI's directional layout no longer considers invisible elements. Only visible elements (defined as Element:GetIsVisible() == true) will be moved/resized.
  • It is now possible to register translated command errors using Plugin:AddTranslatedCommandError(). These will show in the chat if the command was ran in the chat, or the console if ran in the console.

Revision 233 - 20/01/16

  • Prevented plugins from sending unregistered network messages.

Revision 232 - 18/01/16

  • Fixed a script error in the map vote plugin when a vote for the next map failed.
  • Fixed a script error when clicking the gag button in the admin menu.
  • Fixed the "Plugins" and "Maps" tab names not being translatable strings.
  • The tournament mode ready and unready commands no longer require a ! or /.

Revision 230/231 - 17/01/16

Bug Fixes/Enhancements

  • The chatbox can now be scaled down or up by up to 25% using a slider in its options menu.
  • Fixed the chatbox taking a moment to scroll all the way down when re-opened after a lot of messages have been added to it since its last opening.
  • Notification messages in a single colour now do not have a slight space behind them in the chatbox.
  • The gag/ungag functionality of the base commands plugin now persists between client reconnects.
  • Plugins now always load in the same order, alphabetically ascending.
  • The messages displayed by the welcome messages plugin for players on Marines/Aliens have been darkened slightly.
  • Fixed checkboxes looking odd at certain resolutions.
  • Added logging for when server rate change commands are used, and when the reserved slot count is changed.
  • Fixed the tournament mode plugin not displaying when a commander made their team no longer ready.
  • (231) Fixed the shuffle plugin saying it is shuffling for the next "nil" when given a tiny duration value in the config. It now ignores durations <= 5 seconds.

New Features

Revision 229 - 09/01/16

  • The bans plugin can now check for family sharing status of connecting players, and kick out those that have the game shared to them by a banned account. This requires the setting CheckFamilySharing to be true, and a Steam API key to be placed in the base config under APIKeys -> Steam.
  • The adverts plugin can now be set to display messages in a randomised order by setting RandomiseOrder to be true. This will randomise the order every time it restarts the message list.
  • The team shuffling plugin can now be set to display the standard deviation of Hive skill values on the scoreboard by setting DisplayStandardDeviations to true. This will only display if the shuffling mode is set to Hive skill based (mode 5).
  • The chatbox now updates its opacity as you slide the opacity slider.

Revision 228 - 04/01/16

  • Placing a badge in multiple rows in the master badge table now places it in all those rows when in a group's Badges array.
  • Changed the highlighting team swapping behaviour to oscillate the scoreboard player entry between translucent and opaque for 10 seconds after a team swap.

Revision 227 - 03/01/16

  • It is now possible to assign badges to rows by setting a master table of rows, then using simple JSON arrays in group entries. See here for details.

Revision 225/226 - 02/01/16

  • Fixed a few small script errors around highlighting team swaps in the scoreboard.
  • (226) Fixed the KickOnConnect option in the AFK kick plugin using the wrong units of time for determining how long a player is AFK for.

Revision 224 - 01/01/16 (Happy 3rd Birthday Shine)

  • Added HighlightTeamSwaps option to the "voterandom" plugin. When a player joins a new team, their entry on the scoreboard will be translucent and slowly fade in for 10 seconds after the change of team.

Revision 223 - 29/12/15

  • Added small previews of maps when hovering over their button in the vote menu. This only works for maps whose preview is currently mounted, so custom maps will not have a preview unless they're always mounted.

Revision 222 - 27/12/15

  • Fixed "inf", "nan" and hex values being considered numbers instead of names in commands.
  • Fixed small typo in the afk kick connection event.

Revision 220/221 - 26/12/15

221

  • Fixed the chatbox breaking if you pressed up before down with auto-complete.
  • Fixed plugin inheritance inheriting the base plugin before a parent plugin.

Bug Fixes

  • Fixed the admin menu commands tab not removing players that had disconnected from the list until you switched tabs away and back again.
  • Fixed multiple small issues around multi-client targeting and negation of targets.
  • Fixed string command argument restrictions breaking if you used a restriction with a Lua pattern control character. They will now be escaped automatically.
  • Fixed the base config being overwritten with the default if it was invalid JSON. It will now only be replaced in-memory with the default, the file on disk will be unchanged.
  • Fixed the sh_unstuck command not working in the ready room.

Enhancements

  • Commands now support multi-word arguments in the middle of the argument list. For example, sh_kick "Name with spaces" Reason here. would match a player whose name matches Name with spaces and the kick reason would be Reason here. as before.
    • If you need quotes inside an argument, escape them with a \ before them. For example: "Name \"with quotes\"".
    • This can be applied to any argument type, not just strings.
    • This works in both the console and the chat.
  • Commands that take a player or multiple players as arguments now indicate the string used to match if they fail to find a player.
  • The links in the admin menu's about tab are now highlighted and click-able, which will open them in the Steam overlay.
  • JSON errors are now reported when encountered, pointing at the line and column where the file stops being valid JSON.
  • You can now use "rr" as the ready room team for commands which take a team value.
  • Improved performance of Shine's hook system, especially for servers with a large number of extensions where few actually make use of events which fire every tick.
  • Name filter improvements:
    • The name filter plugin can now use plain text name filters as well as Lua pattern based. Add "PlainText": true to a filter to make it search for the exact text.
    • Invalid patterns in the name filter plugin now produce a warning in the console.
    • The rename action in the name filter plugin now renames the player to a variant of NSPlayerYYYY, where YYYY is some random number.
  • Bans tab improvements:
    • The bans tab now receives bans in order of expiry time, starting with the soonest to expire.
    • The bans tab now displays NS2IDs next to both the banned player name and the name of the player who banned them.
    • Sorting bans by the expiry column now actually sorts by the underlying expiry date, rather than the text displayed.

For plugin developers, API changes can be found here.

Revision 217/218/219 - 23/12/15

Revision 216 - 09/12/15

  • Renamed RTV to "Map Vote" in the vote menu.
  • Added an experimental option to the AFK kick plugin, "KickOnConnect". Instead of kicking players when they exceed the maximum AFK kick time, the player with the longest AFK time past the kick time is kicked when a new player tries to connect and the server is full. Marked as experimental as I have no viable means to test it as bots don't count as real clients.
  • Fixed a semi-rare layout glitch when the admin menu button is first added to the vote menu.

Revision 215 - 07/12/15

  • Fixed a regression in the chatbox layout when the used space decreases below the maximum, which leaves a gap at the bottom.

Revision 214 - 06/12/15

  • Added a new client-side config menu. Allows you to see and set client-side options. Access it either by the console command "sh_clientconfigmenu" or in the vote menu by clicking the "Client Config" button.
  • Refactored the way the chatbox handles layout. It should be much more consistent across resolutions now.
  • Fixed a bug that caused a 1-frame skip when the chatbox received a new message and scrolled down because of it.
  • Lots of under the hood UI-based API changes. If you're a plugin author interested in this, see here for a summary.

Revision 213 - 04/12/15

  • Fixed 278 load order issues (for if/when it comes back).
  • Fixed the admin menu add ban window's drop down list going off the screen with too many players. It now adds a scrollbar.

Revision 211/212 - 27/11/15

  • Fixed shuffling not working as intended when the alien team has one more player than marines.
  • Shuffling now makes absolutely sure there's even team counts before attempting to optimise.
  • Improved text wrapping performance for the chatbox.
  • Fixed the options button in the chatbox looking odd at higher resolutions.

Revision 212

  • Fixed script error when clicking an empty text entry.

Revision 210 - 11/11/15

  • Added a client-side option to enable/disable local all talk for yourself. Enter into the console "sh_alltalklocal_cl false" to disable it, or "sh_alltalklocal_cl true" to enable it. It defaults to enabled.

Revision 209 - 09/11/15

  • Fixed the local all talk option breaking commander alerts.
  • The chatbox now wraps text in the same way the chat alerts do (with wrapped lines using all the available width).

Revision 208 - 08/11/15

  • Added "AllTalkLocal" option to the base commands plugin, and sh_alltalklocal command to toggle it in-game. This makes local voice chat hearable across teams.
  • Reduced the frequency of the "Waiting on <team> to start" messages in the pregame plugin to once every 30 seconds.

Revision 207 - 04/11/15

  • Fixed the shuffle plugin not resetting the vote block time after a reset vote.
  • Added the ability to set a maximum percentage a map is allowed to be played to the mapvote plugin. See here for details.

Revision 206 - 17/10/15

  • Fixed a script error in the score-based shuffle mode due to missing playtime data.

Revision 205 - 16/10/15

  • Fixed the chatbox and votemenu being oversized at 1440p and similar resolutions after the last NS2 update.

Revision 204 - 15/10/15

  • Updated to work with the new mod loading system in build 276.
  • Team shuffling will now properly bias towards keeping a player's team preference when sorting. You choose a team preference by joining a team.
  • KDR and score based modes now work based on globally recorded Hive data, rather than a local set of stats.
  • The message shown when a player is banned now includes the reason (thanks Ghoul).

Revision 203 - 27/09/15

  • Removed the message indicating team skill averages after a Hive skill shuffle and replaced it with the command sh_teamstats. Using this command, you can see anonymous skill values, average skill and the standard deviation of skill for both teams.

Revision 202 - 24/09/15

  • Further tweaked the shuffling algorithm to make sure it's not discarding swaps that improve the standard deviation difference.
  • Added a config option "StandardDeviationTolerance" to the voterandom plugin. This value controls how much of an increase in the difference between the standard deviation of the teams is allowed when the difference in averages can be lowered but the difference between standard deviations cannot. The default value should be fine for most cases, but feel free to experiment if you want. Note that if you set this to 0, then the algorithm is likely to hit a point where it cannot continue and leave teams in a bad state (which is how it behaved before yesterday's update).

Revision 201 - 23/09/15

  • Improved the algorithm behind team shuffling to avoid it creating unusually bad team compositions when accounting for standard deviation.

Revision 200 - 19/09/15

  • Disabled local error logging by default.
  • Made a few minor internal changes.

Revision 199 - 03/09/15

  • The bans plugin now disconnects banned players at the point they attempt to connect rather than when they are fully loaded (thanks Ghoul).

Revision 198 - 17/08/15

  • Fixed the chatbox not showing both the rookie and commander tags when both are present.
  • Fixed script error when changing resolution with the chatbox.

Revision 197 - 16/08/15

  • Fixed bug with the chatbox where the rookie/commander tag would sit at the bottom of the chatbox constantly.

Revision 196 - 04/08/15

  • Worked around a bug in the game engine causing server crashing when using in-game votes.

Revision 195 - 02/08/15

  • Added map grouping to the mapvote plugin. Allows you to create groups of maps to use for votes which cycle through the groups as the map cycles. See here for more information.

Revision 193/194 - 29/07/15

  • Fixed chatbox not showing the new rookie/commander tags.
  • Fixed the admin menu resetting the open tab after enabling a plugin that adds a tab.
  • Added new option to vote surrender to prevent voting if the team has more than one tech point (thanks Ghoul).
  • (194) Fixed map cycling not working correctly after the build 275 update.

Revision 192 - 28/06/15

  • Fixed votes to change map/shuffle teams having incorrect grammar at one vote left.
  • Fixed the help text for commands showing the string version of the function if no help text is provided.
  • Fixed a bug in the list/panel UI elements where they would not handle shrinking of the scrollbar correctly and potentially leave the view stuck.

Revision 190/191 - 21/06/15

General Fixes

  • Hopefully fixed the mapvote plugin moving players into the ready room sometimes failing.
  • Added a message to the mapvote plugin to inform a player of their vote when the global vote messages are disabled.
  • Fixed getting users stored using the Steam3ID not working.

UI Changes

  • Fixed a bug in the text entry control where deleting text before the selection box has finished resizing would leave it at the wrong size.
  • Fixed tooltips staying on the screen when all SGUI windows are hidden.
  • Fixed screentext not resizing and repositioning after a resolution change.
  • Changed the chatbox layout. There's now much less wasted space.

Revision 191 change

  • Fixed script error in permissions when importing NS2-style users.

Revision 188/189 - 25/04/15

Tournament Mode

  • Fixed the ServerConfig.json settings it changes not being reset at map change thus potentially leaving them altered if it is then disabled next map.
  • You can now use the !ready command to toggle between ready and unready.
  • The ready state of teams when everyone is required to be ready should be notified more clearly now.

Other fixes

  • Fixed plugins that relied on other plugins (such as the commbans plugin) ending up enabled when their parent plugin was enabled.

189 change

  • Fixed a script error related to screen text.

Revision 187 - 15/04/15

  • Fixed NS2 bug where if the ServerConfig.json file had a false entry where the default is a table, startup would fail and no clients would be able to connect.

Revision 186 - 11/04/15

General

  • Fixed map vote messages showing "blah revoted for blah map" when they're choosing the same map twice or more. It now shows an error message to the player instead, telling them they've already voted for it.

Admin menu fixes

  • Fixed popup menus in the commands tab of the admin menu requiring two clicks to re-open if you clicked elsewhere in the menu to close them.
  • Lists now highlight the header that they are sorting by.
  • List scrolling with the mouse wheel now scrolls faster.
  • Lists in the admin menu (with the exception of the commands tab's player list) now remember which rows were selected when switching away and back.
Plugins tab
  • Fixed the unload plugin button in the plugins tab of the admin menu being usable on already unloaded plugins.
  • The plugins tab no longer populates if you do not have permission to load or unload plugins.

Scaling fixes

  • The chatbox, MOTD window and vote menu now all scale correctly at resolutions greater than 1920x1080.
  • Screen text now also scales correctly at resolutions greater than 1920x1080.
  • Tooltips also now scale their font depending on resolution. Not only for larger than 1920x1080, but also for lower resolutions which should use a smaller font.

Revision 185 - 04/04/15

  • Added sh_customvote command, calls a vote with the given question.
  • The text entry control now supports selecting whole words by double clicking on them.
  • Commands with error messages now mostly show the error in the chat if run from the chat, or the console if run from the console, rather than always the chat.
  • Running a command through the chat with no arguments now prints the help text to the chat rather than the console.

Commands that use time values are now easier to work with:

  • For ban commands, you can now use short form strings, for example 1w represents 1 week, 2h5m represents 2 hours and 5 minutes.
  • For the mapvote plugin's round time commands, you can even use full sentence times, such as 1 week or 2 hours and 5 minutes.
  • The old behaviour of entering time in minutes as a number is still supported.
  • Added a label under the duration text box in the admin menu when banning through the bans/commbans plugin that displays what the duration you are entering is being interpreted as. This should help avoid any confusion/unintended durations.
  • See this page for a full explanation.

Revision 184 - 17/03/15

  • Fixed group command restrictions not working correctly for groups that do not inherit permissions.

Revision 183 - 16/03/15

  • Fixed the workshop updater not properly disabling itself if there's a backup server set.

Revision 182 - 14/03/15

  • Fixed shuffling throwing an error if a player has no skill data when sorting.
  • The workshop updater plugin will no longer load if a workshop backup server is configured in ServerConfig.json.
  • Fixed multiple small issues in the mapvote plugin.

Revision 181 - 15/02/15

  • All text entry fields now support selecting text with the mouse and Ctrl + A, as well as Ctrl + Backspace/Ctrl + Delete functionality.
  • Fixed a bunch of annoying little bugs with text entries.
  • Web user loading/reloading now logs correctly.
  • Updated chat values ready for build 275 (thanks Ghoul).

Revision 180 - 08/02/15

  • Fixed voice chat not removing AFK time during the pregame with the basecommands plugin enabling all talk.

Revision 179 - 05/02/15

  • Update for 275 chat changes.

Revision 178 - 29/01/15

  • Added option to account for standard deviation when sorting players. May or may not result in better team sorting, try it and see.
  • Fixed script errors relating to the UTF8 functions.
  • Made some minor improvements to the admin menu.
  • Added a button to the vote menu to open the admin menu for those with access to it.
  • Added "CanAlwaysTarget" flag for groups. If set, the group can always be targeted regardless of immunity.
  • Added support for wildcards in string argument restrictions. For example, for sh_rcon you could set "speed *" as a valid argument which would allow someone to change the speed value.
  • Removed a pointless call to GetFileExists in the NS2 ConfigFileUtility code which was breaking Combat.

Revision 177 - 22/01/15

  • Removed sh_revote (sh_vote already does everything it did).
  • Pregame plugin will now show messages similar to the vanilla pregame while waiting for commanders.
  • Fixed a minor layout issue with the chatbox.
  • Updated config file stuff for 273 (thanks Ghoul).

Revision 176 - 20/12/14

  • AFK kicking is now based on how long you've been AFK compared to not AFK. This means that you have to be active for a significant time to remove all the AFK time you accumulate, rather than having it all reset the moment you become active.
  • Players that are AFK now have "AFK - " behind their name until they come back.
  • Removed some old useless code that might cause problems.
  • Removed useless messages about team shuffle duration if the duration is 0.

Revision 175 - 30/11/14

  • The vote menu and admin menu now animate on opening. This can be toggled with "sh_animateui".
  • Number argument restrictions can now specify "Strict": true to block a player from using the command if they enter a number outside the allowed range instead of just clamping the number into range.
  • All permissions are now cached, not just those for groups that inherit from other groups.
  • All code relating to the old NS2Stats mod has been removed.
  • Fixed commands with RestOfLine = true cutting off UTF8 strings early.
  • Fixed PrintTable not printing if any of the values contained format strings.
  • Fixed server rates not always being set.
  • Fixed client only plugins showing in the admin menu plugins list.
  • Fixed afkkick and pingtracker not working correctly if reloaded mid-game.
  • Fixed mapvote nominations claiming that nominating a recently played map succeeded when in fact it did not.
  • Fixed setting the bandwidth limit too low by default in NS2: Combat (the default there is 35KB/s compared to NS2's 25KB/s).

Revision 174 - 21/11/14

  • Added the "sh_alltalkpregame" command, which allows you to toggle the "AllTalkPreGame" setting in game.
  • Added "sh_hiveteams", which runs the game's Hive skill based shuffle.
  • Fixed map votes including the current map when "AllowExtend" is false.
  • Fixed a minor script error when attempting to unban a player from commanding that is not banned.

Revision 173 - 10/11/14

Revision 172 - 3/11/14

  • Fixed a harmless error when tournament mode is disabled on startup.
  • The mapvote plugin now clamps the voting time so it can never be 0.
  • Fixed off by one error in the reserved slots plugin due to a weird design decision in the new player count function. This was preventing servers from filling the last slot.

Revision 171 - 31/10/14

  • Shine is now on the NS2: Combat workshop, and should be fully compatible. Please report any issues you find!
  • Fixed shared plugins without a client.lua file not being registered as shared and thus not loading/unloading the client side when manually loaded/unloaded.
  • Fixed the default group allowing an "InheritsFrom" entry which then breaks it.
  • Reserved slots now uses the new Server.GetNumPlayersTotal function to more accurately determine how many players are in the server. NS2: Combat does not currently have this function, and so will use the old, less accurate method.

Revision 169/170 - 26/10/14

  • Fixed some plugins having their hooks called twice.
  • Fixed plugins that erorred when being disabled getting stuck in a half-enabled state.
  • Fixed a few other minor errors.
  • 170: Fixed a bug from 169 which broke the chat, sorry!

Revision 168 - 19/10/14

  • Fixed RTV votes that extend the map having no cooldown time on the next vote.
  • Fixed plugins that failed to load due to a Lua error potentially being left in a half-enabled state.
  • Fixed plugins that disabled other plugins when loading disrupting the behaviour of those plugins if they are manually enabled later.
  • Tournament mode will now only disable the pregame and readyroom plugins when it is enabled (it used to disable mapvote and afkkick too).

Revision 167 - 18/10/14

  • AFK time is reset when a player speaks in text or voice chat.
  • Fixed the AFK kick plugin breaking if you disabled it then enabled it again on the same map.
  • Added a default user group system so you can assign permissions/badges to everyone without a specific group.
  • Bans plugin now syncs with the default NS2 bans file (thanks Ghoul).
  • Improved bans plugin getting bans from the web, data is now cached like every other web-based system.
  • Users can now be assigned using the Steam2 (STEAM_0:X:YYYY) and Steam3 ([U:1:YYYY]) formats.
  • Fixed the binds file not being checked for valid JSON when looking for the vote button bind.
  • Removed all frequent uses of pairs and replaced with a much faster iterator. Should avoid getting in LuaJIT's way.
  • List headers now make a click sound when you click them.

Revision 166 - 22/09/14

  • Fixed a silly oversight which broke team shuffling.

Revision 165 - 21/09/14

  • Improved the sorting algorithm for team shuffling.
  • Guests can now target groups/users with a negative immunity (for badge groups so they can still be vote kicked).
  • Added "MoveToSpectateOnWarn" option to the AFK kick plugin.

Revision 164 - 01/09/14

  • Fixed occasional error when the AFK kicker moves a player to the ready room.
  • Made the mapvote notifications a bit cleaner.
  • Updated the notification functions so they can use the full UTF8 aware message length the game uses.

Revision 163 - 25/08/14

  • Updated ConfigFileUtility.lua to match 268's changes.
  • Text entry carets are now white.
  • Fixed a rare script error in the bans plugin when attempting to unban a player using the admin menu.
  • Added warnings for when a user group's "Commands" entry is incorrect.

Revision 162 - 17/08/14

  • Fixed another weird chatbox bug.

Revision 161 - 15/08/14

  • Fixed a typo in working out which team to assign a player based on Hive skill.

Revision 160 - 11/08/14

  • Fixed weird chatbox error.

Revision 159 - 08/08/14

  • Hopefully fixed vote menu buttons sometimes being unresponsive.
  • Commands with mandatory arguments now show their help text if you enter just the command into the console.
  • Improved error reporting code.

Revision 158 - 06/08/14

  • Fixed moverate and interp settings not being applied properly.
  • Fixed some notifications getting overlapped by other chat messages.
  • Minor improvements to the team shuffling system. When using the Hive ranking data, players are placed onto the team they can help the most when joining mid-game. Also, if there is a team imbalance, players on the larger team can switch to the smaller team even if teams are set to be blocked.

Revision 157 - 05/08/14

  • Fixed error when trying to sort an empty list.
  • Fixed EndGame hooks in the logging and tournamentmode plugins not handling draws correctly.
  • Added a more clear error message when you try to target yourself with a command that does not allow it.
  • Added support for font precaching (thanks Ghoul).
  • Added commands for tweaking the server rates (thanks Ghoul).
  • Added commander bans plugin. Functions similar to the bans plugin, prevents players from becoming commander.
  • Fixed logic error in web configs.
  • Added type checking to plugin configs to ensure values are the expected types.
  • Prevented Lua errors in a plugin's initialise function from stalling the mod's startup.
  • Fixed numerous small bugs in the bans plugin.
  • Added sh_cyclemap command to the basecommands plugin.
  • Fixed script error when gagging/ungagging from the server console.
  • Fixed bug that would in rare circumstances cause the map vote plugin to not add any maps to a map vote.
  • Fixed map vote plugin forever retaining more last maps than asked for if you lower the amount to store after it has stored more than that amount.
  • Numerous other small improvements.

Developer changes

  • Plugins can now inherit from other plugins, so that you can reduce the amount of work for similar plugins.
  • Plugins can now have their configs type checked as well as checked for missing values.

Revision 155/156 - 08/06/14

  • Prevented other mods from breaking network message behaviour when they incorrectly override network message sending (NS2+...).
  • Messages from sh_say now show up in the web admin.
  • If an action cannot be performed, the vote menu will now not play the button press sound to avoid confusion.
  • Improved the timer library for developers.
  • Improved the debug library for developers.
  • Fixed minor script error relating to button sounds.

Revision 153/154 - 27/05/14

  • Hotfix for silly logic error.
  • Fix for error when adding a ban.

Revision 152 - Shine 1.0 27/05/14

This is probably the biggest update I have done for this mod. After this update, any further updates will most likely be only fixes for small issues.

  • Added in game administration menu. Give access to "sh_adminmenu" and bind a key to it (or just type it in the console, or !menu in chat) to use.

  • Fixed the AFK kick plugin checking team spectators.

  • Fixed the namefilter plugin not passing the right arguments when banning a player.

  • Added third optional boolean argument to "sh_loadplugin" and "sh_unloadplugin". If true, the state of the plugin will be saved to the base config file.

  • Fixed a few leftover counting errors.

  • The map vote plugin now checks to make sure maps in the map cycle and forced maps list are string values.

  • GUI buttons now behave in the standard way of not pressing a button until you release the mouse on it.

  • The MotD window can now be typed in (supports ASCII characters only, no unicode).

  • Improved various aspects for plugin developers, including an easy interface to add to the admin menu and a set of mostly finished GUI controls.

Revision 151 - 14/05/14

  • Added temporary fix for "unknown" entries in the Steam browser.
  • Server player info requests (the server switch menu) are now cached to speed things up.
  • Cleaned up the vote random plugin, made certain notifications more consistent.

Revision 150 - 03/05/14

  • Fixed a script error when trying to suspend/resume an unloaded plugin.
  • Fixed an oversight that meant non-ranked players couldn't start a kick vote against another non-ranked player.
  • Updated support for Badges+ mod.
  • Removed annotate command when using sh_unstuck.
  • Sped up permission checking for groups with inheritance.

Revision 149 - 25/04/14

  • The badge plugin now supports Badges+ mod's badge rows.
  • The pregame plugin now works with MvM.
  • Fixed some phrasing issues with notifications in MvM.
  • Kick votes can no longer be called on players with a higher immunity than the player calling the vote.
  • The AFK kick plugin now ignores players waiting for team balance.
  • Fixed a few bugs when a plugin fails to load, and specifically with the mapvote plugin when it failed to load because of a bad map cycle.

Revision 148 - 10/04/14

  • Fixed workshop updater saying "nil" was updated when receiving a bad response from the Steam API.
  • Fixed JSON syntax errors in config files causing Shine to fail to load properly. It will now display a warning when a syntax error is found, and load the default version of the config.
  • Added team names and targetting directives for Marine vs Marine. You can use @blue and @orange to target the two teams, and use blue and orange as team names for commands that take a team argument.
  • Made name matching smarter. It now matches the player that has the given part of their name furthest to the left. E.g, matching "pers" when there are players with names "Person8880" and "Vipers" will pick out "Person8880" every time.
  • Added the $ directive to target using Steam/NS2 ID only. For example, $123456 targets the player with NS2 ID 123456.
  • Fixed a few issues requested by plugin/mod authors.

Revision 147 - 04/04/14

  • Workshop updater now uses the Steam API to check for mod updates, condensing multiple HTTP requests into 1 (thanks Ghoul).
  • Made certain plugins ignore bots when counting players, which was causing unexpected behaviour.

Revision 146 - 19/03/14

  • The round limiter now explains how it chooses the winner.
  • Tech points count as 2 RTs when using the most RTs winner method.
  • Added "sh_who" command to check ranking information about a single player, or all players.
  • Added strict type checking to all chat message functions to eliminate Shine as the cause of gaps in the message table, and to avoid the chatbox erroring out.

Revision 145 - 24/02/14

  • Fixed counting issues with the AFK kick plugin and map votes.
  • Shuffle and map votes now give more descriptive errors when a vote cannot be made.
  • Removed reliance on an NS2 function that would rarely add extra players that did not exist to the player list when shuffling which would cause team imbalances.
  • Added the "WinCondition" option to the round limiter plugin to set how to determine the winner. The default value of 1 is the current score based. 2 is the team with the most captured RTs at the end, and 3 is the team that collected the most team resources over the round.
  • Added the "FriendlyFirePreGame" option to the basecommands plugin. When set to false, friendly fire is off during the pre game.
  • Fixed some minor script errors.

Revision 144 - 06/02/14

  • Fixed counting issues in the vote surrender plugin.
  • Fixed reserved slot count being incorrectly reported after a client with a reserved slot disconnects.

Revision 143 - 05/02/14

  • Added the ability to set per command access restrictions. See this page for an explanation: https://github.com/Person8880/Shine/wiki/Configuring-Users#wiki-group-command-argument-restrictions
  • Added the round limiter plugin from Ghoul.
  • Added a standard method to check for whether a plugin is enabled, and to acquire its table.
  • Replaced sv_say with sh_say.
  • Added commands to change interp and move rate live.
  • Added the ability to set per map round limits: https://github.com/Person8880/Shine/wiki/Map-Vote#wiki-defining-per-map-round-or-time-limits
  • Server switch menu accounts for reserved slots when displaying the server population.
  • Added the "StartDelay" option to the pregame plugin. When set to a time (in seconds) greater than 0, it will force a delay at the start of a map before the game can start.
  • Added two options to the workshop updater plugin. "ForceMapvote", if set to true, will immediately call a map vote when a mod needs updating. "ForceMapvoteAtRoundEnd", if set to true, will instead force a map vote at the round's end if a mod needs updating.
  • Fixed tournament mode breaking things when disabled using sh_unloadplugin.
  • Fixed reserved slots not changing the tag when a client with a reserved slot disconnects.

Revision 142 - 16/01/14 (Shine is over a year old!)

  • Added web config loading. Allows you to load config files for any plugin from a remote web server. See this page for setup details: https://github.com/Person8880/Shine/wiki/Plugin-web-configs
  • Improved chatbox scaling and text scaling at lower resolutions.
  • Fixed plugins that loaded from a gamemode config not saving to the gamemode config if they were edited using commands.
  • Added the ability to set per-map time limits. Add a "time" field to a map's entry in the MapCycle.json file.
  • Badges plugin now inherits badges from inherited groups.

Revision 141 - 14/12/13

  • Fixed some conflicts when the ready room plugin assigned players to teams.
  • The AFK plugin will track immune player's AFK time, but not warn or kick them. This ensures team sorting doesn't move them out of the ready room.
  • Added a second level of immunity for the AFK kick plugin, "sh_afk_partial". With this immunity, the player is warned (and moved to the ready room if the plugin is set to do so), but not kicked.
  • Fixed the sh_loadplugin command failing to load server side plugins that were not originally set to load in the base config.
  • Added "sh_setresslots" command, to adjust reserved slot count in game.
  • Hopefully fixed welcome messages generic messages not always having team colouring.
  • Updated plugin API with easier timer system, so that plugins no longer leak timers when disabled.

Revision 140 - 04/12/13

  • Fixed the chatbox not accepting non-ASCII characters.
  • Improved the bans submissions format, see the bans wiki page.
  • Added the ability to add inheritance to user groups, so groups can be constructed from sub-groups to allow for easier group construction.
  • Fixed the mapvote plugin not always reporting that it is changing the map to other plugins.
  • Added team colouring to the generic disconnect messages in the welcome messages plugin.
  • You can now request user data using POST and send extra keys for authentication.
  • The afk kick plugin should now prevent AFK players from being moved onto teams by the game's built in randomise ready room vote.

Revision 139 - 23/11/13

  • Fixed map vote plugin breaking on incorrectly formatted map cycle file.
  • Fixed the workshop updater plugin failing to cycle the map if players were in the server and the number of notifications set had passed.
  • Added the option "BlockAfterTime" to the vote random plugin. When set to a positive value, it will block voting for team shuffling after the set amount of minutes into a round.
  • Hopefully addressed a game freeze issue for some people when using the chatbox.

Revision 138 - 15/11/13

  • Fixed chatbox breaking with Mendasp's custom HUD mod.
  • Added "AllTalkSpectator" option to the basecommands plugin. When set to true, it allows spectators to hear both playing team's voice chat.
  • Minor script error fixes.

Revision 137 - 12/11/13

  • Fixed the base config not being able to update with new keys.
  • Fixed the bans plugin not updating its config if you had it set to load bans from the web.
  • Fixed players being put on a random team by the ready room plugin when specator is disabled and an end of map vote is in progress.
  • Fixed a few script errors.
  • Prevented the chatbox from opening in the main menu.

Revision 135/136 - 08/11/13

  • The bans plugin can be configured to submit bans to your website when banning/unbanning. I'll update the bans plugin page here with how to set up the web side of things: https://github.com/Person8880/Shine/wiki/Bans

  • Shine can now load separate config files for different gamemodes. For the BaseConfig.json, make a new file called BaseConfig_gamename.json, and for plugins, make a new folder in your plugin config folder with the gamemode's name, then place configs inside. See here: https://github.com/Person8880/Shine/wiki/Gamemode-configs

  • You can now set multiple badges per user, not just group.

  • Added command notification system. Enable it with "NotifyOnCommand": true in the base config, by default it is off (old behaviour).

  • The annotate command is now run when using sh_unstuck to assist map makers.

  • KDR sorting counts assists as half a kill.

  • Vote surrender networks the time after a round that it can start a vote so the vote concede button shows up in the X menu at the right time.

  • Added the option "WarnMinPlayers" to the afkkick plugin. If the server is at or above this many players, but below "MinPlayers", then players will be warned/move to the ready room when AFK, but not kicked.

  • Fixed bugs preventing the basecommands plugin from working with the Factions mod.

  • Renamed the "Random" button to "Shuffle", as it is not necessarily randomising teams.

136:

  • Fixed error in assigning badges to groups.

Revision 134 - 01/11/13

  • Added "sh_friendlyfire" command. Sets the scale of friendly fire, setting it to 0 will disable friendly fire. This will save to your config file when set.
  • Fixed script errors in GUI for mods that remove the CommanderUI_* functions.
  • Fixed numerous minor script errors.
  • Fixed sh_csay not working from the server console.
  • Fixed allowing the fallback mode of vote random to be the Hive mode which would cause a stack overflow as it tried to infinitely call the fallback mode.

Revision 133 - 19/10/13

  • Fixed sh_listmaps not listing all installed maps.
  • Added an error notification for when sh_goto or sh_bring fails to find a valid location.
  • Addressed an issue that could cause the mouse cursor to remain when logging out of a command structure.

Revision 132 - 14/10/13

  • Fixed some bugs in the AFK kick plugin that would cause it to report incorrect information to other plugins. This caused voterandom to sometimes put everyone into the ready room.
  • Fixed a script error in the pingtracker plugin.
  • Fixed the tournament mode plugin not allowing readying up after a round reset.
  • Added the "EveryoneReady" option to the tournament mode plugin. When set to true, every player on both teams must be ready to start the round.
  • Connection logs now also log the IP address and classic Steam ID of the connected player.

Revision 131 - 10/10/13

Chatbox changes:

  • Vastly improved scaling at lower resolutions, it no longer takes up the entire screen.
  • Added opacity slider to control how opaque most of the chatbox is.
  • Changing resolutions no longer completely breaks it and properly resizes it to the new resolution.

Other:

  • Added a third mode to the MotD plugin. When set, players get the text message MotD when they join, but open the webpage if they use the vote menu or !motd command.
  • Fixed the mouse cursor not hiding if you opened the web page MotD again without closing it first.

Revision 130 - 05/10/13

  • Fixed longer than intended delay when starting to type in the chatbox.
  • Fixed a script error when using sh_help from the server console.
  • Fixed a script error in the ready room plugin when a player is not being AFK tracked.

Revision 129 - 04/10/13

  • The chatbox is now enabled by default.
  • Fixed large space buildup at the bottom of the chatbox when larger messages are replaced with smaller ones.
  • Added workarounds for two UWE bugs, one in PlayerRanking.lua at the end of a game, and one regarding switching teams which broke random sorting.
  • The sh_gag command now mutes both text and voice chat.

Revision 128 - 28/09/13

  • Fixed the end of map vote cycling to the next map in the cycle 20 seconds in.
  • Fixed a script error to do with screen text.
  • Fixed a script error in the namefilter plugin when names were not valid UTF-8.

Revision 127 - 26/09/13

  • Fixed client side script errors in the votemenu and the chatbox when changing screen resolution.
  • Fixed the map vote plugin denying map cycling from other plugins.
  • Fixed the sh_forcerandom command respawning everyone.

Revision 126 - 24/09/13

  • Added a workaround for a flaw in the Server.GetNumPlayers() function that will hopefully prevent players without reserved slot access from joining reserved slots.

  • Client side errors are now reported to my web server when clients disconnect. If you do not want your client to report errors, then type "sh_errorreport 0" into the console. This option is saved.

  • Added the "workshopupdater" plugin, contributed by lancehilliard on GitHub. This plugin will check for updates to installed mods in a regular interval. If it finds an out of date mod, it will inform players and can auto-cycle the map if the server's empty or after a set time. See here for more information: https://github.com/Person8880/Shine/wiki/Workshop-Updater

  • The sh_helplist command has been removed. In its place is an improved sh_help command, which searches for commands matching your input. If you type sh_help alone, you will get the list of all commands you can run, separated out into separate pages if there's more than 25. This was also contributed by lancehilliard.

  • The MotD window now has a button to allow you to re-open the page in the Steam overlay, and to set it to always open there instead of the in-game window.

Revision 125 - 20/09/13

  • Fixed a script error in the logging plugin.
  • Should definitely have fixed any remaining bugs in ELO sorting in the voterandom plugin.
  • Added the "FriendlyFireScale" option to the basecommands plugin. Use this to set a scale on friendly fire, e.g 0.33 would make friendly fire be 0.33 times normal damage.
  • Added "sh_forceroundstart" to the basecommands plugin, which will force the round to start.

Revision 124 - 18/09/13

  • Fixed numerous small script errors that occurred when running with Xenoswarm and Combat.
  • Added warning messages when immunity values are not correctly configured for users.
  • Added the "AllowAttackPreGame" option to the pregame plugin. When set to false, it denies players attacking each other for the entire pregame (credit to lancehilliard on GitHub for this.)
  • Added a size limit to the DebugLog.txt file, so it does not grow too large if left for a long time.
  • Added the "ExcludeLastMaps" option to the mapvote plugin. This sets how many previous maps to exclude from map votes.
  • Using the !vote command again after already voting now revotes rather than telling you to use !revote.
  • Fixed usage of a Windows path in the voterandom plugin.

Added client options to control web page display:

  • sh_disableweb in the console will toggle completely disabling web page display for every server running Shine.
  • sh_viewwebinsteam in the console will toggle showing web pages using the Steam browser instead of the in game window.

Revision 123 - 15/09/13

  • External plugins are now added to the base config automatically and can define their default state.
  • Fixed a small error in the tournament mode plugin.
  • Fixed a script error in the voterandom plugin when saving round data where the kills value for a player is nil.
  • Added automatic error reporting at the end of a round. You can disable this with the "ReportErrors" option in the base config file.
  • Fixed the occurence of multiple R_S tags and made the tag implementation more reliable.
  • Fixed multiple bugs with NS2Stats ELO sorting that would result in imbalanced teams or script errors.
  • Fixed an issue with mode 2 of the pregame plugin where the game would start twice.
  • Console commands are now called safely and report errors.

Revision 122 - 13/09/13

  • Fixed boolean arguments to commands treating 0 as true instead of false.
  • Added a tournament mode plugin.
  • Reserved slots now report the number of slots to the server browser correctly.
  • Made some minor changes to accomodate the NS2Stats Shine plugin.
  • Added configuration options in the basecommands plugin to change the interpolation time, the move rate and to set friendly fire.

Revision 121 - 08/09/13

  • Fixed a logic error in the voterandom plugin that would cause it to move players to the ready room if the AFK kick plugin was enabled, rather than sorting them.
  • Added an option to the voterandom plugin to ignore spectators when sorting, called "IgnoreSpectators".
  • Added the ability to define a colour for sh_csay.

Revision 120 - 07/09/13

  • Fixed a bug causing a large gap to appear at the top of the chat box when the message memory limit was exceeded.
  • The chatbox, MotD window and the votemenu now act smarter around each other (backend changes to the GUI code, added a proper window manager).
  • Fixed the chatbox being hidden behind commander UI elements.
  • Added "sh_cheats" command for toggling the server cheats value.
  • Added option to the AFK kick plugin to ignore spectators.
  • Added plugin network message framework to make using network messages with plugins far easier.

Revision 119 - 03/09/13

  • Added the "DisableLuaRun" option to the base commands plugin to disable the "sh_luarun" command.
  • Added the ability to assign badges per-user, by adding a "Badge" value to their user entry.
  • The skill ranking team balance mode will display the average skill rank of both teams after sorting.
  • Added the ability to define min and max player counts for maps, so you can prevent a cycle to a map if the server population is not within your defined range.

Revision 118 - 01/09/13

  • Fixed a bug in the skill rank based and NS2Stats ELO based sorting which would add certain players to the sorting list twice, causing team imbalances and commanders to be switched when they're set to be ignored.
  • Fixed a bug in the "AlwaysEnabled" option for randomising teams that would cause it to run repeatedly.
  • Added a config file to the logging plugin, with options for what to log. By default it logs everything it can, as it has done in the past.
  • The map vote plugin will auto-disable voting if only one map is present in the map cycle/voting list.
  • Fixed using Windows based paths for client plugin config files.

Revision 117 - 31/08/13

  • Fixed config paths using \ instead of /, which does not work on Linux.

Revision 115/116 - 29/08/13

  • Reserved slots completely rewritten. Now denies on connection, meaning players do not have to load all the way in to find out a slot is reserved.
  • Added skill ranking based randomising, uses the game's built in skill ranking to balance the teams.

Revision 114 - 27/08/13

  • Prevented the ClientConnect event from firing multiple times for one player.

Revision 113 - 23/08/13

  • Stopped the logging plugin from logging cyst creation, it contributed to a significant amount of the total log size.
  • Made the server switcher more reliable.
  • Fixed a few bugs in the reserved slots plugin.
  • Fixed a script error in the vote surrender plugin when the game passes a player on the spectator or ready room team through the concede vote.

Revision 112 - 21/08/13

  • Reverted user data loading and saving changes to hopefully fix instability.
  • Fixed the badges plugin not reloading badge data when user data reloads.
  • Potentially fixed an issue with reserved slots redirect redirecting the wrong person.

Revision 110/111 - 21/08/13

  • Pregame plugin will auto disable when running certain gameplay affecting mods such as Xenoswarm.
  • Fixed a potential issue in multi-user targetting when the player using the command does not have permission to target everyone given.
  • Tweaked voting slightly, the last vote is no longer shown.
  • Added support for defining multiple user groups for a single user. Users with multiple groups get their permission data from each group.
  • Checking permissions is now much faster.
  • Updated the badges plugin to work with the latest version of the mod.

Revision 108/109 - 10/08/13

  • Fixed the vote menu remaining open after pressing escape or logging out of a command structure.
  • Updated the NS2/DAK user data converter to handle badge entries and remap commands.
  • Fixed a few minor issues in the server switcher plugin.
  • Moved the MotD window code to use my GUI codebase rather than relying on NS2's.

Revision 107 - 04/08/13

  • Fixed a script error in the map vote plugin.
  • Map vote buttons now show the number of votes the map has received.
  • Fixed the ready room plugin moving AFK players.
  • Added a third reserved slot mode. Similar to the original password mode, this mode will check players for the sh_reservedslot access flag and kick out those without it that join a passworded slot.

Revision 106 - 29/07/13

  • Fixed Shine blocking unrecognised chat commands.
  • Fixed the pregame plugin halting the game forever if the round was reset after the map time has passed.
  • Fixed the pregame plugin displaying "Marines have a commander" message after a round reset instead of the time remaining until round start.
  • Added notification when using the sh_alltalk command.
  • Added round based map cycling to the map vote plugin. Map voting will occur when the round limit is reached. Extending the map will extend it for one more round. To enable, set the "RoundLimit" option. This will override time based cycling.
  • Updated the badges plugin for the latest badges mod version.
  • ELO based sorting will now sort the top 8 players based on ELO only. Other players will be sorted using the "FallbackMode" method. This is to help prevent teams being the same all the time.

Revision 105 - 26/07/13

  • Added a name filter plugin. Allows you to add regex patterns to blacklist from all but one player to help prevent impersonation of ranked players. See here: https://github.com/Person8880/Shine/wiki/Name-Filter
  • Added "IgnoreAutoCycle" option to the map vote plugin. Maps in this list will be skipped when they would be the next map, but were not voted for.
  • Fixed time strings being blank when the time value was between 0 and 1.
  • Fixed the vote menu popping up when the screen resolution changes.

Revision 104 - 22/07/13

  • Fixed the ELO vote failing to fallback if NS2Stats did not respond.
  • Fixed the message after a failed ELO vote stops enforcing teams, saying that ELO based teams were disabled instead of the fallback method.
  • Made ELO vote failure messages clearer to players, rather than just stating it failed.
  • Fixed an incorrect error message when attempting to RTV with a vote in progress.
  • Overhauled the vote menu to allow it to be extended easier.
  • Significantly reduced the network traffic from the server switch plugin.
  • Fixed unique welcome messages no longer showing after the first time.

Revision 103 - 16/07/13

  • Fixed client side plugins (the chatbox) not loading.

Revision 102 - 15/07/13

  • Added extra hooks for commanders to the AFK kick plugin to avoid kicking when a commander is active but not moving their view.
  • Added a chatbox plugin. This plugin is completely client side and must be manually enabled by typing sh_chatbox into the console. Once enabled, it will be auto loaded on any server running Shine. Typing sh_chatbox into the console again will disable it and remove the auto loading.

Revision 101 - 10/07/13

  • Fixed a client side error in error handling.
  • Fixed a typo in the reserved slots plugin that could break the redirect method if no response was received from server queries.
  • Added the option "MoveToReadyRoomOnWarn" to the AFK kick plugin. This will move an AFK player to the ready room when they are warned.

Revision 100 - 09/07/13

  • Adverts now support colours, and can be placed at the top or bottom of the screen as well as in the chat. See here: https://github.com/Person8880/Shine/wiki/Adverts
  • The redirect reserved slots method can now support multiple servers and will check for slots in each. It will try to redirect a player to a server with slots free and not empty if possible.
  • The server switcher menu in the vote menu will now display player counts.
  • If an ELO vote fails to connect to NS2Stats twice in a row, the balance mode will switch to the fallback mode for the remainder of the map.
  • Fixed a bug in the commands processing hook that stopped chat commands from working.

Revision 99 - 08/07/13

  • Fixed the "All talk is enabled." text showing regardless of all talk settings.
  • Score and KDR based randomising now stores a record of previous rounds and averages the data for balancing players. This data will persist between map changes. The amount of rounds to store is configured with the "MaxStoredRounds" setting.
  • Hooks will error handle and report errors to config_path/shine/DebugLog.txt.

Revision 98 - 06/07/13

  • Removed the auto commander eject for now, it wasn't working as intended and the eject vote should suffice.
  • Added "FallbackMode" option to vote random. If you are using the ELO sorting method and it fails, it will use this mode to sort instead.
  • The map vote plugin will force everyone into the ready room on the end of map vote or when the map is going to cycle, some very quick players would end up on teams before it blocked them.

Revision 97 - 05/07/13

  • Prettified message output. Hopefully I got all the messages, if you see any that still use the old chat message format, let me know.
  • Added an option to the AFK kick plugin, "CommanderTime". After this many minutes of being idle, a commander will be ejected and banned from commanding for the rest of the map. The default is 0.5 (30 seconds), set it to 0 to disable it.
  • The state of all talk will be displayed at the bottom of the screen if "AllTalkPreGame" is true before the game has started.

Revision 96 - 02/07/13

  • Fixed the always random option blocking switching back to the ready room at the end of a round when block teams is enabled.
  • Fixed the redirection method redirecting the last public player.

Revision 95 - 02/07/13

  • Fixed the password persisting from the reserved slots plugin after a map change despite the player count being less than the max.

Revision 94 - 01/07/13

  • Fixed an uncommon script error in table.Shuffle() that halted team balancing in the vote random plugin.
  • Fixed all talk mode ignoring client's mute settings.
  • Fixed the logging plugin logging team changes when the player was blocked from changing.
  • Added a config option to the base commands plugin, "EjectVotesNeeded". Set this to a value between 0 and 1 to set the percentage of a team needing to vote for a commander to be ejected.
  • Improved the hook system.

Revision 92/93 - 28/06/13

Vote random plugin:

  • Added the "AlwaysEnabled" option to the vote random plugin. If set to true (default false), this will shuffle the teams before each round starts (after both teams get a commander, or in the 5 second pregame plugin countdown), commanders are ignored in the shuffling.

Server switch plugin:

  • Now adds a button to the vote menu which provides a way to easily switch to the set servers they have permission to switch to.
  • You can add the "UsersOnly": true flag to a server entry, and it will only be available for registered users in the UserConfig.json file.
  • If a player cannot switch to any of the stored servers, the button in the vote menu will not show.

Revision 91 - 27/06/13

  • Added a 4th balance mode to the vote random plugin, past KDR based.
  • Added a second reserved slots method, instead of instating a password it will redirect the player that connected to a reserved slot to another one of your servers.
  • Fixed a bug in the ready room plugin preventing it from moving a player onto a team.
  • Added reasons to the disconnect message in the welcome messages plugin for when the player is kicked for being AFK or having too high a ping.

Revision 90 - 22/06/13

  • Replaced usage of the now broken Shared.GetSystemTime() with os.time() in the bans plugin. If you have banned anyone in the time since build 249 came out (excluding permanent bans, they won't be affected), you will need to reban them, the time function was returning garbage data.

Revision 89 - 22/06/13

  • Added an option to the AFK kick plugin, "OnlyCheckOnStarted", so it only checks players when a game is in progress.
  • The ready room plugin will remember the team players were on in the previous round and attempt to place them on the opposite team if they are forced next round.
  • The welcome messages plugin will no longer display disconnect messages for players who have not had a connect message shown.

Revision 88 - 19/06/13

  • Potential fix for the strange map change crash. I can't be sure as it's very hard for me to get it to crash.

Revision 87 - 17/06/13

  • Altered the injection point for loading. This should make it work with the balance test mod and other mods.
  • Classic server side plugins are no longer case sensitive for loading. Shared plugins will still need their folder to be lowercase.
  • Fixed reserved slots plugin spamming log messages on every disconnect when below the password threshold.

Revision 86 - 16/06/13

  • Reserved slots plugin checks for connected players with access to sh_reservedslot when calculating how many reserved slots are open.
  • Various fixes to client side plugin framework.
  • Various plugin creation improvements.

Revision 85 - 12/06/13

This is an entirely backend based update to expand Shine's capabilities. There may be bugs introduced that I have missed.

Changes:

  • Folder restructure. All of Shine's lua files are now inside lua/shine.
  • Shine now supports client side and shared plugins.
  • Added datatables for easy plugin networking.
  • Hook calling no longer returns a table, it returns multiple values.

Revision 84 - 07/06/2013

  • Fixed certain messages from the vote random plugin never being sent due to incorrect function arguments.
  • Fixed time and date in the build 249 beta being incorrect.
  • Added an option to the mapvote plugin, "EmptyPlayerCount". If the server has this many or less players, the plugin will treat it as empty for the "CycleOnEmpty" setting.

Revision 83 - 04/06/2013

  • Pregame plugin will automatically disable itself if combat mod is active.
  • Added "AllTalkPreGame" option to the base commands plugin. If set to true, all talk will be enabled until both teams have a commander (or until the game start countdown in the pregame plugin starts).

Revision 82 - 01/06/2013

  • Added small random variation to the ELO sorting method so players with close ELOs are not always put in the same order.
  • Improvements to the hooking system.

Revision 81 - 27/05/2013

  • Vote random should really handle timeouts to NS2Stats this time, honest.
  • ELO ranking data is cached into memory for the duration of a map to aid in NS2Stat's unreliability.
  • Fixed the sh_forcerandom command potentially creating imbalanced teams.

Revision 80 - 26/05/2013

Vote random plugin

  • ELO vote should handle timeouts to NS2Stats now.
  • Random teams votes will now ensure a team can have at most 1 more player than the other team (this may break immunity at low player counts).

Map vote plugin

  • Fixed a bug with RTV votes where a failed RTV with 0 votes would cycle the map if the next map vote was set to run at the end of the map.
  • Added "DontExtend" table to the config. Maps listed in here will never be allowed to be extended.
  • Added the command sh_forcemapvote, which will force a map (RTV) vote if possible.

Revision 78/79 - 24/05/2013

  • Improved the reliability of the ELO vote. It should now correctly query NS2Stats for data and sort using it. If it cannot connect, it will inform players that ELO sorting failed and that it is using random instead.
  • The map vote plugin now correctly blocks team joining for end of map voting.
  • Added the option "NotifyOnTeamForce" to the ready room plugin. When set to false, players will not be told that they have been moved from the ready room.
  • Fixed the nextmap command throwing a script error.

Revision 77 - 20/05/2013

  • Added "ShowGeneric" option to the welcome messages plugin. This will show generic "Name has joined the game." and "Name has left the game." messages for all connecting/leaving clients with no set welcome/leave message. The default setting does not show these messages.
  • Fixed the base config removing plugin entries that were not in the default.

Revision 75/76 - 19/05/2013

  • Fixed an already cast random teams vote whose duration had not expired when the round ended shuffling teams in the end of map vote.
  • Fixed the extension time of a map being skipped if a different map was voted for as the next map before the extension time was up.
  • Fixed badges disappearing when changing player class.
  • Fixed ready room plugin not loading (forgot to put this in 75).

Revision 74 - 19/05/2013

  • Fixed badges plugin breaking everything with script errors.

Revision 72/73 - 19/05/2013

  • Fixed scores being reset before the round start after a random teams vote.
  • Random team votes are no longer usable in the end of map vote.
  • Added the option "IgnoreCommanders" to the random teams vote. This will exclude commanders from being team swapped if set to true (default is false).
  • Fixed the pregame plugin not allowing damage in the game start countdown with two commanders present.
  • Fixed idle users not being cleared when the end of map vote starts, causing the ready room plugin to potentially randomly assign players instantly when the vote ends.
  • Updated the badges plugin to support defining badges in the UserConfig.json file in the same way listed for the ServerAdmin.json file in the badge mod's instructions.
  • Fixed BlockTeams setting not being obeyed in the vote random plugin.

Revision 71 - 18/05/2013

  • Really removed the vote scramble plugin.

Vote random changes:

  • Fixed a script error on disabling random teams manually.
  • Made sure the ELO vote immediately gives up and uses random teams if no NS2Stats data is available.
  • Fixed the text on a vote error not being specific to the type of vote.

Revision 70 - 17/05/2013

  • Removed the vote scramble plugin. This was a failed idea.
  • The vote random plugin now has 3 possible modes to shuffle teams. The first is pure random, the second is past round's score based and the third is NS2Stats ELO ranking based. See the vote random wiki page for further information.
  • Fixed PM and goto commands not ignoring targeting permissions.
  • Fixed a script error when a client disconnects in the map vote plugin.

Revision 69 - 17/05/2013

  • Fixed the ready room plugin checking idlers when the map is about to cycle or is waiting on the end of map vote.

Revision 68 - 16/05/2013

  • Fixed votes retaining a vote from a disconnected player.
  • Fixed the surrender vote retaining a vote from a player that has since switched teams.
  • Fixed the surrender vote displaying an incorrect amount of votes remaining.

Revision 66/67 - 15/05/2013

  • Added the ping tracker plugin. This plugin allows you to kick players with a consistently high ping or a consistently high ping variation.
  • Added "TrackOnRoundStart" setting to the ready room plugin. If set to false, it will move idle players from the ready room regardless of whether a round has started. The default behaviour is only moving when a round has started.

Revision 65 - 14/05/2013

A few map vote improvements:

  • Added the option to cycle the map when the server is empty and its past the map's timelimit. Set the option "CycleOnEmpty" to true to enable this.
  • Random and RTV votes are locked when the map is going to cycle, as is team joining.
  • The end of round time left/map cycle notice text is now orange to stand out more.

Revision 64 - 10/05/2013

  • Added reserved slots plugin. Currently only offers the ability to add a password to the server when it exceeds the maximum free slots. When UWE add connection control to Lua, I will add a much better method.
  • Fixed map vote plugin not always obeying the "AllowExtend" option when set to false. It will now always ensure the current map is not an option when set to false.
  • Added back the delay option to the MotD.

Revision 63 - 08/05/2013

  • Fixed NS2Stats end of round stats text overlapping the map vote text. (I moved their text down, I'm sure they won't mind.)

Revision 62 - 06/05/2013

  • Fixed votes triggering at the end of every round when setting the next map vote to trigger at the end of the map.

Revision 61 - 06/05/2013

Map vote plugin improvements:

  • Added the ability to queue the next map vote for the end of the map when the last round has finished. Set the config option "NextMapVote" to 1 to enable this.
  • You can now disable RTV votes by setting "EnableRTV" to false.
  • Added !nextmap command to show what the currently set next map is.

Revision 60 - 05/05/2013

  • Further tweaks to the AFK kick plugin to hopefully remove false positives.
  • Added a new base config option, "TimeOffset". This allows you to change the logging time zone.
  • Added a new config option to the map vote plugin, "ForcedMaps". This should be a list, with the same format as the "Maps" option, of maps you wish to always be an option in map votes.

Revision 58/59 - 04/05/2013

  • AFK kicker is a bit smarter now. It shouldn't false positive on spectating players that are still looking around (such as an egg locked alien).
  • Fixed concede vote showing for all players when it should be just for one team.

Revision 57 - 02/05/2013

  • Fixed another stupid error causing sh_status to throw a script error.

Revision 56 - 01/05/2013

  • Fixed major bug in the hook system that caused hooks sorting to become corrupt and thus certain key hooks (timers) were never running.

Apologies for two quick updates, but this was extremely important to fix as soon as possible.

Revision 55 - 01/05/2013

  • Fixed stupid error causing sh_status to fail.

Revision 54 - 01/05/2013

  • Bans plugin can now read bans data from a URL.
  • Bans plugin will intercept calls from the web interface and use Shine's ban data.
  • Server switch plugin now supports passwords.

Revision 53 - 30/04/2013

  • (Hopefully) Fixed vote concede not always being overriden. A failed surrender vote would pass through to the defualt concede vote.
  • Disabled spectator mode will now move the player onto a random team instead of just telling them to join one.

Revision 52 - 29/04/2013

  • Changed vote surrender's behaviour. It now uses the game's built in concede vote, but overrides its settings with the ones in its config. When a player uses the concede button, vote surrender's vote will be triggered instead.
  • Added the 'readyroom' plugin. This plugin allows you to set a maximum time a player can spend in the ready room whilst a game is in progress before they are forced onto a random team. It can also disable the spectator mode.
  • See here for further information on the ready room plugin: https://github.com/Person8880/Shine/wiki/Ready-Room

Revision 51 - 15/04/2013

  • You can now target players by the classic Steam ID (STEAM_0:X:YYYYYYY).
  • Added time remaining on the current map to the next map vote display.
  • Added a new config option to the mapvote plugin, "ForceChange". This determines the time in seconds left of the map when a game ends that should force a map change. The default is 60, so if a round ends with 1 minute left, the map will change instead of continuing.
  • Logging is now periodic instead of instant. Every 5 minutes, on round end and on map change the log file will be saved.

Revision 50 - 11/04/2013

  • RTV votes that extended the map would overwrite the current cycle time left and leave only the extension time left, rather than extending the cycle time. They now extend the cycle time properly.
  • RTV votes that finish early now remove the vote option from the vote menu rather than leaving it until the full time passes.
  • Next map votes taken part way through a map would also replace the remaining cycle time with the extension time, they now extend the remaining cycle time properly.

Revision 49 - 06/04/2013

  • Reworked the sh_status command. Should now be more readable and displays the classic Steam ID (STEAM_0:X:YYYYYYYY) alongside the NS2 one.

Revision 48 - 06/04/2013

  • Small update for build 244. There may be more to come.

Revision 47 - 02/04/2013

  • Fixed a script error with screen text.

Revision 46 - 30/03/2013

  • Changed the way the MotD is sent to clients. Instead of a fixed delay, clients tell the server when they first press a key and then the server sends them the MotD. This should hopefully fix it not showing in some cases.

Revision 45 - 25/03/2013

  • Vote menu will now attempt to bind M, then N and finally C before giving up. This is because UWE silently changed the default map button to M, which was the vote button I used.

Revision 44 - 20/03/2013

  • Fixed screen text network messages not always being sent to clients. (Fixes messages from the pregame plugin not always showing).
  • Fixed the pregame and voterandom plugins not resetting player's scores when starting or restarting a round (from build 242).
  • Fixed a script error in the commander logout hook where the old function's return value was not being returned.
  • Added a server tag, "shine", which is automatically applied. You can disable it if you really want by setting "AddTag": false in the main config.
  • Restructured the core folder's layout.

Revision 43 - 07/03/2013

  • Fixed vote random not applying when set to immediately force random teams since build 241.
  • Fixed commanders losing their mouse when closing the MotD window if they opened it.
  • Added a gag command, sh_gag. Mutes a player's text chat for either the given duration or the rest of the round.

Revision 42 - 24/02/2013

  • Fixed timer issues in the pregame plugin which allowed the 1 commander timer to be reset if a commander dropped out when the game was starting with 2.
  • Pre-emptively fixed an issue where the game would start with no warning when the 2 commander timer was cancelled but the 1 commander timer had finished in the meantime.

Revision 41 - 23/02/2013

Apologies for releasing three updates in fairly quick succession, there won't be any more today.

  • Fixed pregame allowing the game to start with empty team(s).
  • Added the option to cancel the pregame timer if a commander leaves the chair.
  • Improved the message for the default mode of the pregame plugin. It now says, for example, "Marines have a commander. Aliens have (your time here) to choose a commander."

Revision 39/40 - 23/02/2013

  • Overhauled the pregame plugin. There is now a second mode available. In this mode, you have the standard NS2 pregame time waiting for 2 commanders until a set time has passed. Once that time has passed, the game will start when 1 team has a commander, rather than needing both. If it gets 2 commanders before this time, it will start a countdown and then start the game. See the wiki page for this plugin for the config settings: https://github.com/Person8880/Shine/wiki/Pregame
  • Added a third mode to the pregame plugin. Slightly closer to the default NS2 mode, this one starts the timer once one team has a commander rather than straight away.
  • Added timeouts to the random, surrender and scramble votes. Set the "VoteTimeout" config option in each of these plugins to set a time out for the vote. If the set amount of seconds have passed since the last person voted, the vote count is reset to 0.
  • Added a few more networking reliability tweaks.
  • Clients now check for the vote menu bind every time they receive vote data from the server. This ensures the bounded button is correctly detected and shown if it was bound after the map start.

Revision 38

  • Fixed a potential bug where clients would not receive the active plugins list from the server and thus never be able to open the vote menu. Clients with an empty plugins table now request the list when attempting to open the menu.
  • Potentially improved the reliability of the MotD.
  • Some other small fixes.

Revision 37

  • Fixed a bug from revision 36 where next map votes were being treated as RTV votes when processing the vote results.

Revision 36

  • Fixed chat hiding text starting with any non-alphanumeric character. Instead, only chat starting with ! or / is hidden. This is intended to hide misspelt chat commands.
  • Fixed an annoyance/bug where reloading users mid-game from the web would wipe the user data if the web request failed.
  • Added two new config options, "RefreshUsers" and "RefreshInterval". Set "RefreshUsers" to true to enable automatic refreshing of the user data from the web. The time between refreshes is controlled by "RefreshInterval", which is in seconds. This is disabled by default.
  • Added an option to the map vote plugin, "PercentToFinish". After this percentage of the server population have voted in an RTV vote, the vote will end, even if there is still time left. This defaults to 0.8, which is 80%.

Revision 35

  • Added target negation for commands. See the explanation at the bottom of this page: https://github.com/Person8880/Shine/wiki/Command-syntax
  • Fixed the pregame 5 second countdown from being sent multiple times to clients thus causing it to go out of sync with the server countdown.
  • Added sh_reloadusers, which allows you to reload user data mid-game.
  • Added sh_csay, which displays a message in the top centre of all player's screens.
  • Fixed targetting using %guest causing a script error.
  • Fixed command errors causing a script error when the command was run through the server console.

Revision 34

  • Changed the way the pregame countdown is faded in/out so it is a consistent 5 second countdown.
  • Fixed a potential bug in the pregame plugin where the countdown would remain active after a change of gamestate.
  • Changed screen text fading to fade objects out for 1 second after they've expired rather than for the last second of their duration.

Revision 33

  • Added the 'pregame' plugin. This allows you to set a custom pregame length and show a countdown in the middle of player's screens.
  • Improved the screen text library to fade text objects in and out.
  • Added buttons for displaying the MotD and for using the unstuck plugin to the vote menu.

Revision 32

  • Fixed the vote menu needing 2 presses to open after clicking the mouse to exit it.
  • Fixed some problems with the bans plugin and its config format.
  • Hopefully fixed random votes not always applying when reaching 0 votes needed.
  • Improved the output of sh_status and hopefully made it more reliable.
  • Removed logging of notifications. This was very old code back when I was making sure they were firing correctly and I forgot to remove it when I released Shine.
  • Removed the LegacyMode config option. Loading from the Server.lua file seriously restricts any creativity with the mod so I won't be supporting it.

Revision 31

  • Made random teams even more random. The plugin gets the players in a random order then assigns them to teams in a random order too.
  • Fixed scramble votes not switching players whilst random teams is enforced.
  • Fixed scramble votes causing team imbalance when users with scramble immunity are present.
  • Fixed sh_setteam, sh_forcerandom and sh_rr not working when random teams is enforced.
  • Made some backend changes to the way configs are loaded. This won't affect anything visibly.

Revision 30

  • Fixed a server crash on disconnect caused by an infinite loop when using NS2Stats. (I should not commit late in the night...)

Revision 29

  • Fixed a major bug in the hook system that prevented key hooks from running (such as one to assign game IDs).
  • Fixed the OnEntityKilled event not being hooked when running with NS2Stats, causing the logging plugin to not log kills.

Revision 28

  • Fixed the random vote telling you "you can't switch teams" when a round ends with random teams still enforced.
  • Fixed an error in the hook system.

Revision 27

  • Fixed users loading every time a client connected when getting them from the web which was introduced in revision 24. (That was quite a big bug, sorry if that caused any issues for anyone!)
  • Fixed random votes not shuffling the teams if using time based random forcing and a round ends partway through the random time.

Revision 26

  • Added config option "AlwaysExtend" to the map vote plugin to force the current map to be an option in map votes (providing it's not past the maximum map extensions).

Revision 25

  • Removed game_setup.xml that was causing Combat not to load.
  • Shine now loads completely from MedPack.lua as a fun but odd workaround to the problem of multiple game_setup.xml files preventing each other from loading.

Revision 24

  • Fixed a crash on startup when using the combat mod and loading users from the web. Web users are now loaded when the first client connects, so there may be a few seconds where user permissions are incorrect.
  • Implemented a better override to the chat system. As far as I have tested it works fine, please let me know if chat commands no longer work.
  • Using the combat mod no longer requires a config option.

Revision 23

  • Fixed a 404 or non-JSON data when requesting users from the web causing Shine to create random errors and generally break everything.

Revision 22

  • Added badges plugin to make the player badges mod read from Shine's user data instead of the default.

Revision 20/21

  • Random votes that are set to last a certain time and to instantly shuffle the teams now also reset the round if called mid-round.
  • Fixed the random forcing being disabled if the round ended whilst the timer was still running.

Revision 19

  • Improved vote random. You now have the option to instantly randomise the teams when the vote passes and you're using time based random forcing using the config option "InstantForce". This is defaulted to true.
  • For round based random forcing, the teams will be shuffled at the start of the next round and then random teams will be enforced for the remainder of it.

Revision 18

  • Fixed chat when using the combat mod not working.

Revision 17

  • Fixed HTML message of the day sometimes not removing the mouse cursor when the window is closed.

Revision 16

  • Fixed scramble votes being usable when there is no active round.

Revision 15

  • The notification at the end of a round will now say what the next map is when the map is going to switch.
  • Fixed a bug where a map vote ending right as the round ended with no time left on the map would delay the map switch by another round.
  • Fixed a bug for when a ban entry does not have an unban time. Shine will assume any bans without a ban time are permanent.

Revision 14

  • Improved the vote menu. It now offers the 4 available votes when you open it (or less if you do not have all the vote plugins enabled). If a map vote is running, it offers a voting sub-menu that lets you vote in the map vote.
  • Added random vote plugin.

Revision 13

  • Fixed map votes that failed and started a revote not actually starting a revote.
  • Made vote failures say why they failed.

Revision 12

  • Fixed vote scramble immunities.
  • Made the bans plugin check for the default bans file and read from it if Shine's ban file does not exist.
  • Added a secondary location for the users config file. If you cannot store configs in config://shine then it will look for config://Shine_UserConfig.json instead.

Revision 11

  • Made sh_timeleft usable by everyone.

Revision 10

  • Fixed loads of bugs with map voting. Thank you for the report dePARA!
  • Map vote text no longer obstructs the kill feed.
  • Surrender votes only show to the team calling them instead of everyone.
  • Fixed sh_status showing the game ID of the player using it for everyone on the list instead of their respective game IDs.
  • Added a timeleft command, !timeleft in chat. This is part of the map vote plugin.
  • Added a time left notification every time a round ends, informing players of the remaining map time. This is also part of the map vote plugin.
  • Fixed a client side bug where editing already created text would cause an error.

Revision 9

  • Further improved the map vote. The vote menu will now be automatically bound to M as long as you do not have something bound to it already.
  • If the map vote menu is bound, the text in the top right will be much shorter and simply direct you to press your bound key.
  • If the vote menu could not be bound, the text in the top right will be similar to that of Revision 8.
  • Fixed new players joining not seeing that a map vote is underway.
  • Added a secondary location to look for the base config file. If you cannot store configs in config://shine then it will look for config://Shine_BaseConfig.json instead.

Revision 8

  • Added sh_helplist to display all available commands and their usage into your console.

Revision 6/7 (publisher tool bugged out)

  • Overhauled map votes. The current vote is displayed in the top right of the screen along with a countdown until its completion.
  • A voting radial menu like the standard voice menu has been added. Bind sh_votemenu to a key (e.g bind N sh_votemenu) and you will be able to vote in any active map votes using it. Note that the chat commands still exist and work so if you prefer that, they're still there.

Revision 5

  • Added game ID based targeting. You can get a player's game ID from sh_status.

Revision 4

  • Fixed the map cycle file not being read correctly when loading with the Combat mod.

Revision 3

Revision 2

  • Added !revote command to allow for changing of your vote option in a map vote.
  • Vote commands are now smarter and can handle typing partial map names (e.g summit instead of ns2_summit).
Clone this wiki locally