This happens on DirtSand shards when two avatars are loading the same age
at once. LoadCloneMsgs are dispatched to the clients before they have
loaded the original keys. The server has no way of knowing that however,
so this is the correct place to fix the problem.
This commit is really quite awesome in that you can now propagate any
plLinkToAgeMsg that will mute the link out, link in sounds, or both. Some
garbage fields were repurposed for this functionality. The messages were
passed correctly on Cyan's MOULa server.
Conflicts:
Sources/Plasma/PubUtilLib/plMessage/plLinkToAgeMsg.h
Sources/Plasma/PubUtilLib/plNetClient/plLinkEffectsMgr.cpp
Sources/Plasma/PubUtilLib/plNetClient/plNetClientMgr.h
Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp
Win32's GetCurrentTime and plUnifiedTime::GetCurrentTime collided. Rather
than hacking around the solution by undefining GetCurrentTime, we rename
plUnifiedTime::GetCurrentTime to plUnifiedTime::GetCurrent. This fix is
less fiddly than an undef hack.
Manual state management in python was kind of fiddly, so let's track all
avatar clones in the NetApp and unload them as needed. This also seems to
fix a potential bug in plNPCSpawnMod (is that even used?).
Prevents cheating with time based puzzles (pellets) and ensures the KI time
stays somewhat correct. The server time will be reset on the plNetMessage
received after the user changes their system clock. That might take a bit,
but it's better than nothing.
Since we have a pfSecurePreloader that doesn't redownload every single
launch, I don't feel bad about presenting an error message to the user and
killing the client. This is really better than letting them languish at a
black screen, groping for the relto book.
Rearrange some things so such that low-level CoreLib headers aren't quite
so crazy. For higher level stuff, you still need to include the
appropriate header.