diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index b66a2bd..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,71 +0,0 @@ -# Change log - -Acedia's versioning is as follows: `X.Y.Z`, where - -* `X` is a major version, will be increased to 1 when most of planned features are implements. Further increases aren't planned, but are possible should Acedia change in a significant enough way. -* `Y` is a minor version, increased with every public release that adds some new functionality. -* `Z` is a bug fix versioning, increased after fixing bugs in a corresponding public release. - -For development release following notation will be used: `X.Y.devZ`. The only change is that `Z` is now also increases as functionality for the next version is getting implemented. - -## Version 0.1 `Bug crusher` - -*Release date: 19.02.2020* -This release is focused on fixing most critical and well-known exploits, related to crashes, infinite ammo generation, clear breaking of game mechanics such as infinite inventory. - -All fixes are able to function without breaking whitelisted status of the server. - -A couple of feature planned for this version were moved to a later date because: - -1. They weren't considered critical issues, which is the main focus of this version. -2. Some other features have proved to be more trouble than expected, already delaying the release. - -### [NEW] Fix for pistols cost issues - -A feature that fixes several issues, related to the selling price of both single and dual pistols, all originating from the existence of dual weapons. Most notable issue is the ability to "print" money by buying and selling pistols in a certain way. - -### [NEW] Fix for printing dosh with ammo selling - -This feature addresses an oversight in vanilla code, that allows clients to sell ammunition. Moreover, when being sold, ammunition cost is always multiplied by 0.75, without taking into an account possible discount a player might have. This allows cheaters to "print money" by buying and selling ammo over and over again for some weapons, notably pipe bombs (74% discount for lvl6 demolition) and crossbow (42% discount for lvl6 sharpshooter). - -### [NEW] Fix for inventory abuse - -This feature addressed two inventory issues: - -1. Players carrying amount of weapons that shouldn't be allowed by the weight limit. -2. Players carrying two variants of the same gun. For example carrying both M32 and camo M32. Single and dual version of the same weapon are also considered the same type of gun, so you shouldn't be able to carry both MK23 and dual MK23 or dual handcannons and golden handcannon. But cheaters do. But not with this fix. - -### [NEW] Fix for infinite grenades exploit - -This feature fixes a vulnerability in a code of `Frag` that can allow player to throw grenades even when he no longer has any. There's also no cooldowns on the throw, which can allow a player to even crash the server. - -### [NEW] Fix for dosh spam - -This feature addressed two dosh-related issues: - -1. Crashing servers by spamming `CashPickup` actors with `TossCash`; -2. Breaking collision detection logic by stacking large amount of `CashPickup` actors in one place, which allows one to either reach unintended locations or even instantly kill zeds. - -Unlike ServerPerk's method we dynamically limit the speed at which players can throw the dosh, making it, in most circumstances, unnoticeable for players that this fix even runs at all. - -### [NEW] Fix for spectator-related crashes - -This feature attempts to prevent server crashes caused by someone quickly switching between being spectator and an active player. - -### [NEW] Fix for friendly fire hack - -This feature fixes a bug that can allow players to bypass server's friendly fire limitations and teamkill. Usual fixes apply friendly fire scale to suspicious damage themselves, which also disables some of the environmental damage. In order to avoid that, this fix allows server owner to define precisely to what damage types to apply the friendly fire scaling. It should be all damage types related to projectiles. - -### [NEW] Fix for zed time lags - -When zed time activates, game speed is immediately set to `zedTimeSlomoScale` (0.2 by default), defined, like all other variables, in `KFGameType`. Zed time lasts `zedTimeDuration` seconds (3.0 by default), but during last `zedTimeDuration * 0.166` seconds (by default 0.498) it starts to speed back up, causing game speed to update every tick. - -This makes animations look more smooth when exiting zed-time; however, updating speed every tick for that purpose seems like an overkill and, combined with things like increased tick rate, certain maps and raised zed limit, it can lead to noticeable lags at the end of zed time. - -To fix this issue we disable `Tick` event in `KFGameType` and then repeat that functionality in our own `Tick` event, but only perform game speed updates occasionally, to make sure that overall amount of updates won't go over a limit, that can be configured via `maxGameSpeedUpdatesAmount`. - -Our tests (looking really hard on clots' animations) seem to suggest that there shouldn't be much visible difference if we limit game speed updates to about 2 or 3. - -### [NEW] Connection service - -Connection service tracks players connecting and disconnecting from the server. Service is lightweight and doesn't have to go through the full controller list to check for new players, relying instead on detecting when `KFSteamStatsAndAchievements` is spawned. diff --git a/README.md b/README.md index f2ea0b6..218f0cd 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,78 @@ -# Acedia +# AcediaLauncher 0.1 -`Acedia` is a mod for the game `Killing Floor` that aims to provide powerful means to configure and customize every aspect of gameplay, while affecting game as little as possible for the chosen changes. Ideally, when server admin disables every single feature of `Acedia` it would do nothing at all. - -The project is in it's early stage and right now is focused on fixing a baggage of bugs and exploits that base `Killing Floor` game has. Currently it functions as a server-side only mutator that doesn't break server's whitelist status. +This is a launcher for packages that rely on AcediaCore and use its `Feature` +class instead of the `Mutator` to enable provided functionality. ## Installation -1. Drop `Acedia` files into `System\` directory of your server. -2. Add `Acedia.StartUp` to the list of server actors in your `KillingFloor.ini`. -**Do not** manually add `Acedia.Acedia` mutator. -3. [Optionally] Pick which features to use by changing `autoEnabled` setting for each of them. +0. Requires + [Voting Handler Fix v2](https://forums.tripwireinteractive.com/index.php?threads/mod-voting-handler-fix.43202/) + installed. +1. Drop `AcediaLauncher` files into `System\` directory of your server; +2. Add `AcediaLauncher.StartUp` to the list of server actors in your + `KillingFloor.ini`. + **Do not** manually add `AcediaLauncher.Packages` mutator; +3. [Legacy] If you were using Acedia 0.1 - remove `Acedia.StartUp`. + +## Adding packages + +To add any Acedia's package, edit `AcediaLauncher.ini` file to add it into +available packages list, e.g. + +```ini +[AcediaLauncher.Packages] +useGameModes=false +package="AcediaFixes" +``` + +Then use that package's config files to choose what `Feature`s to enable +by setting their `autoEnable` setting to `true`. + +## [Optional] Game modes + +By default AcediaLauncher only auto-starts selected Acedia `Feature`s. +But it also provides a more advanced functionality for configuring voting +options for *Voting Handler Fix v2* mutator. + +There is no detailed documentation for this yet, however Acedia's game modes +can be configured in a rather self-descriptive way in `AcediaGameModes.ini`: + +```ini +[hard GameMode] +title=1. {$green Hard difficulty} +acronym={$green hard} +difficulty=hard +length=medium + +[lawless GameMode] +title=2. {$hotpink No fixes! Anarchy!} +acronym={$red:$blue anarchy} +difficulty=hoe +length=short +includeMutator="AdminPlus_v4.MutAdminPlus" +excludeFeature="AcediaFixes.FixZedTimeLags_Feature" +excludeFeature="AcediaFixes.FixDoshSpam_Feature" +excludeFeature="AcediaFixes.FixDoshSpam_Feature" +excludeFeature="AcediaFixes.FixFFHack_Feature" +excludeFeature="AcediaFixes.FixInfiniteNades_Feature" +excludeFeature="AcediaFixes.FixAmmoSelling_Feature" +excludeFeature="AcediaFixes.FixSpectatorCrash_Feature" +excludeFeature="AcediaFixes.FixDualiesCost_Feature" +excludeFeature="AcediaFixes.FixInventoryAbuse_Feature" +excludeFeature="AcediaFixes.FixProjectileFF_Feature" +excludeFeature="AcediaFixes.FixPipes_Feature" +excludeFeature="AcediaFixes.FixLogSpam_Feature" +excludeFeature="AcediaFixes.Futility_Feature" +excludeFeature="AcediaFixes.FixZedTimeLags_Feature" + +[hell GameMode] +title=3. {$crimson Hell On Earth} +acronym={$crimson hoe} +difficulty=hoe +length=long +``` + +To enable game modes, set `useGameModes=true` in `AcediaLauncher.ini`. +AcediaLauncher relies on *Voting Handler Fix v2* to actually add these options +and will automatically alter its config, so you *don't need to manually change* +`KFMapVote.ini`. diff --git a/config/Acedia.ini b/config/Acedia.ini deleted file mode 100644 index 51be774..0000000 --- a/config/Acedia.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Acedia.Packages] -useGameModes=false \ No newline at end of file diff --git a/config/AcediaGameModes.ini b/config/AcediaGameModes.ini index 484b88a..951715e 100644 --- a/config/AcediaGameModes.ini +++ b/config/AcediaGameModes.ini @@ -1,6 +1,6 @@ [hard GameMode] title={$green Hard difficulty} -difficulty=normal +difficulty=hard [hell GameMode] title={$crimson Hell On Earth} diff --git a/config/AcediaLauncher.ini b/config/AcediaLauncher.ini new file mode 100644 index 0000000..f347ad6 --- /dev/null +++ b/config/AcediaLauncher.ini @@ -0,0 +1,2 @@ +[AcediaLauncher.Packages] +useGameModes=false \ No newline at end of file diff --git a/sources/Packages.uc b/sources/Packages.uc index 25cfc42..7c47ccf 100644 --- a/sources/Packages.uc +++ b/sources/Packages.uc @@ -20,14 +20,14 @@ * along with Acedia. If not, see . */ class Packages extends Mutator - config(Acedia); + config(AcediaLauncher); // Acedia's reference to a `Global` object. var private Global _; var private ServerGlobal _server; var private ClientGlobal _client; -// Load Acedia on the client as well? +// Load Acedia on the client as well? DON NOT TOUCH THIS var private config bool clientside; // Array of predefined services that must be started along with Acedia mutator. var private config array package; @@ -74,7 +74,7 @@ private function InitializeServer() local array availableFeatures; if (clientside) { - AddToPackageMap("Acedia"); + AddToPackageMap("AcediaLauncher"); } CheckForGarbage(); // Launch and setup core Acedia