mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-24 05:37:46 +00:00
Finished remove item code. Inventory Add/Remove should be complete.
This commit is contained in:
parent
110a112328
commit
47be08fbf7
3 changed files with 45 additions and 32 deletions
|
@ -477,7 +477,6 @@ namespace FFXIVClassic_Lobby_Server
|
|||
{
|
||||
conn.Open();
|
||||
|
||||
//Load Last 5 Completed
|
||||
string query = @"
|
||||
SELECT
|
||||
serverItemId,
|
||||
|
@ -600,7 +599,7 @@ namespace FFXIVClassic_Lobby_Server
|
|||
string query = @"
|
||||
UPDATE characters_inventory
|
||||
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);
|
||||
|
@ -622,20 +621,23 @@ namespace FFXIVClassic_Lobby_Server
|
|||
|
||||
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
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
//Load Last 5 Completed
|
||||
string query = @"
|
||||
SELECT slot INTO @slotToDelete FROM characters_inventory WHERE serverItemId = @serverItemId;
|
||||
UPDATE characters_inventory
|
||||
SET slot = slot - 1
|
||||
WHERE characterId = 108 AND slot > @slotToDelete;
|
||||
WHERE characterId = @charId AND slot > @slotToDelete;
|
||||
|
||||
DELETE FROM characters_inventory
|
||||
WHERE serverItemId = @serverItemId;
|
||||
|
||||
DELETE FROM server_items
|
||||
WHERE id = @serverItemId;
|
||||
";
|
||||
|
||||
MySqlCommand cmd = new MySqlCommand(query, conn);
|
||||
|
@ -656,28 +658,26 @@ namespace FFXIVClassic_Lobby_Server
|
|||
|
||||
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
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
//Load Last 5 Completed
|
||||
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
|
||||
WHERE slot = @slot;
|
||||
";
|
||||
WHERE id = @serverItemId;
|
||||
|
||||
string query2 = @"
|
||||
DELETE FROM character_inventory
|
||||
WHERE uniqueServerId = @uniqueItemId;
|
||||
UPDATE character_inventory
|
||||
UPDATE characters_inventory
|
||||
SET slot = slot - 1
|
||||
WHERE characterId = @charId AND slot > @slot
|
||||
WHERE characterId = @charId AND slot > @slot;
|
||||
";
|
||||
|
||||
query += query2;
|
||||
|
||||
MySqlCommand cmd = new MySqlCommand(query, conn);
|
||||
cmd.Parameters.AddWithValue("@charId", player.actorId);
|
||||
cmd.Parameters.AddWithValue("@slot", slot);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
Player p = client.getActor();
|
||||
p.inventories[Inventory.NORMAL].removeItem(slot);
|
||||
p.inventories[Inventory.NORMAL].removeItem(itemId, quantity);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList)
|
||||
{
|
||||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -99,9 +99,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
|
||||
public void removeItem(uint itemId, int quantity)
|
||||
{
|
||||
if (!hasItem(itemId))
|
||||
if (!hasItem(itemId, quantity))
|
||||
return;
|
||||
|
||||
List<ushort> slotsToUpdate = new List<ushort>();
|
||||
List<Item> itemsToRemove = new List<Item>();
|
||||
List<ushort> slotsToRemove = new List<ushort>();
|
||||
List<SubPacket> addItemPackets = new List<SubPacket>();
|
||||
|
||||
|
@ -115,9 +117,14 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
{
|
||||
//Stack nomnomed
|
||||
if (item.quantity - quantityCount <= 0)
|
||||
slotsToRemove.Add(item.slot);
|
||||
{
|
||||
itemsToRemove.Add(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
slotsToUpdate.Add(item.slot);
|
||||
item.quantity -= quantityCount; //Stack reduced
|
||||
}
|
||||
|
||||
quantityCount -= item.quantity;
|
||||
lowestSlot = item.slot;
|
||||
|
@ -127,13 +134,15 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
}
|
||||
}
|
||||
|
||||
list.Sort();
|
||||
int numSlotsRemoved = 0;
|
||||
for (int i = 0; i < slotsToRemove.Count; i++)
|
||||
for (int i = 0; i < slotsToUpdate.Count; i++)
|
||||
{
|
||||
Database.removeItem(owner, (ushort)(slotsToRemove[i] - numSlotsRemoved));
|
||||
list.RemoveAt(slotsToRemove[i] - numSlotsRemoved);
|
||||
numSlotsRemoved++;
|
||||
Database.setQuantity(owner, slotsToUpdate[i], list[slotsToUpdate[i]].quantity);
|
||||
}
|
||||
|
||||
for (int i = 0; i < itemsToRemove.Count; i++)
|
||||
{
|
||||
Database.removeItem(owner, itemsToRemove[i].uniqueId);
|
||||
list.Remove(itemsToRemove[i]);
|
||||
}
|
||||
|
||||
owner.queuePacket(InventoryBeginChangePacket.buildPacket(owner.actorId));
|
||||
|
@ -146,7 +155,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
owner.queuePacket(InventoryEndChangePacket.buildPacket(owner.actorId));
|
||||
}
|
||||
|
||||
public void removeItem(uint itemDBId)
|
||||
public void removeItem(ulong itemDBId)
|
||||
{
|
||||
ushort slot = 0;
|
||||
Item toDelete = null;
|
||||
|
@ -179,6 +188,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
|
||||
public void removeItem(ushort slot)
|
||||
{
|
||||
if (slot >= list.Count)
|
||||
return;
|
||||
|
||||
list.RemoveAt((int)slot);
|
||||
Database.removeItem(owner, slot);
|
||||
|
||||
|
@ -293,9 +305,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
Item item = list[i];
|
||||
if (item.itemId == itemId && item.quantity < item.maxStack)
|
||||
{
|
||||
int oldQuantity = item.quantity;
|
||||
item.quantity = Math.Min(item.quantity + quantityCount, item.maxStack);
|
||||
quantityCount -= (item.maxStack - oldQuantity);
|
||||
quantityCount -= (item.maxStack - item.quantity);
|
||||
if (quantityCount <= 0)
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue