Vehicle password saving
#4

Well it sort of helped. It doesnt still work like it should. Been rewriting it pretty much now and now i have the problem that when player joins (owner of vehicle(s)), the password "jumps forward". Let me explain: You own 2 vehicles : sadler and burrito, you set sadler password to sadler and burrito password to burrito. Then you quit game (housefile shows right password for the right vehicle at this stage) then you join and then you find that the sadlers password is now burrito and burrito has no password at all (sadler was first bought and therefore first in the housefile list). Then you rejoin again and then sadler has no password and burrito has password of : No.
I dont have a clue how to get this work, been over a weeck of scripting daily, but no success.
Heres the code that saves and loads the vehicles (owned vehicles).
pawn Код:
// This function will load the house's datafile (used when the server is started to load all houses)
HouseFile_Load(HouseID, bool:OnlyLoadVehicles = false)
{
    new file[100], File:HFile, LineFromFile[100], ParameterName[50], ParameterValue[50];
    // Setup local variables
    new cModel, cPaint, components[14], Float:cx, Float:cy, Float:cz, Float:crot, Col1, Col2, vid, bool:VehicleClamped, cFuel = -1;

    format(file, sizeof(file), HouseFile, HouseID); // Construct the complete filename for this house-file

    if (fexist(file))
    {
        HFile = fopen(file, io_read); // Open the housefile for reading

        fread(HFile, LineFromFile); // Read the first line of the file

        // Set the house so it cannot be entered by anyone, except the owner (close the house)
        AHouseData[HouseID][HouseOpened] = false;

        // Keep reading until the end of the file is found (no more data)
        while (strlen(LineFromFile) > 0)
        {
            StripNewLine(LineFromFile); // Strip any newline characters from the LineFromFile
            sscanf(LineFromFile, "s[50]s[50]", ParameterName, ParameterValue); // Extract parametername and parametervalue

            // If OnlyLoadVehicles is "false", only load the house-data
            // If OnlyLoadVehicles is "true", only load the vehicle-data
            if (OnlyLoadVehicles == false)
            {
                // Store the proper value in the proper place
                if (strcmp(ParameterName, "HouseAddress", false) == 0) // If the parametername is correct ("HouseAddress")
                    format(AHouseData[HouseID][HouseAddress], 24, ParameterValue); // Store the HouseAddress
                if (strcmp(ParameterName, "HouseName", false) == 0) // If the parametername is correct ("HouseName")
                    format(AHouseData[HouseID][HouseName], 24, ParameterValue); // Store the HouseName
                if (strcmp(ParameterName, "HouseX", false) == 0) // If the parametername is correct ("HouseX")
                    AHouseData[HouseID][HouseX] = floatstr(ParameterValue); // Store the HouseX
                if (strcmp(ParameterName, "HouseY", false) == 0) // If the parametername is correct ("HouseY")
                    AHouseData[HouseID][HouseY] = floatstr(ParameterValue); // Store the HouseY
                if (strcmp(ParameterName, "HouseZ", false) == 0) // If the parametername is correct ("HouseZ")
                    AHouseData[HouseID][HouseZ] = floatstr(ParameterValue); // Store the HouseZ
                if (strcmp(ParameterName, "HouseLevel", false) == 0) // If the parametername is correct ("HouseLevel")
                    AHouseData[HouseID][HouseLevel] = strval(ParameterValue); // Store the HouseLevel
                if (strcmp(ParameterName, "HouseMaxLevel", false) == 0) // If the parametername is correct ("HouseMaxLevel")
                    AHouseData[HouseID][HouseMaxLevel] = strval(ParameterValue); // Store the HouseMaxLevel
                if (strcmp(ParameterName, "HousePrice", false) == 0) // If the parametername is correct ("HousePrice")
                    AHouseData[HouseID][HousePrice] = strval(ParameterValue); // Store the HousePrice
                if (strcmp(ParameterName, "Owned", false) == 0) // If the parametername is correct ("Owned")
                {
                    if (strcmp(ParameterValue, "Yes", false) == 0) // If the value "Yes" was read
                        AHouseData[HouseID][Owned] = true; // House is owned
                    else
                        AHouseData[HouseID][Owned] = false; // House is not owned
                }
                if (strcmp(ParameterName, "Owner", false) == 0) // If the parametername is correct ("Owner")
                    // Store the Owner (Owner will hold "1" if there is no owner (empty string), done by "sscanf" I guess)
                    // But this doesn't matter, as the owner will never be displayed when the house is not owned by someone
                    format(AHouseData[HouseID][Owner], 24, ParameterValue);
                if (strcmp(ParameterName, "Insurance", false) == 0) // If the parametername is correct ("Insurance")
                    AHouseData[HouseID][Insurance] = strval(ParameterValue); // Store the Insurance
            }
            else // OnlyLoadVehicles is "true", so only read the vehicle-data
            {
                if (strcmp(ParameterName, "[Vehicle]", false) == 0) // If the parametername is correct ("[Vehicle]")
                {
                    // Clear all data to start a new vehicle
                    cModel = 0;
                    cPaint = 0;
                    cFuel = -1;
                    for (new i; i < 14; i++)
                        components[i] = 0;
                }
                if (strcmp(ParameterName, "Pass", false) == 0) // If the parametername is correct ("VehicleModel")
                    format(AVehicleData[vid][Pass], 24, ParameterValue); // Store the password
                if (strcmp(ParameterName, "VehicleModel", false) == 0) // If the parametername is correct ("VehicleModel")
                    cModel = strval(ParameterValue); // Store the VehicleModel
                if (strcmp(ParameterName, "Fuel", false) == 0) // If the parametername is correct ("Fuel")
                    cFuel = strval(ParameterValue); // Store the Fuel
                if (strcmp(ParameterName, "VehiclePaintJob", false) == 0) // If the parametername is correct ("VehiclePaintJob")
                    cPaint = strval(ParameterValue); // Store the VehiclePaintJob
                if (strcmp(ParameterName, "VehicleSpoiler", false) == 0) // If the parametername is correct ("VehicleSpoiler")
                    components[0] = strval(ParameterValue); // Store the VehicleSpoiler
                if (strcmp(ParameterName, "VehicleHood", false) == 0) // If the parametername is correct ("VehicleHood")
                    components[1] = strval(ParameterValue); // Store the VehicleHood
                if (strcmp(ParameterName, "VehicleRoof", false) == 0) // If the parametername is correct ("VehicleRoof")
                    components[2] = strval(ParameterValue); // Store the VehicleRoof
                if (strcmp(ParameterName, "VehicleSideSkirt", false) == 0) // If the parametername is correct ("VehicleSideSkirt")
                    components[3] = strval(ParameterValue); // Store the VehicleSideSkirt
                if (strcmp(ParameterName, "VehicleLamps", false) == 0) // If the parametername is correct ("VehicleLamps")
                    components[4] = strval(ParameterValue); // Store the VehicleLamps
                if (strcmp(ParameterName, "VehicleNitro", false) == 0) // If the parametername is correct ("VehicleNitro")
                    components[5] = strval(ParameterValue); // Store the VehicleNitro
                if (strcmp(ParameterName, "VehicleExhaust", false) == 0) // If the parametername is correct ("VehicleExhaust")
                    components[6] = strval(ParameterValue); // Store the VehicleExhaust
                if (strcmp(ParameterName, "VehicleWheels", false) == 0) // If the parametername is correct ("VehicleWheels")
                    components[7] = strval(ParameterValue); // Store the VehicleWheels
                if (strcmp(ParameterName, "VehicleStereo", false) == 0) // If the parametername is correct ("VehicleStereo")
                    components[8] = strval(ParameterValue); // Store the VehicleStereo
                if (strcmp(ParameterName, "VehicleHydraulics", false) == 0) // If the parametername is correct ("VehicleHydraulics")
                    components[9] = strval(ParameterValue); // Store the VehicleHydraulics
                if (strcmp(ParameterName, "VehicleFrontBumper", false) == 0) // If the parametername is correct ("VehicleFrontBumper")
                    components[10] = strval(ParameterValue); // Store the VehicleFrontBumper
                if (strcmp(ParameterName, "VehicleRearBumper", false) == 0) // If the parametername is correct ("VehicleRearBumper")
                    components[11] = strval(ParameterValue); // Store the VehicleRearBumper
                if (strcmp(ParameterName, "VehicleVentRight", false) == 0) // If the parametername is correct ("VehicleVentRight")
                    components[12] = strval(ParameterValue); // Store the VehicleVentRight
                if (strcmp(ParameterName, "VehicleVentLeft", false) == 0) // If the parametername is correct ("VehicleVentLeft")
                    components[13] = strval(ParameterValue); // Store the VehicleVentLeft

                if (strcmp(ParameterName, "Color1", false) == 0) // If the parametername is correct ("Color1")
                    Col1 = strval(ParameterValue); // Store the Color1
                if (strcmp(ParameterName, "Color2", false) == 0) // If the parametername is correct ("Color2")
                    Col2 = strval(ParameterValue); // Store the Color2

                if (strcmp(ParameterName, "VehicleX", false) == 0) // If the parametername is correct ("VehicleX")
                    cx = floatstr(ParameterValue); // Store the VehicleX
                if (strcmp(ParameterName, "VehicleY", false) == 0) // If the parametername is correct ("VehicleY")
                    cy = floatstr(ParameterValue); // Store the VehicleY
                if (strcmp(ParameterName, "VehicleZ", false) == 0) // If the parametername is correct ("VehicleZ")
                    cz = floatstr(ParameterValue); // Store the VehicleZ
                if (strcmp(ParameterName, "VehicleAngle", false) == 0) // If the parametername is correct ("VehicleAngle")
                    crot = floatstr(ParameterValue); // Store the VehicleAngle

                if (strcmp(ParameterName, "Clamped", false) == 0) // If the parametername is correct ("Clamped")
                {
                    if (strcmp(ParameterValue, "Yes", false) == 0) // If the value "Yes" was read
                        VehicleClamped = true; // Vehicle is clamped
                    else
                        VehicleClamped = false; // Vehicle is not clamped
                }

                if (strcmp(ParameterName, "[/Vehicle]", false) == 0) // If the parametername is correct ("[/Vehicle]")
                {
                    // Set both colors to 1 if they are 0 AND if there is a paintjob applied
                    if ((Col1 == 0) && (cPaint != 0))
                        Col1 = 1;
                    if ((Col2 == 0) && (cPaint != 0))
                        Col2 = 1;

                    // The "[/Vehicle]" is found, this means that all data about this vehicle is now stored in the variables
                    // Now add the vehicle to the house and set it's data
                    vid = House_AddVehicle(HouseID, cModel, cPaint, components, cx, cy, cz, crot, Col1, Col2);
                    AVehicleData[vid][Clamped] = VehicleClamped;
                    // Also set the fuel (set it to maximum when the fuel parameter wasn't inside the file)
                    if (cFuel == -1)
                    {
                        AVehicleData[vid][Fuel] = MaxFuel;
                    }
                    else // If the parameter was there, store it
                    {
                        AVehicleData[vid][Fuel] = cFuel;
                    }
                }
            }

            // Read the next line of the file
            fread(HFile, LineFromFile);
        }

        // Check if the maximum house-level isn't 0 (when updating to the new version)
        if (AHouseData[HouseID][HouseMaxLevel] == 0)
            AHouseData[HouseID][HouseMaxLevel] = 10; // Set the maximum level to 10

        // Close the file
        fclose(HFile);

        // Return if the file was read correctly
        return 1;
    }
    else
        return 0; // Return 0 if the file couldn't be read (doesn't exist)
}

