000
18.10.2002, 17:14
Exec
|
moin moin
so, hab mal vor ner zeit ne mp5 mit laser gemacht (auf glock basis)
#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
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.
|