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

[Problem]Bot do Tibii 10.21


Rekomendowane odpowiedzi

Opublikowano

Tak więc próbuję napisać bota do Tibii (wersja 10.21) który będzie używał danego hotkey'a kiedy wpisana wartość będzie mniejsza od liczby posiadanego przez nas życia. Napisałem coś takiego i nie wiem w czym jest problem. Bot normalnie się odpala, lecz nawet jeśli wpiszę wartość większą od liczby posiadanego przez postać życia to i tak program użyje hotkey'a.

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
#include <NomadMemory.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("BOT", 461, 440, 314, 161)
GUISetBkColor(0xFF00FF)
$Label1 = GUICtrlCreateLabel("Wpisz wymagane dane. Pamietaj, ze w polu klawisz wpisz hotkey w {}, a czas normalnie w sekundach !", 16, 8, 164, 49)
GUICtrlSetBkColor(-1, 0x00FF00)
$Input1 = GUICtrlCreateInput("{Klawisz}", 16, 72, 161, 21)
GUICtrlSetBkColor(-1, 0x3399FF)
$Input2 = GUICtrlCreateInput("Czas", 16, 104, 161, 21)
GUICtrlSetBkColor(-1, 0x3399FF)
$Button1 = GUICtrlCreateButton("Uruchom !", 16, 144, 161, 41)
GUICtrlSetBkColor(-1, 0xFFFF00)
$Label2 = GUICtrlCreateLabel("Uzupelnianie HP  (w polu ilosc hp podaj ilosc kiedy ma zostac uzyty hotkey)  ", 256, 8, 188, 49)
GUICtrlSetBkColor(-1, 0x00FF00)
$Input3 = GUICtrlCreateInput("Klawisz w {}", 256, 72, 185, 21)
GUICtrlSetBkColor(-1, 0x3399FF)
$Input4 = GUICtrlCreateInput("Ilosc hp", 256, 104, 185, 21)
GUICtrlSetBkColor(-1, 0x3399FF)
$Button2 = GUICtrlCreateButton("Uruchom!", 256, 144, 185, 41)
GUICtrlSetBkColor(-1, 0xFFFF00)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$ff=GUICtrlRead($Input2)
			$ff *= 1000
			_Timer_SetTimer($form1,$ff,"hotkey")
			$ks=GUICtrlRead($Input1)
		Case $Button2
			$x=GUICtrlRead($Input3)
			$pid = ProcessExists("Tibia.exe")
			$memaaa = _MemoryOpen($pid)
			_Timer_SetTimer($form1,500,"hotkey1")
	EndSwitch
WEnd

Func hotkey($1,$2,$3,$4)
	ControlSend("Tibia","","",$ks)
EndFunc
Func hotkey1 ($1,$2,$3,$4)
	$y=GUICtrlRead($Input4)
	$y=Hex($y)
	$mem = _MemoryRead((0x557000 - 0x400000) +  _MemoryGetBaseAddress($memaaa, 1), $memaaa)
	if $mem<=$y Then
		ControlSend("Tibia","","",$x)
		EndIf
		EndFunc
Func _MemoryGetBaseAddress($ah_Handle, $iHexDec = 0)

    Local $iv_Address = 0x00100000
    Local $v_Buffer = DllStructCreate('dword;dword;dword;dword;dword;dword;dword')
    Local $vData
    Local $vType

    If Not IsArray($ah_Handle) Then
        SetError(1)
        Return 0
    EndIf


    DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))

    If Not @Error Then

        $vData = Hex(DllStructGetData($v_Buffer, 2))
        $vType = Hex(DllStructGetData($v_Buffer, 3))

        While $vType <> "00000080"
            DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
            $vData = Hex(DllStructGetData($v_Buffer, 2))
            $vType = Hex(DllStructGetData($v_Buffer, 3))
            If Hex($iv_Address) = "01000000" Then ExitLoop
            $iv_Address += 65536

        WEnd

        If $vType = "00000080" Then
            SetError(0)
            If $iHexDec = 1 Then
                Return Dec($vData)
            Else
                Return $vData
            EndIf

        Else
            SetError(2)
            Return 0
        EndIf

    Else
        SetError(3)
        Return 0
    EndIf

EndFunc   ;==>_MemoryGetBaseAddress