// This function will save the given house
HouseFile_Save(HouseID)
{
    new file[100], File:HFile, LineForFile[100], vid;

    // Construct the complete filename for this house
    format(file, sizeof(file), HouseFile, HouseID);

    HFile = fopen(file, io_write); // Open the playerfile for writing

    format(LineForFile, 100, "HouseAddress %s\r\n", AHouseData[HouseID][HouseAddress]); // Construct the line: "HouseName <HouseName>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseName %s\r\n", AHouseData[HouseID][HouseName]); // Construct the line: "HouseName <HouseName>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseX %f\r\n", AHouseData[HouseID][HouseX]); // Construct the line: "HouseX <HouseX>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseY %f\r\n", AHouseData[HouseID][HouseY]); // Construct the line: "HouseY <HouseY>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseZ %f\r\n", AHouseData[HouseID][HouseZ]); // Construct the line: "HouseZ <HouseZ>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseLevel %i\r\n", AHouseData[HouseID][HouseLevel]); // Construct the line: "HouseLevel <HouseLevel>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HouseMaxLevel %i\r\n", AHouseData[HouseID][HouseMaxLevel]); // Construct the line: "HouseMaxLevel <HouseMaxLevel>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "HousePrice %i\r\n", AHouseData[HouseID][HousePrice]); // Construct the line: "HousePrice <HousePrice>"
    fwrite(HFile, LineForFile); // And save it to the file

    if (AHouseData[HouseID][Owned] == true) // Check if the house is owned
    {
        format(LineForFile, 100, "Owned Yes\r\n"); // Construct the line: "Owned Yes"
        fwrite(HFile, LineForFile); // And save it to the file
    }
    else
    {
        format(LineForFile, 100, "Owned No\r\n"); // Construct the line: "Owned No"
        fwrite(HFile, LineForFile); // And save it to the file
    }

    format(LineForFile, 100, "Owner %s\r\n", AHouseData[HouseID][Owner]); // Construct the line: "Owner <Owner>"
    fwrite(HFile, LineForFile); // And save it to the file

    format(LineForFile, 100, "Insurance %i\r\n", AHouseData[HouseID][Insurance]); // Construct the line: "Insurance <Insurance>"
    fwrite(HFile, LineForFile); // And save it to the file



    // Save the vehicle-data for every vehicle added to the house
    for (new CarSlot; CarSlot < 10; CarSlot++)
    {
        // If a valid vehicle-id has been found
        if (AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
        {
            // Get the vehicle id
            vid = AHouseData[HouseID][VehicleIDs][CarSlot];

            format(LineForFile, 100, "[Vehicle]\r\n"); // Construct the line: "[Vehicle]"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "Pass %s\r\n", AVehicleData[vid][Pass]); // Construct the line: "VehicleModel <VehicleModel>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleModel %i\r\n", AVehicleData[vid][Model]); // Construct the line: "VehicleModel <VehicleModel>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "Fuel %i\r\n", AVehicleData[vid][Fuel]); // Construct the line: "Fuel <Fuel>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehiclePaintJob %i\r\n", AVehicleData[vid][PaintJob]); // Construct the line: "VehiclePaintJob <VehiclePaintJob>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleSpoiler %i\r\n", AVehicleData[vid][Components][0]); // Construct the line: "VehicleSpoiler <VehicleSpoiler>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleHood %i\r\n", AVehicleData[vid][Components][1]); // Construct the line: "VehicleHood <VehicleHood>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleRoof %i\r\n", AVehicleData[vid][Components][2]); // Construct the line: "VehicleRoof <VehicleRoof>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleSideSkirt %i\r\n", AVehicleData[vid][Components][3]); // Construct the line: "VehicleSideSkirt <VehicleSideSkirt>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleLamps %i\r\n", AVehicleData[vid][Components][4]); // Construct the line: "VehicleLamps <VehicleLamps>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleNitro %i\r\n", AVehicleData[vid][Components][5]); // Construct the line: "VehicleNitro <VehicleNitro>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleExhaust %i\r\n", AVehicleData[vid][Components][6]); // Construct the line: "VehicleSpoiler <VehicleSpoiler>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleWheels %i\r\n", AVehicleData[vid][Components][7]); // Construct the line: "VehicleWheels <VehicleWheels>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleStereo %i\r\n", AVehicleData[vid][Components][8]); // Construct the line: "VehicleStereo <VehicleStereo>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleHydraulics %i\r\n", AVehicleData[vid][Components][9]); // Construct the line: "VehicleHydraulics <VehicleHydraulics>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleFrontBumper %i\r\n", AVehicleData[vid][Components][10]); // Construct the line: "VehicleFrontBumper <VehicleFrontBumper>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleRearBumper %i\r\n", AVehicleData[vid][Components][11]); // Construct the line: "VehicleRearBumper <VehicleRearBumper>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleVentRight %i\r\n", AVehicleData[vid][Components][12]); // Construct the line: "VehicleVentRight <VehicleVentRight>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleVentLeft %i\r\n", AVehicleData[vid][Components][13]); // Construct the line: "VehicleVentLeft <VehicleVentLeft>"
            fwrite(HFile, LineForFile); // And save it to the file

            format(LineForFile, 100, "Color1 %i\r\n", AVehicleData[vid][Color1]); // Construct the line: "Color1 <Color1>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "Color2 %i\r\n", AVehicleData[vid][Color2]); // Construct the line: "Color2 <Color2>"
            fwrite(HFile, LineForFile); // And save it to the file

            format(LineForFile, 100, "VehicleX %f\r\n", AVehicleData[vid][SpawnX]); // Construct the line: "VehicleVentLeft <VehicleVentLeft>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleY %f\r\n", AVehicleData[vid][SpawnY]); // Construct the line: "VehicleVentLeft <VehicleVentLeft>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleZ %f\r\n", AVehicleData[vid][SpawnZ]); // Construct the line: "VehicleVentLeft <VehicleVentLeft>"
            fwrite(HFile, LineForFile); // And save it to the file
            format(LineForFile, 100, "VehicleAngle %f\r\n", AVehicleData[vid][SpawnRot]); // Construct the line: "VehicleVentLeft <VehicleVentLeft>"
            fwrite(HFile, LineForFile); // And save it to the file

            if (AVehicleData[vid][Clamped] == true)
                format(LineForFile, 100, "Clamped Yes\r\n"); // Construct the line: "Clamped <Yes>"
            else
                format(LineForFile, 100, "Clamped No\r\n"); // Construct the line: "Clamped <No>"

            fwrite(HFile, LineForFile); // And save it to the file

            format(LineForFile, 100, "[/Vehicle]\r\n"); // Construct the line: "[/Vehicle]"
            fwrite(HFile, LineForFile); // And save it to the file
        }
    }

    fclose(HFile); // Close the file

    return 1;
}
Reply


Messages In This Thread
Vehicle password saving - by Hessu - 28.05.2015, 11:45
Re: Vehicle password saving - by Konstantinos - 28.05.2015, 12:16
Re: Vehicle password saving - by Hessu - 28.05.2015, 14:09
Re: Vehicle password saving - by Hessu - 31.05.2015, 04:46
Re: Vehicle password saving - by Konstantinos - 31.05.2015, 11:10
Re: Vehicle password saving - by Hessu - 31.05.2015, 12:42

Forum Jump:


Users browsing this thread: 1 Guest(s)