Не забирает фраг за самоубийство и тимкилл

Тема в разделе "Программирование / Скриптинг", создана пользователем EPacker2, 2 янв 2013.

  1. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    Идея и часть кода отсюда
    PHP:
    #include <sourcemod>

    public OnPluginStart()
    {
        
    HookEvent("player_falldamage"FallDamage);
        
    HookEvent("player_death"Death);
    }

    public 
    FallDamage(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if (
    GetEntProp(clientProp_Send"m_iHealth") <=  GetEventFloat(event"damage") && GetEntProp(clientProp_Data,  "m_takedamage") > 0)
        {
            
    SetEntProp(clientProp_Data"m_iFrags"GetClientFrags(client) + 1);
        }
    }

    public 
    Death(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client;
        if ((
    client GetEventInt(event"userid")) == GetEventInt(event"attacker"))
        {
            
    client GetClientOfUserId(client);
            
    SetEntProp(clientProp_Data"m_iFrags"GetClientFrags(client) + 1);
        }
    }
    При убийстве игрока от зоны trigger_hurt, фраг идет в минус. Чтоб не забирало

    Надо чтоб при убийстве товарища по команде не вычитало фраг, а прибавляло.

    Помогите разобраться :)
     
  2. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    За убийство лазером на карте zm_amongus дает -1 фраг и 1 смерть.
    Если убить себя через админку он дает +1 фраг и 1 смерть.

    Добавлено через 13 минут
    А нельзя ли просто заблокировать чтобы фраги минусовались?
     
    Последнее редактирование: 2 янв 2013
  3. tooshkan4uk

    tooshkan4uk http://cssrus.ru

    Сообщения:
    423
    Симпатии:
    369
    Код:
    #include <sourcemod>
    
    public OnPluginStart() 
        HookEvent("player_death", Event_OnPlayerDeath);
    
    public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid")),
        new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
        if (attacker)
        {
                frags = GetClientFrags(attacker);
            if (client == attacker)
                SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
                
            if (GetClientTeam(client) == GetClientTeam(attacker))
                SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
        }
        else
        {
                SetEntProp(client, Prop_Data, "m_iFrags", frags + 1);
        }
    }
     
  4. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    Код:
    //// suicide_frag.sp
    // suicide_frag.sp(9) : error 020: invalid symbol name ""
    // suicide_frag.sp(9) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(10) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(12) : error 017: undefined symbol "frags"
    // suicide_frag.sp(12) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(13) : warning 217: loose indentation
    // suicide_frag.sp(13) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(14) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(16) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(17) : error 017: undefined symbol "attacker"
    // suicide_frag.sp(21) : error 017: undefined symbol "frags"
    // suicide_frag.sp(9) : warning 203: symbol is never used: ""
    //
    // 10 Errors.
    //
    // Compilation Time: 0,33 sec
    // ----------------------------------------
     
  5. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.221
    Симпатии:
    914
    EPacker2,

    PHP:
    #include <sourcemod>

    public OnPluginStart() 
        
    HookEvent("player_death"Event_OnPlayerDeath);

    public 
    Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
               new 
    frags GetClientFrags(attacker);
        if ( 
    attacker )
        {
            if (
    client == attacker)
                
    SetEntProp(attackerProp_Data"m_iFrags"frags 1);
                
            if (
    GetClientTeam(client) == GetClientTeam(attacker))
                
    SetEntProp(attackerProp_Data"m_iFrags"frags 2);
        }
        else
        {
                
    SetEntProp(clientProp_Data"m_iFrags"frags 1);
        }
    }
     
  6. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    Код:
    //// suicide_frag.sp
    // suicide_frag.sp(10) : warning 217: loose indentation
    // suicide_frag.sp(11) : warning 217: loose indentation
    // Header size:           1940 bytes
    // Code size:              692 bytes
    // Data size:              252 bytes
    // Stack/heap size:      16384 bytes; Total requirements:   19268 bytes
    //
    // 2 Warnings.
    //
    // Compilation Time: 0,37 sec
    // ----------------------------------------
     
  7. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.221
    Симпатии:
    914
    EPacker2, обновил, рабоатет теперь.
    frags не объявлена была для отправки клиенту m_iFrags
     
  8. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.221
    Симпатии:
    914
    EPacker2, warning - не так и страшно, но если доставляет, то попробуй
    if ( attacker ) заменить на if ( attacker == 1), только не уверен, что сработает правильно. Но ошибок не будет.
     
  9. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    Не-не, там дело было в пробелах перед new frags = GetClientFrags(attacker);
    Удалил - норм компильнулось. :)
     
  10. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    +1 фраг за слэй
    -1 за триггерхерт

    Добавлено через 1 минуту
    Мне надо чтобы если упал с крыши, убился kill'ом, убился админский slay'ем, убился картой(trigger_hurt и т.п.) - фраг не уменьшается, а остается прежним. (frags + 1)
    А если убил товарища, то дается +1 фраг! (frags + 2)

    Добавлено через 4 минуты
    Для упал с крыши идет этот кусок.
     
    Последнее редактирование: 2 янв 2013
  11. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    PHP:
    #include <sourcemod>

    public OnPluginStart()
    {
        
    HookEvent("player_falldamage"FallDamage);
        
    HookEvent("player_death"Event_OnPlayerDeath);
    }

    public 
    FallDamage(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if (
    GetEntProp(clientProp_Send"m_iHealth") <=  GetEventFloat(event"damage") && GetEntProp(clientProp_Data,  "m_takedamage") > 0)
        {
            
    SetEntProp(clientProp_Data"m_iFrags"GetClientFrags(client) + 1);
        }
    }

    public 
    Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if (
    attacker)
        {
            new 
    client GetClientOfUserId(GetEventInt(event"userid")),
                
    frags GetClientFrags(attacker);
            if (
    client == attacker)
                
    SetEntProp(attackerProp_Data"m_iFrags"frags 1);
                
            if (
    GetClientTeam(client) == GetClientTeam(attacker))
                
    SetEntProp(attackerProp_Data"m_iFrags"frags 2);
            else
                
    SetEntProp(clientProp_Data"m_iFrags"GetClientFrags(client) + 1);
        }
    }  
    Соединил коды, теперь он падающему с крыши не отнимает фраг, остальные так же.
    Что делать с trigger_hurt?

    Добавлено через 21 минуту
    Dok_1997, задолбал сообщения удалять.
     
    Последнее редактирование: 2 янв 2013
  12. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.005
    Симпатии:
    608
    Оффтоп
    Ладно, ребята, не выходит. Дождусь самого wS'а)
    Только смертей больше стало ;D
     

    Вложения:

  13. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347
    PHP:
    #pragma semicolon 1
    #include <sourcemod>

    public OnPluginStart()
    {
        
    HookEvent("player_death"player_death);
    }

    public 
    player_death(Handle:event, const String:name[], bool:silent)
    {
        new 
    victim_id GetEventInt(event"userid");
        new 
    attack_id GetEventInt(event"attacker");

        
    // Если игрока убил 'мир' или это самоубийство
        
    if (attack_id || attack_id == victim_id)
        {
            
    victim_id GetClientOfUserId(victim_id);
            
    SetEntProp(victim_idProp_Data"m_iFrags"GetClientFrags(victim_id) + 1);
            return;
        }

        
    attack_id GetClientOfUserId(attack_id);

        
    // Убийство товарища
        
    if (attack_id && GetClientTeam(attack_id) == GetClientTeam(GetClientOfUserId(victim_id)))
        {
            
    SetEntProp(attack_idProp_Data"m_iFrags"GetClientFrags(attack_id) + 2);
        }
    }
    [​IMG]
     
    EPacker2 нравится это.