Javekson, кратко суть. Есть клип, а есть аммо. Первое это количество патронов обойме, второе в запасе. Также нужно различать вывод патронов в худе и подсчет при стрельбе. Клип хранится в мембере
m_Weapon_iClip (в weapon_*)
, а аммо m_rgAmmo (в player). Причем
m_rgAmmo это массив размерностью в 32 ячейки. Если игрок поднимает/покупает/получает оружие, идет вызов CBasePlayer_GiveAmmo. Где имя аммо будет взято из
ItemInfo_pszAmmo1. А там будет выслана мессага
AmmoPickup. А само количество будет сохранено в m_rgAmmo. Каждый кадр игрока идет его сверка с массивом m_rgAmmoLast (количество которое было в последний раз отправлено игроку). И если значение ячейки другое будет отправлена мессага
AmmoX. Это и есть то количество которое видит игрок у себя на экране как количество патронов в запасе. Касательно патронов в обойме. При выборе оружие (деплое) и каждом выстреле идет отправка
CurWeapon где 3-им аргументом шлется количество патронов в обойме. Но эти сообщения никак не влияют на просчеты. Та же информация отправляется в дельте после вызова GetWeaponData у игрока. Там в массив структуры weapon_data_s загоняются данные оружия (те самые
m_Weapon_iClip и другие). Максимальное количество патронов в обойме прописано хардкодом в клиенте, и при нажатии релоада будет вызван код почти идентичный серверному. И вот зная что например у АК47 по умолчанию коиличество патронов 30, наша задача заключается в отправке клиенту (конечно в GetWeaponData) 30 патронов если у нас максимальное их количество (анпирмер 35) и другое значение если у нас их 30. Так как я раньше говорил для худа используется CurWeapon, то игрок ничего не заметит, а клиент игры будет думать что у нас максимальное количество патронов и заблокирует релоад сам. Собственно то, что нам и нужно. К сожалению в фейкмете никогда не был проброшен данный хук, что странно как по мне. И вот модификация от
Shel как раз пробрасывает данный хук.
20 Мар 2020
Другой путь сложнее, это установка
m_Weapon_iClip в 30. Но тогда оригинальное значение где то нужно хранить, а также фейковать CurWeapon. Что имхо сложнее.