Func hotkey1 to funkcja z którą mam problem. Ktoś ma jakieś pomysły ? Proszę o pomoc ;<

Opublikowano
Opublikowano

Mam teraz tak:

if $mem>=$y Then

I gdy wpisuję wartość MNIEJSZĄ od ilości życia postaci, program nie używa hotkey'a (a powinien ;d). Tak samo jak wpisze wartość WIĘKSZĄ od ilości życia postaci, program nie użyje hotkey'a. Bot używa hotkey'a tylko wtedy kiedy nic nie wpiszę. Może Bot nie czyta ilości życia postaci ? A jeśli tak to jak to sprawdzić ?

Opublikowano

Ktoś może mi wytłumaczyć co to ma zrobić:

$y=Hex($y)

Usuń to i sprawdź, jak nie podziała, to prosty debug:

MsgBox(0,"","INPUT:"&$y&"  MEM:"&$mem")
Opublikowano

Usunąłem tego Hex'a (właściwie nie wiem po co go tam wstawiałem :D ), ale bez tego również bot nie zadziałał. MsgBox również się nie pokazał po wpisaniu wartości mniejszej jak i większej (pokazał się tylko kiedy nic nie wpisałem w polu "wartość" i zaspamił mi komputer o.O )

kod:

Func hotkey1 ($1,$2,$3,$4)
	$y=GUICtrlRead($Input4)
	$mem = _MemoryRead((0x557000 - 0x400000) +  _MemoryGetBaseAddress($memaaa, 1), $memaaa)
	if $mem>=$y Then
		ControlSend("Tibia","","",$x)
		MsgBox(0,"","INPUT:"&$y&"  MEM:"&$mem)
		EndIf
		EndFunc
Opublikowano

A sprawdzałeś co zwraca Ci
$mem
$y
w różnych warunkach ? :D
może to tam coś nie halo.
zrób sobie func na $buuton

func test007()
$y=GUICtrlRead($Input4)
msgbox(0,"",$y)
	$mem = _MemoryRead((0x557000 - 0x400000) +  _MemoryGetBaseAddress($memaaa, 1), $memaaa)
msgbox(0,"",$mem)
endfunc 

powiedz co tam siedzi :)
Chyba że to robiłeś to sorki :)
Później zró na buttona controlsend z tego i zobacz czy działa :)


@edit
paczę tak na szybko i mam pytanie jedno czy jak byś wrzucił do while 1 warunek że jak ma sprawdzać hp czaisz ? :D
np

if $autopotion=true then
 $y=GUICtrlRead($Input4)
	$mem = _MemoryRead((0x557000 - 0x400000) +  _MemoryGetBaseAddress($memaaa, 1), $memaaa)
	if $mem>=$y Then
ControlSend("Tibia","","",$x)
		EndIf
endif
		EndFunc

domyślnie $autopotion=$false

I po wybraniu autopotion
$autopotion=true

tak ? :D


a tak troszkę dla bajeru jakbyś sobie zamiast inputa dał slider ? :)

#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Slider1 = GUICtrlCreateSlider(24, 48, 150, 21, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

ustawił

$maxhp = sam sobie to znajdź 
GUICtrlSetLimit($slider1, $maxhp, 1) ;<-- 1 bo mówiłeś że 0 spamuje pc 

nie fajniej ? :D

 

 

i co do tego jeszcze :)

$Input3 = GUICtrlCreateInput("Klawisz w {}", 256, 72, 185, 21)

po co robić za każdym razem {} ?
Można zrobić to tak

$x="K" ;<---- do inmputa został wpisany sam X  lub cokolwiek innego :P
$x="{"&$x&"}" ;<-----klamerki same się dodają 
msgbox(0,"",$x)

 

@Down
A ja jutro tego nomadmemory sobie zapisze i zobaczę jak to w ogóle wygląda :D
To może coś się jeszcze wymyśli. Jakąś mistyfikacje.

A co do tego slidera to nie wiem czy nie lepiej by było jakbyś sobie procentowo to zrobił :)

v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
 

Opublikowano

@Amfetaminek

 

Jak czytam Twojego posta to aż chce mi się śmiać i nie wiem kurde dlaczego xD

Dzięki za pomoc jutro sprawdzę twoje porady w praktyce i napisze co i jak. I jeszcze raz wielki plus za ten post xD

