public bool Equals(UserBattleStatus other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return other.AllyNumber == AllyNumber && other.IsSpectator.Equals(IsSpectator) && other.JoinTime.Equals(JoinTime) && Equals(other.Name, Name) && Equals(other.SyncStatus, SyncStatus) && other.TeamNumber == TeamNumber; }
public override void ValidateBattleStatus(UserBattleStatus ubs) { if (Prototype.Players.Any(y => y.Name == ubs.Name)) { ubs.IsSpectator = false; ubs.AllyNumber = 0; } else { ubs.IsSpectator = true; } }
private void Setup_MyInfo() { string myName = Program.Conf.LobbyPlayerName == null ? "unnamed" : Program.Conf.LobbyPlayerName; User myUser = new User { Name = myName }; myUser.Country = "Unknown"; UserBattleStatus myBattleStatus = new UserBattleStatus(myName, myUser) { AllyNumber = 0, SyncStatus = SyncStatuses.Unknown, IsSpectator = spectateCheckBox.Checked }; myItem = new PlayerListItem { UserName = myBattleStatus.Name, AllyTeam = myBattleStatus.AllyNumber, isOfflineMode = true, isZK = false, }; myItem.offlineUserInfo = myUser; myItem.offlineUserBattleStatus = myBattleStatus; botsMissionSlot = new List<MissionSlot>(); }
public bool IsSpectator(ServerBattle battle, string userName, UserBattleStatus user) { if (user == null) { if (userName != null) battle.Users.TryGetValue(userName, out user); } bool isSpectator = true; var s = battle.spring; if (s.IsRunning) { if (s.LobbyStartContext.Players.Any(x => x.Name == userName && !x.IsSpectator)) isSpectator = false; } else { if (user?.IsSpectator == false) isSpectator = false; } return isSpectator; }
void TasClient_BattleUserStatusChanged(object sender, UserBattleStatus ubs) { RefreshBattleUser(ubs.Name); }
static void ScriptAddUser(StringBuilder script, int userNum, List<UserBattleStatus> playersExport, SpringBattleStartSetup startSetup, int teamNum, UserBattleStatus status) { var export = status.Clone(); export.TeamNumber = teamNum; playersExport.Add(status); // PLAYERS script.AppendFormat(" [PLAYER{0}]\n", userNum); script.AppendLine(" {"); script.AppendFormat(" Name={0};\n", status.Name); script.AppendFormat(" Spectator={0};\n", status.IsSpectator ? 1 : 0); if (!status.IsSpectator) script.AppendFormat(" Team={0};\n", teamNum); if (status.LobbyUser != null) { script.AppendFormat(" CountryCode={0};\n", status.LobbyUser.Country); script.AppendFormat(" LobbyID={0};\n", status.LobbyUser.AccountID); } if (status.ScriptPassword != null) script.AppendFormat(" Password={0};\n", status.ScriptPassword); if (startSetup != null) { var entry = startSetup.UserParameters.FirstOrDefault(x => x.LobbyID == status.LobbyUser.AccountID); if (entry != null) foreach (var kvp in entry.Parameters) script.AppendFormat(" {0}={1};\n", kvp.Key, kvp.Value); } script.AppendLine(" }"); }
static void ScriptAddTeam(StringBuilder script, int teamNum, int userNum, UserBattleStatus status) { // BOT TEAM script.AppendFormat(" [TEAM{0}]\n", teamNum); script.AppendLine(" {"); script.AppendFormat(" TeamLeader={0};\n", userNum); script.AppendFormat(" AllyTeam={0};\n", status.AllyNumber); //var side = "mission"; //script.AppendFormat(" Side={0};\n", mod.Sides[0]); // is this use of "mod" needed at all? script.AppendFormat(" Handicap={0};\n", 0); script.AppendLine(" }"); }
/// <summary> /// Generates script /// </summary> /// <param name="playersExport">list of players</param> /// <param name="localUser">myself</param> /// <param name="loopbackListenPort">listen port for autohost interface</param> /// <param name="zkSearchTag">hackish search tag</param> /// <param name="startSetup">structure with custom extra data</param> /// <returns></returns> public string GenerateScript(out List<UserBattleStatus> playersExport, User localUser, int loopbackListenPort, string zkSearchTag, SpringBattleStartSetup startSetup) { var previousCulture = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; playersExport = new List<UserBattleStatus>(); var isHost = localUser.Name == Founder.Name; var myUbs = Users[localUser.Name]; if (!isHost) { var sb = new StringBuilder(); sb.AppendLine("[GAME]"); sb.AppendLine("{"); sb.AppendFormat("HostIP={0};\n", Ip); sb.AppendFormat("HostPort={0};\n", HostPort); sb.AppendLine("IsHost=0;"); sb.AppendFormat("MyPlayerName={0};\n", localUser.Name); if (myUbs != null) { if (myUbs.ScriptPassword != null) sb.AppendFormat("MyPasswd={0};\n", myUbs.ScriptPassword); } else { sb.AppendFormat("MyPasswd={0};\n", localUser.Name); // used for mid-game join .. if no userbattlestatus, use own name } sb.AppendLine("}"); return sb.ToString(); } else { var script = new StringBuilder(); script.AppendLine("[GAME]"); script.AppendLine("{"); script.AppendFormat(" ZkSearchTag={0};\n", zkSearchTag); script.AppendFormat(" Mapname={0};\n", MapName); script.AppendFormat(" StartPosType=2;\n"); script.AppendFormat(" GameType={0};\n", ModName); script.AppendFormat(" ModHash=1;\n"); script.AppendFormat(" MapHash=1;\n"); script.AppendFormat(" AutohostPort={0};\n", loopbackListenPort); script.AppendLine(); script.AppendFormat(" HostIP={0};\n", Ip); script.AppendFormat(" HostPort={0};\n", HostPort); script.AppendFormat(" SourcePort={0};\n", 8300); script.AppendFormat(" IsHost=1;\n"); script.AppendLine(); //script.AppendFormat(" MyPlayerName={0};\n", localUser.Name); List<UserBattleStatus> users; List<BotBattleStatus> bots; if (startSetup != null && startSetup.BalanceTeamsResult != null && startSetup.BalanceTeamsResult.Players != null) { // if there is a balance results as a part of start setup, use values from this (override lobby state) users = Users.Values.ToList(); bots = new List<BotBattleStatus>(this.Bots.Values.Select(x => (BotBattleStatus)x.Clone())); foreach (var p in startSetup.BalanceTeamsResult.Players) { var us = users.FirstOrDefault(x => x.Name == p.Name); if (us == null) { us = new UserBattleStatus(p.Name, new User() { AccountID = p.LobbyID }, Password); // TODO this "password" use does not look right users.Add(us); } us.TeamNumber = p.TeamID; us.IsSpectator = p.IsSpectator; us.AllyNumber = p.AllyID; } foreach (var p in startSetup.BalanceTeamsResult.Bots) { var bot = bots.FirstOrDefault(x => x.Name == p.BotName); if (bot == null) { bot = new BotBattleStatus(p.BotName, p.Owner, p.BotAI); bots.Add(bot); } bot.AllyNumber = bot.AllyNumber; bot.TeamNumber = bot.TeamNumber; } foreach (var u in users.Where(x => !startSetup.BalanceTeamsResult.Players.Any(y => y.Name == x.Name))) { u.IsSpectator = true; } // spec those not known at the time of balance } else { users = this.Users.Values.ToList(); bots = this.Bots.Values.ToList(); } GeneratePlayerSection(playersExport, users, script, bots, Rectangles, ModOptions, localUser, startSetup); return script.ToString(); } } finally { Thread.CurrentThread.CurrentCulture = previousCulture; } }
public UsRank(int id, double elo, string clan, UserBattleStatus user) { Id = id; Elo = elo; User = user; Clan = clan; }
static void ScriptAddUser(StringBuilder script, int userNum, List <UserBattleStatus> playersExport, SpringBattleStartSetup startSetup, int teamNum, UserBattleStatus status) { var export = status.Clone(); export.TeamNumber = teamNum; playersExport.Add(status); // PLAYERS script.AppendFormat(" [PLAYER{0}]\n", userNum); script.AppendLine(" {"); script.AppendFormat(" Name={0};\n", status.Name); script.AppendFormat(" Spectator={0};\n", status.IsSpectator ? 1 : 0); if (!status.IsSpectator) { script.AppendFormat(" Team={0};\n", teamNum); } if (status.LobbyUser != null) { script.AppendFormat(" CountryCode={0};\n", status.LobbyUser.Country); script.AppendFormat(" LobbyID={0};\n", status.LobbyUser.AccountID); } if (status.ScriptPassword != null) { script.AppendFormat(" Password={0};\n", status.ScriptPassword); } if (startSetup != null) { var entry = startSetup.UserParameters.FirstOrDefault(x => x.LobbyID == status.LobbyUser.AccountID); if (entry != null) { foreach (var kvp in entry.Parameters) { script.AppendFormat(" {0}={1};\n", kvp.Key, kvp.Value); } } } script.AppendLine(" }"); }
/// <summary> /// Generates script /// </summary> /// <param name="playersExport">list of players</param> /// <param name="localUser">myself</param> /// <param name="loopbackListenPort">listen port for autohost interface</param> /// <param name="zkSearchTag">hackish search tag</param> /// <param name="startSetup">structure with custom extra data</param> /// <returns></returns> public string GenerateScript(out List <UserBattleStatus> playersExport, User localUser, int loopbackListenPort, string zkSearchTag, SpringBattleStartSetup startSetup) { var previousCulture = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; playersExport = new List <UserBattleStatus>(); var isHost = localUser.Name == Founder.Name; var myUbs = Users[localUser.Name]; if (!isHost) { var sb = new StringBuilder(); sb.AppendLine("[GAME]"); sb.AppendLine("{"); sb.AppendFormat("HostIP={0};\n", Ip); sb.AppendFormat("HostPort={0};\n", HostPort); sb.AppendLine("IsHost=0;"); sb.AppendFormat("MyPlayerName={0};\n", localUser.Name); if (myUbs != null) { if (myUbs.ScriptPassword != null) { sb.AppendFormat("MyPasswd={0};\n", myUbs.ScriptPassword); } } else { sb.AppendFormat("MyPasswd={0};\n", localUser.Name); // used for mid-game join .. if no userbattlestatus, use own name } sb.AppendLine("}"); return(sb.ToString()); } else { var script = new StringBuilder(); script.AppendLine("[GAME]"); script.AppendLine("{"); script.AppendFormat(" ZkSearchTag={0};\n", zkSearchTag); script.AppendFormat(" Mapname={0};\n", MapName); script.AppendFormat(" StartPosType=2;\n"); script.AppendFormat(" GameType={0};\n", ModName); script.AppendFormat(" ModHash=1;\n"); script.AppendFormat(" MapHash=1;\n"); script.AppendFormat(" AutohostPort={0};\n", loopbackListenPort); script.AppendLine(); script.AppendFormat(" HostIP={0};\n", Ip); script.AppendFormat(" HostPort={0};\n", HostPort); script.AppendFormat(" SourcePort={0};\n", 8300); script.AppendFormat(" IsHost=1;\n"); script.AppendLine(); //script.AppendFormat(" MyPlayerName={0};\n", localUser.Name); List <UserBattleStatus> users; List <BotBattleStatus> bots; if (startSetup != null && startSetup.BalanceTeamsResult != null && startSetup.BalanceTeamsResult.Players != null) { // if there is a balance results as a part of start setup, use values from this (override lobby state) users = Users.Values.ToList(); bots = new List <BotBattleStatus>(this.Bots.Values.Select(x => (BotBattleStatus)x.Clone())); foreach (var p in startSetup.BalanceTeamsResult.Players) { var us = users.FirstOrDefault(x => x.Name == p.Name); if (us == null) { us = new UserBattleStatus(p.Name, new User() { AccountID = p.LobbyID }, Password); // TODO this "password" use does not look right users.Add(us); } us.TeamNumber = p.TeamID; us.IsSpectator = p.IsSpectator; us.AllyNumber = p.AllyID; } foreach (var p in startSetup.BalanceTeamsResult.Bots) { var bot = bots.FirstOrDefault(x => x.Name == p.BotName); if (bot == null) { bot = new BotBattleStatus(p.BotName, p.Owner, p.BotAI); bots.Add(bot); } bot.AllyNumber = bot.AllyNumber; bot.TeamNumber = bot.TeamNumber; } foreach (var u in users.Where(x => !startSetup.BalanceTeamsResult.Players.Any(y => y.Name == x.Name))) { u.IsSpectator = true; } // spec those not known at the time of balance } else { users = this.Users.Values.ToList(); bots = this.Bots.Values.ToList(); } GeneratePlayerSection(playersExport, users, script, bots, Rectangles, ModOptions, localUser, startSetup); return(script.ToString()); } } finally { Thread.CurrentThread.CurrentCulture = previousCulture; } }
void ScriptAddTeam(StringBuilder script, int teamNum, List <StartPos> positions, int userNum, UserBattleStatus status) { // BOT TEAM script.AppendFormat(" [TEAM{0}]\n", teamNum); script.AppendLine(" {"); script.AppendFormat(" TeamLeader={0};\n", userNum); script.AppendFormat(" AllyTeam={0};\n", status.AllyNumber); script.AppendFormat(" RGBColor={0:F5} {1:F5} {2:F5};\n", (status.TeamColor & 255) / 255.0, ((status.TeamColor >> 8) & 255) / 255.0, ((status.TeamColor >> 16) & 255) / 255.0); var side = "mission"; if (mod.Sides.Length > status.Side) { side = mod.Sides[status.Side]; } script.AppendFormat(" Side={0};\n", side); script.AppendFormat(" Handicap={0};\n", 0); if (mod.IsMission) { script.AppendFormat(" StartPosX={0};\n", 0); script.AppendFormat(" StartPosZ={0};\n", 0); } else { if ((Details.StartPos == BattleStartPos.Random || Details.StartPos == BattleStartPos.Fixed) && positions.Count > teamNum) { var pos = positions[teamNum]; script.AppendFormat(" StartPosX={0};\n", pos.x); script.AppendFormat(" StartPosZ={0};\n", pos.z); } } script.AppendLine(" }"); }
/// <summary> /// Generates script /// </summary> /// <param name="playersExport">list of players</param> /// <param name="localUser">myself</param> /// <param name="loopbackListenPort">listen port for autohost interface</param> /// <param name="zkSearchTag">hackish search tag</param> /// <param name="startSetup">structure with custom extra data</param> /// <returns></returns> public string GenerateScript(out List <UserBattleStatus> playersExport, User localUser, int loopbackListenPort, string zkSearchTag, SpringBattleStartSetup startSetup) { var previousCulture = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; playersExport = new List <UserBattleStatus>(); var isHost = localUser.Name == Founder.Name; var myUbs = Users.Single(x => x.Name == localUser.Name); if (!isHost) { var sb = new StringBuilder(); sb.AppendLine("[GAME]"); sb.AppendLine("{"); sb.AppendFormat("HostIP={0};\n", Ip); sb.AppendFormat("HostPort={0};\n", HostPort); sb.AppendLine("IsHost=0;"); sb.AppendFormat("MyPlayerName={0};\n", localUser.Name); if (myUbs.ScriptPassword != null) { sb.AppendFormat("MyPasswd={0};\n", myUbs.ScriptPassword); } sb.AppendLine("}"); return(sb.ToString()); } else { if (mod == null) { throw new ApplicationException("Mod not downloaded yet"); } var script = new StringBuilder(); script.AppendLine("[GAME]"); script.AppendLine("{"); script.AppendFormat(" ZkSearchTag={0};\n", zkSearchTag); script.AppendFormat(" Mapname={0};\n", MapName); if (mod.IsMission) { script.AppendFormat(" StartPosType=3;\n"); } else { if (Details.StartPos == BattleStartPos.Choose) { script.AppendFormat(" StartPosType=2;\n"); } else { script.AppendFormat(" StartPosType=3;\n"); // workaround for random/fixed } // script.AppendFormat(" StartPosType={0};\n", (int)Details.StartPos); } script.AppendFormat(" GameType={0};\n", ModName); if (ModHash.HasValue) { script.AppendFormat(" ModHash={0};\n", ModHash.Value != 0 ? (uint)ModHash.Value : 1); } // hack dont set to 1 when dedi srever is patched if (MapHash.HasValue) { script.AppendFormat(" MapHash={0};\n", MapHash.Value != 0 ? (uint)MapHash.Value : 1); } script.AppendFormat(" AutohostPort={0};\n", loopbackListenPort); script.AppendLine(); script.AppendFormat(" HostIP={0};\n", Ip); script.AppendFormat(" HostPort={0};\n", HostPort); script.AppendFormat(" SourcePort={0};\n", 8300); script.AppendFormat(" IsHost=1;\n"); script.AppendLine(); //script.AppendFormat(" MyPlayerName={0};\n", localUser.Name); var positions = map.Positions != null?map.Positions.ToList() : new List <StartPos>(); if (Details.StartPos == BattleStartPos.Random) { positions = positions.Shuffle(); } List <UserBattleStatus> users; List <BotBattleStatus> bots; if (startSetup != null && startSetup.BalanceTeamsResult != null && startSetup.BalanceTeamsResult.Players != null) { // if there is a balance results as a part of start setup, use values from this (override lobby state) users = new List <UserBattleStatus>(this.Users.Select(x => x.Clone())); bots = new List <BotBattleStatus>(this.Bots.Select(x => (BotBattleStatus)x.Clone())); foreach (var p in startSetup.BalanceTeamsResult.Players) { var us = users.FirstOrDefault(x => x.Name == p.Name); if (us == null) { us = new UserBattleStatus(p.Name, new User() { LobbyID = p.LobbyID }, Password); users.Add(us); } us.TeamNumber = p.TeamID; us.IsSpectator = p.IsSpectator; us.AllyNumber = p.AllyID; } foreach (var p in startSetup.BalanceTeamsResult.Bots) { var bot = bots.FirstOrDefault(x => x.Name == p.BotName); if (bot == null) { bot = new BotBattleStatus(p.BotName, p.Owner, p.BotAI); bots.Add(bot); } bot.AllyNumber = bot.AllyNumber; bot.TeamNumber = bot.TeamNumber; } foreach (var u in users.Where(x => !startSetup.BalanceTeamsResult.Players.Any(y => y.Name == x.Name))) { u.IsSpectator = true; } // spec those not known at the time of balance } else { users = this.Users; bots = this.Bots; } GeneratePlayerSection(playersExport, localUser, startSetup, users, script, positions, bots); return(script.ToString()); } } finally { Thread.CurrentThread.CurrentCulture = previousCulture; } }
public bool ContainsUser(string name, out UserBattleStatus status) { status = Users.SingleOrDefault(x => x.Name == name); return(status != null); }