diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index cf60cfe8..d840f491 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -1548,6 +1548,7 @@ namespace FFXIVClassic_Map_Server itemId, server_items_modifiers.id AS modifierId, quantity, + isExclusive, quality, durability, @@ -1568,10 +1569,10 @@ namespace FFXIVClassic_Map_Server FROM retainers_inventory INNER JOIN server_items ON serverItemId = server_items.id LEFT JOIN server_items_modifiers ON server_items.id = server_items_modifiers.id - WHERE characterId = @charId AND itemPackage = @type"; + WHERE characterId = @retainerId AND itemPackage = @type"; MySqlCommand cmd = new MySqlCommand(query, conn); - cmd.Parameters.AddWithValue("@retainerId", retainer.getRetainerId()); + cmd.Parameters.AddWithValue("@retainerId", retainer.GetRetainerId()); cmd.Parameters.AddWithValue("@type", type); ushort slot = 0; @@ -1583,10 +1584,9 @@ namespace FFXIVClassic_Map_Server uint itemId = reader.GetUInt32("itemId"); int quantity = reader.GetInt32("quantity"); - byte itemType = reader.GetByte("itemType"); byte qualityNumber = reader.GetByte("quality"); - bool hasModifier = reader.IsDBNull(reader.GetOrdinal("modifierId")); + bool hasModifier = !reader.IsDBNull(reader.GetOrdinal("modifierId")); InventoryItem.ItemModifier modifier = null; if (hasModifier) @@ -1781,7 +1781,7 @@ namespace FFXIVClassic_Map_Server MySqlCommand cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@serverItemId", addedItem.uniqueId); - cmd.Parameters.AddWithValue("@retainerId", retainer.getRetainerId()); + cmd.Parameters.AddWithValue("@retainerId", retainer.GetRetainerId()); cmd.Parameters.AddWithValue("@itemPackage", type); cmd.Parameters.AddWithValue("@quantity", addedItem.quantity); @@ -1812,7 +1812,7 @@ namespace FFXIVClassic_Map_Server "; MySqlCommand cmd = new MySqlCommand(query, conn); - cmd.Parameters.AddWithValue("@retainerId", retainer.getRetainerId()); + cmd.Parameters.AddWithValue("@retainerId", retainer.GetRetainerId()); cmd.Parameters.AddWithValue("@serverItemId", serverItemId); cmd.ExecuteNonQuery(); diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index af97b1f0..9877856a 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -238,8 +238,13 @@ namespace FFXIVClassic_Map_Server //Item Package Request case 0x0131: UpdateItemPackagePacket packageRequest = new UpdateItemPackagePacket(subpacket.data); - if (Server.GetWorldManager().GetPCInWorld(packageRequest.actorID) != null) - Server.GetWorldManager().GetPCInWorld(packageRequest.actorID).SendItemPackage(session.GetActor(), packageRequest.packageId); + if (Server.GetWorldManager().GetActorInWorld(packageRequest.actorID) != null) + { + ((Character)Server.GetWorldManager().GetActorInWorld(packageRequest.actorID)).SendItemPackage(session.GetActor(), packageRequest.packageId); + break; + } + if (session.GetActor().GetSpawnedRetainer() != null && session.GetActor().GetSpawnedRetainer().actorId == packageRequest.actorID) + session.GetActor().GetSpawnedRetainer().SendItemPackage(session.GetActor(), packageRequest.packageId); break; //Group Created Confirm case 0x0133: diff --git a/FFXIVClassic Map Server/actors/chara/npc/Retainer.cs b/FFXIVClassic Map Server/actors/chara/npc/Retainer.cs index ec82890e..dd420159 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Retainer.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Retainer.cs @@ -18,7 +18,6 @@ namespace FFXIVClassic_Map_Server.actors.chara.npc private uint retainerId; private Player ownerPlayer; - private Dictionary inventories = new Dictionary(); public Retainer(uint retainerId, ActorClass actorClass, Player player, float posX, float posY, float posZ, float rot) : base(0, actorClass, "myretainer", player.GetZone(), posX, posY, posZ, rot, 0, 0, null) @@ -27,33 +26,16 @@ namespace FFXIVClassic_Map_Server.actors.chara.npc this.ownerPlayer = player; this.actorName = String.Format("_rtnre{0:x7}", actorId); - inventories[Inventory.NORMAL] = new Inventory(this, MAXSIZE_INVENTORY_NORMAL, Inventory.NORMAL); - inventories[Inventory.CURRENCY_CRYSTALS] = new Inventory(this, MAXSIZE_INVENTORY_CURRANCY, Inventory.CURRENCY_CRYSTALS); - inventories[Inventory.BAZAAR] = new Inventory(this, MAXSIZE_INVENTORY_BAZAAR, Inventory.BAZAAR); + itemPackages[Inventory.NORMAL] = new Inventory(this, MAXSIZE_INVENTORY_NORMAL, Inventory.NORMAL); + itemPackages[Inventory.CURRENCY_CRYSTALS] = new Inventory(this, MAXSIZE_INVENTORY_CURRANCY, Inventory.CURRENCY_CRYSTALS); + itemPackages[Inventory.BAZAAR] = new Inventory(this, MAXSIZE_INVENTORY_BAZAAR, Inventory.BAZAAR); - inventories[Inventory.NORMAL].InitList(Database.GetInventory(this, Inventory.NORMAL)); - inventories[Inventory.CURRENCY_CRYSTALS].InitList(Database.GetInventory(this, Inventory.CURRENCY_CRYSTALS)); - inventories[Inventory.BAZAAR].InitList(Database.GetInventory(this, Inventory.BAZAAR)); + itemPackages[Inventory.NORMAL].InitList(Database.GetInventory(this, Inventory.NORMAL)); + itemPackages[Inventory.CURRENCY_CRYSTALS].InitList(Database.GetInventory(this, Inventory.CURRENCY_CRYSTALS)); + itemPackages[Inventory.BAZAAR].InitList(Database.GetInventory(this, Inventory.BAZAAR)); } - public Inventory GetInventory(ushort type) - { - if (inventories.ContainsKey(type)) - return inventories[type]; - else - return null; - } - - public void SendFullRetainerInventory(Player player) - { - player.QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId)); - inventories[Inventory.NORMAL].SendFullInventory(player); - inventories[Inventory.CURRENCY_CRYSTALS].SendFullInventory(player); - inventories[Inventory.BAZAAR].SendFullInventory(player); - player.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId)); - } - - public uint getRetainerId() + public uint GetRetainerId() { return retainerId; } diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index f875e54f..2b615e58 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -1694,7 +1694,7 @@ namespace FFXIVClassic_Map_Server.Actors runningEvents.Pop(); List lParams = LuaUtils.CreateLuaParamList(parameters); - SubPacket spacket = KickEventPacket.BuildPacket(actorId, actor.actorId, 0x75dc1, conditionName, lParams); + SubPacket spacket = KickEventPacket.BuildPacket(actorId, actor.actorId, 0x75dc1705, conditionName, lParams); spacket.DebugPrintSubPacket(); QueuePacket(spacket); } @@ -1885,6 +1885,11 @@ namespace FFXIVClassic_Map_Server.Actors } } + public Retainer GetSpawnedRetainer() + { + return currentSpawnedRetainer; + } + public void StartTradeTransaction(Player otherPlayer) { myOfferings = new Inventory(this, 4, Inventory.TRADE, true);