#1

I am looking for save system for this license plate system
Код:
	

    /*
                    FS:Plate v3
                            Made by Marricio / Mecaurio.
     
            NOTE:
             When you change the plate the Z angle is modified that means it will work as 'flip' command too.
    */
     
    #include a_samp
    #include zcmd
     
    #define DIALOG_PLATE                    1000
     
    new vehiclePlate[MAX_VEHICLES][128];
    new szString[128];
     
    stock StripText(text[])
    {
        for(new i=0; i<strlen(text); i++)
        {
            if(text[i] == '(' && text[i+7] == ')')
            {
                text[i] = '{';
                text[i+7] = '}';
            }
        }
        return 1;
    }
     
    stock strreplace(_string[], const search[], const replacement[], bool:ignorecase = false, pos = 0, limit = -1, maxlength = sizeof (_string) ) {
        // No need to do anything if the limit is 0.
        if (limit == 0)
            return 0;
     
        new
                 sublen = strlen(search),
                 replen = strlen(replacement),
            bool:packed = ispacked(_string),
                 maxlen = maxlength,
                 len = strlen(_string),
                 count = 0
        ;
     
     
        // "maxlen" holds the max _string length (not to be confused with "maxlength", which holds the max. array size).
        // Since packed _strings hold 4 characters per array slot, we multiply "maxlen" by 4.
        if (packed)
            maxlen *= 4;
     
        // If the length of the sub_string is 0, we have nothing to look for..
        if (!sublen)
            return 0;
     
        // In this line we both assign the return value from "strfind" to "pos" then check if it's -1.
        while (-1 != (pos = strfind(_string, search, ignorecase, pos))) {
            // Delete the _string we found
            strdel(_string, pos, pos + sublen);
     
            len -= sublen;
     
            // If there's anything to put as replacement, insert it. Make sure there's enough room first.
            if (replen && len + replen < maxlen) {
                strins(_string, replacement, pos, maxlength);
     
                pos += replen;
                len += replen;
            }
     
            // Is there a limit of number of replacements, if so, did we break it?
            if (limit != -1 && ++count >= limit)
                break;
        }
     
        return count;
    }
     
    CMD:plate( playerid, params[] )
    {
            if( !IsPlayerInAnyVehicle( playerid ) ) return SendClientMessage( playerid, -1, "{c0c0c0}Error:{ffffff} You need to be in a vehicle." );
     
            new dialogstring[600];
     
            strcat( dialogstring, "{ffffff}Write in the text to be in the vehicle's plate\n\n{248eff}FORMAT TAGS:\n_______________________________________________________________________________\n\n" );
            strcat( dialogstring, "{ffffff}(white) white text\n{F21D1D}(red) red text\n{1D5DF2}(blue) blue text\n{F2EB1D}(yellow) yellow text\n{DD1DF2}(purple) purple text\n{68C24F}(green) green text\n" );
            strcat( dialogstring, "{ffffff}Or if you want to use hexadecimal numbers use the following format: (FFFFFF).\n\n{ff0000}Don't make the text too long!." );
     
            ShowPlayerDialog( playerid, DIALOG_PLATE, DIALOG_STYLE_INPUT, "{ffffff}Write in the text to be displayed in the plate", dialogstring, "Set", "Cancel" );
            return 1;
    }
     
    CMD:resetplate( playerid, params[] )
    {
            if( isnull( params ) ) return SendClientMessage( playerid, -1, "{c0c0c0}Syntax:{ffffff} /resetplate [vehicleid]" );
            if( !IsPlayerAdmin( playerid ) ) return SendClientMessage( playerid, -1, "{c0c0c0}Error:{ffffff} You're not an administrator." );
     
            new Float:vehicle_pos[4], vehicleid = strval( params );
            format( vehiclePlate[vehicleid], 128, "default" );
            SetVehicleNumberPlate( vehicleid, "default" );
     
            GetVehiclePos( vehicleid, vehicle_pos[0], vehicle_pos[1], vehicle_pos[2] );
            GetVehicleZAngle( vehicleid, vehicle_pos[3] );
            SetVehicleToRespawn( vehicleid );
            SetVehiclePos( vehicleid, vehicle_pos[0], vehicle_pos[1], vehicle_pos[2] );
            SetVehicleZAngle( vehicleid, vehicle_pos[3] );
            return 1;
    }
     
    CMD:getplate( playerid, params[] )
    {
            if( isnull( params ) ) return SendClientMessage( playerid, -1, "{c0c0c0}Syntax:{ffffff} /getplate [vehicleid]" );
     
            format( szString, 128, "[VEHICLE ID: %d | PLATE: %s]", strval( params ), vehiclePlate[strval( params )] );
            SendClientMessage( playerid, -1, szString );
     
            return 1;
    }
     
    public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[] )
    {
            if( dialogid == DIALOG_PLATE )
            {
                if( !response ) return 1;
     
                    new newplate[128];
                    format( newplate, 128, inputtext );
     
                    if( isnull( newplate ) )
                    {
                        new dialogstring[600];
                            strcat( dialogstring, "{ffffff}Write in the text to be in the vehicle's plate\n\n{248eff}FORMAT TAGS:\n_______________________________________________________________________________\n\n" );
                            strcat( dialogstring, "{ffffff}(white) white text\n{F21D1D}(red) red text\n{1D5DF2}(blue) blue text\n{F2EB1D}(yellow) yellow text\n{DD1DF2}(purple) purple text\n{68C24F}(green) green text\n" );
                            strcat( dialogstring, "{ffffff}Or if you want to use hexadecimal numbers use the following format: (FFFFFF).\n\n{ff0000}Don't make the text too long! (excluding color formats)." );
     
                            ShowPlayerDialog( playerid, DIALOG_PLATE, DIALOG_STYLE_INPUT, "{ffffff}Write in the text to be displayed in the plate", dialogstring, "Set", "Cancel" );
                            return 1;
            }
           
                    strreplace( newplate, "(white)", "{FFFFFF}", true );
                    strreplace( newplate, "(red)", "{F21D1D}", true );
                    strreplace( newplate, "(blue)", "{1D5DF2}", true );
                    strreplace( newplate, "(yellow)", "{F2EB1D}", true );
                    strreplace( newplate, "(purple)", "{DD1DF2}", true );
                    strreplace( newplate, "(green)", "{68C24F}", true );
                    StripText( newplate ); // This is to detect and fix hexadecimal numbers.
     
                    new playervehicle, Float:vehicle_pos[4];
                    playervehicle = GetPlayerVehicleID( playerid );
     
                    format( vehiclePlate[playervehicle], 128, "%s", newplate );
                    SetVehicleNumberPlate( playervehicle, newplate );
     
                    GetPlayerPos( playerid, vehicle_pos[0], vehicle_pos[1], vehicle_pos[2] );
                    GetVehicleZAngle( playervehicle, vehicle_pos[3] );
                    SetVehicleToRespawn( playervehicle );
                    SetVehiclePos( playervehicle, vehicle_pos[0], vehicle_pos[1], vehicle_pos[2] );
                    SetVehicleZAngle( playervehicle, vehicle_pos[3] );
                    PutPlayerInVehicle( playerid, playervehicle, 0 );
     
                    format( szString, 128, "Your vehicle plate has succesfully changed to %s.", newplate );
                    SendClientMessage( playerid, -1, szString );
            }
            return 1;
    }
