Example #1
0
        public void TR(Client client, Packet packet)
        {
            TradeRequestedPacket p = (TradeRequestedPacket)packet;

            if (clientlist[IndexOfClient(client)].enabled)
            {
                Console.Write("Trade Req from \"" + p.Name + "\"");
                if (Settings.Default.UseRegex)
                {
                    foreach (Regex rgx in blacklist)
                    {
                        if (rgx.IsMatch(p.Name))
                        {
                            Console.WriteLine(" ignored!"); return;
                        }
                    }
                }
                else
                {
                    if (Settings.Default.Blacklist.Contains(p.Name))
                    {
                        Console.WriteLine(" ignored!");
                        return;
                    }
                }
                RequestTradePacket rt = (RequestTradePacket)Packet.Create(PacketType.REQUESTTRADE);
                rt.Name = p.Name;
                client.SendToServer(rt);
                Console.WriteLine("accepted!");
            }
        }
Example #2
0
        private static void GiveItemRetry(PZClient giver, PZClient reciever, PZItem item, int start, int no)
        {
            int na = no + 1;

            bool[]             sel = PZClient.GetToSel(giver.client, item);
            RequestTradePacket req = (RequestTradePacket)Packet.Create(PacketType.REQUESTTRADE);

            req.Name = reciever.ToString();
            giver.client.SendToServer(req);

            req.Name = giver.ToString();
            reciever.client.SendToServer(req);

            ChangeTradePacket cht = (ChangeTradePacket)Packet.Create(PacketType.CHANGETRADE);

            cht.Offers = sel;
            giver.client.SendToServer(cht);

            AcceptTradePacket atpkt = (AcceptTradePacket)Packet.Create(PacketType.ACCEPTTRADE);

            atpkt.MyOffers   = sel;
            atpkt.YourOffers = new bool[12];
            giver.client.SendToServer(atpkt);

            atpkt.MyOffers   = new bool[12];
            atpkt.YourOffers = sel;
            reciever.client.SendToServer(atpkt);
            Console.WriteLine(giver.ToString() + " gave " + item + " to " + reciever);
            PluginUtils.Delay(2000, new Action(() =>
            {
                int now      = reciever.CountItem(item.ID);
                int addition = now - start;
                if (addition < item.amount)
                {
                    Console.WriteLine("[ERROR]" + (item.amount - addition) + " " + item.ActualName() + " failed to be recieved so trying again");
                    if (na <= 7)
                    {
                        PluginUtils.Delay(500, new Action(() => GiveItemRetry(giver, reciever, item, start, na)));
                    }
                    else
                    {
                        Console.WriteLine("Tried over 7 times, give up!");
                    }
                }
                else
                {
                    Console.WriteLine("Recieve success!");
                    PluginUtils.Delay(500, new Action(() =>
                    {
                        giver.enabled        = true;
                        reciever.enabled     = true;
                        reciever.spamenabled = true;
                        giver.spamenabled    = true;
                    }));
                }
            }));
            na++;
        }
Example #3
0
        public void OnTradeRequested(Client client, Packet packet)
        {
            TradeRequestedPacket request = (TradeRequestedPacket)packet;

            if (_Enabled[client] && _Started[client])
            {
                if (!CurrentTrades[client].isTrading)
                {
                    Console.WriteLine("Trade Request from \"" + request.Name + "\"");
                    RequestTradePacket req = (RequestTradePacket)Packet.Create(PacketType.REQUESTTRADE);
                    req.Name = request.Name;
                    client.SendToServer(req);
                }
            }
        }
