При получении оружия выдает 10 патронов, но после перезарядки вновь 7, попробовал это исправить через f_HamWeaponReload, но вовсе не перезаряжается. Можно как-то без километрового кода установить кол. патронов после перезарядки?
- Код: Выделить всё
register_clcmd("dgl", "give_deagle")
RegisterHam( Ham_Weapon_Reload , "weapon_deagle", "f_HamWeaponReload")
public f_HamWeaponReload(wid)
{
if(get_user_weapon(wid) == CSW_DEAGLE)
{
set_pdata_int(get_pdata_cbase(wid, 373), 51, 10)
}
}
public give_deagle(id)
{
drop_weapons(id, 2)
new iWep2 = give_item(id,"weapon_deagle")
if( iWep2 > 0)
{
set_pdata_int(get_pdata_cbase(id, 373), 51, 10)
}
g_has_deagle[id] = true
}
Вариант - 2
Так работает, но когда максимальное кол. патронов, то всё равно перезаряжает, допустим установил 10 патронов, перезарядка не должна идти, но она начинается, ставил проверку cs_get_weapon_ammo, но не пашет. Устроил бы любой из 2-ух вариантов, но тупиковые оба..
- Код: Выделить всё
cvar_clip_deagle = register_cvar("amx_vip_deagle_clip", "10")
public give_deagle(id)
{
drop_weapons(id, 2)
new iWep2 = give_item(id,"weapon_deagle")
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_deagle))
cs_set_user_bpammo (id, CSW_DEAGLE, get_pcvar_num(cvar_deagle_ammo))
}
g_has_deagle[id] = true
}
{
RegisterHam(Ham_Item_PostFrame, "weapon_deagle", "deagle_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "deagle_Reload")
RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "deagle_Reload_Post", 1)
}
public deagle_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_deagle[id])
return HAM_IGNORED
static iClipExtra
iClipExtra = get_pcvar_num(cvar_clip_deagle)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE);
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iClipExtra - iClip, iBpAmmo)
set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_DEAGLE, iBpAmmo-j)
set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}
public deagle_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_deagle[id])
return HAM_IGNORED
static iClipExtra
if(g_has_deagle[id])
iClipExtra = get_pcvar_num(cvar_clip_deagle)
g_deagle_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
if (iBpAmmo <= 0)
return HAM_SUPERCEDE
if (iClip >= iClipExtra)
return HAM_SUPERCEDE
g_deagle_TmpClip[id] = iClip
return HAM_IGNORED
}
public deagle_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_deagle[id])
return HAM_IGNORED
if (g_deagle_TmpClip[id] == -1)
return HAM_IGNORED
set_pdata_int(weapon_entity, m_iClip, g_deagle_TmpClip[id], WEAP_LINUX_XTRA_OFF)
set_pdata_float(weapon_entity, m_flTimeWeaponIdle, deagle_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
set_pdata_float(id, m_flNextAttack, deagle_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
UTIL_PlayWeaponAnimation(id, deagle_RELOAD)
return HAM_IGNORED
}
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}