Skip to content
This repository was archived by the owner on Jun 14, 2025. It is now read-only.

Releases: ServerMod/Smod2

ServerMod 3.3.0

16 Feb 11:08
9c6497a

Choose a tag to compare

Target Game Version: 8.0.1 (Revision III)

Reminder that a new MultiAdmin has also come out recently, if you haven't noticed. https://github.com/Grover-c13/MultiAdmin/releases/tag/3.0.0

Game

  • Plugin dependencies folder will now be automatically be created within sm_plugins

  • Removed loading translation audio files to lower RAM consumption by a large amount.

  • Readd reduce_ammo_on_reload (was removed in update to 8.0.1).

  • Added ServerMod config validator, which will save all requested config variables to config file. sm_write_defaults is config for that, being false by default. In case you actually want to write exact default values, use sm_write_exact_defaults, which is false by default.

  • Added a flashbang command FLASH

  • Added config Rint random_scp_chances, defaults to empty string. This dictates the odds of each SCP. Don't use this for 049_2 or 079, as 049_2 is always banned (I think) and 079 uses a different spawning system. Example is {4%0|2%3|2%5|1%9|1%16|1%17}.

  • Added config int random_scp_attempts, defaults to 0. This dictates how many times it attempts to find a random option according to random_scp_chances that isn't banned or full. If you go past the attempt count, it'll use the default type instead. (By default this disables random_scp_chances).

  • Added config boolean scp173_blackout_light_check, defaults to true. When true, SCP-173 will be unable to move when a flashlight is being shined at it during blackout

  • Added config float generator_duration, defaults to 120. The number specified is the time (in seconds) that a generator will start at.

  • Added config list generator_keycard_perm, defaults to ARMORY_LVL_3. Determines what keycard permissions are allowed to unlock generator doors.

  • Added config int list generator_insert_teams, defaults to all team IDs. Team IDs specified will be allowed to insert a tablet into a generator.

  • Added config int list generator_eject_teams, defaults to all team IDs. Team IDs specified will be allowed to eject a tablet from a generator.

  • Added config int list generator_unlock_teams, defaults to all team IDs. Team IDs specified will be allowed to unlock a generator (given that they have the proper keycard for it).

  • Added config string scp096_rage_increase_mode. This allows you to set 4 new ways of handling 096's rage increase. watchermultiplied will increase the rage by amount of players watching 096, instead of all players currently on the server. notmultiplied will not multiply the rage increase at all. optimized should be a more performant version of default (exits the loop as soon as a watcher is found). optimizednotmultiplied should be a more performant version of notmultiplied. Setting any other value should default to the current main game system. If no flaws are found with optimized or optimizednotmultiplied, these will replace the default & notmultiplied versions. (they're simply here for safety)

  • Fixed scp096_ignored_role, scp173_ignored_role and spawn_protect_team. They were previously using the pseudoYAML list entry (similar to port queue).

  • Fixed issue added in 079 update where an SCP's count would increase even if that SCP was then changed to 079. This would have outcomes where not all your SCPs could spawn.

