[AHK|API] Chat auslesen - Wo ist der Fehler?

  • Hallo Community,
    ich möchte bei einer Zeile den Namen, die Handynummer oder die ID eines Spielers auslesen können. Ich versuche das jetzt schon seit einigen Stunden, aber es will einfach nicht funktionieren.


    So ist der Aufbau der Zeile:
    SMS: [Hier steht die Nachricht] | von: [Hier steht der Name] (Handy: [Hier steht die Handynummer]|ID:[Hier steht die ID])


    Zum Beispiel:
    SMS: Hallo Kaiko | von: Gabriel (Handy: 50|ID:24)
    (Die SMS-Chat-Farbe ist gelb!)


    Mein Code:

    Code
    Nachricht:
    GetChatLine(0, Line)
    if(RegExMatch(Line, "SMS\: (.*) \| von\: (.*) \(Handy\: (.*)\|ID\:(.*))" ,player)) ; Chat auslesen
    {
    	SendChat("/c Ich habe soeben eine SMS von " player2 " (ID: player4) erhalten.")
    }
    return


    PS: Der Timer "Nachricht" ist so definiert: SetTimer Nachricht, 50



    Wisst ihr wo mein Fehler liegt?
    Ich bin dankbar für jede Antwort c:

    Einmal editiert, zuletzt von Bookai () aus folgendem Grund: Überschrift angepasst

  • 2::
    Loop, read, %Document%\chatlog.txt
    {
    ZeilenZahl:=A_Index
    }
    FileReadLine, OutputVar, %Document%\chatlog.txt, ZeilenZahl
    SString = SMS:
    IfInString,OutputVar,%SString%
    {
    Needle = ID:
    Needle1 = )
    StringGetPos, pos, OutputVar, %Needle%
    MsgBox, %OutputVar%
    pos += 3
    StringTrimLeft, OutputVar, OutputVar, %pos%
    MsgBox, %OutputVar%
    StringGetPos, pos, OutputVar, %Needle1%
    StringLeft, OutputVar, OutputVar, %pos%
    MsgBox, %OutputVar%
    }
    return


    Damit hätteste die ID und könntest mit der API den namen herausfinden wenns notwendig :)

  • Ich finde allgemein etwas einfacher mit TrimLeft oder StringLeft zu arbeiten und mehr zeilen ist nicht = langsamer das sind millionstel von millisec von denne du nichts merkst


    um an die NR zu kommen, musst du ledeglich


    Needle = ID:
    Needle1 = )


    mit


    Needle = dy:
    Needle1 = |


    ersetzen!



  • Ahh, jetzt kappier ich das.
    Vielen Dank Gummibaer!



    Kennt denn jemand die Variante mit GetChatLine() und RegExMatch() ?


    Hier nochmal wie die SMS aussieht:
    SMS: Hallo Kaiko | von: Gabriel (Handy: 50|ID:24)


    Irgendwie muss das doch bei RegExMatch(A_LoopReadLine, SMS\: (.*) \| von\: (.*) \(Handy\: (.*)\|ID\:(.*)))
    heißen?

    Einmal editiert, zuletzt von Bookai () aus folgendem Grund: Andere Frage noch hinzugefügt

  • Hallo.


    Ich würde dir empfehlen, dich aud RPG-City umzuschauen, da dort ein Thread ist, der 62 Seiten beträgt.


    Such einfach nach :Hilfe Autohotkey rpg-city



    Da sollte etwas nützliches dabei sein -vor allem auf Seite 15.




    ---


    Ich kenne mich zwar nicht gut aus, jedoch muss vor einem Doppelpunkt kein Backslash hin oder irre ich mich? :)



    -iEnerqie

  • Kann man sowas auch mit: RegExMatch machen?

    Ja kannst Du und ist auch klüger. Was "Gummibaer" hier von sich gibt ist totaler Blödsinn. So ein RegExMatch machst Du in einer Zeile und gut ist. Wenn Du mal was komplizierteres machst, dann bist Du froh, wenn Du RegEx kannst. Vergiss das mit diesem TrimLeft und TrimRight...



  • Code
    if(wort = 1)			{                                SendChat("/r >>> Das Wort lautet: wneenRang <<<")				SetTimer, Auslosung_Rennwagen, 50				Auslosung_Rennwagen:				GetChatLine(0, chat)				if(Instr(chat, "SMS: Rennwagen"))				{				SendChat("/r STOP!")				Sleep 1000				Needle = von:				Needle1 = (				StringGetPos, pos, chat, %Needle%				pos += 4				StringTrimLeft, chat, chat, %pos%				StringGetPos, pos, chat, %Needle1%				StringLeft, chat, chat, %pos%				SendInput t/r Der Gewinner ist:%chat%{enter}				SetTimer, Auslosung_Rennwagen, Off				}				return			}			else if(wort = 2)			{				SendChat("/r >>> Das Wort lautet: auKlsthl <<<")				SetTimer, Auslosung_Kuhstall, 1				Auslosung_Kuhstall:				GetChatLine(0, chat)				{					SendChat("/r STOP!")					Sleep 1000					Loop, read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt					{						If(InStr(chat, "SMS: Kuhstall"))						{						RegExMatch(chat, "SMS\: Kuhstall \| von\: (.*) \(Handy\: (.*)\|ID\:(.*)\)", sms)						}					}				SendChat("/r Der Gewinner ist: " sms1)				SetTimer, Auslosung_Kuhstall, Off				}				return



    Fehlermeldung: Line Text: GetChatLine(0, chat) Error: Duplicate function definition. The Program will exit


    (Wollte nur mal die zwei Varianten mit "TrimLeft|TrimRight|etc. und RegExMatch()" ausprobieren)

  • Zitat von Slider

    Bei dem "wichtigem Teil" in Zeile 28. Was willst Du da bitte bezwecken? Du versuchst gerade eine Funktion zu definieren.


    Damit wollte ich eig. den Chat auslesen und diesen in die Variable "chat" laden, damit ich diese später aufrufen kann O.o


    Sollte ich die Zeile einfach weglassen?

    Einmal editiert, zuletzt von Bookai ()