Пользователь
- Сообщения
- 78
- Реакции
- 3
- Помог
- 1 раз(а)
Добрый день, подскажите пожалуйста, можно ли как-то изменить на кастомных оружиях траекторию полета пули. Пример:
Стреляя с weapon_g3sg1 пули на средних дистанциях очень сильно косит.
Стоит щас pev_punchangle,var_punchangle - а именно контроль отдачи. но это только меняет на сколько будет тряска экрана.
Стреляя с weapon_g3sg1 пули на средних дистанциях очень сильно косит.
Стоит щас pev_punchangle,var_punchangle - а именно контроль отдачи. но это только меняет на сколько будет тряска экрана.
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define weapon_name "weapon_sg550"
#define weapon_new "zombus_cso/weapon_vsk94_zombus"
//Check
#define WEAPON_VSK94_SPECIAL_CODE 4512322
#define Is_CustomItem(%0) (pev(%0,pev_impulse)==WEAPON_VSK94_SPECIAL_CODE)
#define model_v "models/zombus_cso/wzombus/v_vsk94.mdl"
#define model_p "models/zombus_cso/wzombus/p_vsk94.mdl"
#define model_w "models/zombus_cso/wzombus/w_cso_weapons3.mdl"
#define WEAPON_MODEL_S "models/zombus_cso/wzombus/shell762.mdl"
new const sounds_dump[][] =
{
"weapons/vsk94-1.wav"
}
#define sound_shot "weapons/vsk94-1.wav"
new const precache_dump[][] =
{
"sprites/zombus_cso/weapon_vsk94_zombus.txt",
"sprites/zombus_cso/640hard2.spr",
"sprites/zombus_cso/640hud7.spr"
}
new g_shell
new cvar_weapon_ammo, cvar_weapon_bpammo, cvar_weapon_damage, cvar_weapon_speed, cvar_weapon_punchangle,
cvar_weapon_reloadtime, cvar_weapon_deploytime, cvar_weapon_submodel
new g_iSpriteLaser
public plugin_init()
{
RegisterHam(Ham_Item_Deploy, weapon_name, "HookHam_Weapon_Deploy", 1)
RegisterHam(Ham_Item_AddToPlayer, weapon_name, "HookHam_Weapon_Add", 1)
RegisterHam(Ham_Item_PostFrame, weapon_name, "HookHam_Weapon_Frame", 0)
RegisterHam(Ham_Weapon_Reload, weapon_name, "HookHam_Weapon_Reload", 0)
RegisterHam(Ham_Weapon_WeaponIdle, weapon_name, "HookHam_Weapon_Idle", 0)
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "HookHam_Weapon_PrimaryAttack", 0)
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "info_target", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_Spawn, "weaponbox", "HookHam_WeaponBox_Spawn", 1)
register_forward(FM_SetModel, "HookFm_SetModel", 0)
register_forward(FM_UpdateClientData, "HookFm_UpdateClientData", 1)
cvar_weapon_ammo = register_cvar("vsk_ammo", "40")
cvar_weapon_bpammo = register_cvar("vsk_bpammo", "140")
cvar_weapon_damage = register_cvar("vsk_damage", "1.0")
cvar_weapon_speed = register_cvar("vsk_fire_speed", "0.13")
cvar_weapon_punchangle = register_cvar("vsk_recoil", "1.0")
cvar_weapon_reloadtime = register_cvar("vsk_reload_time", "3.25")
cvar_weapon_deploytime = register_cvar("vsk_deploy_time", "0.85")
cvar_weapon_submodel = register_cvar("vsk_submodel", "19")
register_clcmd(weapon_new,"hook_item")
register_clcmd("test","get_item")
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel,model_v)
engfunc(EngFunc_PrecacheModel,model_p)
engfunc(EngFunc_PrecacheModel,model_w)
g_shell = engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_S);
new i;
for(i = 0;i < sizeof(sounds_dump);i++) engfunc(EngFunc_PrecacheSound,sounds_dump[i])
for(i = 0;i < sizeof(precache_dump);i++) engfunc(EngFunc_PrecacheGeneric,precache_dump[i])
// Sprites
g_iSpriteLaser = precache_model( "sprites/lgtning.spr")
}
public zp_buy_ammo_1(id)
{
new iEnt = get_pdata_cbase(id, 373, 5);
if(!Is_CustomItem(iEnt))
return;
}
public plugin_natives()
{
register_native("zp_weapon_vsk94", "get_item", 1)
}
public get_item(id)
{
UTIL_DropWeapon(id, 1);
new weapon = make_weapon();
if(weapon<=0)
return
if(!ExecuteHamB(Ham_AddPlayerItem, id, weapon))
{
engfunc(EngFunc_RemoveEntity, weapon);
return;
}
ExecuteHam(Ham_Item_AttachToPlayer,weapon, id)
new ammotype = 376 + get_pdata_int(weapon, 49, 4)
new ammo = get_pdata_int(id, ammotype,5)
if(ammo < get_pcvar_num(cvar_weapon_bpammo))
set_pdata_int(id, ammotype, get_pcvar_num(cvar_weapon_bpammo), 5)
set_pdata_int(weapon, 51, get_pcvar_num(cvar_weapon_ammo), 4)
set_pdata_int(weapon, 57, g_shell, 4);
emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
public hook_item(id)
{
engclient_cmd(id,weapon_name)
return PLUGIN_HANDLED
}
public HookHam_Weapon_Deploy(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static id;
id = get_pdata_cbase(ent, 41, 4)
set_pev(id, pev_viewmodel2, model_v)
set_pev(id, pev_weaponmodel2, model_p)
set_pdata_float(ent, 46, get_pcvar_float(cvar_weapon_deploytime), 4)
set_pdata_float(ent, 47, get_pcvar_float(cvar_weapon_deploytime), 4)
set_pdata_float(ent, 48, get_pcvar_float(cvar_weapon_deploytime), 4)
set_pdata_int(ent, 74, 0, 4)
set_pdata_int(ent, 55, 0, 4)
Play_WeaponAnim(id, 2)
return HAM_IGNORED
}
public HookHam_Weapon_Add(ent,id)
{
switch(pev(ent, pev_impulse))
{
case WEAPON_VSK94_SPECIAL_CODE: Weaponlist(id, true)
case 0: Weaponlist(id, false)
}
return HAM_IGNORED
}
public HookHam_Weapon_Frame(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED;
static id
id = get_pdata_cbase(ent, 41, 4);
if(get_pdata_int(ent, 54, 4))
{
static clip, ammotype, ammo, j;
ammotype = 376 + get_pdata_int(ent, 49, 4);
clip = get_pdata_int(ent, 51, 4);
ammo = get_pdata_int(id, ammotype, 5);
j = min(get_pcvar_num(cvar_weapon_ammo) - clip, ammo);
set_pdata_int(ent, 51, clip + j, 4);
set_pdata_int(id, ammotype, ammo - j, 5);
set_pdata_int(ent, 54, 0, 4);
}
return HAM_IGNORED
}
public HookHam_Weapon_Reload(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED;
static clip;
static id;
clip = get_pdata_int(ent, 51, 4);
id = get_pdata_cbase(ent, 41, 4);
if(clip == get_pcvar_num(cvar_weapon_ammo))
return HAM_SUPERCEDE;
if(get_pdata_int(id, 376 + get_pdata_int(ent, 49, 4), 5) <= 0)
return HAM_SUPERCEDE
set_pdata_int(ent, 51, 0, 4);
ExecuteHam(Ham_Weapon_Reload, ent);
set_pdata_int(ent, 51, clip, 4);
set_pdata_float(id, 83, get_pcvar_float(cvar_weapon_reloadtime), 5);
set_pdata_float(ent, 48, get_pcvar_float(cvar_weapon_reloadtime), 4);
Play_WeaponAnim(id, 1);
if(get_pdata_int(id, 363, 5) != 90)
set_pdata_int(id, 363, 90, 5);
set_pdata_int(ent, 54, 1, 4);
return HAM_SUPERCEDE;
}
public HookHam_Weapon_Idle(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) > 0.0)
return HAM_IGNORED
set_pdata_float(ent, 48, 1.7, 4)
Play_WeaponAnim(get_pdata_cbase(ent, 41, 4), 0)
return HAM_SUPERCEDE
}
public HookHam_Weapon_PrimaryAttack(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static ammo;
ammo = get_pdata_int(ent, 51, 4);
if(ammo <= 0)
{
ExecuteHam(Ham_Weapon_PlayEmptySound, ent);
set_pdata_float(ent, 46, get_pcvar_float(cvar_weapon_speed), 4)
return HAM_SUPERCEDE
}
static id;
id = get_pdata_cbase(ent, 41, 4)
static Float:user_punchangle[3];
pev(id,pev_punchangle,user_punchangle)
set_pdata_int(ent, 55, 0, 4)
static fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
state FireBullets: Enabled;
ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
state FireBullets: Disabled;
unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
static Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*get_pcvar_float(cvar_weapon_punchangle)
user_newpunch[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*get_pcvar_float(cvar_weapon_punchangle)
user_newpunch[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*get_pcvar_float(cvar_weapon_punchangle)
//user_newpunch[0] = random_float(-0.4, 0.4)
//user_newpunch[1] = random_float(-1.0, 1.0)
set_pev(id,pev_punchangle,user_newpunch)
emit_sound(id, CHAN_WEAPON,sound_shot,1.0, ATTN_NORM, 0, PITCH_NORM)
Play_WeaponAnim(id, 3)
set_pdata_float(ent,48,2.0,4)
set_pdata_float(ent,46,get_pcvar_float(cvar_weapon_speed),4)
set_pdata_float(ent,47,get_pcvar_float(cvar_weapon_speed)+0.1,4)
set_pdata_int(ent,51,ammo-1,4)
set_pdata_float(id, 111, get_gametime(), 5);
return HAM_SUPERCEDE
}
public HookFm_SetModel(ent,str[]) <SetModel: Enabled>
{
state SetModel: Disabled;
static i, classname[32], item; pev(ent, pev_classname, classname, 31);
if(!equal(classname, "weaponbox"))
return FMRES_IGNORED;
for(i = 0; i < 6; i++)
{
item = get_pdata_cbase(ent, 34 + i, 4);
if(item > 0 && Is_CustomItem(item))
{
engfunc(EngFunc_SetModel, ent, model_w);
set_pev(ent, pev_body, get_pcvar_num(cvar_weapon_submodel))
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public HookFm_SetModel() <SetModel: Disabled> { return FMRES_IGNORED; }
public HookFm_SetModel() <> { return FMRES_IGNORED; }
public HookHam_WeaponBox_Spawn(ent) state SetModel: Enabled;
public HookFm_PlayBackEvent()return FMRES_SUPERCEDE
public fw_TraceAttack_Post(victim, attacker, Float:damage, Float:fDir[3], ptr, damagetype) <FireBullets: Enabled>
{
if(!is_user_connected(attacker)) return HAM_IGNORED;
static item; item = get_pdata_cbase(attacker, 373, 5);
if(item <= 0 || !Is_CustomItem(item)) return HAM_IGNORED;
static Float:vecEnd[3];
get_tr2(ptr, TR_vecEndPos, vecEnd);
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0);
write_byte(TE_GUNSHOTDECAL);
engfunc(EngFunc_WriteCoord, vecEnd[0]);
engfunc(EngFunc_WriteCoord, vecEnd[1]);
engfunc(EngFunc_WriteCoord, vecEnd[2]);
write_short(victim);
write_byte(random_num(41, 45));
message_end();
static Float:WallVector[3];
get_tr2(ptr, TR_vecPlaneNormal, WallVector)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEnd, 0);
write_byte(TE_STREAK_SPLASH)
engfunc(EngFunc_WriteCoord, vecEnd[0]);
engfunc(EngFunc_WriteCoord, vecEnd[1]);
engfunc(EngFunc_WriteCoord, vecEnd[2]);
engfunc(EngFunc_WriteCoord, WallVector[0]*random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord, WallVector[1]*random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord, WallVector[2]*random_float(25.0,30.0));
write_byte(111) //colorid
write_short(12) //count
write_short(3) //speed
write_short(75) //random velocity
message_end()
new vec2[3]
get_user_origin(attacker, vec2, 3)
make_beam(attacker, vec2, g_iSpriteLaser, 94, 7, 224, 100)
return HAM_IGNORED;
}
public fw_TraceAttack_Post() <FireBullets: Disabled> { return HAM_IGNORED; }
public fw_TraceAttack_Post() <> { return FMRES_IGNORED; }
public HookFm_UpdateClientData(id, SendWeapons, CD_Handle)
{
static item;
item = get_pdata_cbase(id, 373, 5)
if(item <= 0 || !Is_CustomItem(item))
return FMRES_IGNORED
set_cd(CD_Handle, CD_flNextAttack, 99999.0)
return FMRES_HANDLED
}
stock make_weapon()
{
static ent;
static g_AllocString_E;
if(g_AllocString_E||(g_AllocString_E=engfunc(EngFunc_AllocString,weapon_name)))
ent = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E)
else
return 0
if(ent <= 0)
return 0;
set_pev(ent, pev_spawnflags, SF_NORESPAWN);
set_pev(ent, pev_impulse, WEAPON_VSK94_SPECIAL_CODE);
ExecuteHam(Ham_Spawn, ent)
return ent
}
stock UTIL_DropWeapon(id, slot)
{
static iEntity; iEntity = get_pdata_cbase(id, (367 + slot), 5);
if(iEntity > 0)
{
static iNext,szWeaponName[32];
do
{
iNext = get_pdata_cbase(iEntity, 42, 4);
if(get_weaponname(get_pdata_int(iEntity, 43, 4), szWeaponName, 31))
engclient_cmd(id, "drop", szWeaponName)
} while(( iEntity = iNext) > 0);
}
}
stock Play_WeaponAnim(id,anim)
{
set_pev(id, pev_weaponanim,anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(0)
message_end()
}
stock Weaponlist(id,bool:set)
{
if(!is_user_connected(id))return
message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id);
write_string(set==false?weapon_name:weapon_new);
write_byte(4);
write_byte(get_pcvar_num(cvar_weapon_bpammo));
write_byte(-1);
write_byte(-1);
write_byte(0);
write_byte(16);
write_byte(13);
write_byte(0);
message_end();
}
public fw_TraceAttack(victim, attacker, Float:damage, Float:fDir[3]) <FireBullets: Enabled>
{
if(!is_user_alive(attacker))
return HAM_IGNORED;
static item;
item = get_pdata_cbase(attacker, 373, 5);
if(item <= 0 || !Is_CustomItem(item))
return HAM_IGNORED;
SetHamParamFloat(3, damage * get_pcvar_float(cvar_weapon_damage));
return HAM_IGNORED;
}
public fw_TraceAttack() <FireBullets: Disabled> { return HAM_IGNORED; }
public fw_TraceAttack() <> { return FMRES_IGNORED; }
make_beam(id, const origin[3], sprite, red, green, blue, alpha)
{
//BEAMENTPOINTS
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (TE_BEAMENTPOINT)
write_short(id | 0x1000)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(sprite) // sprite
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(20) // width
write_byte(0) // noise
write_byte(red) // r, g, b
write_byte(green) // r, g, b
write_byte(blue) // r, g, b
write_byte(alpha) // brightness
write_byte(150) // speed
message_end()
}