Kills - подсчет убийств 1

Подсчитывает убийства за раунд , прошу проверить работает ли :D

  1. R1w3d

    R1w3d

    Сообщения:
    100
    Симпатии:
    10
    Пользователь riwed разместил новый ресурс:

    Kills - подсчет убийств - Подсчитывает убийства за раунд , прошу проверить работает ли :D

     
    Последнее редактирование: 27 май 2018
    BossKotoriiNeSmok нравится это.
  2. R1KO

    R1KO всё тлен Супермодератор

    Сообщения:
    7.934
    Симпатии:
    5.393
    @riwed, код нормальный. оно не может не работать.

    тут можно сделать так:
    PHP:
    public player_spawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    Kills[GetClientOfUserId(GetEventInt(event"userid"))] = 0;
    }

    public 
    player_death(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"attacker"));
        if (
    client && GetClientTeam(client) != GetClientTeam(GetClientOfUserId(GetEventInt(event"userid"))))
        {
            ++
    Kills[client];
        }
     
    R1w3d нравится это.
  3. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.235
    Симпатии:
    437
    Для лучшей оптимизации лучше использовать iClient != 0
     
    R1w3d нравится это.
  4. Drumanid

    Drumanid Дурак

    Сообщения:
    1.598
    Симпатии:
    1.130
    'player_spawn' не совсем корректное т.к некоторых игроков это событие пропускает, лучше всего использовать SDKHook.
    PHP:
    int Kills[MAXPLAYERS +1];

    public 
    void OnPluginStart()
    {
        
    HookEvent("round_start"RoundSE);
        
    HookEvent("round_end"RoundSE);
        
    HookEvent("player_death"PlayerDeath);
    }

    public 
    Action RoundSE(Event event, const char[] namebool dbc)
    {
        if(
    name[6] == 's')
        {
            for(
    int i 1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i)) Kills[i] = 0;
            }
        }
        else
        {
            for(
    int i 1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i)) PrintToChat(i"Вы убили %i игрока(ов)"Kills[i]);
            }
        }
    }

    public 
    Action PlayerDeath(Event event, const char[] namebool dbc)
    {
        
    int iAttacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    iAttacker && GetClientTeam(iAttacker) != GetClientTeam(GetClientOfUserId(GetEventInt(event"userid"))))
        {
            ++
    Kills[iAttacker];
        }
    }

    public 
    void OnClientPostAdminCheck(int iClient) { Kills[iClient] = 0; }
    Так лучше будет...
     
    Последнее редактирование модератором: 11 янв 2018
    R1w3d нравится это.
  5. R1w3d

    R1w3d

    Сообщения:
    100
    Симпатии:
    10
    Пользователь riwed обновил ресурс Kills - подсчет убийств новой записью:

    Kills - подсчет убийств

    Узнать больше об этом обновлении...
     
    Последнее редактирование: 11 янв 2018
  6. KEKEXA

    KEKEXA

    Сообщения:
    16
    Симпатии:
    1
    Возможна ли работоспособность на css v34 [sourcemod 1.6] ?
     
  7. R1w3d

    R1w3d

    Сообщения:
    100
    Симпатии:
    10
    А вы попробуйте ;D
    должно
     
  8. R1w3d

    R1w3d

    Сообщения:
    100
    Симпатии:
    10
    Пользователь riwed обновил ресурс Kills - подсчет убийств новой записью:

    Kills - подсчет убийств

    Узнать больше об этом обновлении...
     
  9. Drumanid

    Drumanid Дурак

    Сообщения:
    1.598
    Симпатии:
    1.130
    У вас в архиве старая версия и новая(работать так как вы хотите - не будет)

    Почитайте основы...
    Весь список уроков от @R1KO
    [SourcePawn] Уроки (Содержание)

    Разбор плагина... (уже с поправкой)
    PHP:
    int Kills[MAXPLAYERS +1]; // Создаем число(переменную)

    public void OnPluginStart() // Загрузка плагина
    {
        
    HookEvent("round_start"RoundSE); // Регистрация события
        
    HookEvent("round_end"RoundSE);
        
    HookEvent("player_death"PlayerDeath);
    }

    public 
    Action RoundSE(Event event, const char[] namebool dbc// Паблик события
    {
        if(
    name[6] == 's'// Проверяем имя события
        
    {
            for(
    int i 1<= MaxClientsi++) // Цикл по всем игрокам
            
    {
                if(
    IsClientInGame(i)) Kills[i] = 0// Обнуляем число
            
    }
        }
        else
        {
            for(
    int i 1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i)) // Если игрок в сети выполняем ниже написанное
                
    {
                    if(
    Kills[i] == 0PrintToChat(i"Вы никого не убили, в следующий раз повезет"); // Проверяем и выводим сообщение
                    
    else PrintToChat(i"Вы убили %i игрока(ов)"Kills[i]); // Если...
                
    }
            }
        }
    }

    public 
    Action PlayerDeath(Event event, const char[] namebool dbc)
    {
        
    int iAttacker GetClientOfUserId(GetEventInt(event"attacker")); // Получаем атакующего
        
    if(iAttacker && GetClientTeam(iAttacker) != GetClientTeam(GetClientOfUserId(GetEventInt(event"userid"))))        // Если у атакующего id больше чем 0 ...
                                                                                                                        // Получаем команду атакующего, получаем мертвого и проверяем не равен ли атакующий команде мертвого
        
    {
            ++
    Kills[iAttacker]; // +1 к числу
        
    }
    }

    public 
    void OnClientPostAdminCheck(int iClient) { Kills[iClient] = 0; } // Обнуляем заходящего игрока на сервер, мало ли возродиться после старта раунда.
     
    Ice_Sochi и R1w3d нравится это.
  10. R1KO

    R1KO всё тлен Супермодератор

    Сообщения:
    7.934
    Симпатии:
    5.393
    пруфы есть? ни разу с таким не сталкивался.
     
    Danyas, Крузяра, Drimer и ещё 1-му нравится это.
  11. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.235
    Симпатии:
    437
    EventHookMode_PostNoCopy для round_start/end :ireful3:
     
    Danyas нравится это.
  12. Drumanid

    Drumanid Дурак

    Сообщения:
    1.598
    Симпатии:
    1.130
    Пруфов не будет. Сам решил убедиться сделав логирование. Все игроки были посчитаны (боты)...
    С чего был сделан такой вывод?
    То ли модель выдавал, то ли таймер пытался уничтожишь и в итоге что то пропускало, а что то выполнялось - это я отчетливо помню, тогда и сделал такой вывод и с тех пор перестал использовать это событие, т.к sdkhooks все было нормально.
     
  13. BossKotoriiNeSmok

    BossKotoriiNeSmok

    Сообщения:
    496
    Симпатии:
    87
    Прикольно так то,было б еще прикольно,тип сделать в конце сколько всего дамага снес.
     
  14. lexaorod007

    lexaorod007

    Сообщения:
    1
    Симпатии:
    0
    Архив поврежден:acute:
     
  15. SlavON

    SlavON

    Сообщения:
    983
    Симпатии:
    139
    Всё в порядке с архивом, архиватор скорей повреждён)
     
  16. EuguneID

    EuguneID

    Сообщения:
    291
    Симпатии:
    10
    скиншот бы)
     
  17. d4Ck

    d4Ck

    Сообщения:
    382
    Симпатии:
    230
    Скрин сообщения в чате?
     
  18. EuguneID

    EuguneID

    Сообщения:
    291
    Симпатии:
    10
    как это выглядит
     
  19. Grey83

    Grey83

    Сообщения:
    1.714
    Симпатии:
    811
    @BossKotoriiNeSmok, так, что ли?
    PHP:
    #pragma semicolon 1
    #pragma newdecls required

    #include <sdkhooks>

    bool bLate;
    int iKills[MAXPLAYERS+1];
    float fDmg[MAXPLAYERS+1];

    public 
    Plugin myinfo =
    {
        
    name        "Round kill & damage stats",
        
    author        "Grey83",
        
    description    "Shows to the player at the end of the each round statistics of kills and damage that he inflicted",
        
    version        "1.0.0",
        
    url            "http://steamcommunity.com/groups/grey83ds"
    };

    public 
    APLRes AskPluginLoad2(Handle myselfbool latechar[] errorint err_max)
    {
        
    bLate late;
        return 
    APLRes_Success;
    }

    public 
    void OnPluginStart()
    {
        
    HookEvent("round_start"Event_StartEventHookMode_PostNoCopy);
        
    HookEvent("round_end"Event_EndEventHookMode_PostNoCopy);
        
    HookEvent("player_death"Event_Death);

        if(
    bLate)
        {
            for(
    int i 1<= MaxClientsi++) if(IsClientAuthorized(i)) OnClientPostAdminCheck(i);
            
    bLate false;
        }
    }

    public 
    void OnClientPostAdminCheck(int client)
    {
        
    iKills[client] = 0;
        
    fDmg[client] = 0.0;
        
    SDKHook(clientSDKHook_OnTakeDamagePostOnTakeDamage);
    }

    public 
    void OnTakeDamage(int victimint attackerint inflictorfloat damageint damagetype)
    {
        if(((
    damagetype DMG_BULLET) || (damagetype DMG_SLASH) || (damagetype DMG_BLAST) || (damagetype DMG_CLUB)
        || (
    damagetype DMG_BUCKSHOT)) && IsClientsValid(attackervictim))
            
    fDmg[attacker] += damage;
    }

    public 
    void Event_Start(Event event, const char[] namebool dontBroadcast)
    {
        for(
    int i 1<= MaxClientsi++)
        {
            
    iKills[i] = 0;
            
    fDmg[i] = 0.0;
        }
    }

    public 
    void Event_End(Event event, const char[] namebool dontBroadcast)
    {
        static 
    char msg[256];
        for(
    int i 1<= MaxClientsi++) if(IsClientInGame(i) && !IsFakeClient(i) && fDmg[i])
        {
            if(!
    fDmg[i]) Format(msg256"насчитали %i ворон"GetRandomInt(099));
            else
            {
                
    Format(msg256"нанесли при этом %i урона."RoundToNearest(fDmg[i]));
                if(!
    iKills[i]) Format(msg256"никого не убили, но %s"msg);
                else 
    Format(msg256"убили %i противников и %s"iKills[i], msg);
            }
            
    PrintToChat(i"В течении раунда Вы %s"msg);
        }
    }

    public 
    void Event_Death(Event event, const char[] namebool dontBroadcast)
    {
        static 
    int attacker;
        if(
    IsClientsValid((attacker GetClientOfUserId(event.GetInt("attacker"))), GetClientOfUserId(event.GetInt("userid"))))
            
    iKills[attacker]++;
    }

    stock bool IsClientsValid(int attackerint victim)
    {
        static 
    int teamAteamV;
        return 
    IsClientValid(attackertrue) && !IsFakeClient(attacker) && IsClientValid(victim)
        && (
    teamV GetClientTeam(victim)) > && (teamA GetClientTeam(attacker)) > && teamA != teamV;
    }

    stock bool IsClientValid(int clientbool in_game false)
    {
        return 
    client <= MaxClients && (!in_game || IsClientInGame(client));
    }
    --- Добавлено позже ---
    Лол, у меня скомпиленный плагин весит столько же, что и у ТСа архив с плагином. :mocking:
     

    Вложения:

    Последнее редактирование: 15 янв 2018
    BossKotoriiNeSmok нравится это.
  20. .SN.

    .SN. c++ Модератор

    Сообщения:
    284
    Симпатии:
    221
    Не может быть такого.