public bool Equals(UserBattleStatus other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return other.AllyNumber == AllyNumber && Equals(other.ip, ip) && other.IsReady.Equals(IsReady) && other.IsSpectator.Equals(IsSpectator) && other.JoinTime.Equals(JoinTime) && Equals(other.Name, Name) && other.port == port && other.Side == Side && Equals(other.SyncStatus, SyncStatus) && other.TeamColor == TeamColor && other.TeamNumber == TeamNumber; }
public 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(" Rank={0};\n", status.LobbyUser.Rank); script.AppendFormat(" CountryCode={0};\n", status.LobbyUser.Country); script.AppendFormat(" LobbyID={0};\n", status.LobbyUser.LobbyID); script.AppendFormat(" LobbyRank={0};\n", status.LobbyUser.Rank); } if (status.ScriptPassword != null) script.AppendFormat(" Password={0};\n", status.ScriptPassword); if (startSetup != null) { var entry = startSetup.UserParameters.FirstOrDefault(x => x.LobbyID == status.LobbyUser.LobbyID); if (entry != null) foreach (var kvp in entry.Parameters) script.AppendFormat(" {0}={1};\n", kvp.Key, kvp.Value); } script.AppendLine(" }"); }
public static void ScriptAddTeam(StringBuilder script, int teamNum, List<StartPos> positions, int userNum, UserBattleStatus status, Mod mod, BattleDetails Details) { // 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(CultureInfo.InvariantCulture," 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.SingleOrDefault(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 != 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 { 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; }
public 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(" Rank={0};\n", status.LobbyUser.Rank); script.AppendFormat(" CountryCode={0};\n", status.LobbyUser.Country); script.AppendFormat(" LobbyID={0};\n", status.LobbyUser.LobbyID); script.AppendFormat(" LobbyRank={0};\n", status.LobbyUser.Rank); } if (status.ScriptPassword != null) { script.AppendFormat(" Password={0};\n", status.ScriptPassword); } if (startSetup != null) { var entry = startSetup.UserParameters.FirstOrDefault(x => x.LobbyID == status.LobbyUser.LobbyID); if (entry != null) { foreach (var kvp in entry.Parameters) { script.AppendFormat(" {0}={1};\n", kvp.Key, kvp.Value); } } } script.AppendLine(" }"); }
public static void ScriptAddTeam(StringBuilder script, int teamNum, List <StartPos> positions, int userNum, UserBattleStatus status, Mod mod, BattleDetails Details) { // 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(CultureInfo.InvariantCulture, " 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.SingleOrDefault(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 != 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 { 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); }
public void UpdateBot(string name, UserBattleStatus battleStatus, int teamColor) { con.SendCommand("UPDATEBOT", name, battleStatus.ToInt(), teamColor); }
public void SendMyBattleStatus(UserBattleStatus status) { con.SendCommand("MYBATTLESTATUS", status.ToInt(), status.TeamColor); }
public void AddBot(string name, UserBattleStatus status, int teamColor, string aiDll) { if (name.Contains(" ")) throw new TasClientException("Bot name must not contain spaces. " + name); con.SendCommand("ADDBOT", name, status.ToInt(), teamColor, aiDll); }
void OnOpenBattle(string[] args) { MyBattleID = int.Parse(args[0]); existingBattles[MyBattleID] = MyBattle; var self = new UserBattleStatus(username, existingUsers[username]); MyBattle.Users.Add(self); // add self lastUserBattleStatus = self.ToInt(); UpdateBattleDetails(MyBattle.Details); // SetScriptTag(MyBattle.Mod.GetDefaultModOptionsTags()); // sends default mod options // enable if tasclient is not fixed BattleOpened(this, new TasEventArgs(args[0])); }
void OnJoinedBattle(string[] args) { var joinedBattleID = Int32.Parse(args[0]); Battle battle; if (!existingBattles.TryGetValue(joinedBattleID, out battle)) return; var userName = args[1]; var scriptPassword = args.Length > 2 ? args[2] : null; var ubs = new UserBattleStatus(userName, existingUsers[userName], scriptPassword); battle.Users.Add(ubs); ExistingUsers[userName].IsInBattleRoom = true; if (userName == username) lastUserBattleStatus = ubs.ToInt(); BattleUserJoined(this, new BattleUserEventArgs(userName, joinedBattleID, scriptPassword)); }