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(); } } }
//[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)); }
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); } }
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); } }
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); } }