Реакция пули на игрока.

Тема в разделе "Программирование / Скриптинг", создана пользователем (admiral), 20 сен 2013.

  1. (admiral)

    (admiral)

    Сообщения:
    69
    Симпатии:
    8
    Проблема такая. На картах ze включен ноублок, все ходят толпой. Когда нужно сломать какой-то предмет, особенно в узком пространстве, некоторые встают спереди, некоторые сзади. В итоге пули тех, кто сзади, просто "застревают" в передних игроках, и сломать предмет становится очень сложно. Каким образом можно заставить пулю пролетать через тела людей?
     
    NagarD нравится это.
  2. horr0rjkee

    horr0rjkee

    Сообщения:
    5
    Симпатии:
    0
    Re: Реакция пули на игрока. Помогите.

    Скорее всего на движке сурса/об это невозможно.
     
  3. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    horr0rjkee, ну почему же, вон например в тф2 есть даже снайперка с возможностью прохождения пуль и даже значки убийства двух одной пулей. В Nuclear Dawn пули тоже вроде проходят сквозь игроков, хотя не уверен. По идее это возможно через m_CollisionGroup, хотя не уверен, каике параметры нужны и как это будет работать
     
    (admiral) нравится это.
  4. vanbka9

    vanbka9

    Сообщения:
    14
    Симпатии:
    13
    Проблема решена ;)
    PHP:
    public OnPluginStart()
    {
        
    HookEvent("player_hurt"player_hurtEventHookMode_Pre);
    }

    public 
    Action:player_hurt(Handle:event, const String:name[], bool:silent)
    {
        
    decl attacker;
        if ((
    attacker GetClientOfUserId(GetEventInt(event"attacker"))) < 1)
            return 
    Plugin_Continue;
        
    decl victim;
        
    victim GetClientOfUserId(GetEventInt(event"userid"));
        new 
    victim_team GetClientTeam(victim);
        new 
    attacker_team GetClientTeam(attacker);
        if (
    victim_team == attacker_team)
            
    SetEntProp(victimProp_Send"m_nSolidType"5);
        else
            
    SetEntProp(victimProp_Send"m_nSolidType"2);
        
        return 
    Plugin_Continue;
    }
    ________________________________
    Забыл пояснить.
    После установки ["m_nSolidType", 5] игроку событие "player_hurt" для него больше вызываться не будет. Нужно как то возвращать ему ["m_nSolidType", 2]. Возможно таймером.
    Первая пуля попавшая в игрока застревает, последующие нет, т.к. ["m_nSolidType", 5]
     
    Последнее редактирование: 23 сен 2013
    (admiral), NagarD, CTe6eJIeK_vRn и ещё 1-му нравится это.
  5. (admiral)

    (admiral)

    Сообщения:
    69
    Симпатии:
    8
    Честно, я не понял решения. Разве пули не тормозятся через solid_vphysics? Я немного потестил, и урон уменьшается, когда пуля проходит через тело союзника. Значит, по идее, пули продолжают реагировать на союзников(. Правда, не проверял с двумя союзниками, где урона, по идее, вообще не должно быть.
     
  6. (admiral)

    (admiral)

    Сообщения:
    69
    Симпатии:
    8
    Нашел решение проблемы. Требуется расширение CollisionHook 0.2 - https://forums.alliedmods.net/showthread.php?t=197815.
    Сам код:
    Код:
    public Action:CH_PassFilter( ent1, ent2, &bool:result ) 
    { 
        if (1 <= ent1 <= MaxClients && 1 <= ent2 <= MaxClients && IsClientInGame(ent2) &&  IsPlayerAlive(ent2) && ZR_IsClientHuman(ent1) == ZR_IsClientHuman(ent2)) 
        { 
            result = false; 
            return Plugin_Handled; 
        } 
         
        return Plugin_Continue; 
    }
    Побочные эффекты: ноублок (люди проходят через людей и зомби проходят через зомби, но зомби через людей и наоборот не проходят.
     
    Последнее редактирование: 29 сен 2013
    KorDen нравится это.