Участник
Пользователь
- Сообщения
- 67
- Реакции
- 18
Приветствую!
Наткнулся на плагин пистолета М1911 реапишный, решил немного его модернизировать - добавить автоматический режим стрельбы на ПКМ.
Задумка получилась, но появилась проблема и вопрос, по которым прошу помощи.
Проблема: при выдаче пистолета и сразу же ведения шквального огня ломается перезарядка. Пробовал копировать отдельные элементы с проверкой обоймы из fw_WeaponPrimaryAttackPre, но пока как рыба об лёд.
Вопрос: У меня не получилось никак ускорить темп стрельбы шквальным огнём (пытался сделать через set_member(id, m_flNextAttack, 0.01)), но похоже он берёт это значение относительно дефолтной пушки и ниже не опускается(пробовал даже отрицательные значения ставить - без изменений) Как мне ускорить темп стрельбы?
Сделал видеодемонстрацию работы.
Код:
На всякий случай прикладываю инклуды.
Наткнулся на плагин пистолета М1911 реапишный, решил немного его модернизировать - добавить автоматический режим стрельбы на ПКМ.
Задумка получилась, но появилась проблема и вопрос, по которым прошу помощи.
Проблема: при выдаче пистолета и сразу же ведения шквального огня ломается перезарядка. Пробовал копировать отдельные элементы с проверкой обоймы из fw_WeaponPrimaryAttackPre, но пока как рыба об лёд.
Вопрос: У меня не получилось никак ускорить темп стрельбы шквальным огнём (пытался сделать через set_member(id, m_flNextAttack, 0.01)), но похоже он берёт это значение относительно дефолтной пушки и ниже не опускается(пробовал даже отрицательные значения ставить - без изменений) Как мне ускорить темп стрельбы?
Сделал видеодемонстрацию работы.
Код:
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <reapi>
#include <weapons>
#define ID_M1911A1 7634198
#define STRN_M1911A1 "weapon_m1911a1"
#define CLIP_M1911A1 8
#define MAXAMMO_M1911A1 100
enum
{
ANIM_IDLE,
ANIM_IDLE_EMPTY,
ANIM_SHOOT1,
ANIM_SHOOT2,
ANIM_SHOOT_EMPTY,
ANIM_RELOAD,
ANIM_RELOAD_EMPTY,
ANIM_DRAW,
ANIM_DRAW_EMPTY
}
new const WEAPON_REFERENCE[] = "weapon_fiveseven";
#define VIEWMODEL "models/cso/v_m1911a1.mdl"
#define WEAPONMODEL "models/cso/p_m1911a1.mdl"
#define WORLDMODEL "models/cso/w_m1911a1.mdl"
#define SHOOTSOUND "weapons/COLTM1911/coltm1911a1-1.wav"
new pPlayer, pEntity, HookChain:TakeDamage
public plugin_precache()
{
engfunc(EngFunc_PrecacheSound, SHOOTSOUND)
engfunc(EngFunc_PrecacheGeneric, "sound/weapons/COLTM1911/coltm1911a1_clipin.wav")
engfunc(EngFunc_PrecacheGeneric, "sound/weapons/COLTM1911/coltm1911a1_clipout.wav")
engfunc(EngFunc_PrecacheGeneric, "sound/weapons/COLTM1911/coltm1911a1_slideback.wav")
engfunc(EngFunc_PrecacheModel, VIEWMODEL)
engfunc(EngFunc_PrecacheModel, WEAPONMODEL)
engfunc(EngFunc_PrecacheModel, WORLDMODEL)
engfunc(EngFunc_PrecacheGeneric, "sprites/406/640hud7.spr")
engfunc(EngFunc_PrecacheGeneric, "sprites/406/640hud114.spr")
engfunc(EngFunc_PrecacheGeneric, "sprites/weapon_m1911a1.txt")
}
public plugin_init()
{
register_plugin("Weapon: M1911 A1", "16.11.2018", "406")
RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "fw_ItemDeployPre")
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERENCE, "fw_WeaponPrimaryAttackPre")
RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERENCE, "fw_Weapon_SecondaryAttack")
RegisterHam(Ham_Weapon_Reload, WEAPON_REFERENCE, "fw_WeaponReloadPre")
RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERENCE, "fw_ItemAddToPlayerPost", 1)
RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERENCE, "fw_WeaponWeaponIdlePost", 1)
register_forward(FM_UpdateClientData, "fm_UpdateClientDataPost", 1)
RegisterHookChain(RG_CWeaponBox_SetModel, "rg_CWeaponBoxSetModelPre")
TakeDamage = RegisterHookChain(RG_CBasePlayer_TakeDamage, "rg_CBasePlayerTakeDamagePre")
DisableHookChain(TakeDamage)
register_clcmd(" ", "give_m1911a1")
register_clcmd("say /m1911", "give_m1911a1")
register_clcmd(STRN_M1911A1, "lastinv_m1911a1")
}
public give_m1911a1(player)
{
if(!is_user_alive(player)) return
pEntity = rg_give_custom_item(player, WEAPON_REFERENCE, GT_DROP_AND_REPLACE, ID_M1911A1)
set_member(pEntity, m_Weapon_iClip, CLIP_M1911A1),
set_member(pEntity, m_Weapon_bHasSecondaryAttack, true)
rg_set_iteminfo(pEntity, ItemInfo_iMaxClip, CLIP_M1911A1)
if(get_member(player, m_rgAmmo, AMMOID_FIVESEVEN) < MAXAMMO_M1911A1)
set_member(player, m_rgAmmo, MAXAMMO_M1911A1, AMMOID_FIVESEVEN)
}
public rg_CWeaponBoxSetModelPre(entity, const szModelName[])
{
pEntity = get_member(entity, m_WeaponBox_rgpPlayerItems, PISTOL_SLOT)
if(is_entity(pEntity) && get_entvar(pEntity, var_impulse) == ID_M1911A1)
SetHookChainArg(2, ATYPE_STRING, WORLDMODEL)
}
public fw_WeaponWeaponIdlePost(entity)
{
if(get_entvar(entity, var_impulse) != ID_M1911A1 || get_member(entity, m_Weapon_flTimeWeaponIdle) > 0.0) return
set_entvar(get_member(entity, m_pPlayer), var_weaponanim, ANIM_IDLE_EMPTY)
set_member(entity, m_Weapon_flTimeWeaponIdle, 99999.0)
}
public fw_ItemAddToPlayerPost(entity, player)
{
new iCustom = get_entvar(entity, var_impulse)
if(iCustom && (iCustom != ID_M1911A1)) return
SendWeaponList(player, (iCustom != ID_M1911A1) ? WEAPON_REFERENCE : STRN_M1911A1, AMMOID_FIVESEVEN, MAXAMMO_FIVESEVEN, SLOT_SECONDARY, POSITION_FIVESEVEN, ID_FIVESEVEN)
}
public fw_ItemDeployPre(entity)
{
pPlayer = get_member(entity, m_pPlayer)
if(get_member(pPlayer, m_pLastItem) == entity)
{
set_entvar(pPlayer, var_viewmodel, VIEWMODEL)
set_entvar(pPlayer, var_weaponmodel, WEAPONMODEL)
return HAM_SUPERCEDE
}
if(get_entvar(entity, var_impulse) != ID_M1911A1) return HAM_IGNORED
ExecuteHam(Ham_Item_Deploy, entity)
set_entvar(pPlayer, var_viewmodel, VIEWMODEL)
set_entvar(pPlayer, var_weaponmodel, WEAPONMODEL)
SendWeaponAnim(pPlayer, get_member(entity, m_Weapon_iClip) ? ANIM_DRAW : ANIM_DRAW_EMPTY)
// set_member(pPlayer, m_flNextAttack, 0.9)
set_member(entity, m_Weapon_flTimeWeaponIdle, 0.9)
return HAM_SUPERCEDE
}
public fw_WeaponReloadPre(entity)
{
if(get_entvar(entity, var_impulse) != ID_M1911A1) return HAM_IGNORED
new iClip = get_member(entity, m_Weapon_iClip)
pPlayer = get_member(entity, m_pPlayer)
if(iClip >= CLIP_M1911A1 || !get_member(pPlayer, m_rgAmmo, AMMOID_FIVESEVEN)) return HAM_SUPERCEDE
ExecuteHam(Ham_Weapon_Reload, entity)
// set_member(pPlayer, m_flNextAttack, 2.23)
set_member(entity, m_Weapon_flTimeWeaponIdle, 2.23)
set_entvar(pPlayer, var_weaponanim, iClip ? ANIM_RELOAD : ANIM_RELOAD_EMPTY)
return HAM_SUPERCEDE
}
public fw_WeaponPrimaryAttackPre(entity)
{
if(get_entvar(entity, var_impulse) != ID_M1911A1) return HAM_IGNORED
if(get_member(entity, m_Weapon_iShotsFired)) return HAM_SUPERCEDE
static iClip, iTraceLine, iPlaybackEvent
iClip = get_member(entity, m_Weapon_iClip)
if(iClip)
{
iTraceLine = register_forward(FM_TraceLine, "fm_TraceLinePost", 1)
iPlaybackEvent = register_forward(FM_PlaybackEvent, "fm_PlaybackEventPre")
EnableHookChain(TakeDamage)
}
ExecuteHam(Ham_Weapon_PrimaryAttack, entity)
if(!iClip) return HAM_SUPERCEDE
unregister_forward(FM_TraceLine, iTraceLine, 1)
unregister_forward(FM_PlaybackEvent, iPlaybackEvent)
DisableHookChain(TakeDamage)
// set_member(entity, m_Weapon_flTimeWeaponIdle, 1.033),
pPlayer = get_member(entity, m_pPlayer)
rh_emit_sound2(pPlayer, 0, CHAN_WEAPON, SHOOTSOUND)
set_entvar(pPlayer, var_weaponanim, iClip == 1 ? ANIM_SHOOT_EMPTY : iClip & 1 ? ANIM_SHOOT1 : ANIM_SHOOT2)
return HAM_SUPERCEDE
}
public fw_Weapon_SecondaryAttack(entity)
{
new id = entity_get_edict(entity, EV_ENT_owner)
set_pdata_int(entity,64,0,4),
set_member(id, m_flNextAttack, 0.01)
ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, WEAPON_REFERENCE, id))
}
public fm_TraceLinePost(Float:vecStart[3], Float:vecEnd[3], noMonsters, pentToSkip, iTrace)
{
if(noMonsters) return
if(!GunshotDecalTrace(iTrace, true)) return
get_tr2(iTrace, TR_vecEndPos, vecEnd)
get_tr2(iTrace, TR_vecPlaneNormal, vecStart)
CreateSmoke(SMOKE_WALLPUFF, vecEnd, vecStart, 0.5, Float:{40.0, 40.0, 40.0})
}
public fm_PlaybackEventPre() return FMRES_SUPERCEDE
public lastinv_m1911a1(player) engclient_cmd(player, WEAPON_REFERENCE)
public rg_CBasePlayerTakeDamagePre(victim, inflictor, attacker, Float:flDamage) SetHookChainArg(4, ATYPE_FLOAT, flDamage * 2.0)
public fm_UpdateClientDataPost(player, sendWeapons, cd)
{
if(!is_user_alive(player)) return
pEntity = get_member(player, m_pActiveItem)
if(is_entity(pEntity) && get_entvar(pEntity, var_impulse) == ID_M1911A1)
set_cd(cd, CD_flNextAttack, 99999.0)
}
Download all Attachments
-
8.9 KB Просмотры: 2
-
4.6 KB Просмотры: 2