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

Jamlegend Bot - Source


tk371

Rekomendowane odpowiedzi

Opublikowano

JamLegend BotSource

Ten bot jest przeczeniem ogólnej opinii o AutoIt (że jest powolne).

Do jego stworzenia użyłem funkcji Adlib - świetnie się do tego nadaje i obsługa jest banalna.

Główny problem bota? Czas co jaki ma szukać zmian - i nie chodzi mi tutaj o to, że wolno - wręcz przeciwnie za szybko. Bot potrafi kilka razy wykryć i przycisnąć tego samego tabsa.

 

INSTRUKCJA OBSŁUGI:

 

ESC - wyjście

Pause Break - start/pauza

F1...F5 - pozycje tabsów

F6 - reset ustawień

F7 - ustawienie czasu

 

SOURCE

 

HotKeySet("{PAUSE}","TogglePause");pauza
HotKeySet("{ESC}", "Terminate");wyjscie
HotKeySet("{F1}", "F1");tab 1
HotKeySet("{F2}", "F2");tab 2
HotKeySet("{F3}", "F3");tab 3
HotKeySet("{F4}", "F4");tab 4
HotKeySet("{F5}", "F5");tab 5
HotKeySet("{F6}", "F6");tab reset
HotKeySet("{F7}", "F7");odstep pomiedzy kliknieciami
Global $pos1
Global $pos2
Global $pos3
Global $pos4
Global $pos5
Global $pos1c
Global $pos2c
Global $pos3c
Global $pos4c
Global $pos5c
Global $speed
$Paused = 0
$speed = 200
$pos1c = 0
$pos2c = 0
$pos3c = 0
$pos4c = 0
$pos5c = 0
#NoTrayIcon
AutoItSetOption("TrayAutoPause", 0)
TraySetToolTip("JamLegend Bot")
;Funkcje
Func TogglePause()
   $Paused = NOT $Paused
   While $Paused
	AdlibUnRegister("k1")
	AdlibUnRegister("k2")
	AdlibUnRegister("k3")
	AdlibUnRegister("k4")
	AdlibUnRegister("k5")
       Sleep(1000)
       ToolTip('Skrypt zatrzymany',0,0)
   WEnd
AdlibRegister("k1", $speed)
AdlibRegister("k2", $speed)
AdlibRegister("k3", $speed)
AdlibRegister("k4", $speed)
AdlibRegister("k5", $speed)
   ToolTip("Skrypt uruchomiony",0,0)
EndFunc;==>TogglePause
Func Terminate()
Exit
EndFunc;==>Terminate
Func F1()
$pos1 = MouseGetPos()
$pos1c = 1
Return $pos1c
Return $pos1
EndFunc;==>F1
Func F2()
$pos2 = MouseGetPos()
$pos2c = 1
Return $pos2c
Return $pos2
EndFunc;==>F2
Func F3()
$pos3 = MouseGetPos()
$pos3c = 1
Return $pos3c
Return $pos3
EndFunc;==>F3
Func F4()
$pos4 = MouseGetPos()
$pos4c = 1
Return $pos4c
Return $pos4
EndFunc;==>F4
Func F5()
$pos5 = MouseGetPos()
$pos5c = 1
Return $pos5c
Return $pos5
EndFunc;==>F5
Func F6()
$pos1c = 0
$pos2c = 0
$pos3c = 0
$pos4c = 0
$pos5c = 0
       $speed = 200
Return $pos1c
Return $pos2c
Return $pos3c
Return $pos4c
Return $pos5c
       Return $speed
EndFunc;==>F6 - reset
Func F7()
$speed = InputBox("Czas", "Wprowadź odstęp czasu sprawdzania tabsa"&@CRLF&"Pdaj w milisekundach:"&@CRLF&"1s = 1000ms", "200", " M3");$ES_NUMBER nie działa
If Not @error Then
	Return $speed
