예제 #1
0
파일: BuyAgent.cs 프로젝트: sorsarre/Razor
        private bool OnItemChangeAmountResponse(int entryId, string input)
        {
            if (ushort.TryParse(input, out ushort amount))
            {
                if (amount <= 0)
                {
                    return(false);
                }

                BuyEntry e = (BuyEntry)m_Items[entryId];

                e.Amount = amount;
                m_SubList.BeginUpdate();
                m_SubList.Items.Clear();

                for (int i = 0; i < m_Items.Count; i++)
                {
                    m_SubList.Items.Add(m_Items[i]);
                }

                m_SubList.EndUpdate();

                return(true);
            }

            return(false);
        }
예제 #2
0
파일: BuyAgent.cs 프로젝트: sorsarre/Razor
        public void Add(BuyEntry entry)
        {
            m_Items?.Add(entry);

            m_SubList?.Items.Add(entry);

            World.Player?.SendMessage(MsgLevel.Force, LocString.ItemAdded);
        }
예제 #3
0
파일: BuyAgent.cs 프로젝트: sorsarre/Razor
        public override void OnButtonPress(int num)
        {
            switch (num)
            {
            case 1:
                World.Player.SendMessage(MsgLevel.Force, LocString.TargItemAdd);
                Targeting.OneTimeTarget(new Targeting.TargetResponseCallback(OnTarget));
                break;

            case 2:
                if (m_SubList == null)
                {
                    break;
                }

                if (m_SubList.SelectedIndex >= 0)
                {
                    BuyEntry e = (BuyEntry)m_Items[m_SubList.SelectedIndex];

                    InputDialogGump inputGump = new InputDialogGump(OnItemChangeAmountResponse, m_SubList.SelectedIndex, Language.GetString(LocString.EnterAmount), e.Amount.ToString());
                    inputGump.SendGump();
                }

                break;

            case 3:

                if (MessageBox.Show(Language.GetString(LocString.Confirm), Language.GetString(LocString.ClearList),
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (m_SubList.SelectedIndex >= 0)
                    {
                        m_Items.RemoveAt(m_SubList.SelectedIndex);
                        m_SubList.Items.RemoveAt(m_SubList.SelectedIndex);
                        m_SubList.SelectedIndex = -1;
                    }
                }

                break;

            case 4:

                if (MessageBox.Show(Language.GetString(LocString.Confirm), Language.GetString(LocString.ClearList),
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    m_SubList.Items.Clear();
                    m_Items.Clear();
                }

                break;

            case 5:
                m_Enabled        = !m_Enabled;
                m_EnableBTN.Text = Language.GetString(m_Enabled ? LocString.PushDisable : LocString.PushEnable);
                break;
            }
        }
예제 #4
0
파일: BuyAgent.cs 프로젝트: AsYlum-/Razor-1
        private bool OnItemChangeAmountResponse(int entryId, string input)
        {
            if (ushort.TryParse(input, out ushort amount))
            {
                if (amount <= 0)
                {
                    return(false);
                }

                BuyEntry e = (BuyEntry)Items[entryId];

                e.Amount = amount;

                if (m_SubList != null)
                {
                    m_SubList.BeginUpdate();
                    m_SubList.Items.Clear();

                    for (int i = 0; i < Items.Count; i++)
                    {
                        m_SubList.Items.Add(Items[i]);
                    }

                    m_SubList.EndUpdate();
                }

                if (_fromGump)
                {
                    _fromGump = false;

                    AgentsGump agent = new AgentsGump(this);
                    agent.SendGump();
                }
                else
                {
                    Engine.MainWindow.SafeAction(s => s.ShowMe());
                }

                return(true);
            }

            if (_fromGump)
            {
                _fromGump = false;

                AgentsGump agent = new AgentsGump(this);
                agent.SendGump();
            }
            else
            {
                Engine.MainWindow.SafeAction(s => s.ShowMe());
            }

            return(false);
        }
예제 #5
0
파일: BuyAgent.cs 프로젝트: AsYlum-/Razor-1
        public void RemoveItem(int itemId)
        {
            BuyEntry item = Items.FirstOrDefault(a => a.Id == itemId);

            if (item != null)
            {
                Items.Remove(item);
                m_SubList?.Items?.Remove(item);

                World.Player?.SendMessage(MsgLevel.Force, LocString.ItemRemoved);
            }
        }
예제 #6
0
파일: BuyAgent.cs 프로젝트: AsYlum-/Razor-1
        public void SetItemAmount(int itemId, bool fromGump = false)
        {
            int      itemIndex = Items.FindIndex(a => a.Id == itemId);
            BuyEntry item      = Items[itemIndex];

            if (item != null)
            {
                _fromGump = fromGump;

                InputDialogGump inputGump = new InputDialogGump(OnItemChangeAmountResponse, itemIndex, Language.GetString(LocString.EnterAmount), item.Amount.ToString());
                inputGump.SendGump();
            }
        }
예제 #7
0
        private void OnTarget(bool location, Serial serial, Point3D loc, ushort gfx)
        {
            Engine.MainWindow.SafeAction(s => s.ShowMe());

            if (!location && !serial.IsMobile)
            {
                if (InputBox.Show(Engine.MainWindow, Language.GetString(LocString.EnterAmount),
                                  Language.GetString(LocString.InputReq)))
                {
                    ushort count = (ushort)InputBox.GetInt(0);
                    if (count <= 0)
                    {
                        return;
                    }

                    BuyEntry be = new BuyEntry(gfx, count);
                    m_Items.Add(be);
                    if (m_SubList != null)
                    {
                        m_SubList.Items.Add(be);
                    }
                }
            }
        }
예제 #8
0
파일: Agents.cs 프로젝트: herculesjr/razor
        private void OnTarget( bool location, Serial serial, Point3D loc, ushort gfx )
        {
            Engine.MainWindow.ShowMe();

            if ( !location && !serial.IsMobile )
            {
                if ( InputBox.Show( Engine.MainWindow, Language.GetString( LocString.EnterAmount ), Language.GetString( LocString.InputReq ) ) )
                {
                    ushort count = (ushort)InputBox.GetInt( 0 );
                    if ( count <= 0 )
                        return;
                    BuyEntry be = new BuyEntry( gfx, count );
                    m_Items.Add( be );
                    if ( m_SubList != null )
                        m_SubList.Items.Add( be );
                }
            }
        }
예제 #9
0
파일: BuyAgent.cs 프로젝트: sorsarre/Razor
        private static void DisplayBuy(PacketReader p, PacketHandlerEventArgs args)
        {
            Serial serial = p.ReadUInt32();
            ushort gump   = p.ReadUInt16();

            if (gump != 0x30 || !serial.IsMobile || !Client.Instance.AllowBit(FeatureBit.BuyAgent) ||
                World.Player == null)
            {
                return;
            }

            Mobile vendor = World.FindMobile(serial);

            if (vendor == null)
            {
                return;
            }

            Item pack = vendor.GetItemOnLayer(Layer.ShopBuy);

            if (pack == null || pack.Contains == null || pack.Contains.Count <= 0)
            {
                return;
            }

            pack.Contains.Sort(ItemXYComparer.Instance);

            int total = 0;
            int cost  = 0;
            List <VendorBuyItem>     buyList = new List <VendorBuyItem>();
            Dictionary <ushort, int> found   = new Dictionary <ushort, int>();
            bool lowGoldWarn = false;

            for (int i = 0; i < pack.Contains.Count; i++)
            {
                Item item = (Item)pack.Contains[i];
                if (item == null)
                {
                    continue;
                }

                foreach (BuyAgent ba in m_Instances)
                {
                    if (ba == null || ba.m_Items == null || !ba.m_Enabled)
                    {
                        continue;
                    }

                    for (int a = 0; a < ba.m_Items.Count; a++)
                    {
                        BuyEntry b = (BuyEntry)ba.m_Items[a];
                        if (b == null)
                        {
                            continue;
                        }

                        bool dupe = false;
                        foreach (VendorBuyItem vbi in buyList)
                        {
                            if (vbi.Serial == item.Serial)
                            {
                                dupe = true;
                            }
                        }

                        if (dupe)
                        {
                            continue;
                        }

                        // f*****g osi and their blank scrolls
                        if (b.Id == item.ItemID.Value || (b.Id == 0x0E34 && item.ItemID.Value == 0x0EF3) ||
                            (b.Id == 0x0EF3 && item.ItemID.Value == 0x0E34))
                        {
                            int count = World.Player.Backpack.GetCount(b.Id);
                            if (found.ContainsKey(b.Id))
                            {
                                count += (int)found[b.Id];
                            }

                            if (count < b.Amount && b.Amount > 0)
                            {
                                count = b.Amount - count;
                                if (count >= item.Amount)
                                {
                                    count = item.Amount;
                                }
                                else if (count <= 0)
                                {
                                    continue;
                                }

                                if (!found.ContainsKey(b.Id))
                                {
                                    found.Add(b.Id, (int)count);
                                }
                                else
                                {
                                    found[b.Id] = (int)found[b.Id] + (int)count;
                                }

                                buyList.Add(new VendorBuyItem(item.Serial, count, item.Price));
                                total += count;
                                cost  += item.Price * count;
                            }
                        }
                    }
                }
            }

            if (!Config.GetBool("BuyAgentsIgnoreGold"))
            {
                if (cost > World.Player.Gold && cost < 2000 && buyList.Count > 0)
                {
                    lowGoldWarn = true;
                    do
                    {
                        VendorBuyItem vbi = (VendorBuyItem)buyList[0];
                        if (cost - vbi.TotalCost <= World.Player.Gold)
                        {
                            while (cost > World.Player.Gold && vbi.Amount > 0)
                            {
                                cost -= vbi.Price;
                                --vbi.Amount;
                                --total;
                            }

                            if (vbi.Amount <= 0)
                            {
                                buyList.RemoveAt(0);
                            }
                        }
                        else
                        {
                            cost  -= vbi.TotalCost;
                            total -= vbi.Amount;
                            buyList.RemoveAt(0);
                        }
                    } while (cost > World.Player.Gold && buyList.Count > 0);
                }
            }

            if (buyList.Count > 0)
            {
                args.Block       = true;
                BuyLists[serial] = buyList;
                Client.Instance.SendToServer(new VendorBuyResponse(serial, buyList));

                if (Config.GetBool("BuyAgentsIgnoreGold"))
                {
                    World.Player.SendMessage(MsgLevel.Force, LocString.BuyAgentAttempt, total, cost);
                }
                else
                {
                    World.Player.SendMessage(MsgLevel.Force, LocString.BuyTotals, total, cost);
                }
            }

            if (lowGoldWarn)
            {
                World.Player.SendMessage(MsgLevel.Force, LocString.BuyLowGold);
            }
        }
예제 #10
0
        public override void OnButtonPress(int num)
        {
            switch (num)
            {
            case 1:
                World.Player.SendMessage(MsgLevel.Force, LocString.TargItemAdd);
                Targeting.OneTimeTarget(new Targeting.TargetResponseCallback(OnTarget));
                break;

            case 2:
                if (m_SubList == null)
                {
                    break;
                }

                if (m_SubList.SelectedIndex >= 0)
                {
                    BuyEntry e      = (BuyEntry)m_Items[m_SubList.SelectedIndex];
                    ushort   amount = e.Amount;
                    if (InputBox.Show(Engine.MainWindow, Language.GetString(LocString.EnterAmount),
                                      Language.GetString(LocString.InputReq), amount.ToString()))
                    {
                        e.Amount = (ushort)InputBox.GetInt(1);
                        m_SubList.BeginUpdate();
                        m_SubList.Items.Clear();
                        for (int i = 0; i < m_Items.Count; i++)
                        {
                            m_SubList.Items.Add(m_Items[i]);
                        }

                        m_SubList.EndUpdate();
                    }
                }

                break;

            case 3:

                if (MessageBox.Show(Language.GetString(LocString.Confirm), Language.GetString(LocString.ClearList),
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (m_SubList.SelectedIndex >= 0)
                    {
                        m_Items.RemoveAt(m_SubList.SelectedIndex);
                        m_SubList.Items.RemoveAt(m_SubList.SelectedIndex);
                        m_SubList.SelectedIndex = -1;
                    }
                }

                break;

            case 4:

                if (MessageBox.Show(Language.GetString(LocString.Confirm), Language.GetString(LocString.ClearList),
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    m_SubList.Items.Clear();
                    m_Items.Clear();
                }

                break;

            case 5:
                m_Enabled        = !m_Enabled;
                m_EnableBTN.Text = Language.GetString(m_Enabled ? LocString.PushDisable : LocString.PushEnable);
                break;
            }
        }