Example #4
0
        }                                         //End of unknown code

        public void RequestTrade(RealmTime time, RequestTradePacket pkt)
        {
            if (!NameChosen)
            {
                SendInfo("Unique name is required to trade with others!");
                return;
            }
            if (tradeTarget != null)
            {
                SendError("You're already trading!");
                tradeTarget = null;
                return;
            }
            Player target = Owner.GetUniqueNamedPlayer(pkt.Name);

            if (target == null)
            {
                SendError("Player not found or is offline!");
                return;
            }
            if (target.tradeTarget != null && target.tradeTarget != this)
            {
                SendError(target.Name + " is already trading!");
                return;
            }

            if (this.potentialTrader.ContainsKey(target))
            {
                this.tradeTarget     = target;
                this.trade           = new bool[12];
                this.tradeAccepted   = false;
                target.tradeTarget   = this;
                target.trade         = new bool[12];
                target.tradeAccepted = false;
                this.potentialTrader.Clear();
                target.potentialTrader.Clear();

                TradeItem[] my = new TradeItem[Inventory.Length];
                for (int i = 0; i < Inventory.Length; i++)
                {
                    my[i] = new TradeItem()
                    {
                        Item      = this.Inventory[i] == null ? -1 : Inventory[i].ObjectType,
                        SlotType  = this.SlotTypes[i],
                        Included  = false,
                        Tradeable = (Inventory[i] == null || i < 4) ? false : (!Inventory[i].Soulbound && !Inventory[i].Undead && !Inventory[i].SUndead)
                    }
                }
                ;
                TradeItem[] your = new TradeItem[target.Inventory.Length];
                for (int i = 0; i < target.Inventory.Length; i++)
                {
                    your[i] = new TradeItem()
                    {
                        Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                        SlotType  = target.SlotTypes[i],
                        Included  = false,
                        Tradeable = (target.Inventory[i] == null || i < 4) ? false : (!target.Inventory[i].Soulbound && !target.Inventory[i].Undead && !target.Inventory[i].SUndead)
                    }
                }
                ;

                psr.SendPacket(new TradeStartPacket()
                {
                    MyItems   = my,
                    YourName  = target.Name,
                    YourItems = your
                });
                target.psr.SendPacket(new TradeStartPacket()
                {
                    MyItems   = your,
                    YourName  = this.Name,
                    YourItems = my
                });
            }
            else
            {
                target.potentialTrader[this] = 1000 * 20;
                target.psr.SendPacket(new TradeRequestedPacket()
                {
                    Name = Name
                });
                SendInfo("You have requested to trade with " + target.Name);
                return;
            }
        }
Example #5
0
        public void RequestTrade(RealmTime time, RequestTradePacket pkt)
        {
            if (!NameChosen)
            {
                SendInfo("Unique name is required to trade with others!");
                return;
            }
            Player target = Owner.GetUniqueNamedPlayer(pkt.Name);

            //if (intake)
            //{
            //    SendError(target.Name + " is already trading!");
            //    return;
            //}
            if (tradeTarget != null)
            {
                SendError("You're already trading!");
                tradeTarget = null;
                return;
            }

            if (client.Player == target)
            {
                SendError("Trading with yourself would be pointless.");
                tradeTarget = null;
                return;
            }
            if (target == null)
            {
                SendError("Player not found!");
                return;
            }
            if (target.tradeTarget != null && target.tradeTarget != this)
            {
                SendError(target.Name + " is already trading!");
                return;
            }

            if (potentialTrader.ContainsKey(target))
            {
                tradeTarget          = target;
                trade                = new bool[12];
                tradeAccepted        = false;
                target.tradeTarget   = this;
                target.trade         = new bool[12];
                target.tradeAccepted = false;
                potentialTrader.Clear();
                target.potentialTrader.Clear();
                taking = false;

                TradeItem[] my = new TradeItem[Inventory.Length];
                for (int i = 0; i < Inventory.Length; i++)
                {
                    my[i] = new TradeItem
                    {
                        Item      = Inventory[i] == null ? -1 : Inventory[i].ObjectType,
                        Data      = Inventory.Data[i] ?? new ItemData(),
                        SlotType  = SlotTypes[i],
                        Included  = false,
                        Tradeable = (Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound) && (!Inventory[i].AdminOnly) && (Inventory.Data[i] == null || !Inventory.Data[i].Soulbound)
                    }
                }
                ;
                TradeItem[] your = new TradeItem[target.Inventory.Length];
                for (int i = 0; i < target.Inventory.Length; i++)
                {
                    your[i] = new TradeItem
                    {
                        Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                        Data      = target.Inventory.Data[i] ?? new ItemData(),
                        SlotType  = target.SlotTypes[i],
                        Included  = false,
                        Tradeable = (target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound) && (!target.Inventory[i].AdminOnly) && (target.Inventory.Data[i] == null || !target.Inventory.Data[i].Soulbound)
                    }
                }
                ;

                client.SendPacket(new TradeStartPacket
                {
                    MyItems   = my,
                    YourName  = target.Name,
                    YourItems = your
                });
                target.client.SendPacket(new TradeStartPacket
                {
                    MyItems   = your,
                    YourName  = Name,
                    YourItems = my
                });
            }
            else
            {
                target.potentialTrader[this] = 1000 * 20;
                target.client.SendPacket(new TradeRequestedPacket
                {
                    Name = Name
                });
                SendInfo("Sent trade request to " + target.Name);
            }
        }
