wServer.realm.entities.player.Player.DoTrade C# (CSharp) Method

DoTrade() private method

private DoTrade ( ) : void
return void
        private void DoTrade()
        {
            if (tradeTarget != null && Owner != null && tradeTarget.Owner != null &&
                Owner == tradeTarget.Owner)
            {
                var thisItems = new List<Item>();
                for (var i = 0; i < trade.Length; i++)
                    if (trade[i])
                    {
                        thisItems.Add(Inventory[i]);
                        Inventory[i] = null;
                        UpdateCount++;
                        if (itemnumber1 == 0)
                        {
                            items1 = items1 + " " + thisItems[itemnumber1].ObjectId;
                        }
                        else if (itemnumber1 > 0)
                        {
                            items1 = items1 + ", " + thisItems[itemnumber1].ObjectId;
                        }
                        itemnumber1++;
                    }

                if (thisItems.Count == 0)
                    thisItems.Add(null);

                var targetItems = new List<Item>();
                for (var i = 0; i < tradeTarget.trade.Length; i++)
                    if (tradeTarget.trade[i])
                    {
                        targetItems.Add(tradeTarget.Inventory[i]);
                        tradeTarget.Inventory[i] = null;
                        tradeTarget.UpdateCount++;

                        if (itemnumber2 == 0)
                        {
                            items2 = items2 + " " + targetItems[itemnumber2].ObjectId;
                        }
                        else if (itemnumber2 > 0)
                        {
                            items2 = items2 + ", " + targetItems[itemnumber2].ObjectId;
                        }
                        itemnumber2++;
                    }

                if (targetItems.Count == 0)
                    targetItems.Add(null);

                for (var i = 0; i < Inventory.Length; i++) //put items by slotType
                    if (Inventory[i] == null)
                    {
                        if (SlotTypes[i] == 0)
                        {
                            Inventory[i] = targetItems[0];
                            targetItems.RemoveAt(0);
                        }
                        else
                        {
                            var itmIdx = -1;
                            for (var j = 0; j < targetItems.Count; j++)
                            {
                                try
                                {
                                    if (targetItems[j].SlotType == SlotTypes[i])
                                    {
                                        itmIdx = j;
                                        break;
                                    }
                                }
                                catch
                                {
                                    itmIdx = -1;
                                }
                            }
                            if (itmIdx != -1)
                            {
                                Inventory[i] = targetItems[itmIdx];
                                targetItems.RemoveAt(itmIdx);
                            }
                        }
                        if (targetItems.Count == 0) break;
                    }
                if (targetItems.Count > 0)
                    for (var i = 0; i < Inventory.Length; i++) //force put item
                        if (Inventory[i] == null)
                        {
                            Inventory[i] = targetItems[0];
                            targetItems.RemoveAt(0);
                            if (targetItems.Count == 0) break;
                        }

                for (var i = 0; i < tradeTarget.Inventory.Length; i++) //put items by slotType
                    if (tradeTarget.Inventory[i] == null)
                    {
                        if (tradeTarget.SlotTypes[i] == 0)
                        {
                            tradeTarget.Inventory[i] = thisItems[0];
                            thisItems.RemoveAt(0);
                        }
                        else
                        {
                            var itmIdx = -1;
                            for (var j = 0; j < thisItems.Count; j++)
                            {
                                try
                                {
                                    if (thisItems[j].SlotType == tradeTarget.SlotTypes[i])
                                    {
                                        itmIdx = j;
                                        break;
                                    }
                                }
                                catch
                                {
                                    itmIdx = -1;
                                }
                            }
                            if (itmIdx != -1)
                            {
                                tradeTarget.Inventory[i] = thisItems[itmIdx];
                                thisItems.RemoveAt(itmIdx);
                            }
                        }
                        if (thisItems.Count == 0) break;
                    }
                if (thisItems.Count > 0)
                    for (var i = 0; i < tradeTarget.Inventory.Length; i++) //force put item
                        if (tradeTarget.Inventory[i] == null)
                        {
                            tradeTarget.Inventory[i] = thisItems[0];
                            thisItems.RemoveAt(0);
                            if (thisItems.Count == 0) break;
                        }

                psr.SendPacket(new TradeDonePacket
                {
                    Result = 1,
                    Message = "Trade successful!"
                });
                tradeTarget.psr.SendPacket(new TradeDonePacket
                {
                    Result = 1,
                    Message = "Trade successful!"
                });

                const string dir = @"logs";
                if (!Directory.Exists(dir))
                    Directory.CreateDirectory(dir);
                using (var writer = new StreamWriter(@"logs\TradeLog.log", true))
                {
                    writer.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
                                     "{" + items2 + "}");
                }
                Console.Out.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
                                      "{" + items2 + "}");
                items1 = "";
                items2 = "";
                itemnumber1 = 0;
                itemnumber2 = 0;
                UpdateCount++;
                tradeTarget.UpdateCount++;

                tradeTarget.tradeTarget = null;
                tradeTarget.trade = null;
                tradeTarget.tradeAccepted = false;
                tradeTarget = null;
                trade = null;
                tradeAccepted = false;
            }
        }