PDA

Просмотр полной версии : [Вопрос] Оптимизация кода



alexei
20.08.2020, 06:51
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(clickedid == selectskin_td[0])
{
switch(player_info[playerid][p_sex])
{
case 1:
{
switch(GetPVarInt(playerid, "selectskin"))
{
case 78:
{
SetPlayerSkin(playerid, 79);
SetPVarInt(playerid, "selectskin", 79);
}
case 160:
{
SetPlayerSkin(playerid, 78);
SetPVarInt(playerid, "selectskin", 78);
}
case 230:
{
SetPlayerSkin(playerid, 160);
SetPVarInt(playerid, "selectskin", 160);
}
case 213:
{
SetPlayerSkin(playerid, 230);
SetPVarInt(playerid, "selectskin", 230);
}
case 212:
{
SetPlayerSkin(playerid, 213);
SetPVarInt(playerid, "selectskin", 213);
}
case 200:
{
SetPlayerSkin(playerid, 212);
SetPVarInt(playerid, "selectskin", 212);
}
case 137:
{
SetPlayerSkin(playerid, 200);
SetPVarInt(playerid, "selectskin", 200);
}
case 136:
{
SetPlayerSkin(playerid, 137);
SetPVarInt(playerid, "selectskin", 137);
}
case 135:
{
SetPlayerSkin(playerid, 136);
SetPVarInt(playerid, "selectskin", 136);
}
case 134:
{
SetPlayerSkin(playerid, 135);
SetPVarInt(playerid, "selectskin", 135);
}
case 132:
{
SetPlayerSkin(playerid, 134);
SetPVarInt(playerid, "selectskin", 134);
}
case 79:
{
SetPlayerSkin(playerid, 132);
SetPVarInt(playerid, "selectskin", 132);
}
}
}
case 2:
{
switch(GetPVarInt(playerid, "selectskin"))
{
case 10:
{
SetPlayerSkin(playerid, 13);
SetPVarInt(playerid, "selectskin", 13);
}
case 218:
{
SetPlayerSkin(playerid, 10);
SetPVarInt(playerid, "selectskin", 10);
}
case 198:
{
SetPlayerSkin(playerid, 218);
SetPVarInt(playerid, "selectskin", 218);
}
case 197:
{
SetPlayerSkin(playerid, 198);
SetPVarInt(playerid, "selectskin", 198);
}
case 196:
{
SetPlayerSkin(playerid, 197);
SetPVarInt(playerid, "selectskin", 197);
}
case 157:
{
SetPlayerSkin(playerid, 196);
SetPVarInt(playerid, "selectskin", 196);
}
case 151:
{
SetPlayerSkin(playerid, 157);
SetPVarInt(playerid, "selectskin", 157);
}
case 130:
{
SetPlayerSkin(playerid, 151);
SetPVarInt(playerid, "selectskin", 151);
}
case 129:
{
SetPlayerSkin(playerid, 130);
SetPVarInt(playerid, "selectskin", 130);
}
case 77:
{
SetPlayerSkin(playerid, 129);
SetPVarInt(playerid, "selectskin", 129);
}
case 54:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, "selectskin", 54);
}
case 39:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, "selectskin", 54);
}
case 31:
{
SetPlayerSkin(playerid, 39);
SetPVarInt(playerid, "selectskin", 39);
}
case 13:
{
SetPlayerSkin(playerid, 31);
SetPVarInt(playerid, "selectskin", 31);
}
}
}
}
SelectTextDraw(playerid, 0xFFFFFFFF);
}
if(clickedid == selectskin_td[1])
{
switch(player_info[playerid][p_sex])
{
case 1:
{
switch(GetPVarInt(playerid, !"selectskin"))
{
case 78:
{
SetPlayerSkin(playerid, 160);
SetPVarInt(playerid, !"selectskin", 160);
}
case 160:
{
SetPlayerSkin(playerid, 230);
SetPVarInt(playerid, !"selectskin", 230);
}
case 230:
{
SetPlayerSkin(playerid, 213);
SetPVarInt(playerid, !"selectskin", 213);
}
case 213:
{
SetPlayerSkin(playerid, 212);
SetPVarInt(playerid, !"selectskin", 212);
}
case 212:
{
SetPlayerSkin(playerid, 200);
SetPVarInt(playerid, !"selectskin", 200);
}
case 200:
{
SetPlayerSkin(playerid, 137);
SetPVarInt(playerid, !"selectskin", 137);
}
case 137:
{
SetPlayerSkin(playerid, 136);
SetPVarInt(playerid, !"selectskin", 136);
}
case 136:
{
SetPlayerSkin(playerid, 135);
SetPVarInt(playerid, !"selectskin", 135);
}
case 135:
{
SetPlayerSkin(playerid, 134);
SetPVarInt(playerid, !"selectskin", 134);
}
case 134:
{
SetPlayerSkin(playerid, 132);
SetPVarInt(playerid, "selectskin", 132);
}
case 132:
{
SetPlayerSkin(playerid, 79);
SetPVarInt(playerid, !"selectskin", 79);
}
case 79:
{
SetPlayerSkin(playerid, 78);
SetPVarInt(playerid, !"selectskin", 78);
}
}
}
case 2:
{
switch(GetPVarInt(playerid, !"selectskin"))
{
case 10:
{
SetPlayerSkin(playerid, 218);
SetPVarInt(playerid, !"selectskin", 218);
}
case 218:
{
SetPlayerSkin(playerid, 198);
SetPVarInt(playerid, !"selectskin", 198);
}
case 198:
{
SetPlayerSkin(playerid, 197);
SetPVarInt(playerid, !"selectskin", 197);
}
case 197:
{
SetPlayerSkin(playerid, 196);
SetPVarInt(playerid, !"selectskin", 196);
}
case 196:
{
SetPlayerSkin(playerid, 157);
SetPVarInt(playerid, !"selectskin", 157);
}
case 157:
{
SetPlayerSkin(playerid, 151);
SetPVarInt(playerid, !"selectskin", 151);
}
case 151:
{
SetPlayerSkin(playerid, 130);
SetPVarInt(playerid, !"selectskin", 130);
}
case 130:
{
SetPlayerSkin(playerid, 129);
SetPVarInt(playerid, !"selectskin", 129);
}
case 129:
{
SetPlayerSkin(playerid, 77);
SetPVarInt(playerid, !"selectskin", 77);
}
case 77:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, !"selectskin", 54);
}
case 54:
{
SetPlayerSkin(playerid, 39);
SetPVarInt(playerid, !"selectskin", 39);
}
case 39:
{
SetPlayerSkin(playerid, 31);
SetPVarInt(playerid, !"selectskin", 31);
}
case 31:
{
SetPlayerSkin(playerid, 13);
SetPVarInt(playerid, !"selectskin", 13);
}
case 13:
{
SetPlayerSkin(playerid, 10);
SetPVarInt(playerid, !"selectskin", 10);
}
}
}
}
SelectTextDraw(playerid, 0xFFFFFFFF);
}
if(clickedid == selectskin_td[4])
{
player_info[playerid][p_skin] = GetPVarInt(playerid, "selectskin");

static const
fmt_query[] = "UPDATE `accounts` SET `skin` = '%d' WHERE `id` = '%d'";

new
query[sizeof(fmt_query) + (- 2 + 3) + (- 2 + 8)];

format(query, sizeof(query), fmt_query, player_info[playerid][p_skin], player_info[playerid][p_id]);
mysql_query(dbHandle, query);

SetPlayerSkin(playerid, player_info[playerid][p_skin]);

SelectTextDraw(playerid, 0xFFFFFFFF);

SetPVarInt(playerid, !"reg", 1);

SpawnPlayer(playerid);
}
return 1;
}

