Okay well in the 5165 source, GM's and PM's cannot trade.
Well yeah the fix for it is small but since alot of people were asking me about it I am going to release my trading code.
Replace your entire Trade.cs with this code.
Press thanks if it helped.
Well yeah the fix for it is small but since alot of people were asking me about it I am going to release my trading code.
Replace your entire Trade.cs with this code.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NewestCOServer.Game;
namespace NewestCOServer.PacketHandling
{
public class Trade
{
static void CancelTrade(Main.GameClient C)
{
if (C.MyChar.Trading)
{
Character Who = (Character)World.H_Chars[C.MyChar.TradingWith];
if (Who != null)
{
Who.MyClient.AddSend(Packets.TradePacket(C.MyChar.TradingWith, 5));
Who.Trading = false;
Who.TradingWith = 0;
Who.TradeSide.Clear();
Who.TradingCPs = 0;
Who.TradingSilvers = 0;
Who.ClickedOK = false;
Who.Silvers = Who.Silvers;//update the silvers
Who.CPs = Who.CPs;//update the cps
Who.MyClient.AddSend(Packets.ChatMessage(Who.MyClient.MessageID, "SYSTEM", Who.Name, "Trading failed!", 2005, 0));
}
C.AddSend(Packets.TradePacket(C.MyChar.TradingWith, 5));
C.MyChar.Trading = false;
C.MyChar.TradingWith = 0;
C.MyChar.TradeSide = new System.Collections.ArrayList(20);
C.MyChar.TradingCPs = 0;
C.MyChar.TradingSilvers = 0;
C.MyChar.ClickedOK = false;
C.MyChar.CPs = C.MyChar.CPs;//update the cps
C.MyChar.Silvers = C.MyChar.Silvers;//update the silvers
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "Trading failed!", 2005, 0));
}
}
public static void Handle(Main.GameClient C, byte[] Data)
{
uint UID = BitConverter.ToUInt32(Data, 4);
byte Type = Data[8];
switch (Type)
{
case 1:
{
Character Who = (Character)World.H_Chars[UID];
if (Who != null && !Who.Trading)
{
if (!C.MyChar.Trading)
{
if (Who.EntityID != C.MyChar.TradingWith)
{
C.MyChar.TradingWith = UID;
if (Who.EntityID == C.MyChar.TradingWith && Who.TradingWith == C.MyChar.EntityID)
{
Who.MyClient.AddSend(Packets.TradePacket(C.MyChar.EntityID, 3));
C.AddSend(Packets.TradePacket(Who.EntityID, 3));
C.MyChar.Trading = true;
Who.Trading = true;
break;
}
else
{
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]Request for trading has been sent out.", 2005, 0));
Who.MyClient.AddSend(Packets.TradePacket(C.MyChar.EntityID, 1));
}
}
if (Who.EntityID == C.MyChar.TradingWith && Who.TradingWith == C.MyChar.EntityID)
{
Who.MyClient.AddSend(Packets.TradePacket(C.MyChar.EntityID, 3));
C.AddSend(Packets.TradePacket(Who.EntityID, 3));
C.MyChar.Trading = true;
Who.Trading = true;
}
}
else
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]Close the current trade before you take another one.", 2005, 0));
}
else
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]The target is trading with someone else.", 2005, 0));
break;
}
case 2:
{
CancelTrade(C);
break;
}
case 6:
{
Character Who = (Character)World.H_Chars[C.MyChar.TradingWith];
if (Who != null)
{
if (C.MyChar.TradeSide.Count < 20)
{
if (Who.Inventory.Count + C.MyChar.TradeSide.Count < 40)
{
Game.Item I = C.MyChar.FindInvItem(UID);
if (!I.FreeItem)
{
Who.MyClient.AddSend(Packets.TradeItem(I));
C.MyChar.TradeSide.Add(I.UID);
}
else
{
C.AddSend(Packets.TradePacket(UID, 11));
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]Cannot trade items made with gm commands.", 2005, 0));
}
}
else
{
C.AddSend(Packets.TradePacket(UID, 11));
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]Your trade partner can't hold any more items.", 2005, 0));
Who.MyClient.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "[Trade]The one your trading with cant add anymore items on the table because you have no room in your inventory.", 2005, 0));
}
}
}
break;
}
case 7:
{
C.MyChar.TradingSilvers = UID;
Character Who = (Character)World.H_Chars[C.MyChar.TradingWith];
Who.MyClient.AddSend(Packets.TradePacket(UID, 8));
break;
}
case 13:
{
C.MyChar.TradingCPs = UID;
Character Who = (Character)World.H_Chars[C.MyChar.TradingWith];
Who.MyClient.AddSend(Packets.TradePacket(UID, 12));
break;
}
case 10:
{
Character Who = (Character)World.H_Chars[C.MyChar.TradingWith];
if (Who != null && Who.ClickedOK)
{
if (C.MyChar.Silvers >= C.MyChar.TradingSilvers && C.MyChar.CPs >= C.MyChar.TradingCPs && Who.Silvers >= Who.TradingSilvers && Who.CPs >= Who.TradingCPs)
{
Who.MyClient.AddSend(Packets.TradePacket(C.MyChar.TradingWith, 5));
C.AddSend(Packets.TradePacket(C.MyChar.EntityID, 5));
Who.Silvers += C.MyChar.TradingSilvers;
Who.Silvers -= Who.TradingSilvers;
C.MyChar.Silvers += Who.TradingSilvers;
C.MyChar.Silvers -= C.MyChar.TradingSilvers;
Who.CPs += C.MyChar.TradingCPs;
Who.CPs -= Who.TradingCPs;
C.MyChar.CPs += Who.TradingCPs;
C.MyChar.CPs -= C.MyChar.TradingCPs;
foreach (uint Id in C.MyChar.TradeSide)
{
Game.Item I = C.MyChar.FindInvItem(Id);
Who.AddItem(I);
C.MyChar.RemoveItem(I);
}
foreach (uint Id in Who.TradeSide)
{
Game.Item I = Who.FindInvItem(Id);
C.MyChar.AddItem(I);
Who.RemoveItem(I);
}
Who.Trading = false;
Who.TradingWith = 0;
Who.TradeSide = new System.Collections.ArrayList(20);
Who.TradingCPs = 0;
Who.TradingSilvers = 0;
Who.ClickedOK = false;
Who.MyClient.AddSend(Packets.ChatMessage(Who.MyClient.MessageID, "SYSTEM", Who.Name, "Trading succeeded!", 2005, 0));
C.MyChar.Trading = false;
C.MyChar.TradingWith = 0;
C.MyChar.TradeSide = new System.Collections.ArrayList(20);
C.MyChar.TradingCPs = 0;
C.MyChar.TradingSilvers = 0;
C.MyChar.ClickedOK = false;
C.AddSend(Packets.ChatMessage(C.MessageID, "SYSTEM", C.MyChar.Name, "Trading succeeded!", 2005, 0));
}
else
CancelTrade(C);
}
else
{
C.MyChar.ClickedOK = true;
Who.MyClient.AddSend(Packets.TradePacket(0, 10));
}
break;
}
}
}
}
}