Exemple #1
0
 public static InvPayload Create(InventoryType type, params UInt256[] hashes)
 {
     return new InvPayload
     {
         Inventories = hashes.Select(p => new InventoryVector { Type = type, Hash = p }).ToArray()
     };
 }
 internal InventoryPage(InventoryType type, StorageType storage, byte size, Item bag = null)
 {
     _type = type;
                 _storage = storage;
                 Size = size;
                 Bag = bag;
 }
        /// <summary>
        /// Creates a notecard in the objects folder and specify an item id.
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="itemName"></param>
        /// <param name="itemId"></param>
        /// <param name="assetId"></param>
        /// <param name="userId"></param>
        /// <param name="type">Type of item to create</param>
        /// <returns></returns>
        public static InventoryItemBase CreateInventoryItem(
            Scene scene, string itemName, UUID itemId, UUID assetId, UUID userId, InventoryType type)
        {
            AssetBase asset = null;

            if (type == InventoryType.Notecard)
                asset = AssetHelpers.CreateAsset(scene, userId);
            else if (type == InventoryType.Object)
                asset = AssetHelpers.CreateAsset(assetId, SceneHelpers.CreateSceneObject(1, userId));
            else
                throw new Exception(string.Format("Inventory type {0} not supported", type));

            scene.AssetService.Store(asset);

            InventoryItemBase item = new InventoryItemBase();
            item.Name = itemName;
            item.AssetID = asset.FullID;
            item.ID = itemId;
            item.Owner = userId;
            item.AssetType = asset.Type;
            item.InvType = (int)type;

            InventoryFolderBase folder = scene.InventoryService.GetFolderForType(userId, AssetType.Notecard);
            
            item.Folder = folder.ID;
            scene.AddInventoryItem(item);
            
            return item;
        }
Exemple #4
0
 public InventoryPouch(InventoryType type, ushort[] legal, int maxcount, int offset, int size = -1)
 {
     Type = type;
     LegalItems = legal;
     MaxCount = maxcount;
     Offset = offset;
     PouchDataSize = size > -1 ? size : legal.Length;
 }
Exemple #5
0
 public InventoryItem (ushort iD, byte index, uint count, uint flag, uint price, ushort extra, InventoryType loc)
 {
     ID = iD;
     Index = index;
     Count = count;
     Flag = flag;
     Price = price;
     Extra = extra;
     Location = loc;
 }
        public Inventory(Character pOwner, InventoryType invtype, byte slotLimit = 96)
        {
            Items = new Dictionary<byte, Item>(slotLimit);
              Equips = new Dictionary<short, Equip>();

              if ((int)invtype >= 2 || (int)invtype <= 5)
                  ItemAmounts = new Dictionary<int, short>();

              SlotLimit = slotLimit;
              InventoryType = invtype;
              Owner = pOwner;
        }
        public virtual InventoryFolderBase GetFolderForType(UUID principalID, InventoryType invType, AssetType type)
        {
            Dictionary<string,object> ret = MakeRequest("GETFOLDERFORTYPE",
                    new Dictionary<string,object> {
                        { "PRINCIPAL", principalID.ToString() },
                        { "TYPE", ((int)type).ToString() },
                        { "INVTYPE", ((int)invType).ToString() }
                    });

            if (ret == null)
                return null;
            if (ret.Count == 0)
                return null;

            return BuildFolder((Dictionary<string, object>)ret["folder"]);
        }
        /// <summary>
        /// Creates a notecard in the objects folder and specify an item id.
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="itemName"></param>
        /// <param name="itemId"></param>
        /// <param name="itemType"></param>
        /// <param name="asset">The serialized asset for this item</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private static InventoryItemBase AddInventoryItem(
            Scene scene, string itemName, UUID itemId, InventoryType itemType, AssetBase asset, UUID userId)
        {
            scene.AssetService.Store(asset);

            InventoryItemBase item = new InventoryItemBase();
            item.Name = itemName;
            item.AssetID = asset.FullID;
            item.ID = itemId;
            item.Owner = userId;
            item.AssetType = asset.Type;
            item.InvType = (int)itemType;

            InventoryFolderBase folder = scene.InventoryService.GetFolderForType(userId, (AssetType)asset.Type);

            item.Folder = folder.ID;
            scene.AddInventoryItem(item);

            return item;
        }
Exemple #9
0
 public static InventoryItem CreateInventoryItem(InventoryType type, UUID id)
 {
     switch (type)
     {
         case InventoryType.Texture: return new InventoryTexture(id);
         case InventoryType.Sound: return new InventorySound(id);
         case InventoryType.CallingCard: return new InventoryCallingCard(id);
         case InventoryType.Landmark: return new InventoryLandmark(id);
         case InventoryType.Object: return new InventoryObject(id);
         case InventoryType.Notecard: return new InventoryNotecard(id);
         case InventoryType.Category: return new InventoryCategory(id);
         case InventoryType.LSL: return new InventoryLSL(id);
         case InventoryType.Snapshot: return new InventorySnapshot(id);
         case InventoryType.Attachment: return new InventoryAttachment(id);
         case InventoryType.Wearable: return new InventoryWearable(id);
         case InventoryType.Animation: return new InventoryAnimation(id);
         case InventoryType.Gesture: return new InventoryGesture(id);
         default: return new InventoryItem(type, id);
     }
 }
Exemple #10
0
        public Inventory(Int32 x, Int32 y, Int32 numPages)
        {
            _map = null;
            _gridSpace = null;
            _inventoryType = InventoryType.None;
            _owner = null;
            _doubleCheckBlock = false;
            _dirty = false;
            _x = x;
            _y = y;
            _numPages = numPages;

            if (_x <= 0)
                _x = 1;

            if (_y <= 0)
                _y = 1;

            if (_numPages <= 0)
                _numPages = 1;

            CreateGridSpace();
        }
Exemple #11
0
        /// <summary>
        /// Create an inventory item and upload asset data
        /// </summary>
        /// <param name="data">Asset data</param>
        /// <param name="name">Inventory item name</param>
        /// <param name="description">Inventory item description</param>
        /// <param name="assetType">Asset type</param>
        /// <param name="invType">Inventory type</param>
        /// <param name="folderID">Put newly created inventory in this folder</param>
        /// <param name="permissions">Permission of the newly created item 
        /// (EveryoneMask, GroupMask, and NextOwnerMask of Permissions struct are supported)</param>
        /// <param name="callback">Delegate that will receive feedback on success or failure</param>
        public void RequestCreateItemFromAsset(byte[] data, string name, string description, AssetType assetType,
            InventoryType invType, UUID folderID, Permissions permissions, ItemCreatedFromAssetCallback callback)
        {
            if (Client.Network.CurrentSim == null || Client.Network.CurrentSim.Caps == null)
                throw new Exception("NewFileAgentInventory capability is not currently available");

            Uri url = Client.Network.CurrentSim.Caps.CapabilityURI("NewFileAgentInventory");

            if (url != null)
            {
                OSDMap query = new OSDMap();
                query.Add("folder_id", OSD.FromUUID(folderID));
                query.Add("asset_type", OSD.FromString(Utils.AssetTypeToString(assetType)));
                query.Add("inventory_type", OSD.FromString(Utils.InventoryTypeToString(invType)));
                query.Add("name", OSD.FromString(name));
                query.Add("description", OSD.FromString(description));
                query.Add("everyone_mask", OSD.FromInteger((int)permissions.EveryoneMask));
                query.Add("group_mask", OSD.FromInteger((int)permissions.GroupMask));
                query.Add("next_owner_mask", OSD.FromInteger((int)permissions.NextOwnerMask));
                query.Add("expected_upload_cost", OSD.FromInteger(Client.Settings.UPLOAD_COST));

                // Make the request
                CapsClient request = new CapsClient(url);
                request.OnComplete += CreateItemFromAssetResponse;
                request.UserData = new object[] { callback, data, Client.Settings.CAPS_TIMEOUT, query };

                request.BeginGetResponse(query, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT);
            }
            else
            {
                throw new Exception("NewFileAgentInventory capability is not currently available");
            }
        }
Exemple #12
0
 public int CountItemInAnInventory(InventoryType inv)
 {
     return(GetAllItems().Count(s => s.Type == inv));
 }
Exemple #13
0
 public InventorySlotId(InventoryType type, ushort id, ItemSlotId slot)
 {
     Id   = new InventoryId(type, id);
     Slot = slot;
 }
Exemple #14
0
        public ItemInstance AddIntoBazaarInventory(InventoryType inventory, byte slot, byte amount)
        {
            ItemInstance inv = LoadBySlotAndType(slot, inventory);

            if (inv == null || amount > inv.Amount)
            {
                return(null);
            }
            ItemInstance invcopy = inv.DeepCopy();

            invcopy.Id = Guid.NewGuid();

            if (inv.Item.Type == InventoryType.Equipment)
            {
                for (short i = 0; i < 255; i++)
                {
                    if (LoadBySlotAndType <ItemInstance>(i, InventoryType.Bazaar) == null)
                    {
                        invcopy.Type        = InventoryType.Bazaar;
                        invcopy.Slot        = i;
                        invcopy.CharacterId = Owner.CharacterId;
                        DeleteFromSlotAndType(inv.Slot, inv.Type);
                        PutItem(invcopy);
                        break;
                    }
                }
                Owner.Session.SendPacket(UserInterfaceHelper.Instance.GenerateInventoryRemove(inventory, slot));
                return(invcopy);
            }
            if (amount >= inv.Amount)
            {
                for (short i = 0; i < 255; i++)
                {
                    if (LoadBySlotAndType <ItemInstance>(i, InventoryType.Bazaar) == null)
                    {
                        invcopy.Type        = InventoryType.Bazaar;
                        invcopy.Slot        = i;
                        invcopy.CharacterId = Owner.CharacterId;
                        DeleteFromSlotAndType(inv.Slot, inv.Type);
                        PutItem(invcopy);
                        break;
                    }
                }
                Owner.Session.SendPacket(UserInterfaceHelper.Instance.GenerateInventoryRemove(inventory, slot));
                return(invcopy);
            }

            invcopy.Amount = amount;
            inv.Amount    -= amount;

            for (short i = 0; i < 255; i++)
            {
                if (LoadBySlotAndType <ItemInstance>(i, InventoryType.Bazaar) == null)
                {
                    invcopy.Type        = InventoryType.Bazaar;
                    invcopy.Slot        = i;
                    invcopy.CharacterId = Owner.CharacterId;
                    PutItem(invcopy);
                    break;
                }
            }

            Owner.Session.SendPacket(inv.GenerateInventoryAdd());
            return(invcopy);
        }
Exemple #15
0
        public void MoveItem(InventoryType sourcetype, InventoryType desttype, short sourceSlot, byte amount, short destinationSlot, out ItemInstance sourceInventory, out ItemInstance destinationInventory)
        {
            Logger.Debug(Owner.Session.GenerateIdentity(), $"type: {sourcetype} sourceSlot: {sourceSlot} amount: {amount} destinationSlot: {destinationSlot}");

            // load source and destination slots
            sourceInventory      = LoadBySlotAndType(sourceSlot, sourcetype);
            destinationInventory = LoadBySlotAndType(destinationSlot, desttype);
            if (sourceInventory != null && amount <= sourceInventory.Amount)
            {
                if (destinationInventory == null)
                {
                    if (sourceInventory.Amount == amount)
                    {
                        sourceInventory.Slot = destinationSlot;
                        sourceInventory.Type = desttype;
                    }
                    else
                    {
                        ItemInstance itemDest = sourceInventory.DeepCopy();
                        sourceInventory.Amount -= amount;
                        itemDest.Amount         = amount;
                        itemDest.Type           = desttype;
                        itemDest.Id             = Guid.NewGuid();
                        AddToInventoryWithSlotAndType(itemDest, desttype, destinationSlot);
                    }
                }
                else
                {
                    if (destinationInventory.ItemVNum == sourceInventory.ItemVNum && (byte)sourceInventory.Item.Type != 0)
                    {
                        if (destinationInventory.Amount + amount > MAX_ITEM_AMOUNT)
                        {
                            int saveItemCount = destinationInventory.Amount;
                            destinationInventory.Amount = MAX_ITEM_AMOUNT;
                            sourceInventory.Amount      = (byte)(saveItemCount + sourceInventory.Amount - MAX_ITEM_AMOUNT);
                        }
                        else
                        {
                            destinationInventory.Amount += amount;
                            sourceInventory.Amount      -= amount;

                            // item with amount of 0 should be removed
                            if (sourceInventory.Amount == 0)
                            {
                                DeleteFromSlotAndType(sourceInventory.Slot, sourceInventory.Type);
                            }
                        }
                    }
                    else
                    {
                        // add and remove save inventory
                        destinationInventory = TakeItem(destinationInventory.Slot, destinationInventory.Type);
                        if (destinationInventory == null)
                        {
                            return;
                        }
                        destinationInventory.Slot = sourceSlot;
                        destinationInventory.Type = sourcetype;
                        sourceInventory           = TakeItem(sourceInventory.Slot, sourceInventory.Type);
                        if (sourceInventory == null)
                        {
                            return;
                        }
                        sourceInventory.Slot = destinationSlot;
                        sourceInventory.Type = desttype;
                        PutItem(destinationInventory);
                        PutItem(sourceInventory);
                    }
                }
            }
            sourceInventory      = LoadBySlotAndType(sourceSlot, sourcetype);
            destinationInventory = LoadBySlotAndType(destinationSlot, desttype);
        }
