游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9691|回复: 6

嗯......各位cs狂人还不快去看hl2代码?

[复制链接]

16

主题

76

帖子

105

积分

注册会员

Rank: 2

积分
105
发表于 2003-10-5 01:31:00 | 显示全部楼层 |阅读模式
大量这种东西......

//====== Copyright ?1996-2003, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================

#include "cbase.h"
#include "weapon_csbasegun.h"


#if defined( CLIENT_DLL )

        #define CAK47 C_AK47
        #include "c_cs_player.h"

#else

        #include "cs_player.h"

#endif


class CAK47 : public CWeaponCSBaseGun
{
public:
        DECLARE_CLASS( CAK47, CWeaponCSBaseGun );
        DECLARE_NETWORKCLASS();
        DECLARE_PREDICTABLE();
       
        CAK47();

        virtual void Spawn();
        virtual void PrimaryAttack();


private:

        void AK47Fire( float flSpread, float flCycleTime );

        CAK47( const CAK47 & );
};

IMPLEMENT_NETWORKCLASS_ALIASED( AK47, DT_WeaponAK47 )

BEGIN_NETWORK_TABLE( CAK47, DT_WeaponAK47 )
END_NETWORK_TABLE()

BEGIN_PREDICTION_DATA( CAK47 )
END_PREDICTION_DATA()

LINK_ENTITY_TO_CLASS( weapon_ak47, CAK47 );
PRECACHE_WEAPON_REGISTER( weapon_ak47 );

// ---------------------------------------------------------------------------- //
// CAK47 implementation.
// ---------------------------------------------------------------------------- //

CAK47::CAK47()
{
}


void CAK47::Spawn()
{
        CCSBaseGunInfo info;

        info.m_flAccuracyDivisor = 200;
        info.m_flAccuracyOffset = 0.35;
        info.m_flMaxInaccuracy = 1.25;

        info.m_iPenetration = 2;
        info.m_iDamage = 36;
        info.m_flRangeModifier = 0.98;

        info.m_flTimeToIdleAfterFire = 1.9;
        info.m_flIdleInterval = 20;

        CSBaseGunSpawn( &info );
}


void CAK47::AK47Fire( float flSpread, float flCycleTime )
{
        if ( !CSBaseGunFire( flSpread, flCycleTime ) )
                return;

        CCSPlayer *pPlayer = GetPlayerOwner();

        if (pPlayer->GetAbsVelocity().Length2D() > 0 )
                KickBack ( 1.5, 0.45, 0.225, 0.05, 6.5, 2.5, 7 );
        else if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) )
                KickBack ( 2, 1.0, 0.5, 0.35, 9, 6, 5 );
        else if ( FBitSet( pPlayer->GetFlags(), FL_DUCKING ) )
                KickBack ( 0.9, 0.35, 0.15, 0.025, 5.5, 1.5, 9 );
        else
                KickBack ( 1, 0.375, 0.175, 0.0375, 5.75, 1.75, 8 );
}


void CAK47:rimaryAttack()
{
        CCSPlayer *pPlayer = GetPlayerOwner();
        if ( !pPlayer )
                Error( "CAK47::PrimaryAttack - !pPlayer" );

        if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) )
                AK47Fire( 0.04 + (0.4) * m_flAccuracy, 0.0955 );
        else if (pPlayer->GetAbsVelocity().Length2D() > 140)
                AK47Fire( 0.04 + (0.07) * m_flAccuracy, 0.0955 );
        else
                AK47Fire( (0.0275) * m_flAccuracy, 0.0955 );
}

16

主题

76

帖子

105

积分

注册会员

Rank: 2

积分
105
 楼主| 发表于 2003-10-5 01:33:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

void CWeaponCSBase::KickBack( float up_base, float lateral_base, float up_modifier, float lateral_modifier, float up_max, float lateral_max, int direction_change )
{
        CCSPlayer *pPlayer = GetPlayerOwner();

        float flKickUp;
        float flKickLateral;

        if (m_iShotsFired == 1) // This is the first round fired
        {
                flKickUp = up_base;
                flKickLateral = lateral_base;
        }
        else
        {
                flKickUp = up_base + m_iShotsFired*up_modifier;
                flKickLateral = lateral_base + m_iShotsFired*lateral_modifier;
        }


        QAngle angle = pPlayer->GetPunchAngle();

        angle.x -= flKickUp;
        if ( angle.x < -1 * up_max )
                angle.x = -1 * up_max;
       
        if ( m_iDirection == 1 )
        {
                angle.y += flKickLateral;
                if (angle.y > lateral_max)
                        angle.y = lateral_max;
        }
        else
        {
                angle.y -= flKickLateral;
                if ( angle.y < -1 * lateral_max )
                        angle.y = -1 * lateral_max;
        }

        if ( !SHARED_RANDOMINT( 0, direction_change ) )
                m_iDirection = 1 - m_iDirection;

        pPlayer->SetPunchAngle( angle );
}

16

主题

76

帖子

105

积分

注册会员

Rank: 2

积分
105
 楼主| 发表于 2003-10-5 01:36:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

bool CWeaponCSBaseGun::CSBaseGunFire( float flSpread, float flCycleTime )
{
        CCSPlayer *pPlayer = GetPlayerOwner();

        m_bDelayFire = true;
        m_iShotsFired++;
       
        // These modifications feed back into flSpread eventually.
        if ( m_GunInfo.m_flAccuracyDivisor != -1 )
        {
                m_flAccuracy = ((m_iShotsFired * m_iShotsFired * m_iShotsFired) / m_GunInfo.m_flAccuracyDivisor) + m_GunInfo.m_flAccuracyOffset;
                if (m_flAccuracy > m_GunInfo.m_flMaxInaccuracy)
                        m_flAccuracy = m_GunInfo.m_flMaxInaccuracy;
        }

        // Out of ammo?
        if ( m_iClip1 <= 0 )
        {
                if (m_bFireOnEmpty)
                {
                        PlayEmptySound();
                        m_flNextPrimaryAttack = gpGlobals->curtime + 0.2;
                }

                return false;
        }

        m_iClip1--;

        // player "shoot" animation
        pPlayer->SetAnimation( PLAYER_ATTACK1 );

        Vector vecDir = pPlayer->FireBullets3(
                pPlayer->Weapon_ShootPosition(),
                pPlayer->EyeAngles() + pPlayer->GetPunchAngle(),
                flSpread,
                8192,
                m_GunInfo.m_iPenetration,
                GetPrimaryAmmoType(),
                m_GunInfo.m_iDamage,
                GetRangeModifier(),
                pPlayer );

        DoFireEffects();

        m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->curtime + flCycleTime;

        if (!m_iClip1 && pPlayer->GetAmmoCount( m_iPrimaryAmmoType ) <= 0)
        {
                // HEV suit - indicate out of ammo condition
                pPlayer->SetSuitUpdate("!HEV_AMO0", false, 0);
        }

        m_flTimeWeaponIdle = gpGlobals->curtime + m_GunInfo.m_flTimeToIdleAfterFire;
        return true;
}

40

主题

211

帖子

225

积分

中级会员

Rank: 3Rank: 3

积分
225
发表于 2003-10-5 02:30:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

没明白什么意思!!!!

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2003-10-5 06:14:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

在哪个文件夹里?

4

主题

26

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2003-10-5 10:00:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

src_main\game_shared\cstrike
的下面就可以看见weapon_ak47.cpp这样的文件了!

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2003-10-5 10:45:00 | 显示全部楼层

Re:嗯......各位cs狂人还不快去看hl2代码?

这段代码怎么有点像 MFC 风格?



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 12:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表