Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Bot do Tibi


Rekomendowane odpowiedzi

Opublikowano

Witam mam pytanie czy może ktoś z was próbował pisać swojego bota??

 

Mam pewien problem gdyż nie wiem jak atakować:D

którgo z adresów mam użyć, używałem Player.TargetId ale tylko zaznacza mi potworka ale nie bije;/

 

http://code.google.com/p/tibiaapi/source/browse/trunk/tibiaapi/Addresses/Versions/Version910.cs

 

może ktoś z was mogłby mi pomóc i powiedzieć ktorego adresu mam uzyć??

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

Sprawdź sobie jaka funkcja modyfikuje TargetID, jakoś tak to kiedyś znalazłem.

 

Są 2 funkcje do auto-attacku:

SetTarget( DWORD id ) - zaznacza w kwadrat

Attack( DWORD id ) - atakuje

Opublikowano

DWORD (__cdecl *SetTarget)(DWORD id) = (DWORD (__cdecl *)(DWORD id))0x45ED20;
DWORD (__cdecl *isValidTarget)() = (DWORD (__cdecl *)())0x45ED70;
DWORD (__cdecl *Attack)(DWORD id) = (DWORD (__cdecl *)(DWORD id))0x408C20;
DWORD (__cdecl *GetSelectedMob)() = (DWORD (__cdecl *)())0x45ED90;
int (__cdecl *GetBattleList)() = (int (__cdecl *)())0x462A60; 

void AutoAttack()
{
       for(;;Sleep(5))
       {

               char msg[256] = { 0 };

               if( !isValidTarget() ) // żeby gonił do końca tego samego moba, nawet jeśli nakierujemy innego
               {
                       DWORD id = GetSelectedMob();
                       if( id )
                       {
                               *(BYTE*)0x7C9148 = 1; // żeby biegał za mobem automatycznie, jeśli jest w zasięgu
                               DWORD *creaturePtr = findCreatureStructure( id );
               Creature *creature_t = ( Creature* )creaturePtr;
                               if(creature_t->cid.type == 0x40) // nie player... wiem że to nie działa do końca jak powinno :P
                               {
                               SetTarget( id );
                               Attack( id );
                               sprintf(msg,"Atakuje %s | widac %i mobów",creature_t->creatureName,GetBattleList());
                               showInfoText(msg,0);
                               }
                       }
               }
               else
               {
                               DWORD *creaturePtr = findCreatureStructure( isValidTarget() );
                               Creature *creature_t = ( Creature* )creaturePtr;
                               sprintf(msg,"Atakuje %s | widac %i mobów ",creature_t->creatureName,GetBattleList());
                               showInfoText(msg,0);
               }

       }
}

 

kod i komentarze moje, adresy nie są aktualne :P Wystarczy zrobić nowy wątek autoattack i samo łazi, bije...

 

Jak chcesz uzyskać wiekszą pomoc, lub dołączyć do teamu, który pracuje nad takim botem napisz pw, to Cie skieruje tam gdzie trzeba :)

Opublikowano

#include <nomadmemory.au3>
#include <Array.au3>
$PID = ProcessExists("Tibia.exe")
;~ Tu umieszczam wszystkie potrzebne adresy
;~ #=========================================================================
$memarray = _MemoryOpen($PID)
$BaseAdress = _MemoryGetBaseAddress($memarray, 1)
$BattleList_Start = 0x7e4f98 - 0x400000 + $BaseAdress
$BattleList_StepCreatures = 0xb0
$BattleList_MaxCreatures = 1300
$Player_Id = _MemoryRead(0x81ceac - 0x400000 + $BaseAdress, $memarray)
$Creature_DistanceX = 36
$Creature_DistanceY = 40
$Creature_DistanceZ = 44

