Now `AcediaGameRules` are only added when Acedia actually needs their
events.
AcediaCore now also outputs console message about adding them and
registers a side effect.
Siren's adjustemet code made cahgnes that were soon overwritten without
accomplishing anything. And husk code has some player replication info
obtaining code that is leftover from trying to restore perk resistances
that... didn't actually break from damage type substitution.
Trading time pausing has a set of problems: not properly resetting pause
once trading time somehow ended, pausing time during the wave would
result in reducing next trading time to 1 second, initial time
(countdown before wave 1) was not considered trading time.
All of these issues are resolved in this commit.
`APlayer` and `ATrader` represented player and trader (`ShopVolume`)
with a single object instance. Such design, if used for all actors,
could have led to mutitute of problems rooted in need to find that
single object for any given native actor: we'd need to store
object-actor pairs separately and look through pairs lists, which is
hardly a sane design.
Now Acedia switches to a different design, where a single in-game entity
(i.e. actor) can have several interfaces referring to it. All equaly
valid. Refactoring `APlayer` and `ATrader` into `EPlayer` and `ETrader`
is a first step in that direction.
I shamefully ended up doing another mega-commit, because a lot of things
needed to be redone at once and it was easier that way on me. No one
really consistently tracks what I'm doing with these commits anyway.
This adds a whole bunch of code to deal with proper clean up for Acedia,
so it doesn't crash on map change and also replaces old event/listener
system with new signals/slots one.