GetClosestPlayer

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
  • Was ist daran falsch?
    Wenn ich als Polizist / bust eingebe werde ich gebustet


    dcmd_bust(playerid,params[]) {
    #pragma unused params
    if(IsPlayerPolizei(playerid)) {
    new
    cplayerid,
    Float:x,Float:y,Float:z;
    GetClosestPlayer(cplayerid);
    GetPlayerPos(cplayerid,x,y,z);
    if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,z)) {
    if(controll) {
    TogglePlayerControllable2(cplayerid,0);
    controll = false;
    }
    else {
    TogglePlayerControllable2(cplayerid,1);
    controll = true;
    }
    }
    }
    else SendClientMessage(playerid, COLOR_LIGHTBLUE, "/bust: Du bist kein Polizist");
    return 1;
    }

  • Das kommt aus der uf.inc (also müsste das ja eigentlich richtig sein):


    stock GetClosestPlayer(playerid) //By Slick (edited by Gabriel "Larcius" Cordes)
    {
    if(IsPlayerConnected(playerid) && IsPlayerConnected(0))
    {
    new closestplayer=0;
    new Float:closestdist=GetDistanceBetweenPlayers(playerid,0);
    for(new playerid2=0; playerid2<MAX_PLAYERS; playerid2++)
    {
    new Float:dist = GetDistanceBetweenPlayers(playerid,playerid2);
    if ((dist < closestdist))
    {
    closestdist = dist;
    closestplayer = playerid;
    }
    }
    return closestplayer;
    }
    return -1;
    }

  • probier ma:
    dcmd_bust(playerid,params[]) {
    #pragma unused params
    if(IsPlayerPolizei(playerid)) {
    new
    cplayerid,
    Float:x,Float:y,Float:z;
    GetClosestPlayer(playerid);
    GetPlayerPos(cplayerid,x,y,z);
    if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,z)) {
    if(controll) {
    TogglePlayerControllable2(cplayerid,0);
    controll = false;
    }
    else {
    TogglePlayerControllable2(cplayerid,1);
    controll = true;
    }
    }
    }
    else SendClientMessage(playerid, COLOR_LIGHTBLUE, "/bust: Du bist kein Polizist");
    return 1;
    }

  • Das liegt daran, dass die Funktion den Spieler selbst als den am nähesten Spieler ausgibt...


    Füg vor
    new Float:dist = GetDistanceBetweenPlayers(playerid,playerid2);
    folgendes ein:
    if(playerid == playerid2) continue;



    Und ändere
    new Float:closestdist=GetDistanceBetweenPlayers(playerid,0);
    in:
    new Float:closestdist=10000.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!

  • Man busted sich jetzt immer noch selbst
    Ich habe das jetzt so:
    dcmd_bust(playerid,params[]) {
    #pragma unused params
    if(IsPlayerPolizei(playerid)) {
    new
    cplayerid,
    Float:x,Float:y,Float:z;
    cplayerid=GetClosestPlayer(playerid);
    GetPlayerPos(cplayerid,x,y,z);
    if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,z)) {
    if(controll) {
    TogglePlayerControllable2(cplayerid,0);
    controll = false;
    }
    else {
    TogglePlayerControllable2(cplayerid,1);
    controll = true;
    }
    }
    }
    else SendClientMessage(playerid, COLOR_LIGHTBLUE, "/bust: Du bist kein Polizist");
    return 1;
    }


    und so:
    stock GetClosestPlayer(playerid) //By Slick (edited by Gabriel "Larcius" Cordes)
    {
    if(IsPlayerConnected(playerid))
    {
    new closestplayer=0;
    new Float:closestdist=10000.0;
    for(new playerid2=0; playerid2<MAX_PLAYERS; playerid2++)
    {
    if(playerid == playerid2) continue;
    new Float:dist = GetDistanceBetweenPlayers(playerid,playerid2);
    if ((dist < closestdist))
    {
    closestdist = dist;
    closestplayer = playerid;
    }
    }
    return closestplayer;
    }
    return -1;
    }


    Edit: Wo ist jetzt der Fehler, oder ist die Fkt. technisch nicht möglich?

    2 Mal editiert, zuletzt von Winnetou ()

  • stock GetNearestPlayer(playerid, Float:abstand)
    {
    new Float:pX, Float:pY, Float:pZ, Float:vX, Float:vZ, Float:vY;
    GetPlayerPos(playerid, pX, pY, pZ);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    GetPlayerPos(i, vX, vY, vZ);
    if(floatabs(pX-vX) < abstand && floatabs(pY-vY) < abstand && floatabs(pZ-vZ) < abstand && i != playerid)
    {
    return i;
    }
    }
    return 9999;
    }


    Nimm meine funktion^^ Wenn kein spieler in der nähe ist, wird 9999 zurückgegeben.


    Also musst du anstatt getclosestplayer GetNearestPlayer verwenden ;)


    MFG, Robdeflop®