$Player_Z = 0x81d484 - 0x400000 + $BaseAdress;
$Player_Y = 0x81d480 - 0x400000 + $BaseAdress;
$Player_X = 0x81d478 - 0x400000 + $BaseAdress;
;~ #=========================================================================
;~ koniec adresów
Dim $Czesc_niku[26]
Dim $Imie[1301][2]
Dim $Potworek[2] = ['Witch', 'Giant Spider'];mobki jakich ma szukac na battle list
$Czesc_niku_i_caly = ''
$Procent_Hp_Potworka = ''
$timer = TimerInit()
While 1
$Player__x = _MemoryRead($Player_X, $memarray)
$Player__y = _MemoryRead($Player_Y, $memarray)
$Player__z = _MemoryRead($Player_Z, $memarray);kordy player
For $i = 0 To 1300
	For $o = 4 To 20 Step +4
		$Czesc_niku[$o] = _MemoryRead(($BattleList_Start + $i * $BattleList_StepCreatures) + $o, $memarray);czyta 4 znaki
		$Procent_Hp_Potworka = _MemoryRead($BattleList_Start + $i * $BattleList_StepCreatures + 140, $memarray);ilosc hp w %
		$Czesc_niku_i_caly &= String(BinaryToString($Czesc_niku[$o]));sklada nik do kupy
	Next
	$Potworkax = _MemoryRead($BattleList_Start + $i * $BattleList_StepCreatures + $Creature_DistanceX, $memarray)
	$Potworkay = _MemoryRead($BattleList_Start + $i * $BattleList_StepCreatures + $Creature_DistanceY, $memarray)
	$Potworkaz = _MemoryRead($BattleList_Start + $i * $BattleList_StepCreatures + $Creature_DistanceZ, $memarray);kordy potwora
	For $r = 0 To 1
		If $Czesc_niku_i_caly = $Potworek[$r] And ($Procent_Hp_Potworka > 90) Then MsgBox(0, '', $Potworek[$r] & @CRLF & _  ;komunikat ataku to powinno bym zaznaczanie
				'x :' & $Potworkax & '\' & $Player__x & @CRLF & _
				'y :' & $Potworkay & '\' & $Player__y & @CRLF & _
				'z :' & $Potworkaz & '\' & $Player__z)
	Next
	$Imie[$i][0] = ($Czesc_niku_i_caly & @CRLF)
	$Czesc_niku_i_caly = ''
	$Imie[$i][1] = ($Procent_Hp_Potworka & @CRLF)
	$Procent_Hp_Potworka = ''
Next
Sleep(1000)
If TimerDiff($timer) >= 100000 Then
	$timer = TimerInit()
	_ArrayDisplay($Imie);pokazuje mi co jakis czas zawartosc battlelist
EndIf
WEnd

 

narazie mam tyle jak uzywam targetid jako atak to moge bic tylko z run(hotkeye)

narazie nie ma opcji jak u Ciebie ze bije jdnego do kona i biega za nim:d ale to tylko sprawdzalem czy dzial;/

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

@lokuxd..

 

Czy ty tego nigdy nie zrozumiesz?

Korzystasz z funkcji TibiaApi, tyle że one są komendami wykorzystującymi dllki. TibiaApi bazuje na pakietach, twój kod w AutoIt jedynie przypisuje RedSquare w pamięci do targetu, ale nie wysyła do clienta żadnego fizycznego znaku o ataku, coś takiego nie ma prawa bytu. W ten sposób nie stworzysz funkcji ataku.. działając na adresach z TibiaApi możesz odczytać sobię levele, skille, jak i pozycję postaci, ale już za pomocą ich nie zaatakujesz targetu. W tym celu, jeśli oczywiście nie możesz użyć packet.dll - bo to mija się z celem z powodu wykrywalności.. musisz zrobić własną funkcję, to już jak dla mnie za wysokie progi i nie wiem jak coś takiego przełożyć na AutoIt..

Opublikowano

Dałoby sie to zrobić nawet w autoit, te funkcje które podalem są bardzo krótkie dokładnie to 1 linijka, np. Attack wrzuca do jakiejś zmiennej gry ( adres statyczny ), id moba, tak samo setTarget, isValidTarget odczytuje ze zmiennej tylko id.. Musiałby sobie znaleźć adresy tylko :)

Opublikowano

to dlaczego dziala zaznaczenie targetu a ataku juz nie??

jak bym wiedzial jak znalesc adres ataku to moze by zadzialalo??

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

  • 1 miesiąc temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...