Added support for the 'message' key in triggers.
This commit is contained in:
parent
d25aead1a7
commit
e79a03b5b8
8 changed files with 75 additions and 31 deletions
|
@ -26,6 +26,7 @@ class CBaseTrigger : CBaseEntity
|
|||
string m_strMessage;
|
||||
string m_strMaster;
|
||||
int m_iUseType;
|
||||
int m_iTeam;
|
||||
|
||||
void() CBaseTrigger;
|
||||
virtual void() Trigger;
|
||||
|
@ -48,6 +49,10 @@ void CBaseTrigger :: UseTargets ( void )
|
|||
trigger.Trigger();
|
||||
}
|
||||
|
||||
if (m_strMessage && eActivator.flags & FL_CLIENT) {
|
||||
centerprint(eActivator, m_strMessage);
|
||||
}
|
||||
|
||||
if ( m_strKillTarget ) {
|
||||
entity eKill = find( world, CBaseTrigger::m_strTargetName, m_strKillTarget );
|
||||
if ( eKill ) {
|
||||
|
@ -83,6 +88,7 @@ int CBaseTrigger :: GetMaster ( void )
|
|||
void CBaseTrigger :: UseTargets_Delay ( float fDelay )
|
||||
{
|
||||
static void Entities_UseTargets_Delay_Think( void ) {
|
||||
eActivator = self.owner;
|
||||
CBaseTrigger::UseTargets();
|
||||
remove( self );
|
||||
}
|
||||
|
@ -92,7 +98,7 @@ void CBaseTrigger :: UseTargets_Delay ( float fDelay )
|
|||
#endif
|
||||
|
||||
CBaseTrigger eTimer = spawn( CBaseTrigger );
|
||||
eTimer.owner = self;
|
||||
eTimer.owner = eActivator;
|
||||
eTimer.think = Entities_UseTargets_Delay_Think;
|
||||
eTimer.m_strTarget = m_strTarget;
|
||||
eTimer.nextthink = time + fDelay;
|
||||
|
@ -126,6 +132,9 @@ void CBaseTrigger :: InitBrushTrigger ( void )
|
|||
|
||||
void CBaseTrigger :: CBaseTrigger ( void )
|
||||
{
|
||||
CBaseEntity::CBaseEntity();
|
||||
m_strMessage = "";
|
||||
|
||||
for ( int i = 1; i < ( tokenize( __fullspawndata ) - 1 ); i += 2 ) {
|
||||
switch ( argv( i ) ) {
|
||||
case "killtarget":
|
||||
|
@ -137,9 +146,11 @@ void CBaseTrigger :: CBaseTrigger ( void )
|
|||
case "master":
|
||||
m_strMaster = argv(i+1);
|
||||
break;
|
||||
case "team_no":
|
||||
m_iTeam = stoi(argv(i+1));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
CBaseEntity::CBaseEntity();
|
||||
}
|
||||
|
|
|
@ -246,6 +246,7 @@ void func_button::Trigger(void)
|
|||
void func_button::Touch(void)
|
||||
{
|
||||
if (other.movetype == MOVETYPE_WALK) {
|
||||
eActivator = other;
|
||||
func_button::Trigger();
|
||||
|
||||
if (!(spawnflags & SF_BTT_TOUCH_ONLY)) {
|
||||
|
|
|
@ -64,6 +64,7 @@ class func_door:CBaseTrigger
|
|||
virtual void() Precache;
|
||||
virtual void() Arrived;
|
||||
virtual void() Returned;
|
||||
virtual void() Respawn;
|
||||
virtual void() Trigger;
|
||||
virtual void() Blocked;
|
||||
virtual void() Touch;
|
||||
|
@ -222,6 +223,7 @@ void func_door::Touch(void)
|
|||
|
||||
if (other.movetype == MOVETYPE_WALK) {
|
||||
if (other.absmin[2] <= maxs[2] - 2) {
|
||||
eActivator = other;
|
||||
Trigger();
|
||||
}
|
||||
}
|
||||
|
@ -299,17 +301,25 @@ void func_door::MoveToDestination(vector vDestination, void() func)
|
|||
|
||||
void func_door::Respawn(void)
|
||||
{
|
||||
func_door::SetMovementDirection();
|
||||
/* reset */
|
||||
origin = m_oldOrigin;
|
||||
angles = m_oldAngle;
|
||||
m_vecPos1 = [0,0,0];
|
||||
m_vecPos2 = [0,0,0];
|
||||
m_vecDest = [0,0,0];
|
||||
m_vecMoveDir = [0,0,0];
|
||||
|
||||
solid = SOLID_BSP;
|
||||
movetype = MOVETYPE_PUSH;
|
||||
setorigin(this, m_oldOrigin);
|
||||
setmodel(this, m_oldModel);
|
||||
think = __NULL__;
|
||||
nextthink = -1;
|
||||
m_pMove = 0;
|
||||
/* angles to vecMoveDir */
|
||||
SetMovementDirection();
|
||||
|
||||
blocked = Blocked;
|
||||
solid = SOLID_BSP;
|
||||
movetype = MOVETYPE_PUSH;
|
||||
setmodel(this, model);
|
||||
setorigin(this, origin);
|
||||
think = __NULL__;
|
||||
nextthink = 0;
|
||||
m_pMove = 0;
|
||||
|
||||
if (m_flWait == -1) {
|
||||
spawnflags |= SF_MOV_TOGGLE;
|
||||
|
@ -340,10 +350,17 @@ void func_door::Respawn(void)
|
|||
m_vecPos2 = m_vecPos1;
|
||||
m_vecPos1 = origin;
|
||||
}
|
||||
|
||||
if (m_strTargetName) {
|
||||
m_iLocked = TRUE;
|
||||
}
|
||||
angles = [0,0,0];
|
||||
}
|
||||
|
||||
void func_door::func_door(void)
|
||||
{
|
||||
CBaseTrigger::CBaseTrigger();
|
||||
|
||||
for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) {
|
||||
switch (argv(i)) {
|
||||
case "speed":
|
||||
|
@ -375,15 +392,8 @@ void func_door::func_door(void)
|
|||
}
|
||||
}
|
||||
|
||||
CBaseTrigger::CBaseTrigger();
|
||||
func_door::Precache();
|
||||
func_door::Respawn();
|
||||
|
||||
angles = [0,0,0];
|
||||
|
||||
if (m_strTargetName) {
|
||||
m_iLocked = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void func_water(void)
|
||||
|
|
|
@ -77,6 +77,7 @@ class func_train:CBaseTrigger
|
|||
float m_flDamage;
|
||||
string m_strMoveSnd;
|
||||
string m_strStopSnd;
|
||||
string m_strOldTarget; /* specific to trains? */
|
||||
|
||||
void() func_train;
|
||||
virtual void() NextPath;
|
||||
|
@ -118,8 +119,8 @@ func_train::GoToTarget(void)
|
|||
return;
|
||||
}
|
||||
|
||||
vecWorldPos[0] = absmin[0] + (0.5 * (absmax[0] - absmin[0]));
|
||||
vecWorldPos[1] = absmin[1] + (0.5 * (absmax[1] - absmin[1]));
|
||||
vecWorldPos[0] = absmin[0] + (0.5 * (absmax[0] - absmin[0]));
|
||||
vecWorldPos[1] = absmin[1] + (0.5 * (absmax[1] - absmin[1]));
|
||||
vecWorldPos[2] = absmin[2] + (0.5 * (absmax[2] - absmin[2]));
|
||||
|
||||
vecVelocity = (eNode.origin - vecWorldPos);
|
||||
|
@ -206,6 +207,7 @@ func_train::Respawn(void)
|
|||
|
||||
/* let's wait 1/4 a second to give the path_corner entities a chance to
|
||||
* spawn in case they're after us in the ent lump */
|
||||
m_strTarget = m_strOldTarget;
|
||||
think = NextPath;
|
||||
nextthink = ltime + 0.25f;
|
||||
}
|
||||
|
@ -216,6 +218,9 @@ func_train::func_train(void)
|
|||
int a;
|
||||
for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) {
|
||||
switch (argv(i)) {
|
||||
case "target":
|
||||
m_strOldTarget = argv(i+1);
|
||||
break;
|
||||
case "dmg":
|
||||
m_flDamage = stof(argv(i+1));
|
||||
break;
|
||||
|
|
|
@ -40,7 +40,8 @@ activates it.
|
|||
class trigger_hurt:CBaseTrigger
|
||||
{
|
||||
float m_flNextTrigger;
|
||||
int m_iDamage;
|
||||
float m_flNextDmg;
|
||||
int m_iDamage;
|
||||
float m_flDelay;
|
||||
void() trigger_hurt;
|
||||
|
||||
|
@ -78,20 +79,24 @@ void trigger_hurt::Touch(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_HURT_FIREONPLAYER) {
|
||||
if (other.flags & FL_CLIENT) {
|
||||
if (m_strTarget) {
|
||||
if (spawnflags & SF_HURT_FIREONPLAYER) {
|
||||
if (other.flags & FL_CLIENT) {
|
||||
eActivator = other;
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
eActivator = other;
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets();
|
||||
}
|
||||
}
|
||||
|
||||
Damage_Apply(other, this, m_iDamage, 0, DMG_GENERIC);
|
||||
|
@ -101,7 +106,7 @@ void trigger_hurt::Touch(void)
|
|||
Trigger();
|
||||
}
|
||||
|
||||
m_flNextTrigger = time + 0.5;
|
||||
m_flNextTrigger = time + m_flNextDmg;
|
||||
}
|
||||
|
||||
void trigger_hurt::Respawn(void)
|
||||
|
@ -110,7 +115,9 @@ void trigger_hurt::Respawn(void)
|
|||
alpha = 0.5f;
|
||||
#endif
|
||||
|
||||
m_flNextTrigger = 0;
|
||||
/* reset */
|
||||
m_flNextDmg = 0.5f;
|
||||
m_flNextTrigger = 0.0f;
|
||||
|
||||
if (spawnflags & SF_HURT_OFF) {
|
||||
solid = SOLID_NOT;
|
||||
|
@ -129,6 +136,7 @@ void trigger_hurt::trigger_hurt(void)
|
|||
m_iDamage = stoi(argv(i+1));
|
||||
break;
|
||||
case "wait":
|
||||
m_flNextDmg = stof(argv(i+1));
|
||||
case "delay":
|
||||
m_flDelay = stof(argv(i+1));
|
||||
break;
|
||||
|
|
|
@ -46,7 +46,13 @@ class trigger_multiple:CBaseTrigger
|
|||
void trigger_multiple::touch(void)
|
||||
{
|
||||
eActivator = other;
|
||||
|
||||
|
||||
if (Rules_IsTeamPlay() == TRUE) {
|
||||
if (m_iTeam > 0 && eActivator.team != m_iTeam + 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (other.movetype != MOVETYPE_WALK) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,8 @@ void trigger_push::Trigger(void)
|
|||
|
||||
void trigger_push::touch(void)
|
||||
{
|
||||
eActivator = other;
|
||||
|
||||
switch(other.movetype) {
|
||||
case MOVETYPE_NONE:
|
||||
case MOVETYPE_PUSH:
|
||||
|
|
|
@ -33,6 +33,7 @@ class trigger_teleport:CBaseTrigger
|
|||
void trigger_teleport::touch(void)
|
||||
{
|
||||
if (other.health > 0 || other.solid == SOLID_SLIDEBOX) {
|
||||
eActivator = other;
|
||||
entity eTarget = find(world, CBaseTrigger::m_strTargetName, m_strTarget);
|
||||
|
||||
if (eTarget) {
|
||||
|
|
Loading…
Reference in a new issue