ProxDetectorS

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
  • Hallo Leute was ist ProxDetectorS wie muss ich den definieren? hab ihn in den Befehl
    ocmd:hs(playerid,params[])
    {
    if(IsACop(playerid))
    {
    new pID;
    if(sscanf(params, "u", pID))
    {
    SendClientMessage(playerid,COLOR_ROT, "Benutzung: /hs [ID]");
    return 1;
    }
    if(ProxDetectorS(5.0,playerid,pID))
    {
    new str[128], Officer[MAX_PLAYER_NAME], Spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Officer, sizeof(Officer));
    GetPlayerName(pID, Spieler, sizeof(Spieler));
    format(str, sizeof(str), "Officer %s hat %s Handschellen angelegt", Officer, Spieler);
    SendClientMessageToAll(COLOR_HELLBLAU, str);
    SetPlayerSpecialAction(pID,24);
    SetPlayerAttachedObject(pID, 0, 19418, 6, -0.011000, 0.028000, -0.022000, -15.600012, -33.699977, -81.700035, 0.891999, 1.000000, 1.168000);
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Der Spieler ist nicht in deiner nähe!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Du bist kein Beamter");
    }
    return 1;
    }


  • ProxDetectorS findet die Position des Spielers raus und gibt die Position zurück an den "Befehl" wenn du innerhalb der 5 Meter zu diesem Spieler bist, werden Handschellen angelegt, wenn nicht, dann nicht^^
    ALso ist eig. nur eine Funktion um herraus zu finden wie weit weg der eine Spieler von dem anderen ist^^


    Aso und ein kleiner Fail...
    ich denke es ist nicht gewollt dass die Meldung "Officer XYZ hat YTX Handschellen angelegt" an alle Spieler gesendet werden soll...
    Würde da mit ProxDetector arbeiten.
    (Nicht ProxDetectorS sondern einfach nur ProxDetector)

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png


  • Willst du nicht lieber GetDistanceBetweenPlayers(playerid1,playerid2); benutzen?


    Das ist doch so bisschen umständlicher? :D




    //Stock:
    stock Float:GetDistanceBetweenPlayers(p1,p2){
    new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
    if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){
    return -1.00;
    }
    GetPlayerPos(p1,x1,y1,z1);
    GetPlayerPos(p2,x2,y2,z2);
    return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
    }


    //Benutzung:


    if(GetDistanceBetweenPlayers(playerid,pID) >= 5)return SendClientMessage(playerid,FARBE,"Der Spieler ist nicht in deiner Nähe!");


    ocmd:hs(playerid,params[])
    {
    if(IsACop(playerid))
    {
    new pID;
    if(sscanf(params, "u", pID))
    {
    SendClientMessage(playerid,COLOR_ROT, "Benutzung: /hs [ID]");
    return 1;
    }
    if(ProxDetectorS(5.0,playerid,pID))
    {
    new str[128], Officer[MAX_PLAYER_NAME], Spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Officer, sizeof(Officer));
    GetPlayerName(pID, Spieler, sizeof(Spieler));
    format(str, sizeof(str), "Officer %s hat %s Handschellen angelegt", Officer, Spieler);
    //SendClientMessageToAll(COLOR_HELLBLAU, str); << ich glaube auch nicht das das an alle Spieler gesendet werden soll, daher hier eine For-Schleife>>
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsACop(i))
    {
    SendClientMessage(i,FARBE,str);
    }
    }
    }
    SetPlayerSpecialAction(pID,24);
    SetPlayerAttachedObject(pID, 0, 19418, 6, -0.011000, 0.028000, -0.022000, -15.600012, -33.699977, -81.700035, 0.891999, 1.000000, 1.168000);
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Der Spieler ist nicht in deiner nähe!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Du bist kein Beamter");
    }
    return 1;
    }


    Ich habe den Wert so eingestellt das er ab 4 Meter Entfernung ihn nicht cufft!


    Achte darauf das es noch das = zeichen hinter dem > gibt!


    D.h. wenn du 10 Meter willst musst 11 eintragen! :)



    MfG
    Geronimo

  • Wie soll ich dann absenden das pID Handschellen von playerid aufgelegt wurden möchte das diese nachricht im Umkreis von 10 Meter gesendet wird?
    hab das so ocmd:hs(playerid,params[])
    {
    if(IsACop(playerid))
    {
    new pID;
    if(sscanf(params, "u", pID))
    {
    SendClientMessage(playerid,COLOR_ROT, "Benutzung: /hs [ID]");
    return 1;
    }
    if(GetDistanceBetweenPlayers(playerid,pID) >= 5)
    {
    new str[128], Officer[MAX_PLAYER_NAME], Spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Officer, sizeof(Officer));
    GetPlayerName(pID, Spieler, sizeof(Spieler));
    format(str, sizeof(str), "Officer %s hat %s Handschellen angelegt", Officer, Spieler);
    if(GetDistanceBetweenPlayers(playerid,pID) >= 5)return SendClientMessage(i,COLOR_HELLBLAU, str);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_ROT,str);
    }
    }
    }
    SetPlayerSpecialAction(pID,24);
    SetPlayerAttachedObject(pID, 0, 19418, 6, -0.011000, 0.028000, -0.022000, -15.600012, -33.699977, -81.700035, 0.891999, 1.000000, 1.168000);
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Der Spieler ist nicht in deiner Nähe!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Du bist kein Beamter");
    }
    return 1;
    }
    aber kommt fehler müsste ich nur noch i definieren?