Esempio n. 1
0
        private void InventoryChanged(User obj)
        {
            Inventory inventory = GetComponent <PublicStorageComponent>().Storage;
            User      owner     = OwnerUser;
            User      creator   = Creator;

            if (owner == null && creator == null)
            {
                return;
            }
            if (owner == null)
            {
                owner = creator;
            }
            if (creator == null)
            {
                creator = owner;
            }


            if (!SkillUtils.UserHasSkill(owner, RequiredSkill, RequiredLevel) && (!SkillUtils.UserHasSkill(creator, RequiredSkill, RequiredLevel)))
            {
                if ((inventory.TotalNumberOfItems(typeof(RuinedCarcassItem)) == 0) && (!inventory.IsEmpty))
                {
                    InventoryChangeSet changes = new InventoryChangeSet(inventory);
                    changes.Clear();
                    changes.AddItem <RuinedCarcassItem>();
                    Result result = changes.TryApply();
                }
            }
        }
Esempio n. 2
0
        //[Serialized] private string description = "An Empty note. You can copy text from a sign to it or use /writenote to add text.";
        //[Serialized] private string name = "Empty Note";
        //[Serialized] private bool empty = true;


        public override InteractResult OnActRight(InteractionContext context)
        {
            if (context.HasTarget && context.Target is WorldObject)
            {
                WorldObject wo = context.Target as WorldObject;
                if (wo.HasComponent <CustomTextComponent>())
                {
                    NoteItem noteItem = (NoteItem)Item.Create <NoteItem>();

                    noteItem.description = wo.GetComponent <CustomTextComponent>().Text;
                    noteItem.owner       = context.Player.User;

                    InventoryChangeSet inventoryChange = new InventoryChangeSet(context.Player.User.Inventory, context.Player.User);
                    inventoryChange.RemoveItem(typeof(EmptyNoteItem));
                    inventoryChange.AddItem(noteItem);
                    if (inventoryChange.TryApply().Success)
                    {
                        return(InteractResult.Success);
                    }
                    else
                    {
                        return(InteractResult.Failure("Not enough room in inventory".ToLocString()));//ChatManager.ServerMessageToPlayer("Not enough room in inventory",context.Player.User);
                    }
                }
            }


            return(base.OnActRight(context));
        }
Esempio n. 3
0
        public override void OnUsed(Player player, ItemStack itemStack)
        {
            if (player.User != sender && player.User != recipient)
            {
                ChatManager.ServerMessageToPlayer("You are not allowed to open this", player.User);
                return;
            }


            InventoryChangeSet inventoryChange = new InventoryChangeSet(player.User.Inventory, player.User);

            inventoryChange.ModifyStack(itemStack, contentquantity - 1, content);
            if (inventoryChange.TryApply().Success)
            {
                return;
            }
            else
            {
                ChatManager.ServerMessageToPlayer("Not enough room in inventory", player.User);
            }
        }
Esempio n. 4
0
        public static void WriteText(User user, string text)
        {
            //string onestringtext = string.Concat(text);

            NoteItem noteItem = (NoteItem)Item.Create <NoteItem>();

            noteItem.description = text;
            noteItem.owner       = user;

            InventoryChangeSet inventoryChange = new InventoryChangeSet(user.Inventory, user);

            inventoryChange.AddItem(noteItem);
            inventoryChange.RemoveItem(typeof(EmptyNoteItem));
            if (inventoryChange.TryApply().Success)
            {
                return;
            }
            else
            {
                ChatManager.ServerMessageToPlayer("Not enough room in inventory", user);
            }
        }
Esempio n. 5
0
        public static void Seal(User user, string target)
        {
            UserIdType idtype;
            User       targetuser = UserManager.FindUser(target, out idtype);

            if (idtype == UserIdType.Unknown)
            {
                ChatManager.ServerMessageToPlayer("User " + target + " not found", user);
                return;
            }
            if (!(user.Inventory.Toolbar.SelectedItem is NoteItem))
            {
                ChatManager.ServerMessageToPlayer("No Note selected", user);
                return;
            }

            LetterItem letter = (LetterItem)Item.Create <LetterItem>();

            letter.content         = user.Inventory.Toolbar.SelectedItem;
            letter.contentquantity = user.Inventory.Toolbar.SelectedStack.Quantity;
            letter.recipient       = targetuser;
            letter.sender          = user;


            InventoryChangeSet inventoryChange = new InventoryChangeSet(user.Inventory, user);

            inventoryChange.RemoveItem(typeof(EnvelopeItem));
            inventoryChange.ModifyStack(user.Inventory.Toolbar.SelectedStack, 1 - user.Inventory.Toolbar.SelectedStack.Quantity, letter);

            if (inventoryChange.TryApply().Success)
            {
                return;
            }
            else
            {
                ChatManager.ServerMessageToPlayer("Not enough Envelopes found", user);
            }
        }
    private bool TryDamageStump(INetObject damager, float amount, InteractionContext context)
    {
        if (this.Fallen && this.stumpHealth > 0)
        {
            List <IAtomicAction> actions = new List <IAtomicAction>();
            if (damager is Player)
            {
                var action = PlayerActions.RemoveStump.CreateAtomicAction(((Player)damager).User, this);
                actions.Add(action);

                if (!action.CanApplyNonDisposing().Notify((Player)damager))
                {
                    // We only want to dispose the action if it is invalid.  Othewise we want to keep it around to possibly apply later.
                    action.Dispose();
                    return(false);
                }
            }

            this.stumpHealth = Mathf.Max(0, this.stumpHealth - amount);

            if (this.stumpHealth <= 0)
            {
                if (!new MultiAtomicAction(actions).TryApply().Success)
                {
                    throw new Exception("Removing this stump was verified to be legal a moment ago, but is not anymore.");
                }

                if (World.GetBlock(this.Position.Round).GetType() == this.Species.BlockType)
                {
                    World.DeleteBlock(this.Position.Round);
                }
                this.stumpHealth = 0;
                //give tree resources
                Player player = (Player)damager;
                if (player != null)
                {
                    InventoryChangeSet changes = new InventoryChangeSet(player.User.Inventory, player.User);
                    var trunkResources         = this.Species.TrunkResources;
                    if (trunkResources != null)
                    {
                        trunkResources.ForEach(x => changes.AddItems(x.Key, x.Value.RandInt));
                    }
                    else
                    {
                        DebugUtils.Fail("Trunk resources missing for: " + this.Species.Name);
                    }
                    changes.TryApply();
                }
                this.RPC("DestroyStump");

                // Let another plant grow here
                EcoSim.PlantSim.UpRootPlant(this);
            }
            else
            {
                new MultiAtomicAction(actions).Dispose();
            }

            this.Save();
            this.CheckDestroy();
            return(true);
        }
        else
        {
            return(false);
        }
    }