public Boolean CheckGrids(Vector3 Position, long PlayerIdentityId) { MyFaction PlayersFaction = MySession.Static.Factions.GetPlayerFaction(PlayerIdentityId); BoundingSphereD sphere = new BoundingSphereD(Position, 15000); foreach (MyCubeGrid grid in MyAPIGateway.Entities.GetEntitiesInSphere(ref sphere).OfType <MyCubeGrid>()) { if (FacUtils.IsOwnerOrFactionOwned(grid, PlayerIdentityId, true)) { continue; } if (grid.Projector != null) { continue; } MyFaction CheckFaction = MySession.Static.Factions.GetPlayerFaction(FacUtils.GetOwner(grid)); if (PlayersFaction != null && CheckFaction != null) { MyRelationsBetweenFactions Relation = MySession.Static.Factions.GetRelationBetweenFactions(PlayersFaction.FactionId, CheckFaction.FactionId).Item1; if (Relation == MyRelationsBetweenFactions.Neutral || Relation == MyRelationsBetweenFactions.Friends) { continue; } } if (Vector3D.Distance(Position, grid.PositionComp.GetPosition()) <= 15000) { return(false); } } return(true); }
public void Sell(string price, string name) { if (MyGravityProviderSystem.IsPositionInNaturalGravity(Context.Player.GetPosition())) { Context.Respond("You cannot use this command in natural gravity!"); confirmations.Remove(Context.Player.IdentityId); return; } foreach (DeniedLocation denied in AlliancePlugin.HangarDeniedLocations) { if (Vector3.Distance(Context.Player.GetPosition(), new Vector3(denied.x, denied.y, denied.z)) <= denied.radius) { Context.Respond("Cannot sell here, too close to a denied location."); confirmations.Remove(Context.Player.IdentityId); return; } } Int64 amount; price = price.Replace(",", ""); price = price.Replace(".", ""); price = price.Replace(" ", ""); try { amount = Int64.Parse(price); } catch (Exception) { Context.Respond("Error parsing amount", Color.Red, "Bank Man"); return; } if (amount < 0 || amount == 0) { Context.Respond("Must be a positive amount", Color.Red, "Bank Man"); return; } ConcurrentBag <MyGroups <MyCubeGrid, MyGridMechanicalGroupData> .Group> gridWithSubGrids = GridFinder.FindLookAtGridGroupMechanical(Context.Player.Character); List <MyCubeGrid> grids = new List <MyCubeGrid>(); foreach (var item1 in gridWithSubGrids) { foreach (MyGroups <MyCubeGrid, MyGridMechanicalGroupData> .Node groupNodes in item1.Nodes) { MyCubeGrid grid = groupNodes.NodeData; if (FacUtils.IsOwnerOrFactionOwned(grid, Context.Player.IdentityId, false)) { if (!grids.Contains(grid)) { foreach (MySurvivalKit block in grid.GetFatBlocks().OfType <MySurvivalKit>()) { block.CustomData = "Custom Data was cleared."; } foreach (MyMedicalRoom block in grid.GetFatBlocks().OfType <MyMedicalRoom>()) { block.CustomData = "Custom Data was cleared."; } List <MyProgrammableBlock> removeThese = new List <MyProgrammableBlock>(); foreach (MyProgrammableBlock block in grid.GetFatBlocks().OfType <MyProgrammableBlock>()) { removeThese.Add(block); } foreach (MyProgrammableBlock block in removeThese) { grid.RemoveBlock(block.SlimBlock); } grids.Add(grid); } } } } if (grids.Count == 0) { Context.Respond("Could not find any grids you own. Are you looking directly at it?"); return; } MarketItem item = new MarketItem(); item.Setup(grids, name, amount, Context.Player.SteamUserId); if (list.AddItem(item)) { if (GridManager.SaveGridNoDelete(AlliancePlugin.path + "//ShipMarket//Grids//" + item.ItemId + ".xml", item.ItemId.ToString(), false, false, grids)) { Context.Respond("Added the item to the market!"); utils.WriteToJsonFile <MarketItem>(AlliancePlugin.path + "//ShipMarket//ForSale//" + item.ItemId + ".json", item); foreach (MyCubeGrid grid in grids) { if (grid != null) { grid.Close(); } } } } else { Context.Respond("Failed to add the grid to the market. Try again."); } }
public void SaveToHangar() { if (!AlliancePlugin.config.HangarEnabled) { Context.Respond("Alliance hangar is not enabled."); return; } if (MySession.Static.IsSaveInProgress) { Context.Respond("World is saving! Try again soon."); return; } if (cooldowns.TryGetValue(Context.Player.IdentityId, out DateTime value)) { if (DateTime.Now <= value) { Context.Respond(GetCooldownMessage(value)); return; } else { cooldowns[Context.Player.IdentityId] = DateTime.Now.AddSeconds(60); } } else { cooldowns.Add(Context.Player.IdentityId, DateTime.Now.AddSeconds(60)); } if (MyGravityProviderSystem.IsPositionInNaturalGravity(Context.Player.GetPosition())) { Context.Respond("You cannot use this command in natural gravity!"); return; } foreach (DeniedLocation denied in AlliancePlugin.HangarDeniedLocations) { if (Vector3.Distance(Context.Player.GetPosition(), new Vector3(denied.x, denied.y, denied.z)) <= denied.radius) { Context.Respond("Cannot hangar here! Too close to a denied location."); return; } } Boolean console = false; if (Context.Player == null) { console = true; } MyFaction fac = MySession.Static.Factions.GetPlayerFaction(Context.Player.IdentityId); if (fac == null) { Context.Respond("You must be in a faction to use alliance features."); return; } Alliance alliance = AlliancePlugin.GetAlliance(fac); if (alliance == null) { Context.Respond("You are not a member of an alliance."); return; } if (AlliancePlugin.HasFailedUpkeep(alliance)) { Context.Respond("Alliance failed to pay upkeep. Upgrades disabled."); return; } if (!alliance.HasAccess(Context.Player.SteamUserId, AccessLevel.HangarSave)) { Context.Respond("Current rank does not have access to hangar save."); return; } if (alliance.hasUnlockedHangar) { HangarData hangar = alliance.LoadHangar(); if (hangar == null) { Context.Respond("Error loading the hangar."); return; } string name = ""; int pcu = 0; if (hangar.getAvailableSlot() > 0) { ConcurrentBag <MyGroups <MyCubeGrid, MyGridPhysicalGroupData> .Group> gridWithSubGrids = GridFinder.FindLookAtGridGroup(Context.Player.Character); List <MyCubeGrid> grids = new List <MyCubeGrid>(); foreach (var item in gridWithSubGrids) { foreach (MyGroups <MyCubeGrid, MyGridPhysicalGroupData> .Node groupNodes in item.Nodes) { MyCubeGrid grid = groupNodes.NodeData; if (grid.Projector != null) { continue; } if (FacUtils.IsOwnerOrFactionOwned(grid, Context.Player.IdentityId, true)) { pcu += grid.BlocksPCU; foreach (MyProjectorBase proj in grid.GetFatBlocks().OfType <MyProjectorBase>()) { proj.Clipboard.Clear(); } grids.Add(grid); if (name == "") { name = grid.DisplayName; name = name.Replace("/", ""); name = name.Replace("-", ""); name = name.Replace("\\", ""); } } else { Context.Respond("The grid you are looking at includes a grid that isnt owned by you or a faction member."); return; } } } if (grids.Count == 0) { Context.Respond("Could not find grid."); return; } if (name == "") { name = "Temporary Name"; } if (pcu >= AlliancePlugin.config.MaxHangarSlotPCU) { Context.Respond("PCU is greater than the configured maximum"); return; } bool result = hangar.SaveGridToHangar(name + "_" + string.Format("{0:yyyy-MM-dd_HH-mm-ss-fff}", DateTime.Now), Context.Player.SteamUserId, alliance, Context.Player.Character.PositionComp.GetPosition(), fac, grids, Context.Player.IdentityId); if (!result) { Context.Respond("Could not save. Are enemies within 15km?"); } else { Context.Respond("Grid saved."); foreach (MyCubeGrid grid in grids) { if (grid != null) { grid.Close(); } } } } else { Context.Respond("Hangar is full, to upgrade use !ah upgrade true."); } } else { Context.Respond("Alliance has not unlocked the hangar to unlock use !ah unlock."); } }