Only HS мод, не портящий сбор статистики по выстрелам

Сообщения
499
Реакции
271
Помог
6 раз(а)
Занимался прЕватами для своего HSDM'а и обнаружил, что статистические данные месткости игроков сильно завышены. На это были подозрения и раньше, но доказательства удалось найти только сейчас. Тестовым путём было выяснено, что с текущим плагином Only HS при попадании в любые другие хитбоксы кроме головы, в CSStatsX SQL не пишутся Выстрелы. С самим serfreeman1337 ничего придумать не удалось. Перепробовали несколько разных методов блокировки хитбоксов, всё безрезультатно. Нужна помощь профессионалов.
Вот код, который использовался на сервере:
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

public plugin_init() {
    RegisterHookChain(RG_CBasePlayer_TraceAttack, "OnTraceAttack_Pre", .post = 0);
}

public OnTraceAttack_Pre(const this, pevAttacker, Float:flDamage, Float:vecDir[3], tracehandle, bitsDamageType) {
    return get_tr2(tracehandle, TR_iHitgroup) == HIT_HEAD ? HC_CONTINUE : HC_SUPERCEDE;
}
Также, пробовали это: https://forums.alliedmods.net/showthread.php?t=64099 (сервер даже отказался запускаться)
И это: https://forums.alliedmods.net/showthread.php?t=8255 (то же самое поведение, если даже не хуже)

Примечание: есть варианты, в которых блочится только урон по хитбоксам (насколько я понял), они не подходят, т. к. при попадании вылетает кровь. Разве что если кровь можно как-то заблокировать.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Код:
#pragma semicolon 1

#include <amxmodx>
#include <fakemeta>
#include <reapi>

new Float:g_vecPunchAngle[3];

new HookChain:g_iHookChain_Player_SetAnimation;

public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_TraceAttack, "@CBasePlayer_TraceAttack_Pre", false);
    RegisterHookChain(RG_CBasePlayer_TraceAttack, "@CBasePlayer_TraceAttack_Post", true);
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "@CBasePlayer_TakeDamage_Pre", false);
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "@CBasePlayer_TakeDamage_Post", true);

    g_iHookChain_Player_SetAnimation = RegisterHookChain(RG_CBasePlayer_SetAnimation, "@CBasePlayer_SetAnimation_Pre", false);

    DisableHookChain(g_iHookChain_Player_SetAnimation);
}

@CBasePlayer_TraceAttack_Pre(id, attacker, Float:damage, Float:vecDir[3], tr, bitsDamageType)
{
    if (get_tr2(tr, TR_iHitgroup) == HIT_HEAD)
        return;

    get_entvar(id, var_punchangle, g_vecPunchAngle);
    SetHookChainArg(3, ATYPE_FLOAT, 0.0);
}

@CBasePlayer_TraceAttack_Post(id, attacker, Float:damage, Float:vecDir[3], tr, bitsDamageType)
{
    if (get_tr2(tr, TR_iHitgroup) == HIT_HEAD)
        return;

    set_entvar(id, var_punchangle, g_vecPunchAngle);
}

@CBasePlayer_TakeDamage_Pre(id, inflictor, attacker, Float:damage, bitsDamageType)
{
    if (get_member(id, m_LastHitGroup) == HITGROUP_HEAD)
        return;

    SetHookChainArg(4, ATYPE_FLOAT, 0.0);
    EnableHookChain(g_iHookChain_Player_SetAnimation);
}

@CBasePlayer_TakeDamage_Post(id, inflictor, attacker, Float:damage, bitsDamageType)
{
    DisableHookChain(g_iHookChain_Player_SetAnimation);
}

@CBasePlayer_SetAnimation_Pre(id, PLAYER_ANIM:playerAnim)
{
    DisableHookChain(g_iHookChain_Player_SetAnimation);
    return HC_SUPERCEDE;
}
 
Сообщения
160
Реакции
170
Помог
1 раз(а)
CHEL74,
Возможно это тебе может понадобится.
 

Вложения

Сообщения
499
Реакции
271
Помог
6 раз(а)
fl0wer, спасибо, но...)
Во-первых при попадании в тело стопит и раздаётся звук попадания.
Во-вторых это нет смысла исправлять, т. к. не помогло. Выстрелы, попавшие в другие хитбоксы, также не засчитываются в стату.

mr_CHikAZ, а что там такое? Я пробежал глазами код, судя по всему какие-то довоенные технологии :D
 
Сообщения
499
Реакции
271
Помог
6 раз(а)
В ообщем, проблема более не актуальна) Мучались мучались, а по итогу оказалось, что на сервере стояла 0.7.4 версия, когда уже доступна 0.7.4+2. Как оказалось, за эти +2 как раз-таки был произведён фикс, связанный с выстрелами (но причина фикса была другая, поэтому не сразу допёрли :D). Огромное спасибо всем, кто пытался помочь, тему можно закрывать,
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу