Autohotkey_L + SAMP-API für Anfänger

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,


    Zuerst braucht ihr Autohotkey_L, dies ist eine verbesserte Version von Autohotkey. Autohotkey_L könnt ihr euch auf dieser Seite downloaden: **Klick**, dort einfach auf Download klicken.
    Bei der Installation ist es wichtig das ihr auf "Costum Installation" geht:


    Dann auf ANSI 32-bit:


    Den Rest einfach so lassen wie es dort angekreuzt ist.


    Dies funktioniert mit der SAMP-API, die man auf **Klick** bekommt.
    Auf dieser Seite: www.samp-api.net/index.php/Downloads findet ihr immer die neuste Version der API, die ihr euch runterladen müsst.
    Die API.ahk & API.dll muss dabei im selben Ordner sein wie euer Script. Nun erstellt ihr euch ein neues Script:


    In die erste Zeile müsst ihr nun


    Code
    #include API.ahk


    schreiben, damit die API in das Script "geladen" bzw included wird.


    Da drunter schreibt ihr folgendes. (Dies dient dazu das euer Keybinder nicht aktiviert ist wenn ihr z.B. auf dem Desktop seid oder wenn der Chat offen ist)


    Nun kann es auch schon mit dem eigentlich Teilen los gehen, den Keybinds und Befehlen.
    Hier findet ihr mal ein Beispiel:

    Code
    1:: ; Dies ist die Keybindtaste.
    if(IsChatOpen() == 1 || IsDialogOpen() == 1) { 
       SendInput, {%A_ThisHotkey%}
       return
    } ; Bis hier hin ist eine if-Abfrage, die Abfragt ob ein Menü oder der Chat offen ist und wenn es so ist, das der dann die normale Taste in das Textfeld sendet. In diesem Beispiel wäre das die Taste 1.
    GetPlayerName(pName) ; Dies ist eine Funktion aus der SAMP-API. Diese ließt den Spielernamen aus und speichert in als Variable (pName).
    SendChat("/pickup") ; Die Funktion SendChat ist ebenfalls aus der SAMP-API, dadurch wird ein Befehl/Text direkt an den Chat gesendet.
    SendChat("Guten Tag, Sie sprechen mit " pName ",") ; Das Gleiche wie bei /pickup, Zusätzlich wird aber noch die Variable ausgeben via " pName "
    SendChat("Wie kann ich Ihnen behilflich sein?") ; Das Gleiche wie bei /pickup
    return ; Das Return beendet den Befehl



    Der Keybindquellcode ohne Erklärung:

    Code
    1::
    if(IsChatOpen() == 1 || IsDialogOpen() == 1) { 
       SendInput, {%A_ThisHotkey%}
       return
    }
    GetPlayerName(pName)
    SendChat("/pickup")
    SendChat("Guten Tag, Sie sprechen mit " pName ",")
    SendChat("Wie kann ich Ihnen behilflich sein?") 
    return


    Weitere Funktionen findet ihr hier: http://samp-api.net/index.php/Kategorie :Funktionen.


    Nun kommen wir zu einem Chatbefehl den ihr dann z.B. via "/pick" macht.
    Dabei ändert sich eig. nicht viel, außer das ihr das mit der if-Abfrage nicht mehr braucht.

    Code
    :?:/pick::
    Suspend Permit
    GetPlayerName(pName)
    SendChat("/pickup")
    SendChat("Guten Tag, Sie sprechen mit " pName ",")
    SendChat("Wie kann ich Ihnen behilflich sein?") 
    return


    - - - - - - - -: Hier sind nochmal Alle Links aufgelistet :- - - - - - - -
    http://l.autohotkey.net/
    http://www.samp-api.net/index.php/Downloads
    http://samp-api.net/index.php/Hauptseite
    http://samp-api.net/index.php/Kategorie


    - - - - -: EDIT :- - - - - -
    1.) Alle Links aufgelistet


    Ich hoffe es ist für viele verständlich und ich konnte helfen.

    Mit freundlichen Grüßen
    C0laMix

    Einmal editiert, zuletzt von C0lamix ()

  • Hallo nochmal :)


    Nun gibt es auch Keybinds um z.B. seine Waffen schnell zu verstauen (Dies funktioniert mit der SendChat-Funktion und mit Sendinput)
    (Funktioniert wenn der server ein Inventar system hat)



    Der Keybindquellcode ohne Erklärung:



    Mit freundlichen Grüßen
    C0laMix

  • Thema ist zwar schon älter, aber wenn ich diesen Befehl ins Script schreibe


    :?:/ab::Suspend PermitSendChat("/pickup")SendChat("Hallo " GetPlayerName())return


    Kann ich Ingame nicht den /ab (leertaste) Befehl benutzen, funktioniert einfach nichts und passiert auch nichts.
    Hat irgendwer eine Idee ;-)? (kann es an der SA:MP Version liegen?)




    lg

  • Beitrag von Janes ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Code
    :?:/ab::
    Suspend Permit
    SendChat("/pickup")
    SendChat("Hallo " . GetPlayerName())
    return

    Es kann an vielen Dingen liegen. Funktioniert nur '/ab' nicht, oder dein gesamtes Script.
    Zudem ergibt dein '/ab' keinen Sinn. Denn dein 'GetPlayerName()' wird dir nicht den Namen des Anrufers ausgeben,
    lediglich deinen eigenen Namen.


    Außerdem lege ich dir ans Herz, wie Janes bereits geschrieben hatte, dass du auf die Syntax ordentlich achtest.
    Ich habe es noch nie ausprobiert, aber ich kann mir gut vorstellen, dass alles in eine Zeile zu werfen, nicht funktionieren wird.

    Einmal editiert, zuletzt von Jumpy Jr. ()

  • Code
    :?:/ab::
    Suspend Permit
    SendChat("/pickup")
    SendChat("Hallo " . GetPlayerName())
    return

    Es kann an vielen Dingen liegen. Funktioniert nur '/ab' nicht, oder dein gesamtes Script.
    Zudem ergibt dein '/ab' keinen Sinn. Denn dein 'GetPlayerName()' wird dir nicht den Namen des Anrufers ausgeben,
    lediglich deinen eigenen Namen.


    Außerdem lege ich dir ans Herz, wie Janes bereits geschrieben hatte, dass du auf die Syntax ordentlich achtest.
    Ich habe es noch nie ausprobiert, aber ich kann mir gut vorstellen, dass alles in eine Zeile zu werfen, nicht funktionieren wird.

    Nur /ab funktioniert nicht und ich hab das nur übergangsweise so rein geschrieben um die Funktion zu testen, der Anrufbeantworter sieht anders aus, soll auch nicht den Anrufer auslesen(Text würde natürlich noch verändert werden ;-))


    Alles klar dann hol ich mir mal den R1 Client, thx.
    Mit diesem "http://files.sa-mp.com/sa-mp-0.3.DL-R1-install.exe" Client hier kann ich leider nicht auf den Server connecten wo ich den Keybinder benutzen wollte, hoffentlich ist es überhaupt der richtige b.b finde aber keinen anderen tbh.

    -

    Einmal editiert, zuletzt von Yung_Hurn () aus folgendem Grund: A>

  • Code
    :?:/ab::
    Suspend Permit
    SendChat("/pickup")
    SendChat("Hallo " . GetPlayerName())
    return

    Du hast hier einige Fehler.
    Erstens kannst/darfst du nach dem /ab keine "leertaste" drücken, da der Keybinder dann nach dem /ab ne Leertaste ausließt der so ja im Befehl nicht existiert.


    Zweitens kann dein Code nicht stimmen.

    • :?:/ab::
    • Suspend Permit
    • SendChat("/pickup")
    • SendChat("Hallo " . "GetPlayerName()" ")
    • return

    Du hast beim GetPlayerName die " vergessen.
    Dadurch würd er deinen Namen net auslesen.


    Gib mal im Chat /ab ein ohne eine Leertaste zu drücken :)

  • Ohne Leertaste bei /ab also danach oder sonst was passiert einfach nichts leider, ich habs jetzt erstmal über Hotkeys gelöst aber würd es trotzdem gern als Keybinder Command gern drin haben.

  • Kriegst du denn eine Meldung vom Server aus?


    Entfern mal das "Suspend Permit"


    Wenn nicht versuch mal diesen Code:


    :?:/ab::
    Sleep 10
    SendChat("/pickup")
    Sleep 50
    SendChat("Hallo, mein Name lautet "GetPlayerName()" ")
    returb

  • Ich sehe hier keinen Fehler. Es kann lediglich sein, dass er eine API-Version verwendet, die nicht oder nur teilweise mit der neuesten SA:MP-Version funktioniert.
    Die Anführungszeichen sind absolut nicht falsch gesetzt. Deine Syntax ist die falsche Syntax, denn du hast da nun ein " zu viel. Und das mit der Leertaste ist auch
    der größte Schwachsinn, du kannst Enter oder Leertaste drücken, das ist komplett dir überlassen.


    //Edit:
    Hier einmal eine API für die R2, solltest du die noch nicht verwenden:
    https://gist.github.com/Ashkan-N/54a5f3c8b3a75fff8b0d79579e48a59a

    Einmal editiert, zuletzt von Jumpy Jr. ()