コード例 #1
0
        public override void MoveItem(uint uid, int quantity)
        {
            if (quantity > 0)
            {
                CharacterItemRecord item = this.Character.Inventory.GetItem(uid);

                if (item != null && item.Quantity >= quantity && item.CanBeExchanged())
                {
                    BankItemRecord bankItem = item.ToBankItemRecord(this.Character.Client.Account.Id);
                    bankItem.Quantity = (uint)quantity;
                    this.Character.Inventory.RemoveItem(item.UId, (uint)quantity);
                    this.m_items.AddItem(bankItem);
                }
            }
            else
            {
                BankItemRecord item            = this.m_items.GetItem(uid);
                uint           removedQuantity = (uint)Math.Abs(quantity);

                if (item != null && item.Quantity >= removedQuantity)
                {
                    CharacterItemRecord characterItemRecord = item.ToCharacterItemRecord(this.Character.Id);
                    characterItemRecord.Quantity = removedQuantity;
                    this.m_items.RemoveItem(uid, removedQuantity);
                    this.Character.Inventory.AddItem(characterItemRecord);
                }
            }
        }
コード例 #2
0
 public void RemoveItemFromPanel(BankItemRecord obj, int quantity)
 {
     if (obj.IsNull())
     {
         return;
     }
     if (obj.Quantity == (uint)-quantity)
     {
         SaveTask.RemoveElement(obj);
         var existing = Client.Character.Inventory.Items.ExistingItem(obj);
         if (existing != null)
         {
             existing.Quantity += (uint)-quantity;
             SaveTask.UpdateElement(existing);
             Client.Character.Inventory.Refresh();
         }
         else
         {
             Client.Character.Inventory.Add(obj);
         }
         Client.Send(new StorageObjectRemoveMessage(obj.UID));
     }
     else
     {
         obj.Quantity = (uint)(obj.Quantity + quantity);
         SaveTask.UpdateElement(obj);
         Client.Character.Inventory.Add(obj, (uint)-quantity);
         Client.Send(new StorageObjectUpdateMessage(obj.GetObjectItem()));
     }
 }
コード例 #3
0
 public static uint PopNextUID()
 {
     Locker.EnterReadLock();
     try
     {
         List <uint> uids = CharactersItems.ConvertAll <uint>(x => x.UID);
         uids.AddRange(BidShopItemRecord.GetAllItemsUIDs());
         uids.AddRange(BankItemRecord.GetAllItemsUIDs());
         uids.Sort();
         if (uids.Count == 0)
         {
             return(1);
         }
         return(uids.Last() + 1);
     }
     finally
     {
         Locker.ExitReadLock();
     }
 }
コード例 #4
0
        public BankItem CreateBankItem(Character character, BasePlayerItem item, int amount)
        {
            if (amount < 0)
            {
                throw new ArgumentException("amount < 0", "amount");
            }


            var guid   = BankItemRecord.PopNextId();
            var record = new BankItemRecord // create the associated record
            {
                Id             = guid,
                OwnerAccountId = character.Account.Id,
                Template       = item.Template,
                Stack          = (uint)amount,
                Effects        = new List <EffectBase>(item.Effects),
                IsNew          = true
            };

            return(new BankItem(character, record));
        }
コード例 #5
0
        public BankItem CreateBankItem(Character character, ItemTemplate template, int amount, bool maxStats = false)
        {
            if (amount < 0)
            {
                throw new ArgumentException("amount < 0", "amount");
            }


            var guid   = BankItemRecord.PopNextId();
            var record = new BankItemRecord // create the associated record
            {
                Id             = guid,
                OwnerAccountId = character.Account.Id,
                Template       = template,
                Stack          = (uint)amount,
                Effects        = GenerateItemEffects(template, maxStats),
                IsNew          = true
            };

            return(new BankItem(character, record));
        }
コード例 #6
0
 void m_items_OnItemAdded(BankItemRecord obj)
 {
     obj.AddElement();
     this.Character.Client.Send(new StorageObjectUpdateMessage(obj.GetObjectItem()));
 }
コード例 #7
0
 void m_items_OnItemRemoved(BankItemRecord obj)
 {
     obj.RemoveElement();
     this.Character.Client.Send(new StorageObjectRemoveMessage(obj.UId));
 }
コード例 #8
0
 void m_items_OnItemStacked(BankItemRecord arg1, uint arg2)
 {
     arg1.UpdateElement();
     this.Character.Client.Send(new StorageObjectUpdateMessage(arg1.GetObjectItem()));
 }
コード例 #9
0
        public void Add(BankItemRecord item, uint quantity)
        {
            var newItem = new CharacterItemRecord(item.UID, 63, item.GID, Character.Id, quantity, item.GetEffects());

            Add(newItem);
        }
コード例 #10
0
        public static BankItemRecord ExistingItem(this List <BankItemRecord> itemlist, BankItemRecord item)
        {
            var existingItem = itemlist.Find(x => x.GID == item.GID && x.EffectsLinkedToList == item.EffectsLinkedToList);

            if (existingItem == null)
            {
                return(null);
            }
            else
            {
                return(existingItem);
            }
        }