Mod version validation

- Game.CurrentMods property to query the current mods when no orderManager accessible
- Server sends mod versions to master server on ping
- Client sends mod versions on handshake response
- Validate match on server side of handshake, not client side
This commit is contained in:
alzeih
2011-01-08 00:25:30 +13:00
committed by Chris Forbes
parent 8264c6c8dc
commit 5c343caeaf
5 changed files with 57 additions and 50 deletions

View File

@@ -149,8 +149,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
return;
}
// only "waiting for players"
var gamesWaiting = games.Where(g => g.State == 1);
var gamesWaiting = games.Where(g => CanJoin(g));
if (gamesWaiting.Count() == 0)
{
@@ -179,6 +178,22 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
i++;
}
}
bool CanJoin(GameServer game)
{
//"waiting for players"
if (game.State != 1)
return false;
// Mods won't match if there are a different number
if (Game.CurrentMods.Count != game.Mods.Count())
return false;
return game.Mods.All( m => m.Contains('@')) && game.Mods.Select( m => Pair.New(m.Split('@')[0], m.Split('@')[1]))
.All(kv => Game.CurrentMods.ContainsKey(kv.First) &&
(kv.Second == "{DEV_VERSION}" || Game.CurrentMods[kv.First].Version == "{DEV_VERSION}" || kv.Second == Game.CurrentMods[kv.First].Version));
}
}
public class DirectConnectDelegate : IWidgetDelegate