Hallo,
ich würde gerne Gebiete für Autohotkey erstellen damit der Keybinder z.b an dieser Stelle einen Befehl eingibt.
Wie ist es am besten zu regeln ?
Hallo,
ich würde gerne Gebiete für Autohotkey erstellen damit der Keybinder z.b an dieser Stelle einen Befehl eingibt.
Wie ist es am besten zu regeln ?
Wie genau soll man das verstehen? Du möchtest eine bestimmte Position festlegen an der sobald man angekommen ist der Befehl automatisch ausgeführt wird?
Ich habe mal ein Bild angehängt. Eigentlich wollte ich eine Taste dafür belegen sobald man z.b in dem weißen Bereich ist. Allerdings nur in den weißen Bereich so das ich gerne eine Zone auswählen möchte und nicht nur IsPlayerInRangeOfPoint
Ich wüsste spontan nicht wie man diese Zone exakt in einem Viereck definieren kann. Was spricht den gegen IsPlayerInRangeOfPoint? Es ist zwar ein Kreis aber ist das den so ein großes Problem?
Wie kann ich das denn am besten mit den Positionen machen ? Müssen dafür nicht i gesamt 4 mal X und 4 mal Y ?
Wie kann ich das denn am besten mit den Positionen machen ? Müssen dafür nicht i gesamt 4 mal X und 4 mal Y ?
Wieso sollten da 4 X und 4 Y Koordinaten sein?^^
So trägst du die Position des Gebiets in die Funktion ein.
Dann sollte der Befehl nur Funktionieren wenn der Spieler sich in der Zone befindet...
Bin wohl zu doof dafür habe folgende Daten
AddPlayerClass(2,-162.9984,414.6163,12.2813,74.3515,0,0,0,0,0,0); // Ecke 1
AddPlayerClass(2,-153.9862,392.1904,12.2813,253.8932,0,0,0,0,0,0); // ecke2
IsInArea(-162.9984,414.6163,-153.9862,392.1904)
{
_p := getcoordinates()
if(_p[0] >= MinX && _p[0] <= MaxX && _p[1] >= MinY && _p[1] <= MaxY)
addChatMessage("Da")
return 1
}
ist da iwas falsch ?
#SingleInstance Force
/*
AddPlayerClass(2,-162.9984,414.6163,12.2813,74.3515,0,0,0,0,0,0); // Ecke 1 = Min Koordinaten
AddPlayerClass(2,-153.9862,392.1904,12.2813,253.8932,0,0,0,0,0,0); // ecke2 = Max Koordinaten
_ZA.Push(["MinX","MinY","MaxX","MaxY"])
_ZA.Push([-162.9984,414.6163,-153.9862,392.1904])
*/
global _ZA := Object()
_ZA.Push([-162.9984,414.6163,-153.9862,392.1904])
_ZA.Push([0,0,0,0])
_ZA.Push([0,0,0,0])
_ZA.Push([0,0,0,0])
_ZA.Push([0,0,0,0])
_ZA.Push([0,0,0,0])
IsInZone()
{
local x=0
local _p := getcoordinates()
While(x <= _ZA.MaxIndex()){
if(_p[1] >= _ZA[x,1] && _p[1] <= _ZA[x,3] && _p[2] >= _ZA[x,2] && _p[2] <= _ZA[x,4]){
return 1
}
x++
}
return -1
}
1::
AddChatMessage(IsInZone() ? "Ich befinde mich in der Zone!" : "Ich befinde mich nicht in der Zone!")
return
Alles anzeigen
Guck dir das Script mal an, bei Fragen kannste dich gerne melden
Er sagt mir leider das ich dauerhaft in der Zone bin
Er sagt mir leider das ich dauerhaft in der Zone bin
Hm... Wie hast du die Koordinaten eingetragen? Zeig mal dein Script, so wie es jetzt ist...
Bei mir geht es, hab mir zum testen dieses Script gemacht...
#SingleInstance Force
#Persistent
;#include SAMP.ahk
global TState := False
global PlayerInZone := 0
global _ZA := Object()
_ZA.Push([-162.7654,414.0014,-153.7521,392.1347])
return
1::
if(!TState){
SetTimer, CheckZone, 500
TState := True
AddChatMessage("Timer gestartet!")
}else if(TState){
SetTimer, CheckZone, off
TState := False
AddChatMessage("Timer gestoppt!")
}
return
2::
reload
return
3::
_t := IsInZone()
if(_t > 1 || _t == 0)
{
AddChatMessage("MinX: " _ZA[1,1] "MinY: " _ZA[1,2])
AddChatMessage("MaxX: " _ZA[1,3] "MaxY: " _ZA[1,4])
AddChatMessage("Du bist nicht in Zone 1")
return
}
AddChatMessage("In der Zone!")
return
CheckZone:
ZoneNr := IsInZone()
if(!PlayerInZone && ZoneNr == 0)
{
return
}
else if(!PlayerInZone && ZoneNr > 0)
{
PlayerInZone := ZoneNr
AddChatMessage("Ich befinde mich in Zone " ZoneNr)
AddChatMessage("MinX" _ZA[ZoneNr,1] "MinY" _ZA[ZoneNr,2])
AddChatMessage("MaxX" _ZA[ZoneNr,3] "MaxY" _ZA[ZoneNr,4])
}
else if(PlayerInZone > 0 && ZoneNr == 0)
{
PlayerInZone := 0
}
return
IsInZone()
{
local x := 1
local _p := getcoordinates()
sleep 1000
While(x <= _ZA.MaxIndex()){
sleep 1000
if(_p[1] >= _ZA[x,1] && _p[1] <= _ZA[x,3] && _p[2] >= _ZA[x,2] && _p[2] <= _ZA[x,4]){
return x
}
x++
if(x == _ZA.MaxIndex()){
return 0
}
}
}
return
Alles anzeigen
Ich habe dein Script mal zum testen übernommen. Ich bekomme überall weiterhin ich bin in der Zone. Das kann ja iwie nicht sein
Hast du es 1 zu 1 übernommen? Bin grad boch arbeiten, gucke mir das später nomma an...
Hast du es 1 zu 1 übernommen? Bin grad boch arbeiten, gucke mir das später nomma an...
Ja ich habe es 1 zu 1 übernommen. Ich habe damit leider noch nie gearbeitet (Zonen) deswegen brauche ich da etwas mehr unterstützung
Ich vermute, du hast die Positionen falsch eingetragen hast, da es bei mir Wunderbar funktioniert.
Poste mal deinen Code teil wo du dies verwenden möchtest...
btw.
Welche API benutzt du
Ich habe dir mal ein paar Zonen am Krankenhaus LS eingetragen...
#Persistent
#UseHook
#NoEnv
#SingleInstance force
#IfWinActive, GTA:SA:MP
#include SAMP.ahk
SetBatchLines -1
ListLines, off
global TState := False
global PlayerInZone := 0
global _ZA := Object()
_ZA.Push([1180.455322,-1328.613892,1185.448242,-1318.718750]) ; Krankenhaus Zone LS Eingang Treppen ganz unten
_ZA.Push([1175.829712,-1328.554932,1179.685547,-1318.746704]) ; Krankenhaus Zone LS Eingang Treppen Mitte
_ZA.Push([1172.078003,-1328.596680,1173.216431,-1318.893433]) ; Krankenhaus Zone LS Eingang vor der Tür
_ZA.Push([1173.223999,-1341.726563,1180.488159,-1335.999023]) ; Krankenhaus Zone LS Links neben dem Eingang der Parkplatz in der Ecke :D
_ZA.Push([1170.414307,-1311.380981,1176.076538,-1305.829590]) ; Krankenhaus Zone LS Rechts neben dem Eingang die Garagen zufahrt? Bin mir grad nimmer sicher...
1::
if(!TState){
SetTimer, CheckZone, 500
TState := True
Sendinput % "tTimer gestartet!{Enter}"
}else if(TState){
SetTimer, CheckZone, off
TState := False
Sendinput % "tTimer gestoppt!{Enter}"
reload
}
return
2::
reload
return
3::
_t := IsInZone()
if(_t > 1 || _t == 0)
{
Sendinput % "tDu bist nicht in Zone 1{Enter}"
return
}
Sendinput % "tIn der Zone!{Enter}"
return
CheckZone:
ZoneNr := IsInZone()
if(!PlayerInZone && ZoneNr == 0)
{
return
}
else if(!PlayerInZone && ZoneNr > 0)
{
PlayerInZone := ZoneNr
Sendinput % "tIch befinde mich in Zone " ZoneNr "{Enter}"
Sendinput % "tMinX" _ZA[ZoneNr,1] "MinY" _ZA[ZoneNr,2] "{Enter}"
Sendinput % "tMaxX" _ZA[ZoneNr,3] "MaxY" _ZA[ZoneNr,4] "{Enter}"
}
else if(PlayerInZone != ZoneNr && ZoneNr == 0)
{
PlayerInZone := 0
}
return
4::
_g := GetPlayerCoordinates()
Sendinput % "tX: " _g[1] " - Y: " _g[2] "{Enter}"
FileAppend,% "X: " _g[1] " - Y: " _g[2] ,% A_ScriptDir "\Test.txt"
return
IsInZone()
{
x := 1
_p := GetPlayerCoordinates()
While(x <= _ZA.MaxIndex()){
if(_p[1] >= _ZA[x,1] && _p[1] <= _ZA[x,3] && _p[2] >= _ZA[x,2] && _p[2] <= _ZA[x,4]){
return x
}
x++
if(x == _ZA.MaxIndex()){
return 0
}
}
}
return
Alles anzeigen
Sry für Sendinput, aber SendChat lässt immer mein GTA abstürzen, muss mich darum ma kümmern^^
Sry für Sendinput, aber SendChat lässt immer mein GTA abstürzen, muss mich darum ma kümmern^^
Hast du die 0.3.7-R2 installiert? Daran wird's liegen.