Merge pull request #54 from ineedbots/develop
Remove updater, update changelog and links
This commit is contained in:
commit
f3f2c69e85
861
CHANGELOG.md
861
CHANGELOG.md
@ -1,413 +1,448 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog v0.3.0](http://keepachangelog.com/en/0.3.0/) and this project adheres to [Semantic Versioning](http://semver.org/).
|
The format is based on [Keep a Changelog v0.3.0](http://keepachangelog.com/en/0.3.0/) and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
## [unreleased] - xxxx-xx-xx
|
## [0.6.1 Community] - 2020-12-05
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Add host information to /info endpoint (request)
|
- Add host information to /info endpoint (request)
|
||||||
|
- Add fileWrite GSC Function (#36)
|
||||||
### Changed
|
- Add fileRead GSC Function (#36)
|
||||||
|
- Add fileExists GSC Function (#36)
|
||||||
- Stats are now separate for each mod (#6). Player stats are copied to `fs_game` folder if no stats exist for this mod yet. Keep in mind this also means that level, XP and classes will not be synchronized with the main stats file after this point.
|
- Add fileRemove GSC Function (#36)
|
||||||
|
- Add botMovement GSC Function (#46)
|
||||||
## [0.6.0] - 2018-12-30
|
- Add botAction GSC Function (#46)
|
||||||
|
- Add botWeapon GSC Function (#46)
|
||||||
### Added
|
- Add botStop GSC Function (#46)
|
||||||
|
- Add isBot GSC Function (#46)
|
||||||
- Implement unbanclient command.
|
- Add setPing GSC Function (#46)
|
||||||
- Implement /serverlist api endpoint on dedicated servers
|
- Add GetSystemTime and GetSystemTimeMilliseconds GSC Functions (#46)
|
||||||
- Add dvar to control the server query rate (net_serverQueryLimit & net_serverFrames)
|
- Add PrintConsole GSC Function (#46)
|
||||||
|
- Add Exec GSC Function (#46)
|
||||||
### Changed
|
- Add getIP GSC Method (#36)
|
||||||
|
- Add getPing GSC Method (#36)
|
||||||
- Update dependencies
|
- Add scr_intermissionTime GSC Function (#25)
|
||||||
|
- Add g_playerCollision Dvar (#36)
|
||||||
### Fixed
|
- Add g_playerEjection Dvar (#36)
|
||||||
|
- Add r_specularCustomMaps Dvar (#36)
|
||||||
- Fix mods not working in private matches.
|
- Unlock safeArea_horizontal and safeArea_vertical Dvars (#42)
|
||||||
- Fix multiple game structures (map tools)
|
- Unlock cg_fovscale Dvar (#47)
|
||||||
- Fix multiple vulnerability's
|
|
||||||
- Fix lag spikes on lower end PCs
|
### Changed
|
||||||
- Fix invalid name check
|
|
||||||
- Fix openLink command crash issue
|
- Stats are now separate for each mod (#6). Player stats are copied to `fs_game` folder if no stats exist for this mod yet. Keep in mind this also means that level, XP and classes will not be synchronized with the main stats file after this point.
|
||||||
- Fix lobby server map downloading
|
- Reduced duration of toasts (#48)
|
||||||
- Fix steam integration
|
- Removed old updater functionality
|
||||||
|
- Use old bot names if bots.txt is not found (#46)
|
||||||
### Known issues
|
- Removed Steam integration because Steam updates kept breaking it (#51)
|
||||||
|
|
||||||
- HTTPS is not supported for fast downloads at the moment.
|
### Fixed
|
||||||
|
|
||||||
## [0.5.4] - 2017-07-09
|
- Fixed a node system related crash (#45)
|
||||||
|
- Fixed an issue that made dedicated servers crash when info was requested during map rotation (#43)
|
||||||
### Added
|
- Fixed an issue where the game was trying to decrypt gsc files which caused it to crash when loading mods (#35)
|
||||||
|
|
||||||
- Integrate IW4MVM by luckyy.
|
|
||||||
|
#######################End of official IW4x Development - Project goes Open Source#######################
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Displayed stats for Dragunov have been changed, has no effect on actual game play.
|
## [0.6.0] - 2018-12-30
|
||||||
|
|
||||||
### Fixed
|
### Added
|
||||||
|
|
||||||
- Fix fast download failing when the target host is missing a trailing slash.
|
- Implement unbanclient command.
|
||||||
- Fix servers not being listed in the server browser.
|
- Implement /serverlist api endpoint on dedicated servers
|
||||||
- Fix some FPS drop issues caused by compression code.
|
- Add dvar to control the server query rate (net_serverQueryLimit & net_serverFrames)
|
||||||
|
|
||||||
### Known issues
|
### Changed
|
||||||
|
|
||||||
- HTTPS is not supported for fast downloads at the moment.
|
- Update dependencies
|
||||||
|
|
||||||
## [0.5.3] - 2017-07-02
|
### Fixed
|
||||||
|
|
||||||
### Added
|
- Fix mods not working in private matches.
|
||||||
|
- Fix multiple game structures (map tools)
|
||||||
- Increase webserver security.
|
- Fix multiple vulnerability's
|
||||||
|
- Fix lag spikes on lower end PCs
|
||||||
### Fixed
|
- Fix invalid name check
|
||||||
|
- Fix openLink command crash issue
|
||||||
- Reduce lags introduced by nodes.
|
- Fix lobby server map downloading
|
||||||
- Fix modlist download.
|
- Fix steam integration
|
||||||
|
|
||||||
## [0.5.2] - 2017-07-02
|
### Known issues
|
||||||
|
|
||||||
### Fixed
|
- HTTPS is not supported for fast downloads at the moment.
|
||||||
|
|
||||||
- Fix dedicated server crash.
|
## [0.5.4] - 2017-07-09
|
||||||
|
|
||||||
## [0.5.1] - 2017-07-02
|
### Added
|
||||||
|
|
||||||
### Added
|
- Integrate IW4MVM by luckyy.
|
||||||
|
|
||||||
- Add fast download option for custom mods/maps based on Call of Duty 4.
|
### Changed
|
||||||
- Display a toast when an update is available.
|
|
||||||
- Use the hourglass cursor while loading assets (with the native cursor feature).
|
- Displayed stats for Dragunov have been changed, has no effect on actual game play.
|
||||||
- Show bots in parenthesis after the number of players in the serverlist (request).
|
|
||||||
- Add GSC event `level waittill("say", string, player);` (request).
|
### Fixed
|
||||||
- Restrict unauthorized mod download for password protected servers.
|
|
||||||
- Add OMA support for 15 classes.
|
- Fix fast download failing when the target host is missing a trailing slash.
|
||||||
|
- Fix servers not being listed in the server browser.
|
||||||
### Changed
|
- Fix some FPS drop issues caused by compression code.
|
||||||
|
|
||||||
- Show friend avatars when they play IW4x (request).
|
### Known issues
|
||||||
- Rewrite and optimize the entire node system.
|
|
||||||
- Remove syncnode command for node system.
|
- HTTPS is not supported for fast downloads at the moment.
|
||||||
- Remove steam start.
|
|
||||||
|
## [0.5.3] - 2017-07-02
|
||||||
### Fixed
|
|
||||||
|
### Added
|
||||||
- Fix lags and frame drops caused by server sorting.
|
|
||||||
- Fix demos on custom maps.
|
- Increase webserver security.
|
||||||
- Can no longer join a lobby or server with an incorrect password.
|
|
||||||
- Fix crashes caused by a bug in file/data compression.
|
### Fixed
|
||||||
- Improve overall stability.
|
|
||||||
|
- Reduce lags introduced by nodes.
|
||||||
## [0.5.0] - 2017-06-04
|
- Fix modlist download.
|
||||||
|
|
||||||
### Added
|
## [0.5.2] - 2017-07-02
|
||||||
|
|
||||||
- Add GSC functionality to download files via HTTP(S) (request).
|
### Fixed
|
||||||
- Implement preliminary custom map support.
|
|
||||||
|
- Fix dedicated server crash.
|
||||||
### Changed
|
|
||||||
|
## [0.5.1] - 2017-07-02
|
||||||
- Add new nicknames for bots.
|
|
||||||
- Bumped Fastfile version. If you built fastfiles with the zone builder (e.g. mod.ff) you have to rebuild them!
|
### Added
|
||||||
- Default `sv_network_fps` to `1000` on dedicated game servers.
|
|
||||||
- Increase maximum FOV to 120.
|
- Add fast download option for custom mods/maps based on Call of Duty 4.
|
||||||
|
- Display a toast when an update is available.
|
||||||
### Fixed
|
- Use the hourglass cursor while loading assets (with the native cursor feature).
|
||||||
|
- Show bots in parenthesis after the number of players in the serverlist (request).
|
||||||
- Fix `iw4x_onelog` dvar.
|
- Add GSC event `level waittill("say", string, player);` (request).
|
||||||
- Fix server list only showing local servers by default instead of Internet servers.
|
- Restrict unauthorized mod download for password protected servers.
|
||||||
- Fix some deadlock situations on game shutdown.
|
- Add OMA support for 15 classes.
|
||||||
|
|
||||||
## [0.4.2] - 2017-03-16
|
### Changed
|
||||||
|
|
||||||
### Changed
|
- Show friend avatars when they play IW4x (request).
|
||||||
|
- Rewrite and optimize the entire node system.
|
||||||
- Disable unnecessary dvar update in server browser.
|
- Remove syncnode command for node system.
|
||||||
- Update bot names.
|
- Remove steam start.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix process permissions.
|
- Fix lags and frame drops caused by server sorting.
|
||||||
- Fix classic AK-47 color bleedthrough.
|
- Fix demos on custom maps.
|
||||||
- Re-aligned the MG4's Raffica iron sights.
|
- Can no longer join a lobby or server with an incorrect password.
|
||||||
|
- Fix crashes caused by a bug in file/data compression.
|
||||||
## [0.4.1] - 2017-03-10
|
- Improve overall stability.
|
||||||
|
|
||||||
### Fixed
|
## [0.5.0] - 2017-06-04
|
||||||
|
|
||||||
- Fix command line argument parsing.
|
### Added
|
||||||
|
|
||||||
## [0.4.0] - 2017-03-10
|
- Add GSC functionality to download files via HTTP(S) (request).
|
||||||
|
- Implement preliminary custom map support.
|
||||||
### Added
|
|
||||||
|
### Changed
|
||||||
- Set played with status.
|
|
||||||
- Add support for 15 classes.
|
- Add new nicknames for bots.
|
||||||
- Add `iw4x_onelog` dvar.
|
- Bumped Fastfile version. If you built fastfiles with the zone builder (e.g. mod.ff) you have to rebuild them!
|
||||||
- Add show server/playercount in server browser.
|
- Default `sv_network_fps` to `1000` on dedicated game servers.
|
||||||
|
- Increase maximum FOV to 120.
|
||||||
### Changed
|
|
||||||
|
### Fixed
|
||||||
- Do not show friend status notifications with stream friendly UI.
|
|
||||||
- Reduce loaded modules for dedis.
|
- Fix `iw4x_onelog` dvar.
|
||||||
- Use joystick emblem for friend status.
|
- Fix server list only showing local servers by default instead of Internet servers.
|
||||||
- Disable XP bar when max level.
|
- Fix some deadlock situations on game shutdown.
|
||||||
- Change fs_game display postition.
|
|
||||||
- Replace Painkiller with Juiced from IW5.
|
## [0.4.2] - 2017-03-16
|
||||||
|
|
||||||
### Fixed
|
### Changed
|
||||||
|
|
||||||
- Fix AK weaponfiles.
|
- Disable unnecessary dvar update in server browser.
|
||||||
- Fix brightness slider.
|
- Update bot names.
|
||||||
- Fix text length for column mod in server browser.
|
|
||||||
- Changed the L86 LSW to use the correct HUD icon.
|
### Fixed
|
||||||
- Re-aligned the M93 Raffica's iron sights.
|
|
||||||
- Re-aligned the Desert Eagle's iron sights.
|
- Fix process permissions.
|
||||||
|
- Fix classic AK-47 color bleedthrough.
|
||||||
## [0.3.3] - 2017-02-14
|
- Re-aligned the MG4's Raffica iron sights.
|
||||||
|
|
||||||
### Added
|
## [0.4.1] - 2017-03-10
|
||||||
|
|
||||||
- Add mapname to friend status (request).
|
### Fixed
|
||||||
- Add option to toggle notify friend state.
|
|
||||||
- Add support for mod.ff.
|
- Fix command line argument parsing.
|
||||||
|
|
||||||
### Changed
|
## [0.4.0] - 2017-03-10
|
||||||
|
|
||||||
- Disabled big minidump message box.
|
### Added
|
||||||
- Limit dedicated servers to 15 instances per IP.
|
|
||||||
- Move build number location.
|
- Set played with status.
|
||||||
- Remove news ticker and friends button from theater.
|
- Add support for 15 classes.
|
||||||
|
- Add `iw4x_onelog` dvar.
|
||||||
### Fixed
|
- Add show server/playercount in server browser.
|
||||||
|
|
||||||
- Fix audio bug in options menu.
|
### Changed
|
||||||
- Fix crash caused by faulty file download requests to game hosts.
|
|
||||||
- Fix friend sorting.
|
- Do not show friend status notifications with stream friendly UI.
|
||||||
- Fix game not starting issue under certain circumstances.
|
- Reduce loaded modules for dedis.
|
||||||
- Fix menu crash.
|
- Use joystick emblem for friend status.
|
||||||
- Fix typo in security increase popmenu.
|
- Disable XP bar when max level.
|
||||||
- Fix vid_restart crash with connect protocol.
|
- Change fs_game display postition.
|
||||||
- Fix weapon crash issue.
|
- Replace Painkiller with Juiced from IW5.
|
||||||
- Potentially fix no-ammo bug.
|
|
||||||
|
### Fixed
|
||||||
## [0.3.2] - 2017-02-12
|
|
||||||
|
- Fix AK weaponfiles.
|
||||||
This is the third public Beta version.
|
- Fix brightness slider.
|
||||||
|
- Fix text length for column mod in server browser.
|
||||||
### Added
|
- Changed the L86 LSW to use the correct HUD icon.
|
||||||
|
- Re-aligned the M93 Raffica's iron sights.
|
||||||
- Add working friend system.
|
- Re-aligned the Desert Eagle's iron sights.
|
||||||
- Add colored pings in the server list.
|
|
||||||
- Add credits.
|
## [0.3.3] - 2017-02-14
|
||||||
- Add first launch menu.
|
|
||||||
- Add AK-47 (Classic) attachments.
|
### Added
|
||||||
- Add HUD icon for night vision goggles.
|
|
||||||
|
- Add mapname to friend status (request).
|
||||||
### Changed
|
- Add option to toggle notify friend state.
|
||||||
|
- Add support for mod.ff.
|
||||||
- Join when pressing enter in server list (request).
|
|
||||||
- Redesign and refactor all fullscreen menus.
|
### Changed
|
||||||
- Increase weapon and configstring limit.
|
|
||||||
- Allow creating full crash dumps if wanted.
|
- Disabled big minidump message box.
|
||||||
- Set default name from steam.
|
- Limit dedicated servers to 15 instances per IP.
|
||||||
|
- Move build number location.
|
||||||
### Fixed
|
- Remove news ticker and friends button from theater.
|
||||||
|
|
||||||
- Fix missing models on village.
|
### Fixed
|
||||||
- Fix custom server motd (request).
|
|
||||||
- Fix various memory leaks.
|
- Fix audio bug in options menu.
|
||||||
- Fix mouse pitch (request).
|
- Fix crash caused by faulty file download requests to game hosts.
|
||||||
- Fix compatibility with B3 (request).
|
- Fix friend sorting.
|
||||||
- Fix RCon bug (request).
|
- Fix game not starting issue under certain circumstances.
|
||||||
- Fix dedicated server crash on linux.
|
- Fix menu crash.
|
||||||
- Fix crash in mod download.
|
- Fix typo in security increase popmenu.
|
||||||
- Fix peacekeeper reload sound.
|
- Fix vid_restart crash with connect protocol.
|
||||||
- Fix cl_maxpackets 125 in settings (request).
|
- Fix weapon crash issue.
|
||||||
- Fix deserteaglegold_mp icon.
|
- Potentially fix no-ammo bug.
|
||||||
|
|
||||||
### Known issues
|
## [0.3.2] - 2017-02-12
|
||||||
|
|
||||||
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
This is the third public Beta version.
|
||||||
|
|
||||||
## [0.3.1] - 2017-01-21
|
### Added
|
||||||
|
|
||||||
This is the second public Beta version.
|
- Add working friend system.
|
||||||
|
- Add colored pings in the server list.
|
||||||
### Added
|
- Add credits.
|
||||||
|
- Add first launch menu.
|
||||||
- Add classic AK-47 to CAC.
|
- Add AK-47 (Classic) attachments.
|
||||||
- Add servers to favorites when ingame.
|
- Add HUD icon for night vision goggles.
|
||||||
- Add delete favorites button in the serverlist.
|
|
||||||
|
### Changed
|
||||||
### Changed
|
|
||||||
|
- Join when pressing enter in server list (request).
|
||||||
- Change maplist to a dynamic list.
|
- Redesign and refactor all fullscreen menus.
|
||||||
|
- Increase weapon and configstring limit.
|
||||||
### Fixed
|
- Allow creating full crash dumps if wanted.
|
||||||
|
- Set default name from steam.
|
||||||
- Fix list focus.
|
|
||||||
- Fix mod restart loop.
|
### Fixed
|
||||||
- Fix mod download status.
|
|
||||||
- Fix modelsurf crash.
|
- Fix missing models on village.
|
||||||
- Fix floating AK-74u.
|
- Fix custom server motd (request).
|
||||||
|
- Fix various memory leaks.
|
||||||
### Known issues
|
- Fix mouse pitch (request).
|
||||||
|
- Fix compatibility with B3 (request).
|
||||||
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
- Fix RCon bug (request).
|
||||||
|
- Fix dedicated server crash on linux.
|
||||||
## [0.3.0] - 2017-01-14
|
- Fix crash in mod download.
|
||||||
|
- Fix peacekeeper reload sound.
|
||||||
This is the first public Beta version.
|
- Fix cl_maxpackets 125 in settings (request).
|
||||||
|
- Fix deserteaglegold_mp icon.
|
||||||
### Added
|
|
||||||
|
### Known issues
|
||||||
- Add com_logFilter dvar.
|
|
||||||
- Add peacekeeper.
|
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
||||||
- Add support for maps from DLC 8 (Recycled Pack)
|
|
||||||
|
## [0.3.1] - 2017-01-21
|
||||||
- Chemical Plant (mp_storm_spring)
|
|
||||||
- Crash: Tropical (mp_crash_tropical)
|
This is the second public Beta version.
|
||||||
- Estate: Tropical (mp_estate_tropical)
|
|
||||||
- Favela: Tropical (mp_fav_tropical)
|
### Added
|
||||||
- Forgotten City (mp_bloc_sh)
|
|
||||||
|
- Add classic AK-47 to CAC.
|
||||||
### Changed
|
- Add servers to favorites when ingame.
|
||||||
|
- Add delete favorites button in the serverlist.
|
||||||
- Improve node synchronization handling.
|
|
||||||
- Improve security by modifying GUIDs to allow 64-bit certificate fingerprints.
|
### Changed
|
||||||
- Optimize fastfiles, they are now a lot smaller.
|
|
||||||
- Replace intro.
|
- Change maplist to a dynamic list.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix concurrent image loading bug.
|
- Fix list focus.
|
||||||
- Fix issues when spawning more than one bot.
|
- Fix mod restart loop.
|
||||||
- Fix no ammo bug.
|
- Fix mod download status.
|
||||||
- Fix server crash on startup.
|
- Fix modelsurf crash.
|
||||||
- Fix splash screen hang.
|
- Fix floating AK-74u.
|
||||||
|
|
||||||
### Known issues
|
### Known issues
|
||||||
|
|
||||||
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
||||||
|
|
||||||
## [0.2.1] - 2016-12-14
|
## [0.3.0] - 2017-01-14
|
||||||
|
|
||||||
This is the second public Alpha version.
|
This is the first public Beta version.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Add support for CoD:Online maps.
|
- Add com_logFilter dvar.
|
||||||
|
- Add peacekeeper.
|
||||||
- Firing Range (mp_firingrange)
|
- Add support for maps from DLC 8 (Recycled Pack)
|
||||||
- Rust (mp_rust_long)
|
|
||||||
- Shipment (mp_shipment/mp_shipment_long)
|
- Chemical Plant (mp_storm_spring)
|
||||||
|
- Crash: Tropical (mp_crash_tropical)
|
||||||
- Add `sv_motd` Dvar for server owners to set custom motd (will be visible in the loadscreen).
|
- Estate: Tropical (mp_estate_tropical)
|
||||||
- Add Zonebuilder support for sounds and fx.
|
- Favela: Tropical (mp_fav_tropical)
|
||||||
- Add command setviewpos.
|
- Forgotten City (mp_bloc_sh)
|
||||||
- Add high-definition loadscreens.
|
|
||||||
|
### Changed
|
||||||
### Changed
|
|
||||||
|
- Improve node synchronization handling.
|
||||||
- Rename Arctic Wet Work map to it's official name (Freighter).
|
- Improve security by modifying GUIDs to allow 64-bit certificate fingerprints.
|
||||||
- Complete redesign of the main menus.
|
- Optimize fastfiles, they are now a lot smaller.
|
||||||
- Allow `cl_maxpackets` to be set up to 125.
|
- Replace intro.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix crash when using the Harrier killstreak.
|
- Fix concurrent image loading bug.
|
||||||
- Disable code that downloads news/changelog when in zonebuilder mode.
|
- Fix issues when spawning more than one bot.
|
||||||
- Fix freeze on game shutdown.
|
- Fix no ammo bug.
|
||||||
- Disable unlockstats while ingame to prevent a crash.
|
- Fix server crash on startup.
|
||||||
|
- Fix splash screen hang.
|
||||||
### Known issues
|
|
||||||
|
### Known issues
|
||||||
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
|
||||||
|
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
||||||
## [0.2.0] - 2016-10-09
|
|
||||||
|
## [0.2.1] - 2016-12-14
|
||||||
This is the first public Alpha version.
|
|
||||||
|
This is the second public Alpha version.
|
||||||
### Added
|
|
||||||
|
### Added
|
||||||
- Support for CoD:Online maps.
|
|
||||||
|
- Add support for CoD:Online maps.
|
||||||
- Arctic Wet Work (mp_cargoship_sh)
|
|
||||||
- Bloc (mp_bloc)
|
- Firing Range (mp_firingrange)
|
||||||
- Bog (mp_bog_sh)
|
- Rust (mp_rust_long)
|
||||||
- Crossfire (mp_cross_fire)
|
- Shipment (mp_shipment/mp_shipment_long)
|
||||||
- Killhouse (mp_killhouse)
|
|
||||||
- Nuketown (mp_nuked)
|
- Add `sv_motd` Dvar for server owners to set custom motd (will be visible in the loadscreen).
|
||||||
- Wet Work (mp_cargoship)
|
- Add Zonebuilder support for sounds and fx.
|
||||||
|
- Add command setviewpos.
|
||||||
### Fixed
|
- Add high-definition loadscreens.
|
||||||
|
|
||||||
- Fix techniques in Zonebuilder.
|
### Changed
|
||||||
- Fix possible memory leak.
|
|
||||||
- Fix timeout bug when connecting to server via iw4x link.
|
- Rename Arctic Wet Work map to it's official name (Freighter).
|
||||||
- Partially fix deadlock in decentralized networking code.
|
- Complete redesign of the main menus.
|
||||||
|
- Allow `cl_maxpackets` to be set up to 125.
|
||||||
### Known issues
|
|
||||||
|
### Fixed
|
||||||
- Running IW4x on Linux currently requires gnutls to be installed additional to Wine as it needs to access the Tor service via HTTPS.
|
|
||||||
|
- Fix crash when using the Harrier killstreak.
|
||||||
## [0.1.1] - 2016-09-19
|
- Disable code that downloads news/changelog when in zonebuilder mode.
|
||||||
|
- Fix freeze on game shutdown.
|
||||||
This version is an internal Pre-Alpha version.
|
- Disable unlockstats while ingame to prevent a crash.
|
||||||
|
|
||||||
### Added
|
### Known issues
|
||||||
|
|
||||||
- Add IW5 material embedding system.
|
- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS.
|
||||||
|
|
||||||
### Changed
|
## [0.2.0] - 2016-10-09
|
||||||
|
|
||||||
- Enhance mod download with detailed progress display.
|
This is the first public Alpha version.
|
||||||
|
|
||||||
### Fixed
|
### Added
|
||||||
|
|
||||||
- Fix and optimize network logging commands.
|
- Support for CoD:Online maps.
|
||||||
- Fix console not displaying command inputs properly.
|
|
||||||
- Fix crash when running multiple instances of the IW4x client from the same directory.
|
- Arctic Wet Work (mp_cargoship_sh)
|
||||||
- Fix crash when the `securityLevel` command is used on a game server.
|
- Bloc (mp_bloc)
|
||||||
- Fix possible data corruption in code for decentralized networking.
|
- Bog (mp_bog_sh)
|
||||||
- Fix possible deadlock during client shutdown.
|
- Crossfire (mp_cross_fire)
|
||||||
|
- Killhouse (mp_killhouse)
|
||||||
## [0.1.0] - 2016-09-03
|
- Nuketown (mp_nuked)
|
||||||
|
- Wet Work (mp_cargoship)
|
||||||
This version is an internal Pre-Alpha version.
|
|
||||||
|
### Fixed
|
||||||
### Added
|
|
||||||
|
- Fix techniques in Zonebuilder.
|
||||||
- Add `banclient` command which will permanently ban a client from a server. The ban will persist across restarts.
|
- Fix possible memory leak.
|
||||||
- Add capabilities to save played games and replay them ("Theater").
|
- Fix timeout bug when connecting to server via iw4x link.
|
||||||
- Add code for generating and sending minidumps for debugging purposes. This feature is meant to be used only during the Open Beta and will be removed once the code goes to stable release.
|
- Partially fix deadlock in decentralized networking code.
|
||||||
- Add commands that allow forwarding console and games log via UDP to other computers ("network logging").
|
|
||||||
- Add D3D9Ex.
|
### Known issues
|
||||||
- Add filters for server list.
|
|
||||||
- Add handling for `iw4x://` URLs ("connect protocol"). For example, if IW4x is properly registered in Windows as URL handler for `iw4x://` URLs you can type `iw4x://ip:port`. If possible, this will connect to the server in an already running IW4x client.
|
- Running IW4x on Linux currently requires gnutls to be installed additional to Wine as it needs to access the Tor service via HTTPS.
|
||||||
- Add lean support through new key bindings.
|
|
||||||
- Add native cursor as replacement for the sometimes laggy in-game cursor. This change can be reverted in the settings menu.
|
## [0.1.1] - 2016-09-19
|
||||||
- Add news ticker.
|
|
||||||
- Add remote console ("RCon").
|
This version is an internal Pre-Alpha version.
|
||||||
- Add support for BigBrotherBot.
|
|
||||||
- Add support for hosting game mods in order to allow players to just join modded servers out of the box ("mod download").
|
### Added
|
||||||
- Add Warfare2 text coloring.
|
|
||||||
- Add zone builder. For more information see the respective documentation.
|
- Add IW5 material embedding system.
|
||||||
- Implement a completely decentralized peering network.
|
|
||||||
- Implement playlists which can be used for flexible map and gametype rotation.
|
### Changed
|
||||||
- Introduce security levels. This ensures that you need to "pay" with CPU power to verify your identity once before being able to join a server which reduces the interval at which people who get banned can circumvent server bans through using new identities. The default security level is 23.
|
|
||||||
- Move IW4x resource files into their own folder to prevent clogging up the main game directories.
|
- Enhance mod download with detailed progress display.
|
||||||
- Reintroduce parties, now also available for dedicated servers ("lobby servers").
|
|
||||||
|
### Fixed
|
||||||
### Changed
|
|
||||||
|
- Fix and optimize network logging commands.
|
||||||
- Move logs to `userraw` folder.
|
- Fix console not displaying command inputs properly.
|
||||||
- Replace main menu background music.
|
- Fix crash when running multiple instances of the IW4x client from the same directory.
|
||||||
|
- Fix crash when the `securityLevel` command is used on a game server.
|
||||||
|
- Fix possible data corruption in code for decentralized networking.
|
||||||
|
- Fix possible deadlock during client shutdown.
|
||||||
|
|
||||||
|
## [0.1.0] - 2016-09-03
|
||||||
|
|
||||||
|
This version is an internal Pre-Alpha version.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add `banclient` command which will permanently ban a client from a server. The ban will persist across restarts.
|
||||||
|
- Add capabilities to save played games and replay them ("Theater").
|
||||||
|
- Add code for generating and sending minidumps for debugging purposes. This feature is meant to be used only during the Open Beta and will be removed once the code goes to stable release.
|
||||||
|
- Add commands that allow forwarding console and games log via UDP to other computers ("network logging").
|
||||||
|
- Add D3D9Ex.
|
||||||
|
- Add filters for server list.
|
||||||
|
- Add handling for `iw4x://` URLs ("connect protocol"). For example, if IW4x is properly registered in Windows as URL handler for `iw4x://` URLs you can type `iw4x://ip:port`. If possible, this will connect to the server in an already running IW4x client.
|
||||||
|
- Add lean support through new key bindings.
|
||||||
|
- Add native cursor as replacement for the sometimes laggy in-game cursor. This change can be reverted in the settings menu.
|
||||||
|
- Add news ticker.
|
||||||
|
- Add remote console ("RCon").
|
||||||
|
- Add support for BigBrotherBot.
|
||||||
|
- Add support for hosting game mods in order to allow players to just join modded servers out of the box ("mod download").
|
||||||
|
- Add Warfare2 text coloring.
|
||||||
|
- Add zone builder. For more information see the respective documentation.
|
||||||
|
- Implement a completely decentralized peering network.
|
||||||
|
- Implement playlists which can be used for flexible map and gametype rotation.
|
||||||
|
- Introduce security levels. This ensures that you need to "pay" with CPU power to verify your identity once before being able to join a server which reduces the interval at which people who get banned can circumvent server bans through using new identities. The default security level is 23.
|
||||||
|
- Move IW4x resource files into their own folder to prevent clogging up the main game directories.
|
||||||
|
- Reintroduce parties, now also available for dedicated servers ("lobby servers").
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Move logs to `userraw` folder.
|
||||||
|
- Replace main menu background music.
|
||||||
|
@ -12,7 +12,7 @@ namespace Components
|
|||||||
|
|
||||||
std::lock_guard<std::mutex> _(Changelog::Mutex);
|
std::lock_guard<std::mutex> _(Changelog::Mutex);
|
||||||
Changelog::Lines.clear();
|
Changelog::Lines.clear();
|
||||||
std::string data = Utils::Cache::GetFile("/iw4/changelog.txt");
|
std::string data = Utils::Cache::GetFile("/develop/CHANGELOG.md");
|
||||||
|
|
||||||
if (data.empty())
|
if (data.empty())
|
||||||
{
|
{
|
||||||
|
@ -766,8 +766,7 @@ namespace Components
|
|||||||
{
|
{
|
||||||
if (pack.index == dlc)
|
if (pack.index == dlc)
|
||||||
{
|
{
|
||||||
News::LaunchUpdater(Utils::String::VA("-dlc %i -c", pack.index));
|
ShellExecute(0, 0, L"https://xlabs.dev/support_iw4x_client.html", 0, 0, SW_SHOW);
|
||||||
//ShellExecuteA(nullptr, "open", pack.url.data(), nullptr, nullptr, SW_SHOWNORMAL);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@ namespace Components
|
|||||||
{
|
{
|
||||||
bool News::Terminate;
|
bool News::Terminate;
|
||||||
std::thread News::Thread;
|
std::thread News::Thread;
|
||||||
std::string News::UpdaterArgs;
|
|
||||||
std::string News::UpdaterHash;
|
|
||||||
std::mutex News::UpdaterMutex;
|
|
||||||
|
|
||||||
bool News::unitTest()
|
bool News::unitTest()
|
||||||
{
|
{
|
||||||
@ -33,165 +30,18 @@ namespace Components
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void News::ExitProcessStub(unsigned int exitCode)
|
|
||||||
{
|
|
||||||
std::this_thread::sleep_for(10ms);
|
|
||||||
|
|
||||||
STARTUPINFOA sInfo;
|
|
||||||
PROCESS_INFORMATION pInfo;
|
|
||||||
|
|
||||||
ZeroMemory(&sInfo, sizeof(sInfo));
|
|
||||||
ZeroMemory(&pInfo, sizeof(pInfo));
|
|
||||||
sInfo.cb = sizeof(sInfo);
|
|
||||||
|
|
||||||
CreateProcessA("updater.exe", const_cast<char*>(Utils::String::VA("updater.exe %s", News::UpdaterArgs.data())), nullptr, nullptr, false, NULL, nullptr, nullptr, &sInfo, &pInfo);
|
|
||||||
|
|
||||||
if (pInfo.hThread && pInfo.hThread != INVALID_HANDLE_VALUE) CloseHandle(pInfo.hThread);
|
|
||||||
if (pInfo.hProcess && pInfo.hProcess != INVALID_HANDLE_VALUE) CloseHandle(pInfo.hProcess);
|
|
||||||
|
|
||||||
TerminateProcess(GetCurrentProcess(), exitCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::GetLatestUpdater()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> _(News::UpdaterMutex);
|
|
||||||
|
|
||||||
if (Utils::IO::FileExists("updater.exe"))
|
|
||||||
{
|
|
||||||
// Generate hash of local updater.exe
|
|
||||||
std::string localUpdater = Utils::IO::ReadFile("updater.exe");
|
|
||||||
localUpdater = Utils::Cryptography::SHA1::Compute(localUpdater, true);
|
|
||||||
|
|
||||||
static Utils::Time::Interval updateInterval;
|
|
||||||
if (News::UpdaterHash.empty() || updateInterval.elapsed(15min)) // Check for updater Update every 15 mins max
|
|
||||||
{
|
|
||||||
updateInterval.update();
|
|
||||||
|
|
||||||
std::string data = Utils::Cache::GetFile("/json/updater"); // {"updater.exe":{"SHA1":"*HASH*"}}
|
|
||||||
|
|
||||||
std::string error;
|
|
||||||
json11::Json listData = json11::Json::parse(data, error);
|
|
||||||
|
|
||||||
if (error.empty() || listData.is_object())
|
|
||||||
{
|
|
||||||
News::UpdaterHash = listData["updater.exe"]["SHA1"].string_value();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!News::UpdaterHash.empty() && localUpdater != News::UpdaterHash)
|
|
||||||
{
|
|
||||||
remove("updater.exe");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Utils::IO::FileExists("updater.exe"))
|
|
||||||
{
|
|
||||||
return News::DownloadUpdater();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::DownloadUpdater()
|
|
||||||
{
|
|
||||||
std::string data = Utils::Cache::GetFile("/iw4/updater.exe");
|
|
||||||
|
|
||||||
if (!data.empty())
|
|
||||||
{
|
|
||||||
Utils::IO::WriteFile("updater.exe", data);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* News::GetNewsText()
|
const char* News::GetNewsText()
|
||||||
{
|
{
|
||||||
return Localization::Get("MPUI_MOTD_TEXT");
|
return Localization::Get("MPUI_MOTD_TEXT");
|
||||||
}
|
}
|
||||||
|
|
||||||
void News::CheckForUpdate()
|
|
||||||
{
|
|
||||||
std::string _client = Utils::Cache::GetFile("/json/client");
|
|
||||||
|
|
||||||
if (!_client.empty())
|
|
||||||
{
|
|
||||||
std::string error;
|
|
||||||
json11::Json client = json11::Json::parse(_client.data(), error);
|
|
||||||
|
|
||||||
int revisionNumber;
|
|
||||||
|
|
||||||
if (client["revision"].is_number())
|
|
||||||
{
|
|
||||||
revisionNumber = client["revision"].int_value();
|
|
||||||
}
|
|
||||||
else if (client["revision"].is_string())
|
|
||||||
{
|
|
||||||
revisionNumber = atoi(client["revision"].string_value().data());
|
|
||||||
}
|
|
||||||
else return;
|
|
||||||
|
|
||||||
Dvar::Var("cl_updateversion").get<Game::dvar_t*>()->current.integer = revisionNumber;
|
|
||||||
Dvar::Var("cl_updateavailable").get<Game::dvar_t*>()->current.enabled = (revisionNumber > REVISION);
|
|
||||||
|
|
||||||
// if there is an update then show the toast, but only once
|
|
||||||
static bool showToast = true;
|
|
||||||
if (revisionNumber > REVISION && showToast)
|
|
||||||
{
|
|
||||||
showToast = false;
|
|
||||||
Scheduler::OnReady([]()
|
|
||||||
{
|
|
||||||
Toast::Show("cardicon_gears", "^4Update Available", "There is an update available for your client!", 5000);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void News::LaunchUpdater(const std::string& params)
|
|
||||||
{
|
|
||||||
if (News::Updating()) return;
|
|
||||||
|
|
||||||
News::UpdaterArgs = params;
|
|
||||||
|
|
||||||
Localization::SetTemp("MENU_RECONNECTING_TO_PARTY", "Downloading updater");
|
|
||||||
Command::Execute("openmenu popup_reconnectingtoparty", true);
|
|
||||||
|
|
||||||
// Run the updater on shutdown
|
|
||||||
Utils::Hook::Set(0x6D72A0, News::ExitProcessStub);
|
|
||||||
|
|
||||||
std::thread([]()
|
|
||||||
{
|
|
||||||
if (News::GetLatestUpdater())
|
|
||||||
{
|
|
||||||
Console::SetSkipShutdown();
|
|
||||||
Command::Execute("wait 300; quit;", false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Localization::ClearTemp();
|
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
Command::Execute("closemenu popup_reconnectingtoparty", false);
|
|
||||||
Game::ShowMessageBox("Failed to download the updater!", "Error");
|
|
||||||
}
|
|
||||||
}).detach();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::Updating()
|
|
||||||
{
|
|
||||||
return !News::UpdaterArgs.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
News::News()
|
News::News()
|
||||||
{
|
{
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
News::UpdaterHash.clear();
|
|
||||||
if (ZoneBuilder::IsEnabled() || Dedicated::IsEnabled()) return; // Maybe also dedi?
|
if (ZoneBuilder::IsEnabled() || Dedicated::IsEnabled()) return; // Maybe also dedi?
|
||||||
|
|
||||||
Dvar::Register<bool>("g_firstLaunch", true, Game::DVAR_FLAG_SAVED, "");
|
Dvar::Register<bool>("g_firstLaunch", true, Game::DVAR_FLAG_SAVED, "");
|
||||||
|
|
||||||
Dvar::Register<int>("cl_updateoldversion", REVISION, REVISION, REVISION, Game::DVAR_FLAG_WRITEPROTECTED, "Current version number.");
|
Dvar::Register<int>("cl_updateoldversion", REVISION, REVISION, REVISION, Game::DVAR_FLAG_WRITEPROTECTED, "Current version number.");
|
||||||
Dvar::Register<int>("cl_updateversion", 0, 0, -1, Game::DVAR_FLAG_WRITEPROTECTED, "New version number.");
|
|
||||||
Dvar::Register<bool>("cl_updateavailable", false, Game::DVAR_FLAG_WRITEPROTECTED, "New update is available.");
|
|
||||||
|
|
||||||
UIScript::Add("checkFirstLaunch", [](UIScript::Token)
|
UIScript::Add("checkFirstLaunch", [](UIScript::Token)
|
||||||
{
|
{
|
||||||
@ -221,8 +71,6 @@ namespace Components
|
|||||||
Localization::Set("MPUI_CHANGELOG_TEXT", "Loading...");
|
Localization::Set("MPUI_CHANGELOG_TEXT", "Loading...");
|
||||||
Localization::Set("MPUI_MOTD_TEXT", NEWS_MOTD_DEFAULT);
|
Localization::Set("MPUI_MOTD_TEXT", NEWS_MOTD_DEFAULT);
|
||||||
|
|
||||||
//News::GetLatestUpdater();
|
|
||||||
|
|
||||||
// make newsfeed (ticker) menu items not cut off based on safe area
|
// make newsfeed (ticker) menu items not cut off based on safe area
|
||||||
Utils::Hook::Nop(0x63892D, 5);
|
Utils::Hook::Nop(0x63892D, 5);
|
||||||
|
|
||||||
@ -230,17 +78,6 @@ namespace Components
|
|||||||
Utils::Hook::Nop(0x6388BB, 2); // skip the "if (item->text[0] == '@')" localize check
|
Utils::Hook::Nop(0x6388BB, 2); // skip the "if (item->text[0] == '@')" localize check
|
||||||
Utils::Hook(0x6388C1, News::GetNewsText, HOOK_CALL).install()->quick();
|
Utils::Hook(0x6388C1, News::GetNewsText, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
Command::Add("checkforupdate", [](Command::Params*)
|
|
||||||
{
|
|
||||||
News::CheckForUpdate();
|
|
||||||
});
|
|
||||||
|
|
||||||
Command::Add("getautoupdate", [](Command::Params*)
|
|
||||||
{
|
|
||||||
if (!Dvar::Var("cl_updateavailable").get<Game::dvar_t*>()->current.enabled) return;
|
|
||||||
News::LaunchUpdater("-update -c");
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!Utils::IsWineEnvironment() && !Loader::IsPerformingUnitTests())
|
if (!Utils::IsWineEnvironment() && !Loader::IsPerformingUnitTests())
|
||||||
{
|
{
|
||||||
News::Terminate = false;
|
News::Terminate = false;
|
||||||
@ -257,12 +94,8 @@ namespace Components
|
|||||||
|
|
||||||
if (!Loader::IsPerformingUnitTests() && !News::Terminate)
|
if (!Loader::IsPerformingUnitTests() && !News::Terminate)
|
||||||
{
|
{
|
||||||
News::GetLatestUpdater();
|
|
||||||
|
|
||||||
while (!News::Terminate)
|
while (!News::Terminate)
|
||||||
{
|
{
|
||||||
News::CheckForUpdate();
|
|
||||||
|
|
||||||
// Sleep for 3 minutes
|
// Sleep for 3 minutes
|
||||||
for (int i = 0; i < 180 && !News::Terminate; ++i)
|
for (int i = 0; i < 180 && !News::Terminate; ++i)
|
||||||
{
|
{
|
||||||
@ -274,12 +107,6 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
News::~News()
|
|
||||||
{
|
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
News::UpdaterHash.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void News::preDestroy()
|
void News::preDestroy()
|
||||||
{
|
{
|
||||||
News::Terminate = true;
|
News::Terminate = true;
|
||||||
|
@ -6,27 +6,16 @@ namespace Components
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
News();
|
News();
|
||||||
~News();
|
|
||||||
|
|
||||||
void preDestroy() override;
|
void preDestroy() override;
|
||||||
bool unitTest() override;
|
bool unitTest() override;
|
||||||
|
|
||||||
static void LaunchUpdater(const std::string& params);
|
|
||||||
static bool Updating();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::string UpdaterArgs;
|
|
||||||
static std::string UpdaterHash;
|
|
||||||
static std::thread Thread;
|
static std::thread Thread;
|
||||||
static std::mutex UpdaterMutex;
|
|
||||||
|
|
||||||
static bool Terminate;
|
static bool Terminate;
|
||||||
static bool GetLatestUpdater();
|
|
||||||
static bool DownloadUpdater();
|
static bool DownloadUpdater();
|
||||||
|
|
||||||
static void CheckForUpdate();
|
|
||||||
static void ExitProcessStub(unsigned int exitCode);
|
|
||||||
|
|
||||||
static const char* GetNewsText();
|
static const char* GetNewsText();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -4,27 +4,15 @@ namespace Utils
|
|||||||
{
|
{
|
||||||
const char* Cache::Urls[] =
|
const char* Cache::Urls[] =
|
||||||
{
|
{
|
||||||
"https://iw4x.org",
|
"https://xlabs.dev",
|
||||||
|
"https://raw.githubusercontent.com/XLabsProject/iw4x-client"
|
||||||
|
|
||||||
"https://iw4xcachep26muba.onion.to",
|
//Links to old onion site - deprecated
|
||||||
"https://iw4xcachep26muba.tor2web.xyz",
|
//"https://iw4xcachep26muba.tor2web.xyz",
|
||||||
"https://iw4xcachep26muba.onion.ws",
|
//"https://iw4xcachep26muba.onion.ws",
|
||||||
"https://iw4xcachep26muba.onion.sh",
|
//"https://iw4xcachep26muba.onion.sh",
|
||||||
"https://iw4xcachep26muba.onion.pet",
|
//"https://iw4xcachep26muba.onion.pet",
|
||||||
|
|
||||||
// Links below are dead
|
|
||||||
// Still, let's keep them in case they come back
|
|
||||||
"https://iw4xcachep26muba.onion.rip",
|
|
||||||
"https://iw4xcachep26muba.onion.nu",
|
|
||||||
"https://iw4xcachep26muba.onion.guide",
|
|
||||||
"https://iw4xcachep26muba.onion.casa",
|
|
||||||
"https://iw4xcachep26muba.hiddenservice.net",
|
|
||||||
"https://iw4xcachep26muba.onion.cab",
|
|
||||||
"https://iw4xcachep26muba.onion.link",
|
|
||||||
|
|
||||||
// Not registered yet
|
|
||||||
//"https://iw4xcachejnetuln.onion.to",
|
|
||||||
//"https://iw4xcachedjodc4y.onion.to",
|
|
||||||
};
|
};
|
||||||
std::string Cache::ValidUrl;
|
std::string Cache::ValidUrl;
|
||||||
std::mutex Cache::CacheMutex;
|
std::mutex Cache::CacheMutex;
|
||||||
|
Loading…
Reference in New Issue
Block a user