Ir para conteúdo
  • Cadastre-se

Looter em VB.net com HookProxy (Problemas)


Posts Recomendados

Bom, estou fazendo um bot para a ultima versão do tibia com a ultima versão da TibiaAPI.

Até agora estava tudo ok, walker, folow, atack, auto healer, mana e outras diversas funçoes, porem quando decidi fazer o looter ai o bixo pego..

De que forma posso fazer um looter simples, apenas abrir o corpo e juntar dinheiro por exemplo??? de que maneira?

Até agora o que eu fiz esta indetectavel, mas se o looter for feito usando pacotes? seria detectavel.. então a outra opção seria com as funçoes do mouse?

Procurei há dias e nada, pesquisei em todos os sites, converti inumeras linhas de código e não consegui nem abrir um corpo..

Peço a ajuda de vcs uma luz pra mim terminar o bot, para que eu possa disponibilizar aqui no forum um bot novo.

Editado por ZeroCool (veja o histórico de edições)

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

ZeroCool, não sei se você ja olhou este tópico no TpForums, pode ser que ajude!

http://tpforums.org/forum/thread-8473.html

ainda não tive tempo de implementar, mais pretendo utilizar esta "estrutura" no meu!

# Regras Gerais - TibiaKing.com #
Contato: [email protected]
Não respondo dúvidas via MP.


1C2tu.png4Tlqo.png1C2tu.png


 

Link para o post
Compartilhar em outros sites

ZeroCool, não sei se você ja olhou este tópico no TpForums, pode ser que ajude!

http://tpforums.org/forum/thread-8473.html

ainda não tive tempo de implementar, mais pretendo utilizar esta "estrutura" no meu!

E ae meu blz?? Valeu vou dar uma olhada, acho que esse tópico eu nao tinha visto.

Qualquer coisa eu prendo o grito!!

Abraços !

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

Obter posição do corpo -> enviar packet / clicar com mouse para abrir o corpo -> ler conteúdo do container aberto (corpo) -> enviar packet / simular com mouse para arrastar o item desejado do container para a bp

Siga as etapas de desenvolvimento e diga em qual delas está o seu problema já que eu não entendi o que deseja especificamente.

Link para o post
Compartilhar em outros sites
  • 1 month later...

E ae galera, desde as ultimas msg que mandei até hoje fiquei sem internet pois minha antena estava estragada, agora sim devolta aos "Bots".

Então como o amigo Flamer falou ai vou seguindo os passos fazer o looter:

1º Saber a posição do corpo

=====================

-Poderia pegar a posição do corpo no redsquare do monstro atacado quando sua vida estivesse quase no zero, então não teria tempo dele sair de perto player ou perder a posição.

-Poderia pegar a posição x y z do monstro atacado e usala para dar o clic, mas ai dependendo do monstro se elevfoje já não daria certo.

-Não olhei nessa nova versão da api se já tem alguma coisa relacionada a posição do monstro morto, assim seria bem melhor e evitaria essas manobras todas.

2º Enviar pacote para clicar no corpo com botão direito para abrir o corpo

=====================================================

- Meu bot não tem nenhum envio de pacotes e eu confesso que to apanhando com esses pacotes..

- Vi muitos exemplo na net em C# funcionais, mas de C não entendo nada, já tentei converter pra vb mas não conssigo

Aqui vai um em C# que eu tenho aqui junto com meu bot, mas assim fica complicado demais, preciso fazer em vb.

Se vcs entendem de C fica melhor pra gente converter esse código usando Timer no VB.net



using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Tibia;

using Tibia.Objects;

using Tibia.Packets;

using Tibia.Util;

using Tibia.Packets.Incoming;

using Tibia.Packets.Outgoing;

using System.Threading;


namespace SmartAutoLooter

{

	public partial class frmMain : Form

	{

		Client _client;

		bool _autoLoot;

		bool _autoOpenBodys;

		bool _autoEatFoodFromBodys;

		List<LootItem> _lootItems = new List<LootItem> { };

		AutoLootWait_t _autoLootWait = AutoLootWait_t.STOP;

		byte _container;

		static AutoResetEvent _autoLootAutoEvent = new AutoResetEvent(false);


		public frmMain()

		{

			InitializeComponent();

		}


		private void frmMain_Load(object sender, EventArgs e)

		{

			_client = Tibia.Util.ClientChooser.ShowBox();


			if (_client != null)

			{

				if (!_client.LoggedIn)

				{


					_client.Exited += new EventHandler(_client_Exited);


					_client.IO.StartProxy();

					//autoloot

					_client.IO.Proxy.ReceivedTextMessageIncomingPacket += new Proxy.IncomingPacketListener(Proxy_ReceivedTextMessageIncomingPacket);

					_client.IO.Proxy.ReceivedContainerUpdateItemIncomingPacket += new Proxy.IncomingPacketListener(Proxy_ReceivedContainerUpdateItemIncomingPacket);

					_client.IO.Proxy.ReceivedContainerRemoveItemIncomingPacket += new Proxy.IncomingPacketListener(Proxy_ReceivedContainerRemoveItemIncomingPacket);

					_client.IO.Proxy.ReceivedContainerAddItemIncomingPacket += new Proxy.IncomingPacketListener(Proxy_ReceivedContainerAddItemIncomingPacket);

					_client.IO.Proxy.ReceivedTileAddThingIncomingPacket += new Proxy.IncomingPacketListener(_proxy_ReceivedTileAddThingIncomingPacket);

					_client.IO.Proxy.ReceivedContainerOpenIncomingPacket += new Proxy.IncomingPacketListener(Proxy_ReceivedContainerOpenIncomingPacket);

				}

				else

					MessageBox.Show("Please start this program before login.");

			}

			else

				Application.Exit();

		}