Exemple #16
0
        public void RequestCreateItemFromAsset(byte[] data, string name, string description, AssetType assetType,
            InventoryType invType, LLUUID folderID, ItemCreatedFromAssetCallback callback)
        {
            if (_Client.Network.CurrentSim == null || _Client.Network.CurrentSim.Caps == null)
                throw new Exception("NewFileAgentInventory capability is not currently available");

            Uri url = _Client.Network.CurrentSim.Caps.CapabilityURI("NewFileAgentInventory");

            if (url != null)
            {
                LLSDMap query = new LLSDMap();
                query.Add("folder_id", LLSD.FromUUID(folderID));
                query.Add("asset_type", LLSD.FromString(AssetTypeToString(assetType)));
                query.Add("inventory_type", LLSD.FromString(InventoryTypeToString(invType)));
                query.Add("name", LLSD.FromString(name));
                query.Add("description", LLSD.FromString(description));

                byte[] postData = StructuredData.LLSDParser.SerializeXmlBytes(query);

                // Make the request
                CapsClient request = new CapsClient(url);
                request.OnComplete += new CapsClient.CompleteCallback(CreateItemFromAssetResponse);
                request.UserData = new KeyValuePair<ItemCreatedFromAssetCallback, byte[]>(callback, data);
                request.StartRequest(postData);
            }
            else
            {
                throw new Exception("NewFileAgentInventory capability is not currently available");
            }
        }
Exemple #17
0
        public bool CanAddItem(short itemVnum)
        {
            InventoryType type = ServerManager.Instance.GetItem(itemVnum).Type;

            return(CanAddItem(type));
        }
 public void changeRoomInventory(Room room, InventoryType inventory)
 {
     roomsRepository.changeRoomInventory(room, inventory);
 }
 public InventoryVector(InventoryType type, uint256 hash)
 {
     this.Type = type;
     this.Hash = hash;
 }
Exemple #20
0
        public override void Use(ClientSession session, ref ItemInstance inv, byte option = 0, string[] packetsplit = null)
        {
            switch (Effect)
            {
            default:
                bool delay = false;
                if (option == 255)
                {
                    delay  = true;
                    option = 0;
                }
                Mate mate = null;
                if (option != 0)
                {
                    mate = session.Character.Mates.FirstOrDefault(s => s.MateType == MateType.Partner && s.PetId == (option - 1));
                }
                short         slot      = inv.Slot;
                InventoryType equipment = InventoryType.Wear;
                switch (option)
                {
                case 1:
                    equipment = InventoryType.FirstPartnerInventory;
                    break;

                case 2:
                    equipment = InventoryType.SecondPartnerInventory;
                    break;

                case 3:
                    equipment = InventoryType.ThirdPartnerInventory;
                    break;
                }

                InventoryType itemToWearType = inv.Type;

                if (inv == null)
                {
                    return;
                }

                if (ItemValidTime > 0 && inv.IsBound)
                {
                    inv.ItemDeleteTime = DateTime.Now.AddSeconds(ItemValidTime);
                }
                if (!inv.IsBound)
                {
                    if (!delay && (EquipmentSlot == EquipmentType.Fairy && (MaxElementRate == 70 || MaxElementRate == 80) || EquipmentSlot == EquipmentType.CostumeHat || EquipmentSlot == EquipmentType.CostumeSuit || EquipmentSlot == EquipmentType.WeaponSkin))
                    {
                        session.SendPacket($"qna #u_i^1^{session.Character.CharacterId}^{(byte)itemToWearType}^{slot}^1 {Language.Instance.GetMessageFromKey("ASK_BIND")}");
                        return;
                    }
                    if (delay)
                    {
                        inv.BoundCharacterId = session.Character.CharacterId;
                    }
                }

                double timeSpanSinceLastSpUsage = (DateTime.Now - Process.GetCurrentProcess().StartTime.AddSeconds(-50)).TotalSeconds - session.Character.LastSp;

                if (EquipmentSlot == EquipmentType.Sp && inv.Rare == -2)
                {
                    session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_EQUIP_DESTROYED_SP"), 0));
                    return;
                }

                if (option == 0)
                {
                    if (EquipmentSlot == EquipmentType.Sp && timeSpanSinceLastSpUsage <= session.Character.SpCooldown && session.Character.Inventory.LoadBySlotAndType <SpecialistInstance>((byte)EquipmentType.Sp, InventoryType.Specialist) != null)
                    {
                        session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SP_INLOADING"), session.Character.SpCooldown - (int)Math.Round(timeSpanSinceLastSpUsage)), 0));
                        return;
                    }

                    if (ItemType != ItemType.Weapon && ItemType != ItemType.Armor && ItemType != ItemType.Fashion && ItemType != ItemType.Jewelery && ItemType != ItemType.Specialist ||
                        LevelMinimum > (IsHeroic ? session.Character.HeroLevel : session.Character.Level) || Sex != 0 && Sex != (byte)session.Character.Gender + 1 ||
                        ItemType != ItemType.Jewelery && EquipmentSlot != EquipmentType.Boots && EquipmentSlot != EquipmentType.Gloves && ((Class >> (byte)session.Character.Class) & 1) != 1)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }

                    if (session.Character.UseSp)
                    {
                        SpecialistInstance sp = session.Character.Inventory.LoadBySlotAndType <SpecialistInstance>((byte)EquipmentType.Sp, equipment);

                        if (sp != null && sp.Item.Element != 0 && EquipmentSlot == EquipmentType.Fairy && Element != sp.Item.Element && Element != sp.Item.SecondaryElement)
                        {
                            session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("BAD_FAIRY"), 0));
                            return;
                        }
                    }

                    if (session.Character.UseSp && EquipmentSlot == EquipmentType.Sp)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SP_BLOCKED"), 10));
                        return;
                    }

                    if (session.Character.JobLevel < LevelJobMinimum)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("LOW_JOB_LVL"), 10));
                        return;
                    }
                }
                else if (mate != null)
                {
                    if (mate.Level < LevelMinimum)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }
                    switch (EquipmentSlot)
                    {
                    case EquipmentType.Armor:
                        if (ItemSubType == 4)
                        {
                            mate.ArmorInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    case EquipmentType.MainWeapon:
                        if (ItemSubType == 12)
                        {
                            mate.WeaponInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    case EquipmentType.Gloves:
                        mate.GlovesInstance = inv;
                        break;

                    case EquipmentType.Boots:
                        mate.BootsInstance = inv;
                        break;

                    case EquipmentType.Sp:
                        if (ItemSubType == 4)
                        {
                            mate.SpInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    default:
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }
                }

                ItemInstance currentlyEquippedItem = session.Character.Inventory.LoadBySlotAndType((short)EquipmentSlot, equipment);

                if (currentlyEquippedItem == null)
                {
                    // move from equipment to wear
                    session.Character.Inventory.MoveInInventory(inv.Slot, itemToWearType, equipment);
                    session.SendPacket(UserInterfaceHelper.Instance.GenerateInventoryRemove(itemToWearType, slot));
                }
                else
                {
                    // move from wear to equipment and back
                    session.Character.Inventory.MoveInInventory(currentlyEquippedItem.Slot, equipment, itemToWearType, inv.Slot);
                    session.SendPacket(currentlyEquippedItem.GenerateInventoryAdd());
                    session.Character.EquipmentBCards = session.Character.EquipmentBCards.Where(o => o.ItemVNum != currentlyEquippedItem.ItemVNum);
                    switch (currentlyEquippedItem.Slot)
                    {
                    case (byte)EquipmentType.Armor:
                        session.Character.Inventory.Armor = null;
                        break;

                    case (byte)EquipmentType.MainWeapon:
                        session.Character.Inventory.PrimaryWeapon = null;
                        break;

                    case (byte)EquipmentType.SecondaryWeapon:
                        session.Character.Inventory.SecondaryWeapon = null;
                        break;
                    }
                }
                inv.Item.BCards.ForEach(s => session.Character.EquipmentBCards.Add(s));

                if (inv is WearableInstance wearableInstance)
                {
                    if (wearableInstance.EquipmentOptions != null)
                    {
                        switch (wearableInstance.Item.ItemType)
                        {
                        case ItemType.Armor:
                        case ItemType.Weapon:
                            switch (wearableInstance.Slot)
                            {
                            case (byte)EquipmentType.Armor:
                                session.Character.Inventory.Armor = wearableInstance;
                                break;

                            case (byte)EquipmentType.MainWeapon:
                                session.Character.Inventory.PrimaryWeapon = wearableInstance;
                                break;

                            case (byte)EquipmentType.SecondaryWeapon:
                                session.Character.Inventory.SecondaryWeapon = wearableInstance;
                                break;
                            }
                            EquipmentOptionHelper.Instance.ShellToBCards(wearableInstance.EquipmentOptions, wearableInstance.ItemVNum).ForEach(s => session.Character.EquipmentBCards.Add(s));
                            break;

                        case ItemType.Jewelery:
                            EquipmentOptionHelper.Instance.CellonToBCards(wearableInstance.EquipmentOptions, wearableInstance.ItemVNum).ForEach(s => session.Character.EquipmentBCards.Add(s));
                            break;
                        }
                    }
                }

                if (option == 0)
                {
                    session.SendPacket(session.Character.GenerateStatChar());
                    session.CurrentMapInstance?.Broadcast(session.Character.GenerateEq());
                    session.SendPacket(session.Character.GenerateEquipment());
                    session.CurrentMapInstance?.Broadcast(session.Character.GeneratePairy());

                    switch (EquipmentSlot)
                    {
                    case EquipmentType.Fairy:
                        WearableInstance fairy = session.Character.Inventory.LoadBySlotAndType <WearableInstance>((byte)EquipmentType.Fairy, equipment);
                        session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("FAIRYSTATS"), fairy.XP, CharacterHelper.LoadFairyXpData(fairy.ElementRate + fairy.Item.ElementRate)), 10));
                        break;

                    case EquipmentType.Amulet:
                        session.SendPacket(session.Character.GenerateEff(39));
                        inv.BoundCharacterId = session.Character.CharacterId;
                        break;
                    }
                }
                else if (mate != null)
                {
                    session.SendPacket(mate.GenerateScPacket());
                }
                break;
            }
        }
 /// <summary>
 /// Creates an item of the given type with an accompanying asset.
 /// </summary>
 /// <param name="scene"></param>
 /// <param name="itemName"></param>
 /// <param name="itemId"></param>
 /// <param name="userId"></param>
 /// <param name="type">Type of item to create</param>
 /// <returns></returns>
 public static InventoryItemBase CreateInventoryItem(
     Scene scene, string itemName, UUID userId, InventoryType type)
 {
     return(CreateInventoryItem(scene, itemName, UUID.Random(), UUID.Random(), userId, type));
 }
