https://github.com/OpenRA/OpenRA/issues/2564

fixed a issue with pinging Master-server

Sometimes initial TickCount is less than zero, so (Environment.TickCount - lastPing) can be less than "MasterPingInterval * 1000". That's why PingMasterServer() is not calling for a long time until somebody connected.
Rework color picker palette modification.

The old method had the lobby code dig around inside
the palette modification machinery, which was a giant
hack preventing necessary streamlining.
Remove hardcoded list of palette mod exclusions.
Remove unnecessary indirection from palette creation.
Add bitmap export to palette (for debugging).
Apply consistent formatting to Renderer (no code changes).
Remove duplication between world/chrome shaders.
Wrap palette references with a PaletteRef object.
Add a cache of PaletteReferences to WorldRenderer.

I don't expect any perf improvements by using this
cache, as you're simply moving the row lookup from
render-time to fetch-time. However, this is a
cleaner abstraction, and allows us to fail early
if the palette doesn't exist.
Move effects to WorldRenderer palette lookup.
Pass a PaletteReference to RenderPreview.
Pass WorldRenderer to IRenderModifiers and replace more palette lookups.
Extract auto-selection-size into its own interface.
Let parachute cargo render themselves.

This allows for tanks and other multi-sprite
actors to render correctly while dropping.
Pass WorldRenderer to Render().
Remove RepairIndicator dependence on target RenderSimple.

This also fixes the case where the building palette doesn't
match the indicator, and saves 2 trait lookups per tick.
Ditto for RallyPoint.
Ditto for GpsDot.
Ditto for Corpse.
Make RenderSimple.Palette protected.