Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.10.2002, 17:14
Exec



moin moin

so, hab mal vor ner zeit ne mp5 mit laser gemacht (auf glock basis)

Quellcode:
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "effects.h"
#include "customentity.h"

#define HK94_BEAM_SPRITE        "sprites/laserbeam.spr"

enum hk94_e {
    HK94_LONGIDLE = 0,
    HK94_IDLE1,
    HK94_GRENADE,
    HK94_RELOAD,
    HK94_DEPLOY,
    HK94_SHOOT1,
    HK94_SHOOT2,
    HK94_SHOOT3
};

LINK_ENTITY_TO_CLASS( weapon_hk94, CHk94 );


void CHk94::Spawn( )
{
    pev->classname = MAKE_STRING("weapon_hk94"); // hack to allow for old names
    Precache( );
    m_iId = WEAPON_HK94;
    SET_MODEL(ENT(pev), "models/w_9mmAR.mdl");

    m_iDefaultAmmo = HK94_DEFAULT_GIVE;

    FallInit();// get ready to fall down.

    SetThink( LaserThink );
}


void CHk94::Precache( void )
{
    PRECACHE_MODEL("models/v_hk94.mdl");
    PRECACHE_MODEL("models/w_9mmAR.mdl");
    PRECACHE_MODEL("models/p_9mmAR.mdl");

    PRECACHE_MODEL( HK94_BEAM_SPRITE );

    m_iShell = PRECACHE_MODEL ("models/shell.mdl");// brass shell

    PRECACHE_SOUND("items/9mmclip1.wav");
    PRECACHE_SOUND("items/9mmclip2.wav");

    PRECACHE_SOUND ("weapons/pl_gun1.wav");//silenced handgun
    PRECACHE_SOUND ("weapons/pl_gun2.wav");//silenced handgun
    PRECACHE_SOUND ("weapons/pl_gun3.wav");//handgun
}

int CHk94::GetItemInfo(ItemInfo *p)
{
    p->pszName = STRING(pev->classname);
    p->pszAmmo1 = "9mm";
    p->iMaxAmmo1 = _9MM_MAX_CARRY;
    p->pszAmmo2 = NULL;
    p->iMaxAmmo2 = -1;
    p->iMaxClip = HK94_MAX_CLIP;
    p->iSlot = 0;
    p->iPosition = 2;
    p->iFlags = 0;
    p->iId = m_iId = WEAPON_HK94;
    p->iWeight = HK94_WEIGHT;

    return 1;
}

BOOL CHk94::Deploy( )
{
    Laser = FALSE;
    return DefaultDeploy( "models/v_hk94.mdl", "models/p_9mmAR.mdl", HK94_DEPLOY, "mp5" );

    m_pPlayer->m_flNextAttack = gpGlobals->time + 2.0;
}

void CHk94::Holster( int skiplocal )
{
    m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;
    Laser = FALSE;
}

void CHk94::SecondaryAttack( void )
{
    SendWeaponAnim( HK94_GRENADE );

    if( Laser == TRUE )
    {
        Laser = FALSE;
    }
    else
        Laser = TRUE;
    
    m_flNextSecondaryAttack = gpGlobals->time + 1;
}

void CHk94::PrimaryAttack( void )
{
    if( Laser == TRUE )
    {
        if (!(m_pPlayer->m_afButtonPressed & IN_ATTACK))
            return;
        Hk94Fire( 0.001, 0.5, FALSE );
    }
    else
        Hk94Fire( 0.08, 0.3, FALSE );
}

