Код:
/*
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;
}
Let's start off with clarifying this one - Do you even have a MySQL host and database set up?
Once done, you can start sending saving/loading queries to the corresponding tables in your database, for example:
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.