API

  • Renamed UserGroup.Name to UserGroup.BadgeText (the text of the tag to display)
  • Added Player Attacker to PlayerPocketDimensionEnterEvent
  • Added UserGroup.Name (name of the group, not tag to display)
  • Added UserGroup.Cover
  • Added UserGroup.HiddenByDefault
  • Added API for controlling the warhead: Map.DetonateWarhead(), Map.StartWarhead(), and Map.StopWarhead().
  • Added two new variations of GetPlayers with Role & Role[] as overloads.
  • Added many methods to Vector including:
    • float Distance(Vector a, Vector b)
    • Vector Lerp(Vector a, Vector b, float t)
    • Vector UnclampedLerp(Vector a, Vector b, float t)
    • Vector Min(Vector a, Vector b)
    • Vector Max(Vector a, Vector b)
    • string ToString() override (prints out (X, Y, Z))
    • string ToString(string format) (prints out normal string ToString() but uses the format on the individual numbers)
  • Added the following getter-only properties to Vector
    • float SqrMagnitude
    • float Magnitude
    • Vector Normalize
  • Added operator (+ - / *) support to Vector and float, as well Vector and Vector.
  • Added Generator API object for the new 079 generators. All Generator objects can be retrieved by using Map.GetGenerators().
  • Added enums ZoneType, RoomType, Scp079InteractionType, and ExperienceType
  • Added Scp079Data object which can be accessed from a Player object. This allows plugins to perform SCP-079 actions as if the player did them (basically an Scp079PlayerScript wrapper). Calling something that can be done via an interaction in game (e.g. locking a door as a player) will not grant or show XP, but the float Exp property can be added to and the void ShowGainExp(ExperienceType expType) method can be used to simulate a player gaining XP.
  • Added Room object which are found in the Generator object, List<Room> Map.Get079InteractionRooms(Scp079InteractionType type) (with supported interactions in the enum), and new speaker and lockdown events. The object stores the type of room, but int GenericID allows you to identify generic (curved/straight corridors, 4 ways, etc) rooms as well.
  • Added object GetComponent() to Door and TeslaGate.
  • Added parameter bool instant (default false) to void TeslaGate.Trigger().
  • Changed equality operator of Vector. Now == will compare the value of x, y, and z. If you'd like to do reference equality, use Vector.Equals(object obj) instead
  • Changed Player.GetRankName() to now return null if the player has no group set
  • Fixed Player.GetRankName() not returning anything when player group is not set through Remote Admin config
  • Fixed Player.SetRank() not properly handling empty strings

