public static void PolluteAir(User user) { for (int i = 0; i < 50; i++) { WorldObjectManager.TryToAdd(WorldObjectManager.GetTypeFromName("APGenObject"), user, World.GetTopPos(World.GetRandomLandPos().XZ) + Vector3i.Up, Quaternion.Identity); } }
public override Result OnAreaValid(Player player, Vector3i position, Quaternion rotation) { Deed deed = PropertyManager.FindNearbyDeedOrCreate(player.User, position.XZ); foreach (var plot in WorldObject.GetOccupiedPropertyPositions(typeof(StarterCampObject), position, rotation)) { PropertyManager.Claim(deed.Id, player.User, player.User.Inventory, plot); } var camp = WorldObjectManager.TryToAdd(typeof(CampsiteObject), player.User, position, rotation, false); var stockpile = WorldObjectManager.TryToAdd(typeof(TinyStockpileObject), player.User, position + rotation.RotateVector(Vector3i.Right * 3), rotation, false); player.User.OnWorldObjectPlaced.Invoke(camp); player.User.Markers.Add(camp.Position3i + Vector3i.Up, camp.UILinkContent()); player.User.Markers.Add(stockpile.Position3i + Vector3i.Up, stockpile.UILinkContent()); var storage = camp.GetComponent <PublicStorageComponent>(); var changeSet = new InventoryChangeSet(storage.Inventory); PlayerDefaults.GetDefaultCampsiteInventory().ForEach(x => { changeSet.AddItems(x.Key, x.Value, storage.Inventory); }); changeSet.Apply(); return(Result.Succeeded); }
public override InteractResult OnActLeft(InteractionContext context) { // if I target a pipe with the wrench, I transform it to a connector set to input if (context.HasBlock && context.Block is BaseTransportPipeBlock && Utils.SearchForConnectedInventory(context.BlockPosition.Value) != null) { //Removing the block and add the connector World.DeleteBlock(context.BlockPosition.Value); ConnectorObject connector = WorldObjectManager.TryToAdd <ConnectorObject>(context.Player.User, context.BlockPosition.Value, Quaternion.Identity); // If the conenctor can't be added just reset the action if (connector == null) { World.SetBlock(context.Block.GetType(), context.BlockPosition.Value); return(InteractResult.NoOp); } // I instanciate the connector info with the info from the pipe TransportPipeInfo info = null; if (TransportPipeManager.pipesInfo.TryGetValue(context.BlockPosition.Value, out info)) { connector.info = info; context.Player.SendTemporaryMessage($"Set to input"); connector.mode = CONNECTOR_MODE.Input; BurnCalories(context.Player); UseDurability(1.0f, context.Player); return(InteractResult.Success); } else { // If the pipe don't contains any info I recreate the linker from the pipe and reset the action connector.Destroy(); World.SetBlock(context.Block.GetType(), context.BlockPosition.Value); Utils.RecreateLinker(context.BlockPosition.Value, new TransportPipeLinker()); } } // If I use the wrench on a connector if (context.HasTarget && context.Target is ConnectorObject) { // I process the config inside the connector class (context.Target as ConnectorObject).ProcessConfig(context); BurnCalories(context.Player); UseDurability(1.0f, context.Player); return(InteractResult.Success); } return(InteractResult.NoOp); }
public override Result OnAreaValid(Player player, Vector3i position, Quaternion rotation) { Result authAtPosOne = AuthManager.IsAuthorized(position, player.User); Result authAtPosTwo = AuthManager.IsAuthorized((position + rotation.RotateVector(Vector3i.Right * 3)).Round, player.User); if (!authAtPosOne.Success) { return(authAtPosOne); } else if (!authAtPosTwo.Success) { return(authAtPosTwo); } Deed deed = PropertyManager.FindNearbyDeedOrCreate(player.User, position.XZ); var dist = position.XZ - World.GetPropertyPos(position.XZ) - (World.PropertyPlotLength / 2); if (dist.x == 0 || dist.y == 0) { dist = rotation.RotateVector(new Vector3i(1, 0, 1)).XZi; } dist = new Vector2i(Math.Sign(dist.x), Math.Sign(dist.y)); Vector2i.XYIter(2).ForEach(x => PropertyManager.Claim(deed.Id, player.User, position.XZ + (new Vector2i(dist.x * x.x, dist.y * x.y) * World.PropertyPlotLength))); var camp = WorldObjectManager.TryToAdd(typeof(CampsiteObject), player.User, position, rotation, false); var stockpile = WorldObjectManager.TryToAdd(typeof(TinyStockpileObject), player.User, position + rotation.RotateVector(Vector3i.Right * 3), rotation, false); player.User.OnWorldObjectPlaced.Invoke(camp); player.User.Markers.Add(camp.Position3i + Vector3i.Up, camp.UILinkContent()); player.User.Markers.Add(stockpile.Position3i + Vector3i.Up, stockpile.UILinkContent()); var storage = camp.GetComponent <PublicStorageComponent>(); var changeSet = new InventoryChangeSet(storage.Inventory); PlayerDefaults.GetDefaultCampsiteInventory().ForEach(x => { changeSet.AddItems(x.Key, x.Value, storage.Inventory); }); changeSet.Apply(); return(Result.Succeeded); }