Fehler bei Autospawn-CMD

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
  • #define MAX_SPAWNS 4
    new Spawned[MAX_PLAYERS];
    new CarID[MAX_PLAYERS][6];


    Hier der Carspawncommand (nicht benötigt, da Fehlerfrei)


    if(strcmp(cmd, "/delteveh",true)==0)
    {
    for(new ii = false; ii < MAX_SPAWNS;ii++)
    {
    if(GetVehicleModel(CarID[playerid][ii])!=0)
    {
    DestroyVehicle(CarID[playerid][ii]);
    }
    }
    Spawned[playerid]=0;
    return 1;
    }


    Moin Community,
    ich hab ein Problem das ich sonst noch nie hatte ^^ zumindest kein solches wo cih den Fehler nicht finde.
    Folgendes: Man hat 3 Cars gespawnt und muss /delteveh machen um weitere zu spawnen, dabei werden die 3 gespawnten gelöscht.
    Nun ist es aber irgendwie so, das dadurch bei einigen anderen Spielern auch die Autos dabei löschen. Könnt ihr mir da helfen, weil ich finde den Fehler im CMD irgendwie nicht :S

  • hier ist der cmd


    #if defined ENABLE_CARSPANW_COMMAND
    if (strcmp("/veh", cmd, true) == 0)
    {
    new Int = GetPlayerInterior(playerid);
    if( Int >= 1 || PlayerToPoint(35.0,playerid,1453.9369,-922.2850,37.6054) || PlayerToPoint(50.0,playerid,1288.4138,-985.1966,32.6953) || PlayerToPoint(60.0,playerid,1782.0367,-1121.2432,24.0859) || PlayerToPoint(250.0,playerid,958.3947,2167.3855,1011.0234) ||
    PlayerToPoint(90.0,playerid,1362.6211,2163.9231,11.0156) || PlayerToPoint(500.0,playerid,1069.2367,-2598.4888,551.5200) || PlayerToPoint(50.0,playerid,-1435.0717,-538.1768,14.1719) || PlayerToPoint(50.0,playerid,1040.1593,-303.2285,73.9931) || PlayerToPoint(150.0,playerid,485.7938,3623.4238,18.2267)){
    SendClientMessage(playerid,Weiss,"SERVER: Du kannst in einem Interior / Car-Verbotszone keine Fahrzeuge spawnen!");
    }else{
    new carfound, Float:X, Float:Y, Float:Z, Float:A;
    tmp = strtok(cmdtext, index);
    if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFBB00AA, "Benutze: /veh [name]");
    for(new i; i<212; i++)
    {
    if(strcmp(VehicleNames[i], tmp, true)==0)
    {
    carfound = 1;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, A);
    if(Spawned[playerid] == 3) { SendClientMessage(playerid, 0xAFAFAFAA, " Du kannst Maximal nur 3 Autos Spawnen!"); return 1; }
    Spawned[playerid]++;
    CarID[playerid][Spawned[playerid]] = CreateVehicle(i+400, X, Y, Z, A, -1, -1, 600000);
    PutPlayerInVehicle(playerid, CarID[playerid][Spawned[playerid]], 0);
    }
    }
    if(carfound == 0)
    {
    new str[128];
    format(str, sizeof(str), "Es wurde kein Auto mit Namen \"%s\" gefunden.", tmp);
    SendClientMessage(playerid, 0xFFBB00AA, str);
    }
    return 1;
    }
    }
    #endif

  • if(strcmp(cmd, "/delteveh",true)==0)
    {
    for(new ii = false; ii < MAX_SPAWNS;ii++)
    {
    if(GetPlayerVehicleID(CarID[playerid][ii])!=0)
    {
    DestroyVehicle(CarID[playerid][ii]);
    }
    }
    Spawned[playerid]=0;
    return 1;
    }


    Hoffe das klappt

  • Da ist kein Fehler, zumindest finde ich keinen, ich hab aber mal eine kleine Idee...
    if(strcmp(cmd, "/delteveh",true)==0)
    {
    for(new ii = false; ii < Spawned[playerid];ii++)
    {
    DestroyVehicle(CarID[playerid][ii]);
    }
    Spawned[playerid]=0;
    return 1;
    }
    Obwohl, ne, ist auch doof, ich bau das heut abend mal bei mir ein und such den Fehler... das Bild hast leider zu früh gepostet xD

  • Wutsch. Guck ma genau hin, ist nicht das gleiche!


    Bei deinem suchst du nach GetVehicleModel. Bei mir nach der ID des Fahrzeugs.


    Model und ID sind zwei verschiedene Welten!
    ________________________________________________________________



    if(strcmp(cmd, "/delteveh",true)==0)
    {
    for(new ii = false; ii < MAX_SPAWNS;ii++)
    {
    if(GetPlayerVehicleID(CarID[playerid][ii])!=0)
    {
    DestroyVehicle(CarID[playerid][ii]);
    }
    }
    Spawned[playerid]=0;
    return 1;
    }

  • Du speicherst deine Autoids, die der Spieler erstellt hat in einem Array ab.
    Ich würde zuerst ein paar Änderungen vornehmen:
    In deinem /veh Befehl zum Auto spawnen würde ich das
    Spawned[playerid]++;
    unter das
    PutPlayerInVehicle(playerid, CarID[playerid][Spawned[playerid]], 0);
    setzen, damit die Autos beginnend ab "0" in dem Array gespeichert werden. Wenn du es schon vorher hochzählt fängst erst bei 1 an. Kannst du lassen wie du willst, aber die 0 verschwendest du sonst als Speicherplatz. Es heisst ja wahrscheinlich auch, da du nur 3 Autos spawnen kannst
    new
    CarID[MAX_PLAYERS][3];
    Dadurch, dass du deinen Autos in einem Array speicherst, brachst du keinen Schleife, sondern du musst einfach nur nacheinander die Arrays nachprüfen:
    if(CarID[playerid][0] != 0)
    {
    DestroyVehicle(CarID[playerid][0]);
    CarID[playerid][0] = 0;
    }
    if(CarID[playerid][1] != 0)
    {
    DestroyVehicle(CarID[playerid][1]);
    CarID[playerid][1] = 0;
    }
    if(CarID[playerid][2] != 0)
    {
    DestroyVehicle(CarID[playerid][2]);
    CarID[playerid][2] = 0;
    }
    Spawned[playerid] = 0;
    So da hast deine 3 Autos die gelöscht werden und die Arrays werden geleert und der Zähler zurückgesetzt... Wenn du meinen Vorschglag oben nicht umsetzt, musst du entsprechend die Nummern in dem Array ändern unten, da die "0" ja nicht exitiert dann - dann musst bei "1" beginnen

  • Nur so nebenbei, das hat nicht funktioniert.



    okay, ich werds versuchen. ihr werdet heute abend so gegen 7 von mir hören obs funktioniert hat. Dankeschön schoneinmal.