static void SetupGamespy(IProfileExpression mapConfig) {
mapConfig.CreateMap<GamespyServerQueryResult, Server>()
.ForMember(x => x.IsDedicated,
opt => opt.ResolveUsing(src => GetValueWithFallback(src, "dedicated", "ds").TryInt() == 1))
.ForMember(x => x.NumPlayers,
opt => opt.ResolveUsing(src => src.GetSettingOrDefault("numplayers").TryInt()))
.ForMember(x => x.MaxPlayers,
opt => opt.ResolveUsing(src => src.GetSettingOrDefault("maxplayers").TryInt()))
.ForMember(x => x.Difficulty,
opt => opt.ResolveUsing(src => GetValueWithFallback(src, "difficulty", "diff").TryInt()))
.ForMember(x => x.GameState,
opt => opt.ResolveUsing(src => src.GetSettingOrDefault("gameState").TryInt()))
.ForMember(x => x.VerifySignatures,
opt => opt.ResolveUsing(src => GetValueWithFallback(src, "verifySignatures", "verSig").TryInt()))
.ForMember(x => x.SvBattleye,
opt => opt.ResolveUsing(src => GetValueWithFallback(src, "sv_battleye", "be").TryInt()))
.ForMember(x => x.ReqBuild,
opt => opt.ResolveUsing(src => src.GetSettingOrDefault("reqBuild").TryIntNullable()))
.ForMember(x => x.PasswordRequired,
opt => opt.ResolveUsing(src => src.GetSettingOrDefault("password").TryInt() > 0))
.ForMember(x => x.Mission, opt => opt.ResolveUsing(src => src.GetSettingOrDefault("mission")))
.ForMember(x => x.Island,
opt => opt.ResolveUsing(src => CapitalizeString(src.GetSettingOrDefault("mapname"))))
.ForMember(x => x.GameType, opt => opt.ResolveUsing(src => {
var str = CapitalizeString(src.GetSettingOrDefault("gametype"));
return string.IsNullOrWhiteSpace(str) ? "Unknown" : str;
}))
.ForMember(x => x.GameName, opt => opt.ResolveUsing(src => src.GetSettingOrDefault("gamename")))
.ForMember(x => x.GameVer,
opt => opt.ResolveUsing(src => GetVersion(src.GetSettingOrDefault("gamever"))))
.ForMember(x => x.Signatures,
opt => opt.ResolveUsing(src => GetValueWithFallback(src, "signatures", "sig").TrySplit(';')))
.AfterMap(GamespyAfterMap);
}