Palonez
бб братки
- Сообщения
- 3,035
- Реакции
- 1,839
Не все перевелДержи, убрал то что ты просил + перевел плагин на новый синтаксис.
Последнее редактирование:
Не все перевелДержи, убрал то что ты просил + перевел плагин на новый синтаксис.
Понял, сейчас переделаю. Пределал.Не все перевел Посмотреть вложение 115178
а это?Понял, сейчас переделаю. Пределал.
А что с Handle не так?
Ну там должен быть производный от него тип данных EventА что с Handle не так?
Уже понял, не подумал) Сейчас исправлю. ИсправилНу там должен быть производный от него тип данных Event
Да и вообще до такого вида можно свернуть спокойно:Уже понял, не подумал) Сейчас исправлю. Исправил
public Plugin myinfo =
{
name = "Clean Chat",
author = "Monomizer",
version = "1.1",
};
public void OnPluginStart()
{
HookEvent("player_connect", EVT, EventHookMode_Pre);
HookEvent("player_disconnect", EVT, EventHookMode_Pre);
HookEvent("server_cvar", EVT, EventHookMode_Pre);
HookEvent("player_team", EVT, EventHookMode_Pre);
}
public Action EVT(Event hEvent, const char[] sName, bool dontBroadcast)
{
if(!dontBroadcast)
{
SetEventBroadcast(hEvent, true);
if(sName[7] == 'd') PrintToChatAll("\x04БОГ: \x03%N \x01пидорг ушёл от нас.", GetClientOfUserId(GetEventInt(hEvent, "userid")));
return Plugin_Changed;
}
return Plugin_Continue;
}
А хукс зачем, он там вроде не используется?Да и вообще до такого вида можно свернуть спокойно:
К тому же ты не добавил в конце каждого экшена ретурн, который нужен, чтобы не было варновC++:#include <sdkhooks> public Plugin myinfo = { name = "Clean Chat", author = "Monomizer", version = "1.1", }; public void OnPluginStart() { HookEvent("player_connect", EVT, EventHookMode_Pre); HookEvent("player_disconnect", EVT, EventHookMode_Pre); HookEvent("server_cvar", EVT, EventHookMode_Pre); HookEvent("player_team", EVT, EventHookMode_Pre); } public Action EVT(Event hEvent, const char[] sName, bool dontBroadcast) { if(!dontBroadcast) { SetEventBroadcast(hEvent, true); if(sName[7] == 'd') PrintToChatAll("\x04БОГ: \x03%N \x01пидорг ушёл от нас.", GetClientOfUserId(GetEventInt(hEvent, "userid"))); return Plugin_Changed; } return Plugin_Continue; }
ПриснилосьА хукс зачем, он там вроде не используется?
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) bAdmin[i] = !!(iFlags & GetUserFlagBits(i));Спасибо, только что похожее нашел). Но все равно спасибо@7pElllHuK,for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) bAdmin[i] = !!(iFlags & GetUserFlagBits(i));
Спасибо большоеЕсли нужно, чтобы при пустом значении квара считало всех админами, тогда так:bAdmin[i] = !iFlags || iFlags & GetUserFlagBits(i));
char sNameDP[32];
int iMaxDP = 0;
for (int i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
{
if (g_iKills[i] > g_iKills[iMaxDP]) iMaxDP = i;
else if ((g_iDamage[i] > g_iDamage[iMaxDP]) && (g_iKills[i] == g_iKills[iMaxDP])) iMaxDP = i;
}
if (!IsValidClient(i)) continue;
if (!IsPlayerAlive(i)) continue;
GetClientName(iMaxDP, sNameDP, sizeof(sNameDP));
if (IsClientInGame(i) && !IsFakeClient(i))
{
int iTeam2 = GetClientTeam(iMaxDP);
if (iWinner == 2)
{
if (g_C4[1] > 0) CPrintToChatAll("%t %t", "Prefix", "MVP_Bomb_Planted", g_Name_Bomb_Planted);
else if (iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP);
else if (iTeam2 == 3)CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP);
}
if (iWinner == 3)
{
if (g_C4[2] > 0) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Bomb_Defused", g_Name_Defused);
else if (iTeam2 == 3) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP);
else if (iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP);
}
}
}
int iMaxDP = 1;Всем добрый вечер, подскажите пожалуйста, как исправить ошибку не ломая вывод текста[SM] Exception reported: Client index 0 is invalidКод:char sNameDP[32]; int iMaxDP = 0; for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) { if (g_iKills[i] > g_iKills[iMaxDP]) iMaxDP = i; else if ((g_iDamage[i] > g_iDamage[iMaxDP]) && (g_iKills[i] == g_iKills[iMaxDP])) iMaxDP = i; } if (!IsValidClient(i)) continue; if (!IsPlayerAlive(i)) continue; GetClientName(iMaxDP, sNameDP, sizeof(sNameDP)); if (IsClientInGame(i) && !IsFakeClient(i)) { int iTeam2 = GetClientTeam(iMaxDP); if (iWinner == 2) { if (g_C4[1] > 0) CPrintToChatAll("%t %t", "Prefix", "MVP_Bomb_Planted", g_Name_Bomb_Planted); else if (iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP); else if (iTeam2 == 3)CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP); } if (iWinner == 3) { if (g_C4[2] > 0) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Bomb_Defused", g_Name_Defused); else if (iTeam2 == 3) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP); else if (iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP); } } }
Error log указывает на выделенную в коде строку. Если я добавляю проверку: if (0 < iClient <= MaxClients) то текст просто не выводится игрокам, а мне нужно чтоб он выводился но не было ошибки (Сейчас текст отлично выводится и все работает как надо, но вылазит эта ошибка)
тебе там ещё много исправлять нужнокак исправить ошибку
{
if(iWinner == 2 && g_C4[1] > 0)
CPrintToChatAll("%t %t", "Prefix", "MVP_Bomb_Planted", g_Name_Bomb_Planted);
else if(iWinner == 3 && g_C4[2] > 0)
CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Bomb_Defused", g_Name_Defused);
else if(iWinner > 1)
{
int iMaxDP;
g_iKills[0] = 0;
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
{
if (g_iKills[i] > ) iMaxDP = i;
else if (g_iKills[i] == g_iKills[iMaxDP] && g_iDamage[i] > g_iDamage[iMaxDP]) iMaxDP = i;
}
if(iMaxDP)
{
char sNameDP[MAX_NAME_LENGTH];
GetClientName(iMaxDP, sNameDP, sizeof(sNameDP));
if(iTeam2 == 3)
CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP);
else if(iTeam2 == 2)
CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP);
}
}
}
"#format" "{1:N}"ПРобовал, тогда отображается информация не корректно. выводит игрока который в спекторах как МВП, хотя он не игралint iMaxDP = 1;
Если у всех счёт 0 или отрицательный, у тебя iMaxDP остаётся 0, т.е. сервер
Понял, спасибо большое, чуть позже проверю, отпишусьтебе там ещё много исправлять нужно
И вывод нужно в отдельном цикле, если выбирать кому слать.
А вообще у тебя должно было быть примерно так:Ну и вместо использования строковой переменной ты можешь пересылать индекс игрока, а в переводе использоватьC-подобный:{ if(iWinner == 2 && g_C4[1] > 0) CPrintToChatAll("%t %t", "Prefix", "MVP_Bomb_Planted", g_Name_Bomb_Planted); else if(iWinner == 3 && g_C4[2] > 0) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Bomb_Defused", g_Name_Defused); else if(iWinner > 1) { int iMaxDP; g_iKills[0] = 0; for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) { if (g_iKills[i] > ) iMaxDP = i; else if (g_iKills[i] == g_iKills[iMaxDP] && g_iDamage[i] > g_iDamage[iMaxDP]) iMaxDP = i; } if(iMaxDP) { char sNameDP[MAX_NAME_LENGTH]; GetClientName(iMaxDP, sNameDP, sizeof(sNameDP)); if(iTeam2 == 3) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP); else if(iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP); } } }"#format" "{1:N}"
Можете дать пожалуйста пример как пересылать индекс игрока? Я не совсем понимаю как это сделатьтебе там ещё много исправлять нужно
И вывод нужно в отдельном цикле, если выбирать кому слать.
А вообще у тебя должно было быть примерно так:Ну и вместо использования строковой переменной ты можешь пересылать индекс игрока, а в переводе использоватьC-подобный:{ if(iWinner == 2 && g_C4[1] > 0) CPrintToChatAll("%t %t", "Prefix", "MVP_Bomb_Planted", g_Name_Bomb_Planted); else if(iWinner == 3 && g_C4[2] > 0) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Bomb_Defused", g_Name_Defused); else if(iWinner > 1) { int iMaxDP; g_iKills[0] = 0; for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) { if (g_iKills[i] > ) iMaxDP = i; else if (g_iKills[i] == g_iKills[iMaxDP] && g_iDamage[i] > g_iDamage[iMaxDP]) iMaxDP = i; } if(iMaxDP) { char sNameDP[MAX_NAME_LENGTH]; GetClientName(iMaxDP, sNameDP, sizeof(sNameDP)); if(iTeam2 == 3) CPrintToChatAll("%t %t", "Prefix_CT", "MVP_Top_Killer_CT", sNameDP); else if(iTeam2 == 2) CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", sNameDP); } } }"#format" "{1:N}"
в плагине:как пересылать индекс игрока
CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", iMaxDP);"MVP_Top_Killer"
{
"#format" "{1:N}"
"ru" "Максимальное количество фрагов у {1}"
}
У меня так и стоит сейчасв плагине:CPrintToChatAll("%t %t", "Prefix", "MVP_Top_Killer", iMaxDP);
в переводе:C-подобный:"MVP_Top_Killer" { "#format" "{1:N}" "ru" "Максимальное количество фрагов у {1}" }