More inventory item refactoring.

This commit is contained in:
Filip Maj 2017-10-15 23:56:04 -04:00
parent 59e3b2379a
commit 95b003cc2b
3 changed files with 46 additions and 16 deletions

View File

@ -1225,7 +1225,7 @@ namespace FFXIVClassic_Map_Server
SELECT SELECT
serverItemId, serverItemId,
itemId, itemId,
modifierId, server_items_modifiers.id AS modifierId,
quantity, quantity,
quality, quality,
@ -1246,7 +1246,7 @@ namespace FFXIVClassic_Map_Server
FROM characters_inventory FROM characters_inventory
INNER JOIN server_items ON serverItemId = server_items.id INNER JOIN server_items ON serverItemId = server_items.id
LEFT JOIN server_items_modifiers ON server_items.modifierId = server_items_modifiers.id LEFT JOIN server_items_modifiers ON server_items.id = server_items_modifiers.id
WHERE characterId = @charId AND inventoryType = @type"; WHERE characterId = @charId AND inventoryType = @type";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
@ -1304,7 +1304,7 @@ namespace FFXIVClassic_Map_Server
SELECT SELECT
serverItemId, serverItemId,
itemId, itemId,
modifierId, server_items_modifiers.id AS modifierId,
quantity, quantity,
quality, quality,
@ -1325,7 +1325,7 @@ namespace FFXIVClassic_Map_Server
FROM retainers_inventory FROM retainers_inventory
INNER JOIN server_items ON serverItemId = server_items.id INNER JOIN server_items ON serverItemId = server_items.id
LEFT JOIN server_items_modifiers ON server_items.modifierId = server_items_modifiers.id LEFT JOIN server_items_modifiers ON server_items.id = server_items_modifiers.id
WHERE characterId = @charId AND inventoryType = @type"; WHERE characterId = @charId AND inventoryType = @type";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
@ -1370,7 +1370,7 @@ namespace FFXIVClassic_Map_Server
return items; return items;
} }
public static InventoryItem CreateItem(uint itemId, int quantity, byte quality, byte itemType, int durability) public static InventoryItem CreateItem(uint itemId, int quantity, byte[] tags, byte[] values, byte quality, InventoryItem.ItemModifier modifiers)
{ {
InventoryItem insertedItem = null; InventoryItem insertedItem = null;
@ -1384,21 +1384,32 @@ namespace FFXIVClassic_Map_Server
string query = @" string query = @"
INSERT INTO server_items INSERT INTO server_items
(itemId, quality, itemType, durability) (itemId, quality)
VALUES VALUES
(@itemId, @quality, @itemType, @durability); (@itemId, @quality);
";
string query2 = @"
INSERT INTO server_items_modifiers
(id, durability)
VALUES
(@id, @durability);
"; ";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@itemId", itemId); cmd.Parameters.AddWithValue("@itemId", itemId);
cmd.Parameters.AddWithValue("@quality", quality); cmd.Parameters.AddWithValue("@quality", quality);
cmd.Parameters.AddWithValue("@itemType", itemType);
cmd.Parameters.AddWithValue("@durability", durability);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
insertedItem = new InventoryItem((uint)cmd.LastInsertedId, itemId, quantity, new byte[4], new byte[4], quality, new InventoryItem.ItemModifier()); insertedItem = new InventoryItem((uint)cmd.LastInsertedId, itemId, quantity, tags, values, quality, modifiers);
if (modifiers != null)
{
MySqlCommand cmd2 = new MySqlCommand(query2, conn);
cmd2.Parameters.AddWithValue("@id", insertedItem.uniqueId);
cmd2.Parameters.AddWithValue("@durability", modifiers.durability);
cmd2.ExecuteNonQuery();
}
} }
catch (MySqlException e) catch (MySqlException e)
{ {

View File

@ -154,7 +154,20 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
//New item that spilled over //New item that spilled over
while (quantityCount > 0) while (quantityCount > 0)
{ {
InventoryItem addedItem = Database.CreateItem(itemId, Math.Min(quantityCount, gItem.maxStack), quality, gItem.isExclusive ? (byte)0x3 : (byte)0x0, gItem.durability); byte[] tags = new byte[4];
byte[] values = new byte[4];
if (gItem.isExclusive)
tags[1] = 3;
InventoryItem.ItemModifier modifiers = null;
if (gItem.durability != 0)
{
modifiers = new InventoryItem.ItemModifier();
modifiers.durability = (uint)gItem.durability;
}
InventoryItem addedItem = Database.CreateItem(itemId, Math.Min(quantityCount, gItem.maxStack), tags, values, quality, modifiers);
addedItem.slot = (ushort)endOfListIndex; addedItem.slot = (ushort)endOfListIndex;
isDirty[endOfListIndex] = true; isDirty[endOfListIndex] = true;
list[endOfListIndex++] = addedItem; list[endOfListIndex++] = addedItem;

View File

@ -5,11 +5,17 @@ namespace FFXIVClassic_Map_Server.dataobjects
{ {
class InventoryItem class InventoryItem
{ {
public const byte DEALINGMODE_NONE = 0;
public const byte DEALINGMODE_ATTACHED = 1;
public const byte DEALINGMODE_PRICE = 2;
public ulong uniqueId; public ulong uniqueId;
public uint itemId; public uint itemId;
public int quantity = 1; public int quantity = 1;
public ushort slot; public ushort slot;
public byte dealingVal = 0;
public byte dealingMode = DEALINGMODE_NONE;
public uint dealingAttached1 = 0; public uint dealingAttached1 = 0;
public uint dealingAttached2 = 0; public uint dealingAttached2 = 0;
public uint dealingAttached3 = 0; public uint dealingAttached3 = 0;
@ -154,8 +160,8 @@ namespace FFXIVClassic_Map_Server.dataobjects
binWriter.Write((UInt32)itemId); binWriter.Write((UInt32)itemId);
binWriter.Write((UInt16)slot); binWriter.Write((UInt16)slot);
binWriter.Write((Byte)0x01); binWriter.Write((Byte)dealingVal);
binWriter.Write((Byte)0x00); binWriter.Write((Byte)dealingMode);
binWriter.Write((UInt32)dealingAttached1); binWriter.Write((UInt32)dealingAttached1);
binWriter.Write((UInt32)dealingAttached2); binWriter.Write((UInt32)dealingAttached2);