Example #6
0
        public void RequestTrade(RealmTime time, RequestTradePacket pkt)
        {
            var target = Owner.GetPlayerByName(pkt.Name);

            if (target == null)
            {
                SendInfo("{\"key\":\"server.player_not_found\",\"tokens\":{\"player\":\"" + pkt.Name + "\"}}");
                return;
            }
            if (!NameChosen || !target.NameChosen)
            {
                SendInfo("{\"key\":\"server.trade_needs_their_name\"}");
                return;
            }
            if (Client.Player == target)
            {
                SendInfo("{\"key\":\"server.self_trade\"}");
                return;
            }

            if (TradeManager.TradingPlayers.Count(_ => _.AccountId == target.AccountId) > 0)
            {
                SendInfo("{\"key\":\"server.they_already_trading\",\"tokens\":{\"player\":\"" + target.Name + "\"}}");
                return;
            }
            if (TradeManager.CurrentRequests.Count(_ => _.Value.AccountId == AccountId && _.Key.AccountId == target.AccountId) > 0)
            {
                var myItems   = new TradeItem[12];
                var yourItems = new TradeItem[12];

                for (var i = 0; i < myItems.Length; i++)
                {
                    myItems[i] = new TradeItem
                    {
                        Item      = Inventory[i] == null ? -1 : Inventory[i].ObjectType,
                        SlotType  = SlotTypes[i],
                        Tradeable = (Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound),
                        Included  = false
                    };
                }

                for (var i = 0; i < yourItems.Length; i++)
                {
                    yourItems[i] = new TradeItem
                    {
                        Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                        SlotType  = SlotTypes[i],
                        Tradeable = (target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound),
                        Included  = false
                    };
                }

                Client.SendPacket(new TradeStartPacket
                {
                    MyItems   = myItems,
                    YourItems = yourItems,
                    YourName  = target.Name
                });

                target.Client.SendPacket(new TradeStartPacket
                {
                    MyItems   = yourItems,
                    YourItems = myItems,
                    YourName  = Name
                });

                var t = new TradeManager(this, target);
                target.TradeHandler = t;
                TradeHandler        = t;
            }
            else
            {
                SendInfo("{\"key\":\"server.trade_requested\",\"tokens\":{\"player\":\"" + target.Name + "\"}}");
                if (target.Ignored.Contains(Client.Account.AccountId))
                {
                    return;
                }
                target.Client.SendPacket(new TradeRequestedPacket
                {
                    Name = Name
                });
                var format = new KeyValuePair <Player, Player>(this, target);
                TradeManager.CurrentRequests.Add(format);

                Owner.Timers.Add(new WorldTimer(60 * 1000, (w, t) =>
                {
                    if (!TradeManager.CurrentRequests.Contains(format))
                    {
                        return;
                    }
                    TradeManager.CurrentRequests.Remove(format);
                    SendInfo("{\"key\":\"server.trade_timeout\"}");
                }));
            }
        }
