Neuling benötigt Rat von den Weisen unter euch Topic is solved

Stelle Fragen zur Automatisierung von Spielen

Moderator: jNizM

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 18 Jul 2020, 13:25

Hallo wertes Forum,
ich bin noch recht neu in jedweder Programmierung(seit 1 Woche dabei), benötige jedoch einen Rat von euch. Ich habe mir ein Skript für ein Spiel geschrieben welche auch ohne Probleme tut was er soll jedoch würde ich diesen gerne erweitern. Dafür soll das Skript erkennen wie viele HP mein Charakter noch besitzt und ggf. bei zu wenigen einen Trank nutzen.

Gibt es eine Art diese Informationen auszulesen?
Das Spiel ist in Java geschrieben und nennt sich Old School Runescape, sofern diese Information nützlich ist.

Ich würde gerne selber tüfteln, um es so zu lernen, nur habe ich keinen Ansatz finden können.. :/

Falls ihr mein Skript benötigt kann ich diesen hinzufügen.

Danke fürs Lesen und für die vermeintliche Hilfe :]

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch

Post by BoBo » 18 Jul 2020, 15:04

... und für die vermeintliche Hilfe :]
Das nenne ich mal eine Motvationshilfe für vermeidliche Hilfe :lol:

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch

Post by BoBo » 18 Jul 2020, 21:52

Java ist schwierig(er) antriggerbar. Welche von den 54 gelisteten threads kommt deinem Problem am Nächsten?
https://www.google.com/search?q=site%3Aautohotkey.com+runescape+old+school

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 19 Jul 2020, 12:15

BoBo wrote:
18 Jul 2020, 21:52
Java ist schwierig(er) antriggerbar. Welche von den 54 gelisteten threads kommt deinem Problem am Nächsten?
https www.google.com /search?q=site%3Aautohotkey.com+runescape+old+school Broken Link for safety
Ich danke dir erstmal für die schnelle Antwort! :]

Um ehrlich zu sein, gibt es dort keinen der das, was ich benötige, unterstreicht.
Im Grunde funktioniert mein Skript so dass mein Charakter den Npc ausknockt und dann bestiehlt bis er wieder bei Verstand ist(Wird in Runescape Blackjacking gennant.). Je nach dem Diebstahl Level des Charakters kann dies schiefgehen und der Npc schlägt den Charakter. Wenn dies zu oft passiert stirbt der Charakter da sich die Lebenspunkte nur langsam wiederherstellen.
Um den Tod des Charakters zu verhindern, müsste ich einen Loop einbauen, der immer wieder schaut wie viele Lebenspunkte(hp) der Charakter noch hat um gegebenenfalls einen Trank zu trinken.
Ich habe auch schon in YT geschaut jedoch nutzen die meisten dort pixelsearch etc womit man die Lebenspunkte natürlich nicht im Auge behalten kann.

Dies wäre mein derzeitiger Code:

Code: Select all

#SingleInstance, force
#IfWinActive RuneLite

	;Globale Variablen;
	Random, Rand, 500, 2500
	Count := 0

Knockout()
{
	
	while(Count <= 15)
	{
	click Right
	sleep 50
	Mousemove, 0, 70, 5, Rel
	sleep 50
	Click
	sleep 50
	Mousemove, 0, -70, 5, Rel
	sleep 1100
	
	loop, 2
	{
	click Right
	sleep 75
	Mousemove, 0, 40, 5, Rel
	sleep 75
	Click
	Mousemove, 0, -45, 5, Rel
	sleep 425
    }
	
	Sleep, Rand
	Count++
	}
	
	Reload
	
}

1::Knockout()
3::exitapp
4::reload

User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

Re: Neuling benötigt Rat von den Weisen unter euch

Post by LuckyJoe » 19 Jul 2020, 12:36

Hi,

kann man im Spiel denn die Lebenspunkte "anwählen", also z.B. mit Doppelklick? Wenn sich die Anzeige immer an einer bestimmten Stelle befindet, könnte man die Maus dorthin dirigieren und den aktuellen Wert per Doppelklick oder durch Markieren eines Bereiches in die Zwischenablage holen. Von dort aus kannst du dann weiterarbeiten.
Herzliche Grüße aus dem Rheinland
Lucky Joe

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch

Post by BoBo » 20 Jul 2020, 02:27

jedoch nutzen die meisten dort pixelsearch etc womit man die Lebenspunkte natürlich nicht im Auge behalten kann.
Bin mir nicht sicher ob man/frau das so stehen lassen kann. Dargestellte Zahlenwerte (0123456789) dürften bestimmte Pixelkombinationen aufweisen, durch welche sie identifizierbar sein sollten. Kann mich allerdings nicht erinnern das jemand schon mal diese Positionen ausgekaspert hat.
Mathemarrayisch sollten derartige Punkte doch errechenbar sein, oder ?? :shifty:

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 20 Jul 2020, 12:23

LuckyJoe wrote:
19 Jul 2020, 12:36
Hi,

kann man im Spiel denn die Lebenspunkte "anwählen", also z.B. mit Doppelklick? Wenn sich die Anzeige immer an einer bestimmten Stelle befindet, könnte man die Maus dorthin dirigieren und den aktuellen Wert per Doppelklick oder durch Markieren eines Bereiches in die Zwischenablage holen. Von dort aus kannst du dann weiterarbeiten.
Hey,

nein das ist leider nicht möglich. Die Anzeige der Lebenspunkte hat ihren festen Standort aber eine Interaktion vom Spieler ist so nicht möglich. Sie haben ihr eigenes Farbschema, ich bin mir nur nicht sicher ob es dort Funktionen in AHK gibt welche Zahlen auswerten können? Ich bin leider noch ein wirklicher Neuling im Programmieren :/
Das Interface des Spiels sieht so aus:
https://en.wikipedia.org/wiki/Old_School_RuneScape#/media/File:Osrsinterface.png

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 20 Jul 2020, 12:29

BoBo wrote:
20 Jul 2020, 02:27
jedoch nutzen die meisten dort pixelsearch etc womit man die Lebenspunkte natürlich nicht im Auge behalten kann.
Bin mir nicht sicher ob man/frau das so stehen lassen kann. Dargestellte Zahlenwerte (0123456789) dürften bestimmte Pixelkombinationen aufweisen, durch welche sie identifizierbar sein sollten. Kann mich allerdings nicht erinnern das jemand schon mal diese Positionen ausgekaspert hat.
Mathemarrayisch sollten derartige Punkte doch errechenbar sein, oder ?? :shifty:
Was würdest du mir denn vorschlagen mit welchen Funktionen bzw. Algorithmus ich dies mit AHK schreiben könnte? Bis jetzt habe ich nur in etwa diese Art von Code genutzt, um via Pixel/Farben im Spiel automatische Abläufe zu schreiben.
Sorry wenn's eine dumme Frage ist o.o Ich brauche nur einen kleinen Tipp in welcher Ecke ich schauen muss, um die richtigen Tutorials für solch etwas zu finden ^^

Code: Select all

1::
loop
{
	PixelSearch, FoundX, FoundY, 896, 241, 1700, 152, 0x00FFFF, 5, Fast RGB
	if (ErrorLevel == 0)
	{
		MsgBox, 1, MsgBox, Color was Found!
	}
}

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 21 Jul 2020, 06:09

Habe einen Weg gefunden die Lebenspunkte im Auge zu behalten und damit zu arbeiten!
Ich danke trotzdem jeden für die Hilfe und wünsche eine ruhige Woche! :)

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch

Post by BoBo » 24 Jul 2020, 08:33

... und du wolltest uns noch mitteilen wie genau du das jetzt bwerkstelligst, oder?? Weil Wissen teilen freut auch den Verteilenden :thumbup:

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 24 Jul 2020, 12:53

BoBo wrote:
24 Jul 2020, 08:33
... und du wolltest uns noch mitteilen wie genau du das jetzt bwerkstelligst, oder?? Weil Wissen teilen freut auch den Verteilenden :thumbup:
Oh tut mir leid Ich habe mal genauer darauf geachtet und habe festgestellt, dass sich die Farbe der Lebenspunkte je nach Prozentsatz verändern. Habe also letztlich PixelSearch in einen Loop genutzt, um bei Änderung der Farbe dann einen Trank zu nutzen.
Habe aber leider schon das nächste Problem wo ich am Tüfteln bin ^^ anstelle von der Mausposition wollte ich nun Pixelsearch nutzen um also besser Variieren zu können, da sich der Npc ab und an bewegt und der Cursor so nicht folgen würde.
Leider tut der Script gar nichts :|
Vielleicht kann jemand von euch das Problem erkennen. Skript startet und zeigt auch keine Errors an aber bleibt im Spiel einfach untätig. :?:

Code wäre folgender:

Code: Select all

#IfWinActive RuneLite
#SingleInstance force

Esc::ExitApp

;Globale Variablen;

global IsPickpocketing
global IsFullHp

;Main Loop;
F12::
Loop
{
	If(IsPickpocketing == 0 && IsFullHp == 1)
	{
		StartPickpocketing()
	}
	
	if(IsFullHp == 0)
	{
		EatFood()
	}
}
return

IsPickpocketing()
{
	IsPickpocketing := 0
	PixelSearch, PX, PY, 2, 26, 1909, 1029, 0x00ffff, 5, Fast RGB
	if(ErrorLevel == 0)
	{
		IsPickpocketing := 1
	}
	else
	{
		IsPickpocketing := 0
	}
	return IsPickpocketing()
}

IsFullHp()
{
	IsFullHp := 0
	PixelSearch, 1712, 81, 1734, 97, 0x00ff00, 5, Fast RGB
	If(ErrorLevel == 0)
	{
		IsFullHp := 1
	}
	else
	{
		IsFullHp := 0
	}
	return IsFullHp()
}

StartPickpocketing()
{
	PixelSearch, X1, Y1, 6, 29, 1704, 991, 0x00ffff, 5, Fast RGB
	if(ErrorLevel == 0)
	{
		Loop
		{
		MouseMove, X1, Y1, 5
		Click Right
		sleep, 50
		Mousemove, 0, 70, 5
		sleep, 50
		Click
		sleep, 50
		Mousemove, 0, -70, 5
		sleep, 1000
		break
		}
		
		loop, 2
		{
		click Right
		sleep, 50
		Mousemove, 0, 40, 5, Rel
		sleep, 50
		Click
		Mousemove, 0, -45, 5, Rel
		sleep, 500
		break
		}
	}	
}	
		
EatFood()
{
	PixelSearch, x1, y1, 1720, 734, 1914, 996, 0x00ff00, 5, Fast RGB
	if(ErrorLevel == 0)
	{
		MouseMove, x1, y1, 5
		Click
		EatFood := 1
	}
	else
	{
		EatFood := 0
		MsgBox,,, There's no Food to click! Stopping script
	}
	return EatFood()
}

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch  Topic is solved

Post by BoBo » 24 Jul 2020, 13:25

Zum Zeitpunkt des Starts (F12) sind die Variablen IsPickpocketing/IsFullHp zwar als Global deklariert, aber ohne Wert AKA wertlos.
Code befrickelt, aber nicht auf etwaige Logikfehler geprüft ...

Code: Select all

#IfWinActive RuneLite
#SingleInstance force

global IsPickpocketing	:= 0						; Globale Variablen
global IsFullHp			:= 0

F12::
Loop {
	If (IsPickpocketing == 0 && IsFullHp == 1) {
		StartPickpocketing()
		}
	If (IsFullHp == 0) {
		EatFood()
		}
	}
Return

IsPickpocketing() {
	PixelSearch, PX, PY, 2, 26, 1909, 1029, 0x00ffff, 5, Fast RGB
	IsPickpocketing := (ErrorLevel == 0) ? 1 : 0
	return IsPickpocketing
	}

IsFullHp() {
	PixelSearch, 1712, 81, 1734, 97, 0x00ff00, 5, Fast RGB
	IsFullHp := (ErrorLevel == 0) ? 1 : 0
	return IsFullHp
	}

StartPickpocketing() {
		PixelSearch, X1, Y1, 6, 29, 1704, 991, 0x00ffff, 5, Fast RGB
		if (ErrorLevel == 0) {
			Loop {
				MouseMove, X1, Y1, 5
				Click Right
				sleep, 50
				Mousemove, 0, 70, 5
				sleep, 50
				Click
				sleep, 50
				Mousemove, 0,-70, 5
				sleep, 1000
				break
				}
			Loop 2 {
				click Right
				sleep, 50
				Mousemove, 0, 40, 5, Rel
				sleep, 50
				Click
				Mousemove, 0,-45, 5, Rel
				sleep, 500
				break
				}
		}	
	}
		
EatFood() {
	PixelSearch, x1, y1, 1720, 734, 1914, 996, 0x00ff00, 5, Fast RGB
	if (ErrorLevel == 0) {
		MouseMove, x1, y1, 5
		Click
		EatFood := 1
		} 
	else {
		EatFood := 0
		MsgBox,,, There's no Food to click! Stopping script
		}
	Return EatFood
	}

