По моему кто-то заказывал подобный плагин на dev-source. Код плохо написан.
Сразу хочу предупредить, у меня нет цели как то оскорбить автора, я задаю вопросы не для себя, мне они не нужны, я бы хотел чтобы автор ответил на них сам себе.
Записывать так в глобальные переменные нежелательно. Дословно:
static const char aWeapons[][] = ...
Мог бы тоже записать в квар. Кстати, касательно кваров.
При изменение значений кваров через консоль значения не будут изменены, т.к не были созданы хуки.
HookConVarChange · convars · SourceMod Scripting API Reference
ConVar.AddChangeHook · convars · SourceMod Scripting API Reference
Не проше было бы вести свой подсчет раундов, нежели каждый раз считать общий счет команд при каждом возрождении игрока (проверка на валидность игрока при возрождении не нужна), в конце и в начале раунда?
if (iRound == (CS_GetTeamScore(2) + CS_GetTeamScore(3)))
Далее, ты удаляешь все оружие со всей карты и у игроков соответственно тоже, зачем после того как ты удалил все оружие снова пытаешься удалить оружие у игроков?
RemoveMap();
bCustomRoundEnd = true;
for (int iClient = 1; iClient <= MAXPLAYERS; iClient++)
{
RemoveAll(iClient);
}
Зачем проверка 'if(i > 0)' ?
for (new i = 1; i <= MaxClients; i++)
{
if (i > 0)
{
if (IsClientInGame(i))
{
Код на удаление всего оружие у игрока:
stock void RemoveNades(int iClient)
{
while (RemoveWeaponBySlot(iClient, 3))
{
for (int i = 0; i < 6; i++)
SetEntProp(iClient, Prop_Send, "m_iAmmo", 0, _, g_iGrenadeOffsets[i]);
}
}
stock bool RemoveWeaponBySlot(int iClient, int slot)
{
int entity = GetPlayerWeaponSlot(iClient, slot);
if (IsValidEdict(entity))
{
RemovePlayerItem(iClient, entity);
AcceptEntityInput(entity, "Kill");
return true;
}
return false;
}
Можно заменить на >>
void RemoveWeapon(int iClient)
{
for(int i = 0, iEntity; i < 5; i++)
{
while((iEntity= GetPlayerWeaponSlot(iClient, i)) != -1)
{
RemovePlayerItem(iClient, iEntity);
AcceptEntityInput(iEntity, "Kill");
}
}
}
Цикл за тем еще один цикл.
Стоило использовать в верхнем цикле: PrintToChat(i, " ");
char sz1[256],sz2[256],sz3[256];
iRound = (CS_GetTeamScore(2) + CS_GetTeamScore(3) + 1);
PrintToChatAll(" ");
for (int i = 1; i <= MAXPLAYERS; i++)
{
if (IsClientInGame(i)){
SetGlobalTransTarget(i);
FormatEx(sz1, sizeof(sz1), "%t", "sz1", iRound);
FormatEx(sz2, sizeof(sz2), "%t", "sz2", aWeaponName[1], aPistolName[1]);
FormatEx(sz3, sizeof(sz3), "%t", "sz3", aCommandName[1]);
CGOPrintToChat(i, sz1);
CGOPrintToChat(i, sz2);
CGOPrintToChat(i, sz3);
}
}
PrintToChatAll(" ");
Убивай таймеры при смене карты.
В пабликах 'hWeapons' и 'hPistols' практически идентичный код, можно было оптимизировать этот момент.
Остальное потом напишу, если будет желание...