Нивелировать значение fuser2

Сообщения
37
Реакции
2
Помог
1 раз(а)
Ищу способы добавить динамики в игру. Один из методов это нивелировать торможение после приземления (порой очень раздражает потеря скорости). Еще раз повторю - именно НИВЕЛИРОВАТЬ, а не исключить. Как пример - CS 2 (CS GO), где reduce после прыжка не чувствуется или его вовсе нет.

Как известно, на паузу при приземлении после прыжка влияет фпс. Чем меньше фпс, тем меньше торможение. Но хотелось бы приравнять всех игроков, вне зависимости от их кфг. Чтоб у любого рандомного игрока не было существенной потери скорости.

Почитал The new beta of CS 1.6 и Физику бхоп и еще некоторую писанину. Но пока не нашел каких то методов решения этого вопроса.

На форуме видел это: https://dev-cs.ru/threads/25571/post-138448
Плагин работает, но после прыжка происходит скольжение. Пробовал изменить значение pev_fuser2 на 700.0, и всё бы хорошо. Но, прыжки стали "деревянными", а на некоторые объекты (к примеру кусты на мэншен) запрыгнуть стало вообще невозможно. Изменение гравити не помогает.

Возможно есть какое то решение?
 
Сообщения
28
Реакции
0
Попробуй в связке с pev_friction
 
Сообщения
28
Реакции
0
RAMA21, Ну как правило это вешают на прыжок, и в дзиньке, проверят игрока на полу и ставят обратно, если вызывается слишком быстро поставь задержку в coint (3 || 5). Другое решение этой проблемы я не нашел.
 
Сообщения
37
Реакции
2
Помог
1 раз(а)
В общем пока нужного результата достичь не получилось

Первый вариант со сбросом после приземления на землю не сработал
Вариант 1:
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

new const VERSION[] = "1.4";
new Float:default_fuser2_value = 1.0;

public plugin_init()
{
    register_plugin("No Slow Down", VERSION, "noname");
    RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump_Post", 0);
    RegisterHam(Ham_Player_PreThink, "player", "OnPlayerLand", 0);
}

public OnPlayerJump_Post(id)
{
    if (!is_user_bot(id))
    {
        set_pev(id, pev_fuser2, 0.0);
    }
}

public OnPlayerLand(id)
{
    if (is_user_alive(id) && pev(id, pev_flags) & FL_ONGROUND)
    {
        set_pev(id, pev_fuser2, default_fuser2_value);
    }
}
Все также скользишь :dntknw:

Во втором варианте попробовал скольжение снизить за счет увеличения переменной fuser2 до 100 когда игрок уже на земле. Вроде лучше, но скорость передвижения падает. Попробовал в конце добавить сброс скорости к обычным значениям, не помогло. Вместо 250 юнитов, бежишь 220.

Вариант 2:
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

new const VERSION[] = "1.3";

public plugin_init()
{
    register_plugin("No Slow Down", VERSION, "noname");
    RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump_Post", 0);
    RegisterHam(Ham_Player_PreThink, "player", "OnPlayerLand", 0);
}

public OnPlayerJump_Post(id)
{
    if (!is_user_bot(id))
    {
        set_pev(id, pev_fuser2, 0.0);
    }
}

public OnPlayerLand(id)
{
    if (is_user_alive(id) && pev(id, pev_flags) & FL_ONGROUND)
    {
        set_pev(id, pev_fuser2, 100.0);
        
        set_task(0.1, "ResetPlayerSpeed", id);
    }
}

public ResetPlayerSpeed(id)
{
    if (is_user_alive(id) && pev(id, pev_flags) & FL_ONGROUND)
    {
        set_pev(id, pev_fuser2, 0.0);
    }
}
Буду благодарен за подсказки
 
Сообщения
20
Реакции
26
Осмелюсь предположить, что достичь чего-то подобного можно кратковременным MOVETYPE_FLY и уменьшением велосити, до определенного порога, затем обратно MOVETYPE_WALK. В хл по идее должно работать, но там это не нужно. В кс - увы, не знаю как себя поведёт. Всё это лишь догадки, нужно пробовать.
 
