4.Deplay
切枪,又看到m_flAccuracy和之前一样写法0.2,都是CBasePlayerWeapon类下的一个变量,不用深究为什么名字就是m_flAccuracy
iShellOn不明(坐等白白解释)

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

四个KickBack分别对应weapons.ini的KickBackWalking
KickBackNotOnGround
KickBackDucking
KickBack
照着M14的把AK47的改了即可
改后
图太长见附件wpn_m14ebr.cpp
倒回来看PrimaryAttack
flSpread这个计算由三个部分组成(对应weapon.ini )Spread + AccuracyMul *m_flAccuracy
参照M14的写法
改后
