008
11.11.2001, 12:52
[GeF]Duke
|
#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 "gamerules.h" #include "hornet.h" #include "beamshot.h" #include "turret.h" #include "effects.h" #include "customentity.h" LINK_ENTITY_TO_CLASS( monster_turret, CTurret ); LINK_ENTITY_TO_CLASS( monster_turretbase, CTurretBase ); #define EGON_BEAM_SPRITE "sprites/xbeam1.spr" void CTurretBase::Spawn( void ) {
Precache( ); SET_MODEL(ENT(pev), "models/base.mdl"); pev->skin=2; pev->movetype = MOVETYPE_TOSS; pev->solid = SOLID_BBOX; UTIL_SetOrigin( pev, pev->origin ); UTIL_SetSize(pev, Vector(-16, -16, 0), Vector(16, 16, 16)); if (DROP_TO_FLOOR(ENT(pev)) == 0) { ALERT(at_error, "Item %s ist aus dem Level gefallen genau hier: %f,%f,%f", STRING( pev->classname ), pev->origin.x, pev->origin.y, pev->origin.z); UTIL_Remove( this ); return; } pev->spawnflags |= SF_NORESPAWN; } void CTurretBase::Precache( void ) { PRECACHE_MODEL ("models/base.mdl"); } void CTurret::SetBase(CBaseEntity *base) { Base=base; }
int CTurret :: Classify ( void ) {
if ( pev->owner && pev->owner->v.flags & FL_CLIENT) { return CLASS_PLAYER_BIOWEAPON; }
return CLASS_ALIEN_BIOWEAPON; } int CTurret::IRelationship ( CBaseEntity *pTarget ) { if ( pTarget->pev->modelindex == pev->modelindex ) { return R_NO; } if(!FNullEnt(m_pRealOwner)) if (pTarget==CBaseEntity::Instance(m_pRealOwner )) return R_NO;
return CBaseMonster :: IRelationship( pTarget ); } void CTurret::Upgrade(){ char text[50]; if(level==6) { sprintf( text, "Du kannst nich weiter upgraden"); if(!FNullEnt(m_pRealOwner)){ CBasePlayer *ownerplayer=(CBasePlayer*) CBaseEntity::Instance(m_pRealOwner ); ClientPrint(ownerplayer->pev, HUD_PRINTCENTER,text); pev->health=300; return; } } level++; sprintf( text, "Sentry wurde zum Level %d upgradet",level); if(!FNullEnt(m_pRealOwner)){ CBasePlayer *ownerplayer=(CBasePlayer*) CBaseEntity::Instance(m_pRealOwner ); ClientPrint(ownerplayer->pev, HUD_PRINTCENTER,text); }
switch(level){ case 2: SET_MODEL(ENT(pev), "models/sentry2.mdl"); maxhealth=200; break; case 3: SET_MODEL(ENT(pev), "models/sentry3.mdl"); maxhealth=300; break; case 4: SET_MODEL(ENT(pev), "models/sentry1.mdl"); maxhealth=300; break; case 5: SET_MODEL(ENT(pev), "models/sentry2.mdl"); maxhealth=300; break; case 6: SET_MODEL(ENT(pev), "models/sentry3.mdl"); maxhealth=300; break; } pev->solid = SOLID_BBOX; UTIL_SetSize(pev, Vector( -24, -24, 0), Vector(24, 24, 24)); UTIL_SetOrigin( pev, pev->origin ); EMIT_SOUND( ENT(pev), CHAN_VOICE, "weapons/turrset.wav", 1.0, 0.4 ); } void CTurret::Fix() { pev->health+=1000; if(pev->health>maxhealth) pev->health=maxhealth; pev->renderamt = 255; pev->renderfx=kRenderFxGlowShell; pev->rendercolor=Vector(0,0,255); pev->nextthink=gpGlobals->time+0.2; EMIT_SOUND( ENT(pev), CHAN_VOICE, "weapons/turrset.wav", 1.0, 0.4 );
} void CTurret::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { if (!pActivator) return; if ( !pActivator->IsPlayer() ) return; if(!FNullEnt(m_pRealOwner) ) if (pActivator!=CBaseEntity::Instance(m_pRealOwner )) return; CBasePlayer* player=(CBasePlayer*)pActivator; char text[50]; sprintf( text, "Sentry Level %d Health %d \n", level,(int)pev->health ); ClientPrint(player->pev, HUD_PRINTCENTER, text); pev->angles=pActivator->pev->angles; pev->angles.x=0; pev->angles.y=(float) ((int) (pev->angles.y+360)%360); rotatecounter=22; } void CTurret :: Spawn( void ) { Precache( ); enemyvelocity=Vector(0,0,0); pev->movetype = MOVETYPE_FLY; pev->solid = SOLID_NOT;
pev->takedamage = DAMAGE_AIM; pev->flags |= FL_MONSTER; pev->gravity=1; SET_MODEL(ENT(pev), "models/sentry1.mdl"); pev->frame = 0; pev->body = 3; pev->dmg=50; pev->framerate = 0; UTIL_SetSize(pev, Vector( -24, -24, 0), Vector(24, 24, 24)); UTIL_SetOrigin( pev, pev->origin ); pev->controller[1]=(byte)128; m_flFieldOfView = 0.5; pev->flags |= FL_MONSTER; pev->nextthink = gpGlobals->time + 2; SetThink( BeepThink ); SetTouch(NULL); maxhealth=pev->health = 1000; m_bloodColor = DONT_BLEED; pev->sequence = 0; ResetSequenceInfo( ); rotatecounter=22; attackedcounter=0; level=6; EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/turrmake.wav", 1.0, ATTN_NORM); } void CTurret :: Precache( void ) { PRECACHE_SOUND("weapons/railgf1a.wav"); PRECACHE_MODEL("models/sentry1.mdl"); PRECACHE_MODEL("models/sentry2.mdl"); PRECACHE_MODEL("models/sentry3.mdl"); PRECACHE_SOUND("weapons/turrset.wav"); PRECACHE_SOUND("weapons/turridle.wav"); PRECACHE_SOUND("weapons/turrspot.wav"); PRECACHE_SOUND("weapons/turrmake.wav"); PRECACHE_SOUND ("weapons/pl_gun3.wav"); PRECACHE_SOUND ("hassault/hw_shoot3.wav"); PRECACHE_SOUND("weapons/electro4.wav"); PRECACHE_SOUND("weapons/rocketfire1.wav"); m_iBeam = PRECACHE_MODEL( "sprites/smoke.spr" ); PRECACHE_MODEL( EGON_BEAM_SPRITE );
}
void CTurret::BeepThink(void) { UpdateTrail(); if (pev->owner != NULL) { if((pev->origin-VARS(pev->owner)->origin).Length()>100) { EMIT_SOUND( ENT(pev), CHAN_VOICE, "weapons/turrset.wav", 1.0, 0.4 ); m_pRealOwner = pev->owner; pev->solid=SOLID_BBOX; char text[50]; sprintf( text, "%s hat eine Sentry Gun aufgebaut\n", STRING(VARS(pev->owner)->netname )); UTIL_ClientPrintAll( HUD_PRINTNOTIFY, text); pev->owner=NULL; } pev->nextthink=gpGlobals->time+0.5; return; } CBaseEntity *pEntity=NULL; prev_health=(int) pev->health; TraceResult tr; Vector vecSrc; if(level<4) pev->renderfx=0; else { pev->renderamt = 50; pev->renderfx=kRenderFxGlowShell; pev->rendercolor=Vector(0,0,255); } pev->owner=NULL; StudioFrameAdvance( ); rotatecounter++; if(attackedcounter) { attackedcounter--; pev->avelocity.y=-40; } else if (m_hEnemy == NULL || !m_hEnemy->IsAlive()){ if(rotatecounter<45) pev->avelocity.y=-20; else pev->avelocity.y=20; pev->controller[1]=(byte)128; }
rotatecounter; rotatecounter%=90; Vector fireangles; if(rotatecounter%5==0){ if (m_hEnemy == NULL || !m_hEnemy->IsAlive()){ Look( 1024 ); m_hEnemy = BestVisibleEnemy( ); if (m_hEnemy != NULL){ EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/turrspot.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); attackedcounter=0;} else if(rotatecounter%45==0) EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/turridle.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); } } if (m_hEnemy != NULL) if (!FVisible( m_hEnemy )) m_hEnemy=NULL; if ((m_hEnemy != NULL)&&(rotatecounter%2)) if (FVisible( m_hEnemy )){ Vector vecDir=m_hEnemy->EyePosition()-(pev->origin+Vector(0,0,16)); if(level==6){ vecDir=vecDir.Length()/600 * m_hEnemy->pev->velocity + vecDir; } fireangles= vecDir.Normalize(); Vector destangles=UTIL_VecToAngles(fireangles); int fangle=((int) fireangles.z)+128; if(fangle>256) fangle=256; else if (fangle<0) fangle=0; pev->controller[1]=fangle; pev->controller[2]=fangle; pev->angles=destangles; pev->angles.x=-pev->angles.x; UTIL_MakeVectors(pev->angles); pev->angles.x=0; switch(level){ case 1: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/pl_gun3.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); FireBullets( 1, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, gpGlobals->v_forward , VECTOR_CONE_10DEGREES, 8192, BULLET_PLAYER_9MM, 2 ,8,VARS(m_pRealOwner )); break; case 2: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hassault/hw_shoot3.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); FireBullets( 3, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, gpGlobals->v_forward , VECTOR_CONE_10DEGREES, 8192, BULLET_PLAYER_9MM, 2 ,8,VARS(m_pRealOwner )); break; case 3: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hassault/hw_shoot3.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); FireBullets( 3, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, gpGlobals->v_forward , VECTOR_CONE_10DEGREES, 8192, BULLET_PLAYER_9MM, 2 ,8,VARS(m_pRealOwner )); rotatecounter++; break; case 4: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/electro4.wav", RANDOM_FLOAT(0.9, 1.0), ATTN_NORM); vecSrc=pev->origin +Vector(0,0,16)+gpGlobals->v_forward * 12; UTIL_TraceLine(pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 1024 , dont_ignore_monsters, ENT(pev), &tr); pEntity = CBaseEntity::Instance(tr.pHit); MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, tr.vecEndPos ); WRITE_BYTE( TE_BEAMPOINTS); WRITE_COORD( vecSrc.x); WRITE_COORD( vecSrc.y); WRITE_COORD( vecSrc.z); WRITE_COORD( tr.vecEndPos.x); WRITE_COORD( tr.vecEndPos.y); WRITE_COORD( tr.vecEndPos.z); WRITE_SHORT( m_iBeam ); WRITE_BYTE( 0 ); WRITE_BYTE( 0 ); WRITE_BYTE( 1 ); WRITE_BYTE( 25 ); WRITE_BYTE( 0 ); WRITE_BYTE( 0 ); WRITE_BYTE( 255 ); WRITE_BYTE( 0 ); WRITE_BYTE( 255 ); WRITE_BYTE( 0 ); MESSAGE_END(); if (pEntity != NULL){ if (pEntity->pev->takedamage) if(!FNullEnt(m_pRealOwner)){ ClearMultiDamage(); pEntity->TraceAttack( VARS(m_pRealOwner ), 20, gpGlobals->v_forward * 12, &tr, DMG_BULLET|DMG_ALWAYSGIB ); ApplyMultiDamage( pev,VARS(m_pRealOwner )); } else {ClearMultiDamage(); pEntity->TraceAttack( pev, 20, gpGlobals->v_forward * 12, &tr, DMG_BULLET|DMG_ALWAYSGIB ); ApplyMultiDamage( pev,pev); } } break; case 5: if(rotatecounter%10==1){ EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/railgf1a.wav", 1.0, 0.4); vecSrc=pev->origin +Vector(0,0,16)+gpGlobals->v_forward * 12; UTIL_TraceLine(pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 8192 , dont_ignore_monsters, ENT(pev), &tr); pEntity = CBaseEntity::Instance(tr.pHit); CreateTrail(pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 12, tr.vecEndPos); if (pEntity != NULL){ if (pEntity->pev->takedamage) if(!FNullEnt(m_pRealOwner)){ ClearMultiDamage(); pEntity->TraceAttack( VARS(m_pRealOwner ), 100, gpGlobals->v_forward * 12, &tr, DMG_BULLET|DMG_ALWAYSGIB ); ApplyMultiDamage( pev,VARS(m_pRealOwner )); } else { ClearMultiDamage(); pEntity->TraceAttack( pev, 100, gpGlobals->v_forward * 12, &tr, DMG_BULLET|DMG_ALWAYSGIB ); ApplyMultiDamage( pev,pev); } } break; case 6: if(rotatecounter%3==0){ CGrenade *pGrenade = GetClassPtr( (CGrenade *)NULL ); pGrenade->Spawn(); pGrenade->pev->movetype=MOVETYPE_FLY; UTIL_SetOrigin( pGrenade->pev, pev->origin +Vector(0,0,16)+ gpGlobals->v_forward * 36); pGrenade->pev->velocity = gpGlobals->v_forward * 600; pGrenade->pev->angles = UTIL_VecToAngles (pGrenade->pev->velocity); if(!FNullEnt(m_pRealOwner)) pGrenade->pev->owner =m_pRealOwner; else pGrenade->pev->owner = ENT(pev); pGrenade->SetTouch( CGrenade::ExplodeTouch ); pGrenade->pev->dmg = 80; EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/rocketfire1.wav", 0.9, 0.6 ); } break; } } } pev->nextthink=gpGlobals->time+0.1; }
void CTurret::CreateTrail(Vector a,Vector b) { current_phase=0; m_pBeam = CBeam::BeamCreate( EGON_BEAM_SPRITE, 40 ); m_pBeam->PointsInit(a,b); m_pBeam->SetFlags( BEAM_FSINE ); m_pBeam->SetColor( 0, 255, 0 ); m_pBeam->LiveForTime(1); m_pBeam->pev->spawnflags |= SF_BEAM_TEMPORARY; m_inBeam = CBeam::BeamCreate( EGON_BEAM_SPRITE, 40 ); m_inBeam->PointsInit(a,b); m_inBeam->SetFlags( BEAM_FSINE ); m_inBeam->SetColor( 255, 0, 0 ); m_inBeam->pev->spawnflags |= SF_BEAM_TEMPORARY; m_inBeam->LiveForTime(1); UpdateTrail(); } void CTurret::UpdateTrail() { if(m_pBeam==NULL) return; m_pBeam->SetNoise( 10+current_phase * 2 ); m_pBeam->SetBrightness( 200 -current_phase*20 ); m_inBeam->SetNoise( 5 +current_phase); m_inBeam->SetBrightness( 200 -current_phase*20 ); current_phase++; if(current_phase==9) DestroyTrail(); } void CTurret::DestroyTrail() { current_phase=0; if ( m_pBeam ){ UTIL_Remove( m_pBeam ); m_pBeam = NULL; } if ( m_inBeam ){ UTIL_Remove( m_inBeam ); m_inBeam = NULL; } } int CTurret :: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ) { if(m_hEnemy == NULL) attackedcounter=90; pev->renderamt = 255; pev->renderfx=kRenderFxGlowShell; pev->rendercolor=Vector(0,255,0); pev->nextthink=gpGlobals->time+0.1; bitsDamageType &= ~ ( DMG_ALWAYSGIB ); bitsDamageType |= DMG_NEVERGIB; return CBaseMonster :: TakeDamage ( pevInflictor, pevAttacker, flDamage, bitsDamageType ); }
void CTurret::Killed( entvars_t *pevAttacker, int iGib ) { if(!FNullEnt(m_pRealOwner)){ CBasePlayer *ownerplayer=(CBasePlayer*) CBaseEntity::Instance(m_pRealOwner ); char text[50]; ownerplayer->m_turret=false; sprintf( text, "Deine Sentrygun ist kaputt"); ClientPrint( ownerplayer->pev, HUD_PRINTCENTER,text); } pev->takedamage = DAMAGE_NO; TraceResult tr; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( 50 * 0.80 ); WRITE_BYTE( 12 ); MESSAGE_END(); UTIL_TraceLine ( pev->origin + m_vecDir * 8, pev->origin - m_vecDir * 64, dont_ignore_monsters, ENT(pev), & tr); UTIL_Remove(Base); SetThink(SUB_Remove); pev->nextthink=gpGlobals->time+0.1; }
Das Problem ist das wenn ich den Turm andrücke ich ihn zwar steuern kann aber nicht schiessen Und das is net so toll
--
llllllll»NewbZ«llllllll
----»HL-Hellsing-Mod «----
Wir suchen noch members ^_^
|