[HELP] Dynamic Pickups [Saving/Loading]
#1

Hello everybody.

So, I tried to make a Dynamic Pickups System.

I made creating/saving system and commands... But I don't know how to load pickups...

Code: http://pastebin.com/g77j60BK

pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
#include <YSI\y_ini>
 
#define MAX_PICKUP 1000
 
#define PATH "/Pickups/%d.ini"
 
enum pInfo
{
        pID,
        pType,
        Float:pX,
        Float:pY,
        Float:pZ
}
new PickupInfo[MAX_PICKUP][pInfo];
new idpickup;
 
CMD:createpickup(playerid, params[])
{
        new ID, Type, Float:X, Float:Y, Float:Z;
        if(sscanf(params, "ii", ID, Type)) return SendClientMessage(playerid, -1, "{FF0000}USAGE: {FFFFFF}/CreatePickup [Pickup ID] [Pickup Type]");
        if(Type > 10) return SendClientMessage(playerid, -1, "{FF0000}ERROR: {FFFFFF}Invalid type. [0-10]");
        PickupInfo[idpickup][pID] = ID;
        PickupInfo[idpickup][pType] = Type;
        PickupInfo[idpickup][pX] = X;
        PickupInfo[idpickup][pY] = Y;
        PickupInfo[idpickup][pZ] = Z;
        new INI:File = INI_Open(PickPath());
        INI_SetTag(File, "|| Pickups ||");
        INI_WriteInt(File, "Pickup ID", PickupInfo[idpickup][pID]);
        INI_WriteInt(File, "Pickup Type", PickupInfo[idpickup][pType]);
        INI_WriteFloat(File, "Pickup X", PickupInfo[idpickup][pX]);
        INI_WriteFloat(File, "Pickup Y", PickupInfo[idpickup][pY]);
        INI_WriteFloat(File, "Pickup Z", PickupInfo[idpickup][pZ]);
        INI_Close(File);
        CreatePickup(ID, Type, X, Y, Z, -1);
        idpickup++;
        return 1;
}
 
stock PickPath()
{
        new strs[10];
        format(strs, sizeof(strs), PATH, idpickup);
        return strs;
}
 
 
stock LoadPickups()
{
        for(new i = 0; i < MAX_PICKUP; i++)
        {
                // ... I don't know how continue here.
        }
}
So, how I start with loading. + rep for helper
Reply
#2

i told you in your last post but you didn't accept my codes !!
but again i say ... PickupPath hase parameter ! it isn't a loop that you make it like this: Pickuppath()
i edited your code

pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
#include <YSI\y_ini>

#define MAX_PICKUP 1000
 
#define PATH "/Pickups/%d.ini"
 
enum pInfo
{
        pID,
        pType,
        Float:pX,
        Float:pY,
        Float:pZ
}
new PickupInfo[MAX_PICKUP][pInfo];
new idpickup;

//>loading pickups function
forward LoadPickups(id, name[], value[]);
public LoadPickups(id, name[], value[])
{
    INI_Int("Pickup ID",PickupInfo[id][pID]);
    INI_Int("Pickup Type",PickupInfo[id][pType]);
    INI_Float("Pickup X",PickupInfo[id][pX]);
    INI_Float("Pickup Y",PickupInfo[id][pY]);
    INI_Float("Pickup Z",PickupInfo[id][pZ]);
    return 1;
}

CMD:createpickup(playerid, params[])
{
        new ID, Type, Float:X, Float:Y, Float:Z;
        if(sscanf(params, "ii", ID, Type)) return SendClientMessage(playerid, -1, "{FF0000}USAGE: {FFFFFF}/CreatePickup [Pickup ID] [Pickup Type]");
        if(Type > 10) return SendClientMessage(playerid, -1, "{FF0000}ERROR: {FFFFFF}Invalid type. [0-10]");
        PickupInfo[idpickup][pID] = ID;
        PickupInfo[idpickup][pType] = Type;
        PickupInfo[idpickup][pX] = X;
        PickupInfo[idpickup][pY] = Y;
        PickupInfo[idpickup][pZ] = Z;
        new INI:File = INI_Open(PickPath());
        INI_SetTag(File, "|| Pickups ||");
        INI_WriteInt(File, "Pickup ID", PickupInfo[idpickup][pID]);
        INI_WriteInt(File, "Pickup Type", PickupInfo[idpickup][pType]);
        INI_WriteFloat(File, "Pickup X", PickupInfo[idpickup][pX]);
        INI_WriteFloat(File, "Pickup Y", PickupInfo[idpickup][pY]);
        INI_WriteFloat(File, "Pickup Z", PickupInfo[idpickup][pZ]);
        INI_Close(File);
        CreatePickup(ID, Type, X, Y, Z, -1);
        idpickup++;
        return 1;
}

//your stock here don't have any parameter
//you define "PATH" like this: "/Pickups/%d.ini" ... so what is %d ? this not ini file name ?!!
//so ? where you used it in stock ? your stock is () !
//it have to be like this: stock PickPath(pickupid)
stock PickPath(pickupdid)
{
        new strs[10];
        format(strs, sizeof(strs), PATH, pickupdid);
        return strs;
}
 
 
stock LoadPickups()
{
    for(new i = 0; i < MAX_PICKUP; i++)
    {
        if(fexist(PickPath(i)))
        {
        INI_ParseFile(PickPath(i), "LoadPickups", .bExtra = true, .extra = i); //>Loading pickup id , type and position into variables.
        }
    }
}
//after this loop you loaded pickup information into variable...
//to create them make another loop between variables
EDIT: Creating Pickups:

pawn Код:
stock CreatePickups()
{
    for(new i = 0; i < MAX_PICKUP; i++)
    {
     CreatePickup(PickupInfo[i][pID], PickupInfo[i][pType], PickupInfo[i][pX], PickupInfo[i][pY], PickupInfo[i][pZ], -1);
    }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)