Направление вылета гильз в get_user_msgid("Brass")

Сообщения
11
Реакции
2
Привет...

Имеется код установки гильз для оружия
Код:
EjectBrass(const iPlayer, const iModelIndex, const iBounce, const Float:flUpScale = -9.0, const Float: flForwardScale = 10.0, const Float: flRightScale = -5.0)
{
    static i, msgBrass;
    
    static Float: vecUp[3];
    static Float: vecRight[3];
    static Float: vecForward[3];
    
    static Float: vecAngle[3];
    static Float: vecOrigin[3];
    static Float: vecViewOfs[3];
    static Float: vecVelocity[3];
    
    get_entvar(iPlayer, var_v_angle, vecAngle);
    get_entvar(iPlayer, var_punchangle, vecOrigin);
    
    xs_vec_add(vecAngle, vecOrigin, vecOrigin);
    engfunc(EngFunc_MakeVectors, vecOrigin);
    
    get_entvar(iPlayer, var_origin, vecOrigin);
    get_entvar(iPlayer, var_view_ofs, vecViewOfs);
    get_entvar(iPlayer, var_velocity, vecVelocity);
    
    global_get(glb_v_up, vecUp);
    global_get(glb_v_right, vecRight);
    global_get(glb_v_forward, vecForward);

    for (i = 0; i < 3; i++)
    {
        vecOrigin[i] = vecOrigin[i] + vecViewOfs[i] + vecForward[i] * flForwardScale + vecUp[i] * flUpScale + vecRight[i] * flRightScale;
        vecVelocity[i] = vecVelocity[i] + vecForward[i] * 50.0 + vecUp[i] * 100.0 + vecRight[i] * 50.0;
    }

    //client_print(0, print_chat, "vecAngle[1] = %f" , vecAngle[1])
    
    if (msgBrass || (msgBrass = get_user_msgid("Brass")))
    {
        MESSAGE_BEGIN(MSG_PVS, msgBrass, vecOrigin, 0);
        WRITE_BYTE(0);
        WRITE_COORD(vecOrigin[0]);
        WRITE_COORD(vecOrigin[1]);
        WRITE_COORD(vecOrigin[2]);
        WRITE_COORD(0.0);
        WRITE_COORD(0.0);
        WRITE_COORD(0.0);
        WRITE_COORD(vecVelocity[0]);
        WRITE_COORD(vecVelocity[1]);
        WRITE_COORD(vecVelocity[2]);
        WRITE_ANGLE(vecAngle[1]);
        WRITE_SHORT(iModelIndex);
        WRITE_BYTE(iBounce);
        WRITE_BYTE(0);
        WRITE_BYTE(iPlayer);
        MESSAGE_END();
    }
}

Не могу понять какой параметр отвечает за направление вылета гильзы(отлавливал все параметры в зависимости от того в какой руке оружие, но в том и в другом случае значения не меняются). Если оружие в правой руке, то направление гильзы влево, если оружие в левой руке, то направление гильзы устанавливается вправо.
 
Сообщения
11
Реакции
2
Немного подправил код
Код:
EjectBrass(const iPlayer, const iModelIndex, const iBounce, const Float:flUpScale = -9.0, const Float: flForwardScale = 10.0, const Float: flRightScale = -5.0)
{
    static i, msgBrass;

    static Float: vecVelocity[3];    get_entvar(iPlayer, var_velocity, vecVelocity);
    static Float: vecAngle[3];        get_entvar(iPlayer, var_v_angle, vecAngle);
    static Float: Angle[3];            get_entvar(iPlayer, var_angles, Angle);
    static Float: vecPunchangle[3]; get_entvar(iPlayer, var_punchangle, vecPunchangle);
   
    xs_vec_add(vecAngle, vecPunchangle, vecAngle);
    engfunc(EngFunc_MakeVectors, vecAngle);
   
    static Float: vecOrigin[3];     get_entvar(iPlayer, var_origin, vecOrigin);
    static Float: vecViewOfs[3];    get_entvar(iPlayer, var_view_ofs, vecViewOfs);
   
    static Float: vecUp[3];         global_get(glb_v_up, vecUp);
    static Float: vecRight[3];         global_get(glb_v_right, vecRight);
    static Float: vecForward[3];     global_get(glb_v_forward, vecForward);

    static Float:vShellOrigin[3], Float:vShellVelocity[3];

    for (i = 0; i < 3; i++)
    {
        vShellOrigin[i] = vecOrigin[i] + vecViewOfs[i] + vecForward[i] * flForwardScale + vecUp[i] * flUpScale + vecRight[i] * flRightScale;
        vShellVelocity[i] = vecVelocity[i] + vecForward[i] * 50.0 + vecUp[i] * 100.0 + vecRight[i] * 50.0;
    }

    client_print(0, print_chat, "vShellVelocity[1] = %f vShellVelocity[2] = %f vShellVelocity[3] = %f", vShellVelocity[0], vShellVelocity[1], vShellVelocity[2])
    client_print(0, print_chat, "vShellOrigin[1] = %f vShellOrigin[2] = %f vShellOrigin[3] = %f", vShellOrigin[0], vShellOrigin[1], vShellOrigin[2])
    client_print(0, print_chat, "Angle[1] = %f", Angle[1])
   
    if (msgBrass || (msgBrass = get_user_msgid("Brass")))
    {
        MESSAGE_BEGIN(MSG_PVS, msgBrass, vShellOrigin, 0);
        WRITE_BYTE(0);
        WRITE_COORD(vShellOrigin[0]);
        WRITE_COORD(vShellOrigin[1]);
        WRITE_COORD(vShellOrigin[2]);
        WRITE_COORD(0.0);
        WRITE_COORD(0.0);
        WRITE_COORD(0.0);
        WRITE_COORD(vShellVelocity[0]);
        WRITE_COORD(vShellVelocity[1]);
        WRITE_COORD(vShellVelocity[2]);
        WRITE_ANGLE(Angle[1]);
        WRITE_SHORT(iModelIndex);
        WRITE_BYTE(iBounce);
        WRITE_BYTE(0);
        WRITE_BYTE(iPlayer);
        MESSAGE_END();
    }
}

