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] NomadMemory.au3


Rekomendowane odpowiedzi

Opublikowano

Witam Was znowu i jak zwykle mam nierozwiązany przezemnie problem ;P

 

Planuje (znowu) rozwijać bota do NosTale, ale cały czas nie idzie mi z odczytem hp i many postaci, a jeżeli odczytuje to nie wykorzystuje tego w praktyce.

 

Adres HP=030BE860

Adres MP=030BE7EC

 

 

Tutaj skrypt dotyczący monitorowania HP/MP(dam kod tylko dotyczący tej funkcji)

 

 

 

 

#include <NomadMemory.au3>
Global $PID = ProcessExists("NosTaleX.dat")

$HPp=GUICtrlRead ($Input4)
$MPp=GUICtrlRead ($Input5)

$memarray = _MemoryOpen($PID)
$hp = _MemoryRead("030BE860", $memarray)
        $mp = _MemoryRead("030BE7EC", $memarray)
       TrayTip ("Bot", "Odtworzono pamięć", 1500)


If $HPp > $hp Then
            Send ("T")
            Sleep (30000)
            Send ("T")
        EndIf
        If $MPp > $mp Then
    Send ("T")
    Sleep (30000)
    Send ("T")
EndIf
 

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano


#include <NomadMemory.au3>

 

Global $PID = ProcessExists("NosTaleX.dat")

Global $mHandle = _MemoryOpen($PID) ; otwierasz proces tylko raz.

 

$HPPot = 50

$MPPot = 30

 

While 1

If GUIGetMsg() = -3 Then Exit

 

$hp = _MemoryRead(0x030BE860, $mHandle) ; podajesz w hexie, przedrostek 0x()

$mp = _MemoryRead(0x030BE7EC, $mHandle)

 

If $hp < $HPPot Then

Send("T")

EndIf

 

If $mp < $MPPot Then

Send("T")

EndIf

Sleep(10) ; lekki sleep

WEnd

Opublikowano

Dzięki za odpowiedź. Już myślałem, że nikt nie odpowie. Jutro sprawdze bo nie mam teraz dostępu do komputera. Ale faktycznie zapomniałem 0x do adresu ...
I tu się sprawdza opis u mnie: Wiem, że nic nie wiem :)

 

 

EDIT: Nie działa. Nie wiem dlaczego, ale może i czyta adres ale nie klika w oknie gry w przycisk T.

 