void CHk94::Hk94Fire( float flSpread , float flCycleTime, BOOL fUseAutoAim )
{
    if (m_iClip <= 0)
    {
        if (m_fFireOnEmpty)
        {
            PlayEmptySound();
            m_flNextPrimaryAttack = gpGlobals->time + 0.2;
        }

        return;
    }

    m_iClip--;

    m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;

    SendWeaponAnim( HK94_SHOOT1 );

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

    UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
        
    Vector    vecShellVelocity = m_pPlayer->pev->velocity
                             + gpGlobals->v_right * RANDOM_FLOAT(50,70)
                             + gpGlobals->v_up * RANDOM_FLOAT(100,150)
                             + gpGlobals->v_forward * 25;
    EjectBrass ( pev->origin + m_pPlayer->pev->view_ofs - gpGlobals->v_up * 6 + gpGlobals->v_forward * 22 + gpGlobals->v_right * 6 , vecShellVelocity, pev->angles.y, m_iShell, TE_BOUNCE_SHELL );

    
    m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
    m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
    EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/pl_gun3.wav", RANDOM_FLOAT(0.92, 1.0), ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));

    Vector vecSrc     = m_pPlayer->GetGunPosition( );
    Vector vecAiming;
    
    if ( fUseAutoAim )
    {
        vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
    }
    else
    {
        vecAiming = gpGlobals->v_forward;
    }

    m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( flSpread, flSpread, flSpread ), 8192, BULLET_PLAYER_9MM, 0, 40, m_pPlayer->pev, m_pPlayer->random_seed );
    m_flNextPrimaryAttack = gpGlobals->time + flCycleTime;
    m_flNextSecondaryAttack = gpGlobals->time + 1;

    if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
        // HEV suit - indicate out of ammo condition
        m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);

    m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 );

    m_pPlayer->pev->punchangle.x -= 3;
}


void CHk94::Reload( void )
{
    int iResult;

    if (m_iClip == 0)
        iResult = DefaultReload( 8, HK94_RELOAD, 3.9 );
    else
        iResult = DefaultReload( 8, HK94_RELOAD, 3.9 );

    if (iResult)
    {
        m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 );
    }
}



void CHk94::WeaponIdle( void )
{
    ResetEmptySound( );

    if (m_flTimeWeaponIdle > gpGlobals->time)
        return;

    SendWeaponAnim( HK94_LONGIDLE );
}


void CHk94::UpdateEffect( const Vector &startPoint, const Vector &endPoint, float timeBlend )
{
    if ( !m_pBeam )
    {
        CreateEffect();
    }

    m_pBeam->SetStartPos( endPoint );
    m_pBeam->SetBrightness( 80 );
    m_pBeam->SetWidth( 5 );
    m_pBeam->SetColor( 200, 0, 0 );
}


void CHk94::CreateEffect( void )
{
    DestroyEffect();


    m_pBeam = CBeam::BeamCreate( HK94_BEAM_SPRITE, 5 );
    m_pBeam->PointEntInit( pev->origin, m_pPlayer->entindex() );
    m_pBeam->SetEndAttachment( 1 );
    m_pBeam->pev->spawnflags |= SF_BEAM_TEMPORARY;    // Flag these to be destroyed on save/restore or level transition
    m_pBeam->SetScrollRate( 100 );
    m_pBeam->SetNoise( 0 );
}


void CHk94::DestroyEffect( void )
{
    if ( m_pBeam )
    {
        UTIL_Remove( m_pBeam );
        m_pBeam = NULL;
    }
}

void CHk94::Fire( const Vector &vecOrigSrc, const Vector &vecDir )
{
    Vector vecDest = vecOrigSrc + vecDir * 2048;
    edict_t        *pentIgnore;
    TraceResult tr;

    pentIgnore = m_pPlayer->edict();
    Vector tmpSrc = vecOrigSrc; //+ gpGlobals->v_up * -8 + gpGlobals->v_right * 3;

    
    UTIL_TraceLine( vecOrigSrc, vecDest, dont_ignore_monsters, pentIgnore, &tr );

    if (tr.fAllSolid)
        return;

    CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);

    if (pEntity == NULL)
        return;


    float timedist = 1;


    UpdateEffect( tmpSrc, tr.vecEndPos, timedist );
}

void CHk94::LaserThink()
{
    UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
    Vector vecAiming = gpGlobals->v_forward;
    Vector vecSrc     = m_pPlayer->GetGunPosition( );

    if( Laser == TRUE )
        Fire( vecSrc, vecAiming );
    else
        DestroyEffect();

    pev->nextthink = gpGlobals->time + 0.01;
}