Вопрос сохраняется... Оружие в правой руке, при выстреле гильзы летят влево согласно параметрам flUpScale, flForwardScale, flRightScale. После чего не перемещаясь и не перемещая прицел стреляю с левой руки, при выстреле начало вылета гильз переносится левее и гильзы летят вправо, но значения vShellVelocity, vShellOrigin, Angle те же самые

Если заменить мессагу, то происходит следующее
Код:
EjectBrass(const iPlayer, const iModelIndex, const iBounce, const Float:flUpScale = -9.0, const Float: flForwardScale = 10.0, const Float: flRightScale = -3.0)
{
    static i, msgBrass;

    static Float: vecVelocity[3];    get_entvar(iPlayer, var_velocity, vecVelocity);
    static Float: vecAngle[3];        get_entvar(iPlayer, var_v_angle, vecAngle);
    static Float: Angle[3];            get_entvar(iPlayer, var_angles, Angle);
    static Float: vecPunchangle[3]; get_entvar(iPlayer, var_punchangle, vecPunchangle);
   
    xs_vec_add(vecAngle, vecPunchangle, vecAngle);
    engfunc(EngFunc_MakeVectors, vecAngle);
   
    static Float: vecOrigin[3];     get_entvar(iPlayer, var_origin, vecOrigin);
    static Float: vecViewOfs[3];    get_entvar(iPlayer, var_view_ofs, vecViewOfs);
   
    static Float: vecUp[3];         global_get(glb_v_up, vecUp);
    static Float: vecRight[3];         global_get(glb_v_right, vecRight);
    static Float: vecForward[3];     global_get(glb_v_forward, vecForward);

    static Float:vShellOrigin[3], Float:vShellVelocity[3];

    for (i = 0; i < 3; i++)
    {
        vShellOrigin[i] = vecOrigin[i] + vecViewOfs[i] + vecForward[i] * flForwardScale + vecUp[i] * flUpScale + vecRight[i] * flRightScale;
        vShellVelocity[i] = vecVelocity[i] + vecForward[i] * 50.0 + vecUp[i] * 100.0 + vecRight[i] * 50.0;
    }

    client_print(0, print_chat, "vShellVelocity[1] = %f vShellVelocity[2] = %f vShellVelocity[3] = %f", vShellVelocity[0], vShellVelocity[1], vShellVelocity[2])
    client_print(0, print_chat, "vShellOrigin[1] = %f vShellOrigin[2] = %f vShellOrigin[3] = %f", vShellOrigin[0], vShellOrigin[1], vShellOrigin[2])
    client_print(0, print_chat, "Angle[1] = %f", Angle[1])
   
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vShellOrigin, 0);
    write_byte(TE_MODEL);
    engfunc(EngFunc_WriteCoord, vShellOrigin[0]);
    engfunc(EngFunc_WriteCoord, vShellOrigin[1]);
    engfunc(EngFunc_WriteCoord, vShellOrigin[2]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[0]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[1]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[2]);
    engfunc(EngFunc_WriteAngle, Angle[1]);
    write_short(iModelIndex);
    write_byte(1);
    write_byte(15); // 2.5 seconds
    message_end();
}
В таком случае гильзы летят вправо независимо от того, оружие в левой руке или в правой
 

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

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