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."); } }
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."); } }