Problem mit Roadblock Anzahlen

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 habe folgendes Problem:


    Ich bekomme nicht hin, das ein Cop auch 2 oder mehr Straßensperren errichten kann, habe GF. Er kann nur eine errichten.


    Codeauschnitt:


    if (PlayerInfo[playerid][pRoadblock] != 0) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur eine Straßensperre errichten, gib /rrb ein um eine vorhandene Sperre zu entfernen.");


    Falls ihr mehr Code braucht, einfach sagen...


    MfG. Cody09

  • Hab mir GF nie angesehen aber rein von der Logik her müsste es doch sowas wie folgendes sein:


    if (PlayerInfo[playerid][pRoadblock] > 3) // Z.B wenn man 4 Roadblocks erlauben möchte


    und wo auch immer roadblocks erstellt werden:


    PlayerInfo[playerid][pRoadblock]++;

    GameMode / Filterscript / Plugin Development via
    - PAWN / C/C++
    - Database (mySQL) & Filebased - Systems


    Webdevelopment / Interfaces Webapplications - SA:MP Server via
    - HTML & CSS
    - PHP, JavaScript, Ajax

  • ich zitiere hier einfach mal die Stelle rein:


    if(strcmp(cmdtext, "/roadblock", true)==0 || strcmp(cmdtext, "/rb", true)==0)
    {
    if (!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Cop!");
    if (PlayerInfo[playerid][pRank] < 2)
    {
    SendClientMessage(playerid, COLOR_GREY, "Du mußt mindestens Rang 2 haben um diesen Befehl nutzen zu können!");
    return 1;
    }
    if (PlayerInfo[playerid][pRoadblock] != 0) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur eine Straßensperre errichten, gib /rrb ein um eine vorhandene Sperre zu entfernen.");
    new Float:X, Float:Y, Float:Z, Float:A;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, A);
    PlayerInfo[playerid][pRoadblock] = CreateObject(981, X, Y, Z, 0.0, 0.0, A+180);
    SetPlayerPos(playerid, X, Y, Z+4);
    GameTextForPlayer(playerid, "~w~Strassensperre ~r~platziert", 5000, 5);
    SendClientMessage(playerid, COLOR_GREEN, "Starßensperre erfolgreich platziert, gib /rrb oder /roadunblock ein um sie zu entfernen.");
    //roadblocktimer = 1;
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "HQ: Officer %s hat eine Straßensperre platziert, auf der Karte ist sie als Checkpoint zu sehen.", sendername);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsACop(i))
    {
    SetPlayerCheckpoint(playerid, X, Y, Z-10, 1.0);
    SendClientMessage(i, TEAM_BLUE_COLOR, string);
    if (PlayerInfo[i][pRank] >= 5 && PlayerInfo[i][pMember] || PlayerInfo[i][pLeader] == 1)
    {
    SendClientMessage(i, COLOR_YELLOW, "Du kannst alle Sperren mit /rrball entfernen");
    }
    }
    }
    }
    return 1;
    }

  • Ah ja klar.


    Machst dirn mehrdimensionales Array aus [pRoadblock] je nachdem wieviele erstellt werden sollen. Dann fragst beim erstellen ab welche Zellen schon gefüllt sind, nimmst die nächste für die jeweilige ObjektID (außer es ist voll natürlich - dann weißts zurück) und fertig.

    GameMode / Filterscript / Plugin Development via
    - PAWN / C/C++
    - Database (mySQL) & Filebased - Systems


    Webdevelopment / Interfaces Webapplications - SA:MP Server via
    - HTML & CSS
    - PHP, JavaScript, Ajax

  • Um die Löschfunktion zu behalten:

    new Roadblockzähler[MAX_PLAYERS];
    PlayerInfo[playerid][pRoadblock][3] //Anzahl erlaubter roadblocks (jetzt 4)


    PlayerInfo[playerid][pRoadblock][Roadblockzähler[playerid]] = CreateObject(981, X, Y, Z, 0.0, 0.0, A+180);
    Roadblockzähler[playerid]++;


    Das musst du halt überall so machen ;)

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • so, hier bekomme ich jetzt 4 Errors:


    C:\Users\Max\Desktop\Serverg\gamemodes\gm.pwn(16458) : error 001: expected token: ")", but found "["
    C:\Users\Max\Desktop\Serverg\gamemodes\gm.pwn(16458) : error 029: invalid expression, assumed zero
    C:\Users\Max\Desktop\Serverg\gamemodes\gm.pwn(16458) : warning 215: expression has no effect
    C:\Users\Max\Desktop\Serverg\gamemodes\gm.pwn(16458) : error 001: expected token: ";", but found "]"
    C:\Users\Max\Desktop\Serverg\gamemodes\gm.pwn(16458) : fatal error 107: too many error messages on one line


    Es handelt sich um die Zeile:


    if (PlayerInfo[playerid][pRoadblock][3]) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur eine Straßensperre errichten, gib /rrb ein um eine vorhandene Sperre zu entfernen.");


    MfG. Cody09

  • hm, ich Poste jetzt mal den gesamten zusammenhang(alle Befehle, etc. die mit dem Zusammenhängen...ich schaff es nicht..)


    pRoadblock,


    Bein onplayerdiscontect:

    if (PlayerInfo[playerid][pRoadblock] != 0)
    {
    RemoveRoadblock(playerid);
    }


    /rb
    if(strcmp(cmdtext, "/roadblock", true)==0 || strcmp(cmdtext, "/rb", true)==0)
    {
    if (!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Cop!");
    if (PlayerInfo[playerid][pRank] < 2)
    {
    SendClientMessage(playerid, COLOR_GREY, "Du mußt mindestens Rang 2 haben um diesen Befehl nutzen zu können!");
    return 1;
    }
    if (PlayerInfo[playerid][pRoadblock] != 0) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur eine Straßensperre errichten, gib /rrb ein um eine vorhandene Sperre zu entfernen.");
    new Float:X, Float:Y, Float:Z, Float:A;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, A);
    PlayerInfo[playerid][pRoadblock] = CreateObject(981, X, Y, Z, 0.0, 0.0, A+180);
    SetPlayerPos(playerid, X, Y, Z+4);
    GameTextForPlayer(playerid, "~w~Strassensperre ~r~platziert", 5000, 5);
    SendClientMessage(playerid, COLOR_GREEN, "Starßensperre erfolgreich platziert, gib /rrb oder /roadunblock ein um sie zu entfernen.");
    //roadblocktimer = 1;
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "HQ: Officer %s hat eine Straßensperre platziert, auf der Karte ist sie als Checkpoint zu sehen.", sendername);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsACop(i))
    {
    SetPlayerCheckpoint(playerid, X, Y, Z-10, 1.0);
    SendClientMessage(i, TEAM_BLUE_COLOR, string);
    if (PlayerInfo[i][pRank] >= 5 && PlayerInfo[i][pMember] || PlayerInfo[i][pLeader] == 1)
    {
    SendClientMessage(i, COLOR_YELLOW, "Du kannst alle Sperren mit /rrball entfernen");
    }
    }
    }
    }
    return 1;
    }


    /rrb + /rrball


    if(strcmp(cmdtext, "/roadunblock", true)==0 || strcmp(cmdtext, "/rrb", true)==0)
    {
    if(!IsACop(playerid))
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Cop!");
    return 1;
    }
    if (PlayerInfo[playerid][pRank] < 2)
    {
    SendClientMessage(playerid, COLOR_GREY, "Du mußt mindestens Rang 2 haben um diesen Befehl nutzen zu können!");
    return 1;
    }
    if (PlayerInfo[playerid][pRoadblock] == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, "Du hast keine Straßensperre platziert!");
    return 1;
    }
    RemoveRoadblock(playerid);
    SendClientMessage(playerid, COLOR_GREEN, "Straßensperre erfolgreich entfernt.");
    return 1;
    }


    if(strcmp(cmdtext, "/roadunblockall", true)==0 || strcmp(cmdtext, "/rrball", true)==0)
    {
    if (PlayerInfo[playerid][pRank] >= 2 && PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pAdmin] > 1 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pMember] == 2)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pRoadblock] != 0)
    {
    RemoveRoadblock(i);
    }
    }
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "HQ: Durch die Anordnung von Officer %s wurden alle Starßensperren entfernt.", sendername);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pMember] == 1 || PlayerInfo[i][pLeader] == 1 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pMember] == 2)
    {
    SendClientMessage(i, TEAM_BLUE_COLOR, string);
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du mußt Rang 2 haben oder Polizeichef sein um alle Straßensperren entfernen zu können!");
    }
    return 1;
    }


    Public remove roadblock:


    public RemoveRoadblock(playerid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pMember] == 1 || PlayerInfo[i][pLeader] == 1)
    {
    DisablePlayerCheckpoint(i);
    }
    }
    }
    DestroyObject(PlayerInfo[playerid][pRoadblock]);
    PlayerInfo[playerid][pRoadblock] = 0;
    return 1;
    }


    Das ist wirklich wichtig, ich hänge grade nur an diesem Punkt beim Scripten fest