1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-24 13:47:46 +00:00

Finished remove item code. Inventory Add/Remove should be complete.

This commit is contained in:
Filip Maj 2016-02-13 22:25:40 -05:00
parent 110a112328
commit 47be08fbf7
3 changed files with 45 additions and 32 deletions

View file

@ -477,7 +477,6 @@ namespace FFXIVClassic_Lobby_Server
{ {
conn.Open(); conn.Open();
//Load Last 5 Completed
string query = @" string query = @"
SELECT SELECT
serverItemId, serverItemId,
@ -600,7 +599,7 @@ namespace FFXIVClassic_Lobby_Server
string query = @" string query = @"
UPDATE characters_inventory UPDATE characters_inventory
SET quantity = @quantity SET quantity = @quantity
WHERE serverItemId = (SELECT id FROM server_items WHERE characterId = @charId AND slot = @slot LIMIT 1) WHERE characterId = @charId AND slot = @slot
"; ";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
@ -622,20 +621,23 @@ namespace FFXIVClassic_Lobby_Server
public static void removeItem(Player player, ulong serverItemId) public static void removeItem(Player player, ulong serverItemId)
{ {
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}; Allow User Variables=True", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{ {
try try
{ {
conn.Open(); conn.Open();
//Load Last 5 Completed
string query = @" string query = @"
SELECT slot INTO @slotToDelete FROM characters_inventory WHERE serverItemId = @serverItemId; SELECT slot INTO @slotToDelete FROM characters_inventory WHERE serverItemId = @serverItemId;
UPDATE characters_inventory UPDATE characters_inventory
SET slot = slot - 1 SET slot = slot - 1
WHERE characterId = 108 AND slot > @slotToDelete; WHERE characterId = @charId AND slot > @slotToDelete;
DELETE FROM characters_inventory DELETE FROM characters_inventory
WHERE serverItemId = @serverItemId; WHERE serverItemId = @serverItemId;
DELETE FROM server_items
WHERE id = @serverItemId;
"; ";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
@ -656,28 +658,26 @@ namespace FFXIVClassic_Lobby_Server
public static void removeItem(Player player, ushort slot) public static void removeItem(Player player, ushort slot)
{ {
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}; Allow User Variables=True", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{ {
try try
{ {
conn.Open(); conn.Open();
//Load Last 5 Completed
string query = @" string query = @"
SELECT serverItemId INTO @serverItemId FROM characters_inventory WHERE characterId = @charId AND slot = @slot;
DELETE FROM characters_inventory
WHERE characterId = @charId AND slot = @slot;
DELETE FROM server_items DELETE FROM server_items
WHERE slot = @slot; WHERE id = @serverItemId;
";
string query2 = @" UPDATE characters_inventory
DELETE FROM character_inventory
WHERE uniqueServerId = @uniqueItemId;
UPDATE character_inventory
SET slot = slot - 1 SET slot = slot - 1
WHERE characterId = @charId AND slot > @slot WHERE characterId = @charId AND slot > @slot;
"; ";
query += query2;
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player.actorId);
cmd.Parameters.AddWithValue("@slot", slot); cmd.Parameters.AddWithValue("@slot", slot);

View file

@ -424,19 +424,19 @@ namespace FFXIVClassic_Lobby_Server
} }
} }
private void removeItem(ConnectedPlayer client, ushort slot) private void removeItem(ConnectedPlayer client, uint itemId, int quantity)
{ {
if (client != null) if (client != null)
{ {
Player p = client.getActor(); Player p = client.getActor();
p.inventories[Inventory.NORMAL].removeItem(slot); p.inventories[Inventory.NORMAL].removeItem(itemId, quantity);
} }
else else
{ {
foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList) foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList)
{ {
Player p = entry.Value.getActor(); Player p = entry.Value.getActor();
p.inventories[Inventory.NORMAL].removeItem(slot); p.inventories[Inventory.NORMAL].removeItem(itemId, quantity);
} }
} }
} }
@ -507,7 +507,10 @@ namespace FFXIVClassic_Lobby_Server
try try
{ {
removeItem(client, UInt16.Parse(split[1])); if (split.Length == 2)
removeItem(client, UInt32.Parse(split[1]), 1);
else if (split.Length == 3)
removeItem(client, UInt32.Parse(split[1]), Int32.Parse(split[2]));
} }
catch (Exception e) catch (Exception e)
{ {

View file

@ -99,9 +99,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
public void removeItem(uint itemId, int quantity) public void removeItem(uint itemId, int quantity)
{ {
if (!hasItem(itemId)) if (!hasItem(itemId, quantity))
return; return;
List<ushort> slotsToUpdate = new List<ushort>();
List<Item> itemsToRemove = new List<Item>();
List<ushort> slotsToRemove = new List<ushort>(); List<ushort> slotsToRemove = new List<ushort>();
List<SubPacket> addItemPackets = new List<SubPacket>(); List<SubPacket> addItemPackets = new List<SubPacket>();
@ -115,9 +117,14 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
{ {
//Stack nomnomed //Stack nomnomed
if (item.quantity - quantityCount <= 0) if (item.quantity - quantityCount <= 0)
slotsToRemove.Add(item.slot); {
itemsToRemove.Add(item);
}
else else
{
slotsToUpdate.Add(item.slot);
item.quantity -= quantityCount; //Stack reduced item.quantity -= quantityCount; //Stack reduced
}
quantityCount -= item.quantity; quantityCount -= item.quantity;
lowestSlot = item.slot; lowestSlot = item.slot;
@ -127,13 +134,15 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
} }
} }
list.Sort(); for (int i = 0; i < slotsToUpdate.Count; i++)
int numSlotsRemoved = 0;
for (int i = 0; i < slotsToRemove.Count; i++)
{ {
Database.removeItem(owner, (ushort)(slotsToRemove[i] - numSlotsRemoved)); Database.setQuantity(owner, slotsToUpdate[i], list[slotsToUpdate[i]].quantity);
list.RemoveAt(slotsToRemove[i] - numSlotsRemoved); }
numSlotsRemoved++;
for (int i = 0; i < itemsToRemove.Count; i++)
{
Database.removeItem(owner, itemsToRemove[i].uniqueId);
list.Remove(itemsToRemove[i]);
} }
owner.queuePacket(InventoryBeginChangePacket.buildPacket(owner.actorId)); owner.queuePacket(InventoryBeginChangePacket.buildPacket(owner.actorId));
@ -146,7 +155,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
owner.queuePacket(InventoryEndChangePacket.buildPacket(owner.actorId)); owner.queuePacket(InventoryEndChangePacket.buildPacket(owner.actorId));
} }
public void removeItem(uint itemDBId) public void removeItem(ulong itemDBId)
{ {
ushort slot = 0; ushort slot = 0;
Item toDelete = null; Item toDelete = null;
@ -179,6 +188,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
public void removeItem(ushort slot) public void removeItem(ushort slot)
{ {
if (slot >= list.Count)
return;
list.RemoveAt((int)slot); list.RemoveAt((int)slot);
Database.removeItem(owner, slot); Database.removeItem(owner, slot);
@ -293,9 +305,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
Item item = list[i]; Item item = list[i];
if (item.itemId == itemId && item.quantity < item.maxStack) if (item.itemId == itemId && item.quantity < item.maxStack)
{ {
int oldQuantity = item.quantity; quantityCount -= (item.maxStack - item.quantity);
item.quantity = Math.Min(item.quantity + quantityCount, item.maxStack);
quantityCount -= (item.maxStack - oldQuantity);
if (quantityCount <= 0) if (quantityCount <= 0)
break; break;
} }