Opublikowano

Okej. Spróbowałem twoich porad z tą funkcją na kolejnym buttonie i zawsze jako BaseAddress wyskakiwało mi 0, a jako HP jakaś liczba nie pokrywająca się z rzeczywistością D: Zirytowany po wielu próbach poszedłem o krok dalej i postanowiłem zamieć "nomadmemory" na "krymemory". BaseAddress na tym includzie nie pokazywał mi już 0 lecz 0x000B0000, ale liczba HP nadal jest inna niż w rzeczywistości. Na dodatek w kompilatorze wyskakują mi cyfry "4" :O

Kod z "testowego buttona":

Case $Button3
			$pid = ProcessExists("Tibia.exe")
			$memaaa = _Process_Open($pid)
			$BaseAddress=_Process_GetBaseAddress($memaaa)
			MsgBox(0,"",$BaseAddress)
			$PlayerHealth= (0x557000 - 0x400000) + $BaseAddress;hp
			$HP = _Process_ReadMemory($memaaa, $PlayerHealth)
			msgbox(0,"",$HP)
Opublikowano

napisz co dokładnie Ci zwraca.
Sorki nie zauważyłem bo to forum laguje strasznie :D
A jaka jest rzeczywista liczba hp

$PlayerHealth= (0x557000 - 0x400000) + $BaseAddress;hp

0x000B0000

chyba nie da się dodać liczby do litery :D

Dobra jednak się da :D
czekam na rzeczywistą ilość HP

v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
 

Opublikowano

Player.Health = 0x557000 + BaseAddress;

Player.HealthMax = 0x55702C + BaseAddress;
że te 2 ?
ehh nie bawiłem się jeszcze nomadem ale zaraz coś się wykmini idę poszukać tej tibi.
Chyba że ktoś Ci odpowie wcześniej :)


$PlayerHealth= (0x557000) + $BaseAddress;hp
			$HP = _Process_ReadMemory($memaaa, $PlayerHealth)
			msgbox(0,"",$HP)

a to co Ci zwróci ?

v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
 

Opublikowano

Tak te 2 adresy chociaż używam tylko tego z Player.Health = 0x557000 + BaseAddress;

Mam użyć też tego z HealthMax ? Jak i po co ? :D

 

A to jest to co mi zwróciło po twojej poprawce:

95 hp - 4210752250

i przy innych wartościach hp zwraca to samo. BaseAddress bez zmian.

Opublikowano

Healtmax to będzie raczej full hp więc gdyby już Ci wszystko działało to można by było wykorzystać do do procentowego sprawdzania hp.
Właśnie pobrałem tibioszke i będę to loookał

A Ty zobacz czy to zwróci ci max hp.
Jeżeli tak to mamy zły adres aktualnego hp.
Jeżeli nie to będziemy szukać dalej.

$PlayerHealth= (0x55702C) + $BaseAddress;hp
			$HP = _Process_ReadMemory($memaaa, $PlayerHealth)
		
	msgbox(0,"",$HP)

A tak ogólnie to wydaje mi się że Tibia jednak ma jakieś zabezpieczenia.
Więc może to być trudniejsze niż się wydaje :D

v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
 

Opublikowano

Wyskakuje to samo jak w przypadku adresu od zwykłego Health'a.

A co do zabezpieczeń, to wydaje mi się, że jedyną barierą do pokonania jest ten Baseaddress, którego w starszych tibiach nie było. Kiedyś można było normalnie odczytać adresy z CE i bocik hulał ;/

Opublikowano

Adres skąd wytrzasłeś? Wynik z twojej funkcji w skrypcie pokrywa się z tym w Cheat Engine.

Ewentualnie podaj wynik tej twojej funkcji na forum, coś się wymyśli.

Opublikowano

Ja na twoim miejscu robił zrobiłbym po staremu, Cheat Enginem. Sam kiedyś się w to bawiłem i działało, może teraz wkońcu zabrali się za hack shieldy.

Opublikowano

Próbowałem z CE i wyskakiwały mi 4 adresy, ale jak czytałem po forach to teraz przez tez BaseAddressy już się tak nie da. No chyba, że znasz jakiś sposób? ;d

  • 1 rok później...

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...