Exemple #22
0
        /// <summary>
        /// sell packet
        /// </summary>
        /// <param name="sellPacket"></param>
        public void SellShop(SellPacket sellPacket)
        {
            if (Session.Character.ExchangeInfo != null && Session.Character.ExchangeInfo.ExchangeList.Any() || Session.Character.IsShopping)
            {
                return;
            }
            if (sellPacket.Amount.HasValue && sellPacket.Slot.HasValue)
            {
                InventoryType type = (InventoryType)sellPacket.Data;
                byte          amount = sellPacket.Amount.Value, slot = sellPacket.Slot.Value;

                if (type == InventoryType.Bazaar)
                {
                    return;
                }
                ItemInstance inv = Session.Character.Inventory.LoadBySlotAndType(slot, type);
                if (inv == null || amount > inv.Amount)
                {
                    return;
                }
                if (Session.Character.MapInstance.MapDesignObjects.Any(s => s.ItemInstanceId == inv.Id))
                {
                    return;
                }
                if (!inv.Item.IsSoldable)
                {
                    Session.SendPacket(UserInterfaceHelper.Instance.GenerateShopMemo(2, string.Format(Language.Instance.GetMessageFromKey("ITEM_NOT_SOLDABLE"))));
                    return;
                }
                long price = inv.Item.ItemType == ItemType.Sell ? inv.Item.Price : inv.Item.Price / 20;

                if (Session.Character.Gold + price * amount > ServerManager.Instance.MaxGold)
                {
                    string message = UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("MAX_GOLD"), 0);
                    Session.SendPacket(message);
                    return;
                }
                Session.Character.Gold += price * amount;
                Session.SendPacket(UserInterfaceHelper.Instance.GenerateShopMemo(1, string.Format(Language.Instance.GetMessageFromKey("SELL_ITEM_VALIDE"), inv.Item.Name, amount)));

                Session.Character.Inventory.RemoveItemAmountFromInventory(amount, inv.Id);
                Session.SendPacket(Session.Character.GenerateGold());
            }
            else
            {
                short          vnum  = sellPacket.Data;
                CharacterSkill skill = Session.Character.Skills[vnum];
                if (skill == null || vnum == 200 + 20 * (byte)Session.Character.Class || vnum == 201 + 20 * (byte)Session.Character.Class)
                {
                    return;
                }
                Session.Character.Gold -= skill.Skill.Price;
                Session.SendPacket(Session.Character.GenerateGold());

                foreach (CharacterSkill loadedSkill in Session.Character.Skills.Select(s => s.Value))
                {
                    if (skill.Skill.SkillVNum == loadedSkill.Skill.UpgradeSkill)
                    {
                        Session.Character.Skills.TryRemove(loadedSkill.SkillVNum, out CharacterSkill characterSkill);
                    }
                }

                Session.Character.Skills.TryRemove(skill.SkillVNum, out CharacterSkill CharacterSkill);
                Session.SendPacket(Session.Character.GenerateSki());
                Session.SendPackets(Session.Character.GenerateQuicklist());
                Session.SendPacket(Session.Character.GenerateLev());
            }
        }
Exemple #23
0
        public void CreateShop(string packet)
        {
            string[]        packetsplit = packet.Split(' ');
            InventoryType[] type        = new InventoryType[20];
            long[]          gold        = new long[20];
            short[]         slot        = new short[20];
            byte[]          qty         = new byte[20];
            string          shopname    = string.Empty;

            if (packetsplit.Length <= 2)
            {
                return;
            }
            if (!short.TryParse(packetsplit[2], out short typePacket))
            {
                return;
            }
            if (Session.Character.HasShopOpened && typePacket != 1 || !Session.HasCurrentMapInstance || Session.Character.IsExchanging || Session.Character.ExchangeInfo != null)
            {
                return;
            }
            if (Session.CurrentMapInstance.Portals.Any(por => Session.Character.PositionX < por.SourceX + 6 && Session.Character.PositionX > por.SourceX - 6 && Session.Character.PositionY < por.SourceY + 6 && Session.Character.PositionY > por.SourceY - 6))
            {
                Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("SHOP_NEAR_PORTAL"), 0));
                return;
            }
            if (Session.Character.Group != null && Session.Character.Group?.GroupType != GroupType.Group)
            {
                Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("SHOP_NOT_ALLOWED_IN_RAID"), 0));
                return;
            }
            if (!Session.CurrentMapInstance.ShopAllowed)
            {
                Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("SHOP_NOT_ALLOWED"), 0));
                return;
            }
            if (typePacket == 2)
            {
                Session.SendPacket("ishop");
            }
            else if (typePacket == 0)
            {
                if (Session.CurrentMapInstance.UserShops.Count(s => s.Value.OwnerId == Session.Character.CharacterId) != 0)
                {
                    return;
                }
                MapShop myShop = new MapShop();

                if (packetsplit.Length > 82)
                {
                    short shopSlot = 0;

                    for (short j = 3, i = 0; j < 82; j += 4, i++)
                    {
                        Enum.TryParse(packetsplit[j], out type[i]);
                        short.TryParse(packetsplit[j + 1], out slot[i]);
                        byte.TryParse(packetsplit[j + 2], out qty[i]);

                        long.TryParse(packetsplit[j + 3], out gold[i]);
                        if (gold[i] < 0)
                        {
                            return;
                        }
                        if (qty[i] <= 0)
                        {
                            continue;
                        }
                        ItemInstance inv = Session.Character.Inventory.LoadBySlotAndType(slot[i], type[i]);
                        if (inv == null)
                        {
                            continue;
                        }
                        if (inv.Amount < qty[i])
                        {
                            return;
                        }
                        if (!inv.Item.IsTradable || inv.IsBound)
                        {
                            Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SHOP_ONLY_TRADABLE_ITEMS"), 10));
                            Session.SendPacket("shop_end 0");
                            return;
                        }

                        PersonalShopItem personalshopitem = new PersonalShopItem
                        {
                            ShopSlot     = shopSlot,
                            Price        = gold[i],
                            ItemInstance = inv,
                            SellAmount   = qty[i]
                        };
                        myShop.Items.Add(personalshopitem);
                        shopSlot++;
                    }
                }
                if (myShop.Items.Count != 0)
                {
                    if (!myShop.Items.Any(s => !s.ItemInstance.Item.IsSoldable || s.ItemInstance.IsBound))
                    {
                        for (int i = 83; i < packetsplit.Length; i++)
                        {
                            shopname += $"{packetsplit[i]} ";
                        }

                        // trim shopname
                        shopname = shopname.TrimEnd(' ');

                        // create default shopname if it's empty
                        if (string.IsNullOrWhiteSpace(shopname) || string.IsNullOrEmpty(shopname))
                        {
                            shopname = Language.Instance.GetMessageFromKey("SHOP_PRIVATE_SHOP");
                        }

                        // truncate the string to a max-length of 20
                        shopname       = shopname.Truncate(20);
                        myShop.OwnerId = Session.Character.CharacterId;
                        myShop.Name    = shopname;
                        Session.CurrentMapInstance.UserShops.Add(Session.CurrentMapInstance.LastUserShopId++, myShop);

                        Session.Character.HasShopOpened = true;

                        Session.CurrentMapInstance?.Broadcast(Session, Session.Character.GeneratePlayerFlag(Session.CurrentMapInstance.LastUserShopId), ReceiverType.AllExceptMe);
                        Session.CurrentMapInstance?.Broadcast(Session.Character.GenerateShop(shopname));
                        Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey("SHOP_OPEN")));

                        Session.Character.IsSitting  = true;
                        Session.Character.IsShopping = true;

                        Session.Character.LoadSpeed();
                        Session.SendPacket(Session.Character.GenerateCond());
                        Session.CurrentMapInstance?.Broadcast(Session.Character.GenerateRest());
                    }
                    else
                    {
                        Session.SendPacket("shop_end 0");
                        Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("ITEM_NOT_SOLDABLE"), 10));
                    }
                }
                else
                {
                    Session.SendPacket("shop_end 0");
                    Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SHOP_EMPTY"), 10));
                }
            }
            else if (typePacket == 1)
            {
                Session.Character.CloseShop();
            }
        }
 public string GenerateInventoryRemove(InventoryType type, short slot) => $"ivn {(byte)type} {GenerateRemovePacket(slot)}";
Exemple #25
0
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 public InventoryItem(SerializationInfo info, StreamingContext ctxt)
     : base(info, ctxt)
 {
     AssetUUID = (UUID)info.GetValue("AssetUUID", typeof(UUID));
     Permissions = (Permissions)info.GetValue("Permissions", typeof(Permissions));
     AssetType = (AssetType)info.GetValue("AssetType", typeof(AssetType));
     InventoryType = (InventoryType)info.GetValue("InventoryType", typeof(InventoryType));
     CreatorID = (UUID)info.GetValue("CreatorID", typeof(UUID));
     Description = (string)info.GetValue("Description", typeof(string));
     GroupID = (UUID)info.GetValue("GroupID", typeof(UUID));
     GroupOwned = (bool)info.GetValue("GroupOwned", typeof(bool));
     SalePrice = (int)info.GetValue("SalePrice", typeof(int));
     SaleType = (SaleType)info.GetValue("SaleType", typeof(SaleType));
     Flags = (uint)info.GetValue("Flags", typeof(uint));
     CreationDate = (DateTime)info.GetValue("CreationDate", typeof(DateTime));
     LastOwnerID = (UUID)info.GetValue("LastOwnerID", typeof(UUID));
 }
Exemple #26
0
        private void RefreshInventoryUI()
        {
            if (this._toggleElements.IsNullOrEmpty <ToggleElement>())
            {
                return;
            }
            int index1 = -1;

            for (int index2 = 0; index2 < this._toggleElements.Count; ++index2)
            {
                Toggle toggle = this._toggleElements.GetElement <ToggleElement>(index2)?.Toggle;
                if (Object.op_Inequality((Object)toggle, (Object)null) && toggle.get_isOn())
                {
                    index1 = index2;
                    break;
                }
            }
            if (!this._vieweres.IsNullOrEmpty <RecyclingInventoryFacadeViewer>())
            {
                WorldData worldData = !Singleton <Game> .IsInstance() ? (WorldData)null : Singleton <Game> .Instance.WorldData;

                if (worldData != null)
                {
                    for (int index2 = 0; index2 < this._vieweres.Length; ++index2)
                    {
                        RecyclingInventoryFacadeViewer element = this._vieweres.GetElement <RecyclingInventoryFacadeViewer>(index2);
                        if (element != null)
                        {
                            InventoryType inventoryType = (InventoryType)index2;
                            int           num           = 0;
                            switch (inventoryType)
                            {
                            case InventoryType.Pouch:
                                PlayerData playerData = worldData.PlayerData;
                                int?       nullable1;
                                int?       nullable2;
                                if (playerData == null)
                                {
                                    nullable1 = new int?();
                                    nullable2 = nullable1;
                                }
                                else
                                {
                                    nullable2 = new int?(playerData.InventorySlotMax);
                                }
                                nullable1 = nullable2;
                                num       = !nullable1.HasValue ? 0 : nullable1.Value;
                                break;

                            case InventoryType.Chest:
                                num = !Singleton <Resources> .IsInstance() ? 0 : Singleton <Resources> .Instance.DefinePack.ItemBoxCapacityDefines.StorageCapacity;

                                break;
                            }
                            element.slotCounter.y = num;
                            element.ItemListNodeCreate();
                        }
                    }
                }
            }
            if (this.RecyclingData != null)
            {
                this._decidedItemSlotUI.SettingUI(this.RecyclingData.DecidedItemList);
                this._createItemStockUI.SettingUI(this.RecyclingData.CreatedItemList);
            }
            this.ChangedSelecteInventory(index1);
        }
Exemple #27
0
 public void RequestCreateItem(LLUUID parentFolder, string name, string description, AssetType type, 
     InventoryType invType, PermissionMask nextOwnerMask, ItemCreatedCallback callback)
 {
     // Even though WearableType 0 is Shape, in this context it is treated as NOT_WEARABLE
     RequestCreateItem(parentFolder, name, description, type, invType, (WearableType)0, nextOwnerMask, 
         callback);
 }
Exemple #28
0
            } // @ public int GetItemIDByIndex(byte index, InventoryType location)

            /// <summary>
            /// The amount of items matching iD that you have in your inventory
            /// </summary>
            /// <param name="iD">ID of the item to count</param>
            /// <param name="location">InventoryType of the location(s) to search.</param>
            /// <returns>Total count of all items matching ID in the location(s) passed.</returns>
            public uint GetItemCount (int iD, InventoryType location)
            {
                // Don't even bother to do range checks here.
                // We're doing the looping ourselves.
                // DoRangeChecks(1, location);

                // Check to ensure iD passed isn't 0
                if (iD <= 0)
                    return 0;

                if (IsSet(location, InventoryType.None))
                    return 0;

                System.Collections.Generic.List<InventoryItem> list = GetItemList(iD, location);

                if (list.Count <= 0)
                    return 0;

                uint count = 0;
                for (int i = 0; i < list.Count; i++)
                {
                    count += list[i].Count;
                }
                return count;
            } // @ public uint GetItemCount(ushort iD, InventoryType location)
Exemple #29
0
 public static string InventoryTypeToString(InventoryType type)
 {
     return _InventoryTypeNames[(int)type];
 }
