[Release]Trade

12/06/2009 19:39 Arcо#1
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.
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;
                    }
            }
        }
    }
}
Press thanks if it helped.
12/06/2009 19:45 .Donavon#2
NiCe ReLeAsE!!
12/06/2009 19:50 Arcо#3
Quote:
Originally Posted by .Donavon View Post
NiCe ReLeAsE!!
If you like it press thanks.
12/06/2009 19:51 Korvacs#4
Quote:
Originally Posted by Tiku View Post
If you like it press thanks.
Theres atually no obligation for people to press thanks, please stop demanding it from people.
12/06/2009 19:53 Arcо#5
Quote:
Originally Posted by Korvacs View Post
Theres atually no obligation for people to press thanks, please stop demanding it from people.

It was more of a request than a demand.
12/13/2009 09:09 wael162#6
thanx bro
12/15/2009 16:05 albert0#7
thanx, i needed to handle this.
12/15/2009 21:46 PeTe Ninja#8
Wait why in the world would you want your GMs to trade with players? I think the system of not allowing them to interact( giving things ) with players is awesome. ...If you wanted yourself to be able to trade, either make it with only other gms or have a command that allows you to trade... e.g #open trade
12/16/2009 00:19 ASSN9NE#9
ok well im running the 5165 source and that still didnt let me trade to or from GM's OldCODB source rikardo updated server with 15-20 pct of the npc wont work either but thats a dif story
12/16/2009 00:30 .Guru#10
Quote:
Originally Posted by ASSN9NE View Post
ok well im running the 5156 source and that still didnt let me trade to or from GM's OldCODB source rikardo updated server with 15-20 pct of the npc wont work either but thats a dif story
you have to replace your entire trade.cs with arco's code. remember to debug from the source after making alterations, or the changes won't take effect.
12/16/2009 00:46 Korvacs#11
Quote:
Originally Posted by PeTe Ninja View Post
Wait why in the world would you want your GMs to trade with players? I think the system of not allowing them to interact( giving things ) with players is awesome. ...If you wanted yourself to be able to trade, either make it with only other gms or have a command that allows you to trade... e.g #open trade
I guess it comes down to oppinion, some people trust their GMs, in my private server i would have no restriction on who could trade with who. Its just anouther function that would slow down the server's packet processing, so why should you bother with it at all?

Get members of staff who can be trusted, then you dont need that check at all.
12/16/2009 01:31 .Guru#12
Quote:
Originally Posted by Korvacs View Post
I guess it comes down to oppinion, some people trust their GMs, in my private server i would have no restriction on who could trade with who. Its just anouther function that would slow down the server's packet processing, so why should you bother with it at all?

Get members of staff who can be trusted, then you dont need that check at all.
agreed 100%, and as he said, upon the degree of trust, allow only people you formally know, or "trust", to be staff, otherwise it'll comeback to haunt you when everyone has millions of CPs, and you either delete all accounts/characters & lose a ton of players, or change all the chars' CPs back to the original amount before the idiot altered it.
12/16/2009 18:23 Basser#13
Quote:
Originally Posted by Hepatitis C View Post

It was more of a request than a demand.
If it was a request, you should have started with, could you or something similar, it sounded as a demand to me.
12/16/2009 19:13 onlyme64#14
Quote:
Originally Posted by Smythe94 View Post
If it was a request, you should have started with, could you or something similar, it sounded as a demand to me.
Bloody hell smyth, he wasnt like "GIFF THANKS OR DIE".
Demand or not, does it matter? Geez.
12/18/2009 23:05 ASSN9NE#15
ahha ye i just figured it out now thx 2 C# i was just copying and pasteing and replaceing but ty 4 helpin me ... and replying any ideas on the codes 2 fix the pk touney npc and the gc1-4 npcs to work for gw winners? atm im trying 2 fix the fb/ss issue