Probleme beim Abspeichern der Cars

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


    Bitte lacht jetzt nicht, ich versuche mich möglichst nicht zu dumm anzustellen. Ich teste immer gerne etwas rum und versuche etwas, auch wenn es halt nicht (immer) geht. Aber so lerne ich am besten. Ich habe getsern mal das BFX-Dyn Haussystem studiert und versucht so etwas als Haussystem nachzubauen und dann meinen Wünschen anzupassen. Ich habe nochnie wirklich mit strcmp programmiert, sondern immer mit DCMD.


    Probleme:
    1.)Bei jedem Command den ich eingebe (register, /essen, /o [Text] ) kommt immer /createcar ..........
    2.)Die Cars werden nach dem Createbefehl nicht erstellt
    3.)Die Cars werden beim Serverstart nicht geladen
    4.)Es herrscht eine Art Zahlenmix in der Fahrzeuge.cfg


    Der Code:


    #include <a_samp>
    #include <JunkBusterFS>
    #define MAX_CAR 200 // Maximale Anzahl an Fahrzeugen
    #define CAR_DATEI "Vehiclesystem/Fahrzeuge.cfg" // Speicherort
    #define MAX_SPIELER_CAR 2 // Maximale Anzahl an Fahrzeugen pro Spieler
    #define COLOR_GREY 0xAFAFAFAA
    #define COLOR_GREEN 0x33AA33AA
    #define COLOR_WHITE 0xFFFFFFAA


    forward SaveCache();
    forward initSlot();


    new _cache_fahrzeug;
    enum fahrzeug
    {
    fBesitzer[MAX_PLAYER_NAME],
    fPreis,
    fModelID,
    Float:fX,
    Float:fY,
    Float:fZ,
    Float:fA,
    fFarbe1,
    fFarbe2,
    fCarID
    }
    new FDaten[MAX_CAR][fahrzeug];


    enum spieler_cardaten
    {
    car_zahl
    }
    new Player[MAX_PLAYERS][spieler_cardaten];


    public OnFilterScriptInit()
    {
    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][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][fFarbe1] = strval(strtok(line,car_index,','));
    FDaten[_cache_fahrzeug][fFarbe2] = strval(strtok(line,car_index,','));
    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);
    car_index = 0;
    _cache_fahrzeug++;
    }
    fclose(carx);
    }
    return 1;
    }


    public OnFilterScriptExit()
    {
    SaveCache();
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    Player[playerid][car_zahl] = 0;
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new idx,cmd[128];
    if(!strcmp(cmd,"/createcar",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
    new cmodelid = strval(cmd);
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
    new cfarbe1 = strval(cmd);
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
    new cfarbe2 = strval(cmd);
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
    new cpreis = strval(cmd);
    new Float:JPos[3];
    new slotid = initSlot();
    new fullid = (slotid==-1) ? (_cache_fahrzeug) : (slotid);
    GetPlayerPos(playerid,JPos[0],JPos[1],JPos[2]);
    strmid(FDaten[fullid][fBesitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    FDaten[fullid][fPreis] = cpreis;
    FDaten[fullid][fModelID] = cmodelid;
    FDaten[fullid][fX] = JPos[0];
    FDaten[fullid][fY] = JPos[1];
    FDaten[fullid][fZ] = JPos[2];
    FDaten[fullid][fFarbe1] = cfarbe1;
    FDaten[fullid][fFarbe2] = cfarbe2;
    CreateVehicle(cmodelid,JPos[0],JPos[1],JPos[2],0,cfarbe1,cfarbe2, -1);
    if(slotid==-1)_cache_fahrzeug++;
    SaveCache();
    return 1;
    }
    return 0;
    }


    strtok(const string[], &index, trenner = ' ')
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= trenner))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > trenner) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    public SaveCache()
    {
    new fm[255],File:carx = fopen(CAR_DATEI,io_write);
    for(new i = 0;i<_cache_fahrzeug;i++)
    {
    format(fm,sizeof fm,"%s,%d,%d,%f,%f,%f,%f,%d,%d\n",
    FDaten[i][fBesitzer],
    FDaten[i][fPreis],
    FDaten[i][fModelID],
    FDaten[i][fX],
    FDaten[i][fY],
    FDaten[i][fZ],
    FDaten[i][fA],
    FDaten[i][fFarbe1],
    FDaten[i][fFarbe2]);
    fwrite(carx,fm);
    }
    fclose(carx);
    return 1;
    }


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


    So sollte die Fahrzeug.cfg aussehen:
    Besitzer,Preis,ModelID,X,Y,Z,A,Farbe1,Farbe2

    So sieht sie aus:

    Keiner,12,0,1136.906250,-2038.063476,69.007812,0.000000,400,11
    Besitzer, Farbe2,Preis,X,Y,Z,A,ModelID,Farbe1


    Ich wäre um Hilfe sehr dankbar, da ich mich auch in Zukunft an was ran wagen möchte, mit dem ich lernen kann und es auch tue.
    MfG dUDALUS

  • Hallo


    Das Abspeichern habe ich geschafft, jedoch habe ich wieder ein paar neue Probleme:


    1.)Man kann mehr als 2 Fahrzeuge besitzen
    2.)Wie muss ich den Befehl /carweiterverkaufen ID machen (blick strcmp nicht)
    3.)Das Carlock hat (Ja ich komm echt nicht weiter) eine Warning und funktioniert nicht, man kann einsteigen
    4.)Gibt es Punkte, wo man die Performance verbessern könnte (zB 2 SaveChaches schreiben, eines zum erstellen, das andere für den normalen Usergebrauch)


    Hier ist der Pastin-Link:
    http://pastebin.com/fnbtNtC3


    MfG dUDALUS