예제 #1
0
        public static void CloseDevice()
        {
            var player = GetLastClosedBy();

            if (!GetIsPC(player) || GetIsDM(player))
            {
                return;
            }

            var device = OBJECT_SELF;

            for (var item = GetFirstItemInInventory(device); GetIsObjectValid(item); item = GetNextItemInInventory(device))
            {
                var resref = GetResRef(item);

                if (CommandResrefs.Contains(resref))
                {
                    DestroyObject(item);
                }
                else
                {
                    Item.ReturnItem(player, item);
                }
            }

            // If player is quitting crafting, clear out their state.
            var state = Craft.GetPlayerCraftingState(player);

            if (!state.IsOpeningMenu)
            {
                Craft.ClearPlayerCraftingState(player);
            }
        }
예제 #2
0
        /// <summary>
        /// Searches a player's inventory for components matching this recipe's requirements.
        /// </summary>
        /// <param name="player">The player to search.</param>
        private static void LoadComponents(uint player)
        {
            var device = OBJECT_SELF;
            var state  = Craft.GetPlayerCraftingState(player);
            var recipe = Craft.GetRecipe(state.SelectedRecipe);

            for (var item = GetFirstItemInInventory(player); GetIsObjectValid(item); item = GetNextItemInInventory(player))
            {
                var resref = GetResRef(item);

                if (recipe.Components.ContainsKey(resref))
                {
                    Item.ReturnItem(device, item);
                }
            }
        }
예제 #3
0
        public static void TakeItem()
        {
            var disturbType = GetInventoryDisturbType();

            if (disturbType != DisturbType.Removed)
            {
                return;
            }

            var player = GetLastDisturbed();
            var item   = GetInventoryDisturbItem();
            var resref = GetResRef(item);
            var device = OBJECT_SELF;
            var state  = Craft.GetPlayerCraftingState(player);

            if (state.IsAutoCrafting)
            {
                SendMessageToPC(player, ColorToken.Red("You are auto-crafting."));
                return;
            }

            // Auto-craft item
            if (resref == AutoCraftItemResref)
            {
                Item.ReturnItem(device, item);
                AutoCraftItem(player);
            }
            // Manually craft the item
            else if (resref == CraftItemResref)
            {
                Item.ReturnItem(device, item);
                CraftItem(player);
            }
            // Load components into container
            else if (resref == LoadComponentsResref)
            {
                Item.ReturnItem(device, item);
                LoadComponents(player);
            }
            // Select a different recipe
            else if (resref == SelectRecipeResref)
            {
                Item.ReturnItem(device, item);
                SelectRecipe(player);
            }
        }
예제 #4
0
        public static void MarketTerminalDisturbed()
        {
            if (GetInventoryDisturbType() != DisturbType.Added)
            {
                return;
            }

            var player        = GetLastDisturbed();
            var playerId      = GetObjectUUID(player);
            var dbPlayer      = DB.Get <Player>(playerId);
            var dbPlayerStore = DB.Get <PlayerStore>(playerId);
            var item          = GetInventoryDisturbItem();
            var itemId        = GetObjectUUID(item);
            var serialized    = Object.Serialize(item);
            var listingLimit  = 5 + dbPlayer.SeedProgress.Rank * 5;

            if (dbPlayerStore.ItemsForSale.Count >= listingLimit || // Listing limit reached.
                GetBaseItemType(item) == BaseItem.Gold ||           // Gold can't be listed.
                string.IsNullOrWhiteSpace(GetResRef(item)) ||       // Items without resrefs can't be listed.
                GetHasInventory(item))                              // Bags and other containers can't be listed.
            {
                Item.ReturnItem(player, item);
                SendMessageToPC(player, "This item cannot be listed.");
                return;
            }

            dbPlayerStore.ItemsForSale.Add(itemId, new PlayerStoreItem
            {
                Data      = serialized,
                Name      = GetName(item),
                Price     = 0,
                StackSize = GetItemStackSize(item)
            });

            DB.Set(playerId, dbPlayerStore);
            DestroyObject(item);

            SendMessageToPC(player, $"Listing limit: {dbPlayerStore.ItemsForSale.Count} / {5 + dbPlayer.SeedProgress.Rank * 5}");
        }