Events

  • Added LateDisconnectEvent, this event fires after DisconnectEvent, after the player has been fully disconnected and removed.
  • Added GeneratorUnlockEvent: fired when a player attempts to unlock a generator.
  • Added GeneratorAccessEvent: fired when a player attempts to open/close a generator.
  • Added GeneratorInsertTabletEvent: fired when a tablet is inserted into a generator.
  • Added GeneratorEjectTabletEvent: fired when a tablet is ejected from a generator.
  • Added GeneratorFinishEvent: fired when a generator is finished powering up and has become engaged.
  • Added 079DoorEvent: fired when SCP-079 opens or closes a door.
  • Added 079LockEvent: fired when SCP-079 locks a door.
  • Added 079ElevatorEvent: fired when SCP-079 uses an elevator.
  • Added 079TeslaGateEvent: fired when SCP-079 uses a tesla gate.
  • Added 079AddExpEvent: fired when an SCP-079 gains XP.
  • Added 079LevelUpEvent: fired when an SCP-079 levels up.
  • Added 079UnlockDoorsEvent: fired when an SCP-079 unlocks doors.
  • Added 079CameraTeleportEvent: fired when an SCP-079 teleports to a new camera.
  • Added 079StartSpeakerEvent: fired when an SCP-079 starts speaking through a speaker.
  • Added 079StopSpeakerEvent: fired when an SCP-079 stops speaking through a speaker.
  • Added 079LockdownEvent: fired when an SCP-079 causes a lockdown in the room (the hazard sign that causes lights go off and doors close and lock).
  • Added 079ElevatorTeleportEvent: fired when an SCP-079 teleports to a different level via an elevator.
  • Fixed 914ActivateEvent getting an SmodPlayer object of the 914 machine (which basically doesn't work) instead of the player that activated 914.
  • Fixed SCP-106 event positions crashing the game if set to null, now it simply ignores the position in the event if it's null
  • Fixed BanEvent not having a player object in case the ban was done through RA Panel (the only time there is a player object).

ServerMod 3.2.2

11 Jan 09:58
422fab9

Choose a tag to compare

Target Game Version: 8.0.1 (Revision III)

Plugins using SCP914ActivateEvent will need to be rebuilt.

reuploaded to fix escape counts being reversed

Game

  • Updated to 8.0.1 (Revision III)
  • Added Broadcast (and broadcast clearing) commands to the server console. (see BC and BCCLEAR)
  • Added Personal Broadcast (and personal broadcast clearing) commands to server console. (see PBC and PBCCLEAR)
  • Added a new way to print config entries when you have sm_debug enabled. This will package all the config entries into one message, rather than one message per entry. This will likely make the server seem a bit more responsive when booting as compared to the old system, as it won't have to catch up to all the printed messages. To enable this, use the below config entry.
  • Added config bool package_config_debug, defaults to false. When you enable this, it will activate the above new method of printing the debug messages.
  • Added config bool sort_config_debug, defaults to false. When you enable this, it will print the config entries alphabetically sorted by the config key.
  • Added config bool reduce_ammo_on_reload, defaults to true. When this is disabled, players won't lose ammo when reloading their weapons. This essentially gives every player infinite ammo.
  • Added config bool disable_dropping_empty_boxes, defaults to false. When this is enabled, players will no longer be able to drop ammo boxes with 0 ammo in them. Unless this nukes your server, you should probably enable this 🤷‍♂️
  • Changed the way escapes were counted so that detained Class-D now count as scientist escapes and vice versa when escapee_restrained_check is enabled.
  • Changed 914's class changing config logic. If you set the value of the class it should change to to -1, it'll not trigger on that class. This is opposed to the situation where if you used 0:0 for example, it would trigger a new spawn event, as it would effectively spawn that player as a new SCP173.
  • Fixed an issue that happened when a plugin tried to register a command that was already registered (either by main game or a different plugin.)

API

  • Added Map.Broadcast function. Takes a uint for the duration, a string for the message that should be displayed and a bool for whether or not it should be monospaced. This allows you to display a message for all your players, similar to the BC command.
  • Added Map.ClearBroadcasts function. This allows you to empty the queue of messages to broadcast, similar to the BCCLEAR command.
  • Added GrenadeExplosionEvent. This event will fire once per frag grenade and pass the player that threw the grenade. This event is supposed to be used in conjunction with PlayerHurt or PlayerDie events as the information in those events was sometimes lacking when the thrower died themselves. Be careful as the Thrower can be null.
  • Added GrenadeHitPlayerEvent. This event will fire once per player hit by a frag grenade and pass the player that threw the grenade and the player that was hit. This event is supposed to be used in conjunction with PlayerHurt or PlayerDie events as the information in those events was sometimes lacking when the thrower died themselves. Be careful as the Thrower can be null.
  • Changed 914ActivateEvent to also have the player object that activated 914. Also renamed some of the variables.

ServerMod 3.2.1

24 Dec 15:23
ca1bbca

Choose a tag to compare

Target Game Version: 8.0.0 (Christmas Event)

3.2.21 B

Game

  • Fixed default item not being able to give USP.
  • Added christmas achievement & fast escape achievement

API

Nothing

3.2.21 A

Game

  • Updated to 8.0.0 (Christmas Event) 🎄

  • Added .{Command} & /{Command} options. These are used in game to contact the server. The period prefix will be able to be used by any player, and as such will mainly be used by plugins. The slash prefix will be used by people who have RA panel access to effectively send a command as if it was sent in the server console. This is effectively the same functionality as server_command_whitelist.

  • Fixed an issue that caused some configs to not work correctly when they were set to a value of default.

API

  • Added PlayerCallCommandEvent, which passes the player, the command they called & allows you to read & set the return message the player will get back in their console. Please use a prefix similar to your configs when you wish to make use of this functionality, so different plugins don't listen to the same command. As a precaution, you should also check if the the return message is Command not found. If it isn't, another plugin likely already used it

ServerMod 3.2.0

21 Dec 17:47
e00feb1

Choose a tag to compare

Target Game Version: 8.0.0 (Revision III)

REREREREREREUPLOAD TO FIX BELOW BECAUSE IDANGER DIDN'T TEST IT 😠

Reuploaded to add cs/central/csrv command which allows you to switch the central server

Plugins will likely need to be rebuilt.

Game

  • Updated to 8.0.0

  • Actually kill 079 when nuke goes off 👀

  • Added config integer tutorial_hp, defaults to 100.

  • Added config bool always_spawn_079, defaults to false.
    This will make 079 always spawn within the first two SCPs (unless 079 can't spawn at all due to ban or count)

  • Re-added config bool no_scp079_first, defaults to true.
    When this is disabled, 079 will have a 40% chance to spawn as first SCP.

  • Fixed scp079_disable & scp079_amount

  • Fixed disable_commander_mtf_disarm (main game changed how it calculates if players can handcuff eachother)

  • Disabled player position interpolation for the server

API

  • Added RoundStats.ScientistsEscaped & RoundStats.ClassDEscaped setters. Plugins should now be able to set their values. (this should allow you to manipulate the end conditions)
  • Added Player.DoNotTrack property. When this is set to true, your plugin cannot log any information about that specific data. You can still log nonidentifiable data using that player (such as total amount of kills on your server accross all players).
  • Added DamageType.USP and ItemType.USP
  • Role.SCIENTISTS changed to Role.SCIENTIST and Role.CHAOS_INSUGENCY changed to Role.CHAOS_INSURGENCY

Do be aware that this release could still have some issues. Some examples of reported issues were plugins not being able to use RoundStart event, 049 not being able to res players and ghostmode causing all players to be invisible (disable this with config for now)

ServerMod 3.1.22

09 Nov 09:43
ea4dc79

Choose a tag to compare

Target Game Version: 7.4.3 (Revision II-b)

3.1.22 C

Game

  • More anticheat improvements that'll be in main game next update. (reason for update)

API

Nothing

3.1.22 B

Game

  • Added new anticheat improvement that'll be in main game next update. (reason for update)
  • Changed AFK kicker to give "You were AFK for too long." message to kicked player, rather than the default kick message.

API

  • Fixed Player.GetCurrentItem function to not shit the bed if player doesn't have items. (hopefully)

3.1.22 A

Game

  • Whole lot of nothing

API

  • Added safeguard around plugins returning Role.UNASSIGNED in OnSetRole event
  • Fixed exception related to character role being Role.UNASSIGNED in HurtPlayer function
  • Changed SmodPlayer.GetPlayers() function to now also work with SteamIDs
  • Changed SmodPlayer.GetPlayers() function to match only exact IPs

ServerMod 3.1.21

01 Nov 00:22
335fc0e

Choose a tag to compare

Target Game Version: The spooky one

3.1.21

Game

  • Added config float allowed_speed_multiplier, defaults to 1.3f.
    This is used to determine whether a certain player's movement is allowed or not. Lowering this value will mean it is less likely players will use speedhacks on your server, however it will mean people with a high latency will have more rubberbanding. (I highly recommend not lowering this under 1.15)
  • Added config list scp096_ignored_role option, defaults to an empty list.
    All roles added to this list will be ignored from 096's detection, and as such will not be able to trigger his rage state.
  • Fixed CONFIG commands (config reload etc.)
  • Trying to fix random invisible players

API

  • Added event OnSetConfig
  • Added event OnSummonVehicle

ServerMod 3.1.20

26 Oct 10:33

Choose a tag to compare

Target Game Version: 7.4.3 (Revision II-a)

3.1.20-B

  • Fixed MicroHID
  • Fixed LCZ Decontamination & Tesla Gate
  • Re-added antifly config
  • Re-added start_round_minimum_players

3.1.20-A

Game

  • Added config list cleanup_ignored_items, defaults to an empty list. Items that have an ItemID in this list won't get added to the automatic cleanup queue.
  • Added config floats 939_damage_multiplier and zombie_damage_multiplier, defaults to 1.
    This will allow you to easily change the amount of damage 049_2 & 939 deal with attacks. The flat amount is 60 for 049_2 and between 50 & 80 for 939.
  • Added config bool sm_enable_ghostmode, defaults to false.

API

  • Added Player.GetGhostMode() & Player.SetGhostMode(bool ghostMode, bool visibleToSpec = true, bool visibleWhenTalking = true) This will make the player invisible.
    Note: visibleWhenTalking only works when the player is using radio.
  • Added event OnMakeNoise

Servermod 3.1.19

11 Oct 18:17
6cf98d1

Choose a tag to compare

Target Game Version: 7.4.2 (Revision IV)

3.1.19B

Game

  • Added config bool prevent_false_173_moves, defaults to false.
    This disables the new anticheat which is supposed to prevent players from moving as 173 when they shouldn't be able to. (This type of anticheat was having issues)
  • Changed griefing global bans to exploiting global bans (should be in game next version). This means config bool global_bans_griefing was changed to global_bans_exploiting.

3.1.19A

Plugins using Player.ChangeRole(...) will need to be rebuilt.

Game

  • Added config bool unlimited_radio_battery. defaults to false

  • Added config bools antifly_code_<Code Number>_log, defaults to true for all

  • Added config bool disable_antifly_logging, defaults to false (disables all anti-fly logging)

  • Added config bool disable_commander_mtf_disarm, defaults to false (aka still allowing Commander to disarm teammates).
    This will prevent Commander from disarming fellow MTF members

  • Added config floats min_blink_time and max_blink_time, defaults to 2.5 & 3.5.
    A random value is taken between these two, which determines how long players have to look at 173 before a blink is triggered.

  • Added config int seconds_until_force_restart, defaults to -1 which won't cause automatic restarts.
    This will force the round to end after the round has been active for X seconds.

  • Added ability to have a reason when kicking/banning. Format is BAN [player name/IP] [duration (minutes)] [reason].
    Reason is optional & can consist of multiple words. This works in both Remote Admin Panel and from the server console. (Reason will be shown in your ban logs, in the server console & for the disconnected player)

  • Changed clean command to support removing items more efficiently (Check the help command for more info)

  • Changed antifly_kill_player to antifly_code_<Code Number>_kill_player, defaults to true for all

  • Changed anti-fly logging to prevent spam (Prints one per player per code every 30 seconds)

  • Change Reserved Slots' default file from Reserved Slots.txt to ReservedSlots.txt

API

  • Added Player.OverwatchMode property

  • Added Player.HandcuffPlayer(Player playerToHandcuff) function.
    This will attempt to make the player it's called on handcuff the player passed as an argument. If they are more than 200 units apart this will likely immediately unhandcuff the second player. Strange things might happen if you try to make player handcuff himself or make a spectator handcuff someone. (This is untested)

  • Added Player.RemoveHandcuffs() function.
    This will attempt to remove handcuffs from the player it's called upon.

  • Changed Player.ChangeRole(...) function to have additional optional parameter bool spawnProtect, defaults to true.
    Check spawn protect config options for more detail.

  • Changed Player.Changerole(...) function to have additional optional parameter bool removeHandcuffs, defaults to false. This will attempt to remove handcuffs from the player when changing his role.

  • Changed Door.Locked property's set handling to work the same way as the Remote Admin Lock functionality works

  • Changed Door.Open property's set handling to resolve an issue and work the same way as Remote Admin Close functionality

ServerMod 3.1.18

23 Sep 19:57

Choose a tag to compare

Target Game Version: 7.4.2 (Revision IV)

Game

  • Added config antifly_enable , defaults to true
  • Added config antifly_kill_player , defaults to false
  • Integrated SpawnProtect. Added config spawn_protect_disable , defaults to true
  • Added command SetSpeaker <Player>

API

  • Fixed API PlayerListTitle
  • Added API Map.SetIntercomSpeaker & Map.GetIntercomSpeaker
  • Added API Player.RadioStatus
  • Added API Player.SetRadioBattery
  • Added event OnPlayerRadioSwitch
  • Added event OnPlayerPickupItemLate

ServerMod 3.1.17

15 Sep 10:14

Choose a tag to compare

Target Game Version: 7.4.1 (Revision I)

Game

  • Game now recovers from missing SCP spawnpoints by spawning such SCPs in LCZ.
  • Added config teleport_unstuck_protection
    (This will prevent players from getting stuck in the ground when teleporting. Default to true.)
  • Added config player_list_title
  • Fixed Default Item

API

  • Added functionality for plugins to kick/ban users with custom messages.
    (When the player is disconnected, it will show the message on his screen instead of default "You have been kicked/banned")
  • Added API Map.AnnounceNtfEntrance & Map.AnnounceScpKill
  • Added API Server.BanIpAddress & Server.BanSteamId
  • Added API Server.PlayerListTitle
  • Fixed API SetIntercomContent
  • Fixed Player.GiveAmmo for OnSetRole

Re-uploaded to fix server not being on list

Re-re-uploaded to fix unstuck