CMD:sellgarage(playerid, params[])
{
new id;
new price;
if(sscanf(params, "di", id, price)) return SCM(playerid, COLOR_BELGREEN, "» [USAGE]: /sellgarage [garage ID] [price]");
if((id < 1 || id >= MAX_GARAGES) || !GarageInfo[id][garageExists]) return SCM(playerid, COLOR_ERROR, "» You have specified an invalid garage ID.");
if(GarageInfo[id][garageOwnerID] != Player[playerid][ID]) return SCM(playerid, COLOR_ERROR, "» This garage is not yours.");
if(!GarageInfo[id][garageOwned]) return SCM(playerid, COLOR_ERROR, "» This garage can't be put for sale because it's unowned.");
if(GarageInfo[id][garagePlayerSellPrice] > 0) return SCM(playerid, COLOR_ERROR, "» This garage is already for sale. If you wish to change the price, you can use /changegarageprice.");
if((price < 1) || (price > 999999)) return SCM(playerid, COLOR_ERROR, "» Invalid price.");
PutGarageForSale(playerid, id, price);
RefreshGarage(id);
return 1;
}
GarageInfo[i][garageExists] = true;
When i create a garage, this is what i do with garageExists:
pawn Код:
|
GarageInfo[id][garageExists] = true;
[16:35:50] Garage is saved for id: 0 |
CMD:creategarage(playerid, params[])
{
if(Player[playerid][AdminLevel] < 5) return 0;
new id;
new price, size;
if(sscanf(params, "dd(0)", price, size))
{
SCM(playerid, COLOR_BELGREEN, "» [USAGE]: /creategarage [price] [size(default 0)]");
return SCM(playerid, COLOR_BELGREEN, "» Size: 0 - Small Garage , 1 - Medium Garage, 2 - Big Garage.");
}
if((size < 0) || (size > 2)) return SCM(playerid, COLOR_ERROR, "» Size must be from 0 to 2.");
if((price < 1) || (price > 999999)) return SCM(playerid, COLOR_ERROR, "» Invalid price.");
new query[300];
mysql_format(g_SQL, query, sizeof query, "INSERT INTO `garages` (`garagePrice`, `garageSize`) VALUES ('%d', '%d')", price, size);
mysql_tquery(g_SQL, query, "OnGarageCreated", "d", id);
GarageInfo[id][garageExists] = true;
GetPlayerPos(playerid, GarageInfo[id][garagePos][0], GarageInfo[id][garagePos][1], GarageInfo[id][garagePos][2]);
GetPlayerFacingAngle(playerid, GarageInfo[id][garagePos][3]);
GarageInfo[id][garagePos][0] = GarageInfo[id][garagePos][0] + (1.5 * floatsin(-GarageInfo[id][garagePos][3], degrees));
GarageInfo[id][garagePos][1] = GarageInfo[id][garagePos][1] + (1.5 * floatcos(-GarageInfo[id][garagePos][3], degrees));
GarageInfo[id][garageVW] = GetPlayerVirtualWorld(playerid);
GarageInfo[id][garagePrice] = price;
GarageInfo[id][garageSize] = size;
RefreshGarage(id);
SCMEX(playerid, COLOR_YELLOW, "» You have successfully created a garage. ID: %d - Price: %s - Size: %d", id, formatInt(price), size);
printf("Garage is saved for id: %d", id);
if(id == -1) return SCM(playerid, COLOR_ERROR, "» The server has reached the limit for garages.");
return 1;
}
function OnGarageCreated(gid)
{
if(gid == -1 || !GarageInfo[gid][garageExists]) return 0;
GarageInfo[gid][garageID] = cache_insert_id();
SaveGarage(gid);
return 1;
}
function LoadGarages()
{
for(new i, j = cache_num_rows(); i != j; i++)
{
if(i < MAX_GARAGES)
{
GarageInfo[i][garageExists] = true;
cache_get_value_int(i, "garageID", GarageInfo[i][garageID]);
cache_get_value_float(i, "garageX", GarageInfo[i][garagePos][0]);
cache_get_value_float(i, "garageY", GarageInfo[i][garagePos][1]);
cache_get_value_float(i, "garageZ", GarageInfo[i][garagePos][2]);
cache_get_value_float(i, "garageA", GarageInfo[i][garagePos][3]);
cache_get_value_int(i, "garageVW", GarageInfo[i][garageVW]);
cache_get_value_int(i, "garageOwnerID", GarageInfo[i][garageOwnerID]);
cache_get_value_int(i, "garageOwned", GarageInfo[i][garageOwned]);
cache_get_value_int(i, "garagePrice", GarageInfo[i][garagePrice]);
cache_get_value_int(i, "garagePlayerSellPrice", GarageInfo[i][garagePlayerSellPrice]);
cache_get_value_int(i, "garageSize", GarageInfo[i][garageSize]);
RefreshGarage(i);
}
}
return 1;
}
new id;
new Iterator:Garages<MAX_GARAGES>;
function LoadGarages()
{
new rows;
cache_get_row_count(rows);
if(!rows) return 1;
for(new i; i < rows; i++)
{
cache_get_value_int(i, "garageID", GarageInfo[i][garageID]);
cache_get_value_float(i, "garageX", GarageInfo[i][garagePos][0]);
cache_get_value_float(i, "garageY", GarageInfo[i][garagePos][1]);
cache_get_value_float(i, "garageZ", GarageInfo[i][garagePos][2]);
cache_get_value_float(i, "garageA", GarageInfo[i][garagePos][3]);
cache_get_value_int(i, "garageVW", GarageInfo[i][garageVW]);
cache_get_value_int(i, "garageOwnerID", GarageInfo[i][garageOwnerID]);
cache_get_value_int(i, "garageOwned", GarageInfo[i][garageOwned]);
cache_get_value_int(i, "garagePrice", GarageInfo[i][garagePrice]);
cache_get_value_int(i, "garagePlayerSellPrice", GarageInfo[i][garagePlayerSellPrice]);
cache_get_value_int(i, "garageSize", GarageInfo[i][garageSize]);
RefreshGarage(i);
Iter_Add(Garages, i);
}
return 1;
}
CMD:creategarage(playerid, params[])
{
if(Player[playerid][AdminLevel] < 5) return 0;
if(Iter_Free(Garages) >= MAX_GARAGES) return SCM(playerid, COLOR_ERROR, "» Server has reached max garages limit.");
new id = Iter_Free(Garages);
new price, size;
if(sscanf(params, "dd(0)", price, size))
{
SCM(playerid, COLOR_BELGREEN, "» [USAGE]: /creategarage [price] [size(default 0)]");
return SCM(playerid, COLOR_BELGREEN, "» Size: 0 - Small Garage , 1 - Medium Garage, 2 - Big Garage.");
}
if((size < 0) || (size > 2)) return SCM(playerid, COLOR_ERROR, "» Size must be from 0 to 2.");
if((price < 1) || (price > 999999)) return SCM(playerid, COLOR_ERROR, "» Invalid price.");
GetPlayerPos(playerid, GarageInfo[id][garagePos][0], GarageInfo[id][garagePos][1], GarageInfo[id][garagePos][2]);
GetPlayerFacingAngle(playerid, GarageInfo[id][garagePos][3]);
GarageInfo[id][garagePos][0] = GarageInfo[id][garagePos][0] + (1.5 * floatsin(-GarageInfo[id][garagePos][3], degrees));
GarageInfo[id][garagePos][1] = GarageInfo[id][garagePos][1] + (1.5 * floatcos(-GarageInfo[id][garagePos][3], degrees));
GarageInfo[id][garageVW] = GetPlayerVirtualWorld(playerid);
GarageInfo[id][garagePrice] = price;
GarageInfo[id][garageSize] = size;
Iter_Add(Garages, id);
new query[300];
mysql_format(g_SQL, query, sizeof query, "INSERT INTO `garages` (`garagePrice`, `garageSize`) VALUES ('%d', '%d')", price, size);
mysql_tquery(g_SQL, query, "OnQueryFinished", "dd", id, THREAD_CREATE_GARAGE);
RefreshGarage(id);
SCMEX(playerid, COLOR_YELLOW, "» You have successfully created a garage. ID: %d - Price: %s - Size: %d", GarageInfo[id][garageID], formatInt(price), size);
printf("Garage is saved for id: %d", id);
return 1;
}
function OnQueryFinished(extraid, threadid)
{
switch(threadid)
{
case THREAD_CREATE_GARAGE:
{
GarageInfo[extraid][garageID] = cache_insert_id();
SaveGarage(extraid);
}
}
return 1;
}
CMD:sellgarage(playerid, params[])
{
new id, price;
if(sscanf(params, "dd", id, price)) return SCM(playerid, COLOR_BELGREEN, "» [USAGE]: /sellgarage [garage ID] [price]");
if((id < 0 || id >= MAX_GARAGES || !GarageInfo[id][garageID])) return SCM(playerid, COLOR_ERROR, "» You have specified an invalid garage ID.");
if(GarageInfo[id][garageOwnerID] != Player[playerid][ID]) return SCM(playerid, COLOR_ERROR, "» This garage is not yours.");
if(!GarageInfo[id][garageOwned]) return SCM(playerid, COLOR_ERROR, "» This garage can't be put for sale because it's unowned.");
if(GarageInfo[id][garagePlayerSellPrice] > 0) return SCM(playerid, COLOR_ERROR, "» This garage is already for sale. If you wish to change the price, you can use /changegarageprice.");
if((price < 1) || (price > 999999)) return SCM(playerid, COLOR_ERROR, "» Invalid price.");
PutGarageForSale(playerid, id, price);
RefreshGarage(id);
return 1;
}
Don't use the auto incremented ID from the database, instead use your generated ID from the script so everything matches and will be coordinated, basically save the Iter Free generated ID into the database, and whenever you're trying to access data, use the SELECT query and point it to the saved ID, not the AI ID.
|
Better yet just save the auto incremented ID into that enum use it for reference. That way you don't need to worry about aligning anything.
|
Don't use the auto incremented ID from the database, instead use your generated ID from the script so everything matches and will be coordinated, basically save the Iter Free generated ID into the database, and whenever you're trying to access data, use the SELECT query and point it to the saved ID, not the AI ID.
|
if(!Iter_Contains(Garages, id) return "Garage ID does not exist."
mysql_format(g_SQL, query, sizeof query, "INSERT INTO `garages` (`ID`, `garagePrice`, `garageSize`) VALUES ('%d', '%d', '%d')", id, price, size);
mysql_tquery(g_SQL, query, "OnGarageCreated", "d", id);
if(!Iter_Contains(Garages, id))
return SendClientMessage(playerid, -1, "Garage ID does not exist.");
[13:04:22] sscanf warning: Format specifier does not match parameter count. |
CMD:creategarage(playerid, params[])
{
if(Player[playerid][AdminLevel] < 5) return 0;
if(Iter_Free(Garages) >= MAX_GARAGES) return SCM(playerid, COLOR_ERROR, "» Server has reached max garages limit.");
new id = Iter_Free(Garages);
new price, size;
if(sscanf(params, "dd(0)", price, size))
{
SCM(playerid, COLOR_BELGREEN, "» [USAGE]: /creategarage [price] [size(default 0)]");
return SCM(playerid, COLOR_BELGREEN, "» Size: 0 - Small Garage , 1 - Medium Garage, 2 - Big Garage.");
}
if((size < 0) || (size > 2)) return SCM(playerid, COLOR_ERROR, "» Size must be from 0 to 2.");
if((price < 1) || (price > 999999)) return SCM(playerid, COLOR_ERROR, "» Invalid price.");
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
GarageInfo[id][garagePos][0] = X;
GarageInfo[id][garagePos][1] = Y;
GarageInfo[id][garagePos][2] = Z;
GarageInfo[id][garagePos][3] = A;
GarageInfo[id][garageVW] = GetPlayerVirtualWorld(playerid);
GarageInfo[id][garagePrice] = price;
GarageInfo[id][garageSize] = size;
Iter_Add(Garages, id);
new query[400];
mysql_format(g_SQL, query, sizeof query, "INSERT INTO `garages` (`garageID`, `garagePrice`, `garageSize`, `garageX`, `garageY`, `garageZ`, `garageA`) VALUES ('%d', '%d', '%d', '%.4f', '%.4f', '%.4f', '%.4f')",
id, price, size, X, Y, Z, A);
mysql_tquery(g_SQL, query, "OnGarageCreated", "d", id);
SCMEX(playerid, COLOR_YELLOW, "» You have successfully created a garage. ID: %d - Price: %s - Size: %d", id, formatInt(price), size);
printf("Garage is saved for id: %d", id);
return 1;
}
if(Iter_Free(Garages) >= MAX_GARAGES) return SCM(playerid, COLOR_ERROR, "» Server has reached max garages limit.");