Сообщения
2
Реакции
0
Пропатчить память и убрать необходимый функционал, по моему это самое оптимальное решение
 
Сообщения
20
Реакции
9
Помог
1 раз(а)
Вот, попробуй.
Через квар "fsd_fps" устанавливаешь целевой ФПС (какой имитировать).

Код:
#pragma semicolon 1

#include <amxmodx>

#define PLUGIN    "Fps Slow Down Move Control"
#define VERSION    "1.0"
#define AUTHOR    "Admrfsh"

#include <reapi>
#include <xs>

new Float:g_flCvarTargetFps;
new Float:g_flTargetMSec;

new HookChain:g_hEventPMMove;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);

    new pCvarPluginEnable = create_cvar("fsd_enable", "1", FCVAR_NONE, "Enable/disable plugin.", true, 0.0, true, 1.0);
    new pCvarTargetFps = create_cvar("fsd_fps", "100", FCVAR_NONE, "Set target FPS slow down move.", true, 20.0);

    hook_cvar_change(pCvarPluginEnable, "OnEvent_CvarChange_PluginEnable");
    bind_pcvar_float(pCvarTargetFps, g_flCvarTargetFps);
    hook_cvar_change(pCvarTargetFps, "OnEvent_CvarChange_TargetFps");
    OnEvent_CvarChange_TargetFps();
   
    g_hEventPMMove = RegisterHookChain(RG_PM_Move, "OnEvent_PM_Move_Post", true);

    if (!get_pcvar_num(pCvarPluginEnable))
    {
        DisableHookChain(g_hEventPMMove);
    }
}

public OnEvent_CvarChange_PluginEnable(const pCvar, const szOldValue[], const szNewValue[])
{
    strtol(szNewValue) ?
        EnableHookChain(g_hEventPMMove) :
        DisableHookChain(g_hEventPMMove);
}

public OnEvent_CvarChange_TargetFps()
{
    g_flTargetMSec = (1.0 / g_flCvarTargetFps) * 1000.0;
}

public OnEvent_PM_Move_Post(const iPlayerId)
{
    static Float:flUser2;
    flUser2 = get_pmove(pm_fuser2);
   
    if (get_pmove(pm_flags) & FL_ONGROUND &&
        flUser2 > 0.0)
    {
        static Float:flMSec;
        static Float:flRatio;
        static Float:flVecVelocity[3];

        flMSec = get_pmove(pm_frametime);
        flMSec *= 1000.0;

        get_pmove(pm_velocity, flVecVelocity);
       
        flRatio = (100.0 - (flUser2 + flMSec) * 0.001 * 19.0) * 0.01;
        flVecVelocity[0] /= flRatio;
        flVecVelocity[1] /= flRatio;

        flRatio = floatpower(flRatio, flMSec / g_flTargetMSec);
        flVecVelocity[0] *= flRatio;
        flVecVelocity[1] *= flRatio;

        set_pmove(pm_velocity, flVecVelocity);
    }
}
 
  • Нравится
Реакции: DEVV
Сообщения
37
Реакции
2
Помог
1 раз(а)
Admrfsh, когда тестишь то каждый кадр ловишь и да, заметил на ноуте иногда "дергает" картинку моментами. На нормальном компе ничего не заметил. Не критично думаю. По ощущениям на значении fsd_fps "60" работает отлично.
 
Сообщения
20
Реакции
9
Помог
1 раз(а)
Если бы работал хук FM_WalkMove, тогда думаю смог бы сделать лучше. Досадно.
 

ssx

Сообщения
289
Реакции
73
Только тестируйте как на низких фпс так и на очень высоких (более 400).

Я за многие годы уже привык что убрано (на моих серверах) торможение при высоких фпс. Но иногда когда об углы трешься то подтормаживает как будто дёргает. На 100 и ниже фпс плавно скользит об стены. Лучше этот баг пофиксить..
 

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

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