Das kommt eben ganz darauf an, wie du die Daten ausgibst. Wenn du sie durch einen Doppelpunkt trennst, dann z.B. so:
array := StrSplit(result, ":")
Beiträge von Madd92
-
-
Ups mein Fehler, eher so:
PHP
Alles anzeigengetDialogIndex() { if (!checkHandles()) return false dwPointer := readDWORD(hGTA, dwSAMP + 0x12E350) if (ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } index := readMem(hGTA, dwPointer + 0x143, 1, "Byte") if (ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return index + 1 }
-
Probier's mal so:
-
-
Dann funktioniert etwas grundlegend nicht, welche API nutzt du denn?
-
Du meinst der lokale Spieler?
C
Alles anzeigenglobal SAMP_INFO_PTR := 0x21A0F8 global SAMP_POOLS := 0x3CD global SAMP_POOL_PLAYER := 0x18 global SAMP_LOCALPLAYER := 0x22 global GTA_CPED_PTR := 0xB6F5F0 global GTA_VEHICLE_PTR := 0xBA18FC __READMEM(hProcess, dwAddress, oOffsets, sDatatype = "Int") { if (!hProcess || !dwAddress) return "" VarSetCapacity(dwRead, 4) for i, o in oOffsets { dwRet := DllCall("ReadProcessMemory", "UInt", hProcess, "UInt", dwAddress + o, "Str", dwRead, "UInt", 4, "UInt*", 0) if (!dwRet) return "" if (i == oOffsets.MaxIndex()) return NumGet(dwRead, 0, sDatatype) dwAddress := NumGet(dwRead, 0, "UInt") } } isPlayerInAnyVehicle() { return checkHandles() && __READMEM(hGTA, GTA_VEHICLE_PTR, [0x0], "UInt") > 0 } isPlayerDriver() { return checkHandles() && __READMEM(hGTA, GTA_VEHICLE_PTR, [0x0, 0x460], "UInt") == __READMEM(hGTA, GTA_CPED_PTR, [0x0], "UInt") }
-
Welche API? Wenn UDF, neueste Version? Auf 32-Bit ANSI eingestellt bei der Konvertierung? Script als UTF-8 mit BOM gespeichert?
-
Mir ist gerade noch aufgefallen, dass man bei der ersten Bedingung IsPlayerDriver auch nicht braucht, da GetVehicleModelId sowieso 0 zurückgibt, wenn man in keinem Fahrzeug sitzt.
Bei der zweiten Bedingung könnte man noch !startjob mit einfügen, damit IsPlayerDriver nicht unnötig häufig aufgerufen wird. Zudem würde ich ebenfalls aus Performance Gründen den Timer eher auf 500 setzen oder ansonsten 300 wenn einem das zu lange dauert: -
So unnötig verschachtelt braucht man es nicht.
Code
Alles anzeigenglobal jobStarted := false SetTimer, Test, 100 Test: { if (IsPlayerInAnyVehicle()) { if (IsPlayerDriver()) { if (GetVehicleModelId() == 428) { if (!jobStarted) { SendChat("/startjob") jobStarted := true } } else { if (jobStarted) { jobStarted := false } } } else { if (jobStarted) { jobStarted := false } } } else { if (jobStarted) { jobStarted := false } } } return
Du hast 3 mal den gleichen Codeblock. Zudem braucht man IsPlayerInAnyVehicle nicht, da IsPlayerDriver das schon impliziert. Und If-Abfragen unterstützen nicht umsonst Expressions, in denen man den &&-Operator nutzen kann.
-
PHP
Alles anzeigenglobal startjob := true SetTimer, TEST, 100 TEST: if (startjob && IsPlayerDriver() == 1 && GetVehicleModelId() == 428) { startjob := false SendChat("/startjob") } else if (IsPlayerDriver() == 0) startjob := true return
So in der Art, je nachdem wann du die Variable dann resetten willst.
-
-
Einfach eine For-Schleife benutzen: https://ahkde.github.io/docs/commands/For.htm
-
Aber warum die ID noch einlesen? Du bist doch schon im Chat und musst doch nur Enter drücken, wenn die ID eingegeben wurde
-
SendInput t/kick Test{Left 5} müsste es dann ja sein
-
Achso naja dann eben nach links, wenn du zurück willst Aber wozu einlesen, kannst du ja dann einfach mit Enter absenden?
-
Brauchst dafür keine API, einfach {Right [Anzahl der Zeichen]} z.B. {Right 5} oder wenn der Cursor ganz nach rechts soll: {End} müsste klappen. Mit Send bzw. SendInput natürlich dazu
-
Er will ja mehrere Zeilen verarbeiten, daher einfach den gesamten Text auslesen und dann parsen und mit RegExMatch die Werte auslesen, die man braucht.
-
Einfach wenn der Dialog geöffnet ist, GetDialogText ausführen und über RegExMatch die einzelnen Werte filtern
-
GetDialogText ist doch in der UDF drin
Von mir gibt es gar keine öffentliche API -
Guck mal in deine PNs