Esc::ExitApp

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 28 Jul 2020, 10:16

BoBo wrote:
24 Jul 2020, 13:25
Zum Zeitpunkt des Starts (F12) sind die Variablen IsPickpocketing/IsFullHp zwar als Global deklariert, aber ohne Wert AKA wertlos.
Code befrickelt, aber nicht auf etwaige Logikfehler geprüft ...

Code: Select all

#IfWinActive RuneLite
#SingleInstance force

global IsPickpocketing	:= 0						; Globale Variablen
global IsFullHp			:= 0

F12::
Loop {
	If (IsPickpocketing == 0 && IsFullHp == 1) {
		StartPickpocketing()
		}
	If (IsFullHp == 0) {
		EatFood()
		}
	}
Return

IsPickpocketing() {
	PixelSearch, PX, PY, 2, 26, 1909, 1029, 0x00ffff, 5, Fast RGB
	IsPickpocketing := (ErrorLevel == 0) ? 1 : 0
	return IsPickpocketing
	}

IsFullHp() {
	PixelSearch, 1712, 81, 1734, 97, 0x00ff00, 5, Fast RGB
	IsFullHp := (ErrorLevel == 0) ? 1 : 0
	return IsFullHp
	}

StartPickpocketing() {
		PixelSearch, X1, Y1, 6, 29, 1704, 991, 0x00ffff, 5, Fast RGB
		if (ErrorLevel == 0) {
			Loop {
				MouseMove, X1, Y1, 5
				Click Right
				sleep, 50
				Mousemove, 0, 70, 5
				sleep, 50
				Click
				sleep, 50
				Mousemove, 0,-70, 5
				sleep, 1000
				break
				}
			Loop 2 {
				click Right
				sleep, 50
				Mousemove, 0, 40, 5, Rel
				sleep, 50
				Click
				Mousemove, 0,-45, 5, Rel
				sleep, 500
				break
				}
		}	
	}
		
EatFood() {
	PixelSearch, x1, y1, 1720, 734, 1914, 996, 0x00ff00, 5, Fast RGB
	if (ErrorLevel == 0) {
		MouseMove, x1, y1, 5
		Click
		EatFood := 1
		} 
	else {
		EatFood := 0
		MsgBox,,, There's no Food to click! Stopping script
		}
	Return EatFood
	}

Esc::ExitApp
Also muss ich einer globalen variablen auch Werte zuweisen? Das wusste ich nicht. Vielen Dank für die erneute Hilfe! ^^ Ich werde es so ausprobieren und mich dann nochmals melden, ob alles ohne Probleme läuft! :) LG

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 28 Jul 2020, 10:52

@BoBo

Habe es ausprobiert und das Problem, das der Script nichts mehr tut, ist gelöst, vielen Dank! Er findet die Pixel jedoch sobald er in den Loop zum Pickpocketing() springt, fährt die Maus zu dem Npc springt dann jedoch oben links an die Bildschirmecke und fängt dort an zu klicken. Habe die Koordinaten überprüft, welche aber vollkommen in Ordnung sind.

Des Weiteren habe ich einfache Frage, zu dem, was du im Skript korrigiert hast.

Was ist hiermit gemeint: ? 1 : 0 Das habe ich zuvor noch nicht sehen dürfen, weshalb ich nicht weiß was dies tut.

Lg ^^

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Neuling benötigt Rat von den Weisen unter euch

Post by BoBo » 28 Jul 2020, 14:15

Code: Select all

var := <Bedingung>  ? 1 : 0
var enthält, wenn die bedingung wahr ist, 1 sonst 0
Stichwort in der AHK–Hilfe hierfür „ternary operator“

MasterOfCrafting
Posts: 9
Joined: 18 Jul 2020, 13:10

Re: Neuling benötigt Rat von den Weisen unter euch

Post by MasterOfCrafting » 30 Jul 2020, 16:05

BoBo wrote:
28 Jul 2020, 14:15

Code: Select all

var := <Bedingung>  ? 1 : 0
var enthält, wenn die bedingung wahr ist, 1 sonst 0
Stichwort in der AHK–Hilfe hierfür „ternary operator“
Werde ich tun. Vielen Dank für die ganze Hilfe ^^

Post Reply

Return to “Spiele”