mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	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:
		@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user