STonitor¶
Table of Contents¶
Installation¶
There are two ways to install STonitor, you can use the provided Installer for Windows, or you can install it manually. The Installer is not guaranteed to work, and may potentially cause a false-positive in your antivirus software. If you are concerned about this, you can install it manually.
Installer¶
As of version 2.2.0, STonitor has an installer for Windows. This is the easiest way to install STonitor, although less stable than the manual installation (if you know what you’re doing when performing the manual installation).
Downloading the Installer¶
Head over to the releases page and grab the latest version. This link also brings you there.
Once you’ve found a proper release, check the assets section near the bottom and download the Installer (
STonitor_Setup_X.X.X.exe
, the Xs are version numbers).
Running the Installer¶
Once you have the Installer downloaded, you’ll need to run it. In order to do this, head over to the location where you
downloaded the Installer, and double-click it. Windows SmartScreen may pop up, warning you about the Installer being
potentially unsafe, this is because the Installer is not signed. You can safely ignore this warning and continue with
the installation by clicking More info
, then Run Anyway
.
Continue through the installation process, and you should be good to go! Once the installation is complete, you can get started on the Setup.
Manual Installation¶
STonitor’s manual installation is neither streamlined or easy, depending on how experienced you are with things like this, things may go wrong (solutions to some common issues may be available in the FAQ). If you want something easy to install, you can use the Installer or check out Sonitor by MSWS.
Emphasis and warnings aside, the installation instructions below are fairly detailed, as long as you follow them, you should be fine. This installation process is also fairly standard, if you encounter an issue not covered in the FAQ, you’ll likely be able to find a solution fairly fast by Googling it.
Installing Python¶
STonitor is made using Python, and needs Python to run. If you’ve already installed a 3.X version, great, you can skip this part. If not, follow the steps below:
- Download a 3.X version of Python, to do so, head to Python’s official site. Don’t install the version on the Microsoft Store, that commonly causes odd problems.
Note
This program was developed on the 3.8.2 version, however the majority of modern v3.X versions should all work fine
- Run the installer (may differ depending on Operating System).
Attention
Be on the lookout for a checkbox labeled
Add to PATH
while installing, make sure that it’s checked or you’ll likely run into issues.
- Once the installation has been completed, test it. Open up a command prompt window and type
python --version
. If the version number you installed pops up, it’s installed properly, congrats!
If the command is unrecognized, make sure that it’s installed properly AND added to PATH.
If the version number is wrong, you may already have a version installed, as long as it’s 3.X, you can use it.
- Once the installation has been completed, test it. Open up a command prompt window and type
Downloading STonitor¶
Congrats on installing Python. The next part is fairly straightforward, download the most recent version of STonitor.
Head over to the releases page and grab the latest version. This link also brings you there.
Once you’ve found a proper release, check the assets section near the bottom and download the one labeled
Source code (zip)
.When the download has finished, extract the ZIP file to your location of choice. This is where the program will reside, so it’s recommended not to leave it in Downloads and rather someplace accessible and memorable.
Installing Requirements¶
That was easy, wasn’t it? This one’s slightly harder, but still not horrible. We’re going to be installing the packages (requirements) that are needed for STonitor to operate properly.
- Open up a command prompt window and navigate to the folder where you installed STonitor. There are multiple ways of doing this, here’s the most common two:
This is the fastest way. Open up Windows Explorer to where you extracted STonitor, then click the address bar (the thing at the top that shows where you are) and enter
cmd
then press enter. This will automatically open up command prompt to the proper locationThis is another slower way if the first one doesn’t work out. Press Windows + R, and enter
cmd
in the Run dialog. Press enter and it’ll open Command Prompt, after that, cd (change directory) to where you installed STonitor. To do so, entercd path/to/stonitor/here
, replacingpath/to/stonitor/here
with the path to STonitor’s install location
- Once you’ve opened up a command prompt window and properly navigated to STonitor’s install location (make sure you’re in the root folder, that’s the folder that has the file named
requirements.txt
), enter the following command:pip install -r requirements.txt
. You should see an output and multiple progress bars installing the packages. Tip
If it says command not found, first try to replace
pip
withpip3
. If it still doesn’t work, try to replace it withpython -m pip
. If it still doesn’t work, go back and make sure you installed Python properly.Tip
If it says that it couldn’t find
requirements.txt
, make sure you’re in the right folder
- Once you’ve opened up a command prompt window and properly navigated to STonitor’s install location (make sure you’re in the root folder, that’s the folder that has the file named
Make sure that everything has been properly installed (you should see
Successfully installed
then a lot of names)
Done¶
Congrats! You’ve finished the installation portion, now get started on the Setup.
Setup¶
Now that installation is done, it’s pretty much all a breeze from here on out. This section is a short one, first time setup before you start to use STonitor.
Configure CS:GO AutoExec¶
By default, CS:GO doesn’t output it’s console anywhere, in order for this program to work, we need to change that. Luckily it’s pretty simple!
Open up a file explorer window and navigate to your CS:GO cfg directory, for most people, it’s at:
C:/Program Files (x86)/Steam/steamapps/common/Counter-Strike: Global Offensive/csgo/cfg
.In that folder, open the file named
autoexec.cfg
(if this file doesn’t exist, that’s fine, create one that’s named that exactly)Near the end of the file, add this line in:
con_logfile output.log
Save the file
Run CS:GO once so that the file gets generated (STonitor checks if it exists before running)
Hint
Make sure you have “Show File Extensions” enabled in Windows Explorer, otherwise you’ll end up with a file
named autoexec.cfg.txt
which won’t work. This can be enabled in the View
tab of Windows Explorer.
Run STonitor¶
Run STonitor, how this is done depends on how you installed it. If you installed STonitor via the Installer, simply double-click the Desktop Shortcut, or find it in the run menu (the same way you do any other program).
If you performed a manual installation, open a command prompt window to STonitor’s installation location (see the
Installation section if you forgot how to do so) and enter python STonitor.py
.
The program will open and notify you that there were missing data files and that it created them. This is normal for
first time setup. It will also ask you whether you want to open the data folder, enter Y
, then press enter.
Fill in Settings¶
Open the data
folder (the program should have automatically opened it for you if you asked it to, if you didn’t,
see the FAQ entry on the location of the data folder). Inside this data folder,
you’ll find a file named settings.yaml
. The majority of parameters will already have a default value set, you can
change them as needed to your preferences however. This documentation page tells you what each of
the parameters in the file mean. You can open this file in most file editors, Notepad (or Notepad++ for the more
advanced) will work perfectly fine.
Fill in the Steam API Key¶
In settings.yaml
you’ll find an empty parameter named steamkey
. If you want to use the steam account age
(and/or CS:GO playtime) feature, you’ll need to fill this in. A steam API key is what is used to authenticate with
Steam in order to retrieve this data. Luckily getting one is a piece of cake, head on over to
this steam page and you can easily get one (you will need to login). Once
you’ve gotten one, paste it into the file. It should look something like this: steamkey: '31312ANDSAHW1324'
(actual
steamkey in the example is made up, yours will likely be longer and look different).
All Set¶
Once you’ve adjusted all of the settings to your liking, STonitor is ready to go. To run it, simply double-click the
desktop shortcut (if you used the Installer), or navigate to the folder in Command Prompt and enter
python STonitor.py
(if you performed a manual installation).
It’s fairly straightforward to use, but if you don’t know how to use it or want a refresher, head on over to Usage.
Using a Batch File (only for manual installation)¶
If you performed a manual installation and don’t want to have to bother with command prompt everytime, you can also use a batch (.bat) file to run it. Batch files basically run a sequence of command prompt commands automatically when you run it (if you’re on Linux, use bash, it’s fairly similar and you probably already know how to). Using one is fairly easy, follow the below instructions:
Find the location want the Batch file to be. Right click, hover over new, then click Text Document.
Make sure
File name extensions
is checked in theView
tab of Windows Explorer.When it asks you for a name (this step is important), press Ctrl + A (select all text), and enter
STonitor.bat
. It doesn’t have to start with STonitor, it can be whatever you like as long as it ends with.bat
.It’ll tell you that changing a file’s extension can make it unusable, it’ll be perfectly fine, click Yes.
Right click the file that it’s created, then click Edit
Paste the following code into the file and save it, replace the path in the example with the full path to where you installed STonitor.
@echo off
cls
title STonitor
cd C:/Users/Username/Desktop/STonitor
python STonitor.py
pause
Hint
You can also move this file to your Home directory (this is usually C:\Users\Username\
) so that you can
just enter the filename of the bat file in Run (Windows + R) to access it easier. E.g. if your filename is
stonitor.bat
, you can just enter stonitor
in Run for it to open.
Usage¶
How to use JB Log Analysis¶
When a new JB log is detected in the console output, STonitor will automatically parse it and output data according to each of it’s sub-features. No manual user input is needed. It’ll generally be in the format:
<header here>
JB Logs (<date and time here (matches filename if saving is enabled)>)
<summary output here>
<sub-feature name>:
<sub-feature output>
Sub-feature name and sub-feature output repeats for every enabled sub-feature that has at least 1 detection.
How to use TTT Log Analysis¶
When a new TTT log is detected in the console output, STonitor will automatically parse it and output data according to each of it’s sub-features. No manual user input is needed. It’ll generally be in the format:
<header here>
TTT Logs (#<round number here>)
<summary output here>
<sub-feature name>:
<sub-feature output>
Sub-feature name and sub-feature output repeats for every enabled sub-feature that has at least 1 detection.
How to use Log Saving¶
If enabled, logs are automatically saved to your computer. If you want to access these logs, open
the data folder, then the logs folder. Inside will be numerous text files.
TTT text files are stored according to round number (the thing that gets outputted at the start of every log),
for example: TTT_123456.txt
. JB text files are stored according to the date and time up to milliseconds of the
log being parsed (milliseconds are there to prevent overwriting previous logs in case your computer is too fast and
your check interval is low), for example: JB_Dec-29-2021_15-19-56_773927.txt
.
How to use Steam Account Age Checking¶
Open up your CS:GO developer console, and type status
while you’re in a server. The program will detect it being
outputted and automatically parse and retrieve the desired data. This may take a while depending on how many people
are cached, how many are on the server, your internet speed, your computer specs, and what not. You will see a header
and the words Processing status, this may take a while...
fairly quickly however.
Here’s what a full output line looks like, not all players will have everything depending on account privacy settings:
# 228 =(eGO)= MSWS 5 years and 3.05 months (GPT: 3 months and 10.16 days) (SPT: 31 days 06:49:14 hours)
it’s in the format:
# <player id> <name> <steam age> (GPT: <CS:GO playtime>) (SPT: <server playtime>)
If an account has a ~
infront of the account age, that means that the account is private and the age was guessed.
Attention
There may be a couple issues associated with status parsing.
If the status doesn’t get detected, try
run the status
command again, this is because if it happens to be outputted as a output.log clear happens, it
doesn’t get detected.
Sometimes, if the server is too full, the footer (#end
) doesn’t get outputted. This causes
the program to freak out and recover by cancelling parsing and flushing logs. If this happens, you can print the
footer yourself by entering echo #end
in console quickly after issuing status
. This tricks the program into
thinking the status finished successfully. (You may get 1 or two invalid lines but that’s fine).
How to edit Settings¶
To edit settings, open the data folder, then edit the settings.yaml
file
as if it were a text (.txt) file. If you want to know what each option does, go to the Settings page.
Settings¶
Here’s a list of all of the currently available settings parameters, and what they do
output_file: Full path to where the CS:GO output.log file is located, the prefilled value is the default for most people. Default Value:
C:/Program Files (x86)/Steam/steamapps/common/Counter-Strike Global Offensive/csgo/output.log
steamkey: Your steam API key, needed to use the account age and CS:GO playtime features. Example Value:
12345A789101234FJ32U
check_delay: The delay in between the program checking the output.log file for new contents, in seconds. The lower it is the faster you get results but the more resources the program uses.. Default Value:
5
clear_output_log: Boolean (true/false) of whether output.log should be cleared once STonitor is done with it, this prevents repeat output (a runtime caching solution is implemented for JB & Status and a round number session solution for TTT in the case that you turn this off). Default Value:
true
clear_on_start: Boolean (true/false) of whether output.log should be cleared when STonitor starts. Default Value:
false
clear_on_error: Boolean (true/false) of whether output.log is automatically cleared on error to attempt to fix corrupted log issues. Upside is less crashes, downside is potential lost log.. Default Value:
true
confirm_exit: Boolean (true/false) of whether the program will ask you to confirm exiting by pressing enter. This may not work in all cases (certain errors at certain locations will bypass this). Default Value:
true
update_check: Boolean (true/false) of whether the program will check for newer versions on run. Default Value:
true
constants_check: Boolean (true/false) of whether the program will check for non-expected constants on run. Default Value:
true
show_disclaimer: Boolean (true/false) of whether the program will show a disclaimer when it starts. Default Value:
true
header: The header that gets outputted before each program output session/log analysis. In order to create new lines, just press enter to make a new line as you would in any other file. This value must be in single quotes (‘). Example Value:
====================
- logs:
save_logs: Boolean (true/false) of whether logs should be saved to a .txt file for archival purposes. Default Value:
true
- jb:
enable: Boolean (true/false) of whether JB log analysis should be enabled. Default Value:
true
- subfeatures: Boolean (true/false) toggles for whether each subfeature in JB log analysis is enabled
early_vent: Notifies when a CT breaks vents before any prisoner does. Default Value:
true
wardenless_kill: Notifies when a CT kills a non-rebelling T without a warden. Default Value:
true
new_warden_kill: Notifies when a CT kills a non-rebelling T within X seconds of someone becoming warden, X is set in the limits section. Default Value:
true
st_kill: Notifies when a CT kills an ST. Default Value:
true
button_grief: Notifies when someone presses a button and players take more than X damage from the world within Y seconds, X and Y are set in limits. Default Value:
true
nades: Notifies when someone throws a nade/utility (flash, HE, molotov, etc) and players take more than X damage from the world within Y seconds, X and Y are set in limits.. Default Value:
true
mass_freedamage: Notifies when a CT throws a nade and more than X Ts take damage within Y seconds, X and Y are set in limits. Default Value:
true
gunplant: Notifies when a T picks up a CT’s weapon before that CT dies. Default Value:
true
- limits: Various configuration values for the sub-features above
button: Number of seconds after someone presses a button that the program will be looking for damage from the world. Default Value:
10
nade: Number of seconds after someone throws utility that the program will be looking for damage from the world. Default Value:
10
warden: Number of seconds after someone becomes warden that the program will be looking for potential freekills. Default Value:
5
freeday_delay: Number of seconds after warden passes or gets fired that the program will begin looking for potential freekills. Default Value:
10
mass_freedamage: Number of seconds after a CT throws a nade that the program will be looking for Ts taking damage from that person using that nade. Default Value:
5
mass_freedamage_threshold: Number of unique players that take damage from a CT’s nade before it’s considered potential mass freedamage. Default Value:
4
world_damage_threshold: Minimum amount of damage for someone to take from the world for it to be considered in button grief detection and nade disruption detection. Default Value:
15
ignore_warden_button: Boolean (true/false) of whether warden is counted in button grief detection. Default Value:
true
gunplant_show_time: Boolean (true/false) of whether to show the timestamp when outputting gunplant detection. Default Vaue:
true
- summary_output: Boolean (true/false) to enable various types of actions to be shown in the JB summary output
kills: Whether kills are shown in the JB summary output. Default Value:
true
warden: Whether someone becoming warden is shown in the JB summary output. Default Value:
true
warden_death: Whether warden dying is shown in the JB summary output. Default Value:
true
pass_fire: Whether warden passing or being fired is shown in the JB summary output. Default Value:
true
damage: Whether someone being damaged is shown in the JB summary output. Default Value:
false
vents: Whether someone breaking vents is shown in the JB summary output. Default Value:
false
button: Whether someone pressing a button is shown in the JB summary output. Default Value:
false
drop_weapon: Whether someone dropping a weapon is shown in the JB summary output, note that CTs dying counts as them dropping their weapons (don’t worry, gunplant detection handles this). Default Value:
false
pickup_weapon: Whether someone picking up a weapon is shown in the JB summary output. Default Value:
false
world: Whether to show an action if the attacker is the world (game deaths/fall damage deaths). Default Value:
true
- ttt:
enable: Boolean (true/false) of whether TTT log analysis should be enabled. Default Value:
true
- subfeatures: Boolean (true/false) toggles for whether each subfeature in TTT log analysis is enabled
rdm: Notifies when a player may have RDMed someone. By default, reason will be detected (configurable in limits). Default Value:
true
mass_rdm: Notifies when a player may have mass RDMed. By default, reason will not be detected (configurable in limits). Default Value:
true
inno_utility: Notifies when an innocent or detective throws utility and someone gets damaged by it. Default Value:
true
wallhack_purchase: Notifices when a Traitor purchases wallhack. Default Value:
true
- limits: Various configuration values for the sub-features above
rdm_detect_reason: Boolean (true/false) of whether reason is detected for normal RDMs. All reason detection is is going back in logs to check if the victim of an RDM attacked/damaged the attacker/potential RDMer first. If they did, it’s not considered RDM. Default Value:
true
mass_rdm: Number of RDMs for a player to be considered Mass RDMing. Default Value:
2
mass_rdm_detect_reason: Boolean (true/false) of whether reason is detected for mass RDMs. See description of ``rdm_detect_reason`` for how reason detection works. Default Value:
false
utility_bad_only: Boolean (true/false) of whether only bad damage is counted for inno utility detection. Default Value:
false
- summary_output: Boolean (true/false) to enable various types of actions to be shown in the TTT summary output
kills: Whether kills are shown in the TTT summary output. Default Value:
true
damage: Whether damage is shown in the TTT summary output. Default Value:
false
id: Whether body IDing is shown in the TTT summary output. Default Value:
false
dna_scan: Whether Detective DNA scans are shown in the TTT summary output. Default Value:
false
tase: Whether tasing is shown in the TTT summary output. Default Value:
true
shop: Whether shop purchases are shown in the TTT summary output. Default Value:
false
- age: Steam account age, CS:GO playtime, and server playtime
enable: Boolean (true/false) of whether status/age detection should be enabled. Default Value:
true
cache: Boolean (true/false) of whether to cache account ages (this significantly minimizes the number of API calls, speeding the program up significantly). Default Value:
true
- subfeatures: Boolean (true/false) toggles for whether each subfeature in TTT log analysis is enabled
csgo_playtime: Whether CS:GO playtime for accounts is retrieved (when available). Default Value:
true
server_playtime: Whether server playtime for accounts is retrieved. Default Value:
true
- private: Configuration options specifically for private accounts
enabled: Boolean (true/false) of whether private account age guessing is enabled. This is done by checking the account ages of accounts made immediately after the private account to estimate the age of the private account. Default Value:
true
tries: Number of tries for private account age detection (number of accounts after private account) to try before giving up. Default Value:
10
- colours: Settings regarding coloured output of STonitor. Valid colours are black, red, green, yellow, blue, magenta, cyan, and white
enable: Boolean (true/false) of whether output should be coloured. Default Value:
true
time: Colour for outputs related to time. Default Value:
cyan
name: Colour for player names. Default Value:
magenta
button_name: Colour for names of buttons. Default Value:
yellow
weapon_name: Colour for names and types of weapons. Default Value:
yellow
damage: Colour for damage numbers (points of damage, number of players damaged/killed, etc). Default Value:
red
role: Colour for player role names. This setting can be set to “automatic”, in which the colour will be based off of their role. This can cause overlap of colours. Default Value:
automatic
age: Colour for player steam account age in Steam Age output. Default Value:
cyan
level: Colour for player level in Steam Age output. Default Value:
red
game_playtime: Colour for playtime of game in Steam Age output. Default Value:
yellow
server_playtime: Colour for playtime on the server in Steam Age output. Default Value:
green
Changed in version 2.1.1: Removed jb
/limits
/gunplant
as new gunplant detection system no longer uses it
Changed in version 1.0.1: Removed min_session_save_interval
as session is no longer used
Constants¶
Constants is another configuration file that’s a bit more complicated. Generally you shouldn’t ever touch anything in here unless instructed to or you know exactly what you’re doing.
- ttt:
regex: Named regex for each type of action listed
log_header: Full line of the header indicating the start of TTT logs
log_separator: Full line of the footer/separator indicating the end of TTT logs
utility_weapon_names: List of weapon names that count as utility
wallhack_name: Name of the wallhack item when purchased from the shop
- jb:
regex: Named regex for each type of action listed
log_header: List of all 3 lines that indicate the start of JB logs
log_separator: List of all 3 lines that indicate the end of JB logs
utility_weapon_names: Pairs of utility names and their corresponding weapon names
utility_names: Utility names to ignore for gunplant detection
- age:
regex: Named regex for each line in status
header: Full line of the header indicating the start of a status output
footer: Full line of the footer indicating the end of a status output
- gameme:
playerinfo_url: URL to GameME player info redirect page without a trailing /.
game_code: Pairs of IPs and their corresponding game codes on GameME
connected_regex: Regex to detect ``Connected to <ip here>`` lines
error_threshold: Number of errors the program will attempt to recover from before exiting
github_release_latest: URL to latest GitHub releases page for STonitor
Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[2.3.0] - 2023-04-07¶
Added¶
New log types to TTT Summary Output
Body IDing
Detective DNA Scans
Tasing
Shop Purchases
Automatic checking for updated constants
Add detection for wallhack purchases
Option to show time for gunplant detection
Changed¶
Added option to clear output.log on program start
Cleaned up TTT implementation
Ignore gunplant detection in LR/LG
Fixed¶
Outdated default GameME link for eGO
Ensured that users can see the FileNotFound error when searching for output.log
Various minor errors in the documentation (spelling, old information, etc)
[2.2.0] - 2022-11-04¶
Added¶
Shows disclaimer on startup
Created installer for Windows
Changed¶
Added healthshot to gunplant ignore
Updated GitHub update checking URL to new one
Moved data folder to native data location (APPDATA, .config)
Documentation updated to reference Windows installer
The program now asks if you want to open the data folder if it generates it
Clarify additional step in manual BAT setup instructions
Fixed¶
Incorrect default colours listed in settings documentation
Typo in default button config
TTT summary output not showing damage dealt
Edge case in which the program would crash if there was a specific issue retrieving account age
Broken update checking as a result of repo URL change
[2.1.2] - 2022-05-15¶
Changed¶
Default colours so that they’re more readable with default Command Prompt
Removed¶
Unused colour
playtime
[2.1.1] - 2022-05-15¶
Added¶
jb_undertale pictionary draw button to default ignore
Various entries regarding JB logging in the known bugs documentation page
Coloured output to make wall of text easier to understand
ST kill detection
Summary output for weapon pickup
Changed¶
Better invalid status line logging
Version number now shows in ready message
Gunplant detection now simply checks if a T picks up a CT’s weapon before that CT dies
Fixed¶
Outdated default GameME link for eGO
Space padding incorrect on button grief output
Fix odd invalid status line error
Typo in documentation index page
Removed¶
Feature list is no longer shown in README
[2.0.1] - 2022-01-20¶
Fixed¶
Regex not matching status lines when space padded
[2.0.0] - 2022-01-20¶
Added¶
Clarification on common status issues in documentation
Check if output.log exists at runtime
Ability to hide world actions from summary output
Steam level to status
Basic support for new
ST
role in logsFAQ entry for new GameME detections
Known bugs page on documentation
Show error message on status error
Button ignore & alias file
Changed¶
Output.log now opens in UTF-8 encoding
Non-context roles now show as T/CT to avoid confusion
Rewrote status parsing code to have less spaghetti
Other retrievable options are still retrieved if account is private now
Fixed¶
KeyError on invalid weapon name (MFD Detection)
Status getting stuck wo/
#end
Multi-parse edge cases causing odd bugs
Early vent false positive on some maps
[1.1.2] - 2022-01-01¶
Fixed¶
Damage regex not triggering if damage was headshot
[1.1.1] - 2021-12-31¶
Added¶
Ability to retrieve server playtime using GameME
[1.0.1] - 2021-12-31¶
Added¶
Ability to wipe output.log on error to try to automatically resolve errors arising from corrupted logs
Changed¶
Exempt potential FK/FD during LR and LG instead of just LG
TTT now uses caching similar to status and JB
Parsed arrays are now cleared as soon as output.log is cleared to minimize unneeded memory usage
Fixed¶
LR detection reporting wrong death
IndexError in case of corrupted TTT logs
TTT full logs not being parsed if sm_logs was run during the round to retrieve partial log
Deprecated¶
session.json
is no longer used, and can be removed
[1.0.0] - 2021-12-30¶
Initial release, no changes
Known Bugs¶
Bugs that are currently known about the program, recommended to check this page in latest
view for the most up to
date information.
Logs Parsing¶
JB¶
- LR/LG detection can be incorrect for any one of the following reasons, there’s no practical way to eliminate all of these issues:
If someone does absolutely nothing that gets logged in the entire round, it will break LR/LG detection
If someone joins in the middle of the round and runs !ghost
If someone gets respawned in the middle of the round, STonitor will ignore all logs about that person from their death point forward. This is an unintentional side-effect of an intentional feature.
TTT¶
Status Parsing¶
When parsing a very long status,
#end
doesn’t output properly, this is an issue with CS:GO.
Frequently Asked Questions¶
I’m getting python or pip is not recognized as an internal or external command¶
Make sure that it was installed properly, that you checked Add to PATH during the initial installation process, and that you didn’t use the Windows/Microsoft Store version. If you did any any of those, uninstall and reinstall Python, if it still doesn’t work, you can try to email me or contact me on Discord to resolve it. I’d recommend Googling first though as it’s highly likely someone’s already had the exact same issue as you did.
I messed up something in the settings, what should I do?¶
Delete the settings.yaml
file (in the data folder), and it’ll be regenerated
with default values. You’ll have to change the settings again to the values you want and fill in the API key again
however.
I messed with the constants file, and now the program isn’t parsing lines correctly¶
Delete the constants.yaml
file (in the data folder), and it’ll be
regenerated with the proper working default values.
Can I add more GameME server IPs to playtime detection?¶
Yes, provided that they’re under the same GameME page as the existing entries, you can. To do so, go to
constants.yaml
(in the data folder), go to
age
-> gameme
-> game_code
. You can then add the IP you want in the following format:
{ip here}: {game code here}
Replace {ip here}
with the IP address of the server you wish to add, and replace {game code here}
with the
GameME game code of the specific server you want to add (to get this, go to the GameME page of the server you want to
add and look at the URL, it’ll be visible after the domain. For example csgo3
is the gamecode in the URL
edgegamersorg.gameme.com/csgo3
)
Early Vents keeps showing despite no CT breaking vents¶
There is a bug that occurs on some JB maps in which when a CT opens cells, it gets counted as breaking a vent or wall. There is a feature that attempts to mitigate this by checking if the last action was the CT pressing a button, but this isn’t foolproof.
Account age output is really slow, what can I do about this?¶
Unfortunately, account age detection is really slow as it involves a large amount of web requests, and is poorly
optimized at the moment. Enabling the cache if it isn’t already is helps a fair bit. Disabling a couple features will
be the most noticeable however. GameME (server playtime) takes the longest, as it requires scraping the GameME site,
then parsing the HTML (TL;DR it takes a while). Disabling server playtime in the config
(age/subfeatures/server_playtime
) will speed it up a lot. If you want it slightly faster, you can also disable
CS:GO playtime, as it requires an extra API call to Steam (age/subfeatures/csgo_playtime
), although this isn’t
nearly as slow as GameME.
Why shouldn’t I double click to run STonitor?¶
This works just fine in most use cases, but if the program crashes or you close it, all output will be instantly gone. You won’t be able to see it again, normally closing is fine as STonitor will ask you confirm closing but not for errors. Whether or not you decide to run STonitor by double-clicking is your choice, but using command prompt really isn’t that inconvenient (if you use a Batch file, it’s actually more convenient!). When using command prompt, the past output still shows until you close the command prompt window.
Deprecated since version 2.2.0: This is no longer the case as of 2.2.0, you can now double click to run STonitor without any issues if you used the Installer.
How was the name STonitor chosen?¶
Since the idea for STonitor came from MSWS’ Sonitor, I based the name of the program off of that. Sonitor didn’t support TTT while I was planning for STonitor to support it, so I added a T for TTT into the name. It was put after the S so that it was in the order ST, representing Special Treatment for JB. In the end, it’s just me being uncreative and not wanting to come up with a new name.
Where is the data folder?¶
On versions 2.2.0 and above, all data is in the standard config directory for your operating system, under a subfolder
named “STonitor”. On Windows, this is C:\Users\Username\AppData\Roaming\STonitor
.
On Linux and Mac, this is ~/.config/STonitor
.
Note
You can get to the data folder quickly on Windows by opening your File Explorer, clicking the address bar, then
entering %APPDATA%\STonitor
, and pressing enter.
Deprecated since version 2.2.0: Prior to version 2.2.0, the data folder was in the same directory as the executable. This is no longer the case (see above).
How do I update STonitor?¶
If you used the Installer, you can just run it again and it’ll update STonitor. If you performed a manual installation, extract the new/updated ZIP file into where you originally installed STonitor and override if prompted.
There may also be additional instructions in the release notes for that version, make sure to look through them (and
also the release notes of any versions you skipped). Most commonly, these will be telling you to delete
constants.yaml
, session.json
, or age_cache.json
.
How do I downgrade STonitor?¶
It’s not recommended to downgrade Sonitor, as there may be unfixed bugs, and other issues in previous versions. If you
still want to, delete all files not in the data
folder and then extract the ZIP file of the older version there.
Try to run it, but if you encounter an error than that likely means that the data files aren’t compatible either. You’ll
need to delete the data folder as well and re-configure them as if you were installing STonitor anew.
An invalid line keeps crashing STonitor, how can I resolve it?¶
You can open the output.log file manually and wipe everything in it, then restart STonitor. If it was an issue with some corrupted log/output, this will fix it. It’s also recommended to report it as a bug so that I can fix it within the program and prevent it from happening again.
New in version 1.0.1: STonitor will now automatically wipe output.log on error if the config option clear_on_error
is true.
How can I report a bug?¶
Report a bug on GitHub using the Bug Report issue template, here’s a link to make things easier. You’ll need to have a GitHub account in order to do this. If you’re unsure about any of the fields/sections in the template, feel free to leave it blank. A bug report that isn’t complete is better than no bug report.
How can I suggest a feature?¶
Suggest a feature on GitHub using the Feature Request issue template, here’s a link to make things easier. You’ll need to have a GitHub account in order to do this.
Where can I contact the developer?¶
If you came from eGO forums, you can feel free to reply to the thread there. You can also email me at contact[at]blankdvth.com.
About¶
STonitor is an application that’s designed to help admins (and sometimes players) on eGO servers by automatically analyzing TTT and JB logs to facilitate understanding them. STonitor also comes with a Steam Age feature which’ll list the age of steam accounts connected to any CS:GO server as well as CS:GO playtime (if available). This application may eventually evolve to contain a broader spectrum of features that would be useful.
Important
This program is designed to assist in the analysis and understanding of logs, it cannot replace human discretion and understanding. This program is only able to make sense of the information provided to it (logs) and won’t be able to understand what’s going on in the game if it isn’t in logs. An example would be the program reporting a JB wardenless freekill, the player that was supposedly freekilled is in armory and is thus KOS regardless of if there is a warden or not. The program is unable to tell because location information is unavailable in logs.
If you want to use this program, start with the step-by-step Installation instructions.
Features¶
The majority of these features and their sub-features can be disabled using the detailed settings file. To understand how to edit this file and what each parameter means, go here.
- Steam Age
Automatically runs when
status
is typed in the CS:GO console- Automatically retrieves and outputs the account age of everyone on the server
If an account is private, the age is estimated by getting the ages of accounts created directly after the private account
Automatically retrieves and outputs player’s CS:GO playtime if available
Automatically retrieves and outputs player’s server playtime if available (using GameME)
- JB Log Analysis
Wardenless Freekill: Notifies you when a CT kills a non-rebelling T without warden alive
New Warden Freekill: Notifies you when a CT kills a non-rebelling T within X seconds of a new warden coming on
ST Freekill: Notifies you when a CT kills an ST
Mass Freedamage: Notifies you when a CT throws an HE grenade or molotov and damages more than X Ts within Y seconds
- Early Vent: Notifies you when a CT breaks a vent/wall before any T does
Note
On certain maps, a player opening cell doors may count as breaking a vent/wall, creating a false-positive
- Button Grief: Notifies you when someone presses a button and players take damage from the world within X seconds after
By default, the warden is not counted in this, it can be toggled off in settings however
The damage threshold before a warning is triggered is configurable in settings
Buttons can be ignored or renamed using a Button Configuration file
- Nade Disruption: Notifies you when a prisoner throws utility and players take damage from the world within X seconds
The damage threshold before a warning is triggered is configurable in settings
Gunplant: Notifies you when a T picks up a CT’s weapon before that CT dies
- TTT Log Analysis
- RDM: Notifies you if there may have been a potential RDM
The program can attempt to detect reasoning and eliminate reasonable bad kills. This is done by going back through logs to check if the ‘victim’ of the RDM attacked the potential RDMer first.
- Mass RDM: Notifies you if a player has more than X bad kills in a single round
Similarly to RDM detection, Mass RDM detection can also attempt to detect reasoning, however this is disabled by default for Mass RDM
Inno Utility: Notifies you when an innocent or detective damages someone with utility
Log Summary Output: Creates a customizable summary of each round log, so that if you want to take a quick glance, its not as cluttered
- Automatic Log Saving: Automatically saves TTT & JB logs on your computer as .txt files, so that you can access them whenever
TTT logs are saved in the format:
TTT_round-number-here.txt
withround-number-here
being the TTT round number. E.g.TTT_12345.txt
JB logs are saved in the format:
JB_datetime-here.txt
withdatetime-here
being the date and time down to the millisecond in which the log was initially processed. E.g.JB_Dec-28-2021_19-28-06_372498.txt
Planned Features¶
Patch of cell opening false-positive for vent detection
Button alias file support
Potential Features¶
Admin chat highlighting and storing