public override void ProcessServer()
        {
            if (ConquestScript.Instance.DataLock.TryAcquireExclusive())
            {
                string Title   = "Conquest Faction Leaderboard";
                string Prefix  = "Points last updated " + (MyAPIGateway.Session.GameDateTime - ConquestScript.Instance.Data.LastRun).Minutes.ToString() + " minutes ago.";
                string Content = " Tag   Faction Name  Points  Base type count";


                foreach (ConquestFaction Faction in ConquestScript.Instance.Data.ConquestFactions)
                {
                    Content += string.Format("\n {0}   {1}  {2}     ", Faction.FactionTag, Faction.FactionName, Faction.VictoryPoints.ToString());
                    if (ConquestScript.Instance.Config.PlanetPoints > 0)
                    {
                        Content += string.Format("P:{0} ", Faction.PlanetBases.ToString());
                    }
                    if (ConquestScript.Instance.Config.MoonPoints > 0)
                    {
                        Content += string.Format("M:{0} ", Faction.MoonBases.ToString());
                    }
                    if (ConquestScript.Instance.Config.AsteroidPoints > 0)
                    {
                        Content += string.Format("A:{0} ", Faction.AsteroidBases.ToString());
                    }
                }
                ConquestScript.Instance.DataLock.ReleaseExclusive();
                MessageClientDialogMessage.SendMessage(SenderSteamId, Title, Prefix, Content);
            }
            else
            {
                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base", "Server busy, try again later.");
            }
        }
        private void ShowConfig()
        {
            string Content = string.Format("Points per planetary conquest base: {0}\nPoints per moon conquest base: {1}\nPoints per asteroid conquest base: {2}\nMinimum planet radius (smaller is a moon): {3}m ",
                                           ConquestScript.Instance.Config.PlanetPoints.ToString(), ConquestScript.Instance.Config.MoonPoints.ToString(), ConquestScript.Instance.Config.AsteroidPoints.ToString(), ConquestScript.Instance.Config.PlanetSize.ToString());

            Content += string.Format("\nMinimum beacon transmit distance: {0}m\nUpdate Frequency (Points and rewards): {1} minutes\n",
                                     ConquestScript.Instance.Config.BeaconDistance.ToString(), ConquestScript.Instance.Config.UpdateFrequency.ToString());
            Content += string.Format("Assembler required on conquest base: {0}\nRefinery required on conquest base: {1}\nCargo container required on conquest base: {2}\nConquest bases required to be static grid: {3}\nDesignated Conquest Areas required : {4}\nLCD updating: {5}\nAntenna usage: {6}",
                                     FromBool(ConquestScript.Instance.Config.AssemblerReq), FromBool(ConquestScript.Instance.Config.RefineryReq), FromBool(ConquestScript.Instance.Config.CargoReq), FromBool(ConquestScript.Instance.Config.StaticReq), FromBool(ConquestScript.Instance.Config.AreaReq), FromBool(ConquestScript.Instance.Config.EnableLcds), FromBool(ConquestScript.Instance.Config.Antenna));
            Content += string.Format("\nPersistent Mode: {0}\nConquest Base Refinery/Assembler Upgrades (NYI): {1}\nConquest Base Rewards: {2}\nMaximum Bonus Time: {3} minutes\nMaximum Bonus Modifier: {4}",
                                     FromBool(ConquestScript.Instance.Config.Persistent), FromBool(ConquestScript.Instance.Config.Upgrades), FromBool(ConquestScript.Instance.Config.Reward), ConquestScript.Instance.Config.MaxBonusTime.ToString(), ConquestScript.Instance.Config.MaxBonusMod.ToString());
            MessageClientDialogMessage.SendMessage(SenderSteamId, "Frontier Conquest Config", "Configuration options and values", Content);
        }
        public override void ProcessServer()
        {
            if (ConquestScript.Instance.DataLock.TryAcquireExclusive())
            {
                ConqDataStruct TempData = ConquestScript.Instance.Data;
                ConquestScript.Instance.DataLock.ReleaseExclusive();
                MyAPIGateway.Parallel.Start(delegate()
                {
                    try
                    {
                        bool IsValid   = true;
                        string Reasons = "";
                        if (TempData.ConquestExclusions.Count > 0)
                        {
                            foreach (ConquestExclusionZone Zone in TempData.ConquestExclusions)
                            {
                                if ((Vector3D.Distance(TempPosition, Zone.Position) < Zone.Radius))
                                {
                                    Reasons += string.Format("\nwithin exclusion zone: {0}", Zone.DisplayName);
                                    IsValid  = false;
                                }
                            }
                        }
                        bool boAR = false;
                        if ((ConquestScript.Instance.Config.AreaReq) && (TempData.ConquestAreas.Count > 0))
                        {
                            foreach (ConquestAreaZone Zone in TempData.ConquestAreas)
                            {
                                if ((Vector3D.Distance(TempPosition, Zone.Position) < Zone.Radius))
                                {
                                    boAR = true;
                                    break;
                                }
                            }

                            if (!boAR)
                            {
                                Reasons += "\n is not within a Conquest Area";
                            }
                        }
                        if (TempData.ConquestBases.Count > 0)
                        {
                            foreach (ConquestBase ConqBase in TempData.ConquestBases)
                            {
                                if (Vector3D.Distance(TempPosition, ConqBase.Position) < ConqBase.Radius)
                                {
                                    Reasons += string.Format("\nwithin broadcast range of Conquest Base: {0}", ConqBase.DisplayName);
                                    IsValid  = false;
                                }
                            }
                        }
                        if (IsValid)
                        {
                            MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base", "This is a valid position for a conquest base");
                        }
                        else
                        {
                            MessageClientDialogMessage.SendMessage(SenderSteamId, "Conquest Base", "This is NOT a valid position for a conquest base", Reasons);
                        }
                    }
                    catch (Exception ex)
                    {
                        ConquestScript.Instance.ServerLogger.WriteException(ex);
                        MyAPIGateway.Utilities.ShowMessage("Error", "An exception has been logged in the file:" + ConquestScript.Instance.ServerLogger.LogFileName);
                    }
                });
            }
            else
            {
                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base", "Server busy, try again later.");
            }
        }
        public override void ProcessServer()
        {
            if (ConquestScript.Instance.DataLock.TryAcquireExclusive())
            {
                ConqDataStruct TempData = ConquestScript.Instance.Data;
                ConquestScript.Instance.DataLock.ReleaseExclusive();
                MyAPIGateway.Parallel.Start(delegate()
                {
                    try
                    {
                        bool IsValid             = true;
                        string Reasons           = "";
                        IMyCubeGrid SelectedGrid = MyAPIGateway.Entities.GetEntityById(SelectedGridId) as IMyCubeGrid;
                        if (SelectedGrid == null)
                        {
                            MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base", "Error: Could not retrieve IMyCubeGrid, are you looking at a block with a terminal?");
                            return;
                        }
                        if (TempData.ConquestExclusions.Count > 0)
                        {
                            foreach (ConquestExclusionZone Zone in TempData.ConquestExclusions)
                            {
                                if ((Vector3D.Distance(SelectedGrid.GetPosition(), Zone.Position) < Zone.Radius))
                                {
                                    Reasons += string.Format("\n {0} is within exclusion zone: {1}", SelectedGrid.DisplayName, Zone.DisplayName);
                                    IsValid  = false;
                                }
                            }
                        }
                        bool boAR = false;
                        if ((ConquestScript.Instance.Config.AreaReq) && (TempData.ConquestAreas.Count > 0))
                        {
                            foreach (ConquestAreaZone Zone in TempData.ConquestAreas)
                            {
                                if ((Vector3D.Distance(TempPosition, Zone.Position) < Zone.Radius))
                                {
                                    boAR = true;
                                    break;
                                }
                            }

                            if (!boAR)
                            {
                                Reasons += string.Format("\n {0} is not within a Conquest Area", SelectedGrid.DisplayName);
                            }
                        }
                        ConquestGrid ConqGrid = new ConquestGrid(SelectedGrid);
                        if (TempData.ConquestBases.Count > 0)
                        {
                            foreach (ConquestBase ConqBase in TempData.ConquestBases)
                            {
                                // If this isn't the same grid...
                                if (SelectedGrid.EntityId != ConqBase.EntityId)
                                {
                                    if (Vector3D.Distance(SelectedGrid.GetPosition(), ConqBase.Position) < ConqBase.Radius)
                                    {
                                        Reasons += string.Format("\n {0} is within broadcast range of Conquest Base: {1}", SelectedGrid.DisplayName, ConqBase.DisplayName);
                                        IsValid  = false;
                                    }
                                    if (Vector3D.Distance(ConqGrid.Position, ConqBase.Position) < ConqGrid.Radius)
                                    {
                                        Reasons += string.Format("\n Conquest Base {0} is within broadcast range", ConqBase.DisplayName);
                                        IsValid  = false;
                                    }
                                }
                            }
                        }
                        if (ConqGrid.IsValid && IsValid)
                        {
                            //MyAPIGateway.Utilities.ShowMessage("ConquestBase", SelectedBlock.CubeGrid.DisplayName + " Is a valid Conquest Base!");
                            if (ConquestScript.Instance.Config.Reward)
                            {
                                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base",
                                                                     string.Format(" {0} Is a valid Conquest Base broadcasting at {1}m for {2}% of possible reward.", SelectedGrid.DisplayName, ConqGrid.Radius, Math.Round(ConqGrid.Radius / 500)));
                            }
                            else
                            {
                                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base",
                                                                     string.Format(" {0} Is a valid Conquest Base.", SelectedGrid.DisplayName));
                            }
                        }
                        else
                        {
                            foreach (string reason in ConqGrid.Reasons)
                            {
                                Reasons += reason;
                            }
                            MessageClientDialogMessage.SendMessage(SenderSteamId, "Conquest Base", string.Format(" {0} Is NOT a valid Conquest Base", SelectedGrid.DisplayName), Reasons);
                        }
                    }
                    catch (Exception ex)
                    {
                        ConquestScript.Instance.ServerLogger.WriteException(ex);
                        MyAPIGateway.Utilities.ShowMessage("Error", "An exception has been logged in the file: " + ConquestScript.Instance.ServerLogger.LogFileName);
                    }
                });
            }
            else
            {
                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Base", "Server busy, try again later.");
            }
        }
