Spawnproblem bei einem Carsystem

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 langsam das Gefühl, das wird mein Lebenswerk, aber egal, ich schaffs ;)


    Ich habe jetzt das Problem, dass wenn ich als RCON eingelogt bin und den Command /admcreate (Erstellt ein Auto) korrekt benutze, nichts passiert. Erst nnach einem Restart sind die Cars dort, jedoch völlig komisch, man kann sie zB nicht kaufen, obwohl e sgehen sollte. Ich poste hier mal den Load-Code und den Save-Code, den Admcreatecode.


    new line[255],File:carx = fopen(CAR_DATEI,io_read),
    car_index;
    if(carx)
    {
    while(fread(carx,line))
    {
    if(line[strlen(line)-2] == '\r')line[strlen(line)-2] = '\0';
    if(line[strlen(line)-1] == '\n')line[strlen(line)-1] = '\0';
    strmid(FDaten[_cache_fahrzeug][fBesitzer],strtok(line,car_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    FDaten[_cache_fahrzeug][fPreis] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fLocked] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTunbar] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fVerwahrt] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fVerkauft] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fModelID] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fX] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fY] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fZ] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fA] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vX] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vY] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vZ] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vA] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFarbe1] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFarbe2] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fJob] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFraktion] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fPaintjob] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil0] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil1] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil2] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil3] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil4] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil5] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil6] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil7] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil8] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil9] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil10] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil11] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil12] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil13] = strval(strtok(line,car_index,','));
    if(FDaten[_cache_fahrzeug][fVerwahrt] == 0)
    {
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][fX],FDaten[_cache_fahrzeug][fY],FDaten[_cache_fahrzeug][fZ],FDaten[_cache_fahrzeug][fA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2], -1);
    SetTimerEx("PrivatCarTuneUp",1000,0,"d",_cache_fahrzeug);
    }
    else
    {
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][vX],FDaten[_cache_fahrzeug][vY],FDaten[_cache_fahrzeug][vZ],FDaten[_cache_fahrzeug][vA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2], -1);
    SetTimerEx("PrivatCarTuneUp",1000,0,"d",_cache_fahrzeug);
    }
    car_index = 0;
    _cache_fahrzeug++;
    }
    fclose(carx);
    }


    public SaveCache()
    {
    new fm[255],File:carx = fopen(CAR_DATEI,io_write);
    for(new i = 0;i<_cache_fahrzeug;i++)
    {
    if(FDaten[i][fModelID] != 0)
    {
    format(fm,sizeof fm,"%s,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",
    FDaten[i][fBesitzer],
    FDaten[i][fPreis],
    FDaten[i][fVerkauft],
    FDaten[i][fLocked],
    FDaten[i][fTunbar],
    FDaten[i][fVerwahrt],
    FDaten[i][fModelID],
    FDaten[i][fX],
    FDaten[i][fY],
    FDaten[i][fZ],
    FDaten[i][fA],
    FDaten[i][vX],
    FDaten[i][vY],
    FDaten[i][vZ],
    FDaten[i][vA],
    FDaten[i][fFarbe1],
    FDaten[i][fFarbe2],
    FDaten[i][fJob],
    FDaten[i][fFraktion],
    FDaten[i][fPaintjob],
    FDaten[i][fTuningteil0],
    FDaten[i][fTuningteil1],
    FDaten[i][fTuningteil2],
    FDaten[i][fTuningteil3],
    FDaten[i][fTuningteil4],
    FDaten[i][fTuningteil5],
    FDaten[i][fTuningteil6],
    FDaten[i][fTuningteil7],
    FDaten[i][fTuningteil8],
    FDaten[i][fTuningteil9],
    FDaten[i][fTuningteil10],
    FDaten[i][fTuningteil11],
    FDaten[i][fTuningteil12],
    FDaten[i][fTuningteil13]);
    fwrite(carx,fm);
    }
    }
    fclose(carx);
    return 1;
    }


    dcmd_admcreate(playerid,params[])
    {
    new cmodelid, cfarbe1, cfarbe2, cpreis, ctunbar, cjob, cfraktion;
    if(sscanf(params, "ddddddd", cmodelid,cfarbe1,cfarbe2,cpreis,ctunbar,cjob,cfraktion)) return SendClientMessage(playerid, COLOR_WHITE, "Verwendung: /admcreate ModelID Farbe1 Farbe2 Preis Tunbar Job Fraktion");
    else if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Du bist kein RCON Admin");
    else
    {
    new Float:JPos[4];
    new slotid = initSlot();
    new fullid = (slotid==-1) ? (_cache_fahrzeug) : (slotid);
    GetPlayerPos(playerid,JPos[0],JPos[1],JPos[2]);
    GetPlayerFacingAngle(playerid,JPos[3]);
    strmid(FDaten[fullid][fBesitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    FDaten[fullid][fPreis] = cpreis;
    FDaten[fullid][fVerkauft] = 0;
    FDaten[fullid][fLocked] = 0;
    FDaten[fullid][fTunbar] = ctunbar;
    FDaten[fullid][fVerwahrt] = 0;
    FDaten[fullid][fModelID] = cmodelid;
    FDaten[fullid][fX] = JPos[0];
    FDaten[fullid][fY] = JPos[1];
    FDaten[fullid][fZ] = JPos[2];
    FDaten[fullid][fA] = JPos[3];
    FDaten[fullid][vX] = (0.0);
    FDaten[fullid][vY] = (0.0);
    FDaten[fullid][vZ] = (0.0);
    FDaten[fullid][vA] = (0.0);
    FDaten[fullid][fFarbe1] = cfarbe1;
    FDaten[fullid][fFarbe2] = cfarbe2;
    FDaten[fullid][fJob] = cjob;
    FDaten[fullid][fFraktion] = cfraktion;
    FDaten[fullid][fPaintjob] = 0;
    FDaten[fullid][fCarID] = CreateVehicle(cmodelid,JPos[0],JPos[1],JPos[2],JPos[3],cfarbe1,cfarbe2, -1);
    if(slotid==-1)_cache_fahrzeug++;
    SaveCache();
    }
    return 1;
    }


    MfG dUDA

  • nur das else weg in Reihe5
    dcmd_admcreate(playerid,params[])
    {
    new cmodelid, cfarbe1, cfarbe2, cpreis, ctunbar, cjob, cfraktion;
    if(sscanf(params, "ddddddd", cmodelid,cfarbe1,cfarbe2,cpreis,ctunbar,cjob,cfraktion)) return SendClientMessage(playerid, COLOR_WHITE, "Verwendung: /admcreate ModelID Farbe1 Farbe2 Preis Tunbar Job Fraktion");
    /*HIER*/if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Du bist kein RCON Admin");//<------ vorne das else weg xD
    else
    {
    Mit freundlichen Grüßen
    mari0_DE aka Kanti

    I'm Sorry For Your Mistake!
    but it's yours

  • Hallo


    Entschuldige, aber das tönt jetzt für mich völlig unlogisch, da ich ja "Player-ist-nicht-RCON" ausschliessen will. Wenn nichts zutrifft, wird doch else ausgeführt ? Zudem erscheint keine Du bist kein RCON-Meldung, die Casr werden beim nächsten Restart erstellt.


    MfG dUDA

  • naja da du return benutzt bei deiner if(Admin) abfrage brauchst du das else und die klammern gar nicht
    Probiers mal ohne.


    //wenn das nicht dan hab ich keine Ahnung xD

    I'm Sorry For Your Mistake!
    but it's yours

  • Hallo


    Habe es ohne else und else-if versucht, es geht nicht, es liegt höchstwahrscheinlich am initSlot, jedoch ging es bisher immer ;)


    public initSlot()
    {
    new foundx = -1;
    for(new i = 0;i<_cache_fahrzeug;i++)
    {
    if(FDaten[i][fBesitzer] == '\0'){foundx = i;break;}
    }
    return foundx;
    }

  • Hallo


    Ich bin nochmals etwas durchs Script "gegangen" und habe etwas geändert. Es geht jedoch schon besser, leider nochnicht ganz 100%.


    new line[255],File:carx = fopen(CAR_DATEI,io_read), car_index;
    if(carx)
    {
    while(fread(carx,line))
    {
    strmid(FDaten[_cache_fahrzeug][fBesitzer],strtok(line,car_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    FDaten[_cache_fahrzeug][fPreis] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fLocked] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTunbar] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fVerwahrt] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fVerkauft] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fModelID] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fX] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fY] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fZ] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fA] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vX] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vY] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vZ] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][vA] = floatstr(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFarbe1] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFarbe2] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fJob] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFraktion] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fPaintjob] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil0] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil1] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil2] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil3] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil4] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil5] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil6] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil7] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil8] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil9] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil10] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil11] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil12] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fTuningteil13] = strval(strtok(line,car_index,','));
    if(FDaten[_cache_fahrzeug][fVerwahrt] == 0)
    {
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][fX],FDaten[_cache_fahrzeug][fY],FDaten[_cache_fahrzeug][fZ],FDaten[_cache_fahrzeug][fA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2], -1);
    SetTimerEx("PrivatCarTuneUp",1000,0,"d",_cache_fahrzeug);
    }
    else
    {
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][vX],FDaten[_cache_fahrzeug][vY],FDaten[_cache_fahrzeug][vZ],FDaten[_cache_fahrzeug][vA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2], -1);
    SetTimerEx("PrivatCarTuneUp",1000,0,"d",_cache_fahrzeug);
    }
    car_index = 0;
    _cache_fahrzeug++;
    }
    fclose(carx);
    }


    dcmd_admcreate(playerid,params[])
    {
    new cmodelid, cfarbe1, cfarbe2, cpreis, ctunbar, cjob, cfraktion;
    if(sscanf(params, "ddddddd", cmodelid,cfarbe1,cfarbe2,cpreis,ctunbar,cjob,cfraktion)) return SendClientMessage(playerid, COLOR_WHITE, "Verwendung: /admcreate ModelID Farbe1 Farbe2 Preis Tunbar Job Fraktion");
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Du bist kein RCON Admin");
    new Float:JPos[4];
    GetPlayerPos(playerid,JPos[0],JPos[1],JPos[2]);
    GetPlayerFacingAngle(playerid,JPos[3]);
    _cache_fahrzeug++;
    strmid(FDaten[_cache_fahrzeug][fBesitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    FDaten[_cache_fahrzeug][fPreis] = cpreis;
    FDaten[_cache_fahrzeug][fVerkauft] = 0;
    FDaten[_cache_fahrzeug][fLocked] = 0;
    FDaten[_cache_fahrzeug][fTunbar] = ctunbar;
    FDaten[_cache_fahrzeug][fVerwahrt] = 0;
    FDaten[_cache_fahrzeug][fModelID] = cmodelid;
    FDaten[_cache_fahrzeug][fX] = JPos[0];
    FDaten[_cache_fahrzeug][fY] = JPos[1];
    FDaten[_cache_fahrzeug][fZ] = JPos[2];
    FDaten[_cache_fahrzeug][fA] = JPos[3];
    FDaten[_cache_fahrzeug][vX] = (0.0);
    FDaten[_cache_fahrzeug][vY] = (0.0);
    FDaten[_cache_fahrzeug][vZ] = (0.0);
    FDaten[_cache_fahrzeug][vA] = (0.0);
    FDaten[_cache_fahrzeug][fFarbe1] = cfarbe1;
    FDaten[_cache_fahrzeug][fFarbe2] = cfarbe2;
    FDaten[_cache_fahrzeug][fJob] = cjob;
    FDaten[_cache_fahrzeug][fFraktion] = cfraktion;
    FDaten[_cache_fahrzeug][fPaintjob] = 0;
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][fX],FDaten[_cache_fahrzeug][fY],FDaten[_cache_fahrzeug][fZ],FDaten[_cache_fahrzeug][fA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2],-1);
    SaveCache();
    return 1;
    }


    public SaveCache()
    {
    new fm[255],File:carx = fopen(CAR_DATEI,io_write);
    for(new i = 0;i<_cache_fahrzeug;i++)
    {
    if(FDaten[i][fModelID] != 0)
    {
    format(fm,sizeof fm,"%s,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",
    FDaten[i][fBesitzer],
    FDaten[i][fPreis],
    FDaten[i][fVerkauft],
    FDaten[i][fLocked],
    FDaten[i][fTunbar],
    FDaten[i][fVerwahrt],
    FDaten[i][fModelID],
    FDaten[i][fX],
    FDaten[i][fY],
    FDaten[i][fZ],
    FDaten[i][fA],
    FDaten[i][vX],
    FDaten[i][vY],
    FDaten[i][vZ],
    FDaten[i][vA],
    FDaten[i][fFarbe1],
    FDaten[i][fFarbe2],
    FDaten[i][fJob],
    FDaten[i][fFraktion],
    FDaten[i][fPaintjob],
    FDaten[i][fTuningteil0],
    FDaten[i][fTuningteil1],
    FDaten[i][fTuningteil2],
    FDaten[i][fTuningteil3],
    FDaten[i][fTuningteil4],
    FDaten[i][fTuningteil5],
    FDaten[i][fTuningteil6],
    FDaten[i][fTuningteil7],
    FDaten[i][fTuningteil8],
    FDaten[i][fTuningteil9],
    FDaten[i][fTuningteil10],
    FDaten[i][fTuningteil11],
    FDaten[i][fTuningteil12],
    FDaten[i][fTuningteil13]);
    fwrite(carx,fm);
    }
    }
    fclose(carx);
    return 1;
    }


    MfG dUDA

  • Hallo


    Ich habe 2 Fragen:


    1.Frage
    Wird bei
    FDaten[_cache_fahrzeug][fCarID] = CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][fX],FDaten[_cache_fahrzeug][fY],FDaten[_cache_fahrzeug][fZ],FDaten[_cache_fahrzeug][fA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2],-1);



    nicht ein Wert zu fCarID zugewiesen und überhaupt kein Auto erstellt ?


    2.Frage
    Kann es sein, dass das Problem darin liegt, das _cache_fahrzeug erst nach dem einlesen der 1.Zeile erhöht wird, die vehicleid aber bei 1 anfängt.


    Ich wär eum eure Hilfe sehr erleichtert ;)
    MfG dUDA
    Schönes Wochenende an alle !

  • Hallo


    Also, das Problem ist ja, das gar kein Auto erstellt wird, sondern erst nach einem Restart. Zudem sind die Autoeigenschaften nach einem Restart völlig durcheinander. Wie meinst du da smit dem Spieler ? Es geht ja auf diese Art nur beim Carerstellen, aber ich sitze ja in keinem Auto ;)


    dUDA