Как использовать и для чего нужны данные нативы

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
336
Реакции
174
Помог
11 раз(а)
Привет всем!
Собственно суть вопроса следующая:
Как использовать и для чего нужны эти нативы?

Код:
native rg_fire_bullets(const inflictor, const attacker, const shots, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread[3], const Float:flDistance, const Bullet:iBulletType, const iTracerFreq, const iDamage);

native rg_fire_buckshots(const inflictor, const attacker, const shots, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread[3], const Float:flDistance, const iTracerFreq, const iDamage);

native Float:[3] rg_fire_bullets3(const inflictor, const attacker, Float:vecSrc[3], Float:vecDirShooting[3], const Float:vecSpread, const Float:flDistance, const iPenetration, const Bullet:iBulletType, const iDamage, const Float:flRangeModifier, const bool:bPistol, const shared_rand);
Пытался использовать через команду и после выстрелить -- ни чего не получилось.

Код:
#include <amxmodx>
#include <reapi>
enum _:XYZ {
    Float:X,Float:Y,Float:Z
};
public plugin_init() {
    register_plugin("Fire Bulets Test","1","b0t.");
    register_clcmd("fire_bul","Fucn__FireBull");
}
public Fucn__FireBull(const id) {
    new iActiveItem = get_member(id,m_pActiveItem);
    if(is_nullent(iActiveItem))
        return PLUGIN_HANDLED;
    
    new Float:fVecSrc[XYZ],iVecSrc[XYZ];
    get_user_origin(id,iVecSrc,Origin_Eyes);
    FVecIVec(fVecSrc,iVecSrc);
    rg_fire_bullets3(iActiveItem,id,fVecSrc,fVecSrc,20.0,9999.0,2,BULLET_PLAYER_MP5,20,100.0,true,1);
    return PLUGIN_HANDLED;
}
 
Сообщения
494
Реакции
340
Помог
11 раз(а)
Описание гласит:
rg_fire_bullets - стрельба пулей из энтити (игрока). Чем-то походит на энтитю "func_tank" - что-то вроде пулемёта. Пули летят как-то медленно и с навесом, не похоже на стрельбу из обычного оружия.
rg_fire_buckshots - стрельба картечью из энтити (игрока). На деле (визуально) эмуляции стрельбы из дробовика как-то не видно.
rg_fire_bullets3 - стрельба пулей из оружия игрока. Визуально и физически не видно результата работы функции.

Касательно твоего примера.
А почему у тебя 3 и 4 аргумент - одинаковые?
Там же вроде как 3 - исходный вектор координат, 4 - вектор направления, в которую будет выпущена пуля.
Float:vecSrc[3] и Float:vecDirShooting[3]

Код:
#include <amxmodx>
#include <reapi>
#include <fakemeta>
#include <xs>

public plugin_init()
{
    register_clcmd("shoot1", "@shoot1");
    register_clcmd("shoot2", "@shoot2");
    register_clcmd("shoot3", "@shoot3");

    RegisterHookChain(RG_CBaseEntity_FireBullets3, "@CBaseEntity_FireBullets3_Post", true);
}

@shoot1(pPlayer)
{
    new iActiveItem;
    iActiveItem = get_member(pPlayer, m_pActiveItem);

    if(is_nullent(iActiveItem))
        return;

    new
        Float: fOriginStart[3],
        Float: fOriginEnd[3];

    get_entvar(pPlayer, var_origin, fOriginStart);
    get_player_aiming(pPlayer, fOriginEnd);

    rg_fire_bullets(iActiveItem, pPlayer, 1, fOriginStart, fOriginEnd, Float: { 0.0, 0.0, 0.0 }, 8192.0, BULLET_PLAYER_50AE, 1, 100);
}

@shoot2(pPlayer)
{
    new iActiveItem;
    iActiveItem = get_member(pPlayer, m_pActiveItem);

    if(is_nullent(iActiveItem))
        return;

    new
        Float: fOriginStart[3],
        Float: fOriginEnd[3];

    get_entvar(pPlayer, var_origin, fOriginStart);
    get_player_aiming(pPlayer, fOriginEnd);

    rg_fire_buckshots(iActiveItem, pPlayer, 1, fOriginStart, fOriginEnd, Float: { 0.0, 0.0, 0.0 }, 8192.0, 1, 100);
}

@shoot3(pPlayer)
{
    new iActiveItem;
    iActiveItem = get_member(pPlayer, m_pActiveItem);

    if(is_nullent(iActiveItem))
        return;

    new
        Float: fOriginStart[3],
        Float: fOriginEnd[3];

    get_entvar(pPlayer, var_origin, fOriginStart);
    get_player_aiming(pPlayer, fOriginEnd);

    rg_fire_bullets3(iActiveItem, pPlayer, fOriginStart, fOriginEnd, 0.0, 8192.0, 2, BULLET_MONSTER_12MM, 100, random_float(0.5, 0.9), true, 70000);
}

@CBaseEntity_FireBullets3_Post(pEntity, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread, Float:flDistance, iPenetration, iBulletType, iDamage, Float:flRangeModifier, pevAttacker, bool:bPistol, shared_rand)
{
    client_print_color(0, print_team_default, "Хук [RG_CBaseEntity_FireBullets3]");
}

stock get_player_aiming(pPlayer, Float: fOriginEnd[3])
{
    static Float: fOriginStart[3];

    get_entvar(pPlayer, var_origin, fOriginStart);
    get_entvar(pPlayer, var_view_ofs, fOriginEnd);

    xs_vec_add(fOriginStart, fOriginEnd, fOriginStart);

    get_entvar(pPlayer, var_v_angle, fOriginEnd);
    engfunc(EngFunc_MakeVectors, fOriginEnd);
    global_get(glb_v_forward, fOriginEnd);

    xs_vec_add_scaled(fOriginStart, fOriginEnd, 8192.0, fOriginEnd);

    engfunc(EngFunc_TraceLine, fOriginStart, fOriginEnd, IGNORE_MONSTERS, pPlayer, 0);
    get_tr2(0, TR_vecEndPos, fOriginEnd);
}
Ну вроде так вот работает для rg_fire_bullets и rg_fire_buckshots. А вот для rg_fire_bullets3 ни визуально, ни физически работу функции не видно, хотя через хук ловится.
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
bizon, fOriginEnd твой бесполезный, там нужен просто аиминг игрока, куда он смотрит

C:
stock UTIL_GetVectorAiming( const pPlayer, Float: vecAiming[ 3 ] )
{
    new Float: vecViewAngle[ 3 ]; get_entvar( pPlayer, var_v_angle, vecViewAngle );
    new Float: vecPunchangle[ 3 ]; get_entvar( pPlayer, var_punchangle, vecPunchangle );

    xs_vec_add( vecViewAngle, vecPunchangle, vecViewAngle );
    angle_vector( vecViewAngle, ANGLEVECTOR_FORWARD, vecAiming );
}
А вообще посмотрите сурсы пушек, чтобы понять как работает rg_fire_bullets3 и rg_fire_buckshots - https://github.com/s1lentq/ReGameDLL_CS/tree/master/regamedll/dlls/wpn_shared

А сам rg_fire_bullets это практически аналог rg_fire_buckshots, одно из отличий которое я находил в сурсах, это то, что если у него урон больше чем 16 , то damageType при убийстве будет DMG_ALWAYSGIB , иначе DMG_NEVERGIB

 
Последнее редактирование:
Сообщения
336
Реакции
174
Помог
11 раз(а)
bizon, t3rkecorejz, спасибо огромное за помощь! Разобрался. Тему можно закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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