Knockback CS:GO

Nebraska

Участник
Сообщения
233
Реакции
294
Здравствуйте. Пишу зомби - мод, но никак не могу реализовать knockback (отталкивания). Есть кто поможет решить эту проблему?

- [CS:GO] Knockback fix - AlliedModders - помогает, но с этим плагином ломается движение игрока (плывет по воздуху)

- менял значение квару sv_clamp_unsafe_velocities 0, не помогло.

kockback:
setKnockBack(client, attacker)

{

    decl Float:client_pos[3], Float:attacker_pos[3], Float:attacker_ang[3];

    GetClientAbsOrigin(client, client_pos);

    GetClientEyePosition(attacker, attacker_pos);

    GetClientEyeAngles(attacker, attacker_ang);

 

    TR_TraceRayFilter(attacker_pos, attacker_ang, MASK_ALL, RayType_Infinite, knockback_filter);

    TR_GetEndPosition(client_pos);

 

    KnockbackSetVelocity(client, attacker_pos, client_pos, 100.0);

}



KnockbackSetVelocity(client, const Float:startpoint[3], const Float:endpoint[3], Float:magnitude)

{

    decl Float:vector[3];

    MakeVectorFromPoints(startpoint, endpoint, vector);

    NormalizeVector(vector, vector);

    ScaleVector(vector, magnitude);

    TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vector);

}



public bool: knockback_filter(entity, mask)

{

    if (0 < entity < MAXPLAYERS) return false;

    return true;

}



Строго не судите, только перешел с Source.
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #3
Здравствуйте. Пишу зомби - мод, но никак не могу реализовать knockback (отталкивания). Есть кто поможет решить эту проблему?

- [CS:GO] Knockback fix - AlliedModders - помогает, но с этим плагином ломается движение игрока (плывет по воздуху)

- менял значение квару sv_clamp_unsafe_velocities 0, не помогло.

kockback:
setKnockBack(client, attacker)

{

    decl Float:client_pos[3], Float:attacker_pos[3], Float:attacker_ang[3];

    GetClientAbsOrigin(client, client_pos);

    GetClientEyePosition(attacker, attacker_pos);

    GetClientEyeAngles(attacker, attacker_ang);

 

    TR_TraceRayFilter(attacker_pos, attacker_ang, MASK_ALL, RayType_Infinite, knockback_filter);

    TR_GetEndPosition(client_pos);

 

    KnockbackSetVelocity(client, attacker_pos, client_pos, 100.0);

}



KnockbackSetVelocity(client, const Float:startpoint[3], const Float:endpoint[3], Float:magnitude)

{

    decl Float:vector[3];

    MakeVectorFromPoints(startpoint, endpoint, vector);

    NormalizeVector(vector, vector);

    ScaleVector(vector, magnitude);

    TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vector);

}



public bool: knockback_filter(entity, mask)

{

    if (0 < entity < MAXPLAYERS) return false;

    return true;

}



Строго не судите, только перешел с Source.
Думаю достаточно будет в OnTakeDamage событие закинуть этот код
C++:
        // Push victim away from attacker's position.
        float fVictimOrigin[3], fAttackerOrigin[3], fDirection[3];
        GetClientEyePosition(victim, fVictimOrigin);
        GetClientEyePosition(attacker, fAttackerOrigin);
        MakeVectorFromPoints(fAttackerOrigin, fVictimOrigin, fDirection);
        NormalizeVector(fDirection, fDirection);
        
        float fForce = 1488.0;
        ScaleVector(fDirection, fForce);
        TeleportEntity(victim, NULL_VECTOR, NULL_VECTOR, fDirection);

И будет то что нужно.
 
Сверху Снизу