Не исключено, что если ориентирование поддерживания кода идет на свое усмотрение, в меньшей степени - экономии своего времени, в большей - воздерживание от морального переутомления, т.к. помимо данного сервиса, есть другие источники.Вот вопрос, почему все стараются всё налепить на кучу, будто с целью экономить строчки?
Если смотреть на кусок кода ТС и плагин оригинала, то изменения минимальны.Вероятно, пользователи этого форума назовут даже этот подход своим любимым словом "оптимизация".
Поэтому считаю, что изменения должны быть минимальны произведены, иначе если добавлять свои наработки (как в данном случае) или кардинально изменять плагин, это отразится в конечном счете себе не на пользу или в новую тему.для количество пунктов на странице в ксго функция должна примерно выглядеть вот так
new menu_items = 0;
new reqmenuitems = 4;
if (KvGotoFirstSubKey(kv))
{
new index = 0;
decl String:buffer[255];
decl String:bufferindex[5];
do{
KvGetString(kv, "model", g_sPropList[index], 256);
PrecacheModel(g_sPropList[index]);
KvGetSectionName(kv, buffer, sizeof(buffer));
IntToString(index, bufferindex, sizeof(bufferindex));
AddMenuItem(h_PropsMenu, bufferindex, buffer);
index++;
menu_items++;
if (menu_items == reqmenuitems)
{
menu_items = 0;
AddMenuItem(h_PropsMenu, "", "", ITEMDRAW_SPACER);
AddMenuItem(h_PropsMenu, "rote", "[Повернуть предмет]");
AddMenuItem(h_PropsMenu, "remove", "[Удалить предмет]");
}
}
while (KvGotoNextKey(kv));
}
new menu_items = 5;
new reqmenuitems = 5;
if (KvGotoFirstSubKey(kv))
{
new index = 0;
decl String:buffer[255];
decl String:bufferindex[5];
do {
if (menu_items == reqmenuitems)
{
menu_items = 0;
AddMenuItem(h_PropsMenu, "rote", "[Повернуть предмет]");
AddMenuItem(h_PropsMenu, "remove", "[Удалить предмет]");
AddMenuItem(h_PropsMenu, "", "", ITEMDRAW_SPACER);
}
menu_items++;
KvGetString(kv, "model", g_sPropList[index], 256);
PrecacheModel(g_sPropList[index]);
KvGetSectionName(kv, buffer, sizeof(buffer));
IntToString(index, bufferindex, sizeof(bufferindex));
AddMenuItem(h_PropsMenu, bufferindex, buffer);
index++;
}
while (KvGotoNextKey(kv));
}
//char sItem[][] =
decl String:sItem[][] = { "rote", "[Повернуть предмет]", "remove", "[Удалить предмет]\n " };
StaticNumInsertItem(h_PropsMenu, 0, sItem, sizeof(sItem));
#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7
/**
* Добавление в меню статический(e) элемент(ы) под своим номером.
*
* @param menu Menu Handle.
* @param startNum Позиция, начиная с 0.
* @param sItem Массив, One - Item information string, Two - item display string.
* @param maxSize Общее кол-во элементов.
* @return True on success, false on failure.
* @error Invalid Handle or clear menu или если у элемента нет пары (One, Two, One)
*/
stock bool:StaticNumInsertItem(Handle:menu, startNum, const String:sItem[][], maxSize)
{
if (menu != INVALID_HANDLE)
{
new iMenuItemCount = GetMenuItemCount(menu);
if (iMenuItemCount > 0)
{
new iLog = maxSize % 2;
new iMaxPageItems = GetMaxPageItems(GetMenuStyle(menu));
//if (!iLog && startNum >= 0 && startNum < iMaxPageItems)
if (!iLog && startNum >= 0)
{
#if defined DEBUG
LogMessage("iMenuItemCount[%d]", iMenuItemCount);
LogMessage("iMaxPageItems[%d]", iMaxPageItems);
LogMessage("maxSize[%d]", maxSize);
LogMessage("startNum[%d]", startNum);
LogMessage("##### StartMenu #####");
#endif
//low
for (new i = 0, j = startNum; i < maxSize; j++, i += 2)
{
#if defined DEBUG
LogMessage("%s %s", sItem[i], sItem[i + 1]);
if (!InsertMenuItem(menu, j, sItem[i], sItem[i + 1]))
{
return false;
}
#else
InsertMenuItem(menu, j, sItem[i], sItem[i + 1]);
#endif
}
new bool:bExit = GetMenuExitButton(menu);
new bool:bExitandBack = GetMenuExitBackButton(menu);
if (bExitandBack)
{
iMaxPageItems -= 4;
}
else if (bExit)
{
iMaxPageItems -= 3;
}
else
{
iMaxPageItems -= 3;
}
//middle
new iCount;
for (iCount = iMaxPageItems + startNum; iCount < GetMenuItemCount(menu); iCount += iMaxPageItems)
{
for (new k = 0, j = iCount; k < maxSize; j++, k += 2)
{
#if defined DEBUG
if (!InsertMenuItem(menu, j, sItem[k], sItem[k + 1]))
{
return false;
}
#else
InsertMenuItem(menu, j, sItem[k], sItem[k + 1]);
#endif
}
}
#if defined DEBUG
LogMessage("iCount[%d]_ItemCount[%d]", iCount, GetMenuItemCount(menu));
#endif
//hight
if ((iCount - GetMenuItemCount(menu)) < startNum) // && startNum < maxSize)
{
for (new i = 0, j = GetMenuItemCount(menu); i < maxSize; j++, i += 2)
{
#if defined DEBUG
//LogMessage("%s %s", sItem[i], sItem[i + 1]);
if (!AddMenuItem(menu, sItem[i], sItem[i + 1]))
{
return false;
}
#else
AddMenuItem(menu, sItem[i], sItem[i + 1]);
#endif
}
}
return true;
}
else
{
LogError("Bad sItem", sItem);
}
}
else
{
LogError("Clear Menu");
}
}
return false;
}
#else
/**
* Добавление в меню статический(e) элемент(ы) под своим номером.
*
* @param menu Menu Handle.
* @param startNum Позиция, начиная с 0.
* @param sItem Массив, One - Item information string, Two - item display string.
* @param maxSize Общее кол-во элементов.
* @return True on success, false on failure.
* @error Invalid Handle or clear menu или если у элемента нет пары (One, Two, One)
*/
stock bool StaticNumInsertItem(Menu menu, int startNum, const char[][] sItem, int maxSize)
{
if (menu != INVALID_HANDLE)
{
int iMenuItemCount = menu.ItemCount;
if (iMenuItemCount > 0)
{
int iLog = maxSize % 2;
int iMaxPageItems = GetMaxPageItems(menu.Style);
//if (!iLog && startNum >= 0 && startNum < iMaxPageItems)
if (!iLog && startNum >= 0)
{
#if defined DEBUG
LogMessage("iMenuItemCount[%d]", iMenuItemCount);
LogMessage("iMaxPageItems[%d]", iMaxPageItems);
LogMessage("maxSize[%d]", maxSize);
LogMessage("startNum[%d]", startNum);
LogMessage("##### StartMenu #####");
#endif
//low
for (int i = 0, j = startNum; i < maxSize; j++, i += 2)
{
#if defined DEBUG
LogMessage("%s %s", sItem[i], sItem[i + 1]);
if (!menu.InsertItem(j, sItem[i], sItem[i + 1]))
{
return false;
}
#else
menu.InsertItem(j, sItem[i], sItem[i + 1]);
#endif
}
bool bExit = menu.ExitButton;
bool bExitandBack = menu.ExitBackButton;
if (bExitandBack)
{
iMaxPageItems -= 4;
}
else if (bExit)
{
iMaxPageItems -= 3;
}
else
{
iMaxPageItems -= 3;
}
//middle
int iCount;
for (iCount = iMaxPageItems + startNum; iCount < menu.ItemCount; iCount += iMaxPageItems)
{
for (int k = 0, j = iCount; k < maxSize; j++, k += 2)
{
#if defined DEBUG
if (!menu.InsertItem(j, sItem[k], sItem[k + 1]))
{
return false;
}
#else
menu.InsertItem(j, sItem[k], sItem[k + 1]);
#endif
}
}
#if defined DEBUG
LogMessage("iCount[%d]_ItemCount[%d]", iCount, menu.ItemCount);
#endif
//hight
if ((iCount - menu.ItemCount) < startNum) // && startNum < maxSize)
{
for (int i = 0, j = menu.ItemCount; i < maxSize; j++, i += 2)
{
#if defined DEBUG
//LogMessage("%s %s", sItem[i], sItem[i + 1]);
if (!menu.AddItem(sItem[i], sItem[i + 1]))
{
return false;
}
#else
menu.AddItem(sItem[i], sItem[i + 1]);
#endif
}
}
return true;
}
else
{
LogError("Bad sItem", sItem);
}
}
else
{
LogError("Clear Menu");
}
}
return false;
}
#endif

Честно, не понимаю зачем ты отвечал на мои вопросы
и описывает почему не использовал "InsertMenuItem", или "StaticNumInsertItem".Вышеописанный кусок кода, были сделано возможно мной, сама идея этого сообщения и что подразумевается под "изменения минимальны":
PHP:new menu_items = 0; new reqmenuitems = 4; if (KvGotoFirstSubKey(kv)) { new index = 0; decl String:buffer[255]; decl String:bufferindex[5]; do{ KvGetString(kv, "model", g_sPropList[index], 256); PrecacheModel(g_sPropList[index]); KvGetSectionName(kv, buffer, sizeof(buffer)); IntToString(index, bufferindex, sizeof(bufferindex)); AddMenuItem(h_PropsMenu, bufferindex, buffer); index++; menu_items++; if (menu_items == reqmenuitems) { menu_items = 0; AddMenuItem(h_PropsMenu, "", "", ITEMDRAW_SPACER); AddMenuItem(h_PropsMenu, "rote", "[Повернуть предмет]"); AddMenuItem(h_PropsMenu, "remove", "[Удалить предмет]"); } } while (KvGotoNextKey(kv)); }PHP:new menu_items = 5; new reqmenuitems = 5; if (KvGotoFirstSubKey(kv)) { new index = 0; decl String:buffer[255]; decl String:bufferindex[5]; do { if (menu_items == reqmenuitems) { menu_items = 0; AddMenuItem(h_PropsMenu, "rote", "[Повернуть предмет]"); AddMenuItem(h_PropsMenu, "remove", "[Удалить предмет]"); AddMenuItem(h_PropsMenu, "", "", ITEMDRAW_SPACER); } menu_items++; KvGetString(kv, "model", g_sPropList[index], 256); PrecacheModel(g_sPropList[index]); KvGetSectionName(kv, buffer, sizeof(buffer)); IntToString(index, bufferindex, sizeof(bufferindex)); AddMenuItem(h_PropsMenu, bufferindex, buffer); index++; } while (KvGotoNextKey(kv)); }