/**
    История изменений:
        1.0.0 (21.07.2026) by b0t.
            - Релиз;
*/
new const VERSION[] = "1.0.0"

#include <amxmodx>
#include <reapi>
#include <fakemeta>

enum _:XYZ {
    Float:X,Float:Y,Float:Z
};

enum _:eCmdStartDataBase {
    Float:velocity[XYZ],
    Float:forward_move,
    Float:side_move
};

new
    g_fCmdStartData[eCmdStartDataBase];

new
    p_iFrame[33];

public plugin_init() {
    register_plugin("+strafe Block",VERSION,"b0t.");

    register_forward(FM_CmdStart,"Fwd_CmdStart");
}

// https://github.com/alliedmodders/amxmodx/blob/2c7a3227f279c5486649a8ebdddca1395ca17e15/modules/fakemeta/forward.cpp#L776
public Fwd_CmdStart(const id,const iCmd,iSeed) {
    if(get_entvar(id,var_movetype) != MOVETYPE_WALK) {
        return;
    }

    get_uc(iCmd,UC_ForwardMove,g_fCmdStartData[forward_move]);
    get_uc(iCmd,UC_SideMove,g_fCmdStartData[side_move]);

    if(g_fCmdStartData[forward_move] == 0.0 || g_fCmdStartData[side_move] == 0.0) {
        p_iFrame[id] = 0;

        return;
    }

    if(floatabs(g_fCmdStartData[forward_move]) != floatabs(g_fCmdStartData[side_move])) {
        if(++p_iFrame[id] > 3) {
            get_entvar(id,var_velocity,g_fCmdStartData[velocity]);

            g_fCmdStartData[velocity][X] = g_fCmdStartData[velocity][Y] = 0.0;

            set_entvar(id,var_velocity,g_fCmdStartData[velocity]);

            client_print(id,print_center,"Block +strafe");
        }
    }
    else {
        p_iFrame[id] = 0;
    }
}