Reply
#2

Let's start off with clarifying this one - Do you even have a MySQL host and database set up?
Reply
#3

@batonsa yes I have.
Reply
#4

In that case you also need to have your gamemode linked:

Код:
#define MYSQL_HOST "localhost"//the host, user and pass are set for unmodified wamp on localhost
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DB "dbname"//your database name
And connected to your database(this could go anywhere):

Код:
forward ConnectMySQL();
public ConnectMySQL()
{
	mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS))
 
        if(mysql_ping() == 1)
        {    
            mysql_debug(1);//turn off by setting to 0, could be 1 for starters for testing purposes
	    printf("[MYSQL]: Connection to database `%s` succesful!", SQL_DB);
	} 
	else
	{
	    printf("[MYSQL]: [ERROR]: Connection to database `%s` failed!", SQL_DB);
	}
	return 1;
}
Finally, you need to add the following call under your GameModeInit:

Код:
ConnectMySQL();
Once done, you can start sending saving/loading queries to the corresponding tables in your database, for example:

SAVING:
Код:
mysql_query("INSERT INTO `vehicles` (`plate`) WHERE `ID` = '%d'", Plate[vehicleid], vehicleid);
LOADING:
Код:
mysql_query("SELECT `plate` FROM `vehicles` WHERE `ID` = '%s'", vehicleid);
Note that the variable and table names i picked are just to set an example. You need to modify them accordingly to fit your script.

You could implement the above queries to wherever you want the way you want. That's up to you.
Reply
#5

Thanks, helped a lot
Reply


Forum Jump:


Users browsing this thread: