SA-MP Forums Archive
mySQL loading system - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: mySQL loading system (/showthread.php?tid=662932)



mySQL loading system - ShadowMortar - 16.01.2019

Код:
forward LoadHouses();
public LoadHouses()
{
    new PlayerName1[MAX_PLAYER_NAME], str[500];
    for(new id=1; id<sizeof(HouseInfo); id++)
    {
        HouseInfo[id][ID]= cache_get_field_content_int(dbhandle, "ID");
        HouseInfo[id][Owner] = cache_get_field_content(id, "Owner", PlayerName1, dbhandle);
        strmid(HouseInfo[id][Owner], PlayerName1, 0, sizeof(PlayerName1), sizeof(PlayerName1));
        HouseInfo[id][HouseX]= cache_get_field_content_float(dbhandle, "HX");
        HouseInfo[id][HouseY]= cache_get_field_content_float(dbhandle, "HY");
        HouseInfo[id][HouseZ]= cache_get_field_content_float(dbhandle, "HZ");
        HouseInfo[id][HouseXX]= cache_get_field_content_float(dbhandle, "HouseXX");
        HouseInfo[id][HouseYY]= cache_get_field_content_float(dbhandle, "HouseYY");
        HouseInfo[id][HouseZZ]= cache_get_field_content_float(dbhandle, "HouseZZ");
        HouseInfo[id][World]= cache_get_field_content_int(dbhandle, "World");
        HouseInfo[id][Price]= cache_get_field_content_int(dbhandle, "Price");
        HouseInfo[id][ForSale]= cache_get_field_content_int(dbhandle, "ForSale");
        if(HouseInfo[id][ForSale] == 1)
        {
                HouseInfo[id][Pickup] = AddStaticPickup(1273, 23, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ], HouseInfo[id][World]);
                format(str, sizeof(str), "House\nPrice: %d\nType /buyhouse to purchase it\nType /enter to go inside", HouseInfo[id][Price]);
                HouseTxt[id]=CreateDynamic3DTextLabel(str ,COLOR_ORANGE, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ],30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 7.0);
                return 1;
        }
        if(HouseInfo[id][ForSale] == 0)
        {
                HouseInfo[id][Pickup] = AddStaticPickup(1273, 23, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ], HouseInfo[id][World]);
                format(str, sizeof(str), "House\nOwner: %s\nType /enter to go inside", HouseInfo[id][Owner]);
                HouseTxt[id]=CreateDynamic3DTextLabel(str ,COLOR_ORANGE, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ],30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 7.0);
                return 1;
        }
    }
    return 1;
}
In mysql, exact location and everything is properly inserted, no errors at all. But my problem is when the server starts, only 1 house spawns, while other 10 remain not spawned. Can you help me?


Re: mySQL loading system - Calisthenics - 16.01.2019

https://sampwiki.blast.hk/wiki/MySQL/R3..._field_content
https://sampwiki.blast.hk/wiki/MySQL/R3...ld_content_int
https://sampwiki.blast.hk/wiki/MySQL/R3..._content_float

First parameter is row, not connection handle.

The loop is wrong, it must start from index 0 until rows-1 otherwise you are trying to retrieve data from an invalid row.

Strings are passed by reference, the function does not return any specific value. You will need to use the length parameter when using enum-arrays.

pawn Код:
for(new id=0, rows = cache_get_row_count(); id<rows; id++)
{
    HouseInfo[id][ID]= cache_get_field_content_int(id, "ID", dbhandle);
    cache_get_field_content(id, "Owner", HouseInfo[id][Owner], dbhandle, MAX_PLAYER_NAME);
    HouseInfo[id][HouseX]= cache_get_field_content_float(id, "HX", dbhandle);
    ...
}



Re: mySQL loading system - ShadowMortar - 16.01.2019

Quote:
Originally Posted by Calisthenics
Посмотреть сообщение
https://sampwiki.blast.hk/wiki/MySQL/R3..._field_content
https://sampwiki.blast.hk/wiki/MySQL/R3...ld_content_int
https://sampwiki.blast.hk/wiki/MySQL/R3..._content_float

First parameter is row, not connection handle.

The loop is wrong, it must start from index 0 until rows-1 otherwise you are trying to retrieve data from an invalid row.

Strings are passed by reference, the function does not return any specific value. You will need to use the length parameter when using enum-arrays.

pawn Код:
for(new id=0, rows = cache_get_row_count(); id<rows; id++)
{
    HouseInfo[id][ID]= cache_get_field_content_int(id, "ID", dbhandle);
    cache_get_field_content(id, "Owner", HouseInfo[id][Owner], dbhandle, MAX_PLAYER_NAME);
    HouseInfo[id][HouseX]= cache_get_field_content_float(id, "HX", dbhandle);
    ...
}
Код:
forward LoadHouses();
public LoadHouses()
{
    new PlayerName1[MAX_PLAYER_NAME], str[500];
    //for(new id=1; id<sizeof(HouseInfo); id++)
    for(new id=0, rows = cache_get_row_count(); id<rows; id++)
    {
    	HouseInfo[id][ID]= cache_get_field_content_int(id, "ID", dbhandle);
	    cache_get_field_content(id, "Owner", HouseInfo[id][Owner], dbhandle, MAX_PLAYER_NAME);
	    HouseInfo[id][HouseX]= cache_get_field_content_float(id, "HX", dbhandle);
	    HouseInfo[id][HouseY]= cache_get_field_content_float(id, "HY", dbhandle);
	    HouseInfo[id][HouseZ]= cache_get_field_content_float(id, "HZ", dbhandle);
	    HouseInfo[id][HouseXX]= cache_get_field_content_float(id, "HouseXX", dbhandle);
	    HouseInfo[id][HouseYY]= cache_get_field_content_float(id, "HouseYY", dbhandle);
	    HouseInfo[id][HouseZZ]= cache_get_field_content_float(id, "HouseZZ", dbhandle);
	    HouseInfo[id][World]= cache_get_field_content_int(id, "HWorld", dbhandle);
	    HouseInfo[id][Price]= cache_get_field_content_int(id, "Price", dbhandle);
	    HouseInfo[id][ForSale]= cache_get_field_content_int(id, "ForSale", dbhandle);
       /* HouseInfo[id][ID]= cache_get_field_content_int(dbhandle, "ID");
        HouseInfo[id][Owner] = cache_get_field_content(id, "Owner", PlayerName1, dbhandle);
        strmid(HouseInfo[id][Owner], PlayerName1, 0, sizeof(PlayerName1), sizeof(PlayerName1));
        HouseInfo[id][HouseX]= cache_get_field_content_float(dbhandle, "HX");
        HouseInfo[id][HouseY]= cache_get_field_content_float(dbhandle, "HY");
        HouseInfo[id][HouseZ]= cache_get_field_content_float(dbhandle, "HZ");
        HouseInfo[id][HouseXX]= cache_get_field_content_float(dbhandle, "HouseXX");
        HouseInfo[id][HouseYY]= cache_get_field_content_float(dbhandle, "HouseYY");
        HouseInfo[id][HouseZZ]= cache_get_field_content_float(dbhandle, "HouseZZ");
        HouseInfo[id][World]= cache_get_field_content_int(dbhandle, "HWorld");
        HouseInfo[id][Price]= cache_get_field_content_int(dbhandle, "Price");
        HouseInfo[id][ForSale]= cache_get_field_content_int(dbhandle, "ForSale");*/
        if(HouseInfo[id][ForSale] == 1)
        {
                HouseInfo[id][Pickup] = AddStaticPickup(1273, 23, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ], HouseInfo[id][World]);
                format(str, sizeof(str), "House\nPrice: %d\nType /buyhouse to purchase it\nType /enter to go inside", HouseInfo[id][Price]);
                HouseTxt[id]=CreateDynamic3DTextLabel(str ,COLOR_ORANGE, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ],30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 7.0);
                return 1;
        }
        if(HouseInfo[id][ForSale] == 0)
        {
                HouseInfo[id][Pickup] = AddStaticPickup(1273, 23, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ], HouseInfo[id][World]);
                format(str, sizeof(str), "House\nOwner: %s\nType /enter to go inside", HouseInfo[id][Owner]);
                HouseTxt[id]=CreateDynamic3DTextLabel(str ,COLOR_ORANGE, HouseInfo[id][HouseX], HouseInfo[id][HouseY], HouseInfo[id][HouseZ],30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 7.0);
                return 1;
        }
        return 1;
    }
    return 1;
}
Not working


Re: mySQL loading system - Calisthenics - 16.01.2019

Remove return 1; from the two if statements and at the end of the loop.


Re: mySQL loading system - andrejc999 - 17.01.2019

You are basically returning after the first house was loaded. Just do as Calisthenics said:

Quote:
Originally Posted by Calisthenics
Посмотреть сообщение
Remove return 1; from the two if statements and at the end of the loop.