Yeah, I started working on trading a little while ago, here's what I got so far.
Code:
case 1056: // Trading
{
int UID = BitConverter.ToInt32(Data, 4);
byte Option = Data[8];
switch (Option)
{
case 1: // Request Trade
{
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == UID)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
if (UID != CSocket.Client.TradingWith)
{
tSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 1));
tSocket.Client.TradingWith = CSocket.Client.ID;
CSocket.Client.TradingWith = tSocket.Client.ID;
CSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] Your trade request has been sent out.", Struct.ChatType.Top));
}
else
{
CSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] Trade Confirmed!", Struct.ChatType.Top));
tSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 3));
CSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 3));
}
break;
}
case 2: // End Trade
{
if (CSocket.Client.TradingWith == 0)
return;
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == CSocket.Client.TradingWith)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
tSocket.Send(ConquerPacket.Trade(CSocket.Client.TradingWith, 5));
CSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] Trading Ended.", Struct.ChatType.Top));
tSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] Trading Ended.", Struct.ChatType.Top));
CSocket.Client.TradingWith = 0;
tSocket.Client.TradingWith = 0;
foreach (Struct.ItemInfo Item in CSocket.Client.TradeList)
{
CSocket.Client.Inventory.Add(Item.UID, Item);
CSocket.Send(ConquerPacket.ItemInfo(
Item.UID,
Item.ItemID,
Item.Plus,
Item.Bless,
Item.Enchant,
Item.Soc1,
Item.Soc2,
Item.Dura,
Item.MaxDura,
Item.Position,
Item.Color,
Item.Free,
Item.Progress,
Item.Suspicious,
Item.Locked));
}
CSocket.Client.TradeList = new ArrayList(20);
foreach (Struct.ItemInfo Item in tSocket.Client.TradeList)
{
tSocket.Client.Inventory.Add(Item.UID, Item);
tSocket.Send(ConquerPacket.ItemInfo(
Item.UID,
Item.ItemID,
Item.Plus,
Item.Bless,
Item.Enchant,
Item.Soc1,
Item.Soc2,
Item.Dura,
Item.MaxDura,
Item.Position,
Item.Color,
Item.Free,
Item.Progress,
Item.Suspicious,
Item.Locked));
}
tSocket.Client.TradeList = new ArrayList(20);
CSocket.Client.TradeSilver = 0;
CSocket.Client.TradeCP = 0;
CSocket.Client.TradeOK = false;
tSocket.Client.TradeSilver = 0;
tSocket.Client.TradeCP = 0;
tSocket.Client.TradeOK = false;
break;
}
case 6: // Add Item
{
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == UID)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
if (tSocket.Client.Inventory.Count + CSocket.Client.TradeList.Count < 40)
{
Struct.ItemInfo tItem = new Struct.ItemInfo();
foreach (Struct.ItemInfo item in CSocket.Client.Inventory.Values)
{
if (item.UID == UID)
{
tItem = item;
break;
}
}
CSocket.Client.TradeList.Add(tItem);
// Send Packet to show trade person what the item is... argh
tSocket.Send(ConquerPacket.TradeItem(
tItem.UID,
tItem.ItemID,
tItem.Plus,
tItem.Bless,
tItem.Enchant,
tItem.Soc1,
tItem.Soc2,
tItem.Dura,
tItem.MaxDura,
tItem.Position,
tItem.Color,
tItem.Free,
tItem.Progress,
tItem.Suspicious,
tItem.Locked));
}
else
{
CSocket.Send(ConquerPacket.Trade(UID, 11));
CSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] " + tSocket.Client.Name + " cannot hold anymore items.", Struct.ChatType.Top));
}
break;
}
case 7: // Specify Money
{
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == CSocket.Client.TradingWith)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
if (CSocket.Client.Money >= UID)
{
CSocket.Client.TradeSilver = UID;
tSocket.Send(ConquerPacket.Trade(UID, 8));
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
}
break;
}
case 13: // Specify CPs
{
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == CSocket.Client.TradingWith)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
if (CSocket.Client.CPs >= UID)
{
CSocket.Client.TradeCP = UID;
tSocket.Send(ConquerPacket.Trade(UID, 12));
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
}
break;
}
case 10: // Confirm Trade
{
ClientSocket tSocket = null;
foreach (ClientSocket csoc in Nano.ClientPool.Values)
{
if (csoc.Client.ID == CSocket.Client.TradingWith)
{
tSocket = csoc;
break;
}
}
if (tSocket == null)
return;
if (tSocket.Client.TradeOK)
{
// Moneys Check
if (CSocket.Client.TradeSilver <= CSocket.Client.Money)
{
if (tSocket.Client.TradeSilver <= tSocket.Client.Money)
{
if (CSocket.Client.TradeCP <= CSocket.Client.CPs)
{
if (tSocket.Client.TradeCP <= tSocket.Client.CPs)
{
CSocket.Client.Money -= CSocket.Client.TradeSilver;
tSocket.Client.Money += CSocket.Client.TradeSilver;
tSocket.Client.Money -= tSocket.Client.TradeSilver;
CSocket.Client.Money += tSocket.Client.TradeSilver;
tSocket.Client.CPs -= tSocket.Client.TradeCP;
CSocket.Client.CPs += tSocket.Client.TradeCP;
CSocket.Client.CPs -= CSocket.Client.TradeCP;
tSocket.Client.CPs += CSocket.Client.TradeCP;
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney));
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.CPs, Struct.StatusTypes.InvCPoints));
tSocket.Send(ConquerPacket.Status(CSocket, 2, tSocket.Client.Money, Struct.StatusTypes.InvMoney));
tSocket.Send(ConquerPacket.Status(CSocket, 2, tSocket.Client.CPs, Struct.StatusTypes.InvCPoints));
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
return;
}
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
return;
}
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
return;
}
}
else
{
tSocket.Send(ConquerPacket.Trade(tSocket.Client.ID, 2));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.ID, 2));
return;
}
// ---
tSocket.Send(ConquerPacket.Trade(tSocket.Client.TradingWith, 5));
CSocket.Send(ConquerPacket.Trade(CSocket.Client.TradingWith, 5));
foreach (Struct.ItemInfo Item in tSocket.Client.TradeList)
{
CSocket.Client.Inventory.Add(Item.UID, Item);
CSocket.Send(ConquerPacket.ItemInfo(
Item.UID,
Item.ItemID,
Item.Plus,
Item.Bless,
Item.Enchant,
Item.Soc1,
Item.Soc2,
Item.Dura,
Item.MaxDura,
Item.Position,
Item.Color,
Item.Free,
Item.Progress,
Item.Suspicious,
Item.Locked));
tSocket.Send(ConquerPacket.ItemUsage(Item.UID, 0, Struct.ItemUsage.RemoveItem));
Database.Database.DeleteItem(Item.UID);
tSocket.Client.Inventory.Remove(Item.UID);
}
tSocket.Client.TradeList = new ArrayList(20);
foreach (Struct.ItemInfo Item in CSocket.Client.TradeList)
{
tSocket.Client.Inventory.Add(Item.UID, Item);
tSocket.Send(ConquerPacket.ItemInfo(
Item.UID,
Item.ItemID,
Item.Plus,
Item.Bless,
Item.Enchant,
Item.Soc1,
Item.Soc2,
Item.Dura,
Item.MaxDura,
Item.Position,
Item.Color,
Item.Free,
Item.Progress,
Item.Suspicious,
Item.Locked));
CSocket.Send(ConquerPacket.ItemUsage(Item.UID, 0, Struct.ItemUsage.RemoveItem));
Database.Database.DeleteItem(Item.UID);
CSocket.Client.Inventory.Remove(Item.UID);
}
CSocket.Client.TradeList = new ArrayList(20);
CSocket.Client.TradingWith = 0;
tSocket.Client.TradingWith = 0;
CSocket.Client.TradeSilver = 0;
CSocket.Client.TradeCP = 0;
CSocket.Client.TradeOK = false;
tSocket.Client.TradeSilver = 0;
tSocket.Client.TradeCP = 0;
tSocket.Client.TradeOK = false;
CSocket.Send(ConquerPacket.Chat(0, "TRADE", CSocket.Client.Name, "[Trade] Trading was Sucessful!", Struct.ChatType.Top));
tSocket.Send(ConquerPacket.Chat(0, "TRADE", tSocket.Client.Name, "[Trade] Trading was Sucessful!", Struct.ChatType.Top));
}
else
{
CSocket.Client.TradeOK = true;
tSocket.Send(ConquerPacket.Trade(0, 10));
}
break;
}
}
break;
}