Commands durch Tastendruck ausführen

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
  • Wie genau sieht das aus? Sorry, kann mir nicht vorstellen wie das gehen soll :x
    if(strcmp(cmdtext, "/flip", true) == 0)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new currentveh;
    new Float:angle;
    currentveh = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(currentveh, angle);
    SetVehicleZAngle(currentveh, angle);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
    return 1;
    }


    Wie muss das da rein?

  • Als erstes "Pressed" definieren, damit wir abfragen können, ob der Spieler die Taste drückt:
    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))


    Dann im genannten Callback abfragen, welche Taste er drückt:
    if (PRESSED(KEY_FIRE))
    {
    }


    und zum Schluss noch in die Klammern die Funktionen und Abfragen des Commands rein:
    if(IsPlayerInAnyVehicle(playerid))
    {
    new currentveh;
    new Float:angle;
    currentveh = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(currentveh, angle);
    SetVehicleZAngle(currentveh, angle);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
    return 1;

  • Ist das so richtig? Bekomme SEHR viele Fehlermeldungen


    #include <a_samp>
    #include <Dini>
    #include <dudb>
    #include <ocmd>
    #include <Sscanf>
    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (PRESSED(KEY_FIRE))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new currentveh;
    new Float:angle;
    currentveh = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(currentveh, angle);
    SetVehicleZAngle(currentveh, angle);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
    }
    return 1;

  • Schöhnheitskorrektur meinerseits:



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new currentveh;
    new Float:angle;
    currentveh = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(currentveh, angle);
    SetVehicleZAngle(currentveh, angle);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
    }
    }
    return 1;
    }


    Der obere Teil müsste passen. Ach ja, das ist jetzt nicht die Taste L sondern die Feuertaste

  • public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    if (PRESSED(KEY_FIRE))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new currentveh;
    new Float:angle;
    currentveh = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(currentveh, angle);
    SetVehicleZAngle(currentveh, angle);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
    }
    return 1;
    }
    return 0;


    C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(356) : warning 209: function "OnPlayerKeyStateChange" should return a value
    C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(356) : error 010: invalid function or declaration


    Was ist da falsch?
    Und wie kann ich das Kommando nun mit L ausführen?
    Danke für deine Hilfe :))
    Crossline

  • So klappt soweit :D Jetzt wollte ichs aber austauschen mit dem Reperaturkommando. Da kommt aber ein Fehler auf:


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (PRESSED(KEY_YES))
    {
    if(strcmp(cmdtext, "/rv", true) == 0)
    {
    new vid = GetPlayerVehicleID(playerid);
    RepairVehicle(vid);
    return 1;
    }
    }
    return 0;
    }
    C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(336) : error 017: undefined symbol "cmdtext"

  • public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_YES)
    {
    OnPlayerKeyStateChange(playerid,"/rv");
    }
    return 1;
    }


    C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(5 [geändert]) : error 035: argument type mismatch (argument 2)