[CS:GO] Выставить хедшот при убийстве

Тема в разделе "Программирование / Скриптинг", создана пользователем Z3R0M1ND, 1 дек 2014.

  1. Z3R0M1ND

    Z3R0M1ND

    Сообщения:
    25
    Симпатии:
    0
    CS:GO
    Написал такой код согласно докам. Но при убийстве хедшот не проставляется
    PHP:
    HookEvent("player_death"OnPlayerDeathEventHookMode_Post);

    public 
    Action:OnPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        
        if (
    client <= || attacker <= 0) return Plugin_Continue;
        
        if (
    IsDonatorPlayer(attacker))
        {
            
    SetEventBool(event"headshot"true);
            return 
    Plugin_Changed;
        }
        return 
    Plugin_Continue;
    }
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    Z3R0M1ND, EventHookMode_Pre


    Это не нужно:
    Action:
    return Plugin_Changed;
    return Plugin_Continue;
     
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    Если
    то как раз нужно будет. И
    тоже (почти всегда ставится в конце).
     
  4. artyrka94

    artyrka94

    Сообщения:
    182
    Симпатии:
    36
    а у меня что то не робит:
    PHP:
    #include <sdktools>

    public OnPluginStart() HookEvent("bullet_impact"ImpactEventHookMode_Pre);


    public 
    Action:Impact(Handle:event,const String:name[],bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if(
    GetUserFlagBits(client) & ADMFLAG_ROOT)
        {
            new 
    Float:pos[3];
            
    wS_GetLookPos(clientpos);
            
    SetEventFloat(event"x"pos[0]);
            
    SetEventFloat(event"y"pos[1]);
            
    SetEventFloat(event"z"pos[2]);
        }return 
    Plugin_Continue;
    }

    public 
    bool:wS_GetLookPos_Filter(entmaskany:client) return client != ent;

    wS_GetLookPos(clientFloat:wS_Pos[3])
    {
        
    decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
        
    GetClientEyePosition(clientEyePosition);
        
    GetClientEyeAngles(clientEyeAngles);
        
    h_trace TR_TraceRayFilterEx(EyePositionEyeAnglesMASK_SOLIDRayType_InfinitewS_GetLookPos_Filterclient);
        
    TR_GetEndPosition(wS_Posh_trace);
        
    CloseHandle(h_trace);
    }
     
  5. Z3R0M1ND

    Z3R0M1ND

    Сообщения:
    25
    Симпатии:
    0
    Теперь при убийстве даже не отображается что я кого-то убил.
     
  6. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    PHP:
    // в css проверил, в go не знаю
    public Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:silent)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));

        if (
    attacker 0)
        {
            if (
    attacker != GetClientOfUserId(GetEventInt(event"userid")))
            {
                if (
    Твоя_проверка[attacker])
                {
                    
    SetEventBool(event"headshot"true);
                }
            }
        }
    }
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    О, ещё один... Может ты нормально сможешь объяснить, почему ни в одну строчку проверяем? Неужели символьно && хуже нового if + {}?
     
  8. Андрей Трегубенко

    Андрей Трегубенко

    Сообщения:
    13
    Симпатии:
    0
    Потому что логическая цыпочка ломается

    PHP:
    if (client == || attacker == 0будет выполнено если клиент или атакующий будут 0
    PHP:
    if (client == || attacker == && IsDonatorPlayer(attacker)) будет выполнено если клиент будет 0 или же если атакующий 0 и он же является донатером
    тоесть если клиент будет 
    = -1а атакующий будет != 0 и будет донатеромто код выполнится
     
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    Если ты не заметил, то в том варианте, о котором я спрашивал, нет ни одного ||. Если одно выполняется, то выполняется и следующее, а если нет - нет. Так зачем расписывать столь длинно?
     
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    Андрей Трегубенко, для этого есть (...)



    Как раз то и не нужно. В данном случае даже на пре.
    Тоесть оно или блочит Plugin_Handled или идет дальше Plugin_Continue;


    Для большей уверености сам проверил - всё работает:
    PHP:
    #pragma semicolon 1

    #include <sourcemod>

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

    public 
    OnPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast

        new 
    client GetClientOfUserId(GetEventInt(event"userid")); 
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker")); 
        if (
    attacker && attacker != clientSetEventBool(event"headshot"true);  
    [​IMG]
     
  11. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    Написано: Plugin_Handled для блокировки. Подразумевается, что в прочих случаях ставится согласно Action.
    В туториале SM также обязательно ставится return Plugin_Continue; для событий с Pre.
    Таймер тоже работает, но ты же ставишь там return Plugin_Stop;, не так ли? Правильно делаешь. Здесь - не исключение.
     
  12. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    AlmazON, верно ты говоришь, забей уже, за♥♥♥♥и сраться из-за мелочи. Ну переделают потом компилятор и не будет его код банально компилиться т.к. не верен вот и всё
     
    AlmazON нравится это.
  13. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    AlmazON, вот именно, что return Plugin_Continue;
    как я и написал:
    return Plugin_Changed; Ничего не даст.

    А вот Action: на пре хуке даже если и нужен то и без него работает.


    semjef, вот переделают тогда и будут писать как в вики
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    Не ставь в таймере - тоже ведь работает, останавливается. :-D
    Оффтоп
    EventHookMode_PostNoCopy тоже ты самолично проверял - одинаково все переменные получаем. Я думаю, это компилятор просто за нас всё правит.
     
  15. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    AlmazON, EventHookMode_PostNoCopy
    До сих пор не понял в чем его отличие от обычного пост. Разве что он может значения обратно не принимать, но обычно это делают в пре.
     
  16. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    R1KO, вродеб запрет на повторный хук этого эвента в данном плагине. такто один эвентможно хоть 10 раз хукнуть в плагине и все сработают.
     
    R1KO нравится это.