[AHK] Problem mit AddChatMessage

  • Also jetzt sieht es so aus :



    Code
    4:: ;Find [id]
    if(IsChatOpen()))
    return
    AddChatMessage(0xFF0000, "Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    return

    Dann öffnet sich ganz normal der Chat und da steht /find bzw. wo ich dann die ID eingeben kann.
    Jedoch wenn ich 1 drücke , geht der Chat einfach aus... Will ja das die anderen Keybinds während ich den benutze nicht eingreifen ._.

  • Also jetzt sieht es so aus :



    Code
    4:: ;Find [id]
    if(IsChatOpen()))
    return
    AddChatMessage(0xFF0000, "Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    return

    Dann öffnet sich ganz normal der Chat und da steht /find bzw. wo ich dann die ID eingeben kann.
    Jedoch wenn ich 1 drücke , geht der Chat einfach aus... Will ja das die anderen Keybinds während ich den benutze nicht eingreifen ._.

    Wenn der Code von der Taste 1 immer noch dieser ist:


    Code
    1:: ;Motor starten
    SendInput t/motor {enter}
    return

    dann ist es auch logisch, warum sich der Chat schließt.
    Du musst die IsChatOpen()-Abfrage bei jedem Hotkey machen.



    MfG

  • Ok habs jetzt gemacht aber wenn ich jetzt ingame bei /find die ID z.B 1 eingeben will geht das nicht, weil auf der 1 ein Keybind festgelegt ist...
    Sprich da wird garkeine 1 eingetippt weil der Chat ja opened ist und es einen return macht -.-

  • Ok habs jetzt gemacht aber wenn ich jetzt ingame bei /find die ID z.B 1 eingeben will geht das nicht, weil auf der 1 ein Keybind festgelegt ist...
    Sprich da wird garkeine 1 eingetippt weil der Chat ja opened ist und es einen return macht -.-

    Müsstest dann per SendInput die Taste wieder senden.

  • Verstehe ich nicht xD



    gehe dir wahrscheinlich aufn sack aber sorry , bin halt noch anfänger..

    Du musst einfach die Hotkey-Taste manuell senden, weil Autohotkey die Taste "überschreibt".
    Mit SendInput hast du doch auch schon gearbeitet, zumindest sind diese Funktionen in deinem Script verwendet worden.
    Einfach zusätzlich, wenn die IsChatOpen-Abfrage TRUE ist, vor das Return die Taste erneut mit SendInput senden.



    MfG

  • Check ich nicht...



    Also wie muss der Code dann sein? Kannst du den bearbeiten und den Code dann posten?
    Also /find funktion ist ja so :


    Code
    4:: ;Find [id]
    if(IsChatOpen())
    AddChatMessage("Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    return


    Und noch ein Problem, ich will ein Backup-System erstellen , sprich durch den /f


    Ich habe es so gescriptett :
    Jedoch kommt diese Errormessage :



    Code
    Error : Too Many parameters passed to function.
    Specifcally : GetPlayerHealth(Health)
    
    
                                  Line#
    ->>>                    651: GetPlayerHealth(Health)
    
    
    The programm will exit
    Code
    F5:: ;Backup im /f
    if(IsChatOpen())
    return
    GetPlayerHealth(Health)
    GetZoneName(Zone)
    SendInput t//f BACKUP SOFORT - BACKUP --- Ich habe noch Health HP -- Ich BEFINDE mich in Zone - {enter}
    return

    2 Mal editiert, zuletzt von Majoe ()

  • Mit diesem Code:

    Code
    4:: ;Find [id]
    if(IsChatOpen())
    AddChatMessage("Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    return


    würdest du abfragen, ob der Chat geöffnet wird. Das heißt er führt diese Taste nur aus, wenn der Chat geöffnet ist. Richtig wäre demnach:

    Code
    4:: ;Find [id]
    if(!IsChatOpen()) {
    AddChatMessage("Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    }
    return


    Und das Problem mit dem BackUp solltest du so lösen können:


    Code
    F5:: ;Backup im /f
    if(IsChatOpen())
    return
    Health := GetPlayerHealth()
    Zone := GetZoneName()
    SendChat("/f BACKUP SOFORT - BACKUP --- Ich habe noch " Health " HP -- Ich befinde mich in Zone " Zone " -")
    return
  • Die theoretische Lösung für das "Der Hotkey wird nicht gesendet, wenn der Chat offen ist"-Problem ist eigentlich relativ simpel.
    Man sendet einfach die gedrückte Taste, wenn der Chat offen ist und fertig.
    Wenn man das macht, denkt Autohotkey aber, dass die Taste erneut gedrückt worden ist und so wird eine Endlosschleife entstehen..
    Sieht bei mir so aus:

    Code
    4::
    if(IsChatOpen())
    {
    	SendInput {%A_ThisHotkey%}
    	return
    }
    addchatmessage("test")
    return

    Bisher habe ich keine Lösung für das Problem gefunden.



    Bei deinem anderen Fehler kann ich dir aber helfen.
    Wie der Fehler selbst schon aussagt, werden zu viele Parameter an die Funktion gesendet.
    Wenn eine Funktion z.B. so aussieht:

    Code
    SendMessageToChat(string, color){
    	CoolFunction(color, string)
    }

    Werden zum Aufruf der Funktion Parameter verlangt, die durch ein Kommata getrennt sind.
    Die Funktion, die du aufrufst, verlangt keinen Parameter:

    Code
    GetPlayerHealth()
    {
    	global GetPlayerHealth_func
    	return DllCall(GetPlayerHealth_func)
    }

    Bei der Funktion ist wichtig, wie du den Wert erhälst. Bei einigen API's ist es so, dass man eine Variable in die Funktion einsetzen muss, die dann die von der Funktion ausgegebene Variable übergibt.


    Bei der SAMP-API ist es aber so, dass die Lebenspunkte dort "wiedergegeben" werden, wo du die Funktion aufrufst.
    So werden die Lebenspunkte auch direkt in den Chat geschrieben, wenn du die Funktion so einsetzt:

    Code
    SendChat("Meine HP: " GetPlayerHealth())


    MfG

    2 Mal editiert, zuletzt von dewey () aus folgendem Grund: zu viele (nicht von mir gemachte) Absätze

  • Mit diesem Code:

    Code
    4:: ;Find [id]
    if(IsChatOpen())
    AddChatMessage("Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    return


    würdest du abfragen, ob der Chat geöffnet wird. Das heißt er führt diese Taste nur aus, wenn der Chat geöffnet ist. Richtig wäre demnach:

    Code
    4:: ;Find [id]
    if(!IsChatOpen()) {
    AddChatMessage("Hitman : Bitte die Spieler-ID eintragen und bestätigen.")
    SendInput t/find{space}
    }
    return


    Und das Problem mit dem BackUp solltest du so lösen können:


    Code
    F5:: ;Backup im /f
    if(IsChatOpen())
    return
    Health := GetPlayerHealth()
    Zone := GetZoneName()
    SendChat("/f BACKUP SOFORT - BACKUP --- Ich habe noch " Health " HP -- Ich befinde mich in Zone " Zone " -")
    return

    Das mit dem Backup geht immernoch nicht... Sagt wieder Too few parameteres passed to funciton..


    specifically getzonename() ._.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das mit dem Backup geht immernoch nicht... Sagt wieder Too few parameteres passed to funciton..
    specifically getzonename() ._.


    Guck dir mal an was ich geschrieben habe.
    Wenn du das nicht verstehst, solltest du dich mehr mit den Basics von AHK auseinandersetzen ;).



    MfG

  • Ehm, ich verstehe es schon teilweise, aber nicht wie ich es schreiben soll.


    Hab noch ne Frage :




    • Code
      4::
      if(IsChatOpen())
      {
      SendInput {%A_ThisHotkey%}
      return
      }
      addchatmessage("test")
      return


    Wenn ich das mache, ist ja logisch dass die 1,2,3,4,5,6,7,8,9,0 Hotkeys schon besetzt sind.


    Wie kann ich machen dass ich mehrere auf eine Taste benutzen kann?

    Einmal editiert, zuletzt von Majoe ()

  • Ich habe doch jetzt zum Beispiel auf 1 Motor...



    Und du sagtest ja diesen Code dann zu jeder Zahl :




    Jedoch geht das ja nicht weil ich dann z.B auf der Taste 1 schon Motor hab ( multiple Hotkeys error )


  • Les dir doch bitte mal das durch was ich geschrieben habe!
    Ich habe nie gesagt, dass man den Code zu jeder Taste hinzufügen soll!
    Falls es zu unübersichtlich war, da mehr Absätze in meinem Text waren, als eigentlich von mir gemacht, habe ich es jetzt noch mal überarbeitet und richtig formatiert.
    Aber es ist doch vollkommen logisch, dass sowas nicht funktionieren kann, oder?:

    Code
    1::
    4::
    if(IsChatOpen())
    {
    SendInput {%A_ThisHotkey%}
    return
    }
    addchatmessage("test")
    return


    Zitat von mir:

    Bisher habe ich keine Lösung für das Problem gefunden.


    MfG

  • Also bei komplizierteren Systemen verstehe ich das noch, aber bei so ner Popelfunktion kannst du das auch selber machen.
    Habe ja keine Ahnung was du die ganze Zeit von mir willst, drückst dich halt nicht genau aus.
    Aber ich werde dir definitiv nicht weiterhelfen, wenn das alles nur auf Copy & Paste hinausläuft!



    MfG

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen