Beispiel #1
0
        bool Proxy_ReceivedContainerOpenIncomingPacket(IncomingPacket packet)
        {
            if (_autoLoot && _lootItems.Count > 0)
            {
                ContainerOpenPacket p = (ContainerOpenPacket)packet;

                bool lootContainer = isLootContainer(p.Id);

                if (lootContainer && !Tibia.Constants.ItemLists.Container.ContainsKey(p.ItemId))
                {
                    Scheduler.AddTask(new Action(autoLoot), null, 200);
                }
                else if (!lootContainer)
                {
                    p.Name = "Container " + (p.Id + 1);

                    if (_autoLootWait == AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER)
                    {
                        _autoLootWait = AutoLootWait_t.STOP;
                        Scheduler.AddTask(new Action(autoLoot), null, 100);
                    }
                }
            }

            return(true);
        }
Beispiel #2
0
        bool Proxy_ReceivedContainerAddItemIncomingPacket(IncomingPacket packet)
        {
            if (_autoLootWait == AutoLootWait_t.MOVE_ITEM)
            {
                ContainerAddItemPacket p = (ContainerAddItemPacket)packet;
                if (p.Container == _container)
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return(true);
        }
Beispiel #3
0
        bool Proxy_ReceivedTextMessageIncomingPacket(IncomingPacket packet)
        {
            if (_autoLootWait == AutoLootWait_t.EAT_FOOD)
            {
                TextMessagePacket p = (TextMessagePacket)packet;

                if (p.Message == "You are full.")
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return(true);
        }
Beispiel #4
0
        bool Proxy_ReceivedContainerRemoveItemIncomingPacket(IncomingPacket packet)
        {
            if (_autoLootWait == AutoLootWait_t.EAT_FOOD)
            {
                ContainerRemoveItemPacket p = (ContainerRemoveItemPacket)packet;

                if (p.Container == _container)
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return(true);
        }
Beispiel #5
0
        void autoLoot()
        {
            var containers = _client.Inventory.GetContainers();

            foreach (Tibia.Objects.Container c in containers)
            {
                if (isLootContainer(c.Number) && !Tibia.Constants.ItemLists.Container.ContainsKey((uint)c.Id))
                {
                    var cItems = c.GetItems();

                    foreach (Item item in cItems)
                    {
                        var lootItem = _lootItems.Find(delegate(LootItem lItem) { return lItem.Id == item.Id; });

                        if (lootItem != null)
                        {
                            var lootContainer = _client.Inventory.GetContainer(lootItem.Container);

                            if (lootContainer != null)
                            {
                                if (item.GetFlag(Tibia.Addresses.DatItem.Flag.IsStackable))
                                {
                                    //o item é "stackable"
                                    var lootContainerItem = lootContainer.GetItems().FirstOrDefault(lCItem => lCItem.Id == item.Id && lCItem.Count < 100);

                                    if (lootContainerItem != null && (lootContainerItem.Count + item.Count <= 100 || lootContainer.Amount < lootContainer.Volume))
                                    {
                                        item.Move(lootContainerItem.Location);

                                        //change others items location;
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }

                                        _container = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else if (lootContainerItem == null && lootContainer.Amount < lootContainer.Volume)
                                    {
                                        var iLoc = new ItemLocation();
                                        iLoc.Type = Tibia.Constants.ItemLocationType.Container;
                                        iLoc.ContainerId = lootContainer.Number;
                                        iLoc.ContainerSlot = (byte)(lootContainer.Volume - 1);
                                        item.Move(iLoc);

                                        //change others items location...
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }

                                        _container = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else
                                    {

                                        if (lootContainerItem != null)
                                        {
                                            item.Move(lootContainerItem.Location);
                                            _container = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                            _autoLootAutoEvent.WaitOne();

                                        }

                                        //abrir um novo container...
                                        var newContainer = lootContainer.GetItems().FirstOrDefault(newItemContainer => newItemContainer.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                                        if (newContainer != null)
                                        {
                                            newContainer.OpenAsContainer(lootContainer.Number);

                                            _container = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER;
                                            return;
                                        }
                                    }
                                }
                                else
                                {
                                    if (lootContainer.Amount < lootContainer.Volume)
                                    {
                                        var iLoc = new ItemLocation();
                                        iLoc.Type = Tibia.Constants.ItemLocationType.Container;
                                        iLoc.ContainerId = lootContainer.Number;
                                        iLoc.ContainerSlot = (byte)(lootContainer.Volume - 1);
                                        item.Move(iLoc);

                                        //change others items location...
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }


                                        //esperar a chegada do item move?
                                        _container = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else
                                    {
                                        //abrir um novo container
                                        var newContainer = lootContainer.GetItems().FirstOrDefault(newItemContainer => newItemContainer.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                                        if (newContainer != null)
                                        {
                                            newContainer.OpenAsContainer(lootContainer.Number);
                                            _container = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER;
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    //abrir bag se tiver.. no mesmo container?

                    var bag = cItems.FirstOrDefault(i => i.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                    if (bag != null)
                    {
                        bag.OpenAsContainer(c.Number);
                        return;
                    }
                    else if (_autoEatFoodFromBodys)
                    {
                        var food = cItems.FirstOrDefault(i => Tibia.Constants.ItemLists.Foods.ContainsKey(i.Id));

                        if (food != null)
                        {
                            food.Use();

                            _container = c.Number;
                            _autoLootWait = AutoLootWait_t.EAT_FOOD;
                            _autoLootAutoEvent.WaitOne();

                            //sleep.. para a msg chegar no client..
                            Thread.Sleep(50);
                        }
                    }
                }
            }
        }
Beispiel #6
0
        bool Proxy_ReceivedContainerOpenIncomingPacket(IncomingPacket packet)
        {
            if (_autoLoot && _lootItems.Count > 0)
            {
                ContainerOpenPacket p = (ContainerOpenPacket)packet;

                bool lootContainer = isLootContainer(p.Id);

                if (lootContainer && !Tibia.Constants.ItemLists.Container.ContainsKey(p.ItemId))
                    Scheduler.AddTask(new Action(autoLoot), null, 200);
                else if (!lootContainer)
                {
                    p.Name = "Container " + (p.Id + 1);

                    if (_autoLootWait == AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER)
                    {
                        _autoLootWait = AutoLootWait_t.STOP;
                        Scheduler.AddTask(new Action(autoLoot), null, 100);
                    }
                }
            }

            return true;
        }
Beispiel #7
0
        bool Proxy_ReceivedTextMessageIncomingPacket(IncomingPacket packet)
        {

            if (_autoLootWait == AutoLootWait_t.EAT_FOOD)
            {
                TextMessagePacket p = (TextMessagePacket)packet;

                if (p.Message == "You are full.")
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return true;
        }
Beispiel #8
0
        bool Proxy_ReceivedContainerRemoveItemIncomingPacket(IncomingPacket packet)
        {
            if (_autoLootWait == AutoLootWait_t.EAT_FOOD)
            {
                ContainerRemoveItemPacket p = (ContainerRemoveItemPacket)packet;

                if (p.Container == _container)
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return true;
        }
Beispiel #9
0
        bool Proxy_ReceivedContainerAddItemIncomingPacket(IncomingPacket packet)
        {
            if (_autoLootWait == AutoLootWait_t.MOVE_ITEM)
            {
                ContainerAddItemPacket p = (ContainerAddItemPacket)packet;
                if (p.Container == _container)
                {
                    _autoLootWait = AutoLootWait_t.STOP;
                    _autoLootAutoEvent.Set();
                }
            }

            return true;
        }
Beispiel #10
0
        void autoLoot()
        {
            var containers = _client.Inventory.GetContainers();

            foreach (Tibia.Objects.Container c in containers)
            {
                if (isLootContainer(c.Number) && !Tibia.Constants.ItemLists.Container.ContainsKey((uint)c.Id))
                {
                    var cItems = c.GetItems();

                    foreach (Item item in cItems)
                    {
                        var lootItem = _lootItems.Find(delegate(LootItem lItem) { return(lItem.Id == item.Id); });

                        if (lootItem != null)
                        {
                            var lootContainer = _client.Inventory.GetContainer(lootItem.Container);

                            if (lootContainer != null)
                            {
                                if (item.GetFlag(Tibia.Addresses.DatItem.Flag.IsStackable))
                                {
                                    //o item é "stackable"
                                    var lootContainerItem = lootContainer.GetItems().FirstOrDefault(lCItem => lCItem.Id == item.Id && lCItem.Count < 100);

                                    if (lootContainerItem != null && (lootContainerItem.Count + item.Count <= 100 || lootContainer.Amount < lootContainer.Volume))
                                    {
                                        item.Move(lootContainerItem.Location);

                                        //change others items location;
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }

                                        _container    = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else if (lootContainerItem == null && lootContainer.Amount < lootContainer.Volume)
                                    {
                                        var iLoc = new ItemLocation();
                                        iLoc.Type          = Tibia.Constants.ItemLocationType.Container;
                                        iLoc.ContainerId   = lootContainer.Number;
                                        iLoc.ContainerSlot = (byte)(lootContainer.Volume - 1);
                                        item.Move(iLoc);

                                        //change others items location...
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }

                                        _container    = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else
                                    {
                                        if (lootContainerItem != null)
                                        {
                                            item.Move(lootContainerItem.Location);
                                            _container    = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                            _autoLootAutoEvent.WaitOne();
                                        }

                                        //abrir um novo container...
                                        var newContainer = lootContainer.GetItems().FirstOrDefault(newItemContainer => newItemContainer.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                                        if (newContainer != null)
                                        {
                                            newContainer.OpenAsContainer(lootContainer.Number);

                                            _container    = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER;
                                            return;
                                        }
                                    }
                                }
                                else
                                {
                                    if (lootContainer.Amount < lootContainer.Volume)
                                    {
                                        var iLoc = new ItemLocation();
                                        iLoc.Type          = Tibia.Constants.ItemLocationType.Container;
                                        iLoc.ContainerId   = lootContainer.Number;
                                        iLoc.ContainerSlot = (byte)(lootContainer.Volume - 1);
                                        item.Move(iLoc);

                                        //change others items location...
                                        foreach (Item i in cItems)
                                        {
                                            if (i.Location.StackOrder > item.Location.StackOrder)
                                            {
                                                i.Location.StackOrder--;
                                                i.Location.ContainerSlot--;
                                            }
                                        }


                                        //esperar a chegada do item move?
                                        _container    = lootContainer.Number;
                                        _autoLootWait = AutoLootWait_t.MOVE_ITEM;
                                        _autoLootAutoEvent.WaitOne();

                                        //sleep.. para a msg chegar no client..
                                        Thread.Sleep(50);
                                    }
                                    else
                                    {
                                        //abrir um novo container
                                        var newContainer = lootContainer.GetItems().FirstOrDefault(newItemContainer => newItemContainer.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                                        if (newContainer != null)
                                        {
                                            newContainer.OpenAsContainer(lootContainer.Number);
                                            _container    = lootContainer.Number;
                                            _autoLootWait = AutoLootWait_t.OPEN_NEW_LOOT_CONTAINER;
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    //abrir bag se tiver.. no mesmo container?

                    var bag = cItems.FirstOrDefault(i => i.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer));

                    if (bag != null)
                    {
                        bag.OpenAsContainer(c.Number);
                        return;
                    }
                    else if (_autoEatFoodFromBodys)
                    {
                        var food = cItems.FirstOrDefault(i => Tibia.Constants.ItemLists.Foods.ContainsKey(i.Id));

                        if (food != null)
                        {
                            food.Use();

                            _container    = c.Number;
                            _autoLootWait = AutoLootWait_t.EAT_FOOD;
                            _autoLootAutoEvent.WaitOne();

                            //sleep.. para a msg chegar no client..
                            Thread.Sleep(50);
                        }
                    }
                }
            }
        }