Another wave of performance improvements in this build. Two important bug-fixes as well: Lobby chat will (hopefully) no longer break. It's something to do with block lists not working properly and we hope this build will work around that even if we haven't entirely fixed the underlying problem yet. Fixed a problem where player "level" was being set lower when replaying low-level adventures. Player level affects the price of items in the shop so this should stop things getting more expensive after replaying low-level adventures. There's a new feature in multiplayer chat - the ability to keep seeing lobby chat while in battle. In addition, visiting multiplayer locations (like the shops) should no longer clear your lobby chat window. Lots of "internal stuff" too like reducing our logging volume and better profiling tools so we can continue to tweak performance. Shops New player levels are properly sent to user when incremented. Should fix shop prices. Multiplayer Extra paranoid try/catch in chat handling. Should fix chat breaking in lobby. Better handling of bad entries in the buddy list, so we don't totally block chat if we do fail somewhere when iterating the lobby user list. Keep lobby chat active when the user is in any multiplayer room. Allow the user to be in multiple chat rooms at once. Fix bug where chat sometimes gets lost when people are coming and going while the message is being processed. Don't play drum sound for lobby chat while in battle. Fix scrolling the battle list in MP lobby while the list is changing Leaderboard Remove AI records from daily/weekly leaderboards (might take a while to reset). Compatibility Workaround for broken IE9 behavior. Performance Move a few request types to sub-threads. A few because of volume and a few because of duration. Make it easy to have other handlers send their processing to another task queue Update Log util to use a StringBuilder to prevent a bunch of temporary allocations during logging Test SQL statement is "SELECT 1" not "COUNT(*) FROM player". Update a few database calls to use re-use prepared statements. Catch another method of sending outbound messages for profiling. Logging Pruned down many item transfer statements to debug level. Info level only logs transfers to/from collection. Chest item logging is much shorter (one entry per chest, not one per item). Adventure chest DB insert is one statement, not one per item. Added debug logging of chest clearing on adventure state change. Improve some error logging in pizza purchase completion from PayPal Adventures Fixed a typo in module text re: de-levelling. Profiling Add outbound message profiling Add profiling for db calls. Make a common profiling interface to make it easier to add this to other systems Changes to use a different method of sending messages for profiling Custom Games Removed Melvolous the Lich from custom game.