Client index x is invalid

Rolzzandik

Участник
Сообщения
492
Реакции
234
Делаю говнокод плагин, но что-то явно идет не так.
Никто из игроков не выходил, проверки пока нету, знаю.
C-подобный:
public Action PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int victimId = GetEventInt(event, "userid");
    int attackerId = GetEventInt(event, "attacker");
    int victim = GetClientOfUserId(victimId);
    int attacker = GetClientOfUserId(attackerId);
    GetClientName(attacker, attacker_name, sizeof(attacker_name));
    GetClientName(victim, victim_name, sizeof(victim_name));
    if(attacker > 0 && GetClientTeam(attacker) != GetClientTeam(victim))
    {
        ++Kills[attacker]; // +1 к числу
        Kills[victim] = 0;
        ++MapKills[attacker];
    }
    if (gOverlay_mode == 1){
           //DisplayInfo(attackerId, victim_name, Kills[attacker], MapKills[attacker]);
           PrintToChat(attackerId, "%s, %i, %i", victim, Kills[attacker], MapKills[attacker]); //сторка 174
      }
}



1597084544045.png
Что я делаю не так?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Я бы на твоём месте ещё проверял не является атакующий ботом (нафига ботам сообщения слать?).
Да и код отправки помести в скобки предыдущей проверки (где проверяется индекс и команда игрока).
И ещё нужно убедиться, что индекс игрока не больше значения MaxClients (у тебя оно однозначно больше).
К тому же ты пытаешься отправить сообщение игроку по его UserID, когда его нужно слать по индексу (как тебе чуть выше указали).
 

RudikS

Участник
Сообщения
130
Реакции
61
я бы на твоём месте ещё проверял не является атакующий ботом (нафига ботам оверлей слать?)
да и код отправки помести в скобки предыдущей проверки (где проверяется индекс и команда игрока)
и ещё нужно убедиться, что индекс игрока не больше значения MaxClients (у тебя оно однозначно больше)
он userid юзает вместо индекса))
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
Я бы на твоём месте ещё проверял не является атакующий ботом (нафига ботам сообщения слать?).
Да и код отправки помести в скобки предыдущей проверки (где проверяется индекс и команда игрока).
И ещё нужно убедиться, что индекс игрока не больше значения MaxClients (у тебя оно однозначно больше).
К тому же ты пытаешься отправить сообщение игроку по его UserID, когда его нужно слать по индексу (как тебе чуть выше указали).
Второй строкой написал
проверки пока нету, знаю.
он userid юзает вместо индекса))
ля, у меня уже кукуха едет.
 

romeo7

Участник
Сообщения
189
Реакции
93
C-подобный:
public Action PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int victim = GetClientOfUserId(GetEventInt(event, "userid"));
    int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    
    GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
    GetClientName(victim, victim_name, sizeof(victim_name)); // ?
    
    if(attacker > 0 && GetClientTeam(attacker) != GetClientTeam(victim))
    {
        ++Kills[attacker]; // +1 к числу
        Kills[victim] = 0;
        ++MapKills[attacker];
    }
    
    if (gOverlay_mode == 1)
    {
        if(attacker && !IsFakeClient(attacker))
        {
            //DisplayInfo(attacker, victim_name, Kills[attacker], MapKills[attacker]);
            PrintToChat(attacker, "%s, %i, %i", victim, Kills[attacker], MapKills[attacker]); //сторка 174
        }
    }
}
 
Последнее редактирование:

Rolzzandik

Участник
Сообщения
492
Реакции
234
C-подобный:
public Action PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int victim = GetClientOfUserId(GetEventInt(event, "userid"));
    int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
   
    GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
    GetClientName(victim, victim_name, sizeof(victim_name)); // ?
   
    if(attacker > 0 && GetClientTeam(attacker) != GetClientTeam(victim))
    {
        ++Kills[attacker]; // +1 к числу
        Kills[victim] = 0;
        ++MapKills[attacker];
    }
   
    if (gOverlay_mode == 1)
    {
        if(attacker && !IsFakeClient(attacker))
        {
            //DisplayInfo(attacker, victim_name, Kills[attacker], MapKills[attacker]);
            PrintToChat(attacker, "%s, %i, %i", victim, Kills[attacker], MapKills[attacker]); //сторка 174
        }
    }
}
GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
GetClientName(victim, victim_name, sizeof(victim_name)); // ?
Это чуть позже понадобиться, + я еще в этой строке ошибся: PrintToChat(attacker, "%s, %i, %i", victim_name, Kills[attacker], MapKills[attacker]);
 

romeo7

Участник
Сообщения
189
Реакции
93
GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
GetClientName(victim, victim_name, sizeof(victim_name)); // ?
Это чуть позже понадобиться, + я еще в этой строке ошибся: PrintToChat(attacker, "%s, %i, %i", victim_name, Kills[attacker], MapKills[attacker]);
Вам нужно определить victim_name и attacker_name. Ещё хотите добавить имя игрока в чат тогда используйте %N.
C-подобный:
public Action PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    char attacker_name[MAX_NAME_LENGTH], victim_name[MAX_NAME_LENGTH]; <--
    int victim = GetClientOfUserId(GetEventInt(event, "userid"));
    int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
   
    GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
    GetClientName(victim, victim_name, sizeof(victim_name)); // ?
   
    if(attacker > 0 && GetClientTeam(attacker) != GetClientTeam(victim))
    {
        ++Kills[attacker]; // +1 к числу
        Kills[victim] = 0;
        ++MapKills[attacker];
    }
   
    if (gOverlay_mode == 1)
    {
        if(attacker && !IsFakeClient(attacker))
        {
            //DisplayInfo(attacker, victim_name, Kills[attacker], MapKills[attacker]);
            PrintToChat(attacker, "%N, %i, %i", victim, Kills[attacker], MapKills[attacker]); //сторка 174
        }
    }
}
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
Вам нужно определить victim_name и attacker_name. Ещё хотите добавить имя игрока в чат тогда используйте %N.
C-подобный:
public Action PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    char attacker_name[MAX_NAME_LENGTH], victim_name[MAX_NAME_LENGTH]; <--
    int victim = GetClientOfUserId(GetEventInt(event, "userid"));
    int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
  
    GetClientName(attacker, attacker_name, sizeof(attacker_name)); // ?
    GetClientName(victim, victim_name, sizeof(victim_name)); // ?
  
    if(attacker > 0 && GetClientTeam(attacker) != GetClientTeam(victim))
    {
        ++Kills[attacker]; // +1 к числу
        Kills[victim] = 0;
        ++MapKills[attacker];
    }
  
    if (gOverlay_mode == 1)
    {
        if(attacker && !IsFakeClient(attacker))
        {
            //DisplayInfo(attacker, victim_name, Kills[attacker], MapKills[attacker]);
            PrintToChat(attacker, "%N, %i, %i", victim, Kills[attacker], MapKills[attacker]); //сторка 174
        }
    }
}
Та я уже все сделал)
 
Сверху Снизу