EndIf
EndFunc
Func k1()
If $pos1c = 1 Then
	PixelSearch($pos1[0]-15, $pos1[1]-15, $pos1[0]+15, $pos1[1]+15, 0xF4EA4A, 100)
	If Not @error Then
		Send("{1}")
	EndIf
EndIf
EndFunc
Func k2()
If $pos2c = 1 Then
	PixelSearch($pos2[0]-15, $pos2[1]-15, $pos2[0]+15, $pos2[1]+15, 0xCB50E5, 100)
	If Not @error Then
		Send("{2}")
	EndIf
EndIf
EndFunc
Func k3()
If $pos3c = 1 Then
	PixelSearch($pos3[0]-15, $pos3[1]-15, $pos3[0]+15, $pos3[1]+15, 0xA4E451, 100)
	If Not @error Then
		Send("{3}")
	EndIf
EndIf
EndFunc
Func k4()
If $pos4c = 1 Then
	PixelSearch($pos4[0]-15, $pos4[1]-15, $pos4[0]+15, $pos4[1]+15, 0xF75F40, 100)
	If Not @error Then
		Send("{4}")
	EndIf
EndIf
EndFunc
Func k5()
If $pos5c = 1 Then
	PixelSearch($pos5[0]-15, $pos5[1]-15, $pos5[0]+15, $pos5[1]+15, 0x78C0E9, 100)
	If Not @error Then
		Send("{5}")
	EndIf
EndIf
EndFunc
;Program
TogglePause()
While 1
Sleep(100)
WEnd

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

Powiedz mi czy te Twoje funkcję mają jakiś sens? o.O

Po co kilka razy w jednej funkcji używasz Return? Przecież po Return funkcja kończy swoje działanie.

Func F6()
       $pos1c = 0
       $pos2c = 0
       $pos3c = 0
       $pos4c = 0
       $pos5c = 0
       $speed = 200
       Return $pos1c
       Return $pos2c
       Return $pos3c
       Return $pos4c
       Return $pos5c
       Return $speed
EndFunc;==>F6 - reset

To Ci zwróci tylko $pos1c

W ogóle po co coś mają te funkcje zwracać jeśli wywołujesz je tylko przez Hotkeye?

 

Jeśli nie rozumiesz funkcji to jej nie wykorzystuj (albo przeczytaj o niej w Helpie)

Opublikowano

nie grałeś to nie wiesz, naciskając hotkey za pierwszym razem przypisuje pozycje myszki , a potem tylko jej używa do odczytu koloru , F6 reset wszystkich ustawień pozycji , można wprowadzić ponownie nowe

tylko pomysleć jeszcze nad opuźnieniem naciskania klawiszy by nie było zbyt czestych błędów i zbyt częstego naciskania klawisza kiedy nie potrzeba , można spróbować do funkcji odczytującej dodać funkcje sprawdzająca kiedy wykryty kolor zniknie i dopiero wtedy funkcja wznowi działanie od nowa szukając zmian

 

szkoda że tak słabo gra ( 70-80 % to osiągne sam grając ) , powyzej 98% zawsze mam używając swojego bota

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

+ jesli jestes dobry i ciagle trafiasz w klawisze to zmienia sie kolor tla i kolor piksela juz nie ma sensu moj bot w tym momencie glupial i nie znalazlem na to rozwiazania;/

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

zbieram +

Opublikowano

ciekawszym rozwiązanie problemu i chyba nawet łatwiejszym w obsłudze było by użyć do odczytu PixelGetColor a nie wyszukiwania za pomocą PixelSearch, sam kiedyś użyłem w podobnym bocie i działało lepiej

; funkcje dla F1
Func pobierzF1()
$coordF1 = MouseGetPos()
$xF1 = $coordF1[0]
$yF1 = $coordF1[1]
$colorF1 = Hex(PixelGetColor($coordF1[0], $coordF1[1]), 6)  ; zamieni kolor z decymalnego zapisu na hexy
EndFunc   ; ==> pobierz pozycje myszki dla F1 ( $xF1 i $yF1 ) i kolorek odrazu $colorF1