Как сделать данный участок кода наиболее оптимизированнее?

SteveStage
20.08.2020, 08:28
Можешь сделать проверки if(clickedid == selectskin_td[]) с помощью if-elseif-else.

Примерно так:

public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(clickedid == selectskin_td[0])
{
switch(player_info[playerid][p_sex])
{
case 1:
{
switch(GetPVarInt(playerid, "selectskin"))
{
case 78:
{
SetPlayerSkin(playerid, 79);
SetPVarInt(playerid, "selectskin", 79);
}
case 160:
{
SetPlayerSkin(playerid, 78);
SetPVarInt(playerid, "selectskin", 78);
}
case 230:
{
SetPlayerSkin(playerid, 160);
SetPVarInt(playerid, "selectskin", 160);
}
case 213:
{
SetPlayerSkin(playerid, 230);
SetPVarInt(playerid, "selectskin", 230);
}
case 212:
{
SetPlayerSkin(playerid, 213);
SetPVarInt(playerid, "selectskin", 213);
}
case 200:
{
SetPlayerSkin(playerid, 212);
SetPVarInt(playerid, "selectskin", 212);
}
case 137:
{
SetPlayerSkin(playerid, 200);
SetPVarInt(playerid, "selectskin", 200);
}
case 136:
{
SetPlayerSkin(playerid, 137);
SetPVarInt(playerid, "selectskin", 137);
}
case 135:
{
SetPlayerSkin(playerid, 136);
SetPVarInt(playerid, "selectskin", 136);
}
case 134:
{
SetPlayerSkin(playerid, 135);
SetPVarInt(playerid, "selectskin", 135);
}
case 132:
{
SetPlayerSkin(playerid, 134);
SetPVarInt(playerid, "selectskin", 134);
}
case 79:
{
SetPlayerSkin(playerid, 132);
SetPVarInt(playerid, "selectskin", 132);
}
}
}
case 2:
{
switch(GetPVarInt(playerid, "selectskin"))
{
case 10:
{
SetPlayerSkin(playerid, 13);
SetPVarInt(playerid, "selectskin", 13);
}
case 218:
{
SetPlayerSkin(playerid, 10);
SetPVarInt(playerid, "selectskin", 10);
}
case 198:
{
SetPlayerSkin(playerid, 218);
SetPVarInt(playerid, "selectskin", 218);
}
case 197:
{
SetPlayerSkin(playerid, 198);
SetPVarInt(playerid, "selectskin", 198);
}
case 196:
{
SetPlayerSkin(playerid, 197);
SetPVarInt(playerid, "selectskin", 197);
}
case 157:
{
SetPlayerSkin(playerid, 196);
SetPVarInt(playerid, "selectskin", 196);
}
case 151:
{
SetPlayerSkin(playerid, 157);
SetPVarInt(playerid, "selectskin", 157);
}
case 130:
{
SetPlayerSkin(playerid, 151);
SetPVarInt(playerid, "selectskin", 151);
}
case 129:
{
SetPlayerSkin(playerid, 130);
SetPVarInt(playerid, "selectskin", 130);
}
case 77:
{
SetPlayerSkin(playerid, 129);
SetPVarInt(playerid, "selectskin", 129);
}
case 54:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, "selectskin", 54);
}
case 39:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, "selectskin", 54);
}
case 31:
{
SetPlayerSkin(playerid, 39);
SetPVarInt(playerid, "selectskin", 39);
}
case 13:
{
SetPlayerSkin(playerid, 31);
SetPVarInt(playerid, "selectskin", 31);
}
}
}
}
SelectTextDraw(playerid, 0xFFFFFFFF);
}
else if(clickedid == selectskin_td[1])
{
switch(player_info[playerid][p_sex])
{
case 1:
{
switch(GetPVarInt(playerid, !"selectskin"))
{
case 78:
{
SetPlayerSkin(playerid, 160);
SetPVarInt(playerid, !"selectskin", 160);
}
case 160:
{
SetPlayerSkin(playerid, 230);
SetPVarInt(playerid, !"selectskin", 230);
}
case 230:
{
SetPlayerSkin(playerid, 213);
SetPVarInt(playerid, !"selectskin", 213);
}
case 213:
{
SetPlayerSkin(playerid, 212);
SetPVarInt(playerid, !"selectskin", 212);
}
case 212:
{
SetPlayerSkin(playerid, 200);
SetPVarInt(playerid, !"selectskin", 200);
}
case 200:
{
SetPlayerSkin(playerid, 137);
SetPVarInt(playerid, !"selectskin", 137);
}
case 137:
{
SetPlayerSkin(playerid, 136);
SetPVarInt(playerid, !"selectskin", 136);
}
case 136:
{
SetPlayerSkin(playerid, 135);
SetPVarInt(playerid, !"selectskin", 135);
}
case 135:
{
SetPlayerSkin(playerid, 134);
SetPVarInt(playerid, !"selectskin", 134);
}
case 134:
{
SetPlayerSkin(playerid, 132);
SetPVarInt(playerid, "selectskin", 132);
}
case 132:
{
SetPlayerSkin(playerid, 79);
SetPVarInt(playerid, !"selectskin", 79);
}
case 79:
{
SetPlayerSkin(playerid, 78);
SetPVarInt(playerid, !"selectskin", 78);
}
}
}
case 2:
{
switch(GetPVarInt(playerid, !"selectskin"))
{
case 10:
{
SetPlayerSkin(playerid, 218);
SetPVarInt(playerid, !"selectskin", 218);
}
case 218:
{
SetPlayerSkin(playerid, 198);
SetPVarInt(playerid, !"selectskin", 198);
}
case 198:
{
SetPlayerSkin(playerid, 197);
SetPVarInt(playerid, !"selectskin", 197);
}
case 197:
{
SetPlayerSkin(playerid, 196);
SetPVarInt(playerid, !"selectskin", 196);
}
case 196:
{
SetPlayerSkin(playerid, 157);
SetPVarInt(playerid, !"selectskin", 157);
}
case 157:
{
SetPlayerSkin(playerid, 151);
SetPVarInt(playerid, !"selectskin", 151);
}
case 151:
{
SetPlayerSkin(playerid, 130);
SetPVarInt(playerid, !"selectskin", 130);
}
case 130:
{
SetPlayerSkin(playerid, 129);
SetPVarInt(playerid, !"selectskin", 129);
}
case 129:
{
SetPlayerSkin(playerid, 77);
SetPVarInt(playerid, !"selectskin", 77);
}
case 77:
{
SetPlayerSkin(playerid, 54);
SetPVarInt(playerid, !"selectskin", 54);
}
case 54:
{
SetPlayerSkin(playerid, 39);
SetPVarInt(playerid, !"selectskin", 39);
}
case 39:
{
SetPlayerSkin(playerid, 31);
SetPVarInt(playerid, !"selectskin", 31);
}
case 31:
{
SetPlayerSkin(playerid, 13);
SetPVarInt(playerid, !"selectskin", 13);
}
case 13:
{
SetPlayerSkin(playerid, 10);
SetPVarInt(playerid, !"selectskin", 10);
}
}
}
}
SelectTextDraw(playerid, 0xFFFFFFFF);
}
else
{
player_info[playerid][p_skin] = GetPVarInt(playerid, "selectskin");

static const
fmt_query[] = "UPDATE `accounts` SET `skin` = '%d' WHERE `id` = '%d'";

new
query[sizeof(fmt_query) + (- 2 + 3) + (- 2 + 8)];

format(query, sizeof(query), fmt_query, player_info[playerid][p_skin], player_info[playerid][p_id]);
mysql_query(dbHandle, query);

SetPlayerSkin(playerid, player_info[playerid][p_skin]);

SelectTextDraw(playerid, 0xFFFFFFFF);

SetPVarInt(playerid, !"reg", 1);

SpawnPlayer(playerid);
}
return 1;
}