Exemple #30
0
        public void LoadInventory(METAboltInstance instance, UUID folderID)
        {
            this.instance = instance;
            this.client   = this.instance.Client;
            InventoryFolder      rootFolder = this.client.Inventory.Store.RootFolder;
            List <InventoryBase> contents   = this.client.Inventory.Store.GetContents(folderID);

            if (folderID != this.client.Inventory.Store.RootFolder.UUID)
            {
                if (this.TreeView.Nodes != null)
                {
                    TreeNode[] array = this.TreeView.Nodes.Find(folderID.ToString(), true);
                    if (array.Length > 0)
                    {
                        TreeNodeCollection nodes = array[0].Nodes;
                        nodes.Clear();
                        if (contents.Count == 0)
                        {
                            nodes.Add(UUID.Zero.ToString(), "(empty)");
                            nodes[UUID.Zero.ToString()].Tag       = "empty";
                            nodes[UUID.Zero.ToString()].ForeColor = Color.FromKnownColor(KnownColor.GrayText);
                        }
                        else
                        {
                            List <Primitive> list = this.client.Network.CurrentSim.ObjectsPrimitives.FindAll(delegate(Primitive prim)
                            {
                                bool result;
                                try
                                {
                                    result = (prim.ParentID == instance.Client.Self.LocalID);
                                }
                                catch
                                {
                                    result = false;
                                }
                                return(result);
                            });
                            foreach (InventoryBase current in contents)
                            {
                                string key  = current.UUID.ToString();
                                bool   flag = current is InventoryFolder;
                                try
                                {
                                    string text = string.Empty;
                                    if (!flag)
                                    {
                                        InventoryItem inventoryItem = (InventoryItem)current;
                                        WearableType  wearableType  = this.client.Appearance.IsItemWorn(inventoryItem);
                                        if (wearableType != WearableType.Invalid)
                                        {
                                            text = " (WORN)";
                                        }
                                        UUID lhs = UUID.Zero;
                                        foreach (Primitive current2 in list)
                                        {
                                            if (current2.NameValues != null)
                                            {
                                                for (int i = 0; i < current2.NameValues.Length; i++)
                                                {
                                                    if (current2.NameValues[i].Name == "AttachItemID")
                                                    {
                                                        lhs = (UUID)current2.NameValues[i].Value.ToString();
                                                        if (lhs == inventoryItem.UUID)
                                                        {
                                                            text = " (WORN)";
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        nodes.Add(key, current.Name + text);
                                        nodes[key].Tag = current;
                                        if (text == " (WORN)")
                                        {
                                            nodes[key].ForeColor = Color.RoyalBlue;
                                        }
                                        string        empty         = string.Empty;
                                        InventoryType inventoryType = inventoryItem.InventoryType;
                                        switch (inventoryType)
                                        {
                                        case InventoryType.Texture:
                                            nodes[key].ImageKey = "Texture";
                                            continue;

                                        case InventoryType.Sound:
                                        case (InventoryType)4:
                                        case (InventoryType)5:
                                        case InventoryType.Category:
                                        case InventoryType.RootCategory:
                                            break;

                                        case InventoryType.CallingCard:
                                            nodes[key].ImageKey = "CallingCard";
                                            continue;

                                        case InventoryType.Landmark:
                                            nodes[key].ImageKey = "LM";
                                            continue;

                                        case InventoryType.Object:
                                            nodes[key].ImageKey = "Objects";
                                            continue;

                                        case InventoryType.Notecard:
                                            nodes[key].ImageKey = "Notecard";
                                            continue;

                                        case InventoryType.LSL:
                                            nodes[key].ImageKey = "Script";
                                            continue;

                                        default:
                                            if (inventoryType == InventoryType.Snapshot)
                                            {
                                                nodes[key].ImageKey = "Snapshots";
                                                continue;
                                            }
                                            if (inventoryType == InventoryType.Wearable)
                                            {
                                                nodes[key].ImageKey = "Wearable";
                                                continue;
                                            }
                                            break;
                                        }
                                        nodes[key].ImageKey = "Gear";
                                    }
                                    else
                                    {
                                        nodes.Add(key, current.Name);
                                        nodes[key].Tag      = current;
                                        nodes[key].ImageKey = "ClosedFolder";
                                        nodes[key].Nodes.Add(null, "(loading...)").ForeColor = Color.FromKnownColor(KnownColor.GrayText);
                                    }
                                }
                                catch (Exception var_16_4C6)
                                {
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                this.TreeView.Nodes.Clear();
                TreeNode treeNode = this.TreeView.Nodes.Add(rootFolder.UUID.ToString(), "My Inventory");
                treeNode.Tag      = rootFolder;
                treeNode.ImageKey = "OpenFolder";
                if (contents.Count == 0)
                {
                    treeNode.Nodes.Add(UUID.Zero.ToString(), "(empty)");
                    treeNode.Nodes[UUID.Zero.ToString()].Tag       = "empty";
                    treeNode.Nodes[UUID.Zero.ToString()].ForeColor = Color.FromKnownColor(KnownColor.GrayText);
                }
                else
                {
                    List <Primitive> list = this.client.Network.CurrentSim.ObjectsPrimitives.FindAll(delegate(Primitive prim)
                    {
                        bool result;
                        try
                        {
                            result = (prim.ParentID == instance.Client.Self.LocalID);
                        }
                        catch
                        {
                            result = false;
                        }
                        return(result);
                    });
                    foreach (InventoryBase current in contents)
                    {
                        string key  = current.UUID.ToString();
                        bool   flag = current is InventoryFolder;
                        try
                        {
                            string text = string.Empty;
                            if (!flag)
                            {
                                InventoryItem inventoryItem = (InventoryItem)current;
                                WearableType  wearableType  = this.client.Appearance.IsItemWorn(inventoryItem);
                                if (wearableType != WearableType.Invalid)
                                {
                                    text = " (WORN)";
                                }
                                UUID lhs = UUID.Zero;
                                foreach (Primitive current2 in list)
                                {
                                    if (current2.NameValues != null)
                                    {
                                        for (int i = 0; i < current2.NameValues.Length; i++)
                                        {
                                            if (current2.NameValues[i].Name == "AttachItemID")
                                            {
                                                lhs = (UUID)current2.NameValues[i].Value.ToString();
                                                if (lhs == inventoryItem.UUID)
                                                {
                                                    text = " (WORN)";
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                                treeNode.Nodes.Add(key, current.Name + text);
                                treeNode.Nodes[key].Tag = current;
                                if (text == " (WORN)")
                                {
                                    treeNode.Nodes[key].ForeColor = Color.RoyalBlue;
                                }
                                string        empty         = string.Empty;
                                InventoryType inventoryType = inventoryItem.InventoryType;
                                switch (inventoryType)
                                {
                                case InventoryType.Texture:
                                    treeNode.Nodes[key].ImageKey = "Texture";
                                    continue;

                                case InventoryType.Sound:
                                case (InventoryType)4:
                                case (InventoryType)5:
                                case InventoryType.Category:
                                case InventoryType.RootCategory:
                                    break;

                                case InventoryType.CallingCard:
                                    treeNode.Nodes[key].ImageKey = "CallingCard";
                                    continue;

                                case InventoryType.Landmark:
                                    treeNode.Nodes[key].ImageKey = "LM";
                                    continue;

                                case InventoryType.Object:
                                    treeNode.Nodes[key].ImageKey = "Objects";
                                    continue;

                                case InventoryType.Notecard:
                                    treeNode.Nodes[key].ImageKey = "Notecard";
                                    continue;

                                case InventoryType.LSL:
                                    treeNode.Nodes[key].ImageKey = "Script";
                                    continue;

                                default:
                                    if (inventoryType == InventoryType.Snapshot)
                                    {
                                        treeNode.Nodes[key].ImageKey = "Snapshots";
                                        continue;
                                    }
                                    if (inventoryType == InventoryType.Wearable)
                                    {
                                        treeNode.Nodes[key].ImageKey = "Wearable";
                                        continue;
                                    }
                                    break;
                                }
                                treeNode.Nodes[key].ImageKey = "Gear";
                            }
                            else
                            {
                                treeNode.Nodes.Add(key, current.Name);
                                treeNode.Nodes[key].Tag      = current;
                                treeNode.Nodes[key].ImageKey = "ClosedFolder";
                                treeNode.Nodes[key].Nodes.Add(null, "(loading...)").ForeColor = Color.FromKnownColor(KnownColor.GrayText);
                            }
                        }
                        catch (Exception var_16_4C6)
                        {
                        }
                    }
                    treeNode.Expand();
                }
            }
        }
 void ISerializable.Deserialize(BinaryReader reader)
 {
     this.Type = (InventoryType)reader.ReadUInt32();
     this.Hash = reader.ReadSerializable <UInt256>();
 }
 void Inventory_OnTaskItemReceived(UUID itemID, UUID folderID, UUID creatorID, UUID assetID, InventoryType type)
 {
     Console.Write("\nOn Task Item Recieved\n");
 }
Exemple #33
0
 private bool CanAddItem(InventoryType type)
 {
     return(Owner != null && GetFreeSlot(type, Owner.HaveBackpack() ? 1 : 0).HasValue);
 }
Exemple #34
0
 public static IEnumerable<EquipSlot> GetInventorySlotsByEquipSlot(InventoryType type)
 {
     switch (type)
     {
         case InventoryType.Head:
             yield return EquipSlot.Head;
             break;
         case InventoryType.Neck:
             yield return EquipSlot.Neck;
             break;
         case InventoryType.Shoulders:
             yield return EquipSlot.Shoulders;
             break;
         case InventoryType.Body:
             yield return EquipSlot.Body;
             break;
         case InventoryType.Chest:
         case InventoryType.Robe:
             yield return EquipSlot.Chest;
             break;
         case InventoryType.Waist:
             yield return EquipSlot.Waist;
             break;
         case InventoryType.Legs:
             yield return EquipSlot.Legs;
             break;
         case InventoryType.Feet:
             yield return EquipSlot.Feet;
             break;
         case InventoryType.Wrists:
             yield return EquipSlot.Wrists;
             break;
         case InventoryType.Hands:
             yield return EquipSlot.Hands;
             break;
         case InventoryType.Finger:
             yield return EquipSlot.Finger1;
             yield return EquipSlot.Finger2;
             break;
         case InventoryType.Trinket:
             yield return EquipSlot.Trinket1;
             yield return EquipSlot.Trinket2;
             break;
         case InventoryType.Weapon:
             yield return EquipSlot.MainHand;
             yield return EquipSlot.OffHand;
             break;
         case InventoryType.Shield:
         case InventoryType.WeaponOffHand:
         case InventoryType.Holdable:
             yield return EquipSlot.OffHand;
             break;
         case InventoryType.Ranged:
         case InventoryType.Thrown:
         case InventoryType.RangedRight:
         case InventoryType.Relic:
             yield return EquipSlot.Ranged;
             break;
         case InventoryType.Cloak:
             yield return EquipSlot.Back;
             break;
         case InventoryType.TwoHandedWeapon:
             {
                 yield return EquipSlot.MainHand;
                 // TODO: Check for titan's grip
                 //bool flag = Manager.LocalPlayer.Class == WoWClass.Warrior && WoWScript.Execute<int>(InventoryManager.#a(61464), 4u) > 0;
                 //var mainHand = Manager.LocalPlayer.GetEquippedItem(EquipSlot.MainHand);
                 //if (flag && mainHand != null && mainHand.ItemInfo.InventoryType == InventoryType.TwoHandedWeapon)
                 //{
                 //    yield return EquipSlot.OffHand;
                 //}
                 break;
             }
         case InventoryType.Bag:
         case InventoryType.Quiver:
             yield return EquipSlot.Bag1;
             yield return EquipSlot.Bag2;
             yield return EquipSlot.Bag3;
             yield return EquipSlot.Bag4;
             break;
         case InventoryType.Tabard:
             yield return EquipSlot.Tabard;
             break;
         case InventoryType.WeaponMainHand:
             yield return EquipSlot.MainHand;
             break;
     }
 }
Exemple #35
0
        /// <summary>
        /// Moves one item from one Inventory to another. Example: Equipment &lt;-&gt; Wear,
        /// Equipment &lt;-&gt; Costume, Equipment &lt;-&gt; Specialist
        /// </summary>
        /// <param name="sourceSlot"></param>
        /// <param name="sourceType"></param>
        /// <param name="targetType"></param>
        /// <param name="targetSlot"></param>
        /// <param name="wear"></param>
        public ItemInstance MoveInInventory(short sourceSlot, InventoryType sourceType, InventoryType targetType, short?targetSlot = null, bool wear = true)
        {
            var sourceInstance = LoadBySlotAndType(sourceSlot, sourceType);

            if (sourceInstance == null && wear)
            {
                Logger.Error(new InvalidOperationException("SourceInstance to move does not exist."));
                return(null);
            }
            if (Owner != null && sourceInstance != null)
            {
                if (targetSlot.HasValue)
                {
                    if (wear)
                    {
                        // swap
                        var targetInstance = LoadBySlotAndType(targetSlot.Value, targetType);

                        sourceInstance.Slot = targetSlot.Value;
                        sourceInstance.Type = targetType;

                        targetInstance.Slot = sourceSlot;
                        targetInstance.Type = sourceType;
                    }
                    else
                    {
                        // move source to target
                        short?freeTargetSlot = GetFreeSlot(targetType, Owner.HaveBackpack() ? 1 : 0);
                        if (freeTargetSlot.HasValue)
                        {
                            sourceInstance.Slot = freeTargetSlot.Value;
                            sourceInstance.Type = targetType;
                        }
                    }

                    return(sourceInstance);
                }

                // check for free target slot
                short?nextFreeSlot;
                switch (targetType)
                {
                case InventoryType.FirstPartnerInventory:
                case InventoryType.SecondPartnerInventory:
                case InventoryType.ThirdPartnerInventory:
                case InventoryType.Wear:
                    nextFreeSlot = (LoadBySlotAndType((short)sourceInstance.Item.EquipmentSlot, targetType) == null
                        ? (short)sourceInstance.Item.EquipmentSlot
                        : (short)-1);
                    break;

                default:
                    nextFreeSlot = GetFreeSlot(targetType, Owner.HaveBackpack() ? 1 : 0);
                    break;
                }
                if (nextFreeSlot.HasValue)
                {
                    sourceInstance.Type = targetType;
                    sourceInstance.Slot = nextFreeSlot.Value;
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
            return(sourceInstance);
        }
		public InventoryVector(InventoryType type, uint256 hash)
		{
			Type = type;
			Hash = hash;
		}
 public static bool IsPhone(InventoryType i)
 {
     return(i == InventoryType.SmartPhone1 || i == InventoryType.SmartPhone2 || i == InventoryType.SmartPhone3 || i == InventoryType.SmartPhone4 ||
            i == InventoryType.SmartPhone5 || i == InventoryType.BrickPhone1 || i == InventoryType.BrickPhone2);
 }
Exemple #38
0
 public InventoryId(InventoryType type, ushort id)
 {
     Type = type;
     Id   = id;
 }
Exemple #39
0
            } // @ public uint GetItemCountByIndex(byte index, InventoryType location)

            /// <summary>
            /// Will get an item ID by index in the passed location
            /// </summary>
            /// <param name="index">Index of the item in your inventory</param>
            /// <param name="location">InventoryType of the location to search (SINGLE LOCATION)</param>
            public int GetItemIDByIndex (int index, InventoryType location)
            {
                if (IsSet(location, InventoryType.None))
                    return 0;

                DoRangeChecks(index, location);
                InventoryItem item = GetItem(index, location);
                if (item != null)
                    return item.ID;
                return 0;
            } // @ public int GetItemIDByIndex(byte index, InventoryType location)
 public VendingMachineEjectMessage(InventoryType type, string id)
 {
     Type = type;
     ID   = id;
 }
Exemple #41
0
            /// <summary>
            /// Gets information about an item from your inventory
            /// </summary>
            /// <param name="index">Index of the item</param>
            /// <param name="location">Location to check (SINGLE LOCATION)</param>
            /// <returns>InventoryItem filled with data about item, null if no item or error.</returns>
            public InventoryItem GetItem (int index, InventoryType location)
            {
                if (IsSet(location, InventoryType.None))
                    return null;

                DoRangeChecks(index, location);

                // done this way because INVENTORYITEM is a private structure
                FFACEGetItem func = null;

                if (IsSet(location, InventoryType.Inventory))
                {
                    func = FFACE.GetInventoryItem;
                    location = InventoryType.Inventory;
                }
                else if (IsSet(location, InventoryType.Locker))
                {
                    func = FFACE.GetLockerItem;
                    location = InventoryType.Locker;
                }
                else if (IsSet(location, InventoryType.Sack))
                {
                    func = FFACE.GetSackItem;
                    location = InventoryType.Sack;
                }
                else if (IsSet(location, InventoryType.Safe))
                {
                    func = FFACE.GetSafeItem;
                    location = InventoryType.Safe;
                }
                else if (IsSet(location, InventoryType.Case))
                {
                    func = FFACE.GetCaseItem;
                    location = InventoryType.Case;
                }
                else if (IsSet(location, InventoryType.Satchel))
                {
                    func = FFACE.GetSatchelItem;
                    location = InventoryType.Satchel;
                }
                else if (IsSet(location, InventoryType.Storage))
                {
                    func = FFACE.GetStorageItem;
                    location = InventoryType.Storage;
                }
                else if (IsSet(location, InventoryType.Temp))
                {
                    func = FFACE.GetTempItem;
                    location = InventoryType.Temp;
                }
                else if (IsSet(location, InventoryType.Wardrobe))
                {
                    func = FFACE.GetWardrobeItem;
                    location = InventoryType.Wardrobe;
                }

                if (func == null)
                    return null;

                INVENTORYITEM item = func(_InstanceID, index);

                if (item.ID <= 0)
                {
                    return null;
                }

                return new InventoryItem(item.ID, item.Index, item.Count, item.Flag, item.Price, item.Extra, location);

            } // @ public InventoryItem GetItem(int index, InventoryType location)
 public VendingMachineInventoryEntry(InventoryType type, string id, uint amount)
 {
     Type   = type;
     ID     = id;
     Amount = amount;
 }
Exemple #43
0
            } // @ public InventoryItem GetItem(int index, InventoryType location)

            /// <summary>
            /// Returns a list of all inventory items matching ID
            /// </summary>
            /// <param name="iD">ID of item to get list of.</param>
            /// <returns></returns>
            public System.Collections.Generic.List<InventoryItem> GetItemList (int iD, InventoryType location)
            {
                var retList = new System.Collections.Generic.List<InventoryItem>();
                if (IsSet(location, InventoryType.None))
                {
                    return retList;
                }

                if (location != InventoryType.None)
                {
                    int start = 0;

                    bool inventory = IsSet(location, InventoryType.Inventory),
                            locker = IsSet(location, InventoryType.Locker),
                            sack = IsSet(location, InventoryType.Sack),
							_case = IsSet(location, InventoryType.Case),
                            wardrobe = IsSet(location, InventoryType.Wardrobe),
                            safe = IsSet(location, InventoryType.Safe),
                            satchel = IsSet(location, InventoryType.Satchel),
                            storage = IsSet(location, InventoryType.Storage),
                            temp = IsSet(location, InventoryType.Temp);

                    // if inventory is not set at all, just skip the 0
                    if (!inventory)
                        start = 1;

                    // Check all bags in parallel
                    for (int i = start; i <= 80; i++)
                    {
                        // inventory index is allowed to be 0
                        InventoryItem item;
                        if (inventory)
                        {
                            item = GetItem(i, InventoryType.Inventory);

                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        // Inventory is only one allowed to start at 0
                        if (i == 0)
                            continue;

                        if (locker)
                        {
                            item = GetItem(i, InventoryType.Locker);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (sack)
                        {
                            item = GetItem(i, InventoryType.Sack);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
						if (_case)
                        {
                            item = GetItem(i, InventoryType.Case);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (safe)
                        {
                            item = GetItem(i, InventoryType.Safe);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (satchel)
                        {
                            item = GetItem(i, InventoryType.Satchel);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (storage)
                        {
                            item = GetItem(i, InventoryType.Storage);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (temp)
                        {
                            item = GetItem(i, InventoryType.Temp);
                            if (( item != null ) && ( item.ID == iD ))
                                retList.Add(item);
                        }
                        if (wardrobe)
                        {
                            item = GetItem(i, InventoryType.Wardrobe);
                            if ((item != null) && (item.ID == iD))
                                retList.Add(item);
                        }
                    }
                }

                return retList;
            }
Exemple #44
0
        public static void SkillLevelUp_Req(InPacket lea, Client gc)
        {
            byte Type = lea.ReadByte();
            byte Slot = lea.ReadByte();

            var chr = gc.Character;

            if (chr.SkillBonus < 1)
            {
                return;
            }

            List <Skill> s  = chr.Skills.getSkills();
            Skill        sl = null;

            foreach (Skill skill in s)
            {
                if (skill.Type == Type && skill.Slot == Slot)
                {
                    sl = skill;
                    break;
                }
            }

            if (sl == null || (sl.SkillID == 1 && sl.SkillLevel + 1 > 5) ||
                (sl.SkillID == 2 && sl.SkillLevel + 1 > 10) || (sl.SkillID == 3 && sl.SkillLevel + 1 > 20) ||
                (sl.SkillID == 4 && sl.SkillLevel + 1 > 20) || sl.SkillLevel + 1 > 20)
            {
                return;
            }

            chr.SkillBonus--;
            sl.SkillLevel++;

            if (sl.SkillID == 10101 || sl.SkillID == 10201 || sl.SkillID == 10301 || sl.SkillID == 10401 ||
                sl.SkillID == 10501 || sl.SkillID == 10102 || sl.SkillID == 10202 || sl.SkillID == 10302 ||
                sl.SkillID == 10402 || sl.SkillID == 10502)
            {
                if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon] != null)
                {
                    int ItemID    = chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].ItemID;
                    int MaxAttack = 5;
                    int Attack    = 3;
                    int MaxMagic  = 4;
                    int Magic     = 4;
                    MaxAttack += ((chr.Str - 3) * 2 + chr.Str / 5);
                    MaxAttack += ((chr.Dex - 3) * 2 + chr.Dex / 5);
                    Attack    += ((chr.Dex - 3) * 1 + chr.Dex / 5);
                    MaxMagic  += ((chr.Int - 3) * 2 + chr.Int / 5);
                    Magic     += ((chr.Int - 3) * 2 + chr.Int / 5);

                    // 技能攻擊力+、魔攻力+
                    if (InventoryType.Is劍(ItemID) && sl.SkillID == 10101)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.02 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.02 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.02 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.02 * sl.SkillLevel);
                    }

                    if (InventoryType.Is刀(ItemID) && sl.SkillID == 10102)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.03 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.03 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.03 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.03 * sl.SkillLevel);
                    }

                    if (InventoryType.Is手套(ItemID) && sl.SkillID == 10201)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.02 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.02 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.02 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.02 * sl.SkillLevel);
                    }

                    if (InventoryType.Is爪(ItemID) && sl.SkillID == 10202)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.03 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.03 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.03 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.03 * sl.SkillLevel);
                    }

                    if (InventoryType.Is扇(ItemID) && sl.SkillID == 10301)
                    {
                        chr.MaxMagic -= (short)(MaxMagic * 0.02 * (sl.SkillLevel - 1));
                        chr.Magic    -= (short)(Magic * 0.02 * (sl.SkillLevel - 1));
                        chr.MaxMagic += (short)(MaxMagic * 0.02 * sl.SkillLevel);
                        chr.Magic    += (short)(Magic * 0.02 * sl.SkillLevel);
                    }

                    if (InventoryType.Is杖(ItemID) && sl.SkillID == 10302)
                    {
                        chr.MaxMagic -= (short)(MaxMagic * 0.03 * (sl.SkillLevel - 1));
                        chr.Magic    -= (short)(Magic * 0.03 * (sl.SkillLevel - 1));
                        chr.MaxMagic += (short)(MaxMagic * 0.03 * sl.SkillLevel);
                        chr.Magic    += (short)(Magic * 0.03 * sl.SkillLevel);
                    }

                    if (InventoryType.Is斧(ItemID) && sl.SkillID == 10401)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.02 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.02 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.02 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.02 * sl.SkillLevel);
                    }

                    if (InventoryType.Is輪(ItemID) && sl.SkillID == 10402)
                    {
                        chr.MaxAttack -= (short)(MaxAttack * 0.03 * (sl.SkillLevel - 1));
                        chr.Attack    -= (short)(Attack * 0.03 * (sl.SkillLevel - 1));
                        chr.MaxAttack += (short)(MaxAttack * 0.03 * sl.SkillLevel);
                        chr.Attack    += (short)(Attack * 0.03 * sl.SkillLevel);
                    }
                    //if (Skill.ContainsKey(10501) && InventoryType.Is(chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].ItemID))
                    //{

                    //}
                    //if (Skill.ContainsKey(10502) && InventoryType.Is(chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].ItemID))
                    //{

                    //}
                    StatusPacket.UpdateStat(gc);
                }
            }

            SkillPacket.updateSkillLevel(gc, chr.SkillBonus, Type, Slot, sl.SkillLevel);
        }
 /// <summary>
 /// Deserialize the message
 /// </summary>
 /// <param name="map">An <see cref="OSDMap"/> containing the data</param>
 public void Deserialize(OSDMap map)
 {
     FolderID = map["folder_id"].AsUUID();
     AssetType = Utils.StringToAssetType(map["asset_type"].AsString());
     InventoryType = Utils.StringToInventoryType(map["inventory_type"].AsString());
     Name = map["name"].AsString();
     Description = map["description"].AsString();
     EveryoneMask = (PermissionMask)map["everyone_mask"].AsInteger();
     GroupMask = (PermissionMask)map["group_mask"].AsInteger();
     NextOwnerMask = (PermissionMask)map["next_owner_mask"].AsInteger();
 }
Exemple #46
0
        // This class executes 1 queue item when called upon

        public static void run()
        {
            Queue X = Queue.Instance;

            // Get first queued item

            Queue.Instance.invItem = null;

            if (X.ActualQueue.Count == 0)
            {
                return;
            }
            KeyValuePair <UUID, List <Queue.QueueType> > kvp = X.ActualQueue.First();

            InventoryManager inv            = BotSession.Instance.grid.Inventory;
            UUID             GitOwnerFolder = UUID.Zero;
            UUID             Branch         = UUID.Zero;
            UUID             Recipient      = kvp.Key;
            UUID             Container      = UUID.Zero;

            UUID ParentFolder = inv.FindFolderForType(AssetType.Folder);


            Queue.QueueType QT = kvp.Value.First();

            InventoryBase GitOwnerFolderBase = null;

            try
            {
                GitOwnerFolderBase = inv.LocalFind(ParentFolder, new[] { QT.GitOwner }, 0, false).First();

                GitOwnerFolder = GitOwnerFolderBase.UUID;
            } catch (Exception e)
            {
            }

            if (GitOwnerFolder == UUID.Zero || GitOwnerFolder == ParentFolder)
            {
                GitOwnerFolder = inv.CreateFolder(ParentFolder, QT.GitOwner);
            }

            InventoryBase GitBranchBase = null;

            try
            {
                GitBranchBase = inv.LocalFind(GitOwnerFolder, new[] { QT.GitBranch }, 0, false).First();

                Branch = GitBranchBase.UUID;
            }
            catch (Exception e) { }
            if (Branch == UUID.Zero || Branch == ParentFolder)
            {
                Branch = inv.CreateFolder(GitOwnerFolder, QT.GitBranch);
            }

            InventoryBase GitContainer = null;

            try
            {
                GitContainer = inv.LocalFind(Branch, new[] { QT.Container }, 0, false).First();

                Container = GitContainer.UUID;
            }catch (Exception e) { }
            if (Container == UUID.Zero || Container == ParentFolder)
            {
                Container = inv.CreateFolder(Branch, QT.Container);
            }

            Queue.FinalQueueData Finals = new Queue.FinalQueueData();
            Dictionary <UUID, Queue.FinalQueueData> FQI = Queue.Instance.FinalQueue;

            if (FQI.ContainsKey(Recipient))
            {
                Finals = FQI[Recipient];
                if (Finals.Folders.ContainsKey(QT.Container))
                {
                    // do nothing
                }
                else
                {
                    Finals.Folders.Add(QT.Container, Container);
                }
                FQI[Recipient]            = Finals;
                Queue.Instance.FinalQueue = FQI;
            }

            Console.WriteLine("Git Owner Folder: " + GitOwnerFolder.ToString());
            Console.WriteLine("Branch: " + Branch.ToString());
            Console.WriteLine("Container: " + Container.ToString());

            // Locate the Script or Notecard
            InventoryBase importedItem = null;
            UUID          ItemID       = UUID.Zero;

            try
            {
                if (QT.ItemType == "script")
                {
                    importedItem = inv.LocalFind(Container, new[] { QT.Name }, 1, true).First();
                }
                else if (QT.ItemType == "notecard")
                {
                    importedItem = inv.LocalFind(Container, new[] { QT.Name + QT.FileExt }, 1, false).First();
                }
                ItemID = importedItem.UUID;
            }
            catch (Exception e) { }

            if (ItemID == UUID.Zero || ItemID == null)
            {
                Queue.Instance.invItem = null;
            }
            else
            {
                Queue.Instance.ARE = new AutoResetEvent(false);
                inv.ItemReceived  += Inv_ItemReceived;

                while (!Queue.Instance.ARE.WaitOne(TimeSpan.FromMinutes(1)))
                {
                    Queue.Instance.ARE.Reset();
                    inv.RequestFetchInventory(ItemID, importedItem.OwnerID);
                }
            }

            // Check that invItem is instantiated

            AssetType     itemType = AssetType.Folder;
            InventoryType InvType  = InventoryType.Animation;

            if (QT.ItemType == "notecard")
            {
                InvType  = InventoryType.Notecard;
                itemType = AssetType.Notecard;
            }
            else if (QT.ItemType == "script")
            {
                InvType  = InventoryType.LSL;
                itemType = AssetType.LSLText;
            }

            if (Queue.Instance.invItem == null)
            {
                // We can safely create the inventory item now

                string FinalName = QT.Name;
                if (InvType == InventoryType.Notecard)
                {
                    FinalName += QT.FileExt;
                }
                UUID Transaction = UUID.Random();
                inv.RequestCreateItem(Container, FinalName, QT.Hash, itemType, Transaction, InvType, PermissionMask.All, delegate(bool success, InventoryItem ii)
                {
                    if (success)
                    {
                        Queue.Instance.invItem = ii;
                        Queue.Instance.ARE.Set();
                    }
                });

                Queue.Instance.ARE.WaitOne(TimeSpan.FromSeconds(10));
                InventoryItem actualItem = Queue.Instance.invItem;
                if (itemType == AssetType.LSLText)
                {
                    inv.RequestUpdateScriptAgentInventory(EncodeScript(QT.Text), actualItem.UUID, true, delegate(bool uploaded, string uploadstatus, bool compileSuccess, List <string> msgs, UUID itemID, UUID assetID)
                    {
                        Queue.Instance.compileMessages = msgs;
                        Queue.Instance.CompileSuccess  = compileSuccess;
                        Queue.Instance.UploadSuccess   = uploaded;
                        Queue.Instance.ARE.Set();
                    });

                    Queue.Instance.ARE.WaitOne(TimeSpan.FromSeconds(20));

                    if (Queue.Instance.UploadSuccess)
                    {
                        if (Queue.Instance.CompileSuccess)
                        {
                            // Remove this from future queues
                            kvp.Value.Remove(QT);
                            // quickly check whether KVP.Value is empty
                            if (kvp.Value.Count == 0)
                            {
                                // Send the container folder, and remove this from queue
                                //inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);
                                //List<InventoryBase> folders = inv.FolderContents(Branch, BotSession.Instance.grid.Self.AgentID, true, false, InventorySortOrder.ByName, TimeSpan.FromSeconds(30).Milliseconds);

                                if (Recipient != UUID.Zero)
                                {
                                    foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                    {
                                        inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                        MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                    }
                                    Queue.Instance.FinalQueue.Remove(Recipient);
                                }

                                X.ActualQueue.Remove(Recipient);
                            }
                            else
                            {
                                X.ActualQueue[Recipient] = kvp.Value;
                            }
                            if (Recipient != UUID.Zero)
                            {
                                MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing");
                            }
                        }
                    }
                    else
                    {
                        if (Recipient != UUID.Zero)
                        {
                            MH(Destinations.DEST_AGENT, Recipient, "Item: " + QT.Name + QT.FileExt + " failed!");
                        }
                    }
                }
                else if (itemType == AssetType.Notecard)
                {
                    inv.RequestUploadNotecardAsset(Encoding.UTF8.GetBytes(QT.Text), actualItem.UUID, delegate(bool success, string status, UUID itemID, UUID assetID)
                    {
                        if (success)
                        {
                            Queue.Instance.UploadSuccess = success;
                            Queue.Instance.ARE.Set();
                        }
                    });

                    if (Queue.Instance.UploadSuccess)
                    {
                        kvp.Value.Remove(QT);
                        if (kvp.Value.Count == 0)
                        {
                            X.ActualQueue.Remove(Recipient);
                            //                            inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);

                            if (Recipient != UUID.Zero)
                            {
                                foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                {
                                    inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                    MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                }
                                Queue.Instance.FinalQueue.Remove(Recipient);
                            }
                        }
                        else
                        {
                            X.ActualQueue[Recipient] = kvp.Value;
                        }
                        if (Recipient != UUID.Zero)
                        {
                            MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing");
                        }
                    }
                    else
                    {
                        if (Recipient != UUID.Zero)
                        {
                            MH(Destinations.DEST_AGENT, Recipient, "Item: " + QT.Name + QT.FileExt + " failed!");
                        }
                    }
                }
            }
            else
            {
                // Item exists, verify hash data!
                if (itemType == AssetType.LSLText)
                {
                    if (Queue.Instance.invItem.Description == QT.Hash)
                    {
                        // remove from queue
                        kvp.Value.Remove(QT);
                        if (kvp.Value.Count == 0)
                        {
                            if (Recipient != UUID.Zero)
                            {
                                foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                {
                                    inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                    MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                }
                                Queue.Instance.FinalQueue.Remove(Recipient);
                            }
                            X.ActualQueue.Remove(Recipient);
                            //inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);
                        }
                        else
                        {
                            X.ActualQueue[Recipient] = kvp.Value;
                        }
                        if (Recipient != UUID.Zero)
                        {
                            MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing - no changes needed");
                        }
                    }
                    else
                    {
                        // update the script now
                        inv.RequestUpdateScriptAgentInventory(EncodeScript(QT.Text), Queue.Instance.invItem.UUID, true, delegate(bool uploaded, string uploadstatus, bool compileSuccess, List <string> msgs, UUID itemID, UUID assetID)
                        {
                            Queue.Instance.compileMessages = msgs;
                            Queue.Instance.CompileSuccess  = compileSuccess;
                            Queue.Instance.UploadSuccess   = uploaded;
                            Queue.Instance.ARE.Set();
                        });

                        Queue.Instance.ARE.WaitOne(TimeSpan.FromSeconds(15));

                        if (Queue.Instance.UploadSuccess)
                        {
                            if (Queue.Instance.CompileSuccess)
                            {
                                X.invItem.Description = QT.Hash;
                                kvp.Value.Remove(QT);
                                if (kvp.Value.Count == 0)
                                {
                                    if (Recipient != UUID.Zero)
                                    {
                                        foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                        {
                                            inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                            MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                        }
                                        Queue.Instance.FinalQueue.Remove(Recipient);
                                    }
                                    X.ActualQueue.Remove(Recipient);
                                    //inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);
                                }
                                else
                                {
                                    X.ActualQueue[Recipient] = kvp.Value;
                                }
                                if (Recipient != UUID.Zero)
                                {
                                    MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing");
                                }
                            }
                        }
                        else
                        {
                            if (Recipient != UUID.Zero)
                            {
                                MH(Destinations.DEST_AGENT, Recipient, "Item: " + QT.Name + QT.FileExt + " failed!");
                            }
                        }
                    }
                }
                else if (itemType == AssetType.Notecard)
                {
                    if (Queue.Instance.invItem.Description == QT.Hash)
                    {
                        kvp.Value.Remove(QT);
                        if (kvp.Value.Count == 0)
                        {
                            if (Recipient != UUID.Zero)
                            {
                                foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                {
                                    inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                    MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                }
                                Queue.Instance.FinalQueue.Remove(Recipient);
                            }
                            X.ActualQueue.Remove(Recipient);
                            //inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);
                        }
                        else
                        {
                            X.ActualQueue[Recipient] = kvp.Value;
                        }
                        if (Recipient != UUID.Zero)
                        {
                            MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing - no changes needed");
                        }
                    }
                    else
                    {
                        inv.RequestUploadNotecardAsset(EncodeScript(QT.Text), Queue.Instance.invItem.UUID, delegate(bool success, string status, UUID itemID, UUID assetID)
                        {
                            Queue.Instance.UploadSuccess = success;
                            Queue.Instance.ARE.Set();
                        });

                        Queue.Instance.ARE.WaitOne(TimeSpan.FromSeconds(15));

                        if (Queue.Instance.UploadSuccess)
                        {
                            // Notecard updated
                            kvp.Value.Remove(QT);
                            if (kvp.Value.Count == 0)
                            {
                                if (Recipient != UUID.Zero)
                                {
                                    foreach (KeyValuePair <string, UUID> kvpx in Finals.Folders)
                                    {
                                        inv.GiveFolder(kvpx.Value, kvpx.Key, Recipient, false);
                                        MH(Destinations.DEST_AGENT, Recipient, "Sending : " + kvpx.Key);
                                    }
                                    Queue.Instance.FinalQueue.Remove(Recipient);
                                }
                                X.ActualQueue.Remove(Recipient);
                                //inv.GiveFolder(Branch, GitBranchBase.Name, Recipient, false);
                            }
                            else
                            {
                                X.ActualQueue[Recipient] = kvp.Value;
                            }
                            if (Recipient != UUID.Zero)
                            {
                                MH(Destinations.DEST_AGENT, Recipient, "Item '" + QT.Name + "' finished processing");
                            }
                        }
                        else
                        {
                            if (Recipient != UUID.Zero)
                            {
                                MH(Destinations.DEST_AGENT, Recipient, "Item: " + QT.Name + QT.FileExt + " failed!");
                            }
                        }
                    }
                }
            }

            X.ARE             = new AutoResetEvent(false);
            X.compileMessages = new List <string>();
            X.CompileSuccess  = false;
            X.invItem         = null;
            X.UploadSuccess   = false;
        }
 public override InventoryFolderBase GetFolderForType(UUID principalID, InventoryType invType, AssetType type)
 {
     InventoryFolderBase invFolder = GetRootFolder (principalID);
     switch (type)
     {
         case AssetType.Object:
             InventoryFolderBase objFolder = GetFolderType (principalID, invFolder.ID, type);
             if (objFolder == null)
                 objFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Object, "Foreign Objects");
             return objFolder;
         case AssetType.LSLText:
             InventoryFolderBase lslFolder = GetFolderType (principalID, invFolder.ID, type);
             if (lslFolder == null)
                 lslFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.LSLText, "Foreign Scripts");
             return lslFolder;
         case AssetType.Notecard:
             InventoryFolderBase ncFolder = GetFolderType (principalID, invFolder.ID, type);
             if (ncFolder == null)
                 ncFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Notecard, "Foreign Notecards");
             return ncFolder;
         case AssetType.Animation:
             InventoryFolderBase aniFolder = GetFolderType (principalID, invFolder.ID, type);
             if (aniFolder == null)
                 aniFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Notecard, "Foreign Animiations");
             return aniFolder;
         case AssetType.Bodypart:
         case AssetType.Clothing:
             InventoryFolderBase clothingFolder = GetFolderType (principalID, invFolder.ID, AssetType.Clothing);
             if (clothingFolder == null)
                 clothingFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Clothing, "Foreign Clothing");
             return clothingFolder;
         case AssetType.Gesture:
             InventoryFolderBase gestureFolder = GetFolderType (principalID, invFolder.ID, type);
             if (gestureFolder == null)
                 gestureFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Gesture, "Foreign Gestures");
             return gestureFolder;
         case AssetType.Landmark:
             InventoryFolderBase lmFolder = GetFolderType (principalID, invFolder.ID, type);
             if (lmFolder == null)
                 lmFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Landmark, "Foreign Landmarks");
             return lmFolder;
         case AssetType.SnapshotFolder:
         case AssetType.Texture:
             InventoryFolderBase textureFolder = GetFolderType (principalID, invFolder.ID, type);
             if (textureFolder == null)
                 textureFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Landmark, "Foreign Textures");
             return textureFolder;
         case AssetType.Sound:
             InventoryFolderBase soundFolder = GetFolderType (principalID, invFolder.ID, type);
             if (soundFolder == null)
                 soundFolder = CreateFolder (principalID, invFolder.ID, (int)AssetType.Landmark, "Foreign Sounds");
             return soundFolder;
         default:
             return invFolder;
     }
 }
    void InventoryCreate()
    {
        Debug.LogWarning("InventoryCreate: ListInventoryPoint.Count = " + ListInventoryPoint.Count);
        if (ListInventoryPoint.Count > MAX_INVENTORY_NUM)
        {
            Debug.LogError("InventoryCreate: incorrect ListInventoryPoint.Count = " + ListInventoryPoint.Count);
            return;
        }

        ListInventory.Clear();
        GameObject InventoryObject = GameObject.Find("InventoryObject");

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
        {
            for (int i = 0; i < ListInventoryPoint.Count; i++)
            {
                if (ListInventoryPoint[i] != null)
                {
                    int        index   = Random.Range(0, 100) % m_inventoryName.Length;
                    GameObject loadObj = Resources.Load("Player/Prefabs/Invenrtory/" + m_inventoryName[index]) as GameObject;
                    GameObject temp    = Instantiate(loadObj);

                    temp.transform.SetParent(InventoryObject.transform, false);
                    temp.transform.position = ListInventoryPoint[i].transform.position;
                    temp.name = m_inventoryName[index];

                    InventoryObjItem item = new InventoryObjItem();
                    item.id     = (byte)i;
                    item.obj    = temp;
                    item.bUsed  = false;
                    item.bTaked = false;
                    ListInventory.Add(item);
                }
            }
        }
        else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            GlobalUserInfo    pGlobalUserInfo = GlobalUserInfo.GetInstance();
            tagGlobalUserData pGlobalUserData = pGlobalUserInfo.GetGlobalUserData();
            MersenneTwister.MT19937.Seed((ulong)pGlobalUserData.wRandseedForInventory);

            for (int i = 0; i < ListInventoryPoint.Count; i++)
            {
                InventoryType inventoryType = (InventoryType)pGlobalUserData.sInventoryList[i].cbType;

                if (ListInventoryPoint[i] != null && pGlobalUserData.sInventoryList[i].cbUsed == 0)
                {
                    //Debug.LogWarning("InventoryCreate: inventoryType=" + inventoryType + " i=" + i);
                    if (inventoryType >= InventoryType.Inventory_Type_Num)
                    {
                        Debug.LogError("InventoryCreate: incorrect inventoryType=" + inventoryType + " i=" + i);
                    }

                    int        index   = (int)inventoryType;// (int)(MersenneTwister.MT19937.Int63() % m_inventoryName.Length);
                    GameObject loadObj = Resources.Load("Player/Prefabs/Invenrtory/" + m_inventoryName[index]) as GameObject;
                    GameObject temp    = Instantiate(loadObj);

                    temp.transform.SetParent(InventoryObject.transform, false);
                    temp.transform.position = ListInventoryPoint[i].transform.position;
                    temp.name = m_inventoryName[index];

                    InventoryObjItem item = new InventoryObjItem();
                    item.id     = (byte)i;
                    item.obj    = temp;
                    item.bUsed  = false;
                    item.bTaked = false;
                    ListInventory.Add(item);
                }
            }
        }
    }
Exemple #49
0
        /// <summary>
        /// Create an inventory item and upload asset data
        /// </summary>
        /// <param name="data">Asset data</param>
        /// <param name="name">Inventory item name</param>
        /// <param name="description">Inventory item description</param>
        /// <param name="assetType">Asset type</param>
        /// <param name="invType">Inventory type</param>
        /// <param name="folderID">Put newly created inventory in this folder</param>
        /// <param name="callback">Delegate that will receive feedback on success or failure</param>
        public void RequestCreateItemFromAsset(byte[] data, string name, string description, AssetType assetType,
            InventoryType invType, UUID folderID, ItemCreatedFromAssetCallback callback)
        {
            Permissions permissions = new Permissions();
            permissions.EveryoneMask = PermissionMask.None;
            permissions.GroupMask = PermissionMask.None;
            permissions.NextOwnerMask = PermissionMask.All;

            RequestCreateItemFromAsset(data, name, description, assetType, invType, folderID, permissions, callback);
        }
 /// <summary>
 /// Construct a new InventoryItem object of a specific Type
 /// </summary>
 /// <param name="type">The type of item from <seealso cref="T:OpenMetaverse.InventoryType" /></param>
 /// <param name="itemID"><seealso cref="T:OpenMetaverse.UUID" /> of the item</param>
 public InventoryItem(InventoryType type, UUID itemID) : base(itemID)
 {
     InventoryType = type;
 }
Exemple #51
0
        /// <summary>
        /// Creates inventory link to another inventory item or folder
        /// </summary>
        /// <param name="folderID">Put newly created link in folder with this UUID</param>
        /// <param name="itemID">Original item's UUID</param>
        /// <param name="name">Name</param>
        /// <param name="description">Description</param>
        /// <param name="assetType">Asset Type</param>
        /// <param name="invType">Inventory Type</param>
        /// <param name="transactionID">Transaction UUID</param>
        /// <param name="callback">Method to call upon creation of the link</param>
        public void CreateLink(UUID folderID, UUID itemID, string name, string description, AssetType assetType, InventoryType invType, UUID transactionID, ItemCreatedCallback callback)
        {
            LinkInventoryItemPacket create = new LinkInventoryItemPacket();
            create.AgentData.AgentID = Client.Self.AgentID;
            create.AgentData.SessionID = Client.Self.SessionID;

            create.InventoryBlock.CallbackID = RegisterItemCreatedCallback(callback);
            create.InventoryBlock.FolderID = folderID;
            create.InventoryBlock.TransactionID = transactionID;
            create.InventoryBlock.OldItemID = itemID;
            create.InventoryBlock.Type = (sbyte)assetType;
            create.InventoryBlock.InvType = (sbyte)invType;
            create.InventoryBlock.Name = Utils.StringToBytes(name);
            create.InventoryBlock.Description = Utils.StringToBytes(description);
            
            Client.Network.SendPacket(create);
        }
Exemple #52
0
        private void CreateCharacterItem(MySqlConnection connection, MySqlTransaction transaction, int idx, string characterId, InventoryType inventoryType, CharacterItem characterItem)
        {
            if (string.IsNullOrEmpty(characterItem.id))
            {
                return;
            }

            ExecuteNonQuerySync(connection, transaction, "INSERT INTO characteritem (id, idx, inventoryType, characterId, dataId, level, amount, equipSlotIndex, durability, exp, lockRemainsDuration, expireTime, randomSeed, ammo, sockets) VALUES (@id, @idx, @inventoryType, @characterId, @dataId, @level, @amount, @equipSlotIndex, @durability, @exp, @lockRemainsDuration, @expireTime, @randomSeed, @ammo, @sockets)",
                                new MySqlParameter("@id", characterItem.id),
                                new MySqlParameter("@idx", idx),
                                new MySqlParameter("@inventoryType", (byte)inventoryType),
                                new MySqlParameter("@characterId", characterId),
                                new MySqlParameter("@dataId", characterItem.dataId),
                                new MySqlParameter("@level", characterItem.level),
                                new MySqlParameter("@amount", characterItem.amount),
                                new MySqlParameter("@equipSlotIndex", characterItem.equipSlotIndex),
                                new MySqlParameter("@durability", characterItem.durability),
                                new MySqlParameter("@exp", characterItem.exp),
                                new MySqlParameter("@lockRemainsDuration", characterItem.lockRemainsDuration),
                                new MySqlParameter("@expireTime", characterItem.expireTime),
                                new MySqlParameter("@randomSeed", characterItem.randomSeed),
                                new MySqlParameter("@ammo", characterItem.ammo),
                                new MySqlParameter("@sockets", characterItem.WriteSockets()));
        }
Exemple #53
0
 public TaskItemReceivedEventArgs(UUID itemID, UUID folderID, UUID creatorID, UUID assetID, InventoryType type)
 {
     this.m_ItemID = itemID;
     this.m_FolderID = folderID;
     this.m_CreatorID = creatorID;
     this.m_AssetID = assetID;
     this.m_Type = type;
 }