Example #7
0
        public void RequestTrade(RealmTime time, RequestTradePacket pkt)
        {
            if (!NameChosen)
            {
                psr.SendPacket(new TextPacket()
                {
                    BubbleTime = 0,
                    Stars      = -1,
                    Name       = "",
                    Text       = "Unique name is required to trade with others!"
                });
                return;
            }
            if (tradeTarget != null)
            {
                psr.SendPacket(new TextPacket()
                {
                    BubbleTime = 0,
                    Stars      = -1,
                    Name       = "*Error*",
                    Text       = "You're already trading!"
                });
                return;
            }
            Player target = Owner.GetUniqueNamedPlayer(pkt.Name);

            if (target == null)
            {
                psr.SendPacket(new TextPacket()
                {
                    BubbleTime = 0,
                    Stars      = -1,
                    Name       = "*Error*",
                    Text       = "Player not found!"
                });
                return;
            }
            if (target.tradeTarget != null && target.tradeTarget != this)
            {
                psr.SendPacket(new TextPacket()
                {
                    BubbleTime = 0,
                    Stars      = -1,
                    Name       = "*Error*",
                    Text       = target.Name + " is already trading!"
                });
                return;
            }

            if (this.potentialTrader.ContainsKey(target))
            {
                this.tradeTarget     = target;
                this.trade           = new bool[12];
                this.tradeAccepted   = false;
                target.tradeTarget   = this;
                target.trade         = new bool[12];
                target.tradeAccepted = false;
                this.potentialTrader.Clear();
                target.potentialTrader.Clear();

                TradeItem[] my = new TradeItem[this.Inventory.Length];
                for (int i = 0; i < this.Inventory.Length; i++)
                {
                    my[i] = new TradeItem()
                    {
                        Item      = this.Inventory[i] == null ? -1 : this.Inventory[i].ObjectType,
                        SlotType  = this.SlotTypes[i],
                        Included  = false,
                        Tradeable = (this.Inventory[i] == null || i < 4) ? false : !this.Inventory[i].Soulbound
                    }
                }
                ;
                TradeItem[] your = new TradeItem[target.Inventory.Length];
                for (int i = 0; i < target.Inventory.Length; i++)
                {
                    your[i] = new TradeItem()
                    {
                        Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                        SlotType  = target.SlotTypes[i],
                        Included  = false,
                        Tradeable = (target.Inventory[i] == null || i < 4) ? false : !target.Inventory[i].Soulbound
                    }
                }
                ;

                this.psr.SendPacket(new TradeStartPacket()
                {
                    MyItems   = my,
                    YourName  = target.Name,
                    YourItems = your
                });
                target.psr.SendPacket(new TradeStartPacket()
                {
                    MyItems   = your,
                    YourName  = this.Name,
                    YourItems = my
                });
            }
            else
            {
                target.potentialTrader[this] = 1000 * 20;
                target.psr.SendPacket(new TradeRequestedPacket()
                {
                    Name = Name
                });
                psr.SendPacket(new TextPacket()
                {
                    BubbleTime = 0,
                    Stars      = -1,
                    Name       = "",
                    Text       = "Sent trade request to " + target.Name
                });
                return;
            }
        }
Example #8
0
        public void RequestForge(RealmTime time, RequestTradePacket pkt)
        {
            if (tradeTarget != null)
            {
                SendError("You're already trading!");
                tradeTarget = null;
                return;
            }
            trade         = new bool[12];
            tradeAccepted = false;
            forging       = true;
            ForgeList f = new ForgeList();

            foreach (var i in f.combos)
            {
                for (var x = 0; x < i.Key.Length; x++)
                {
                    requestedItems.Add(i.Key[x]);
                }
                for (var x = 0; x < Inventory.Length; x++)
                {
                    if (Inventory[x] != null)
                    {
                        playerItems.Add(Inventory[x].ObjectId);
                    }
                }
                for (var x = 0; x < playerItems.Count; x++)
                {
                    for (var y = 0; y < requestedItems.Count; y++)
                    {
                        if (requestedItems[y] == playerItems[x])
                        {
                            requestedItems.RemoveAt(y);
                            break;
                        }
                    }
                }
                if (requestedItems.Count == 0)
                {
                    var   icdatas = new Dictionary <string, short>(db.data.XmlDatas.IdToType, StringComparer.OrdinalIgnoreCase);
                    short objType;
                    icdatas.TryGetValue(i.Value, out objType);
                    forgableItems.Add(objType);
                }
            }
            if (forgableItems.Count < Inventory.Length)
            {
                for (var i = forgableItems.Count; i < Inventory.Length; i++)
                {
                    forgableItems.Add(-1);
                }
            }
            var my = new TradeItem[Inventory.Length];

            for (var i = 0; i < Inventory.Length; i++)
            {
                my[i] = new TradeItem
                {
                    Item      = forgableItems[i],
                    SlotType  = SlotTypes[0],
                    Included  = false,
                    Tradeable = forgableItems[i] != -1
                };
            }
            var your = new TradeItem[12];

            for (var i = 0; i < Inventory.Length; i++)
            {
                your[i] = new TradeItem
                {
                    Item      = Inventory[i] == null ? -1 : Inventory[i].ObjectType,
                    SlotType  = SlotTypes[i],
                    Included  = false,
                    Tradeable = false
                }
            }
            ;
            psr.SendPacket(new TradeStartPacket
            {
                MyItems   = my,
                YourName  = "Items",
                YourItems = your
            });
        }
        public void RequestTake(RealmTime time, RequestTradePacket pkt)
        {
            if (tradeTarget != null)
            {
                SendError("You're already trading!");
                tradeTarget = null;
                return;
            }
            Player target = Owner.GetUniqueNamedPlayer(pkt.Name);

            if (target == null)
            {
                SendError("Player not found!");
                return;
            }
            if (target.tradeTarget != null && target.tradeTarget != this)
            {
                SendError(target.Name + " is already trading!");
                return;
            }
            tradeTarget        = target;
            trade              = new bool[12];
            tradeAccepted      = false;
            target.tradeTarget = this;
            target.trade       = new bool[12];
            taking             = true;
            tradeTarget.intake = true;
            var my = new TradeItem[Inventory.Length];

            for (int i = 0; i < Inventory.Length; i++)
            {
                my[i] = new TradeItem
                {
                    Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                    SlotType  = target.SlotTypes[i],
                    Included  = false,
                    Tradeable = (target.Inventory[i] != null)
                }
            }
            ;
            var your = new TradeItem[target.Inventory.Length];

            for (int i = 0; i < target.Inventory.Length; i++)
            {
                your[i] = new TradeItem
                {
                    Item      = -1,
                    SlotType  = target.SlotTypes[i],
                    Included  = false,
                    Tradeable = false
                }
            }
            ;

            psr.SendPacket(new TradeStartPacket
            {
                MyItems   = my,
                YourName  = target.Name,
                YourItems = your
            });
        }
