Added in "LinkedSlot" info in the InventoryItems. The slot sent when using "SendUpdateAsItemPackage" differ from a normal update. This was causing a crash. Checking is working again, trade is working up to the final transaction.

This commit is contained in:
Filip Maj 2019-06-02 17:11:14 -04:00
parent 42ee97d467
commit d49516c03e
3 changed files with 21 additions and 7 deletions

View File

@ -189,16 +189,28 @@ namespace FFXIVClassic_Map_Server.actors.chara
{ {
List<InventoryItem> items = new List<InventoryItem>(); List<InventoryItem> items = new List<InventoryItem>();
for (int i = 0; i < contentList.Length; i++) for (ushort i = 0; i < contentList.Length; i++)
{ {
if (contentList[i] == EMPTY) if (contentList[i] == EMPTY)
continue; continue;
InventoryItem item = GetItem(contentList[i]);
item.linkSlot = i; //We have to set the linkSlot as this is the position in the Referenced IP, not the original IP it's linked from.
items.Add(GetItem(contentList[i])); items.Add(GetItem(contentList[i]));
} }
targetPlayer.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, destinationCapacity, destinationCode)); targetPlayer.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, destinationCapacity, destinationCode));
SendItemPackets(targetPlayer, items); SendItemPackets(targetPlayer, items);
targetPlayer.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId)); targetPlayer.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId));
//Clean Up linkSlots
for (ushort i = 0; i < contentList.Length; i++)
{
if (contentList[i] == EMPTY)
continue;
InventoryItem item = GetItem(contentList[i]);
item.linkSlot = 0xFFFF;
}
} }
#endregion #endregion

View File

@ -42,6 +42,7 @@ namespace FFXIVClassic_Map_Server.dataobjects
public readonly ItemData itemData; public readonly ItemData itemData;
public Character owner = null; public Character owner = null;
public ushort slot = 0xFFFF; public ushort slot = 0xFFFF;
public ushort linkSlot = 0xFFFF;
public ushort itemPackage = 0xFFFF; public ushort itemPackage = 0xFFFF;
public class ItemModifier public class ItemModifier
@ -170,7 +171,12 @@ namespace FFXIVClassic_Map_Server.dataobjects
binWriter.Write((UInt64)uniqueId); binWriter.Write((UInt64)uniqueId);
binWriter.Write((Int32)quantity); binWriter.Write((Int32)quantity);
binWriter.Write((UInt32)itemId); binWriter.Write((UInt32)itemId);
binWriter.Write((UInt16)slot);
if (linkSlot == 0xFFFF)
binWriter.Write((UInt16)slot);
else
binWriter.Write((UInt16)linkSlot);
linkSlot = 0xFFFF;
binWriter.Write((Byte)dealingVal); binWriter.Write((Byte)dealingVal);
binWriter.Write((Byte)dealingMode); binWriter.Write((Byte)dealingMode);

View File

@ -30,10 +30,6 @@ function onEventStarted(player, actor, triggerName)
tradeOffering = player:GetTradeOfferings(); tradeOffering = player:GetTradeOfferings();
if (player.actorId == 0xA6) then
return;
end
while (true) do while (true) do
widgetOpen, chosenOperation, tradeSlot, itemActor, quantity, itemPackageId, itemSlot = callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processUpdateTradeCommandTrayData"); widgetOpen, chosenOperation, tradeSlot, itemActor, quantity, itemPackageId, itemSlot = callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processUpdateTradeCommandTrayData");