Fixed/hidden the remaining gcc warnings.
Replaced the UNUSED() with code that actually checks the return values.
AI server: monster search types are no longer using magic numbers (it makes sense now!).
AI server: CUser::SetDamage() now behaves the same as CNpc::SetDamage() in that it returns false on death, true otherwise. Revised use logic to match.
AI server: miscellaneous cleanup
BUGFIX: Gate/levers requests are no longer ignored due to an 'invalid ID'.
Fixed another faulty check causing lever/gate requests to be ignored. The gate flag is now a boolean for clarity.
AI server: replaced the CNpc::m_pZone var in favour of the more consistent Unit::m_pMap var.
AI server: removed the remaining skill system code for NPCs.
AI server: more miscellaneous cleanup
AI server: removed CUser::GetHitRate() as it exists in the Unit class.
When an invalid SMD file is detected, it now produces an error hopefully sufficient for understanding and resolving the problem.
Fixed a few sync issues with epoll & corrected the crc32() return type (it was not always a 32-bit type).
Shared/networking: fixed a bug that caused the write lock to not be properly initialised (it shouldn't even be used on anything other than IOCP, but that's another story).
Game server: removed a useless check in CDBAgent::LoadUserData().
Added a few additional object file extensions (and .dirstamp) to .gitignore
Game server: ensure epoll/kqueue client workers are still handled.
Fixed a couple of socket state issues (and a deadlock) preventing Ebenezer (on Linux) from talking to the AI server.
BUGFIX: Users now receive damage notifications when attacking monsters/NPCs.
AI server: fixed a bug causing useful NPC/monster data to be reset (preventing them from being attacked and such)