И создать 1 массив с заранее подсчитанным числом ячеек для MySql запроса вместо двух (что пойдет в жертву читаемости и удобству), больше мне кажется никак.

DeimoS
20.08.2020, 11:19
Можешь сделать проверки if(clickedid == selectskin_td[]) с помощью if-elseif-else.

Лучше уж тогда return расставить.

execution
20.08.2020, 12:27
Я так понял, ты выбираешь скин при регистрации. Подставь ид скинов в массив свои.

new
registration_skin_male[] = {160, 228, 211},
registration_skin_female[] = {183, 271, 233};

new
pVar__RegistrationSkin_IDX[] = !"pVar__RegistrationSkin_IDX";


public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(clickedid == selectskin_td[0])
{
new
idx = GetPVarInt(playerid, pVar__RegistrationSkin_IDX) - 1;

if (player_info[playerid][p_sex])
{
if (idx < 0))
{
idx = sizeof registration_skin_male - 1;
}

SetPlayerSkin(playerid, registration_skin_male[idx];
}
else
{
if (idx < 0))
{
idx = sizeof registration_skin_female - 1;
}

SetPlayerSkin(playerid, registration_skin_female[idx];
}

SetPVarInt(playerid, pVar__RegistrationSkin_IDX, idx);
SelectTextDraw(playerid, 0xFFFFFFFF);
}
if(clickedid == selectskin_td[1])
{

new
idx = GetPVarInt(playerid, pVar__RegistrationSkin_IDX) + 1;

if (player_info[playerid][p_sex])
{
if (idx >= sizeof registration_skin_male)
{
idx = 0;
}

SetPlayerSkin(playerid, registration_skin_male[idx];
}
else
{
if (idx >= sizeof registration_skin_female)
{
idx = 0;
}

SetPlayerSkin(playerid, registration_skin_female[idx];
}

SetPVarInt(playerid, pVar__RegistrationSkin_IDX, idx);
SelectTextDraw(playerid, 0xFFFFFFFF);
}

if(clickedid == selectskin_td[4])
{
DeletePVar(playerid, pVar__RegistrationSkin_IDX);

player_info[playerid][p_skin] = GetPlayerSkin(playerid);

static const
fmt_query[] = "UPDATE `accounts` SET `skin` = '%d' WHERE `id` = '%d'";

new
query[sizeof(fmt_query) + (- 2 + 3) + (- 2 + 8)];

format(query, sizeof(query), fmt_query, player_info[playerid][p_skin], player_info[playerid][p_id]);
mysql_query(dbHandle, query);

SetPVarInt(playerid, !"reg", 1);

SpawnPlayer(playerid);
}

return 1;
}

DeimoS
20.08.2020, 12:49
А я могу предложить такой инклуд (https://pro-pawn.ru/showthread.php?14380-ds__skin_selector).

alexei
28.08.2020, 18:14
forward CheckOffWarn(playerid, warnnick[], warnreason[]);
public CheckOffWarn(playerid, warnnick[], warnreason[])
{
new rows;
cache_get_row_count(rows);
if(rows)
{
new query[266], accwarn, string[221], admlvl, idplayer, frac, idacc;
cache_get_value_name_int(0, "warn", accwarn);
cache_get_value_name_int(0, "admin", admlvl);
cache_get_value_name_int(0, "id", idplayer);
cache_get_value_name_int(0, "org", frac);

if(admlvl > 0 && GetPVarInt(playerid, !"nooffwarn") == 0)
{
SetPVarInt(playerid, !"nooffwarn", 1);
SCM(playerid, COLOR_WARNING, !"Вы собираетесь выдать оффлайн предупреждение администратору сервера. Чтобы продолжить введите команду ещё раз");
return true;
}
accwarn++;
if(accwarn == 3)
{
if(!strlen(warnreason))
{
format(string, sizeof(string), "Администратор %s выдал оффлайн предупреждение игроку %s [3/3]. Акк. заблок. на 10 дней", player_info[playerid][p_name], warnnick);
}
else
{
format(string, sizeof(string), "Администратор %s выдал оффлайн предупреждение игроку %s [3/3]. Причина: %s. Акк. заблок. на 10 дней", player_info[playerid][p_name], warnnick, warnreason);
}
SendClientMessageToAll(COLOR_LIGHTRED, string);

format(query, sizeof(query), "DELETE FROM `unwarn` WHERE `name` = '%s'", warnnick);
mysql_tquery(dbHandle, query);

format(query, sizeof(query), "DELETE FROM `act_warn` WHERE `nick` = '%s'", warnnick);
mysql_tquery(dbHandle, query);

accwarn = 0;

format(query, sizeof(query), "UPDATE `accounts` SET `warn` = '%d' WHERE `id` = '%d'", accwarn, idplayer);
mysql_tquery(dbHandle, query);

new Year, Month, Day;
getdate(Year, Month, Day);
new monthname[9];
switch(Month)
{
case 1: monthname = "января";
case 2: monthname = "февраля";
case 3: monthname = "марта";
case 4: monthname = "апреля";
case 5: monthname = "мая";
case 6: monthname = "июня";
case 7: monthname = "июля";
case 8: monthname = "августа";
case 9: monthname = "сентября";
case 10: monthname = "октября";
case 11: monthname = "ноября";
case 12: monthname = "декабря";
}
new unban = gettime() + 864000;
new Hour, Minute, Second;
gettime(Hour, Minute, Second);
if(admlvl != 0)
{
format(query, sizeof(query), "UPDATE `accounts` SET `admin` = '0' WHERE `id` = '%d'", idplayer);
mysql_tquery(dbHandle, query);
}
format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `login` = '%s'", warnnick);
mysql_tquery(dbHandle, query, "GetIDAcc", "s", warnnick);

format(query, sizeof(query), "INSERT INTO `bans` (`name`, `bandate`, `unbandate`, `bantime`, `admin`, `reason`, `ipban`, `idacc`) VALUES ('%s', '%d-%02d-%02d', '%d', '%02d:%02d:%02d', '%s', '3 warns', '0.0.0.0', '%d')", warnnick, Year, Month, Day, unban, Hour, Minute, Second, player_info[playerid][p_name], idacc);
mysql_tquery(dbHandle, query);
return true;
}
format(query, sizeof(query), "UPDATE `accounts` SET `warn` = '%d' WHERE `id` = '%d'", accwarn, idplayer);
mysql_tquery(dbHandle, query);

if(!strlen(warnreason))
{
format(string, sizeof(string), "Администратор %s выдал оффлайн предупреждение игроку %s [%d/3].", player_info[playerid][p_name], warnnick, accwarn);
}
else
{
format(string, sizeof(string), "Администратор %s выдал оффлайн предупреждение игроку %s [%d/3]. Причина: %s", player_info[playerid][p_name], warnnick, accwarn, warnreason);
}
SendClientMessageToAll(COLOR_LIGHTRED, string);
new Year, Month, Day;
getdate(Year, Month, Day);
new Hour, Minute, Second;
gettime(Hour, Minute, Second);

format(string, sizeof(string), "INSERT INTO `act_warn` (`nick`, `warn`, `date`, `time`, `anick`, `reason`) VALUES ('%s', '%d', '%02d-%02d-%02d', '%02d:%02d:%02d', '%s', '%s')", warnnick, accwarn, Year, Month, Day, Hour, Minute, Second, player_info[playerid][p_name], warnreason);
mysql_tquery(dbHandle, string);
if(admlvl != 0)
{
format(query, sizeof(query), "UPDATE `accounts` SET `admin` = '0' WHERE `id` = '%d'", idplayer);
mysql_tquery(dbHandle, query);
}
if(frac != 0)
{
format(query, sizeof(query), "UPDATE `accounts` SET `org` = '0', `rang` = '0', `frac_skin` = '0' WHERE `id` = '%d'", idplayer);
mysql_tquery(dbHandle, query);
}
}
return true;
}

а тут?

SteveStage
29.08.2020, 02:29
switch(Month)
{
case 1: monthname = "января";
case 2: monthname = "февраля";
case 3: monthname = "марта";
case 4: monthname = "апреля";
case 5: monthname = "мая";
case 6: monthname = "июня";
case 7: monthname = "июля";
case 8: monthname = "августа";
case 9: monthname = "сентября";
case 10: monthname = "октября";
case 11: monthname = "ноября";
case 12: monthname = "декабря";
}

Так сделать не получится, это тебе не С++ с перегруженным оператором =, используй strmid:

strmid(monthname, "января", 0, sizeof(monthname));

tnc
29.08.2020, 06:19
switch(Month)
{
case 1: monthname = "января";
case 2: monthname = "февраля";
case 3: monthname = "марта";
case 4: monthname = "апреля";
case 5: monthname = "мая";
case 6: monthname = "июня";
case 7: monthname = "июля";
case 8: monthname = "августа";
case 9: monthname = "сентября";
case 10: monthname = "октября";
case 11: monthname = "ноября";
case 12: monthname = "декабря";
}

Так сделать не получится, это тебе не С++ с перегруженным оператором =, используй strmid:

strmid(monthname, "января", 0, sizeof(monthname));

Конкретно, как тут не выйдет (размер мал), а вообще можно (https://fiddle.sa-mp.dev/SupermathematicalIlllookingIbex) через =

DeimoS
31.08.2020, 10:52
А ещё лучше - убрать switch и массив monthname, создав вместо них static-массив, прописав все названия месяцев там и уже обращаться к массиву напрямую, не занимаясь лишний раз копированием текста из глобального сегмента данных в стек.

alexei
02.09.2020, 13:17
stock SaveCars(playerid)
{
if(p_info[playerid][pLogin] == 0) return 1;

format(MySQLStr, 1200, "UPDATE `accounts` SET `cModel` = '%d,%d,%d', ",
CarInfo[playerid][cModel][0], CarInfo[playerid][cModel][1], CarInfo[playerid][cModel][2]);

format(MySQLStr, 1200, "%s `cSost` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSost][0], CarInfo[playerid][cSost][1], CarInfo[playerid][cSost][2]);

format(MySQLStr, 1200, "%s `cColor1` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cColor1][0], CarInfo[playerid][cColor1][1], CarInfo[playerid][cColor1][2]);

format(MySQLStr, 1200, "%s `cColor2` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cColor2][0], CarInfo[playerid][cColor2][1], CarInfo[playerid][cColor2][2]);

format(MySQLStr, 1200, "%s `cNumber` = '%s,%s,%s', ", MySQLStr,
VehicleNumberPlate[playerid][0], VehicleNumberPlate[playerid][1], VehicleNumberPlate[playerid][2]);

format(MySQLStr, 1200, "%s `cPaintJobs` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cPaintJobs][0], CarInfo[playerid][cPaintJobs][1], CarInfo[playerid][cPaintJobs][2]);

format(MySQLStr, 1200, "%s `cLock` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cLock][0], CarInfo[playerid][cLock][1], CarInfo[playerid][cLock][2]);

format(MySQLStr, 1200, "%s `cFuel` = '%f,%f,%f', ", MySQLStr,
CarInfo[playerid][cFuel][0], CarInfo[playerid][cFuel][1], CarInfo[playerid][cFuel][2]);

format(MySQLStr, 1200, "%s `cCost` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cCost][0], CarInfo[playerid][cCost][1], CarInfo[playerid][cCost][2]);

format(MySQLStr, 1200, "%s `cProbeg` = '%f,%f,%f', ", MySQLStr,
CarInfo[playerid][cProbeg][0], CarInfo[playerid][cProbeg][1], CarInfo[playerid][cProbeg][2]);

format(MySQLStr, 1200, "%s `cWheels` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cWheels][0], CarInfo[playerid][cWheels][1], CarInfo[playerid][cWheels][2]);

format(MySQLStr, 1200, "%s `cSpoiler` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSpoiler][0], CarInfo[playerid][cSpoiler][1], CarInfo[playerid][cSpoiler][2]);

format(MySQLStr, 1200, "%s `cBumper1` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cBumper1][0], CarInfo[playerid][cBumper1][1], CarInfo[playerid][cBumper1][2]);

format(MySQLStr, 1200, "%s `cBumper2` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cBumper2][0], CarInfo[playerid][cBumper2][1], CarInfo[playerid][cBumper2][2]);

format(MySQLStr, 1200, "%s `cNitro` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cNitro][0], CarInfo[playerid][cNitro][1], CarInfo[playerid][cNitro][2]);

format(MySQLStr, 1200, "%s `cHydrawlic` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cHydrawlic][0], CarInfo[playerid][cHydrawlic][1], CarInfo[playerid][cHydrawlic][2]);

format(MySQLStr, 1200, "%s `cHood` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cHood][0], CarInfo[playerid][cHood][1], CarInfo[playerid][cHood][2]);

format(MySQLStr, 1200, "%s `cRoof` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cRoof][0], CarInfo[playerid][cRoof][1], CarInfo[playerid][cRoof][2]);

format(MySQLStr, 1200, "%s `cSideskirt` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSideskirt][0], CarInfo[playerid][cSideskirt][1], CarInfo[playerid][cSideskirt][2]);

format(MySQLStr, 1200, "%s `cLamps` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cLamps][0], CarInfo[playerid][cLamps][1], CarInfo[playerid][cLamps][2]);

format(MySQLStr, 1200, "%s `cExhaust` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cExhaust][0], CarInfo[playerid][cExhaust][1], CarInfo[playerid][cExhaust][2]);

format(MySQLStr, 1200, "%s `cStereo` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cStereo][0], CarInfo[playerid][cStereo][1], CarInfo[playerid][cStereo][2]);

format(MySQLStr, 1200, "%s `cVentRight` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cVentRight][0], CarInfo[playerid][cVentRight][1], CarInfo[playerid][cVentRight][2]);

format(MySQLStr, 1200, "%s `cVentLeft` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cVentLeft][0], CarInfo[playerid][cVentLeft][1], CarInfo[playerid][cVentLeft][2]);

format(MySQLStr, 1200, "%s `cHeal` = '%f,%f,%f ', ", MySQLStr,
CarInfo[playerid][cHeal][0], CarInfo[playerid][cHeal][1], CarInfo[playerid][cHeal][2]);

format(MySQLStr, 1200, "%s `cDamagePanel` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamagePanel][0], CarInfo[playerid][cDamagePanel][1], CarInfo[playerid][cDamagePanel][2]);

format(MySQLStr, 1200, "%s `cDamageDoors` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamageDoors][0], CarInfo[playerid][cDamageDoors][1], CarInfo[playerid][cDamageDoors][2]);

format(MySQLStr, 1200, "%s `cDamageLights` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamageLights][0], CarInfo[playerid][cDamageLights][1], CarInfo[playerid][cDamageLights][2]);

format(MySQLStr, 1200, "%s `cDamageTires` = '%d,%d,%d' WHERE `pID` = %d", MySQLStr,
CarInfo[playerid][cDamageTires][0], CarInfo[playerid][cDamageTires][1], CarInfo[playerid][cDamageTires][2], GetPlayerAccountID(playerid));

mysql_tquery(dbHandle, MySQLStr);

return 1;
}
тут тоже такое говно сделали, как оптимизировать до минимума? по 1200 ячеек на каждую строку...

DeimoS
02.09.2020, 14:47
Во-первых, тут не форум бесплатной оптимизации, а форум для помощи тем, кто хочет изучить Pawn. Если нужна оптимизация - обращайся в стол заказов и оплачивай труд того, кто согласится тебе помочь.

Во-вторых, разберись с аргументами функции format. Никаких 1200 ячеек там никуда не выделяется.

SteveStage
02.09.2020, 18:19
stock SaveCars(playerid)
{
if(p_info[playerid][pLogin] == 0) return 1;

format(MySQLStr, 1200, "UPDATE `accounts` SET `cModel` = '%d,%d,%d', ",
CarInfo[playerid][cModel][0], CarInfo[playerid][cModel][1], CarInfo[playerid][cModel][2]);

format(MySQLStr, 1200, "%s `cSost` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSost][0], CarInfo[playerid][cSost][1], CarInfo[playerid][cSost][2]);

format(MySQLStr, 1200, "%s `cColor1` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cColor1][0], CarInfo[playerid][cColor1][1], CarInfo[playerid][cColor1][2]);

format(MySQLStr, 1200, "%s `cColor2` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cColor2][0], CarInfo[playerid][cColor2][1], CarInfo[playerid][cColor2][2]);

format(MySQLStr, 1200, "%s `cNumber` = '%s,%s,%s', ", MySQLStr,
VehicleNumberPlate[playerid][0], VehicleNumberPlate[playerid][1], VehicleNumberPlate[playerid][2]);

format(MySQLStr, 1200, "%s `cPaintJobs` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cPaintJobs][0], CarInfo[playerid][cPaintJobs][1], CarInfo[playerid][cPaintJobs][2]);

format(MySQLStr, 1200, "%s `cLock` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cLock][0], CarInfo[playerid][cLock][1], CarInfo[playerid][cLock][2]);

format(MySQLStr, 1200, "%s `cFuel` = '%f,%f,%f', ", MySQLStr,
CarInfo[playerid][cFuel][0], CarInfo[playerid][cFuel][1], CarInfo[playerid][cFuel][2]);

format(MySQLStr, 1200, "%s `cCost` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cCost][0], CarInfo[playerid][cCost][1], CarInfo[playerid][cCost][2]);

format(MySQLStr, 1200, "%s `cProbeg` = '%f,%f,%f', ", MySQLStr,
CarInfo[playerid][cProbeg][0], CarInfo[playerid][cProbeg][1], CarInfo[playerid][cProbeg][2]);

format(MySQLStr, 1200, "%s `cWheels` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cWheels][0], CarInfo[playerid][cWheels][1], CarInfo[playerid][cWheels][2]);

format(MySQLStr, 1200, "%s `cSpoiler` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSpoiler][0], CarInfo[playerid][cSpoiler][1], CarInfo[playerid][cSpoiler][2]);

format(MySQLStr, 1200, "%s `cBumper1` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cBumper1][0], CarInfo[playerid][cBumper1][1], CarInfo[playerid][cBumper1][2]);

format(MySQLStr, 1200, "%s `cBumper2` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cBumper2][0], CarInfo[playerid][cBumper2][1], CarInfo[playerid][cBumper2][2]);

format(MySQLStr, 1200, "%s `cNitro` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cNitro][0], CarInfo[playerid][cNitro][1], CarInfo[playerid][cNitro][2]);

format(MySQLStr, 1200, "%s `cHydrawlic` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cHydrawlic][0], CarInfo[playerid][cHydrawlic][1], CarInfo[playerid][cHydrawlic][2]);

format(MySQLStr, 1200, "%s `cHood` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cHood][0], CarInfo[playerid][cHood][1], CarInfo[playerid][cHood][2]);

format(MySQLStr, 1200, "%s `cRoof` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cRoof][0], CarInfo[playerid][cRoof][1], CarInfo[playerid][cRoof][2]);

format(MySQLStr, 1200, "%s `cSideskirt` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cSideskirt][0], CarInfo[playerid][cSideskirt][1], CarInfo[playerid][cSideskirt][2]);

format(MySQLStr, 1200, "%s `cLamps` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cLamps][0], CarInfo[playerid][cLamps][1], CarInfo[playerid][cLamps][2]);

format(MySQLStr, 1200, "%s `cExhaust` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cExhaust][0], CarInfo[playerid][cExhaust][1], CarInfo[playerid][cExhaust][2]);

format(MySQLStr, 1200, "%s `cStereo` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cStereo][0], CarInfo[playerid][cStereo][1], CarInfo[playerid][cStereo][2]);

format(MySQLStr, 1200, "%s `cVentRight` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cVentRight][0], CarInfo[playerid][cVentRight][1], CarInfo[playerid][cVentRight][2]);

format(MySQLStr, 1200, "%s `cVentLeft` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cVentLeft][0], CarInfo[playerid][cVentLeft][1], CarInfo[playerid][cVentLeft][2]);

format(MySQLStr, 1200, "%s `cHeal` = '%f,%f,%f ', ", MySQLStr,
CarInfo[playerid][cHeal][0], CarInfo[playerid][cHeal][1], CarInfo[playerid][cHeal][2]);

format(MySQLStr, 1200, "%s `cDamagePanel` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamagePanel][0], CarInfo[playerid][cDamagePanel][1], CarInfo[playerid][cDamagePanel][2]);

format(MySQLStr, 1200, "%s `cDamageDoors` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamageDoors][0], CarInfo[playerid][cDamageDoors][1], CarInfo[playerid][cDamageDoors][2]);

format(MySQLStr, 1200, "%s `cDamageLights` = '%d,%d,%d', ", MySQLStr,
CarInfo[playerid][cDamageLights][0], CarInfo[playerid][cDamageLights][1], CarInfo[playerid][cDamageLights][2]);

format(MySQLStr, 1200, "%s `cDamageTires` = '%d,%d,%d' WHERE `pID` = %d", MySQLStr,
CarInfo[playerid][cDamageTires][0], CarInfo[playerid][cDamageTires][1], CarInfo[playerid][cDamageTires][2], GetPlayerAccountID(playerid));

mysql_tquery(dbHandle, MySQLStr);

return 1;
}
тут тоже такое говно сделали, как оптимизировать до минимума? по 1200 ячеек на каждую строку...

А за одно форматирование это сделать нельзя? И что это за говнобд, в которой числа записаны в строковый массив через запятую? Тут нужно вносить изменения в бд.


Во-первых, тут не форум бесплатной оптимизации, а форум для помощи тем, кто хочет изучить Pawn. Если нужна оптимизация - обращайся в стол заказов и оплачивай труд того, кто согласится тебе помочь.

Во-вторых, разберись с аргументами функции format. Никаких 1200 ячеек там никуда не выделяется.

Верно, 1200 - это всего лишь максимальная длина форматируемой строки, а не указание размера.

alexei
05.09.2020, 09:07
Я не прошу Вас делать всё за меня, лишь натолкнуть на более менее оптимальный вариант оптимизации данного участка кода

Deimos, учту

alexei
05.09.2020, 09:42
Пойдет?

stock SaveCars(playerid)
{
if(p_info[playerid][pLogin] == 0)
return true;

new string[775 + 1] = "UPDATE `accounts` SET";


format(string, sizeof(string), "%s `cModel` = '%d,%d,%d',", string, CarInfo[playerid][cModel][0], CarInfo[playerid][cModel][1], CarInfo[playerid][cModel][2]);
format(string, sizeof(string), "%s `cSost` = '%d,%d,%d',", string, CarInfo[playerid][cSost][0], CarInfo[playerid][cSost][1], CarInfo[playerid][cSost][2]);
format(string, sizeof(string), "%s `cColor1` = '%d,%d,%d',", string, CarInfo[playerid][cColor1][0], CarInfo[playerid][cColor1][1], CarInfo[playerid][cColor1][2]);
format(string, sizeof(string), "%s `cColor2` = '%d,%d,%d',", string, CarInfo[playerid][cColor2][0], CarInfo[playerid][cColor2][1], CarInfo[playerid][cColor2][2]);
format(string, sizeof(string), "%s `cNumber` = '%s,%s,%s',", string, VehicleNumberPlate[playerid][0], VehicleNumberPlate[playerid][1], VehicleNumberPlate[playerid][2]);
format(string, sizeof(string), "%s `cPaintJobs` = '%d,%d,%d',", string, CarInfo[playerid][cPaintJobs][0], CarInfo[playerid][cPaintJobs][1], CarInfo[playerid][cPaintJobs][2]);
format(string, sizeof(string), "%s `cLock` = '%d,%d,%d',", string, CarInfo[playerid][cLock][0], CarInfo[playerid][cLock][1], CarInfo[playerid][cLock][2]);
format(string, sizeof(string), "%s `cFuel` = '%f,%f,%f',", string, CarInfo[playerid][cFuel][0], CarInfo[playerid][cFuel][1], CarInfo[playerid][cFuel][2]);
format(string, sizeof(string), "%s `cCost` = '%d,%d,%d',", string, CarInfo[playerid][cCost][0], CarInfo[playerid][cCost][1], CarInfo[playerid][cCost][2]);
format(string, sizeof(string), "%s `cProbeg` = '%f,%f,%f',", string, CarInfo[playerid][cProbeg][0], CarInfo[playerid][cProbeg][1], CarInfo[playerid][cProbeg][2]);
format(string, sizeof(string), "%s `cWheels` = '%d,%d,%d',", string, CarInfo[playerid][cWheels][0], CarInfo[playerid][cWheels][1], CarInfo[playerid][cWheels][2]);
format(string, sizeof(string), "%s `cSpoiler` = '%d,%d,%d',", string, CarInfo[playerid][cSpoiler][0], CarInfo[playerid][cSpoiler][1], CarInfo[playerid][cSpoiler][2]);
format(string, sizeof(string), "%s `cBumper1` = '%d,%d,%d',", string, CarInfo[playerid][cBumper1][0], CarInfo[playerid][cBumper1][1], CarInfo[playerid][cBumper1][2]);
format(string, sizeof(string), "%s `cBumper2` = '%d,%d,%d',", string, CarInfo[playerid][cBumper2][0], CarInfo[playerid][cBumper2][1], CarInfo[playerid][cBumper2][2]);
format(string, sizeof(string), "%s `cNitro` = '%d,%d,%d',", string, CarInfo[playerid][cNitro][0], CarInfo[playerid][cNitro][1], CarInfo[playerid][cNitro][2]);
format(string, sizeof(string), "%s `cHydrawlic` = '%d,%d,%d',", string, CarInfo[playerid][cHydrawlic][0], CarInfo[playerid][cHydrawlic][1], CarInfo[playerid][cHydrawlic][2]);
format(string, sizeof(string), "%s `cHood` = '%d,%d,%d',", string, CarInfo[playerid][cHood][0], CarInfo[playerid][cHood][1], CarInfo[playerid][cHood][2]);
format(string, sizeof(string), "%s `cRoof` = '%d,%d,%d',", string, CarInfo[playerid][cRoof][0], CarInfo[playerid][cRoof][1], CarInfo[playerid][cRoof][2]);
format(string, sizeof(string), "%s `cSideskirt` = '%d,%d,%d',", string, CarInfo[playerid][cSideskirt][0], CarInfo[playerid][cSideskirt][1], CarInfo[playerid][cSideskirt][2]);
format(string, sizeof(string), "%s `cLamps` = '%d,%d,%d',", string, CarInfo[playerid][cLamps][0], CarInfo[playerid][cLamps][1], CarInfo[playerid][cLamps][2]);
format(string, sizeof(string), "%s `cExhaust` = '%d,%d,%d',", string, CarInfo[playerid][cExhaust][0], CarInfo[playerid][cExhaust][1], CarInfo[playerid][cExhaust][2]);
format(string, sizeof(string), "%s `cStereo` = '%d,%d,%d',", string, CarInfo[playerid][cStereo][0], CarInfo[playerid][cStereo][1], CarInfo[playerid][cStereo][2]);
format(string, sizeof(string), "%s `cVentRight` = '%d,%d,%d',", string, CarInfo[playerid][cVentRight][0], CarInfo[playerid][cVentRight][1], CarInfo[playerid][cVentRight][2]);
format(string, sizeof(string), "%s `cVentLeft` = '%d,%d,%d',", string, CarInfo[playerid][cVentLeft][0], CarInfo[playerid][cVentLeft][1], CarInfo[playerid][cVentLeft][2]);
format(string, sizeof(string), "%s `cHeal` = '%f,%f,%f',", string, CarInfo[playerid][cHeal][0], CarInfo[playerid][cHeal][1], CarInfo[playerid][cHeal][2]);
format(string, sizeof(string), "%s `cDamagePanel` = '%d,%d,%d',", string, CarInfo[playerid][cDamagePanel][0], CarInfo[playerid][cDamagePanel][1], CarInfo[playerid][cDamagePanel][2]);
format(string, sizeof(string), "%s `cDamageDoors` = '%d,%d,%d',", string, CarInfo[playerid][cDamageDoors][0], CarInfo[playerid][cDamageDoors][1], CarInfo[playerid][cDamageDoors][2]);
format(string, sizeof(string), "%s `cDamageLights` = '%d,%d,%d',", string, CarInfo[playerid][cDamageLights][0], CarInfo[playerid][cDamageLights][1], CarInfo[playerid][cDamageLights][2]);
format(string, sizeof(string), "%s `cDamageTires` = '%d,%d,%d'", string, CarInfo[playerid][cDamageTires][0], CarInfo[playerid][cDamageTires][1], CarInfo[playerid][cDamageTires][2]);

format(string, sizeof(string), "%s WHERE `pID` = '%d'", string, GetPlayerAccountID(playerid));
mysql_tquery(dbHandle, string, "", "");
return true;
}

SteveStage
05.09.2020, 18:25
Пойдет?

stock SaveCars(playerid)
{
if(p_info[playerid][pLogin] == 0)
return true;

new string[775 + 1] = "UPDATE `accounts` SET";


format(string, sizeof(string), "%s `cModel` = '%d,%d,%d',", string, CarInfo[playerid][cModel][0], CarInfo[playerid][cModel][1], CarInfo[playerid][cModel][2]);
format(string, sizeof(string), "%s `cSost` = '%d,%d,%d',", string, CarInfo[playerid][cSost][0], CarInfo[playerid][cSost][1], CarInfo[playerid][cSost][2]);
format(string, sizeof(string), "%s `cColor1` = '%d,%d,%d',", string, CarInfo[playerid][cColor1][0], CarInfo[playerid][cColor1][1], CarInfo[playerid][cColor1][2]);
format(string, sizeof(string), "%s `cColor2` = '%d,%d,%d',", string, CarInfo[playerid][cColor2][0], CarInfo[playerid][cColor2][1], CarInfo[playerid][cColor2][2]);
format(string, sizeof(string), "%s `cNumber` = '%s,%s,%s',", string, VehicleNumberPlate[playerid][0], VehicleNumberPlate[playerid][1], VehicleNumberPlate[playerid][2]);
format(string, sizeof(string), "%s `cPaintJobs` = '%d,%d,%d',", string, CarInfo[playerid][cPaintJobs][0], CarInfo[playerid][cPaintJobs][1], CarInfo[playerid][cPaintJobs][2]);
format(string, sizeof(string), "%s `cLock` = '%d,%d,%d',", string, CarInfo[playerid][cLock][0], CarInfo[playerid][cLock][1], CarInfo[playerid][cLock][2]);
format(string, sizeof(string), "%s `cFuel` = '%f,%f,%f',", string, CarInfo[playerid][cFuel][0], CarInfo[playerid][cFuel][1], CarInfo[playerid][cFuel][2]);
format(string, sizeof(string), "%s `cCost` = '%d,%d,%d',", string, CarInfo[playerid][cCost][0], CarInfo[playerid][cCost][1], CarInfo[playerid][cCost][2]);
format(string, sizeof(string), "%s `cProbeg` = '%f,%f,%f',", string, CarInfo[playerid][cProbeg][0], CarInfo[playerid][cProbeg][1], CarInfo[playerid][cProbeg][2]);
format(string, sizeof(string), "%s `cWheels` = '%d,%d,%d',", string, CarInfo[playerid][cWheels][0], CarInfo[playerid][cWheels][1], CarInfo[playerid][cWheels][2]);
format(string, sizeof(string), "%s `cSpoiler` = '%d,%d,%d',", string, CarInfo[playerid][cSpoiler][0], CarInfo[playerid][cSpoiler][1], CarInfo[playerid][cSpoiler][2]);
format(string, sizeof(string), "%s `cBumper1` = '%d,%d,%d',", string, CarInfo[playerid][cBumper1][0], CarInfo[playerid][cBumper1][1], CarInfo[playerid][cBumper1][2]);
format(string, sizeof(string), "%s `cBumper2` = '%d,%d,%d',", string, CarInfo[playerid][cBumper2][0], CarInfo[playerid][cBumper2][1], CarInfo[playerid][cBumper2][2]);
format(string, sizeof(string), "%s `cNitro` = '%d,%d,%d',", string, CarInfo[playerid][cNitro][0], CarInfo[playerid][cNitro][1], CarInfo[playerid][cNitro][2]);
format(string, sizeof(string), "%s `cHydrawlic` = '%d,%d,%d',", string, CarInfo[playerid][cHydrawlic][0], CarInfo[playerid][cHydrawlic][1], CarInfo[playerid][cHydrawlic][2]);
format(string, sizeof(string), "%s `cHood` = '%d,%d,%d',", string, CarInfo[playerid][cHood][0], CarInfo[playerid][cHood][1], CarInfo[playerid][cHood][2]);
format(string, sizeof(string), "%s `cRoof` = '%d,%d,%d',", string, CarInfo[playerid][cRoof][0], CarInfo[playerid][cRoof][1], CarInfo[playerid][cRoof][2]);
format(string, sizeof(string), "%s `cSideskirt` = '%d,%d,%d',", string, CarInfo[playerid][cSideskirt][0], CarInfo[playerid][cSideskirt][1], CarInfo[playerid][cSideskirt][2]);
format(string, sizeof(string), "%s `cLamps` = '%d,%d,%d',", string, CarInfo[playerid][cLamps][0], CarInfo[playerid][cLamps][1], CarInfo[playerid][cLamps][2]);
format(string, sizeof(string), "%s `cExhaust` = '%d,%d,%d',", string, CarInfo[playerid][cExhaust][0], CarInfo[playerid][cExhaust][1], CarInfo[playerid][cExhaust][2]);
format(string, sizeof(string), "%s `cStereo` = '%d,%d,%d',", string, CarInfo[playerid][cStereo][0], CarInfo[playerid][cStereo][1], CarInfo[playerid][cStereo][2]);
format(string, sizeof(string), "%s `cVentRight` = '%d,%d,%d',", string, CarInfo[playerid][cVentRight][0], CarInfo[playerid][cVentRight][1], CarInfo[playerid][cVentRight][2]);
format(string, sizeof(string), "%s `cVentLeft` = '%d,%d,%d',", string, CarInfo[playerid][cVentLeft][0], CarInfo[playerid][cVentLeft][1], CarInfo[playerid][cVentLeft][2]);
format(string, sizeof(string), "%s `cHeal` = '%f,%f,%f',", string, CarInfo[playerid][cHeal][0], CarInfo[playerid][cHeal][1], CarInfo[playerid][cHeal][2]);
format(string, sizeof(string), "%s `cDamagePanel` = '%d,%d,%d',", string, CarInfo[playerid][cDamagePanel][0], CarInfo[playerid][cDamagePanel][1], CarInfo[playerid][cDamagePanel][2]);
format(string, sizeof(string), "%s `cDamageDoors` = '%d,%d,%d',", string, CarInfo[playerid][cDamageDoors][0], CarInfo[playerid][cDamageDoors][1], CarInfo[playerid][cDamageDoors][2]);
format(string, sizeof(string), "%s `cDamageLights` = '%d,%d,%d',", string, CarInfo[playerid][cDamageLights][0], CarInfo[playerid][cDamageLights][1], CarInfo[playerid][cDamageLights][2]);
format(string, sizeof(string), "%s `cDamageTires` = '%d,%d,%d'", string, CarInfo[playerid][cDamageTires][0], CarInfo[playerid][cDamageTires][1], CarInfo[playerid][cDamageTires][2]);

format(string, sizeof(string), "%s WHERE `pID` = '%d'", string, GetPlayerAccountID(playerid));
mysql_tquery(dbHandle, string, "", "");
return true;
}

Числа должны быть числами, для каждого числа должен быть свой столбец в бд, а "%d,%d,%d" - говнокод. И зачем столько форматирований? Почему нельзя сделать одно большое форматирование?

alexei
07.09.2020, 23:15
Числа должны быть числами, для каждого числа должен быть свой столбец в бд, а "%d,%d,%d" - говнокод. И зачем столько форматирований? Почему нельзя сделать одно большое форматирование?

я не знаю как, покажи в качестве примера

SteveStage
08.09.2020, 00:08
я не знаю как, покажи в качестве примера

new str[128+1], var = 4, Float:fl = 15.8;
format(str, sizeof(str), "SELECT * FROM `table` WHERE `int_field` = '%d' AND `float_field` = '%f'", var, fl);
mysql_tquery(dbHandle, str, "", "");

DeimoS
09.09.2020, 12:26
Я не прошу Вас делать всё за меня, лишь натолкнуть на более менее оптимальный вариант оптимизации данного участка кода

Deimos, учту

Оптимальный вариант в данном случае - отказаться от сохранения всех данных и сохранять каждую конкретную переменную в момент её изменения.

Но ни один из предоставленных отрезков кода не хранил в себе какой-либо критически неоптимизированный код, правки которого дали бы хоть какой-то ощутимый прирост скорости. Так что ты просто тратишь и своё, и чужое время впустую сейчас.

alexei
10.09.2020, 08:27
Оптимальный вариант в данном случае - отказаться от сохранения всех данных и сохранять каждую конкретную переменную в момент её изменения.

Но ни один из предоставленных отрезков кода не хранил в себе какой-либо критически неоптимизированный код, правки которого дали бы хоть какой-то ощутимый прирост скорости. Так что ты просто тратишь и своё, и чужое время впустую сейчас.
Мне было просто интересно разобраться в этом, ибо 1200 ячеек на каждую строку, это не то, что нужно.. Да и выглядит убого)))

DeimoS
10.09.2020, 10:05
Мне было просто интересно разобраться в этом, ибо 1200 ячеек на каждую строку, это не то, что нужно.. Да и выглядит убого)))

Ещё раз: никаких 1200 ячеек на каждую строку там нет. Изучи описание параметров функции format.
И сам по себе код вполне нормально реализован. Единственная проблема в нём только в том, что конкретно в этом случае есть более удачный вариант реализации. Но если бы его не было - нет ничего плохого от того, что у тебя каждая переменная записывается в строку через отдельный format, так как функция сохранения всё равно вызывалась бы не часто. При этом, подобное написание гораздо сильнее упрощает редактирование запроса, в случае нужды, ибо если ты решишь, например, удалить одну из переменных, тебе достаточно будет удалить format, а не выискивать среди текста нужную переменную.