public ItemsContainer GetContainer(ItemsContainerId id, int containerId) { if (inventoryContainers.ContainsKey(containerId)) { return(inventoryContainers[containerId][id]); } return(null); }
private static void EnterCharacterToGameWorld(Client client, int accountId) { DataTable characterTable = DatabaseManager.ReturnQuery(string.Format("SELECT * FROM characters WHERE account_id='{0}'", accountId)); if (characterTable.Rows.Count > 0) { DataRow characterData = characterTable.Rows[0]; int characterId = (int)characterData["id"]; Player character = CharactersManager.CreatePlayer(); character.DatabaseId = characterId; client.SelectedCharacter = character; if (ServerManager.Instance.StatsManager.GetContainerForCharacter(client.SelectedCharacter.Id, out StatsContainer container)) { container.SetStat(StatType.NAME, (string)characterData["name"]); container.SetStat(StatType.LEVEL, (short)characterData["lvl"]); container.SetStat(StatType.RACE, (byte)characterData["race"]); container.SetStat(StatType.CLASS, (byte)characterData["ch_class"]); container.SetStat(StatType.POS_X, (short)characterData["pos_x"]); container.SetStat(StatType.POS_Z, (short)characterData["pos_z"]); container.SetStat(StatType.EXPERIENCE, (int)characterData["exp"]); container.SetStat(StatType.KINGDOM, (byte)characterData["kingdom"]); container.SetStat(StatType.GOLD, (int)characterData["gold"]); } Dictionary <ItemsContainerId, ItemsContainer> containers = ServerManager.Instance.ItemsManager.GetContainers(character.Id); DataTable itemsTable = DatabaseManager.ReturnQuery(string.Format("SELECT * FROM items WHERE owner_id='{0}'", character.DatabaseId)); for (int i = 0; i < itemsTable.Rows.Count; i++) { DataRow itemRow = itemsTable.Rows[i]; ItemsContainerId inventoryId = (ItemsContainerId)(byte)itemRow["inventory_id"]; containers[inventoryId].AddItem((int)itemRow["slot"], new ItemData() { uniqueId = (int)itemRow["id"], baseId = (int)itemRow["base_id"], amount = (int)itemRow["amount"], }); } client.BindEvents(); ServerManager.Instance.CharactersManager.AddCharacter(character); ServerManager.Instance.CharactersManager.clients.Add(character.Id, client); var questContainer = ServerManager.Instance.QuestFlags.GetContainer(character.Id); DataTable questFlagsTable = DatabaseManager.ReturnQuery(string.Format("SELECT * FROM quest_flags WHERE player_id='{0}'", character.DatabaseId)); for (int i = 0; i < questFlagsTable.Rows.Count; i++) { DataRow itemRow = questFlagsTable.Rows[i]; QuestFlag flag = new QuestFlag() { questName = (string)itemRow["quest_name"], flag = (string)itemRow["flag"], value = (int)itemRow["flag_val"], }; questContainer.SetQuestFlagInt(flag.questName, flag); } Dictionary <int, Character> table = ServerManager.Instance.CharactersManager.GetCharactersInRange <Character>(client.SelectedCharacter.Position, 50); //Send all characters foreach (var item in table) { Server.Instance.SendData(client.ip, new SpawnCharacterPacket(item.Value)); } //Acknowledge other clients foreach (var item in ServerManager.Instance.CharactersManager.GetClientsInRange(client.SelectedCharacter.Position, 50)) { Server.Instance.SendData(item.Value.ip, new SpawnCharacterPacket(client.SelectedCharacter)); } Packet packet = new Packet(); packet.writer.Write((byte)1); packet.writer.Write((int)client.SelectedCharacter.Id); packet.writer.Write((short)characterData["pos_x"]); packet.writer.Write((short)characterData["pos_z"]); packet.writer.Write((short)characterData["lvl"]); packet.writer.Write((int)characterData["exp"]); packet.writer.Write((int)characterData["gold"]); Server.Instance.SendData(client.ip, packet); foreach (var ic in containers) { Server.Instance.SendData(client.ip, new SyncInventoryPacket(ic.Value)); } } else { Server.Instance.SendData(client.ip, new CharacterSelectionPacket()); } }
private static void RequestItemActionImpl(Client arg1, BinaryReader reader) { ItemAction action = (ItemAction)reader.ReadByte(); ItemsContainerId sourceContainerId = (ItemsContainerId)reader.ReadByte(); ItemsContainerId targetContainerId = (ItemsContainerId)reader.ReadByte(); int sourceSlot = reader.ReadInt32(); int targetSlot = reader.ReadInt32(); var containers = ServerManager.Instance.ItemsManager.GetContainers(arg1.SelectedCharacter.Id); switch (action) { case ItemAction.MOVE: var sourceContainer = containers[sourceContainerId]; var targetContainer = containers[targetContainerId]; if (targetContainerId == ItemsContainerId.SHOP) { if (sourceContainerId == ItemsContainerId.INVENTORY) { SellItem(arg1, sourceSlot, sourceContainer); } return; } if (sourceContainerId == ItemsContainerId.SHOP) { if (targetContainerId == ItemsContainerId.INVENTORY) { BuyItem(arg1, sourceSlot); } return; } if (sourceContainer.Items.ContainsKey(sourceSlot)) { var sourceItem = sourceContainer.Items[sourceSlot]; if (targetContainerId == ItemsContainerId.EQUIPMENT) { //EQUIP ITEM if (ServerManager.Instance.ItemsManager.GetItemPrototype(sourceItem.baseId, out var prototype)) { if ((short)arg1.SelectedCharacter.GetStat(StatType.LEVEL) < prototype.reqLvl) { return; } } } ItemData targetItem = null; if (targetContainer.Items.ContainsKey(targetSlot)) { targetItem = targetContainer.Items[targetSlot]; } sourceContainer.RemoveItem(sourceSlot, true); if (targetItem != null) { targetContainer.RemoveItem(targetSlot, true); } targetContainer.AddItem(targetSlot, sourceItem, true); if (targetItem != null) { sourceContainer.AddItem(sourceSlot, targetItem, true); } containers[sourceContainerId].Refresh(); containers[targetContainerId].Refresh(); } break; } }
public ItemsContainer GetItemsContainer(ItemsContainerId id) { return(ServerManager.Instance.ItemsManager.GetContainer(id, Id)); }
public void SetContainerId(ItemsContainerId id) { this.ContainerId = id; }
public ItemsContainer(ItemsContainerId containerId, int id) { this.InventoryId = containerId; Id = id; }