4.Deplay
切枪,又看到m_flAccuracy和之前一样写法0.2,都是CBasePlayerWeapon类下的一个变量,不用深究为什么名字就是m_flAccuracy
iShellOn不明(坐等白白解释)
![](https://imgsa.baidu.com/forum/w%3D580/sign=85f774c3a7014c08193b28ad3a7a025b/f300490a19d8bc3edde6ffa08c8ba61ea9d34574.jpg)
5. PrimaryAttack和M14EBRFire
首先得知道M14EBRFire(float flSpread, floatflCycleTime, BOOL fUseAutoAim)这个函数里面的三个参数,因为函数在PrimaryAttack填对数据很重要
flSpread这个计算由三个部分组成Spread+ AccuracyMul * m_flAccuracy
而m_flAccuracy与m_iShotsFired(射出子弹量)有关
看M14EBRFire这个函数可以知道m_flAccuracy显然是一个增加的量,而这需要一个上限
即if (m_flAccuracy > MaxAccuracy)
m_flAccuracy= MaxAccuracy;
MaxAccuracy查看M14的weapons.ini可以知道是1.25所以MaxAccuracy处填1.25
Vector vecDir =m_pPlayer->FireBullets3(vecSrc, gpGlobals->v_forward, flSpread, 8192, 2,BULLET_PLAYER_762MM, 36, 0.98, m_pPlayer->pev, FALSE,m_pPlayer->random_seed);
太长了这个
注意36和0.98
36是伤害damage查weapon.ini可以知道M14是46
0.98是RangeModifier什么意思我就不知道了。Weapon.ini里面没有就不动吧
m_flTimeWeaponIdle = UTIL_WeaponTimeBase()+ 1.9;这个是什么意思我也不清楚,大概是恢复到idle动作的时间
下个重要的数据KickBack
![](https://imgsa.baidu.com/forum/w%3D580/sign=1b6e685545fbfbeddc59367748f1f78e/e46d9de736d12f2ef8f9570a41c2d5628435685a.jpg)
四个KickBack分别对应weapons.ini的KickBackWalking
KickBackNotOnGround
KickBackDucking
KickBack
照着M14的把AK47的改了即可
改后
图太长见附件wpn_m14ebr.cpp
倒回来看PrimaryAttack
flSpread这个计算由三个部分组成(对应weapon.ini )Spread + AccuracyMul *m_flAccuracy
参照M14的写法
改后
![](https://imgsa.baidu.com/forum/w%3D580/sign=26dd6742992bd40742c7d3f54b889e9c/32b59082b2b7d0a2230dfdf7c5ef76094a369a12.jpg)