More efficient filtering

* $players is now an ID => name mapping
* Offline data is updated after every non-"offline" request
* Use serialize() for offline data