Участник
Пользователь
- Сообщения
- 335
- Реакции
- 93
- Помог
- 2 раз(а)
Делаю функционал для CSDM. Игрок в меню может выбрать кол-во патрон в обойме для всего своего оружия: 1, 2 ,3, дефолт. При убийстве патроны автоматом пополняются. Но вот беды...
Ham_Weapon_Reload
триггерится на ручную перезарядку, а его post выполняется до сета патрон в обычном режиме => выдача была, стрелять можно. Ham_Item_Deploy
для сета патрон при переключение на другое оружие, но можно так абузить патроны. Потом решил поработать с rg_give_item, но там уже свои проблемы, хотя вариант хороший. Есть идеи, либо код/плагин с такой реализацией (без get_item)? Буду очень благодарен за помощь.
Код:
// Массив с выбранном кол-во патрон playerSetting[id][Ammo]
// Значения 0, 1, 2, 3 — понятно всё.
public Fwd_Weapon_Reload_Pre(weapon)
{
new id = get_member(weapon, m_pPlayer)
if(!is_user_connected(id) || get_member(weapon, m_Weapon_iClip) < playerSetting[id][Ammo] || playerSetting[id][Ammo] == 0)
return HAM_IGNORED;
SendWeaponAnimation(id,0); // немного баганная блокировка. :/
return HAM_SUPERCEDE;
}
public Fwd_Weapon_Reload_Post(weapon)
{
new id = get_member(weapon, m_pPlayer)
if(!is_user_connected(id) || get_member(weapon, m_Weapon_iClip) < playerSetting[id][Ammo] || playerSetting[id][Ammo] == 0)
return HAM_IGNORED;
new item = get_member(id, m_pActiveItem)
new WeaponID = get_member(item, m_iId)
switch(playerSetting[id][Ammo])
{
case 1: {/*Тут была отправка на кривую функцию выдачи патрон*/}
case 2: {/*Тут была отправка на кривую функцию выдачи патрон*/ }
case 3: {/*Тут была отправка на кривую функцию выдачи патрон*/}
}
return HAM_SUPERCEDE;
}
stock SendWeaponAnimation(const id, const Anim)
{
set_entvar(id, var_weaponanim, Anim);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id);
write_byte(Anim);
write_byte(0);
message_end();
}