Beispiel #5
0
        public override void ProcessServer()
        {
            if (ConquestScript.Instance.DataLock.TryAcquireExclusive())
            {
                try
                {
                    var player = MyAPIGateway.Players.FindPlayerBySteamId(SenderSteamId);
                    if (player == null || !player.IsAdmin()) // hold on there, are we an admin first?
                    {
                        return;
                    }
                    switch (CommandType)
                    {
                    case AreaManage.Add:
                    {
                        if (string.IsNullOrWhiteSpace(ZoneName) || ZoneName == "*")
                        {
                            MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area Add", "Invalid name supplied for the zone name.");
                            ConquestScript.Instance.DataLock.ReleaseExclusive();
                            return;
                        }

                        var checkZone = ConquestScript.Instance.Data.ConquestAreas.FirstOrDefault(m => m.DisplayName.Equals(ZoneName, StringComparison.InvariantCultureIgnoreCase));
                        if (checkZone != null)
                        {
                            MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area Add", "A conquest Area zone of name '{0}' already exists.", checkZone.DisplayName);
                            ConquestScript.Instance.DataLock.ReleaseExclusive();
                            return;
                        }

                        ConquestAreaZone NewZone = new ConquestAreaZone();
                        NewZone.DisplayName = ZoneName;
                        NewZone.Position    = new Vector3D(X, Y, Z);
                        NewZone.Radius      = Size;
                        ConquestScript.Instance.Data.ConquestAreas.Add(NewZone);
                        MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area Add", "A new conquest Area zone called '{0}' has been created.", ZoneName);
                    }
                    break;

                    case AreaManage.Remove:
                    {
                        var zone = ConquestScript.Instance.Data.ConquestAreas.FirstOrDefault(m => m.DisplayName.Equals(ZoneName, StringComparison.InvariantCultureIgnoreCase));
                        if (zone == null)
                        {
                            var zones = ConquestScript.Instance.Data.ConquestAreas.Where(m => m.DisplayName.IndexOf(ZoneName, StringComparison.InvariantCultureIgnoreCase) >= 0).ToArray();
                            if (zones.Length == 0)
                            {
                                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area Remove", "The specified zone name could not be found.");
                                ConquestScript.Instance.DataLock.ReleaseExclusive();
                                return;
                            }
                            if (zones.Length > 1)
                            {
                                var str = new StringBuilder();
                                str.Append("The specified zone name could not be found.\r\n    Which did you mean?\r\n");
                                foreach (var m in zones)
                                {
                                    str.AppendLine(m.DisplayName);
                                }
                                MessageClientDialogMessage.SendMessage(SenderSteamId, "Conquest Area Remove", " ", str.ToString());
                                ConquestScript.Instance.DataLock.ReleaseExclusive();
                                return;
                            }
                            zone = zones[0];
                        }

                        ConquestScript.Instance.Data.ConquestAreas.Remove(zone);
                        MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area Remove", "The zone '{0}' has been removed.", zone.DisplayName);
                    }
                    break;

                    case AreaManage.List:
                    {
                        var str = new StringBuilder();

                        if (ConquestScript.Instance.Data.ConquestAreas.Count > 0)
                        {
                            foreach (var zone in ConquestScript.Instance.Data.ConquestAreas)
                            {
                                str.AppendFormat("Zone: {0}\r\n", zone.DisplayName);
                                str.AppendFormat("  Center Position=X:{0:N} | Y:{1:N} | Z:{2:N} Radius={3:N}m\r\n\r\n", zone.Position.X.ToString(), zone.Position.Y.ToString(), zone.Position.Z.ToString(), zone.Radius.ToString());
                            }
                            MessageClientDialogMessage.SendMessage(SenderSteamId, "Conquest Area Zone List", " ", str.ToString());
                        }
                        else
                        {
                            MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area List", "List is currently empty.");
                        }
                    }
                    break;
                    }
                    ConquestScript.Instance.DataLock.ReleaseExclusive();
                }
                catch (Exception ex)
                {
                    ConquestScript.Instance.ServerLogger.WriteException(ex);
                    MyAPIGateway.Utilities.ShowMessage("Error", "An exception has been logged in the file:" + ConquestScript.Instance.ServerLogger.LogFileName);
                    ConquestScript.Instance.DataLock.ReleaseExclusive();
                }
            }
            else
            {
                MessageClientTextMessage.SendMessage(SenderSteamId, "Conquest Area", "Server busy, try again later.");
            }
        }