Funktion wird nur für einen Spieler ausgeführt

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
  • Folgende Funktion:

    public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
    {
    if((newkeys & KEY_FOOT_FIRE) == (KEY_FOOT_FIRE))
    {
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    x += (15 * floatsin(-a, degrees));
    y += (15 * floatcos(-a, degrees));


    GetPlayerPos(playerid, X, Y, Z);



    if(PlayerToPoint(15.0, playerid, X, Y, Z) && GetPlayerSkin(playerid) != 280 && GetPlayerSkin(playerid) != 281 && GetPlayerSkin(playerid) != 282 && GetPlayerSkin(playerid) != 283 && GetPlayerSkin(playerid) != 284 && GetPlayerSkin(playerid) != 285 && GetPlayerSkin(playerid) != 286 && GetPlayerSkin(playerid) != 287 && GetPlayerSkin(playerid) != 288)
    {
    SendClientMessage(playerid,0x000000,"Testnachricht");
    flashed[playerid] = 1;
    SetTimerEx("Flash",300,0,"p",playerid);
    SetTimerEx("Disableflash",25000,0,"f", playerid);
    ApplyAnimation(playerid,"PED","Drown",4.1,0,1,1,1,1);
    lookatx = -1000;
    lookaty = -1000;
    lookatz = -1000;
    return 1;
    }
    }
    return 0;
    }

    funktioniert nur bei dem Werfer....


    Soll heißen,wenn ich Zivilist bin und diese Funktion ausgelöst wird, wird nur mir die Textnachricht angezeigt, obwohl ja laut PlayerToPoint alle in 15 Meter Radius gewählt werden sollen...


    Vielleicht liegt das ja daran, dass die Funktion bei einer Aktion des Werfers (also der Person,die OnPlayerKeyStateChange auslöst) die ganze zeit nur seine Playerid über gibt ?!


    Kann mir das jemand erklären/umschreiben/Fehler erkennen und posten ?

  • Ich denke so müsste es gehen:



    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerToPoint(15.0, i, X, Y, Z) && GetPlayerSkin(i) != 280 && GetPlayerSkin(i) != 281 && GetPlayerSkin(i) != 282 && GetPlayerSkin(i) != 283 && GetPlayerSkin(i) != 284 && GetPlayerSkin(i) != 285 && GetPlayerSkin(i) != 286 && GetPlayerSkin(i) != 287 && GetPlayerSkin(i) != 288)
    {
    SendClientMessage(i,0x000000,"Testnachricht");
    flashed[i] = 1;
    SetTimerEx("Flash",300,0,"p",i);
    SetTimerEx("Disableflash",25000,0,"f", i);
    ApplyAnimation(i,"PED","Drown",4.1,0,1,1,1,1);
    lookatx = -1000;
    lookaty = -1000;
    lookatz = -1000;
    }
    }
    }

    ...

  • Habe es so verstanden das Spieler die sich im Radius 15 von X Y Z aufhalten die Nachricht Testnachricht bekommen sollen.
    Und wenn du sie an playerid sendest ist doch klar das es nur der Spieler bekommt.


    Wenn das nicht dein Problem war dann tuts mir echt leid.

    ...

  • SetTimerEx("Flash",300,0,"p",playerid);
    SetTimerEx("Disableflash",25000,0,"f", playerid);
    Playerid ist also eine Float oder ein "p"??
    Du kannst I=Integer oder D=Dezimalzahl benutzen:
    SetTimerEx("Flash",300,0,"i",playerid);
    SetTimerEx("Disableflash",25000,0,"i", playerid);
    Wie du es gemacht hast, gehts nur für ID 0.


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!