|
moin moin
also ich hab mal nen sporelauncher gemacht (gefunden)! so der geht 1a nur man kann den scheisser nich im hud auswählen .... weis jemand wo der fehler liegt?!
hier der code:
#if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD )
#include "extdll.h" #include "util.h" #include "cbase.h" #include "monsters.h" #include "weapons.h" #include "nodes.h" #include "player.h" #include "decals.h" #include "gamerules.h"
class CAlienSpit : public CBaseEntity { void Spawn( void ); void Precache( void ); int Classify ( void ); void EXPORT BoltTouch( CBaseEntity *pOther ); int expl; bool explodeoncontact; void EXPORT Explode(void); edict_t *ownersave; bool ownersaved; //CBeam *Trail; int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ); public: EHANDLE m_hOwner; static CAlienSpit *Fire( bool explodeoncontact ); void init(void); }; LINK_ENTITY_TO_CLASS( alien_spit, CAlienSpit ); int CAlienSpit::TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ){ pev->takedamage = DAMAGE_NO; if(!ownersaved) ownersave=pev->owner; Explode(); return false; } CAlienSpit *CAlienSpit::Fire( bool explode ) { // Create a new entity with CAlienSpit private data CAlienSpit *pBolt = GetClassPtr( (CAlienSpit *)NULL ); pBolt->pev->classname = MAKE_STRING("alien_spit"); pBolt->Spawn(); pBolt->explodeoncontact=explode; pBolt->ownersaved=false; return pBolt; }
void CAlienSpit::Spawn( ) { Precache( ); pev->movetype=MOVETYPE_TOSS; pev->solid = SOLID_BBOX; //pev->solid = SOLID_NOT; pev->gravity = 0.3; SET_MODEL(ENT(pev), "models/spore.mdl"); // pev->rendermode = kRenderGlow; // pev->renderfx = kRenderFxNoDissipation; pev->renderamt = 255; UTIL_SetOrigin( pev, pev->origin ); UTIL_SetSize( pev, Vector( -4, -4, -4 ), Vector( 4, 4, 4 ) ); SetTouch( BoltTouch ); if ( pev->owner ) ownersave=pev->owner; } void CAlienSpit::init( ){ ownersave=pev->owner; ownersaved=true; }
void CAlienSpit::Precache( ) { PRECACHE_SOUND("weapons/xbow_hitbod1.wav"); PRECACHE_SOUND("weapons/xbow_hitbod2.wav"); PRECACHE_SOUND("weapons/xbow_fly1.wav"); PRECACHE_SOUND("bullchicken/bc_spithit1.wav"); PRECACHE_SOUND("bullchicken/bc_spithit2.wav"); PRECACHE_MODEL( "models/spore.mdl" ); expl=PRECACHE_MODEL( "sprites/sporeexp.spr" ); }
int CAlienSpit :: Classify ( void ) { return CLASS_NONE; }
void CAlienSpit::BoltTouch( CBaseEntity *pOther ) { if(explodeoncontact||(pOther->IsPlayer())) { if(!ownersaved) ownersave=pev->owner; Explode(); } else{ if(ownersaved) pev->owner=NULL; pev->velocity=Vector(0,0,0); SetThink(Explode); pev->nextthink=gpGlobals->time+10; return; } } void CAlienSpit::Explode( void){ SetTouch( NULL ); SetThink( NULL ); EMIT_SOUND(ENT(pev), CHAN_WEAPON, "bullchicken/bc_spithit2.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM); entvars_t *pevOwner=VARS(ownersave); pev->owner = NULL; ::RadiusDamage( pev->origin, pev,pevOwner,120, 120, CLASS_NONE, DMG_ENERGYBEAM | DMG_ACID | DMG_ALWAYSGIB ); pev->owner=ownersave; Vector vecSpot = pev->origin + Vector ( 0 , 0 , 8 ); TraceResult tr; UTIL_TraceLine ( vecSpot, vecSpot + pev->velocity*40, ignore_monsters, ENT(pev), & tr); UTIL_DecalTrace(&tr , DECAL_MOMMASPLAT ); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_EXPLOSION ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( expl ); WRITE_BYTE( 30 * 0.80 ); // scale * 10 WRITE_BYTE( 12 ); // framerate WRITE_BYTE(TE_EXPLFLAG_NOSOUND); MESSAGE_END(); SetThink( SUB_Remove ); Killed(pev,GIB_NEVER); }
enum slauncher_e {
SGUN_IDLE1 = 0,//2000 SGUN_FIDGET ,//4000 SGUN_RELOAD1,//666reach SGUN_RELOAD2,//1000feed SGUN_RELOAD3,//833aim SGUN_FIRE,//500 SGUN_HOLSTER,//1000 SGUN_DRAW,//1000 SGUN_IDLE2 };
class CAlienCannon : public CBasePlayerWeapon { public: void Spawn( void ); void Precache( void ); int iItemSlot( void ) { return 1; } int GetItemInfo(ItemInfo *p); int AddToPlayer( CBasePlayer *pPlayer );
void PrimaryAttack( void ); void SecondaryAttack( void ); BOOL Deploy( void ); BOOL IsUseable( void ); void Holster( void ); void Reload( void ); void WeaponIdle( void ); float m_flNextAnimTime;
float m_flRechargeTime; int m_fInReload; int m_iFirePhase;// don't save me. }; LINK_ENTITY_TO_CLASS( weapon_aliencannon, CAlienCannon );
BOOL CAlienCannon::IsUseable( void ) { return TRUE; }
void CAlienCannon::Spawn( ) { Precache( ); m_iId = WEAPON_ALIENCANNON; SET_MODEL(ENT(pev), "models/w_sgun.mdl"); m_iDefaultAmmo = ALIENCANNON_DEFAULT_GIVE; m_iFirePhase = 0; m_fInReload=0; FallInit();// get ready to fall down. }
void CAlienCannon::Precache( void ) { PRECACHE_MODEL("models/v_sgun.mdl"); PRECACHE_MODEL("models/w_sgun.mdl"); PRECACHE_MODEL("models/p_sgun.mdl"); PRECACHE_SOUND("weapons/splauncher_pet.wav"); PRECACHE_SOUND("bullchicken/bc_attack2.wav"); PRECACHE_SOUND("bullchicken/bc_attack3.wav"); PRECACHE_SOUND("weapons/spore_empty.wav");
UTIL_PrecacheOther("alien_spit"); }
int CAlienCannon::AddToPlayer( CBasePlayer *pPlayer ) { if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) { if ( g_pGameRules->IsMultiplayer() ) { // in multiplayer, all hivehands come full. pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] = 8; }
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); WRITE_BYTE( m_iId ); MESSAGE_END(); return TRUE; } return FALSE; }
int CAlienCannon::GetItemInfo(ItemInfo *p) { p->pszName = STRING(pev->classname); p->pszAmmo1 = "spores"; p->iMaxAmmo1 = ALIENCANNON_MAX_CARRY; p->pszAmmo2 = NULL; p->iMaxAmmo2 = -1; p->iMaxClip = 4; p->iSlot = 0; p->iPosition = 0; p->iId = m_iId = WEAPON_ALIENCANNON; //p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD; p->iFlags=ITEM_FLAG_NOAUTORELOAD; p->iWeight = ALIENCANNON_WEIGHT;
return 1; }
BOOL CAlienCannon::Deploy( ) { m_fInReload=0; return DefaultDeploy( "models/v_sgun.mdl", "models/p_sgun.mdl", SGUN_DRAW, "rpg" ); }
void CAlienCannon::Holster( ) { m_fInReload=0; m_pPlayer->m_flNextAttack = gpGlobals->time + 0.5; // m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); SendWeaponAnim( SGUN_HOLSTER );
}
void CAlienCannon::PrimaryAttack() { if (m_iClip== 0) return; m_fInReload = 0; m_iClip--; m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
SendWeaponAnim( SGUN_FIRE );
// player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
m_flNextPrimaryAttack = gpGlobals->time + 1;
if(RANDOM_LONG(0,1)) EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "bullchicken/bc_attack2.wav", 1.0, ATTN_NORM); else EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "bullchicken/bc_attack3.wav", 1.0, ATTN_NORM);
CAlienSpit *pBFG = CAlienSpit::Fire(true); Vector vecSrc = m_pPlayer->GetGunPosition( ); pBFG->pev->origin = vecSrc; pBFG->pev->owner = m_pPlayer->edict(); UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); pBFG->pev->velocity = gpGlobals->v_forward * 700; pBFG->pev->angles = UTIL_VecToAngles( pBFG->pev->velocity ); m_pPlayer->m_flNextAttack = gpGlobals->time + 1; m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); if(m_iClip==0) Reload(); } void CAlienCannon::SecondaryAttack(void){ if (m_iClip== 0) return; m_fInReload = 0; m_iClip--; m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
SendWeaponAnim( SGUN_FIRE );
// player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
m_flNextPrimaryAttack = gpGlobals->time + 1;
if(RANDOM_LONG(0,1)) EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "bullchicken/bc_attack2.wav", 1.0, ATTN_NORM); else EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "bullchicken/bc_attack3.wav", 1.0, ATTN_NORM);
CAlienSpit *pBFG = CAlienSpit::Fire(false); Vector vecSrc = m_pPlayer->GetGunPosition( ); pBFG->pev->origin = vecSrc; pBFG->pev->owner= m_pPlayer->edict(); pBFG->init(); UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); pBFG->pev->velocity = gpGlobals->v_forward * 700; pBFG->pev->angles = UTIL_VecToAngles( pBFG->pev->velocity ); pBFG->pev->takedamage = DAMAGE_YES; m_pPlayer->m_flNextAttack = gpGlobals->time + 0.6; m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); if(m_iClip==0) Reload(); }
void CAlienCannon::Reload( void ) { if(m_iClip==4) return; if(m_fInReload!=0) return; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ==0){ if(m_iClip==0) RetireWeapon(); return; } m_fInReload=1; SendWeaponAnim( SGUN_RELOAD1 ); m_flTimeWeaponIdle = gpGlobals->time + 0.666; }
void CAlienCannon::WeaponIdle( void ) { if (m_flTimeWeaponIdle > gpGlobals->time) return; if(m_fInReload==1){ if(m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]==0) {m_fInReload=0; return;} m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] --; m_iClip++; if(m_iClip>=4) m_fInReload=2; else m_fInReload=1; m_flTimeWeaponIdle = gpGlobals->time + 1; m_flNextPrimaryAttack = gpGlobals->time + 1; SendWeaponAnim(SGUN_RELOAD2); return; } else if(m_fInReload==2){ SendWeaponAnim( SGUN_RELOAD3 ); m_flTimeWeaponIdle = gpGlobals->time + 0.833; m_fInReload=false; m_fInReload=0; return; } else if (m_fInReload==3){ m_fInReload=1; SendWeaponAnim( SGUN_RELOAD1 ); m_flTimeWeaponIdle = gpGlobals->time + 0.666; return; }
int iAnim; float flRand = RANDOM_FLOAT(0, 1); if (flRand <= 0.75) { iAnim = SGUN_IDLE1; m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); } else if (flRand<=0.9) { iAnim = SGUN_IDLE2; m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); } else { iAnim = SGUN_FIDGET; EMIT_SOUND( ENT(pev), CHAN_VOICE,"weapons/splauncher_pet.wav", 1.0, 0.5 ); m_flTimeWeaponIdle = gpGlobals->time + 4; } SendWeaponAnim( iAnim ); }
#endif
thx
--
"selbermachen rockt am meisten :D" - -LeJean-
|