Func _getF1($xDefF1, $yDefF1)
$newF1 = Hex(PixelGetColor($xDefF1, $yDefF1), 6)
Return ($newF1)
EndFunc   ; ==> $newF1 to kolor w danym momencie na pozycji zapamiętanej 

 

_getF1($xF1, $yF1) ; odczytujesz kolor na pozycji

 

no i pozostaje teraz porobić warunki i porównać kolory na pozycji

 

 

jak widać można cały czas sprawdzać kolor w danym punkcie i używać też jego zmian do naciskania klawiszy bez potzreby ciągłego wyszukiwania danego koloru, poprawie funkcje tylko bo nie pamiętam dokładnie czy to tak leciało

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano
Jeśli nie rozumiesz funkcji to jej nie wykorzystuj (albo przeczytaj o niej w Helpie)

Return to nie funkcja :P

 

powyzej 98% zawsze mam używając swojego bota

Tak się nim chwalisz już od tak dawna, że może wkleiłbyś source? :] A przynajmniej powiedział, czy operujesz na pamięci, czy pixelsearch'u?

Ta sygnatura jest pusta.

Opublikowano

juz zamiesciłem kiedyś bota na forum , jest gdzieś w starszych postach i do ściągnięcia w moich plikach z uploadu ;) ale to nie projekt w autoit , lecz był z source dołączonym przez jakiś czas modyfikowałem sam ale bez poprawy bocik 1

 

aktualnie gram na tym BOCIK 2 99% i ok 400-500 streak spokojnie osiągam , instrukcje jak uzyc właściwie napisze jak bedzie czas

 

zresztą projekt w autoit nie kontynuuje juz z powodu padu dysku , funkcje powyższe używałem właśnie w nim :(

 

p.s. bez skanów bo pliki są załącznikami z forum, kto nie chce nie pobiera

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

@4ggr

Wiem, że to nie funkcja, ale nie wiedziałem jak to nazwać :P

 

@robem

Owszem, nie grałem. Przeanalizowałem jego kod i domyśliłem się do czego mają służyć te HotKeye :)

Chodziło mi o to, że tyle Return'ów w jednej funkcji nie ma sensu, gdyż funkcja się kończy po 1. Return'ie :)

Opublikowano

ciekawszym rozwiązanie problemu i chyba nawet łatwiejszym w obsłudze było by użyć do odczytu PixelGetColor a nie wyszukiwania za pomocą PixelSearch, sam kiedyś użyłem w podobnym bocie i działało lepiej

PixelGetColor było w prototypie :)

No ale kolor tła się zmienia więc odpadło - chyba, że coś źle zrozumiałem.

Nie mam kodu do prototypu, ale wystarczy dopisać ten getcolor do funkcji.

 

hfaua: Nie zgodzę się z tobą. Samo to, że ten bot działa przeczy temu co piszesz.

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

To, że kod działa nie przeczy temu, że niepotrzebnie używałeś w każdej funkcji kilka razy Return'a...

To jest po prostu niepotrzebne, bo jak już pisałem funkcja kończy pracę po PIERWSZYM Return'ie.

Więc powiedz mi jaki sens ma takie dawanie 5-6 bezsensownych linijek o.O

Poza tym w ogóle nie korzystasz z tych zwracanych wartości :)

Opublikowano

Taki przykład:

Func F1()
       $pos1 = MouseGetPos();wiadomo co
       $pos1c = 1; ustawiam, czy ma klikać (tutaj się z tobą zgodzę można by to wywalić, bo 3 taby są zawsze)
       Return $pos1c;i tutaj nie bardzo rozumiem... po "," miałem dać np. te $pos1?
       Return $pos1;to jest 2-gi return a jednak zwraca - no chyba, że j.w.: nie bardzo rozumiem.
EndFunc;==>F1

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

Nie o to chodzi...

Return to jest zwracana wartość np. wykorzystując powyższą funkcję:

$aaa = F1()
Msgbox(64, "Wartość $aaa", "Wartość którą zwróciła funkcja F1 :" & $aaa)

 

W Msgboxie będzie wartość $pos1c, bo funkcja F1 zwraca $pos1c. Nie możesz zwracać kilku wartości jednocześnie (chyba, że jako tablicę), a w Twoim kodzie w ogóle te Returny nie mają sensu, skoro nie korzystasz z tych zwracanych wartości ;p

Opublikowano

jak mówisz, wystarczy ze rozpisze zwracane dane jako tablice wtedy return zwróci wszystkje dane z funkcji a nie jedną jak piszesz

 

MouseGetPos zwraca dwie

$pos1c zwraca jedną

 

czyli razem 3

 

        $pos1 = MouseGetPos()

       $xF1 = $pos1[0] ; pierwsza
       $yF1 = $pos1[1] ; druga
       $pos1c = $pos1[2]         ; trzecia

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

return to Statement, czyli deklaracja :]

http://www.fredosaurus.com/notes-cpp/functions/return.html

 

 

 

Nie zgodzę się z tobą. Samo to, że ten bot działa przeczy temu co piszesz.

 

<rozdrażnione kaszlnięcie na typowe podejście ludzkiej rasy>

 

Eeh... who cares? Nie chce mi się kłócić... I podziwiam wszystkich, którym się chce...

Ta sygnatura jest pusta.

Opublikowano

No dzięki :) chciałem tylko zrozumieć o co dokładniej chodzi z tym return.

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

MIalem na myśli hfaua.

 

Ty nie masz racji, więc siedź cicho.

 

Func f()
; do anything 
Return 'hfaua ma rację'; 
Return 'tk31 ma rację'; 
EndFunc

Do 
  ConsoleWrite(f() & @CRLF)
  sleep(Random(1000,1500,1)); 
Until False

 

Obciągnę Ci, jeśli funkcja zwróci, że masz rację.

 

Func f()
; do anything
Local $array[3]
$array[0] = ' 4ggr35510n '; 
$array[1] = ' ZAWSZE ma rację, '; 
$array[2] = ' chyba, że jest inaczej '; 
Return $array
EndFunc

Func write_array_to_console($array)
Local $string
For $i = 0 to ubound($array) - 1
  $string &= $array[$i]
Next
Return ConsoleWrite($string & @CRLF)
EndFunc


Do
  write_array_to_console(f()); 
  sleep(555); 
Until False

Ta sygnatura jest pusta.

Opublikowano

'Obciągnę Ci' wtf?

Bez takich tekstów proszę

to nie jest czat onetu więc troche kultury... kurwa

  • 4 tygodnie później...
Opublikowano

A jakby to zrobić za pomocą nomadmemory? chciałbym się tego podjąć, mam zerowe niestety pojęcie o tych wszystkich offsetach itp. nie wiem kompletnie jak się za to zabrać, może ktoś wie jak się ma pamieć do takich gier, np. jak wyciągnąć że właśnie coś przeleciało przez keya nr.5 w jamlegend.

Opublikowano

Bot musiałby mieć dużo więcej wersji. Inna pod chroma 8, inna pod chroma 9, inna pod ie itp. Każda przeglądarka ma inne offsety.

Wyciągnąć coś takiego jak dla mnie to nie sposób - chociaż nie jestem pr0 w CE.

Ale wszystko jest możliwe :)

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

Wiesz wystarczyło by na Firefoxa, byle by było się na czym wzorować, mógłbyś mi dać jakiś przykład jak wyciągnąć takie coś i wykorzystać? nie proszę o całego bota do jamlegend na tej podstawie, tylko coś co mi otworzy drzwi do napisania takiego :P

Opublikowano

 