class CHk94Ammo : public CBasePlayerAmmo
{
    void Spawn( void )
    {
        Precache( );
        SET_MODEL(ENT(pev), "models/ammo_hk94.mdl");
        CBasePlayerAmmo::Spawn( );
    }
    void Precache( void )
    {
        PRECACHE_MODEL ("models/ammo_hk94.mdl");
        PRECACHE_SOUND("items/9mmclip1.wav");
    }
    BOOL AddAmmo( CBaseEntity *pOther )
    {
        if (pOther->GiveAmmo( AMMO_HK94CLIP_GIVE, "9mm", _9MM_MAX_CARRY ) != -1)
        {
            EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
            return TRUE;
        }
        return FALSE;
    }
};
LINK_ENTITY_TO_CLASS( ammo_hk94clip, CHk94Ammo );

und die weapons.h
Quellcode:class CHk94 : public CBasePlayerWeapon
{
public:
    void Spawn( void );
    void Precache( void );
    int iItemSlot( void ) { return 2; }
    int GetItemInfo(ItemInfo *p);

    void PrimaryAttack( void );
    void SecondaryAttack( void );
    void Holster( int skiplocal = 0 );
    void Hk94Fire( float flSpread, float flCycleTime, BOOL fUseAutoAim );

    BOOL Deploy( void );
    void Reload( void );
    void WeaponIdle( void );
    int m_iShell;


    void UpdateEffect( const Vector &startPoint, const Vector &endPoint, float timeBlend );
    void CreateEffect ( void );
    void DestroyEffect ( void );
    void Fire( const Vector &vecOrigSrc, const Vector &vecDir );
    CBeam                *m_pBeam;

    BOOL Laser;

    void EXPORT LaserThink( void );

};

yo, ich weis, da sind noch einige schönheitsfehler drin, aba war halt nur zum testn und es geht :)

so, nun hab ich den code wieder mal vorgeholt, und siehe da, er geht nich O_O
der laser geht einfach nich an, obwohls früher ging und auch noch bei der mod so geht ... liegt es an sohl oder wie jetzt?
beim genauen durchschauen fällt mir auch auf, das ich eigendlich nirgends den laser aufrufe aba er trotzdem kommt ... lol

*e*
oh, code tag vergessen zu schliessen,naja,dann eben jetzt

und nochwas: ich hab echt kein peiler, an was es liegt .... warum gings damals und jetzt nichmehr?!

*e2*
mir is gerade aufgefallen,das ich den laser ja per setthink() aufrufe *kopfklatsch*

so, ich hab den laser nochmal neu gemacht, geht jetzt auch, nur jetzt hab ich nen anderes prob!
wenn ich so druch ne map laufe, geht der laser einfach mal aus ... und erst wieder an, wenn ich wieder zurück hinter die "duchsichtige wand" gehe .. is echt sehr komisch, ich denke, das es was mit der leaf-einteilung zu tun hat, denn an vielen ecken, wo man theoretisch was neues sieht, geht der laser einfach aus, gehe ich wieder zurück,dann geht er wieder ... ich werd hier langsam grummelig

*e3*
was mir noch aufgefallen is, das alles was mitm laser zu tun hat nich auf alerts reagiert .... also ich bekomm keine meldung :\ (jaja, dev is an ..)

--

"selbermachen rockt am meisten :D" - -LeJean-


Dieser Beitrag wurde am 18.10.2002 um 18:18 von Exec bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
25.10.2002, 17:55
the_viking



? hab ka warum das nict funzt. Lad ma das mod hoch. das möcht ich mir ansehn. (Wenns was mit den leafs zu tun hat, biste verloren)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
002
25.10.2002, 18:46
Exec



ne,kann den mod nich mal einfach so hochladen ... lol

also ich habs bis jetzt noch nich rausgefunden ... muss den wohl mal neu machen

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
003
18.11.2002, 21:40
nephil



ich glaub das manche sachen von den verschiedenen sdk-versionen nicht mehr untereinandre kompatibel sind.
das hab ich letztens irgendwo ghört

--

zum Seitenanfang zum Seitenende Profil || Suche
004
21.11.2002, 11:31
}ShadowLord{



Also wenn du sdk 2.0 benutzt, kann ich dir meinen Code geben. Ansonsten nimm den Laser vom RPG, der geht immer ;)

--

if there is a god, i doubt its sanity.

zum Seitenanfang zum Seitenende Profil || Suche