IsPlayerInRange... Bug

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
  • Hey, bei mir ist es so das man Arresten kann ,egal wo der Spieler ist.


    Ich finde den fehler aber nicht :3



    ocmd:arrest(playerid,params[])
    {
    if(gTeam[playerid] == TEAM_COPS)
    {
    new pID;
    if(IsPlayerConnected(pID))
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,ROT, "Benutzung: /arrest [ID]");
    {
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(pID, pX, pY, pZ);
    if(IsPlayerInRangeOfPoint(pID,5.0, pX, pY, pZ))
    {
    if(GetPlayerWantedLevel(pID) >=5)
    {
    if(gTeam[pID] == TEAM_ZIVI)
    {
    if(!IsPlayerInAnyVehicle(pID))
    {
    new strg[250];
    new arname[MAX_PLAYER_NAME];
    new copname[MAX_PLAYER_NAME];
    GetPlayerName(pID, arname,sizeof(arname));
    GetPlayerName(playerid,copname, sizeof(copname));
    format(strg, sizeof(strg), "Knast-Info: %s wurde von Officer %s Eingesperrt!", arname,copname);
    SetPlayerInterior(pID, 3);
    SetPlayerPos(pID, 194.0580,175.4876,1003.0234);
    SendClientMessageToAll(ROT, strg);
    SendClientMessage(pID, ROT, "Ein Cop hat dich verhaftet und du wurdest eingesperrt! (( 30 Sekunden ))");
    GivePlayerMoney(playerid, 5000);
    timerkill = SetTimerEx("Knast", 30000, false,"i", pID );
    ResetPlayerWeapons(pID);
    SetPlayerWantedLevel(pID, 0);
    SetPlayerColor(pID, WEISS);
    knasted[pID] = 1;
    cuffed[pID] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid, ROT, "Der Spieler ist in einem Fahrzeug!");
    return 1;
    }

    }
    else
    {
    SendClientMessage(playerid, ROT, "Der Spieler ist ein Cop!");
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Der Spieler hat zu wenig Wanteds! Stelle ihm ein Ticket mit /ticket aus!");
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Spieler ist nicht in der Nähe!");
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Spieler ist nicht Connected!");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Du bist kein Cop!");
    return 1;
    }
    return 1;
    }


  • Die Anordnung würde ich aber kleiner machen Zeilen sparen undso


    Mach


    GetPlayerPos(pID, pX, pY, pZ);
    zu
    GetPlayerPos(playerid, pX, pY, pZ);


    bzw:


    if(IsPlayerInRangeOfPoint(pID,5.0, pX, pY, pZ))


    zu


    if(IsPlayerInRangeOfPoint(playerid,5.0, pX, pY, pZ))


    Bin mir jetzt unsciher


  • Die Abfrage IsPlayerConnected kommt übrigens zu früh. Da pID bei Deklarierung der Variable den Wert 0 hat, wird geprüft ob der Spieler mit der ID 0 verbunden ist.Erst danach wird ausgelesen,was der Spieler hinter /arrest eingegeben hat.
    Heißt also,es wird nie geprüft ob der Name / ID die wird eingegeben haben verbunden ist, sondern stehts geprüft ob ID 0 verbunden ist.
    Die IsPlayerConnected Abfrage solltest du nach der Nutzung von sscanf einfügen.


    Das wäre jetzt ein "typsischer ID 0 Bug".