From dbb0daacd75d58c751866769f55dcf1b13e6a224 Mon Sep 17 00:00:00 2001
From: Image <>
Date: Sat, 29 Feb 2020 00:07:43 -0500
Subject: [PATCH] Trade Updates, Fixes #13

Added Trade command for Right Click.
Resolved quantity length for both traders in a trade, your_item_quantity, their_item_quantity (was int16, now int32)
---
 EQ2/source/WorldServer/client.cpp |  3 +++
 EQ2/structs/WorldStructs.xml      | 40 +++++++++++++++++++++++++++++++
 server/WorldStructs.xml           | 40 +++++++++++++++++++++++++++++++
 3 files changed, 83 insertions(+)

diff --git a/EQ2/source/WorldServer/client.cpp b/EQ2/source/WorldServer/client.cpp
index 5abeb4b0e..e88e3516b 100644
--- a/EQ2/source/WorldServer/client.cpp
+++ b/EQ2/source/WorldServer/client.cpp
@@ -3373,7 +3373,10 @@ void Client::HandleVerbRequest(EQApplicationPacket* app){
 				if(player->IsIgnored(spawn->GetName()))
 					delete_commands.push_back(player->CreateEntityCommand("remove from ignore list", 10000, "ignore_remove", "", 0, 0));
 				else
+				{
 					delete_commands.push_back(player->CreateEntityCommand("add to ignore list", 10000, "ignore_add", "", 0, 0));
+					delete_commands.push_back(player->CreateEntityCommand("Trade", 10, "start_trade", "", 0, 0));
+				}
 				if(((Player*)spawn)->GetGroupMemberInfo()) {
 					if(player->IsGroupMember((Player*)spawn) && player->GetGroupMemberInfo()->leader) { //group leader
 						delete_commands.push_back(player->CreateEntityCommand("kick from group", 10000, "kickfromgroup", "", 0, 0));
diff --git a/EQ2/structs/WorldStructs.xml b/EQ2/structs/WorldStructs.xml
index 24a36fd9c..ff1f9a25f 100644
--- a/EQ2/structs/WorldStructs.xml
+++ b/EQ2/structs/WorldStructs.xml
@@ -31975,6 +31975,46 @@ to zero and treated like placeholders." />
 <Data ElementName="their_gold" Type="int32" />
 <Data ElementName="their_plat" Type="int32" />
 </Struct>
+<Struct Name="WS_PlayerTrade" ClientVersion="60114" OpcodeName="OP_ClientCmdMsg" OpcodeType="OP_EqUpdateStoreCmd"> <!-- Figured out in a 1208 client -->
+<Data ElementName="spawn_id" Type="int32" />
+<Data ElementName="type" Type="int16" />
+<!-- top half -->
+<Data ElementName="your_item_count" Type="int8" />
+<Data ElementName="your_item_array" Type="Array" ArraySizeVariable="your_item_count">
+  <Data ElementName="your_item_unknown1" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="your_item_unknown2" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="your_item_slot" Type="int8" />
+  <Data ElementName="your_item_unknown3" Type ="int8" Size="3" />
+  <Data ElementName="your_item_id" Type="int32" />
+  <Data ElementName="your_item_quantity" Type="int32" />
+  <Data ElementName="your_item_icon" Type="int16" />
+  <Data ElementName="your_item_unknown4" Type="int8" />
+  <Data ElementName="your_item_background" Type="int8" />
+  <Data ElementName="your_item_unknown5" Type="int8" Size="8" />      
+</Data>
+<Data ElementName="your_copper" Type="int32" />
+<Data ElementName="your_silver" Type="int32" />
+<Data ElementName="your_gold" Type="int32" />
+<Data ElementName="your_plat" Type="int32" />
+<!-- lower half -->
+<Data ElementName="their_item_count" Type="int8" />
+<Data ElementName="their_item_array" Type="Array" ArraySizeVariable="their_item_count">
+  <Data ElementName="their_item_unknown1" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="their_item_unknown2" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="their_item_slot" Type="int8" />
+  <Data ElementName="their_item_unknown3" Type ="int8" Size="3" />
+  <Data ElementName="their_item_id" Type="int32" />
+  <Data ElementName="their_item_quantity" Type="int32" />
+  <Data ElementName="their_item_icon" Type="int16" />
+  <Data ElementName="their_item_unknown4" Type="int8" />
+  <Data ElementName="their_item_background" Type="int8" />
+  <Data ElementName="their_item_unknown5" Type="int8" Size="8" />      
+</Data>
+<Data ElementName="their_copper" Type="int32" />
+<Data ElementName="their_silver" Type="int32" />
+<Data ElementName="their_gold" Type="int32" />
+<Data ElementName="their_plat" Type="int32" />
+</Struct>
 <Struct Name="WS_PlayerTrade" ClientVersion="63225" OpcodeName="OP_ClientCmdMsg" OpcodeType="OP_EqUpdateStoreCmd" >
 	<Data ElementName="spawn_id" Type="int32" />
 	<Data ElementName="type" Type="int16" />
diff --git a/server/WorldStructs.xml b/server/WorldStructs.xml
index 24a36fd9c..ff1f9a25f 100644
--- a/server/WorldStructs.xml
+++ b/server/WorldStructs.xml
@@ -31975,6 +31975,46 @@ to zero and treated like placeholders." />
 <Data ElementName="their_gold" Type="int32" />
 <Data ElementName="their_plat" Type="int32" />
 </Struct>
+<Struct Name="WS_PlayerTrade" ClientVersion="60114" OpcodeName="OP_ClientCmdMsg" OpcodeType="OP_EqUpdateStoreCmd"> <!-- Figured out in a 1208 client -->
+<Data ElementName="spawn_id" Type="int32" />
+<Data ElementName="type" Type="int16" />
+<!-- top half -->
+<Data ElementName="your_item_count" Type="int8" />
+<Data ElementName="your_item_array" Type="Array" ArraySizeVariable="your_item_count">
+  <Data ElementName="your_item_unknown1" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="your_item_unknown2" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="your_item_slot" Type="int8" />
+  <Data ElementName="your_item_unknown3" Type ="int8" Size="3" />
+  <Data ElementName="your_item_id" Type="int32" />
+  <Data ElementName="your_item_quantity" Type="int32" />
+  <Data ElementName="your_item_icon" Type="int16" />
+  <Data ElementName="your_item_unknown4" Type="int8" />
+  <Data ElementName="your_item_background" Type="int8" />
+  <Data ElementName="your_item_unknown5" Type="int8" Size="8" />      
+</Data>
+<Data ElementName="your_copper" Type="int32" />
+<Data ElementName="your_silver" Type="int32" />
+<Data ElementName="your_gold" Type="int32" />
+<Data ElementName="your_plat" Type="int32" />
+<!-- lower half -->
+<Data ElementName="their_item_count" Type="int8" />
+<Data ElementName="their_item_array" Type="Array" ArraySizeVariable="their_item_count">
+  <Data ElementName="their_item_unknown1" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="their_item_unknown2" Type="int8" /> <!-- needs to be set to 1 -->
+  <Data ElementName="their_item_slot" Type="int8" />
+  <Data ElementName="their_item_unknown3" Type ="int8" Size="3" />
+  <Data ElementName="their_item_id" Type="int32" />
+  <Data ElementName="their_item_quantity" Type="int32" />
+  <Data ElementName="their_item_icon" Type="int16" />
+  <Data ElementName="their_item_unknown4" Type="int8" />
+  <Data ElementName="their_item_background" Type="int8" />
+  <Data ElementName="their_item_unknown5" Type="int8" Size="8" />      
+</Data>
+<Data ElementName="their_copper" Type="int32" />
+<Data ElementName="their_silver" Type="int32" />
+<Data ElementName="their_gold" Type="int32" />
+<Data ElementName="their_plat" Type="int32" />
+</Struct>
 <Struct Name="WS_PlayerTrade" ClientVersion="63225" OpcodeName="OP_ClientCmdMsg" OpcodeType="OP_EqUpdateStoreCmd" >
 	<Data ElementName="spawn_id" Type="int32" />
 	<Data ElementName="type" Type="int16" />