コード例 #1
0
        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"));
        }
コード例 #2
0
 public MissionLogEventPlayerLeave(MissionLogEventHeader header)
     : base(header)
 {
     NickGuid  = RawParameters.GetGuid("USERNICKID");
     LoginGuid = RawParameters.GetGuid("USERID");
     Player    = Server.Players.FindPlayerByGuid(NickGuid);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
 public MissionLogEventGroupInitInfo(MissionLogEventHeader header)
     : base(header)
 {
     GroupId   = RawParameters.GetInt("GID");
     ObjectIds = Util.SequenceToIntArray(RawParameters.GetString("IDS"));
     LeaderId  = RawParameters.GetInt("LID");
 }
コード例 #5
0
 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;
 }
コード例 #6
0
 public MissionLogEventAirfieldInfo(MissionLogEventHeader header)
     : base(header)
 {
     AirField = new AirField()
     {
         Country  = new Country(RawParameters.GetInt("COUNTRY")),
         Id       = RawParameters.GetInt("AID"),
         Position = RawParameters.GetVector3D("POS"),
     };
 }
コード例 #7
0
        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;
            }
        }
コード例 #8
0
        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];
        }
コード例 #9
0
 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;
     }
 }
コード例 #10
0
        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,
                    });
                }
            }
        }
コード例 #11
0
        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];
            }
        }
コード例 #12
0
        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")
                };
            }
        }
コード例 #13
0
        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];
            }
        }
コード例 #14
0
        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;
                }
            }
        }
コード例 #15
0
        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");
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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();
                }
            }
        }
コード例 #18
0
 public MissionLogEventPlayerJoin(MissionLogEventHeader header)
     : base(header)
 {
     NickGuid  = RawParameters.GetGuid("USERNICKID");
     LoginGuid = RawParameters.GetGuid("USERID");
 }
コード例 #19
0
 public MissionLogEventVersion(MissionLogEventHeader header)
     : base(header)
 {
     Version = RawParameters.GetString("VER");
 }
コード例 #20
0
ファイル: Scenario.cs プロジェクト: Trump68/StoGenPlus
        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");
                }
            }
        }
コード例 #21
0
        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
        }