		void _client_Exited(object sender, EventArgs e)

		{

			Application.Exit();

		}


		bool isLootContainer(byte id)

		{

			return _lootItems.Find(delegate(LootItem lootItem) { return lootItem.Container == id; }) == null;

		}


		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)) //mudei aqui

					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;

		}


		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)) //mudei aqui

				{

					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 &#233; "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_ReceivedTileAddThingIncomingPacket(Tibia.Packets.IncomingPacket packet)

		{

			if (_autoOpenBodys)

			{

				TileAddThingPacket p = (TileAddThingPacket)packet;


				if (p.Item != null && p.Location.DistanceTo(_client.GetPlayer().Location)<=3) //mudei aqui

				{

					if (p.Item.GetFlag(Tibia.Addresses.DatItem.Flag.IsContainer) &&

						p.Item.GetFlag(Tibia.Addresses.DatItem.Flag.IsCorpse))

					{

						p.Item.OpenAsContainer((byte)_client.Inventory.GetContainers().Count());

					}

				}

			}


			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_ReceivedContainerUpdateItemIncomingPacket(IncomingPacket packet)

		{

			if (_autoLootWait == AutoLootWait_t.EAT_FOOD || _autoLootWait == AutoLootWait_t.MOVE_ITEM)

			{

				ContainerUpdateItemPacket p = (ContainerUpdateItemPacket)packet;


				if (p.Container == _container)

				{

					_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_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;

		}


		private void addToolStripMenuItem_Click(object sender, EventArgs e)

		{

			frmAutoLootAdd frm = new frmAutoLootAdd();


			if (frm.ShowDialog() == DialogResult.OK)

			{

				LootItem lootItem = new LootItem(frm.ItemId, frm.ContainerNumber, frm.Comment);

				listBoxItems.Items.Add(lootItem);

				_lootItems.Add(lootItem);

			}

		}


		private void removeToolStripMenuItem_Click(object sender, EventArgs e)

		{

			_lootItems.Remove((LootItem)listBoxItems.SelectedItem);

			listBoxItems.Items.Remove(listBoxItems.SelectedItem);

		}


		private void checkBoxEnable_CheckedChanged(object sender, EventArgs e)

		{

			_autoLoot = checkBoxEnable.Checked;

		}


		private void checkBoxOpenBodys_CheckedChanged(object sender, EventArgs e)

		{

			_autoOpenBodys = checkBoxOpenBodys.Checked;

		}


		private void checkBoxEatFood_CheckedChanged(object sender, EventArgs e)

		{

			_autoEatFoodFromBodys = checkBoxEatFood.Checked;

		}


		private void saveToolStripMenuItem_Click(object sender, EventArgs e)

		{

			SaveFileDialog dialog = new SaveFileDialog();

			dialog.Filter = "Smart AutoLooter Files (*.salf)|*.salf";

			dialog.Title = "Save File";



			if (dialog.ShowDialog() == DialogResult.OK)

			{

				Tibia.Packets.NetworkMessage msg = new NetworkMessage(new byte[0], 0);


				msg.AddUInt16((ushort)_lootItems.Count);


				foreach (LootItem i in _lootItems)

				{

					msg.AddUInt16(i.Id);

					msg.AddByte(i.Container);

					msg.AddString(i.Comment);

				}


				System.IO.File.WriteAllBytes(dialog.FileName, msg.Data);

			}

		}


		private void loadToolStripMenuItem_Click(object sender, EventArgs e)

		{

			OpenFileDialog dialog = new OpenFileDialog();

			dialog.Filter = "Smart AutoLooter Files (*.salf)|*.salf";

			dialog.Title = "Open File";


			if (dialog.ShowDialog() == DialogResult.OK)

			{

				Tibia.Packets.NetworkMessage msg = new NetworkMessage(null, System.IO.File.ReadAllBytes(dialog.FileName));


				try

				{

					ushort count = msg.GetUInt16();


					for (int i = 0; i < count; i++)

					{

						LootItem lootItem = new LootItem(msg.GetUInt16(), msg.GetByte(), msg.GetString());

						listBoxItems.Items.Add(lootItem);

						_lootItems.Add(lootItem);

					}

				}

				catch (Exception ex)

				{

					MessageBox.Show(ex.Message);

				}

			}

		}


		private void clearToolStripMenuItem_Click(object sender, EventArgs e)

		{

			_lootItems.Clear();

			listBoxItems.Items.Clear();

		}



	}


	public class LootItem

	{

		public ushort Id { get; set; }

		public byte Container { get; set; }

		public string Comment { get; set; }


		public LootItem() { }

		public LootItem(ushort id, byte container, string comment)

		{

			Id = id;

			Container = container;

			Comment = comment;

		}


		public override string ToString()

		{

			return Id.ToString() + " Container " + (Container + 1).ToString() + " (" + Comment + ")";

		}


	}


	public enum AutoLootWait_t

	{

		STOP,

		MOVE_ITEM,

		OPEN_NEW_LOOT_CONTAINER,

		OPEN_BAG,

		EAT_FOOD,

	}


}



3º ler corpo aberto para saber os itens que tem na corpo

===========================================

- Quando testei esse código em c acima, notei que ele dá um erro quando tenta passar um segundo item da lista para minha backpack, possivelmente pode ser um caso de item não empilhavel, isso tb é uma questao a ser discutida, no nosso loot em vb tera que verificar se o item é empilhavel se não procurar outro lugar para ele.

4º Simular o arraste do item para a backpack

=================================

- Lá vem denvo os packtes, será essa a unica forma de arrastar os itens?

Vamos tentar fazer um loot simples com timer usando esse código em c "funcional", usando timer no vb, essa noite vou me encarnar aqui a noite toda quando tiver novidade posto mais!! Vamos indo por partes.

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

To fazendo uns teste aqui com HookProxy

Usando HookProxy tenho como primeiro rodar o Cliente e logar e depois entrar no bot??

Outra coisa é quando fecho meo bot usando hookproxy ele fecha o tibia tb..

Não tem outra maneira??

Editado por ZeroCool (veja o histórico de edições)

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

Não sei o que ta acontecendo agora:

Eu rodo meu testeLooter feito em vb.net e ele abre uma janela do clientchooser, então eu apenas clico em "Choose" e deixo selecionado "New default client..."

então é aberto uma janela do tibiae eu coloco meus dados e bem na hora que loga, a janela do tibia se fecha, mas o meu testeLooter cntinua aberto em sem erro nenhum.

Não tem nada no form load apenas:


        client = Tibia.Util.ClientChooser.ShowBox

        HookProxy = New HookProxy(client)

        client.IO.StartProxy()

        proxy = client.IO.Proxy


to usando a ultima versão da api v2.9.1

o que pode ser???

e ai ninguem se manifesta??????????

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

Para o hookproxy funcionar você deve abrir o Client > Bot > Logar se não ele não irá funcionar.

"A esperança é o sonho do homem acordado."

Aristóteles

Link para o post
Compartilhar em outros sites

Cara, evite double-post inútil.

use a opção "Editar"

Fica o alerta verbal e 1 rep -

Abraços.

olha cara, não entendi porque uma msg que eu mandei, serias double posts inuteis..

vc acha que eu quero mandar o maior numero de msgs pra ter mais posts que outros?????

eu to melixando pro numero de posts, pra reputação e pra essas regras aqui!

essa reputação -1 pra mim não significa nada...

se quiser colocar reputação -500, ok, se quiser excluir minha conta ok, por mim tudo bem... não vai fazer diferença nenhuma.

pra mim aqui dentro todo mundo era igual, mas se vc acha q eu vou pedir desculpas ou aceitar seu alerta verbal, vai sonhando...

existem muitos fórums como este aqui, que tem mais msg como a sua mostrando a hierarquia do forum do que msgs sobre assuntos relacionados nos tópicos..

ai eu mando uma msg depois da outra e vc vem com esse papinho de posts inuteis, ahhh cara vai te encherga meu!

Quando entrava aqui nem olhava pro canto esquerdo onde tem a reputação, posts e tempo online pra mim isso era o menos importante.

Mas blz, vc já mostrou que é o cara aqui no forum, e que meus posts são inuteis, ja me deu até adrvetencia verbal.... até hj só tinha recebido advertencia da minha mãe!

Agora como como vc é o administrador, faça o que vc acha que tem que fazer..!!

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

Eita , amigo isso aconteceu porque as regras devem ser seguidas... Ele não disse que seus posts são inúteis só disse que seu double-post foi inútil porque você poderia ter clicado em "Editar" e adicionar um @Edit ou outra coisa e complementar o que queria...

"A esperança é o sonho do homem acordado."

Aristóteles

Link para o post
Compartilhar em outros sites

crescer?? pela tua lata tu deve ter uns 15 anos , primeiro tu espera cresce uns pelo ai na tua napa ai depois manda alguem crescer..

Conheço sim o vosso mundino, por isso to respondendo assim, pode cancelar minha conta pq essa foi minha ultima msg!

Uma coisa só é impossivel até que alguem prove o contrário.

Link para o post
Compartilhar em outros sites

crescer?? pela tua lata tu deve ter uns 15 anos , primeiro tu espera cresce uns pelo ai na tua napa ai depois manda alguem crescer..

Conheço sim o vosso mundino, por isso to respondendo assim, pode cancelar minha conta pq essa foi minha ultima msg!

E assim se foi mais um noob.

“Eu prefiro morrer do que perder a vida!”

Se eu te ajudei, me de um REP+

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo