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); } }
public InventoryItemDTO GetInventory(int userid, int inventoryId) { if (InventoryCache.isInInventoryDic(userid, inventoryId)) { InventoryCache.GetInventory(userid, inventoryId); return(GetInventoryItem(InventoryCache.GetInventory(userid, inventoryId))); } return(null); }
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); } }); }