Einsperren

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


    Ich möchte, dass der Player in der Nähe des Cops sein muss, damit er eingesperrt werden kann. Wie kann ich die Koordinaten von der "id" auslesen ? So wie ich probiert habe, geht es nicht, da id eine Zahl ist und nicht alle Koordnaten ausgelesen werden können . Muss ich irgendwie die Koordinaten definieren und dann auslesen ?


    dcmd_einsperren(playerid, params[])
    {
    new id, price, time;
    if(sscanf(params, "uii", id, price, time)) SendClientMessage(playerid, COLOR_WHITE, "Verwendung: /einsperren [ID] [Preis] [Zeit]");
    else if(!GetPlayerFraktion(playerid, 2)) SendClientMessage(playerid, COLOR_GREY, "Nur für Polizisten");
    else if(PlayerInfo[playerid][pDuty] == 0) SendClientMessage(playerid, COLOR_GREY, "Du bist nicht im Dienst.");
    else if(id == INVALID_PLAYER_ID || id == playerid || IsPlayerNPC(id)) SendClientMessage(playerid, COLOR_GREY, "Spieler kann nicht eingesperrt werden.");
    else if(!IsPlayerInRangeOfPoint(playerid, 8.0, 268.0161, 77.9018, 1001.0391) && !IsPlayerInRangeOfPoint(playerid, 8.0, 1568.6473,-1694.1110,5.8906)) SendClientMessage(playerid, COLOR_GREY, "Du bist nicht beim Gefängnis.");
    else if(!IsPlayerInRangeOfPoint(playerid, 10.0, id)) SendClientMessage(playerid,COLOR_GREY, "Diese ID befindet sich nicht in deiner Nähe");
    else if(GetPlayerFraktion(id, 2) || GetPlayerFraktion(id, 3)) SendClientMessage(playerid, COLOR_GREY, "Du kannst keinen Polizisten/Bundespolizisten einsperren.");
    else if(price < 1 || price > 300001) SendClientMessage(playerid, COLOR_GREY, "Der Preis muss zwischen $1 und $300000 sein.");
    else if(time < 1 || time > 300) SendClientMessage(playerid, COLOR_GREY, "Die Knastzeit muss zwischen 1 und 300 Minuten liegen.");
    else
    {
    new Float:sX, Float:sY, Float:sZ;
    GetPlayerPos(id, sX, sY, sZ);
    if(IsPlayerInRangeOfPoint(id, 6.0, sX, sY, sZ))
    {
    if(PlayerInfo[id][pWanteds] > 0)
    {
    new str[256];
    ResetPlayerWeapons(id);
    JB_GivePlayerMoney(id, -price);
    SetPlayerInterior(id, 6);
    JB_SetPlayerPos(id, 265.5000, 77.8254, 1001.0391);
    PlayerInfo[playerid][pJPoints] += 1;
    PlayerInfo[id][pKnastzeit] = time * 60;
    PlayerInfo[id][pJailed] = 1;
    PlayerInfo[id][pKnast] += 1;
    PlayerInfo[id][pWanteds] = 0;
    format(str, sizeof(str), "Du wurdest für $%d und %d Minuten in den Knast gesperrt.",price,time);
    SendClientMessage(id, COLOR_RED, str);
    SendClientMessage(playerid, COLOR_GREEN, "Der Spieler wurde erfolgreich eingesperrt.");
    format(str, sizeof(str), "~r~K~w~nast...");
    GameTextForPlayer(id, str, 5000, 5);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler hat keine Wanteds.");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist nicht in deiner Nähe.");
    return 1;
    }
    }
    return 1;
    }


    MfG dUDALUS

  • new Float:sX, Float:sY, Float:sZ;
    GetPlayerPos(id, sX, sY, sZ);
    if(IsPlayerInRangeOfPoint(id, 6.0, sX, sY, sZ))

    Hier liest du zuerst die Koordinaten von id aus, und guckst dann nach, ob id in der Nähe dieser Koordinaten ist, das ist schon der ganze Fehler ;)
    Du musst also nur eines der id s durch playerid ersetzen, dann sollte es gehen

  • Hallo


    Geht noch etwas einfacher ;)


    else if(!IsPlayerInRangeOfPoint(id, 8.0, 268.0161, 77.9018, 1001.0391) && !IsPlayerInRangeOfPoint(id, 8.0, 1568.6473,-1694.1110,5.8906)) SendClientMessage(playerid, COLOR_GREY, "Die betreffende Person befindet sich nicht beim Gefängnis.");


    Einfach anstatt playeri id nehmen und voila es geht. Dein Weg bringt abe rmehr und ist eleganter.


    MfG dUDA