-
Notifications
You must be signed in to change notification settings - Fork 23
Changelog
- Added the
sh_ban_family_share_immune
permission, which can be used to make certain users immune to family sharing checks.
- Fixed a rare script error with the
sh_forcerandom
command.
- 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.
- 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.
- 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.
- Fixed an error when using the
sh_listusers
command if some users do not have a group assigned.
- Fixed a round ending not resetting the vote immediately.
- Improved plugin config file loading error messages.
- Updated configuration format to add proper units to field names.
- Fixed a script error that occurred as a commander when notifications are visible.
- Fixed chat positioning issues in the upcoming build 336 game update.
- Added the
VoteSettings.ConsiderSpectatorsDuringActiveRound
option. Whenfalse
, spectators cannot vote during an active round. Note that the existingVoteSettings.ConsiderSpectatorsInVotes
option must still betrue
for spectators to be able to vote.
- Added the
VoteSettings.ConsiderSpectatorsDuringActiveRound
option.
- Added the
VoteSettings.ConsiderSpectatorsDuringActiveRound
option. - Fixed errors related to logging when loading the plugin.
- 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.
- 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.
- Fixed the full screen map vote menu using the wrong colour for alien commanders or while respawning on the alien team.
- Fixed the round starting twice if a round start is forced while a round start timer is active.
- 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.
- 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.
- Fixed the vote menu button not displaying the number of votes cast to start a map vote.
- Added a new
AutoAddCommanderBots
option (defaulttrue
) that will add commander bots when starting a game for any team without a commander.
- Commander bots are no longer removed by a shuffle when
ApplyToBots
isfalse
. - The
sh_teamstats
command will now indicate whether team/commander skills are being used or not.
- Fixed a rare script error at startup.
- Fixed a few more issues with the upcoming build 335 game update.
- Improved detection of certain commander actions such as dropping medpacks.
- Fixed the chat position not being reset correctly when disabling the "move outer messages" option in the chatbox.
- 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.
- Applied various compatibility fixes for changes to the chat in the upcoming build 335 game update.
- Fixed the base config being saved unnecessarily after every map change.
- Fixed players that join a team without moving their mouse or pressing movement buttons being treated as AFK.
- Fixed a rare script error when the plugin is disabled after the vote menu page has been opened.
- Fixed some minor UI layout issues.
- 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.
- Reduced blurriness of icons at 1280x720.
- Fixed the vote not resetting after a round ends.
- Added minor performance improvements to various areas.
- 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.
- Added an option to automatically accept friend group requests from Steam friends (with the default being to accept them).
- Fixed console table output sometimes being mis-aligned.
- Added the
BadgeNames
option which allows setting the names displayed when hovering over badges in the scoreboard. See the wiki page for details.
- Fixed a few minor bugs in SGUI.
- Added minor performance improvements to the improved chat plugin's chat message display.
- 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.
- 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.
- 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.
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.
- 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.
- Various API changes have been made around hooks and SGUI. For details, see the PR on GitHub.
- 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
.
- Notifications include:
- Fixed various errors when loading/unloading plugins while the admin menu is open.
- Fixed a rare script error when animations are disabled and a message goes off screen.
- Added an option to use approval voting by setting
VotingMode
toMULTIPLE_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.
- 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.
- Absolutely positioned SGUI controls can now use auto-fonts and aspect ratios (as
PreComputeWidth
andPreComputeHeight
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.
- Fixed regression in the previous update that prevented forced badges from being assigned to members of the default group or reconnecting players.
- Fixed the current winning map(s) not being highlighted when opening the map vote menu after votes have been cast.
- Improved performance of JSON serialisation (most noticeable when saving large configuration files).
- 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.
- Improved performance of saving the daily log file after startup.
- Empty chat tag text is now ignored.
- Fixed the map vote notification sometimes blocking mouse input (most noticeable when attempting to click the chatbox settings button).
- 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).
- 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
andEnd
buttons as expected. - Fixed text sometimes disappearing when clicking a slider's label to edit it.
- Fixed a script error when permanently enabling a server-side only plugin that was not previously loaded.
- 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.
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 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.
- If the Steam query fails for any reason, the first mod in a map's
- 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.
- 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.
- 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.
- Fixed occasional script error when displaying a message due to the local player having no chat sound.
- Fixed potential script error when shuffling players with friend groups.
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.
- 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.
- Advert messages can now be defined as rich text when the
improvedchat
plugin is active. Use an array of strings and colours for theMessage
field in an advert to make it rich text.
- 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.
- 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.
- Join/leave messages can now be defined as rich text, as with adverts.
- 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
andShadowColour
fields.
- Many improvements have been made to client side plugins and SGUI. See the pull request on GitHub for a list of notable API changes.
- 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.
- 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.
- Fixed players being kicked when a round is not in progress,
OnlyCheckOnStarted
istrue
andKickOnConnect
istrue
. -
MinPlayers
is now used whenKickOnConnect
istrue
providing it is between the number of player slots, and the number of player + spectator slots.
- Added log messages when the Alien commander starts consuming, cancels consuming, and finishes consuming buildings, controlled by the
LogConsuming
config option (defaulting totrue
). - Added a log message when a Marine commander cancels recycling a building (controlled by the existing
LogRecycling
config option).
- Added
VoteSettings.ConsiderSpectatorsInVotes
option to control whether spectators are included in votes.
- 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.
- Added
VoteSettings.ConsiderSpectatorsInVotes
option to control whether spectators are included in votes.
- 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.
- Advert cycles and individual adverts can now specify a
MinPlayers
and/orMaxPlayers
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.
- 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.
- The
sh_listmaps
command is now allowed for all players by default.
- Fixed occasional script error when moving players back to the ready room.
- Enforcement policies can now specify
MinPlayers
andMaxPlayers
to decide when they apply. - Starting and passing conditions for the shuffle vote can now be configured depending on the current game state (
PreGame
orInGame
) in the same way asVotePassActions
.- A grace time can be specified (
StartOfRoundGraceTimeInSeconds
) to delay the transition toInGame
to allow votes to use more lenient pass conditions at the very start of a round.
- A grace time can be specified (
- Added
BlockBotsAfterShuffle
option to configure whether bots should be prevented from being added to teams after a shuffle vote (applies only ifApplyToBots
isfalse
). - 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.
- 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.
- Moved all talk text down below the team HUD when it's displayed at the top of the screen.
- Removed old startup console messages.
- Improved debug log output to better explain what the plugin is attempting to do when applying warning actions.
- Fixed labels at the top of the chat history sometimes being invisible until scrolled into view.
- Fixed script error that could occur when switching between the bans and commander bans tabs in quick succession.
- 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 pluginSendNetworkMessage
method) now defaults to setting the reliable flag totrue
when omitted rather than throwing an error.
- Fixed some labels (commander/rookie tags and wrapped lines) being invisible in the chatbox.
- 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 withINFO
and a warning is logged. - Fixed tooltips and menus not inheriting styling from their parent element.
- 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.
- 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 forLabel
.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 oldSetStylingState
. 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.
- 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()
.
- Fixed alignment of page text entry.
- Fixed script error when moving players to the ready room at the end of the round when some players are bots.
- Fixed a script error when running older mods that include an old version of
GUIChat
.
- 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 totrue
).
- Fixed script error when viewing group information of a group that has commands that have argument restrictions or are explicitly denied in a whitelist.
- 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.
- Fixed a script error that occurred when assigning players to teams caused by build 328 changes.
- 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.
- 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.
- Re-organised client settings into tabs per plugin to make it clearer which settings belong to which plugins.
- Added translations for tab buttons.
- 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 requiresCheckFamilySharing
to be enabled, and a Steam API key set in the base config.
- Added
CustomVotePrefix
option to set a prefix for custom vote messages, defaulting toPOLL:
. This makes it clearer that a custom vote is not going to perform any action at the end.
- 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").
- Added
RemoveAFKPlayersFromTeams
option to control whether AFK players are moved to the ready room/ignored when shuffling, or placed onto teams. This defaults totrue
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.
- There are now 3 client options for handling friend grouping requests:
- 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.
- 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 aConfigGroup
field to the plugin with an optionalIcon
field. The name is taken from theCLIENT_CONFIG_TAB
translation key by default. - Many improvements to SGUI, see the full changes on GitHub.
- 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.
- 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
andHIGH
. 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).
- Like team preferences, this can be configured at 4 weighting levels using the
- Fixed script errors with countdown messages.
- 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.
- 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.
- Added
BlockUntilSecondsIntoMap
option.
- 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.
- 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.
- 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.
- Fixed a script error that could occur when a vanilla ban entry has a non-number
time
value.
-
sh_changelevel
(!map
) now accepts map names without thens2_
prefix, as well as partial map names. It will first attempt to find an exact matching map, then addns2_
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.
- Fixed an empty space being left at the bottom of the chatbox sometimes after many messages have been received.
- The default start delay time is now 30 seconds.
- Updated the configuration format to be more clear around time units and the selected mode.
- 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.
- 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 theIsBlacklist
group flag is now interpreted the same as booleantrue
.
- Hooks are no longer duplicated when
Hook.SetupClassHook
orHook.SetupGlobalHook
are called with the same hook name and function/class method. - Adding the same hook name more than once with
Hook.SetupClassHook
orHook.SetupGlobalHook
against a different function/class method will now log a warning message. - Providing an unknown mode name to
Hook.SetupClassHook
orHook.SetupGlobalHook
will now result in an error rather than silently failing.
- 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.
- Removed old NS2:Combat compatibility layer.
- Added
sh_listgags
command to print all gagged players to the console.
- Team preference can now be accounted for during team optimisation. Set the
TeamPreferences.CostWeighting
to one ofLOW
,MEDIUM
orHIGH
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.
-
PreLoadScript
andPostLoadScript
are now always available, even after map load. They will be called only once per script (unless the script is reloaded by passingtrue
toScript.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 forPostLoadScript
). -
JoinTeam
is no longer called for plugins when shuffle is applying its team swaps to avoid plugins incorrectly interfering with the result. UsePostJoinTeam
to track team changes, orPreShuffleOptimiseTeams
to control team sizes.
- Added
ShadowLabel
control, which provides a way to render text with a shadow behind it. - Updated
ColourLabel
to be able to useShadowLabel
controls and to layout its text elements vertically instead of horizontally.
- Fixed the name filter plugin not always renaming players correctly.
- Triggered adverts can now specify a game state filter.
- 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.
- 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 tofalse
to always use the default rates.
- 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.
- Fixed votes "passing" when the server becomes empty.
- 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 can now be forced by adding a
ForcedBadges
entry to either a user or group.
- Eject votes can now have different percentages of the team required depending on how long a commander has commanded in the current round.
- Added an option to make the outer chat follow the chatbox when moved.
- Players nominating a map that has conditions that may mean it does not appear are now informed that conditions exist.
- Players will no longer be auto-assigned to a team when both playing teams are empty.
- NS2 votes can now be blocked for users/groups by assigning permissions of the form
sh_ns2_<votename>
. See the wiki for a list.
- Advert cycles and individual adverts can now be started/stopped at specific system times/dates using the
SYSTEM_TIME
trigger type.
- Fixed chat commands accepting too many possible characters to be triggered. They can now only be triggered by either
!
or/
.
- 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.
- Fixed being unable to permanently gag players using the admin menu.
- Fixed the new team skill icon overlapping the standard deviation values on the scoreboard.
- Player matching in commands now favours Steam ID over game ID when provided a number. Use
#<ID>
to target by game ID specifically.
- 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 exceedKickTime
and the number of players reachesMinPlayers
. - The plugin now overrides the vanilla AFK timer to ensure infantry portals know when players are AFK.
- Team statistics for
sh_teamstats
and vote constraints are now cached to improve performance in certain cases.
- Added a rate limit to command execution. This can be changed with the
MaxCommandsPerSecond
option in the base config.
- Fixed script error when the bans tab has never been opened and a ban is being added through the commands tab.
- 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.
- 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
.
- 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.
- Vanilla
pregamealltalk
will now be automatically disabled ifAllTalkPreGame
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.
- Fixed players not always being moved into the ready room at the end of a map due to changed behaviour in NS2 build 322.
- Added
!forceshuffle
andsh_forceshuffle
aliases to thesh_enablerandom
command.
- 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.
- 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.
- Added option to always scroll to the bottom when opening the chatbox.
- 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. Iffalse
, then maps such asns2_veil
andns2_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.
- Improved performance of the hook system.
- Improved performance of UTF-8 parsing.
- Removed some unnecessary
Think
hooks inbasecommands
andmapvote
. - Added
LinkedList
type, and changedQueue
to use a more simplified approach.
- 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.
- Improved automatic team assignment logic when teams are blocked to better determine which team a new player should be placed on.
- Fixed votes not being reset correctly.
- Prevented multiple surrender votes from passing simultaneously.
- Votes will now pass when a player leaving causes the total required votes to equal the total votes cast, rather than requiring another vote.
- 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.
- Fixed a minor script error when joining a server during a map vote.
- Checking the Steam overlay can now be disabled using the config option
CheckSteamOverlay = false
.
- 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.
- 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.
- 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.
- 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.
- 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.
- The AFK prefix will now only show on the scoreboard and not interfere with auto-complete or the admin menu.
- Added a new command,
sh_slotsummary
, to display a summary of player slot usage in the console.
- The "Map Vote" button now opens the voting page when clicked during a map vote, rather than displaying an error message.
- Fixed reserved slots being consumed by spectators when
TakeSlotsInstantly
is enabled andSlotType
isPLAYABLE
.
- Fixed spectators in first person being warned/kicked unfairly.
- 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 namedData Core
, or typingxr
may completeCrossroads
.
- Fixed a script error when a player rejoins the game.
- Added a new plugin named
votealltalk
which adds a vote to enable or disable global all talk.
-
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
orshift
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.
- 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.
-
- The end of map vote now blocks vanilla votes that would interfere or not function correctly while it is ongoing.
- 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.
- 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 oldLenientModeForSpectators
option, resets time for spectator activity, but still applies strict tracking to non-spectators. -
LENIENT
- resets time for any player activity.
-
- 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.
- 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.
- 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.
- 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 usingShine.IgnoreWhenChecking()
. - Added
OnWebConfigReloaded
event for plugins. - Improved the output format of configs when they are updated to make it more readable.
- Fixed shuffling not ignoring commanders when player team satisfaction is low.
- 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).
- 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.
- 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.
- 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.
- 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.
- Balance modes are now strings, rather than a number (e.g.
- See the wiki page for the new format.
- 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
toDestroy
. - Error reports now contain a more detailed stack trace.
- 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!)
- Updated the reserved slot plugin to not block spectator slots.
- Updated the shuffle plugin to not shuffle players in spectator slots.
- 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 theVoteDelay
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).
- 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!)
- Fixed kick votes not respecting immunity after the last NS2 update.
- The vote menu, admin menu and configuration menu now all hide themselves when the help menu is displayed.
- Updated fiFI translations (thanks MisterOizo!)
- 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 theCheckForFamilySharing
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.
- Fixed shuffling rarely causing incorrect team compositions, including swapping commanders when told to ignore them.
- Fixed the chatbox not always correctly wrapping text.
- 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.
- 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.
- Fixed nominations not working correctly when excluding previous maps after the last update.
- Configuration format for
ExcludeLastMaps
is now an object withMin
andMax
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.
- Plugins can now migrate older config versions forward to a newer format, making it far easier to make config changes.
- Players in the Steam overlay are now always considered AFK.
- Fixed not kicking bots correctly when shuffling players.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
toMode
, 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).
- Updated to account for the new warm-up game state (thanks Ghoul).
- Fixed a rare script error in chat message handling.
-
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.
- 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.
- 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.
- 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 toenGB
. -
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).
- 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.
- 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!).
- 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.
- 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.
- 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.
- Fixed commands with no help message causing a script error.
- Fixed commanders being swapped in team shuffles when
IgnoreCommanders
is set totrue
. - Fixed an NS2 bug around disconnecting bots which sometimes prevented team shuffling from swapping players.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Prevented plugins from sending unregistered network messages.
- 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 /.
- 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.
- The mod is now (almost completely) translatable into languages other than English.
- See this page on the wiki for an explanation of how to add a new language translation.
- Plugin authors that want their plugins to support multiple languages too should look here for an explanation of how to do so.
- 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 betrue
, and a Steam API key to be placed in the base config underAPIKeys
->Steam
. - The adverts plugin can now be set to display messages in a randomised order by setting
RandomiseOrder
to betrue
. 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
totrue
. 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed "inf", "nan" and hex values being considered numbers instead of names in commands.
- Fixed small typo in the afk kick connection event.
- Fixed the chatbox breaking if you pressed up before down with auto-complete.
- Fixed plugin inheritance inheriting the base plugin before a parent plugin.
- 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.
- 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 matchesName with spaces
and the kick reason would beReason 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.
- If you need quotes inside an argument, escape them with a
- 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
, whereYYYY
is some random number.
- The name filter plugin can now use plain text name filters as well as Lua pattern based. Add
- 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.
- For the list of changes, see here.
- (218) Fixed script error when trying to use sh_who or sh_status.
- (219) Fixed chatbox blowing up when changing resolution.
- 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.
- Fixed a regression in the chatbox layout when the used space decreases below the maximum, which leaves a gap at the bottom.
- 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.
- 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.
- 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.
- Fixed script error when clicking an empty text entry.
- 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.
- 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).
- 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.
- 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.
- Fixed a script error in the score-based shuffle mode due to missing playtime data.
- Fixed the chatbox and votemenu being oversized at 1440p and similar resolutions after the last NS2 update.
- 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).
- 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.
- 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).
- Improved the algorithm behind team shuffling to avoid it creating unusually bad team compositions when accounting for standard deviation.
- Disabled local error logging by default.
- Made a few minor internal changes.
- The bans plugin now disconnects banned players at the point they attempt to connect rather than when they are fully loaded (thanks Ghoul).
- Fixed the chatbox not showing both the rookie and commander tags when both are present.
- Fixed script error when changing resolution with the chatbox.
- Fixed bug with the chatbox where the rookie/commander tag would sit at the bottom of the chatbox constantly.
- Worked around a bug in the game engine causing server crashing when using in-game votes.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed script error in permissions when importing NS2-style users.
- 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.
- Fixed plugins that relied on other plugins (such as the commbans plugin) ending up enabled when their parent plugin was enabled.
- Fixed a script error related to screen text.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
or2 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.
- Fixed group command restrictions not working correctly for groups that do not inherit permissions.
- Fixed the workshop updater not properly disabling itself if there's a backup server set.
- 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.
- 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).
- Fixed voice chat not removing AFK time during the pregame with the basecommands plugin enabling all talk.
- Update for 275 chat changes.
- 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.
- 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).
- 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.
- 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).
- 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.
- Added tooltips to most buttons in the admin menu to help explain what they do.
- Fixed a few minor script errors.
- You can now set a "chance" amount on maps for the map vote plugin. This value determines the relative chance a map will be chosen for a vote compared to the others. By default, all maps have an equal chance of 1.
- 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.
- 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.
- 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!
- 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).
- 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.
- Fixed a silly oversight which broke team shuffling.
- 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.
- 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.
- 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.
- Fixed another weird chatbox bug.
- Fixed a typo in working out which team to assign a player based on Hive skill.
- Fixed weird chatbox error.
- 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.
- 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.
- 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.
- 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.
- Hotfix for silly logic error.
- Fix for error when adding a ban.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed counting issues in the vote surrender plugin.
- Fixed reserved slot count being incorrectly reported after a client with a reserved slot disconnects.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
-
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.
- 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.
- 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.
- 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.
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.
- 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.
- 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.
- 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.
- 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.
-
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed config paths using \ instead of /, which does not work on Linux.
- 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.
- Prevented the ClientConnect event from firing multiple times for one player.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed client side plugins (the chatbox) not loading.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed the password persisting from the reserved slots plugin after a map change despite the player count being less than the max.
- 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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
- 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.
- 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).
- 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.
- 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.
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.
- 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.
- 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.
- 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).
- Fixed badges plugin breaking everything with script errors.
- 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.
- 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.
- 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.
- Fixed the ready room plugin checking idlers when the map is about to cycle or is waiting on the end of map vote.
- 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.
- 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.
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.
- 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.
- Fixed NS2Stats end of round stats text overlapping the map vote text. (I moved their text down, I'm sure they won't mind.)
- Fixed votes triggering at the end of every round when setting the next map vote to trigger at the end of the map.
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.
- 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.
- 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.
- Fixed another stupid error causing sh_status to throw a script error.
- 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.
- Fixed stupid error causing sh_status to fail.
- 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.
- (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.
- 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
- 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.
- 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.
- Reworked the sh_status command. Should now be more readable and displays the classic Steam ID (STEAM_0:X:YYYYYYYY) alongside the NS2 one.
- Small update for build 244. There may be more to come.
- Fixed a script error with screen text.
- 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.
- 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.
- 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.
- 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.
- 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.
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."
- 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.
- 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.
- Fixed a bug from revision 36 where next map votes were being treated as RTV votes when processing the vote results.
- 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%.
- 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.
- 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.
- 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.
- 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.
- 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.
- Fixed a server crash on disconnect caused by an infinite loop when using NS2Stats. (I should not commit late in the night...)
- 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.
- 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.
- 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.
- 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).
- 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.
- 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.
- Fixed a 404 or non-JSON data when requesting users from the web causing Shine to create random errors and generally break everything.
- Added badges plugin to make the player badges mod read from Shine's user data instead of the default.
- 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.
- 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.
- Fixed chat when using the combat mod not working.
- Fixed HTML message of the day sometimes not removing the mouse cursor when the window is closed.
- Fixed scramble votes being usable when there is no active round.
- 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.
- 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.
- Fixed map votes that failed and started a revote not actually starting a revote.
- Made vote failures say why they failed.
- 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.
- Made sh_timeleft usable by everyone.
- 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.
- 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.
- Added sh_helplist to display all available commands and their usage into your console.
- 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.
- Added game ID based targeting. You can get a player's game ID from sh_status.
- Fixed the map cycle file not being read correctly when loading with the Combat mod.
- Made Shine compatible with the combat mod. See here for details: https://github.com/Person8880/Shine/wiki/Using-Shine-with-the-Combat-mod
- 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).