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); }
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); }
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); }
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); }
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); } } } } }
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; }
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; }
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; }
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; }
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); } } } } }