Beiträge von Madd92

    Ist an sich schon richtig, aber RequestSpawn macht erstmal nix du musst dann 0x3AD0 ebenfalls noch aufrufen.
    Edit: true, false ist aber falsch, der Stack muss nicht gecleant werden denn es ist ein Thiscall. Also false, true

    stLocalPlayer ist eine Struktur in der SAMP.dll. Dazu gibt es in der UDF auch schon Funktionen, die diese Pointer nutzen. In den globalen Variablen wirst du auch die Offsets dazu finden, oder eben im s0beit Source:

    In der UDF wird es etwas umständlich so gemacht, funktioniert aber problemlos:


    Wenn du dich wirklich mit dem Thema beschäftigen willst, solltest du Kenntnis haben von:
    1. C/C++
    2. Calling Conventions
    3. den Memory und callWithParams Funktion der UDF, oder deinen eigenen Memory Funktionen
    4. grundlegendes Assemblerverständnis


    Also die Funktion als Beispiel, einfach nur aus dem s0beit Source in AHK und die UDF Funktion zu integrieren wäre einfach:

    C
    void playerSpawn(void)
    {
    	if (g_SAMP == NULL)
    		return;
    
    
    	((void(__thiscall *) (void *_this)) (g_dwSAMP_Addr + SAMP_FUNC_REQUEST_SPAWN)) (g_Players->pLocalPlayer);
    	((void(__thiscall *) (void *_this)) (g_dwSAMP_Addr + SAMP_FUNC_SPAWN)) (g_Players->pLocalPlayer);
    }

    Es gibt zwei Funktionsaufrufe, die komplett identisch sind, bis auf die aufgerufene Funktion natürlich. Du hast also nur einen Parameter, in diesem Fall den Local-Player-Pointer.
    Wenn du dir die callWithParams Funktion anschaust, solltest du schnell erkennen, welche Parameter wie zu übergeben sind.
    Für so eine einfache Funktion ist es wie gesagt, mit den in der UDF enthalten Memory Funktionen ziemlich einfach. Aber je mehr du ausprobieren willst, desto wichtiger ist es, dass du dich informierst über die Zusammenhänge.

    Dann probier mal bitte dieses Script, am besten auf einem Testserver auf dem du nicht gekickt wirst:


    Die SendChat-Funktion in der SAMP.ahk logischerweise ausklammern.

    Also bei mir funktioniert's. Pack mal in den Timer ein AddChatMessage rein, um zu sehen, ob er funktioniert (bzw. je nach Editor eine Nachricht in die Debug Konsole). Gleiches für commandCounter in der SendChat Funktion.

    Zum Beispiel so:



    Allerdings bleibt die Frage, wie genau das Anti-Spam System vom Server eingestellt ist. Denn mit dem Code oben könnte es passieren, dass du 6 Commands schickst, dann praktisch sofort danach der Timer ausgeführt wird und die Variable zurücksetzt und dann wieder 6 Commands verschickt werden. Daher dann eher so:



    Edit: Wenn counter gleich 0 nicht 1.

    Ich gehe mal davon aus, dass du die UDF nutzt. Wenn du das nur für den Keybinder selber haben möchtest, kannst du entweder vor jedes SendChat eine Abfrage schreiben, über eine Counter-Variable oder direkt die SendChat Funktion ändern und dort die Abfrage einbauen. Die Variable wird mit jedem Mal hochgezählt, wenn ein Command ausgeführt wird und ein 1000ms Timer sorgt dafür, dass die Variable resettet wird. Wenn du alle Commands mitzählen willst, auch die die du händisch eingibst, musst du ein System schreiben, welches die Commands erst abfängt, bevor sie abgeschickt werden.


    Edit: Wenn ich so darüber nachdenke, glaube ich nicht, dass es möglich ist, per Hand 6 Commands die Sekunde zu schicken ^^

    Zum zweiten: "Wenn einer der Elemente zu Beginn vorab ausgewählt sein soll, müssen zwei senkrechte Striche nach diesem Element erfolgen (z. B. Rot|Grün||Blau)." Bzw. "GuiControl, Choose, SteuerelementID, N".


    Dein Overlayproblem kann ich selber nicht nachvollziehen, bei mir funktioniert das Script ohne Probleme. Allerdings könnte es an den Mods liegen, die du installiert hast.

    Ich würde es so machen:


    Ich rate dir, dich in AHK und Funktionen, die du benutzen willst, einfach mal einzulesen, dann kannst du einfache Fehler vermeiden :)
    http://ahkde.github.io/docs/AutoHotkey.htm