Example #1
0
        private void HandleClientInventoryDragDrop(Message msg)
        {
            var player = _gameServer.GetEntityForRemotePlayer(msg.Sender);

            if (player == null)
            {
                Logger.Write("HandleClientInventoryDragDrop: Client is not attached to an entity");
                return;
            }

            var message = (ClientInventoryDragDrop)msg;

            var sourceInventory = _inventoryCache.GetInventory(message.SourceInventoryId);
            var targetInventory = _inventoryCache.GetInventory(message.TargetInventoryId);

            var currentTargetItem = targetInventory[message.TargetSlot];
            var sourceItem        = sourceInventory[message.SourceSlot];

            if (currentTargetItem != null)
            {
                currentTargetItem.Inventory.CombineStacks(currentTargetItem, sourceItem);
                targetInventory.AddItem(sourceItem, false, message.TargetSlot);
            }
            else
            {
                sourceInventory.SetItem(message.SourceSlot, currentTargetItem);
                targetInventory.SetItem(message.TargetSlot, sourceItem);
            }
        }
Example #2
0
 public InventoryItemDTO GetInventory(int userid, int inventoryId)
 {
     if (InventoryCache.isInInventoryDic(userid, inventoryId))
     {
         InventoryCache.GetInventory(userid, inventoryId);
         return(GetInventoryItem(InventoryCache.GetInventory(userid, inventoryId)));
     }
     return(null);
 }
Example #3
0
        void UseInventory(UserToken token, int itemId)
        {
            USER    user    = userCache.GetUserById(userCache.GetUserId(token));
            UserDTO userDto = (UserDTO)GetRoleModel(user.Id);

            List <int> equips = new List <int>();

            string[] equipStrings = user.Equips.Split(',');
            for (int i = 0; i < equipStrings.Length; i++)
            {
                equips.Add(int.Parse(equipStrings[i]));
            }

            ExecutorPool.Instance.Executor(delegate
            {
                INVENTORY inventory      = inventoryCache.GetInventory(itemId);
                InventoryItemDTO itemDto = inventoryBiz.UseInventory(token, itemId);
                if (itemDto != null)
                {
                    switch (itemDto.inventory.inventoryType)
                    {
                    case InventoryType.Equip:
                        inventory.IsDressed = true;
                        itemDto.IsDressed   = true;
                        user.Attack        += itemDto.attack;
                        user.Def           += itemDto.def;
                        user.Armour        += itemDto.armour;
                        user.Crit          += itemDto.crit;
                        user.ExemptCrit    += itemDto.exemptCrit;
                        user.MaxHp         += itemDto.hp;
                        user.MaxMp         += itemDto.mp;
                        user.Speed         += itemDto.speed;
                        userDto.attack     += itemDto.attack;
                        userDto.def        += itemDto.def;
                        userDto.armour     += itemDto.armour;
                        userDto.crit       += itemDto.crit;
                        userDto.exemptCrit += itemDto.exemptCrit;
                        userDto.maxHp      += itemDto.hp;
                        userDto.maxMp      += itemDto.mp;
                        userDto.speed      += itemDto.speed;
                        equips[(int)itemDto.inventory.equipType] = itemDto.id;
                        user.Equips    = String.Empty;
                        userDto.equips = equips.ToArray();
                        for (int i = 0; i < equips.Count; i++)
                        {
                            if (i == equips.Count - 1)
                            {
                                user.Equips += equips[i].ToString();
                            }
                            else
                            {
                                user.Equips += equips[i] + ",";
                            }
                        }
                        itemDto.shortcutid   = -1;
                        inventory.ShortcutId = -1;
                        break;

                    case InventoryType.Drug:
                        switch (itemDto.inventory.infoType)
                        {
                        case InfoType.Hp:
                            user.Hp    += itemDto.inventory.applyValue;
                            userDto.hp += itemDto.inventory.applyValue;
                            if (user.Hp >= user.MaxHp)
                            {
                                user.Hp = user.MaxHp;
                            }
                            if (userDto.hp >= userDto.maxHp)
                            {
                                userDto.hp = userDto.maxHp;
                            }
                            break;

                        case InfoType.Mp:
                            user.Mp += itemDto.inventory.applyValue;
                            if (user.Mp >= user.MaxMp)
                            {
                                user.Mp = user.MaxMp;
                            }
                            userDto.mp += itemDto.inventory.applyValue;
                            if (userDto.mp >= userDto.maxMp)
                            {
                                userDto.mp = userDto.maxMp;
                            }
                            break;

                        case InfoType.Exp:
                            user.Exp     += itemDto.inventory.applyValue;
                            int total_exp = 100 + user.Level * 30;
                            while (user.Exp >= total_exp)
                            {
                                // 升级
                                user.Level++;
                                userDto.level++;
                                user.Exp      -= total_exp;
                                userDto.exp    = user.Exp;
                                user.Hp       += user.Level * 50;
                                user.MaxHp    += user.Level * 50;
                                user.Mp       += user.Level * 25;
                                user.MaxMp    += user.Level * 25;
                                userDto.hp    += userDto.level * 50;
                                userDto.maxHp += userDto.level * 50;
                                userDto.mp    += userDto.level * 25;
                                userDto.maxMp += userDto.level * 25;
                                total_exp      = 100 + user.Level * 30;
                            }
                            break;
                        }
                        itemDto.count -= 1;
                        if (itemDto.count <= 0)
                        {
                            inventoryBiz.DeleteInventory(token, itemDto.id);
                        }

                        break;

                    case InventoryType.Box:
                        break;
                    }

                    Brocast(MapProtocol.UseInventory_BRO, itemDto);
                }
            });
        }