Exemplo n.º 1
0
    public override Result OnAreaValid(Player player, Vector3i position, Quaternion rotation)
    {
        // instead of placing as a world object, spawn blocks
        Vector3i placementDir = rotation.RotateVector(Vector3i.Left).Round;
        var      blockTypes   = GetBlockTypesForDirection(placementDir);

        foreach (var blockType in blockTypes)
        {
            UsableItemUtils.PlayerPlaceBlock(blockType, position, player, false);
            position += placementDir;
        }

        return(Result.Succeeded);
    }
 public override void BlockInteraction(Vector3i pos, Quaternion rot, VehicleComponent vehicle, Inventory inv = null)
 {
     if (this.enabled)
     {
         foreach (var offset in area)
         {
             var    targetPos  = (rot.RotateVector(offset) + pos).XYZi;
             Result authResult = AuthManager.IsAuthorized(targetPos, vehicle.Driver.User);
             if (World.GetBlock(targetPos + Vector3i.Down).Is <Tillable>() && authResult.Success)
             {
                 if (UsableItemUtils.TryDestroyPlant(vehicle.Driver, vehicle.Parent.Position3i).TryApply())
                 {
                     World.SetBlock <TilledDirtBlock>(targetPos + Vector3i.Down);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
    public override InteractResult OnActLeft(InteractionContext context)
    {
        if (context.HasBlock)
        {
            var abovePos   = context.BlockPosition.Value + Vector3i.Up;
            var aboveBlock = World.GetBlock(abovePos);
            if (!aboveBlock.Is <Solid>() && context.Block.Is <Tillable>() && !(aboveBlock is TreeBlock))
            {
                return((InteractResult)this.PlayerPlaceBlock <TilledDirtBlock>(
                           context.BlockPosition.Value, context.Player, true, 1, UsableItemUtils.TryDestroyPlant(context.Player, abovePos)));
            }
            else
            {
                return(InteractResult.NoOp);
            }
        }

        return(base.OnActLeft(context));
    }
        public override InteractResult OnActLeft(InteractionContext context)
        {
            if (context.HasBlock)
            {
                if (context.Block is PlantBlock)
                {
                    var plant = EcoSim.PlantSim.GetPlant(context.BlockPosition.Value);
                    if (plant != null && plant is IHarvestable)
                    {
                        Result result = ((IHarvestable)plant).TryHarvest(context.Player, false);
                        if (result.Success)
                        {
                            this.BurnCalories(context.Player);
                        }
                        return((InteractResult)result);
                    }
                    else
                    {
                        return((InteractResult)this.PlayerDeleteBlock(context.BlockPosition.Value, context.Player, false));
                    }
                }
                else if (context.Block.Is <Diggable>())
                {
                    if (TreeEntity.TreeRootsBlockDigging(context))
                    {
                        return(InteractResult.Failure(Localizer.DoStr("You attempt to dig up the soil, but the roots are too strong!")));
                    }

                    IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant(context.Player, context.BlockPosition.Value + Vector3i.Up);
                    return((InteractResult)this.PlayerDeleteBlock(
                               context.BlockPosition.Value, context.Player, true, 1, new DirtItem(), destroyAction));
                }
                else
                {
                    return(InteractResult.NoOp);
                }
            }
            else
            {
                return(InteractResult.NoOp);
            }
        }
Exemplo n.º 5
0
        public override InteractResult OnActLeft(InteractionContext context)
        {
            if (!context.HasBlock)
            {
                return(InteractResult.NoOp);
            }

            Type blockType = GetRoadBlock(context.Block);

            if (blockType != null)
            {
                IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant(
                    context.Player, context.BlockPosition.Value + Vector3i.Up, DeathType.Construction);
                return((InteractResult)PlayerPlaceBlock(blockType, context.BlockPosition.Value, context.Player, true, 1, destroyAction));
            }
            else
            {
                return(InteractResult.NoOp);
            }
        }
        public override InteractResult OnActLeft(InteractionContext context)
        {
            if (!context.HasBlock)
            {
                return(InteractResult.NoOp);
            }

            Type blockType = this.GetRoadBlock(context.Block);

            if (blockType != null)
            {
                if (TreeEntity.TreeRootsBlockDigging(context))
                {
                    return(InteractResult.Failure(Localizer.DoStr("You attempt to make a road, but the roots are too strong!")));
                }
                IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant(
                    context.Player, context.BlockPosition.Value + Vector3i.Up, DeathType.Construction);
                return((InteractResult)this.PlayerPlaceBlock(blockType, context.BlockPosition.Value, context.Player, true, 1, destroyAction));
            }
            else
            {
                return(InteractResult.NoOp);
            }
        }