Example #10
0
        public void RequestTrade(RealmTime time, RequestTradePacket pkt)
        {
            if (!NameChosen)
            {
                SendInfo("Unique name is required to trade with others!");
                return;
            }
            var target = Owner.GetUniqueNamedPlayer(pkt.Name);

            if (intake)
            {
                SendError(target.Name + " is already trading!");
                return;
            }
            if (tradeTarget != null)
            {
                SendError("You're already trading!");
                tradeTarget = null;
                return;
            }
            //if (psr.Player == target)
            //{
            //    SendError("Trading with yourself would be pointless.");
            //    tradeTarget = null;
            //    return;
            //}
            if (target == null)
            {
                SendError("Player not found!");
                return;
            }
            if (target.tradeTarget != null && target.tradeTarget != this)
            {
                SendError(target.Name + " is already trading!");
                return;
            }

            if ((Owner.Name == "Oryx's Castle") || (Owner.Name == "Battle Arena") || (Owner.Name == "Free Battle Arena") || (Owner.Name == "Guild Hall") || (Owner.Name == "Tournament Arena"))
            {
                SendError("Devwarlt disabled to trade in this place, about too many dupeing reports by community!");
                return;
            }
            else
            {
                if (potentialTrader.ContainsKey(target))
                {
                    tradeTarget          = target;
                    trade                = new bool[12];
                    tradeAccepted        = false;
                    target.tradeTarget   = this;
                    target.trade         = new bool[12];
                    target.tradeAccepted = false;
                    potentialTrader.Clear();
                    target.potentialTrader.Clear();
                    taking = false;

                    var my = new TradeItem[Inventory.Length];
                    for (var i = 0; i < Inventory.Length; i++)
                    {
                        my[i] = new TradeItem
                        {
                            Item      = Inventory[i] == null ? -1 : Inventory[i].ObjectType,
                            SlotType  = SlotTypes[i],
                            Included  = false,
                            Tradeable =
                                (Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound && !Inventory[i].Undead && !Inventory[i].SUndead)
                        }
                    }
                    ;
                    var your = new TradeItem[target.Inventory.Length];
                    for (var i = 0; i < target.Inventory.Length; i++)
                    {
                        your[i] = new TradeItem
                        {
                            Item      = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
                            SlotType  = target.SlotTypes[i],
                            Included  = false,
                            Tradeable =
                                (target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound && !target.Inventory[i].Undead &&
                                                                            !target.Inventory[i].SUndead)
                        }
                    }
                    ;

                    psr.SendPacket(new TradeStartPacket
                    {
                        MyItems   = my,
                        YourName  = target.Name,
                        YourItems = your
                    });
                    target.psr.SendPacket(new TradeStartPacket
                    {
                        MyItems   = your,
                        YourName  = Name,
                        YourItems = my
                    });
                }
                else
                {
                    target.potentialTrader[this] = 1000 * 20;
                    target.psr.SendPacket(new TradeRequestedPacket
                    {
                        Name = Name
                    });
                    SendInfo("Sent trade request to " + target.Name);
                }
            }
        }