#include <NomadMemory.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#NoTrayIcon
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Metin2 Simple Hack", 187, 230, 245, 137)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Group1 = GUICtrlCreateGroup("Attack Speed", 0, 0, 185, 105)
$Input1 = GUICtrlCreateInput("200", 8, 16, 169, 21, $ES_NUMBER)
$Button1 = GUICtrlCreateButton("ON/OFF", 8, 40, 171, 57, $WS_GROUP)
GUICtrlSetOnEvent(-1, "Button1Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Move Speed", 0, 104, 185, 105)
$Input2 = GUICtrlCreateInput("200", 8, 120, 169, 21, $ES_NUMBER)
$Button2 = GUICtrlCreateButton("ON/OFF", 8, 144, 171, 57, $WS_GROUP)
GUICtrlSetOnEvent(-1, "Button2Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
Dim $StatusBar1_PartsWidth[2] = [93, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $StatusBar1_PartsWidth)
_GUICtrlStatusBar_SetText($StatusBar1, "AS - OFF", 0)
_GUICtrlStatusBar_SetText($StatusBar1, "MS - OFF", 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $PID
Global $Attack_Speed = 200
Global $Move_Speed = 200
$Toggle_Attack_Speed = 0
$Toggle_Move_Speed = 0
Process()
While 1
Sleep(100)
WEnd

Func Process()
$PID = ProcessExists("Metin2.bin")
If $PID = 0 Then
	$PID = ProcessExists("Metin2Mod.bin")
	If $PID = 0 Then
		$PID = ProcessExists("metin2mod.bin")
		If $PID = 0 Then
			$PID = ProcessExists("metin2mh.bin")
			If $PID = 0 Then
				MsgBox(48, "Metin2 Simple Hack", "Nie znaleziono procesu gry")
			EndIf
		EndIf
	EndIf
EndIf
EndFunc
Func Button1Click()
$Attack_Speed = GUICtrlRead($Input1)
$Toggle_Attack_Speed = NOT $Toggle_Attack_Speed
   If $Toggle_Attack_Speed = 1 Then
	$Array = _MemoryOpen($PID)
	_MemoryWrite(0x58AFAF46, $Array, 16156+$Attack_Speed)
	_MemoryClose($PID)
	_GUICtrlStatusBar_SetText($StatusBar1, "AS - ON", 0)
Else
	$Array = _MemoryOpen($PID)
	_MemoryWrite(0x58AFAF46, $Array, 16256)
	_MemoryClose($PID)
	_GUICtrlStatusBar_SetText($StatusBar1, "AS - OFF", 0)
   EndIf
EndFunc
Func Button2Click()
$Move_Speed = GUICtrlRead($Input2)
   $Toggle_Move_Speed = NOT $Toggle_Move_Speed
   If $Toggle_Move_Speed Then
	$Array = _MemoryOpen($PID)
	_MemoryWrite(0x58AFAF42, $Array, 16156+$Attack_Speed)
	_MemoryClose($PID)
	_GUICtrlStatusBar_SetText($StatusBar1, "MS - ON", 1)
Else
	$Array = _MemoryOpen($PID)
	_MemoryWrite(0x58AFAF42, $Array, 16256)
	_MemoryClose($PID)
	_GUICtrlStatusBar_SetText($StatusBar1, "MS - OFF", 1)
   EndIf
EndFunc
Func Form1Close()
Exit
EndFunc

Masz w tym zmianę wartości pamięci w metinie - taki prosty mh. Wystarczy dodać jeszcze _memoryread i ulepszyć pętlę, aby zmieniał wartość po tym jak się ona zmieni.

Wesołego pisania xD

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

Podstawy działania na pamięci już znam, tylko nie mam pojęcia jak się to ma do Jamlegend, w sensie jak wyłapać pamięć tych strun - 0 koncepcji niestety.

Opublikowano

No to do działu cheatengine lub pooglądaj jakieś tutoriale na YT jak wyciągnąć wartość.

Właściwie to dokładnie nie mam pojęcia, czy te wartości są gdzieś przechowywane - więc być może nici z koncepcji.

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

  • 4 miesiące temu...

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...