PDA

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



Processing
22.01.2016, 21:57
Друг подкинул мне красивый чат для Лидеров.
Но, он очень страшен в плане кода, помогите оптимизировать :blush2:


CMD:lc(playerid,params[])
{
if(pInfo[playerid][pLeader] >= 1)
{
new string[144];
new name[24];
GetPlayerName(playerid, name, sizeof(name));
if(sscanf(params,"s[128]", params[0])) return SendClientMessage(playerid, CGREY, "Используй: /lc [текст]");
switch(pInfo[playerid][pLeader])
{
case 1:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LSPD]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 2:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [FBI]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 3:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [NGSA]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 4:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LVPD]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 5:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [МЧС]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 6:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LCN]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 7:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Yakuza]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 8:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [TTM]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 9:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [TGM]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 10:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [UM]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 11:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [RM]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 12:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Grove]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 13:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Ballas]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 14:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Rifa]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 15:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Coronos]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 16:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Vagos]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 17:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Str.LV]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 18:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Str.LS]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 19:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Convers]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 20:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Bikers]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 21:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Hitman]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 22:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Репортёры]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
case 23:
{
format(string, sizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Taxi]{FFFFFF} %s[%d]: %s", name,playerid,params[0]);
return SendLeaderMessage(CW, string);
}
default:
{
return SendClientMessage(playerid, CLR, "Community:{ffffff} Вам не доступен /lc чат.");
}
}
}
else
{
SendClientMessage(playerid, CLR, "Community: {FFFFFF}Вы не уполномочены использовать эту команду!");
return 1;
}
return 1;
}

VVWVV
22.01.2016, 22:19
Вот набросок оптимизированного кода:


CMD:lc(playerid, params[])
{

static const
faction_name[][5] =
{
"LSPD",
/*...*/
};


new leader = pInfo[playerid][pLeader];

if (leader < 1)
return SendClientMessage(playerid, -1,
!"Community: {FFFFFF}Вы не уполномочены использовать эту команду!");

if (sscanf(params, "s[128]", params[0]))
return SendClientMessage(playerid, -1,
!"Используй: /lc [текст]");

static const
fmt_str[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s";
const
fmt_size = sizeof(fmt_str) + (-2 + sizeof(faction_name[])) + (-2 + MAX_PLAYER_NAME) + (-2 + 4) + 128;

#if fmt_size > MAX_CHATBUBBLE_LENGTH
#define final_size MAX_CHATBUBBLE_LENGTH
#else
#define final_size fmt_size
#endif
new buffer[final_size],
playerName[MAX_PLAYER_NAME];
#undef final_size

GetPlayerName(playerid, playerName, sizeof playerName);


format(buffer, sizeof buffer, fmt_str, faction_name[leader], playerName, playerid, params[0]);

return SendLeaderMessage(playerid, buffer);
}

Processing
22.01.2016, 22:36
Спасибо. :good2:

Desulaid
23.01.2016, 01:44
Вот набросок оптимизированного кода:


CMD:lc(playerid, params[])
{

static const
faction_name[][5] =
{
"LSPD",
/*...*/
};


new leader = pInfo[playerid][pLeader];

if (leader < 1)
return SendClientMessage(playerid, -1,
!"Community: {FFFFFF}Вы не уполномочены использовать эту команду!");

if (sscanf(params, "s[128]", params[0]))
return SendClientMessage(playerid, -1,
!"Используй: /lc [текст]");

static const
frmStr[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s";

new buffer[
sizeof frmStr +
sizeof faction_name[] +
MAX_PLAYER_NAME +
5 +
128
],
playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, sizeof playerName);


format(buffer, sizeof buffer, frmStr, faction_name[leader], playerName, playerid, params[0]);

return SendLeaderMessage(playerid, buffer);
}

Я бы тупо поставил 144(т.к. это лимит длинны сообщения в чат) и не рассчитывал размер массива по формуле. Здесь только "MAX_PLAYER_NAME + 5 + 128" за лимит выйдет.

L0ndl3m
23.01.2016, 19:05
Я бы тупо поставил 144(т.к. это лимит длинны сообщения в чат) и не рассчитывал размер массива по формуле. Здесь только "MAX_PLAYER_NAME + 5 + 128" за лимит выйдет.
В таком случае, я бы число 144 заменил на стандартную константу MAX_CHATBUBBLE_LENGTH, т.к. Kalcor может и изменить максимальную длину сообщения в чате сервера.

А если уж хотите, чтобы компилятор сам установил нужное количество ячеек ( осторожно: время компиляции скрипта увеличивается ), не вылезая за пределы MAX_CHATBUBBLE_LENGTH:



static const
fmt_str[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s";

const
fmt_size = sizeof(fmt_str) + (-2 + sizeof(faction_name[])) + (-2 + MAX_PLAYER_NAME) + (-2 + 4) + 128;

#if fmt_size > MAX_CHATBUBBLE_LENGTH
#define final_size MAX_CHATBUBBLE_LENGTH
#else
#define final_size fmt_size
#endif

new
string[final_size];

#undef final_size

Processing
24.01.2016, 03:05
Не жалею, что пришел узнавать нового именно на этот портал. :good: