public MissionLogEventInfluenceAreaInfo(MissionLogEventHeader header) : base(header) { var country = new Country(RawParameters.GetInt("COUNTRY")); var coalition = Server.CoalitionIndexes.FirstOrDefault(c => c.Country.Id == country.Id); int coalitionIndex = 0; if (coalition != null) { coalitionIndex = coalition.Index; } var id = RawParameters.GetInt("AID"); var existingArea = Server.Areas[id]; if (existingArea != null) { Server.Areas[id].Country = country; Server.Areas[id].Coalition = coalitionIndex; Server.Areas[id].IsEnabled = RawParameters.GetInt("ENABLED") == 1 ? true : false; Area = Server.Areas[id]; } else { Area = new Area(RawParameters.GetInt("AID"), country, RawParameters.GetInt("ENABLED") == 1 ? true : false) { Coalition = coalition.Index, }; } PlanesByCoalition = new List <CoalitionPlanesCount>(); var planesNumber = Util.SequenceToIntArray(RawParameters.GetString("BC")); }
public MissionLogEventPlayerLeave(MissionLogEventHeader header) : base(header) { NickGuid = RawParameters.GetGuid("USERNICKID"); LoginGuid = RawParameters.GetGuid("USERID"); Player = Server.Players.FindPlayerByGuid(NickGuid); }
private NewSensorParameters CreateRawParameters() { if (!RawParameters.ContainsKey(NameParameter)) { throw new InvalidOperationException($"Hashtable record '{NameParameter}' is mandatory, however a value was not specified"); } if (!RawParameters.ContainsKey(SensorTypeParameter)) { throw new InvalidOperationException($"Hashtable record '{SensorTypeParameter}' is mandatory, however a value was not specified'"); } var parameters = new PSRawSensorParameters(RawParameters[NameParameter]?.ToString(), RawParameters[SensorTypeParameter]?.ToString()); var toAdd = RawParameters.Keys.Cast <object>() .Where(k => k.ToString() != SensorTypeParameter) .Select(k => new CustomParameter(k.ToString(), PSObjectUtilities.CleanPSObject(RawParameters[k]), ParameterType.MultiParameter)) .ToList(); foreach (var param in toAdd) { parameters[param.Name] = param.Value; } if (DynamicType) { parameters.DynamicType = true; } return(parameters); }
public MissionLogEventGroupInitInfo(MissionLogEventHeader header) : base(header) { GroupId = RawParameters.GetInt("GID"); ObjectIds = Util.SequenceToIntArray(RawParameters.GetString("IDS")); LeaderId = RawParameters.GetInt("LID"); }
public MissionLogEventObjectiveCompleted(MissionLogEventHeader header) : base(header) { ObjectiveId = RawParameters.GetInt("OBJID"); Position = RawParameters.GetVector3D("POS"); IsPrimary = RawParameters.GetInt("TYPE") == 1 ? true : false; CoalitionIndex = RawParameters.GetInt("COAL"); IsCompleted = RawParameters.GetInt("RES") == 1 ? true : false; }
public MissionLogEventAirfieldInfo(MissionLogEventHeader header) : base(header) { AirField = new AirField() { Country = new Country(RawParameters.GetInt("COUNTRY")), Id = RawParameters.GetInt("AID"), Position = RawParameters.GetVector3D("POS"), }; }
public MissionLogEject(MissionLogEventHeader header) : base(header) { Position = RawParameters.GetVector3D("POS"); var area = Server.Areas.FindAreaByPos(RawParameters.GetVector3D("POS")); Player = Server.Players[RawParameters.GetInt("PARENTID")] ?? Server.Players[RawParameters.GetInt("BOTID")]; if (Player != null && area != null) { IsFriendlyArea = area.Coalition == Player.CoalitionIndex; } }
public MissionLogEventPlayerAmmo(MissionLogEventHeader header) : base(header) { PlaneId = RawParameters.GetInt("PLID"); PlayerId = RawParameters.GetInt("PID"); Bullets = RawParameters.GetInt("BUL"); Shells = RawParameters.GetInt("SH"); Bombs = RawParameters.GetInt("BOMB"); Rockets = RawParameters.GetInt("RCT"); Player = Server.Players[PlaneId] ?? Server.Players[PlayerId]; //if (Player == null) // Bot = Server.GameObjects[PlaneId]; }
public MissionLogEventLanding(MissionLogEventHeader header) : base(header) { PlayerId = RawParameters.GetInt("PID"); Position = RawParameters.GetVector3D("POS"); Player = Server.Players[PlayerId]; if (Player == null) { Bot = Server.GameObjects[PlayerId]; } else { Player.IsInAir = false; } }
public MissionLogEventStart(MissionLogEventHeader header) : base(header) { //TODO: handle DateTime type var gameDate = Regex.Match(RawParameters.GetString("GDate"), @"(\d+)\.(\d+)\.(\d+)"); var gameTime = Regex.Match(RawParameters.GetString("GTime"), @"(\d+)\:(\d+)\:(\d+)"); if (gameDate.Success && gameTime.Success) { GameDateTime = new DateTime( int.Parse(gameDate.Groups[1].Value), int.Parse(gameDate.Groups[2].Value), int.Parse(gameDate.Groups[3].Value), int.Parse(gameTime.Groups[1].Value), int.Parse(gameTime.Groups[2].Value), int.Parse(gameTime.Groups[3].Value)); } MissionFile = RawParameters.GetString("MFile"); MissionID = RawParameters.GetString("MID"); GameType = RawParameters.GetInt("GType"); Mods = RawParameters.GetInt("MODS"); Preset = RawParameters.GetInt("Preset"); AQMId = RawParameters.GetInt("AWMID"); SettingsFlags = RawParameters.GetString("SETTS"); var coalitions = RawParameters.GetString("CNTRS"); var countryPairs = coalitions.Split(',').Select(p => p.Split(':')).ToArray(); CoalitionIndexes = new List <CoalitionIndex>(); int country, index; for (int i = 0; i < countryPairs.Length; i++) { if (countryPairs[i].Length == 2 && int.TryParse(countryPairs[i][0], out country) && int.TryParse(countryPairs[i][1], out index)) { CoalitionIndexes.Add(new CoalitionIndex() { Country = new Country(country), Index = index, }); } } }
public MissionLogEventHit(MissionLogEventHeader header) : base(header) { AttackerId = RawParameters.GetInt("AID"); TargetId = RawParameters.GetInt("TID"); AmmoName = RawParameters.GetString("AMMO"); AttackerPlayer = Server.Players[AttackerId]; if (AttackerPlayer == null) { AttackerObject = Server.GameObjects[AttackerId]; } TargetPlayer = Server.Players[TargetId]; if (TargetPlayer == null) { TargetObject = Server.GameObjects[TargetId]; } }
public MissionLogEventInfluenceAreaBoundary(MissionLogEventHeader header) : base(header) { var id = RawParameters.GetInt("AID"); var existingArea = Server.Areas[id]; if (existingArea != null) { Server.Areas[id].SetBoundaries(RawParameters.GetVectorArray("BP")); Area = Server.Areas[id]; } else { Area = new Area(RawParameters.GetVectorArray("BP")) { Id = RawParameters.GetInt("AID") }; } }
public MissionLogEventDamage(MissionLogEventHeader header) : base(header) { AttackerId = RawParameters.GetInt("AID"); TargetId = RawParameters.GetInt("TID"); Damage = RawParameters.GetDouble("DMG"); Position = RawParameters.GetVector3D("POS"); AttackerPlayer = Server.Players[AttackerId]; if (AttackerPlayer == null) { AttackerObject = Server.GameObjects[AttackerId]; } TargetPlayer = Server.Players[TargetId]; if (TargetPlayer == null) { TargetObject = Server.GameObjects[TargetId]; } }
public MissionLogRemoveBot(MissionLogEventHeader header) : base(header) { Position = RawParameters.GetVector3D("POS"); var area = Server.Areas.FindAreaByPos(RawParameters.GetVector3D("POS")); Player = Server.Players[RawParameters.GetInt("BOTID")]; if (area != null) { if (Player == null) { Bot = Server.GameObjects[RawParameters.GetInt("BOTID")]; IsFriendlyArea = area.Coalition == Bot.CoalitionIndex; } else { IsFriendlyArea = area.Coalition == Player.CoalitionIndex; } } }
public MissionLogEventGameObjectSpawn(MissionLogEventHeader header) : base(header) { GameObjectItem purpose; GameInfo.ObjectsClassification.TryGetValue(RawParameters.GetString("TYPE"), out purpose); if (purpose == null) { purpose = new GameObjectItem(GameObjectClass.Other, "Unknown"); } Object = new GameObject(RawParameters.GetInt("ID"), RawParameters.GetString("TYPE")) { Classification = purpose.Classification.ToString("g"), Purpose = purpose.Purpose, Country = new Country(RawParameters.GetInt("COUNTRY")), }; Object.CoalitionIndex = Server.GetCoalitionIndex(Object.Country); PlayerId = RawParameters.GetInt("PID"); }
public MissionLogEventPlaneSpawn(MissionLogEventHeader header) : base(header) { GameObjectItem purpose; GameInfo.ObjectsClassification.TryGetValue(RawParameters.GetString("TYPE"), out purpose); if (purpose == null) { purpose = new GameObjectItem(GameObjectClass.Other, "Unknown"); } Player = new Player() { Id = RawParameters.GetInt("PID"), Country = new Country(RawParameters.GetInt("COUNTRY")), IsInAir = RawParameters.GetInt("INAIR") == 0 ? true : false, IsOnline = true, LoginId = RawParameters.GetGuid("LOGIN"), NickId = RawParameters.GetGuid("IDS"), NickName = RawParameters.GetString("NAME"), Plane = new Plane(RawParameters.GetInt("PLID"), RawParameters.GetString("TYPE")) { Bullets = RawParameters.GetInt("BUL"), Bombs = RawParameters.GetInt("BOMB"), Classification = GameObjectClass.Plane.ToString("g"), Fuel = RawParameters.GetDouble("FUEL"), Payload = RawParameters.GetString("PAYLOAD"), Purpose = purpose == null ? null : purpose.Purpose, Shells = RawParameters.GetInt("SH"), Skin = RawParameters.GetString("SKIN"), WeaponMods = RawParameters.GetString("WM"), }, BotPilot = new GameObject(RawParameters.GetInt("PID"), "BotPilot"), SortieId = EventID, }; Player.CoalitionIndex = Server.GetCoalitionIndex(Player.Country); Server.Players.PlayerSpawn(Player); }
public MissionLogEventKill(MissionLogEventHeader header) : base(header) { AttackerId = RawParameters.GetInt("AID"); TargetId = RawParameters.GetInt("TID"); Position = RawParameters.GetVector3D("POS"); AttackerPlayer = Server.Players[AttackerId]; AttackerObject = Server.GameObjects[AttackerId]; TargetPlayer = Server.Players[TargetId]; TargetObject = Server.GameObjects[TargetId]; if (AttackerPlayer == null && AttackerObject == null && TargetPlayer != null && TargetPlayer.HitsSources.Count > 0) { AttackerPlayer = TargetPlayer.MostDamageByPlayer(); if (AttackerPlayer == null) { AttackerObject = TargetPlayer.MostDamageByObject(); } } }
public MissionLogEventPlayerJoin(MissionLogEventHeader header) : base(header) { NickGuid = RawParameters.GetGuid("USERNICKID"); LoginGuid = RawParameters.GetGuid("USERID"); }
public MissionLogEventVersion(MissionLogEventHeader header) : base(header) { Version = RawParameters.GetString("VER"); }
public void AssignRawParameters() { List <string> paramlist = new List <string>(); string rdata = RawParameters.Replace(Environment.NewLine, "~"); var lines = rdata.Split('~'); foreach (var line in lines) { if (!line.StartsWith("//")) { var items = line.Split(';'); foreach (var item in items) { var s = item.Trim(); paramlist.Add(item.Trim()); } } } foreach (var item in paramlist) { //text if (item.StartsWith("DefTextSize=")) { DefTextSize = item.Replace("DefTextSize=", string.Empty); } else if (item.StartsWith("DefTextShift=")) { DefTextShift = item.Replace("DefTextShift=", string.Empty); } else if (item.StartsWith("DefTextWidth=")) { DefTextWidth = item.Replace("DefTextWidth=", string.Empty); } else if (item.StartsWith("DefFontSize=")) { DefFontSize = item.Replace("DefFontSize=", string.Empty); } else if (item.StartsWith("DefFontName=")) { DefFontName = item.Replace("DefFontName=", string.Empty); } else if (item.StartsWith("DefFontColor=")) { DefFontColor = item.Replace("DefFontColor=", string.Empty); } else if (item.StartsWith("DefTextAlignH=")) { DefTextAlignH = item.Replace("DefTextAlignH=", string.Empty); } else if (item.StartsWith("DefTextAlignV=")) { DefTextAlignV = item.Replace("DefTextAlignV=", string.Empty); } else if (item.StartsWith("DefTextBck=")) { DefTextBck = item.Replace("DefTextBck=", string.Empty); } else if (item.StartsWith("DefFontStyle=")) { DefFontStyle = item.Replace("DefFontStyle=", string.Empty); } //visual else if (item.StartsWith("DefVisX=")) { DefVisX = item.Replace("DefVisX=", string.Empty); } else if (item.StartsWith("DefVisY=")) { DefVisY = item.Replace("DefVisY=", string.Empty); } else if (item.StartsWith("DefVisSize=")) { DefVisSize = item.Replace("DefVisSize=", string.Empty); } else if (item.StartsWith("DefVisSpeed=")) { DefVisSpeed = item.Replace("DefVisSpeed=", string.Empty); } else if (item.StartsWith("DefVisLM=")) { DefVisLM = item.Replace("DefVisLM=", string.Empty); } else if (item.StartsWith("DefVisLC=")) { DefVisLC = item.Replace("DefVisLC=", string.Empty); } else if (item.StartsWith("DefVisFile=")) { DefVisFile = item.Replace("DefVisFile=", string.Empty); } // Other else if (item.StartsWith("PackStory=")) { packStory = (item.Replace("PackStory=", string.Empty) == "1"); } else if (item.StartsWith("PackImage=")) { packImage = (item.Replace("PackImage=", string.Empty) == "1"); } else if (item.StartsWith("PackSound=")) { packSound = (item.Replace("PackSound=", string.Empty) == "1"); } else if (item.StartsWith("PackVideo=")) { packVideo = (item.Replace("PackVideo=", string.Empty) == "1"); } } }
public IRCMessage(byte[] msg) { Time = DateTime.UtcNow; Raw = Encoding.UTF8.GetString(msg); RawTrimmed = Encoding.UTF8.GetString(msg).Trim(); Parsed = false; Prefix = string.Empty; Server = string.Empty; Nick = string.Empty; User = string.Empty; Host = string.Empty; Command = string.Empty; RawParameters = string.Empty; Parameters = new string[0]; #region Actual Parsing if (RawTrimmed.Length > 0) { var subIdx = 0; // If we find a prefix, we shift this value to the end of the prefix // Prefix Section #region Prefix Parsing (Optional in Message Format) if (RawTrimmed.StartsWith(':') || RawTrimmed.Contains('!') || RawTrimmed.Contains('@')) // Contains prefix if the 1st char is : { // (Sometimes twitch replies without the ':' in which case we search for other giveaways that it is a prefix e.g. '!' / '@') // [':' <prefix> <SPACE> ] // < prefix > ::= < servername > | < nick > ['!' < user > ]['@' < host > ] subIdx = RawTrimmed.IndexOf(' '); // searches for the <SPACE> if (RawTrimmed.StartsWith(':')) { Prefix = RawTrimmed.Substring(1, subIdx - 1); // Omit ':' and ' ' } else { Prefix = RawTrimmed.Substring(0, subIdx); // In the event we detect a prefix without the : } var excIdx = Prefix.IndexOf('!'); // Finds '!' var atIdx = Prefix.IndexOf('@'); // Finds '@', use this info to determine if its a nickname or servername (?, unsure about this) if (excIdx == -1 && atIdx == -1) { Server = Prefix; Nick = string.Empty; } else { if (atIdx != -1) { Host = Prefix.Substring(atIdx); } else { Host = string.Empty; } if (excIdx != -1) { if (atIdx != -1) // We need to calculate the length of the User section based of the position of the '@' { User = Prefix.Substring(excIdx, (Prefix.Length - excIdx) - Host.Length); } else { User = Prefix.Substring(excIdx); } } Server = string.Empty; Nick = Prefix.Substring(0, Prefix.Length - User.Length - Host.Length); } } #endregion // Commands Section #region Command Parsing { // < command > ::= < letter > { < letter > } | < number > < number > < number > if (subIdx != 0) { Command = RawTrimmed.Substring(subIdx + 1); } else { Command = RawTrimmed.Substring(subIdx); } var cmdIndex = Command.IndexOf(' '); if (cmdIndex == -1) { return; // Invalid Message, cant be parsed. } // TODO: Log it to see why Command = Command.Substring(0, cmdIndex); // <command> <params> (<params> starts with <SPACE>) IsNumericReply = false; char startChar = (char)Command.ToCharArray().GetValue(0); if (startChar >= 0x30 && startChar <= 0x39) // Between 0 - 9 { // Number Code var num = 0; if (int.TryParse(Command, out num)) { IRCReply = (IRCReply)num; IsNumericReply = true; } } } #endregion // RawParameters Section #region RawParameters Parsing { // <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] if (subIdx == 0) { // No prefix detected, subIdx = RawTrimmed.IndexOf(' '); RawParameters = RawTrimmed.Substring(subIdx + 1); } else { // We detected a prefix, so there is already a SPACE, find the next one subIdx = RawTrimmed.IndexOf(' ', subIdx + 1); RawParameters = RawTrimmed.Substring(subIdx + 1); } var paramsList = new List <string>(); var paramsChar = RawParameters.ToCharArray(); for (int i = 0; i < paramsChar.Length; i++) { var ch = paramsChar[i]; if (ch == ':') //[':' < trailing > | ... ] { paramsList.Add(new string(paramsChar.Skip(i).Take(paramsChar.Length - i).ToArray())); break; // Last parameter } else // [ ... | < middle > <params> ] { var nextSpace = RawParameters.IndexOf(' ', i); if (nextSpace == -1) { paramsList.Add(new string(paramsChar.ToArray())); break; // There are no more parameters twitch lied to us (where was the ':' :( ) } else { paramsList.Add(new string(paramsChar.Skip(i).Take(nextSpace - i).ToArray())); i = nextSpace; } } } Parameters = paramsList.ToArray(); } #endregion Parsed = true; } else { // Empty message Prefix = string.Empty; Server = string.Empty; Nick = string.Empty; User = string.Empty; Host = string.Empty; Command = string.Empty; RawParameters = string.Empty; Parameters = new string[0]; } #endregion }