Rob System Fehler

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,
    Ich bin grade dabei ein Dynamisches Robsystem zu erstellen,
    bei einem Befehl scheint aber was nicht zu funktionieren.
    Sobald ich den Befehl eingebe, reagiert der Server nicht mehr.


    ocmd:robstore(playerid, params[])
    {
    if(gMode[playerid] == MODE_CNR)
    {
    cLog(playerid, "/robstore");
    if(gTeam[playerid] == TEAM_ZIVI)
    {
    if(Robbing[playerid] == 0)
    {
    /*new copson;
    for( new i = 0; i < MAX_PLAYERS; i++)
    {
    if(gTeam[playerid] == TEAM_COPS)
    {
    copson++;
    }
    }
    if(copson < 0)
    {*/
    if(PlayerData[playerid][pHouseID] != -1)
    {
    for(new i; i < MaxRobs; i++)
    if(IsPlayerInRangeOfPoint(playerid, 30, Rob[i][PosXInt], Rob[i][PosYInt], Rob[i][PosZInt]) && GetPlayerVirtualWorld(playerid) == Rob[i][HouseVW] && GetPlayerInterior(playerid) == Rob[i][HouseInt])
    {
    if(Rob[i][InRob] == 0)
    {
    Rob[i][InRob] = 1;
    SetPlayerWantedLevel(playerid, GetPlayerWantedLevel(playerid) +4);
    new string[250], name[50];
    SetTimerEx("robtimer", 60000, false, "i", playerid);
    new str[250];
    format(str, sizeof(str),"[News] Es wurde ein überfall im %s gemeldet!", Rob[i][RobName]);
    SendCNR(GELB, str);
    Robbing[playerid] = 1;

    for(new cops = 0; cops < GetMaxPlayers(); i++)
    if(gTeam[cops] == TEAM_COPS)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string),"[Zentrale] Es wurde ein Überfall gemeldet! Code 3 an alle einheiten! 10-20 %s | Verdächtige Person: %s", Rob[i][RobName], name);
    SendClientMessage(cops,HELLBLAU, string);
    cLog(playerid, "/robstore");
    }
    return 1;
    }
    return SendClientMessage(playerid, ROT, "Hier fand vor kurzer Zeit erst ein Überfall statt!");
    }
    }
    return SendClientMessage(playerid, ROT, "Du bist in keinem Gebäude");
    /*}
    else
    {
    SendClientMessage(playerid, ROT, "Es sich nicht genug Cops Online!");
    return 1;
    }*/
    }
    return SendClientMessage(playerid, ROT, "Du raubst bereits ein Laden aus oder hast es erst kürzlich gemacht!");
    }
    return 1;
    }
    return SendClientMessage(playerid, ROT, "Du musst in der Cops n Robbers Mode sein um den Befehl zu nutzen!");
    }

  • #define MaxRobs 35 // Maximale Anzahl an Häusern
    Hat nichts damit zu tun.
    Der Fehler war bei der Schleife mitten im Befehl.
    Die scheint irgentwie was falsch zu machen.


    Habe ein neues Problemchen.
    Das System ist so gut wie fertig, nur verträgt mein Haussystem es nicht und reagiert nicht.


    if(oldkeys == KEY_SECONDARY_ATTACK)
    {
    if(gMode[playerid] == MODE_CNR)
    {
    new i = isPlayerInRangeOfRob(playerid);
    if(i == -1) return 1;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, Rob[i][PosX], Rob[i][PosY], Rob[i][PosZ]) ) {
    SetPlayerPos(playerid, Rob[i][PosXInt], Rob[i][PosYInt], Rob[i][PosZInt]);
    SetPlayerVirtualWorld(playerid, Rob[i][HouseVW]);
    SetPlayerInterior(playerid, Rob[i][HouseInt]);
    PlayerData[playerid][pHouseID] = Rob[i][robID];
    GameTextForPlayer(playerid, "/robstore" ,5000, 1);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 2.0, Rob[i][PosXInt], Rob[i][PosYInt], Rob[i][PosZInt]) && GetPlayerVirtualWorld(playerid) == Rob[i][HouseVW] && GetPlayerInterior(playerid) == Rob[i][HouseInt]) {
    SetPlayerPos(playerid, Rob[i][PosX], Rob[i][PosY], Rob[i][PosZ]);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    PlayerData[playerid][pHouseID] = -1;
    Rob[i][InRob] = 0;
    return 1;
    }
    }
    else if(gMode[playerid] == MODE_CNR)
    {
    new x = isPlayerInRangeOfHouse(playerid);
    if(x == -1) return 1;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, House[x][PosX], House[x][PosY], House[x][PosZ]) ) {
    if(HouseInfo[x][HouseDoor] == 1) {
    SetPlayerPos(playerid, House[x][PosXInt], House[x][PosYInt], House[x][PosZInt]);
    SetPlayerVirtualWorld(playerid, House[x][HouseVW]);
    SetPlayerInterior(playerid, House[x][HouseInt]);
    PlayerData[playerid][pHouseID] = House[x][HouseID];
    } else SendClientMessage(playerid, clBlue, "Das Haus ist abgeschlossen");
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 2.0, House[x][PosXInt], House[x][PosYInt], House[x][PosZInt]) && GetPlayerVirtualWorld(playerid) == House[x][HouseVW] && GetPlayerInterior(playerid) == House[x][HouseInt]) {
    if(HouseInfo[x][HouseDoor] == 1) {
    SetPlayerPos(playerid, House[x][PosX], House[x][PosY], House[x][PosZ]);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    PlayerData[playerid][pHouseID] = -1;
    } else SendClientMessage(playerid, clBlue, "Das Haus ist abgeschlossen");
    return 1;
    }
    }
    return 1;
    }


    /edit


    Erst bei else if(gMode[playerid] == MODE_CNR) regiert es nicht.
    Also, ich kann kein Haus betreten

  • Dann lag der vorherige Fehler bei der Schleife womöglich an den fehlenden Klammern, ist mir jetzt gerade aufgefallen.


    Keys fragt man immer mit dem bitweisen '&' ab, du vergleichst hier schließlich Bits in einer Variable und nicht die Variable selbst.


    if(oldkeys & KEY_SECONDARY_ATTACK)


    Außerdem: Was reagiert nicht?


    Edit: Deine 2 Abfragen ergeben keinen Sinn da beide äquivalent zueinander sind.


  • Welche felhende Klammer und wieso '&' bei der abfrage?

  • Deine Abfragen ergeben auch keinen Sinn weil sie äquivalent sind, wie ich vorher bereits erwähnt habe. Sie fragen beide das gleiche ab, ist genauso wie wenn ich folgendes mache:


    new a = 2;
    if(a == 2)
    a = 3;
    else if(a ==2)
    a = 4;


    "a" wäre nach den Anweisungen immer 3, weil die Bedingung mit der ersten Abfrage schon erfüllt ist und es so gar nicht zum else kommt.


    Das mit dem bitweisen & hat übrigens ne kompliziertere Hintergrundgeschichte. Du solltest allerdings immer mit dem bitweisen & abfragen, da man sonst deine Funktionen einfach exploiten kann.

  • Der Befehl sieht nun so aus:


    if(oldkeys & KEY_SECONDARY_ATTACK)
    {
    if(gMode[playerid] == MODE_CNR)
    {
    new i = isPlayerInRangeOfRob(playerid), x = isPlayerInRangeOfHouse(playerid);
    if(i && x == -1) return 1;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, Rob[i][PosX], Rob[i][PosY], Rob[i][PosZ]) ) {
    SetPlayerPos(playerid, Rob[i][PosXInt], Rob[i][PosYInt], Rob[i][PosZInt]);
    SetPlayerVirtualWorld(playerid, Rob[i][HouseVW]);
    SetPlayerInterior(playerid, Rob[i][HouseInt]);
    PlayerData[playerid][pHouseID] = Rob[i][robID];
    GameTextForPlayer(playerid, "/robstore" ,5000, 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2.0, Rob[i][PosXInt], Rob[i][PosYInt], Rob[i][PosZInt]) && GetPlayerVirtualWorld(playerid) == Rob[i][HouseVW] && GetPlayerInterior(playerid) == Rob[i][HouseInt]) {
    SetPlayerPos(playerid, Rob[i][PosX], Rob[i][PosY], Rob[i][PosZ]);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    PlayerData[playerid][pHouseID] = -1;
    Rob[i][InRob] = 0;
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2.0, House[x][PosX], House[x][PosY], House[x][PosZ]) ) {
    if(HouseInfo[x][HouseDoor] == 1) {
    SetPlayerPos(playerid, House[x][PosXInt], House[x][PosYInt], House[x][PosZInt]);
    SetPlayerVirtualWorld(playerid, House[x][HouseVW]);
    SetPlayerInterior(playerid, House[x][HouseInt]);
    PlayerData[playerid][pHouseID] = House[x][HouseID];
    } else SendClientMessage(playerid, clBlue, "Das Haus ist abgeschlossen");
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2.0, House[x][PosXInt], House[x][PosYInt], House[x][PosZInt]) && GetPlayerVirtualWorld(playerid) == House[x][HouseVW] && GetPlayerInterior(playerid) == House[x][HouseInt]) {
    if(HouseInfo[x][HouseDoor] == 1) {
    SetPlayerPos(playerid, House[x][PosX], House[x][PosY], House[x][PosZ]);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    PlayerData[playerid][pHouseID] = -1;
    } else SendClientMessage(playerid, clBlue, "Das Haus ist abgeschlossen");
    return 1;
    }
    }
    return 1;


    /Edit:


    Ich denke der Fehler liegt bei if(i && x == -1) return 1;
    Teste es.


    /edit:


    No, ka.


    /edit:


    Ich habs, es geht ... :rolleyes:

    3 Mal editiert, zuletzt von BobbiVids ()