cs的源代码解析

alextooter 2003-11-15 02:34:41
大家都玩cs吗?

今天我谈一谈m4和ak的问题,绝对正确的,不是经验之谈。
哈哈,是cs的源代码(hl2中的)
cs用的是c++语言编写,代码有mfc的风格,很讨厌。


class CWeaponM4A1 : public CWeaponCSBaseGun
那个基类就不管了,m4的基本属性如下
CWeaponM4A1::CWeaponM4A1()
{
m_bSilencerOn = false; //默认的消声器是不上的
}


void CWeaponM4A1::Spawn( )
{
m_flAccuracy = 0.2; //准确度是0.2,我看过,mp5是0.0
m_iShotsFired = 0;
m_bDelayFire = true; //ak没有这个参数,平时我打ak也是很快的

CCSBaseGunInfo info;

info.m_flAccuracyDivisor = 220; //ak值200
info.m_flAccuracyOffset = 0.3; //ak值0.35 info.m_flMaxInaccuracy = 1; //最大错误1,ak是1.25

info.m_iPenetration = 2; //和ak一样的
info.m_iDamage = 33; //ak为36
info.m_flRangeModifier = 0.99; //ak为0.98

info.m_flTimeToIdleAfterFire = 1.5; //ak为1.9,要多等一会,晕
info.m_flIdleInterval = 60; //这项ak为20

CSBaseGunSpawn( &info );
}


bool CWeaponM4A1:eploy()
{
m_flAccuracy = 0.2;
m_iShotsFired = 0;
m_bDelayFire = true;

return BaseClass:eploy(); //没什么好说的
}

void CWeaponM4A1::SecondaryAttack() //这个函数写的是加了消声器的攻击参数
{
if ( m_bSilencerOn )
{
m_bSilencerOn = false;
SendWeaponAnim( ACT_VM_DETACH_SILENCER );
WeaponSound( SPECIAL2 );
}
else
{
m_bSilencerOn = true;
SendWeaponAnim( ACT_VM_ATTACH_SILENCER );
WeaponSound( SPECIAL3 );
}

m_flNextSecondaryAttack = gpGlobals->curtime + 2;
m_flNextPrimaryAttack = gpGlobals->curtime + 2;
m_flTimeWeaponIdle = gpGlobals->curtime + 2.0; //注意,时间都变慢了
}

void CWeaponM4A1::PrimaryAttack() //不加消声器
{
CCSPlayer *pPlayer = GetPlayerOwner();

if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) )
{
M4A1Fire( 0.035 + (0.4) * (m_flAccuracy), 0.0875 );
//第一个参数是准星的扩散速度,狠狠,改!
}
else if (pPlayer->GetAbsVelocity().Length2D() > 140)
{
M4A1Fire( 0.035 + (0.07) * (m_flAccuracy), 0.0875 );
}
else
{
if ( m_bSilencerOn )
M4A1Fire( (0.025) * (m_flAccuracy), 0.0875 );
else
M4A1Fire( (0.02) * (m_flAccuracy), 0.0875 );
}
}


void CWeaponM4A1::M4A1Fire( float flSpread, float flCycleTime )
{
if ( !CSBaseGunFire( flSpread, flCycleTime ) )
return;

CCSPlayer *pPlayer = GetPlayerOwner();
if (pPlayer->GetAbsVelocity().Length2D() > 0)
KickBack (1.0, 0.45, 0.28, 0.045, 3.75, 3, 7);
else if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) )
KickBack (1.2, 0.5, 0.23, 0.15, 5.5, 3.5, 6);
else if ( FBitSet( pPlayer->GetFlags(), FL_DUCKING ) )
KickBack (0.6, 0.3, 0.2, 0.0125, 3.25, 2, 7);
else
KickBack (0.65, 0.35, 0.25, 0.015, 3.5, 2.25, 7);
}


float CWeaponM4A1::GetRangeModifier() const
{
if ( m_bSilencerOn )
return 0.95;
else
return 0.97;
}


void CWeaponM4A1:oFireEffects()
{
if ( m_bSilencerOn )
{
WeaponSound( SPECIAL1 );
}
else
{
m_fEffects |= EF_MUZZLEFLASH;
WeaponSound( SINGLE );
}
}



以后大家讨论游戏也有依据了。

我贴在cs-cn上没人看,呜呜。
...全文
1052 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
何哀何欢 2003-11-18
  • 打赏
  • 举报
回复
大家都没源码,看这么一段有什么用?你应该把源码下在地址方上来
Nownow 2003-11-17
  • 打赏
  • 举报
回复
宏有什么讨厌,是你不习惯而已。

微软的宏写得不好吗?我看你不一定想得出来。

alextooter 2003-11-16
  • 打赏
  • 举报
回复
hl2的代码中大量使用类似mfc的宏,来传递消息,很讨厌。
有人说hl2是ati和微软联合搞nv的一个程序,我看的确如此,shade的程序都是ati的人写的,而一般的程序则是微软人写的,看看多少宏啊,和mfc一样。
当然,我摘的这一段没有什么宏。
sakurar 2003-11-16
  • 打赏
  • 举报
回复
呵呵,与MFC哪有什么关系。
xxh2002 2003-11-16
  • 打赏
  • 举报
回复
谁能讨论一下hl的地图方面的情况吗??
peigen 2003-11-15
  • 打赏
  • 举报
回复
有很多游戏都是c++写的

难道都是mfc???
code2004 2003-11-15
  • 打赏
  • 举报
回复
用什么软件编写呐?
alextooter 2003-11-15
  • 打赏
  • 举报
回复
同样,有人说intel的cpu恢复准星的速度比amd的快,显然也是没有依据的。
我是amd的铁干,呵呵。

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