Add ability to auto-launch and obtain instance of
a `Service` with a single command.
Add `Service`-specific events `Launch()` / `ShutDown()`
Add ability to auto-register required listeners on launch.
Events might rely on a particular `Service` to generate them,
this patch allows them to auto-launch/shutdown a service, depending on
whether anybody is listening to it's events.
Make events functions `OnEnabled()` and `OnEnabled()`
protected rather than public.
Move initialization and clean up logic into
`OnCreated()` and `OnDestroyed()` event functions.
Change base class for JSON objects from `Object` to `AcediaObject`.
Rename some classes/functions/structures/variables to
be more compact and/or better convey their meaning.
Add appropriate API that contains constructors for JSON objects.
We want all actors and objects defined in Acedia to share
a global namespace that provides an access to important variables
(such as `Acedia` reference) and functions.
We add a `Global` singleton and `AcediaActor` / `AcediaObject`
base classes with a quick accessor to it's instance (`_` / `_()`).
Add class that can automatically perform defined tests on user request.
Developers that wish to implemet unit tests for some functionality
must extend that class (`TestCase`) and add it to the manifest,
so that Acedia can read, register and later use it to perform tests.
Previous description understated the effects of the `allowNegativeDosh`
flag. Effects are much more common and significat that previously
thought because of game behavior on filling ammo for one or all weapons.
Changes behavior of `FixInventoryAbuse` on weight limit violation.
Instead of destroying all weapons in the inventory of abuser,
it drops them on the ground.
This change is mainly caused by game behavior that allows
regular players to accidental break weight limits.
1. It's much easier to find information relevant to a particular
feature (fix), if it's description follows after it's section
definition, i.e. [Acedia.FixAmmoSelling].
2. Descriptions rewritten for more clarity to the end user.
`CheckAmmoPickup` effectively only contained another function call
and itself was only called once. As it also didn't add to readbility,
it needed to be removed.
Previous comments explaining the idea behind how `FixAmmoSelling`
works were incorrectly stating that non-default pickup class is only
used to calculate diuscounts, when it was also used to spawn
weapon pickups.
Non-default value of pickup class was used to
spawn pickup when player drops a weapon.
But since we've replaced that class and it doesn't
(or might not) exist on the client - dropped weapons
appeared as invisible.
Catch the moment our custom pickup is spawned and
replace it back with default one.