Beiträge von Madd92
-
-
Am besten mit einem bzw. zwei Timern. Sagen wir mal, der Befehl soll alle 2 Sekunden ausgeführt werden:
PHP
Alles anzeigenglobal timerWait := false SetTimer, Timer1, 50 SetTimer, Timer2, 2000 Timer1: GetChatLine(0, line) if (InStr(line, "Text im Chat")) { SetTimer, Timer2, 10000, 1 ; // 10000 = 10 Sekunden, 15 Minuten = 900000 timerWait := true } return Timer2: SendChat("/befehl") if (timerWait) { timerWait := false SetTimer, Timer2, 2000 } return
Du könntest Timer1 in der Zeit, wo gewartet wird auch stoppen, wenn du keine anderen Chatnachrichten auslesen willst.
-
Welche API benutzt du denn? Im Zweifel: als Admin starten, AHK Version checken, als ANSI-32 konvertieren.
-
Mit meinem Code?
-
Also ich habe jetzt mal deine Settings.ini genommen und nachdem ich Strafpunkte verteilt habe, sieht die so aus:
Die zweite Kontrollen-Sektion wird also gar nicht benutzt. Der Key Strafpunkte wurde unter der ersten Kontrollen-Sektion eingetragen.
Was genau funktioniert denn nicht? Die Punkte werden nicht eingetragen oder nicht ausgelesen oder beides?Edit: Dein Script funktioniert bei mir so auch überhaupt nicht. Hast du einfach mal meinen Code ausprobiert?
-
Ich weiß nicht, ob das jetzt nur durch das Kopieren passiert ist, aber du musst auf die Leerzeilen achten:
PHP
Alles anzeigenStrafpunkte: if (!WinActive("GTA:SA:MP")) return GetChatLine(0, Chatline1) if (InStr(Chatline1, "Strafpunkte eingetragen, Grund: ")) { if (!RegExMatch(Chatline1, "Du hast (\S+) (\d+) Strafpunkte eingetragen, Grund: ", result)) return IniRead, strafpunkte, settings.ini, Kontrollen, Strafpunkte, 0 strafpunkte += result2 IniWrite, %strafpunkte%, settings.ini, Kontrollen, Strafpunkte AddChatMessage("[Ordnungsamt] Du hast gerade " result2 " Strafpunkte verteilt.") } return
-
Nimm mal bitte diese Version der UDF. Denk dran, dass die SAMP.ahk im gleichen Ordner wie ein Script sein muss.
-
Ich hab das früher mal mithilfe einer kleinen aber nützlichen Funktion von Paul.Phoenix und der PlayerInput Funktion gelöst:
PHP
Alles anzeigen#If WinActive("GTA:SA:MP") && isInChat() :?:/tr:: rechnung := PlayerInput("Rechne: ") AddChatMessage("Das Ergebnis lautet: " Evaluate(rechnung)) return PlayerInput(text){ KeyWait Enter Send t^a{backspace}%text% Input, var, v, {enter} Send ^a{backspace}{enter} Sleep, 20 return var } Evaluate(string) { static sc := ComObjCreate("ScriptControl") sc.Language := "JScript" string := "a = " string ";" sc.ExecuteStatement(string) new := sc.Eval("a") return new }
-
-
Dann würde ich es so machen:
PHP
Alles anzeigen#SingleInstance, Force #Persistent #Include SAMP.ahk SetTimer, Strafpunkte, 100 return Strafpunkte: if (!WinActive("GTA:SA:MP")) return GetChatLine(0, Chatline1) if (InStr(Chatline1, "Strafpunkte eingetragen, Grund: ")) { if (!RegExMatch(Chatline1, "Du hast (\S+) (\d+) Strafpunkte eingetragen, Grund: ", result)) return IniRead, strafpunkte, settings.ini, Kontrollen, Strafpunkte, 0 strafpunkte += result2 IniWrite, % strafpunkte, settings.ini, Kontrollen, Strafpunkte AddChatMessage("[Ordnungsamt] Du hast gerade " result2 " Strafpunkte verteilt.") } return #If WinActive("GTA:SA:MP") && !isInChat() ; // ### Hotkeys ### #If WinActive("GTA:SA:MP") && isInChat() ; // ### Hotstrings ### :?:/kontrollen:: IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 AddChatMessage("[Ordnungsamt] Du hast insgesamt " kontrollen " Kontrollen durchgeführt.") return :?:/punkte:: IniRead, strafpunkte, settings.ini, Kontrollen, Strafpunkte, 0 AddChatMessage("[Ordnungsamt] Du hast insgesamt " strafpunkte " Strafpunkte vergeben.") return :?:/vk:: SendChat("Guten Tag Sir, dies ist eine Allgemeine Personenkontrolle.") SendChat("Dürfte ich Sie auf illegale Gegenstände und Waffen kontrollieren?") SendChat("Falls Sie verweigern sollten, erhalten Sie Wantedstufen in Höhe von einem Wanted.") SendChat("Bitte antworten Sie mit 'Ja' oder 'Nein'.") IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 kontrollen++ IniWrite, % kontrollen, settings.ini, Kontrollen, Kontrollen return
-
Naja z.B. eine globale Variable setzen und bei GetChatline einbauen, dass die Variable erst wenn die Chatline nicht mehr "Guten Tag Sir etc." ist wieder auf true gesetzt wird. Aber wenn du für den Satz sowieso nen Hotkey hast, würde ich es so z.B. machen:
PHP
Alles anzeigen#SingleInstance, Force #Include SAMP.ahk return #If WinActive("GTA:SA:MP") && !isInChat() 1:: SendChat("Guten Tag Sir, dies ist eine Allgemeine Personenkontrolle.") IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 kontrollen++ IniWrite, %kontrollen%, settings.ini, Kontrollen, Kontrollen return #If WinActive("GTA:SA:MP") && isInChat() :?:/kontrollen:: IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 AddChatMessage("[Ordnungsamt] Du hast insgesamt " kontrollen " Kontrollen durchgeführt.") return
-
Versuch mal, auf Leerzeichen zu achten:
PHP
Alles anzeigen#SingleInstance, Force #Include SAMP.ahk SetTimer, Kontrollzähler, 100 return Kontrollzähler: GetChatLine(0, Chatline1) if (InStr(Chatline1, "Guten Tag Sir, dies ist eine Allgemeine Personenkontrolle.")) { IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 kontrollen++ IniWrite, %kontrollen%, settings.ini, Kontrollen, Kontrollen } return :?:/kontrollen:: IniRead, kontrollen, settings.ini, Kontrollen, Kontrollen, 0 AddChatMessage("[Ordnungsamt] Du hast insgesamt " kontrollen " Kontrollen durchgeführt.") return
Das Problem daran ist allerdings, dass GetChatline ständig ausgeführt wird und solange die letzte Nachricht die gleiche bleibt, wird der Kontrollenzähler erhöht. Das heißt entweder baust du eine Prüfung ein, dass die Chatline nicht die gleiche sein darf, oder du schreibst per AddChatMessage danach selber was in den Chat, oder du machst es nicht per GetChatline, sondern per Hotkey wo du den Zähler erhöhst, ich denke du wirst ja nicht jedes mal händisch diesen Satz abtippen.
-
Wenn man den Chat nicht offen hat, meinte ich. Man kann also kein i mehr in den Chat schreiben.
Das Problem bei meinem Code war, dass die #If Direktiven sich gegenseitig überschreiben. Heißt, die oben im Script stehende #IfWinActive, GTA:SA:MP Direktive wurde außer Kraft gesetzt durch die
#If !isInChat() Direktive. Also einfach beides zusammenfügen und fertig: #If WinActive("GTA:SA:MP") && !isInChat() -
Ok ja ich habe meinen Fehler erkannt, mit
funktioniert es nun aber wirklich so wie es soll.
Nurfunktioniert erst recht nicht, da i dann nur noch gesendet wird, wenn man den Chat offen hat.
-
Am besten statt #IfWinActive, GTA:SA:MP einfach die Zeile #If !isInChat() in #If WinActive("GTA:SA:MP") && !isInChat()
Und bitte nicht #IfWinActive, GTA:SA:MP; das funktioniert nicht.Ihr könnt doch nicht einfach immer meinen Code ändern und mir dann sagen, dass er nicht mehr geht xD
Bei mir funktioniert der Code, der Code ist also nicht das Problem. Wenn ihr euch nicht genau an den Code haltet, kann ich da auch nichts für.
Also wenn ihr noch nicht genau meinen Code isoliert in einem Script ausprobiert habt, dann macht das bitte. Ich kann euch sonst nicht weiterhelfen.Wenn es trotzdem nicht funktioniert, dann alle Einstellungen checken und nohc
-
@LuiS.MacKenZie
Wenn du es genauso kopiert hast, wie ich es geschrieben habe, kann das nicht sein. -
Das macht absolut keinen Unterschied.
-
Bei der Anwendung Ahk2Exe. Wenn du statt SendChat wieder SendInput einsetzt, wird der Hotkey i vermutlich gehen. Aber anscheinend funktioniert die API nicht ordentlich. Daher das mal umstellen und als Admin ausführen.
-
An meinem Script liegt es nicht, bei mir funktioniert das problemlos. Schau mal, dass du die aktuelle AHK Version hast und in ANSI 32-Bit konvertierst.
-
Ich würde es so machen:
PHP
Alles anzeigen#IfWinActive, GTA:SA:MP #Include SAMP.ahk #UseHook #Persistent Gui, Show, w550 h350, hi SetTimer, AutoTeileF, 1000 global paketeinladen := true return GuiClose: ExitApp return #If !isInChat() i:: SendChat("/inventar") return AutoTeileF: if (paketeinladen && IsPlayerInRangeOfPoint2D(2348.1409, -2302.3579, 3.5)) { SendChat("/paketeinladen 5") paketeinladen := false } else if (paketeinladen && IsPlayerInRangeOfPoint2D(-1857.7402, -1618.9537, 3.5)) { SendChat("/paketentladen") paketeinladen := false } else if (!paketeinladen && !IsPlayerInRangeOfPoint2D(2348.1409, -2302.3579, 10) && !IsPlayerInRangeOfPoint2D(-1857.7402, -1618.9537, 10)) paketeinladen := true return