Exemple #54
0
        public override void Use(ClientSession session, ref ItemInstance inv, byte Option = 0, string[] packetsplit = null)
        {
            switch (Effect)
            {
            default:
                bool delay = false;
                if (Option == 255)
                {
                    delay  = true;
                    Option = 0;
                }
                Mate mate = null;
                if (Option != 0)
                {
                    mate = session.Character.Mates.Find(s => s.MateType == MateType.Partner && s.PetId == Option - 1);
                }
                short         slot      = inv.Slot;
                InventoryType equipment = InventoryType.Wear;
                switch (Option)
                {
                case 1:
                    equipment = InventoryType.FirstPartnerInventory;
                    break;

                case 2:
                    equipment = InventoryType.SecondPartnerInventory;
                    break;

                case 3:
                    equipment = InventoryType.ThirdPartnerInventory;
                    break;
                }

                InventoryType itemToWearType = inv.Type;

                if (inv == null)
                {
                    return;
                }
                if (ItemValidTime > 0 && !inv.IsBound)
                {
                    inv.ItemDeleteTime = DateTime.Now.AddSeconds(ItemValidTime);
                }
                if (!inv.IsBound)
                {
                    if (!delay && ((EquipmentSlot == EquipmentType.Fairy && (MaxElementRate == 70 || MaxElementRate == 80)) || EquipmentSlot == EquipmentType.CostumeHat || EquipmentSlot == EquipmentType.CostumeSuit || EquipmentSlot == EquipmentType.WeaponSkin || EquipmentSlot == EquipmentType.Wings))
                    {
                        session.SendPacket($"qna #u_i^1^{session.Character.CharacterId}^{(byte)itemToWearType}^{slot}^1 {Language.Instance.GetMessageFromKey("ASK_BIND")}");
                        return;
                    }
                    if (delay)
                    {
                        inv.BoundCharacterId = session.Character.CharacterId;
                    }
                }

                double timeSpanSinceLastSpUsage = (DateTime.Now - Process.GetCurrentProcess().StartTime.AddSeconds(-50)).TotalSeconds - session.Character.LastSp;

                if (EquipmentSlot == EquipmentType.Sp && inv.Rare == -2)
                {
                    session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_EQUIP_DESTROYED_SP"), 0));
                    return;
                }

                if (Option == 0)
                {
                    if (EquipmentSlot == EquipmentType.Sp && timeSpanSinceLastSpUsage <= session.Character.SpCooldown && session.Character.Inventory.LoadBySlotAndType((byte)EquipmentType.Sp, InventoryType.Specialist) != null)
                    {
                        session.SendPacket(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("SP_INLOADING"), session.Character.SpCooldown - (int)Math.Round(timeSpanSinceLastSpUsage)), 0));
                        return;
                    }

                    if ((ItemType != ItemType.Weapon &&
                         ItemType != ItemType.Armor &&
                         ItemType != ItemType.Fashion &&
                         ItemType != ItemType.Jewelery &&
                         ItemType != ItemType.Specialist) ||
                        LevelMinimum > (IsHeroic ? session.Character.HeroLevel : session.Character.Level) || (Sex != 0 && Sex != (byte)session.Character.Gender + 1) ||
                        (ItemType != ItemType.Jewelery && EquipmentSlot != EquipmentType.Boots && EquipmentSlot != EquipmentType.Gloves && ((Class >> (byte)session.Character.Class) & 1) != 1))
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }

                    if (session.Character.UseSp)
                    {
                        if (session.Character.Inventory.LoadBySlotAndType((byte)EquipmentType.Sp, equipment) is ItemInstance sp && sp.Item.Element != 0 && EquipmentSlot == EquipmentType.Fairy && Element != sp.Item.Element && Element != sp.Item.SecondaryElement)
                        {
                            session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("BAD_FAIRY"), 0));
                            return;
                        }
                    }

                    if (session.Character.UseSp && EquipmentSlot == EquipmentType.Sp)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("SP_BLOCKED"), 10));
                        return;
                    }

                    if (session.Character.JobLevel < LevelJobMinimum)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("LOW_JOB_LVL"), 10));
                        return;
                    }
                }
                else if (mate != null)
                {
                    if (mate.Level < LevelMinimum)
                    {
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }
                    switch (EquipmentSlot)
                    {
                    case EquipmentType.Armor:
                        if (ItemSubType == 4)
                        {
                            mate.ArmorInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    case EquipmentType.MainWeapon:
                        if (ItemSubType == 12)
                        {
                            mate.WeaponInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    case EquipmentType.Gloves:
                        mate.GlovesInstance = inv;
                        break;

                    case EquipmentType.Boots:
                        mate.BootsInstance = inv;
                        break;

                    case EquipmentType.Sp:
                        if (ItemSubType == 4)
                        {
                            mate.SpInstance = inv;
                            break;
                        }
                        else
                        {
                            goto default;
                        }

                    default:
                        session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("BAD_EQUIPMENT"), 10));
                        return;
                    }
                }

                ItemInstance currentlyEquippedItem = session.Character.Inventory.LoadBySlotAndType((short)EquipmentSlot, equipment);

                if (currentlyEquippedItem == null)
                {
                    // move from equipment to wear
                    session.Character.Inventory.MoveInInventory(inv.Slot, itemToWearType, equipment);
                    session.SendPacket(UserInterfaceHelper.Instance.GenerateInventoryRemove(itemToWearType, slot));
                }
                else
                {
                    Logger.LogUserEvent("EQUIPMENT_TAKEOFF", session.GenerateIdentity(), $"IIId: {currentlyEquippedItem.Id} ItemVnum: {currentlyEquippedItem.ItemVNum} Upgrade: {currentlyEquippedItem.Upgrade} Rare: {currentlyEquippedItem.Rare}");

                    // move from wear to equipment and back
                    session.Character.Inventory.MoveInInventory(currentlyEquippedItem.Slot, equipment, itemToWearType, inv.Slot);
                    session.SendPacket(currentlyEquippedItem.GenerateInventoryAdd());
                    session.Character.EquipmentBCards.RemoveAll(o => o.ItemVNum == currentlyEquippedItem.ItemVNum);
                }

                Logger.LogUserEvent("EQUIPMENT_WEAR", session.GenerateIdentity(), $"IIId: {inv.Id} ItemVnum: {inv.ItemVNum} Upgrade: {inv.Upgrade} Rare: {inv.Rare}");

                session.Character.EquipmentBCards.AddRange(inv.Item.BCards);

                switch (inv.Item.ItemType)
                {
                case ItemType.Armor:
                    session.Character.ShellEffectArmor.Clear();

                    foreach (ShellEffectDTO dto in inv.ShellEffects)
                    {
                        session.Character.ShellEffectArmor.Add(dto);
                    }
                    break;

                case ItemType.Weapon:
                    switch (inv.Item.EquipmentSlot)
                    {
                    case EquipmentType.MainWeapon:
                        session.Character.ShellEffectMain.Clear();

                        foreach (ShellEffectDTO dto in inv.ShellEffects)
                        {
                            session.Character.ShellEffectMain.Add(dto);
                        }
                        break;

                    case EquipmentType.SecondaryWeapon:
                        session.Character.ShellEffectSecondary.Clear();

                        foreach (ShellEffectDTO dto in inv.ShellEffects)
                        {
                            session.Character.ShellEffectSecondary.Add(dto);
                        }
                        break;
                    }
                    break;
                }

                if (Option == 0)
                {
                    session.SendPacket(session.Character.GenerateStatChar());
                    session.CurrentMapInstance?.Broadcast(session.Character.GenerateEq());
                    session.SendPacket(session.Character.GenerateEquipment());
                    session.CurrentMapInstance?.Broadcast(session.Character.GeneratePairy());

                    if (EquipmentSlot == EquipmentType.Fairy)
                    {
                        ItemInstance fairy = session.Character.Inventory.LoadBySlotAndType((byte)EquipmentType.Fairy, equipment);
                        session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("FAIRYSTATS"), fairy.XP, CharacterHelper.LoadFairyXPData(fairy.ElementRate + fairy.Item.ElementRate)), 10));
                    }

                    if (EquipmentSlot == EquipmentType.Amulet)
                    {
                        session.SendPacket(StaticPacketHelper.GenerateEff(UserType.Player, session.Character.CharacterId, 39));
                        inv.BoundCharacterId = session.Character.CharacterId;
                    }
                }
                else if (mate != null)
                {
                    session.SendPacket(mate.GenerateScPacket());
                }
                break;
            }
        }
Exemple #55
0
        public void RequestCreateItem(LLUUID parentFolder, string name, string description, AssetType type, 
            InventoryType invType, WearableType wearableType, PermissionMask nextOwnerMask, 
            ItemCreatedCallback callback)
        {
            CreateInventoryItemPacket create = new CreateInventoryItemPacket();
            create.AgentData.AgentID = _Client.Self.AgentID;
            create.AgentData.SessionID = _Client.Self.SessionID;

            create.InventoryBlock.CallbackID = RegisterItemCreatedCallback(callback);
            create.InventoryBlock.FolderID = parentFolder;
            create.InventoryBlock.TransactionID = LLUUID.Random();
            create.InventoryBlock.NextOwnerMask = (uint)nextOwnerMask;
            create.InventoryBlock.Type = (sbyte)type;
            create.InventoryBlock.InvType = (sbyte)invType;
            create.InventoryBlock.WearableType = (byte)wearableType;
            create.InventoryBlock.Name = Helpers.StringToField(name);
            create.InventoryBlock.Description = Helpers.StringToField(description);

            _Client.Network.SendPacket(create);
        }
Exemple #56
0
        private InventoryType GetInvType()
        {
            if (_cacheInventoryType != InventoryType.InvalidInventory)
            {
                return(_cacheInventoryType);
            }

            if (Address == 0)
            {
                return(InventoryType.InvalidInventory);
            }

            // For Poe MemoryLeak bug where ChildCount of PlayerInventory keep
            // Increasing on Area/Map Change. Ref:
            // http://www.ownedcore.com/forums/mmo/path-of-exile/poe-bots-programs/511580-poehud-overlay-updated-362.html#post3718876
            // Orriginal Value of ChildCount should be 0x18
            for (var j = 1; j < InventoryList.InventoryCount; j++)
            {
                if (TheGame.IngameState.IngameUi.InventoryPanel[(InventoryIndex)j].Address == Address)
                {
                    _cacheInventoryType = InventoryType.PlayerInventory;
                    return(_cacheInventoryType);
                }
            }

            var parentChildCount = AsObject <Element>().Parent.ChildCount;

            switch (parentChildCount)
            {
            case 0x6f:
                _cacheInventoryType = InventoryType.EssenceStash;
                break;

            case 0x48:
                _cacheInventoryType = InventoryType.CurrencyStash;
                break;

            case 0x5A:
                _cacheInventoryType = InventoryType.FragmentStash;
                break;

            case 0x5:
                _cacheInventoryType = InventoryType.DivinationStash;
                break;

            case 0x6:
                if (AsObject <Element>().Parent.Children[0].ChildCount == 9)
                {
                    _cacheInventoryType = InventoryType.MapStash;
                    break;
                }
                _cacheInventoryType = InventoryType.InvalidInventory;
                break;

            case 0x01:
                // Normal Stash and Quad Stash is same.
                if (TotalBoxesInInventoryRow == 24)
                {
                    _cacheInventoryType = InventoryType.QuadStash;
                }
                _cacheInventoryType = InventoryType.NormalStash;
                break;

            case 0x23:
                _cacheInventoryType = InventoryType.DelveStash;
                break;

            case 0x50:
                _cacheInventoryType = InventoryType.BlightStash;
                break;

            case 0x1c:
                _cacheInventoryType = InventoryType.DeliriumStash;
                break;

            case 0xe:
                _cacheInventoryType = InventoryType.MetamorphStash;
                break;

            case 0x9:
                _cacheInventoryType = InventoryType.UniqueStash;
                break;

            default:
                _cacheInventoryType = InventoryType.InvalidInventory;
                break;
            }

            return(_cacheInventoryType);
        }
Exemple #57
0
 public InventoryItem(InventoryType type, LLUUID itemID) : base(itemID) { InventoryType = type; }
Exemple #58
0
 public InvPayload(InventoryType type, params uint256[] hashes)
     : this(hashes.Select(h => new InventoryVector(type, h)).ToArray())
 {
 }
Exemple #59
0
        private InventoryItem SafeCreateInventoryItem(InventoryType InvType, LLUUID ItemID)
        {
            InventoryItem ret = null;

            if (_Store.Contains(ItemID))
                ret = _Store[ItemID] as InventoryItem;

            if (ret == null)
                ret = CreateInventoryItem(InvType, ItemID);

            return ret;
        }
Exemple #60
0
 /// <summary>
 /// Convert an InventoryType to a string
 /// </summary>
 /// <param name="type">The <seealso cref="T:InventoryType"/> to convert</param>
 /// <returns>A string representation of the source</returns>
 public static string InventoryTypeToString(InventoryType type)
 {
     return(_InventoryTypeNames[(int)type]);
 }