Loads houses that are not even made.
#1

pawn Код:
stock LoadHouses()
{
    new name[128], value[128];
    new FileName[128];
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);
        }
           
    if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
    {
        HouseVar[i][LockStatus] = 0;
        HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }
    else
    {
        HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }

            printf("["ServerName"] House %d spawned.", i);
            SpawnedHouses++;
       }
    return 1;
}
Theres my LoadHouses code, which goes on my ongamemodeinit.

Now, I have 1 house made but when I load up my gamemode..
pawn Код:
[17:23:22] [Aidan®¶'s RP] House 1954 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1955 spawned.
[17:23:22] [Aidan®¶'s RP] House 1956 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1957 spawned.
[17:23:22] [Aidan®¶'s RP] House 1958 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1959 spawned.
[17:23:22] [Aidan®¶'s RP] House 1960 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1961 spawned.
[17:23:22] [Aidan®¶'s RP] House 1962 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1963 spawned.
[17:23:22] [Aidan®¶'s RP] House 1964 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1965 spawned.
[17:23:22] [Aidan®¶'s RP] House 1966 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1967 spawned.
[17:23:22] [Aidan®¶'s RP] House 1968 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1969 spawned.
[17:23:22] [Aidan®¶'s RP] House 1970 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1971 spawned.
[17:23:22] [Aidan®¶'s RP] House 1972 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1973 spawned.
[17:23:22] [Aidan®¶'s RP] House 1974 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1975 spawned.
[17:23:22] [Aidan®¶'s RP] House 1976 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1977 spawned.
[17:23:22] [Aidan®¶'s RP] House 1978 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1979 spawned.
[17:23:22] [Aidan®¶'s RP] House 1980 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1981 spawned.
[17:23:22] [Aidan®¶'s RP] House 1982 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1983 spawned.
[17:23:22] [Aidan®¶'s RP] House 1984 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1985 spawned.
[17:23:22] [Aidan®¶'s RP] House 1986 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1987 spawned.
[17:23:22] [Aidan®¶'s RP] House 1988 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1989 spawned.
[17:23:22] [Aidan®¶'s RP] House 1990 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1991 spawned.
[17:23:22] [Aidan®¶'s RP] House 1992 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1993 spawned.
[17:23:22] [Aidan®¶'s RP] House 1994 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1995 spawned.
[17:23:22] [Aidan®¶'s RP] House 1996 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1997 spawned.
[17:23:22] [Aidan®¶'s RP] House 1998 spawned.
[17:23:22] [Aidan®¶'
s RP] House 1999 spawned.
And so on and so forth. How would I make it so it doesn't spawn ones that are not even made yet?

My MAX_HOUSES are set for 2000
Reply
#2

You 'COULD' lower the MAX_HOUSES, keep raising it every 10 houses as your going to make them
Reply
#3

pawn Код:
stock LoadHouses()
{
    new name[128], value[128];
    new FileName[128];
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);
            if(HouseVar[i][hExteriorX] < 2) // Breaks the loop if the X coordinates are under 2. Should work I guess.
                break;
        }
    }            
    if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
    {
        HouseVar[i][LockStatus] = 0;
        HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }
    else
    {
        HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }

    printf("["ServerName"] House %d spawned.", i);
    SpawnedHouses++;
    return 1;
}
Not to good with INI and so on, but I guess this would be one solution.
Reply
#4

I would go with the next:
pawn Код:
stock LoadHouses()
{
    new name[128], value[128];
    new FileName[128];
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);
            printf("["ServerName"] House %d spawned.", i);
            SpawnedHouses++;
            if(HouseVar[i][hExteriorX] < 2) // Breaks the loop if the X coordinates are under 2. Should work I guess.
                break;
        }
    }
    if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
    {
        HouseVar[i][LockStatus] = 0;
        HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }
    else
    {
        HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }
    return 1;
}
As with the code Knappen posted it will do:
pawn Код:
printf("["ServerName"] House %d spawned.", i);
SpawnedHouses++;
also if the house file isn't found.

Best regards,
Jesse
Reply
#5

Your printf is out of ANY condition, so no matter if it's loading or not, it's gonna print that. Put the printf under a IF condition where you get all the house variables (if file exists.)
Reply
#6

I've been reading up a bit about files, the best way to do it is this. (Should've been kind of obvious to all of us I guess)

pawn Код:
stock LoadHouses()
{
    new FileName[13]; // Assuming you have 1,000,000 (0-999,999) houses, this is never going to be over 13.
    new HousesLoaded;
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);    
            HousesLoaded++;
            if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
            {
                HouseVar[i][LockStatus] = 0;
                HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
            }
            else
            {
                HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
            }            
        }
        else break;        
    }      
    printf("["ServerName"] %d Houses loaded.", HousesLoaded);
    return 1;
}
Reply
#7

Quote:
Originally Posted by Knappen
Посмотреть сообщение
I've been reading up a bit about files, the best way to do it is this. (Should've been kind of obvious to all of us I guess)

pawn Код:
stock LoadHouses()
{
    new FileName[13]; // Assuming you have 1,000,000 (0-999,999) houses, this is never going to be over 13.
    new HousesLoaded;
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);    
            HousesLoaded++;
            if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
            {
                HouseVar[i][LockStatus] = 0;
                HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
            }
            else
            {
                HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
            }            
        }
        else break;        
    }      
    printf("["ServerName"] %d Houses loaded.", HousesLoaded);
    return 1;
}
I put that code in then when I start the server with 2 houses on, it just says 0 houses loaded and then the houses dont spawn, any idea why?
Reply
#8

Are you sure the houses are named correctly?

EDIT: Wait, sorry, my fault. Change FileName[13] to FileName[30]. I only counted Houses_%d.
Reply
#9

What if you try this? (Response to your first post)

pawn Код:
stock LoadHouses()
{
    new name[128], value[128];
    new FileName[128];
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(FileName, sizeof(FileName), "Houses/House_%d.ini", i);
        if(fexist(FileName))
        {
            INI_Int("InteriorID", HouseVar[i][hInteriorID]);
            INI_Float("InteriorX", HouseVar[i][hInteriorX]);
            INI_Float("InteriorY", HouseVar[i][hInteriorY]);
            INI_Float("InteriorZ", HouseVar[i][hInteriorZ]);

            INI_Int("HousePrice", HouseVar[i][HousePrice]);

            INI_Int("ExteriorID", HouseVar[i][hExteriorID]);
            INI_Float("ExteriorX", HouseVar[i][hExteriorX]);
            INI_Float("ExteriorY", HouseVar[i][hExteriorY]);
            INI_Float("ExteriorZ", HouseVar[i][hExteriorZ]);

            INI_Int("Owner", HouseVar[i][hOwner]);

            INI_Int("LockStatus", HouseVar[i][LockStatus]);
 
           
    if(strcmp(HouseVar[i][hOwner], "Nobody", true) == 0)
    {
        HouseVar[i][LockStatus] = 0;
        HouseVar[i][HPickupID] = CreateDynamicPickup(1273, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }
    else
    {
        HouseVar[i][HPickupID] = CreateDynamicPickup(1272, 23, HouseVar[i][hExteriorX], HouseVar[i][hExteriorY], HouseVar[i][hExteriorZ], 0, -1, -1, 150.0);
    }

            printf("["ServerName"] House %d spawned.", i);
            SpawnedHouses++;
       }
}
    return 1;
}
Fix the indentation, I did it on the forums.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)