Issue with xm1014 customization

Сообщения
4
Реакции
3
Hello everyone I hope that you are doing well I need help with this plugin in fact this plugin should enable the xm1014 to shoot a nade entity and then if the enemy is within the radius range to kill him. This all works well but the issue that I am having is that the xm1014 is also shooting default bullets and also has the muzzle and sound effect, has anyone any idea how to disable the default shooting and just have the grenade entity instead. Thanks in advance. Here is the sma :

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "XM1014 Paintball Launcher"
#define VERSION "1.5"
#define AUTHOR "WhooKid + Updated"

new blood1, blood2;
new bool:g_round_ended = false;

new const PBNADE_MODEL[] = "models/w_pbnade.mdl";
const Float:NadeExplosionRadius = 150.0;

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

    register_forward(FM_SetModel, "fw_setmodel");
    register_forward(FM_Think, "fw_think");
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_xm1014", "fw_xm1014_attack");

    register_logevent("logevent_round_end", 2, "1=Round_End");
    register_logevent("logevent_round_start", 2, "1=Round_Start");
}

public plugin_precache()
{
    precache_model("models/p_pbnade.mdl");
    precache_model("models/v_pbnade.mdl");
    precache_model(PBNADE_MODEL);

    blood1 = precache_model("sprites/blood.spr");
    blood2 = precache_model("sprites/bloodspray.spr");

    precache_sound("weapons/sg_explode.wav");
}

public logevent_round_end()   { g_round_ended = true; }
public logevent_round_start() { g_round_ended = false; }

public fw_xm1014_attack(ent)
{
    new id = pev(ent, pev_owner);
    if (!is_user_alive(id)) return;

    set_pdata_float(ent, 46, 0.5, 4); // Fire delay

    new Float:origin[3], Float:velocity[3], Float:view_ofs[3];
    pev(id, pev_origin, origin);
    pev(id, pev_view_ofs, view_ofs);

    origin[0] += view_ofs[0];
    origin[1] += view_ofs[1];
    origin[2] += view_ofs[2];

    new nade = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
    if (!pev_valid(nade)) return;

    set_pev(nade, pev_classname, "pbnade");
    engfunc(EngFunc_SetOrigin, nade, origin);
    engfunc(EngFunc_SetModel, nade, PBNADE_MODEL);
    set_pev(nade, pev_owner, id);
    set_pev(nade, pev_solid, SOLID_BBOX);
    set_pev(nade, pev_movetype, MOVETYPE_TOSS);
    set_pev(nade, pev_mins, Float:{-2.0, -2.0, -2.0});
    set_pev(nade, pev_maxs, Float:{2.0, 2.0, 2.0});
    set_pev(nade, pev_gravity, 0.5);

    velocity_by_aim(id, 1000, velocity);
    set_pev(nade, pev_velocity, velocity);

    set_pev(nade, pev_nextthink, get_gametime() + 1.6);
}

public fw_setmodel(ent, model[])
{
    if (equali(model, "models/w_hegrenade.mdl") || equali(model, PBNADE_MODEL))
    {
        engfunc(EngFunc_SetModel, ent, PBNADE_MODEL);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public fw_think(ent)
{
    if (!pev_valid(ent)) return FMRES_IGNORED;

    new classname[16];
    pev(ent, pev_classname, classname, charsmax(classname));

    if (!equal(classname, "pbnade"))
        return FMRES_IGNORED;

    if (g_round_ended) {
        engfunc(EngFunc_RemoveEntity, ent);
        return FMRES_SUPERCEDE;
    }

    act_explode(ent);
    return FMRES_SUPERCEDE;
}

public act_explode(ent)
{
    if (!pev_valid(ent)) return;

    new owner = pev(ent, pev_owner);
    if (!is_user_connected(owner)) {
        engfunc(EngFunc_RemoveEntity, ent);
        return;
    }

    new Float:forigin[3];
    pev(ent, pev_origin, forigin);

    new origin[3];
    FVecIVec(forigin, origin);

    new team = get_user_team(owner);
    new colors[4];
    if (team == 1) {
        colors[0] = 255;
        colors[1] = 0;
        colors[2] = 247;
        colors[3] = 70;
    } else {
        colors[0] = 0;
        colors[1] = 255;
        colors[2] = 208;
        colors[3] = 30;
    }

    new id = 0, Float:porigin[3];
    while (++id <= get_maxplayers())
    {
        if (!is_user_alive(id)) continue;

        // Splash
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id);
        write_byte(TE_LAVASPLASH);
        write_coord(origin[0]);
        write_coord(origin[1]);
        write_coord(origin[2] - 50);
        message_end();

        // Blood
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id);
        write_byte(TE_BLOODSPRITE);
        write_coord(origin[0]);
        write_coord(origin[1]);
        write_coord(origin[2] + 20);
        write_short(blood2);
        write_short(blood1);
        write_byte(colors[2]);
        write_byte(30);
        message_end();

        // Damage
        if (team != get_user_team(id) || id == owner)
        {
            pev(id, pev_origin, porigin);
            if (get_distance_f(forigin, porigin) <= NadeExplosionRadius && fm_is_visible(ent, id))
            {
                ExecuteHam(Ham_TakeDamage, id, ent, owner, (id != owner) ? 100.0 : 300.0, 0);
            }
        }
    }

    emit_sound(ent, CHAN_AUTO, "weapons/sg_explode.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
    engfunc(EngFunc_RemoveEntity, ent);
}

stock bool:fm_is_visible(ent, target)
{
    if (!pev_valid(ent) || !pev_valid(target)) return false;

    new Float:start[3], Float:view_ofs[3], Float:end[3];
    pev(ent, pev_origin, start);
    pev(ent, pev_view_ofs, view_ofs);
    pev(target, pev_origin, end);

    start[0] += view_ofs[0];
    start[1] += view_ofs[1];
    start[2] += view_ofs[2];

    engfunc(EngFunc_TraceLine, start, end, 1, ent, 0);
    new Float:fraction;
    get_tr2(0, TR_flFraction, fraction);

    return (fraction == 1.0);
}
 

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

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