Oto cały kod, może w nim coś jest nie ten teges :)

 

 

 

 

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
If ProcessExists("NostaleX.dat") Then
Else
MsgBox(16, "Nie włączone NosTale", "NosTale nie jest uruchomione, więc bot się wyłącza.")
Exit
EndIf
HotKeySet("{F1}", "ESC")
Global $PID = ProcessExists("NosTaleX.dat")
Global $mHandle = _MemoryOpen($PID) ; otwierasz proces tylko raz.
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("NochalBot Reaktywacja v1", 623, 212, 41, 87)
$Button1 = GUICtrlCreateButton("Start Bot", 456, 8, 145, 25)
$Button2 = GUICtrlCreateButton("Wyjscie", 456, 32, 145, 25)
$Group1 = GUICtrlCreateGroup("Dane", 8, 8, 441, 185)
$Label1 = GUICtrlCreateLabel("Odpoczywaj, gdy HP osiągnie:", 16, 24, 148, 17)
$hpmin = GUICtrlCreateInput("500", 16, 48, 121, 21)
$Label2 = GUICtrlCreateLabel("Odpoczywaj, gdy MP osiągnie:", 11, 75, 149, 17)
$mpmin = GUICtrlCreateInput("500", 16, 101, 121, 21)
$Group2 = GUICtrlCreateGroup("Atak", 184, 24, 257, 161)
$Checkbox1 = GUICtrlCreateCheckbox("1", 192, 48, 25, 17)
$Checkbox2 = GUICtrlCreateCheckbox("2", 191, 78, 25, 17)
$Checkbox3 = GUICtrlCreateCheckbox("3", 191, 104, 25, 17)
$Checkbox4 = GUICtrlCreateCheckbox("4", 190, 129, 25, 17)
$Checkbox5 = GUICtrlCreateCheckbox("5", 191, 159, 25, 17)
$lot = GUICtrlCreateCheckbox("lot", 224, 159, 57, 17)
$Checkbox6 = GUICtrlCreateCheckbox("Spacja", 224, 48, 57, 17)
$Checkbox7 = GUICtrlCreateCheckbox("Drugorzędna", 224, 72, 81, 17)
$miedzyczas = GUICtrlCreateInput("300", 232, 120, 161, 21)
$Label5 = GUICtrlCreateLabel("Międzyczas ataku", 232, 96, 89, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$godz = GUICtrlCreateInput("12", 464, 96, 25, 21)
$Label3 = GUICtrlCreateLabel(":", 496, 96, 7, 17)
$min = GUICtrlCreateInput("12", 509, 98, 25, 21)
$Label4 = GUICtrlCreateLabel("Wyłącz bota i NosTale o godz:", 456, 64, 151, 18)
$Label6 = GUICtrlCreateLabel("HotKey:", 456, 120, 42, 17)
$Label7 = GUICtrlCreateLabel("F1-Wyłącz", 456, 144, 56, 17)
$Label8 = GUICtrlCreateLabel("F2-Wyłącz z NosTale", 456, 168, 107, 17)
$Label9 = GUICtrlCreateLabel("by JDaniel1", 560, 192, 59, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
Case $Button2
            MsgBOx (0,"Dziękuję","Dziękuję za uzycie bota")
            Exit
Case $Button1

    $HPPot=GUICtrlRead ($hpmin)
    $MPPot=GUICtrlRead ($mpmin)
$Hour=GUICtrlRead ($godz)
$Minuta=GUICtrlRead($min)
$zmienna = GUICTrlRead ($miedzyczas)
TrayTip ("NochalBot Reaktywacja v1","Bot z podanymi funkcjami rozpoznie prace za 5 sek",2,1)
        Sleep (5000)
            TrayTip ("Bot", "Bot rozpoczął prace", 1500)
While 1
If GUIGetMsg() = -3 Then Exit
$hp = _MemoryRead(0x030BE860, $mHandle) ; podajesz w hexie, przedrostek 0x()
$mp = _MemoryRead(0x030BE7EC, $mHandle)
If @hour = $Hour And @Min = $Minuta Then
ProcessClose ("NostaleX.dat")
Exit
Else
If $hp < $HPPot Then
    Send("T")
    Sleep (10000)
    Send ("T")
EndIf
     If $mp < $MPPot Then
Send("T")
        Sleep (10000)
        Send ("T")
        EndIf
If GUICtrlRead($CheckBox1) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
            Send ("1")

                Sleep ($zmienna)
            EndIf

            If GUICtrlRead($CheckBox2) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
            Send ("2")

                Sleep ($zmienna)
            EndIf

            If GUICtrlRead($CheckBox3) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
                Send ("3")
                Sleep ($zmienna)
            EndIf
If GUICtrlRead($lot) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
            Send ("{`}")
            Sleep (123)
        EndIf

            If GUICtrlRead($CheckBox4) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
                Send ("4")
                Sleep ($zmienna)
            EndIf

            If GUICtrlRead($CheckBox5) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
                Send ("5")
                Sleep ($zmienna)
            EndIf

            If GUICtrlRead($CheckBox6) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
                Send ("{space}")
                Sleep ($zmienna)
            EndIf

            If GUICtrlRead($CheckBox7) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
                Send ("Z")
                Sleep ($zmienna)
                EndIf
        EndIf
If $mp < $MPPot Then
Send("T")
        Sleep (10000)
        Send ("T")
EndIf
Sleep(10) ; lekki sleep

WEnd
EndSwitch
WEnd

Func ESC()
    TrayTip ("Dziękuję","Dziękuję za uzycie bota",1500)
    Sleep (1500)
    Exit
    EndFunc
 

 

 

Proszę o pomoc :)

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Ja zrobiłbym to tak:

 

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
If Not ProcessExists("NostaleX.dat") Then ; jesli NIE istnieje, If not, warunek else jest w tym przypadku jesli istnieje.
 	MsgBox(16, "Nie włączone NosTale", "NosTale nie jest uruchomione, więc bot się wyłącza.")
 	Exit
EndIf
HotKeySet("{F1}", "ESC")
Global $PID = ProcessExists("NosTaleX.dat")
Global $mHandle = _MemoryOpen($PID) ; otwierasz proces tylko raz.
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("NochalBot Reaktywacja v1", 623, 212, 41, 87)
$Button1 = GUICtrlCreateButton("Start Bot", 456, 8, 145, 25)
$Button2 = GUICtrlCreateButton("Wyjscie", 456, 32, 145, 25)
$Group1 = GUICtrlCreateGroup("Dane", 8, 8, 441, 185)
$Label1 = GUICtrlCreateLabel("Odpoczywaj, gdy HP osiągnie:", 16, 24, 148, 17)
$hpmin = GUICtrlCreateInput("500", 16, 48, 121, 21)
$Label2 = GUICtrlCreateLabel("Odpoczywaj, gdy MP osiągnie:", 11, 75, 149, 17)
$mpmin = GUICtrlCreateInput("500", 16, 101, 121, 21)
$Group2 = GUICtrlCreateGroup("Atak", 184, 24, 257, 161)
$Checkbox1 = GUICtrlCreateCheckbox("1", 192, 48, 25, 17)
$Checkbox2 = GUICtrlCreateCheckbox("2", 191, 78, 25, 17)
$Checkbox3 = GUICtrlCreateCheckbox("3", 191, 104, 25, 17)
$Checkbox4 = GUICtrlCreateCheckbox("4", 190, 129, 25, 17)
$Checkbox5 = GUICtrlCreateCheckbox("5", 191, 159, 25, 17)
$lot = GUICtrlCreateCheckbox("lot", 224, 159, 57, 17)
$Checkbox6 = GUICtrlCreateCheckbox("Spacja", 224, 48, 57, 17)
$Checkbox7 = GUICtrlCreateCheckbox("Drugorzędna", 224, 72, 81, 17)
$miedzyczas = GUICtrlCreateInput("300", 232, 120, 161, 21)
$Label5 = GUICtrlCreateLabel("Międzyczas ataku", 232, 96, 89, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$godz = GUICtrlCreateInput("12", 464, 96, 25, 21)
$Label3 = GUICtrlCreateLabel(":", 496, 96, 7, 17)
$min = GUICtrlCreateInput("12", 509, 98, 25, 21)
$Label4 = GUICtrlCreateLabel("Wyłącz bota i NosTale o godz:", 456, 64, 151, 18)
$Label6 = GUICtrlCreateLabel("HotKey:", 456, 120, 42, 17)
$Label7 = GUICtrlCreateLabel("F1-Wyłącz", 456, 144, 56, 17)
$Label8 = GUICtrlCreateLabel("F2-Wyłącz z NosTale", 456, 168, 107, 17)
$Label9 = GUICtrlCreateLabel("by JDaniel1", 560, 192, 59, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

; tablica dwuwymiarowa, [n][0] zawiera zmienna kontrolki, a [n][1] przypisany do niej klawisz
Dim $controls[8][2] = [['null', 'null'], [$Checkbox1, '1'], [$Checkbox2, '2'], [$Checkbox3, '3'], [$CheckBox4, '4'], [$Checkbox5, '5'], [$Checkbox6, '{space}'], [$Checkbox7, 'Z']]

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

		Case $Button2
            MsgBOx (0,"Dziękuję","Dziękuję za uzycie bota")
            Exit

		Case $Button1
			$HPPot = GUICtrlRead ($hpmin)
			$MPPot = GUICtrlRead ($mpmin)
			$Hour = GUICtrlRead ($godz)
			$Minuta = GUICtrlRead($min)
			$zmienna = GUICTrlRead ($miedzyczas)
			TrayTip ("NochalBot Reaktywacja v1","Bot z podanymi funkcjami rozpoznie prace za 5 sek",2,1)
			Sleep (5000)
			TrayTip ("Bot", "Bot rozpoczął prace", 1500)
			AdlibRegister("_autoPotion", 10000) ; rejestrujemy wykonywanie funkcji autopotion co 10 sekund
			AdlibRegister("_autoGrab", $zmienna) ; rejestrujemy wykonywanie funkcji autograb
			AdlibRegister("_autoAttack", $zmienna) ; rejestrujemy wykonywanie funkcji autoattack
	EndSwitch

	Sleep(1) ; sleep dla glownej petli
WEnd

Func _autoPotion() ; nowa funkcja autopot
	If @hour = $Hour And @Min = $Minuta Then ; twoj warunek na jakas godzine.
		ProcessClose ("NostaleX.dat")
		Exit 1
	EndIf

	$hp = _MemoryRead(0x030BE860, $mHandle) ; podajesz w hexie, przedrostek 0x()
	$mp = _MemoryRead(0x030BE7EC, $mHandle)

	If $hp < $HPPot Then
		Send("T")
	EndIf

     If $mp < $MPPot Then
		Send("T")
	EndIf
EndFunc

Func _autoGrab()
	If GUICtrlRead($lot) = $GUI_CHECKED Then ;jeżeli checkbox jest zaznaczony
		Send ("{`}")
	EndIf
EndFunc

Func _autoAttack()
	For $i = 1 to 7 ; loopujemy od 1 do 7, czyli od $Checkbox1 do $Checkbox7
		If GUICtrlRead($controls[$i][0]) = $GUI_CHECKED Then ; jezeli jest zaznaczony...
			Send($controls[$i][1]) ; ...wysylamy klawisz przypisany do danej kontrolki
		EndIf
	Next
EndFunc

Func ESC()
    TrayTip ("Dziękuję","Dziękuję za uzycie bota",1500)
    Sleep (1500)
    Exit
EndFunc
Opublikowano

Sleep(1) w głownej pętli nie zawali procka?

 

@TOPIC Sprawdz czy napewno te adresy są poprawne :) Ja też sie bawiłem w takiego bota (do innej gry) ale niestety sie adresy zmieniały ;C

 

Czy ktoś wie jak zrobić żeby program sam wyszukiwał odpowiedni adres?

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...