mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2025-04-16 06:22:27 +03:00
Added restart for func_button and trigger_once (Related #55)
This commit is contained in:
parent
89d2bf7b1e
commit
d9e2aee07b
@ -719,7 +719,7 @@ void CBaseButton::TriggerAndWait()
|
|||||||
// Starts the button moving "out/down".
|
// Starts the button moving "out/down".
|
||||||
void CBaseButton::ButtonReturn()
|
void CBaseButton::ButtonReturn()
|
||||||
{
|
{
|
||||||
assert(m_toggle_state == TS_AT_TOP);
|
//assert(m_toggle_state == TS_AT_TOP);
|
||||||
m_toggle_state = TS_GOING_DOWN;
|
m_toggle_state = TS_GOING_DOWN;
|
||||||
|
|
||||||
SetMoveDone(&CBaseButton::ButtonBackHome);
|
SetMoveDone(&CBaseButton::ButtonBackHome);
|
||||||
@ -736,13 +736,36 @@ void CBaseButton::ButtonReturn()
|
|||||||
pev->frame = 0;
|
pev->frame = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
void CBaseButton::Restart()
|
||||||
|
{
|
||||||
|
m_hActivator = NULL;
|
||||||
|
SetMovedir(pev);
|
||||||
|
ButtonReturn();
|
||||||
|
|
||||||
|
if (pev->spawnflags & SF_BUTTON_TOUCH_ONLY)
|
||||||
|
{
|
||||||
|
SetTouch(&CBaseButton::ButtonTouch);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetTouch(NULL);
|
||||||
|
SetUse(&CBaseButton::ButtonUse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Button has returned to start state. Quiesce it.
|
// Button has returned to start state. Quiesce it.
|
||||||
void CBaseButton::ButtonBackHome()
|
void CBaseButton::ButtonBackHome()
|
||||||
{
|
{
|
||||||
assert(m_toggle_state == TS_GOING_DOWN);
|
assert(m_toggle_state == TS_GOING_DOWN);
|
||||||
m_toggle_state = TS_AT_BOTTOM;
|
m_toggle_state = TS_AT_BOTTOM;
|
||||||
|
|
||||||
if (pev->spawnflags & SF_BUTTON_TOGGLE)
|
if (pev->spawnflags & SF_BUTTON_TOGGLE
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
&& m_hActivator
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
//EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), 1, ATTN_NORM);
|
//EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), 1, ATTN_NORM);
|
||||||
SUB_UseTargets(m_hActivator, USE_TOGGLE, 0);
|
SUB_UseTargets(m_hActivator, USE_TOGGLE, 0);
|
||||||
|
@ -59,7 +59,7 @@ static DLL_FUNCTIONS gFunctionTable =
|
|||||||
&AllowLagCompensation
|
&AllowLagCompensation
|
||||||
};
|
};
|
||||||
|
|
||||||
static NEW_DLL_FUNCTIONS gNewDLLFunctions
|
static NEW_DLL_FUNCTIONS gNewDLLFunctions =
|
||||||
{
|
{
|
||||||
&OnFreeEntPrivateData,
|
&OnFreeEntPrivateData,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -371,13 +371,12 @@ public:
|
|||||||
|
|
||||||
#ifdef REGAMEDLL_ADD
|
#ifdef REGAMEDLL_ADD
|
||||||
CCSEntity *m_pEntity;
|
CCSEntity *m_pEntity;
|
||||||
#endif
|
#else
|
||||||
|
|
||||||
// We use this variables to store each ammo count.
|
// We use this variables to store each ammo count.
|
||||||
#ifndef REGAMEDLL_ADD
|
|
||||||
// let's sacrifice this unused member, for its own needs in favor of m_pEntity
|
// let's sacrifice this unused member, for its own needs in favor of m_pEntity
|
||||||
int *current_ammo;
|
int *current_ammo;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
float currentammo;
|
float currentammo;
|
||||||
int maxammo_buckshot;
|
int maxammo_buckshot;
|
||||||
int ammo_buckshot;
|
int ammo_buckshot;
|
||||||
@ -613,6 +612,11 @@ public:
|
|||||||
return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
|
return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
virtual void Restart();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef HOOK_GAMEDLL
|
#ifdef HOOK_GAMEDLL
|
||||||
|
|
||||||
void Spawn_();
|
void Spawn_();
|
||||||
|
@ -678,6 +678,11 @@ void CHalfLifeMultiplay::__API_VHOOK(CleanUpMap)()
|
|||||||
UTIL_RestartOther("ambient_generic");
|
UTIL_RestartOther("ambient_generic");
|
||||||
UTIL_RestartOther("env_sprite");
|
UTIL_RestartOther("env_sprite");
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
UTIL_RestartOther("func_button");
|
||||||
|
UTIL_RestartOther("trigger_once");
|
||||||
|
#endif
|
||||||
|
|
||||||
// Remove grenades and C4
|
// Remove grenades and C4
|
||||||
#ifdef REGAMEDLL_FIXES
|
#ifdef REGAMEDLL_FIXES
|
||||||
UTIL_RemoveOther("grenade");
|
UTIL_RemoveOther("grenade");
|
||||||
|
@ -777,6 +777,7 @@ void CFuncTrain::__MAKE_VHOOK(Activate)()
|
|||||||
|
|
||||||
// keep track of this since path corners change our target for us.
|
// keep track of this since path corners change our target for us.
|
||||||
m_pevCurrentTarget = pevTarg;
|
m_pevCurrentTarget = pevTarg;
|
||||||
|
|
||||||
#ifdef REGAMEDLL_FIXES
|
#ifdef REGAMEDLL_FIXES
|
||||||
m_pevFirstTarget = m_pevCurrentTarget;
|
m_pevFirstTarget = m_pevCurrentTarget;
|
||||||
#endif
|
#endif
|
||||||
@ -817,6 +818,9 @@ void CFuncTrain::__MAKE_VHOOK(Spawn)()
|
|||||||
#ifndef REGAMEDLL_FIXES
|
#ifndef REGAMEDLL_FIXES
|
||||||
// NOTE: useless, m_pevCurrentTarget always is NULL
|
// NOTE: useless, m_pevCurrentTarget always is NULL
|
||||||
m_pevFirstTarget = m_pevCurrentTarget;
|
m_pevFirstTarget = m_pevCurrentTarget;
|
||||||
|
#else
|
||||||
|
// keep track of this since path corners change our target for us.
|
||||||
|
m_pevFirstTarget = VARS(FIND_ENTITY_BY_TARGETNAME(NULL, STRING(pev->target)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO: brush-entity is always zero origin, use (mins+max)*0.5f
|
// TODO: brush-entity is always zero origin, use (mins+max)*0.5f
|
||||||
@ -851,13 +855,8 @@ void CFuncTrain::__MAKE_VHOOK(Restart)()
|
|||||||
pev->dmg = 2;
|
pev->dmg = 2;
|
||||||
|
|
||||||
pev->movetype = MOVETYPE_PUSH;
|
pev->movetype = MOVETYPE_PUSH;
|
||||||
|
|
||||||
#ifdef REGAMEDLL_FIXES
|
|
||||||
// restore of first target
|
|
||||||
pev->target = m_pevFirstTarget->targetname;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_pevCurrentTarget = m_pevFirstTarget;
|
m_pevCurrentTarget = m_pevFirstTarget;
|
||||||
|
|
||||||
UTIL_SetOrigin(pev, m_vStartPosition);
|
UTIL_SetOrigin(pev, m_vStartPosition);
|
||||||
|
|
||||||
m_activated = FALSE;
|
m_activated = FALSE;
|
||||||
@ -866,9 +865,16 @@ void CFuncTrain::__MAKE_VHOOK(Restart)()
|
|||||||
m_volume = 0.85f;
|
m_volume = 0.85f;
|
||||||
|
|
||||||
#ifdef REGAMEDLL_FIXES
|
#ifdef REGAMEDLL_FIXES
|
||||||
pev->nextthink = 0;
|
|
||||||
|
SetThink(NULL);
|
||||||
pev->velocity = g_vecZero;
|
pev->velocity = g_vecZero;
|
||||||
|
|
||||||
|
// restore of first target
|
||||||
|
if (m_pevFirstTarget)
|
||||||
|
{
|
||||||
|
pev->target = m_pevFirstTarget->targetname;
|
||||||
|
}
|
||||||
|
|
||||||
if (pev->noiseMovement)
|
if (pev->noiseMovement)
|
||||||
{
|
{
|
||||||
STOP_SOUND(edict(), CHAN_STATIC, (char *)STRING(pev->noiseMovement));
|
STOP_SOUND(edict(), CHAN_STATIC, (char *)STRING(pev->noiseMovement));
|
||||||
@ -880,7 +886,6 @@ void CFuncTrain::__MAKE_VHOOK(Restart)()
|
|||||||
|
|
||||||
Activate();
|
Activate();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFuncTrain::__MAKE_VHOOK(Precache)()
|
void CFuncTrain::__MAKE_VHOOK(Precache)()
|
||||||
|
@ -453,7 +453,6 @@ void CBaseTrigger::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
|||||||
CBaseToggle::KeyValue(pkvd);
|
CBaseToggle::KeyValue(pkvd);
|
||||||
}
|
}
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS(trigger_hurt, CTriggerHurt, CCSTriggerHurt);
|
|
||||||
LINK_ENTITY_TO_CLASS(trigger_monsterjump, CTriggerMonsterJump, CCSTriggerMonsterJump);
|
LINK_ENTITY_TO_CLASS(trigger_monsterjump, CTriggerMonsterJump, CCSTriggerMonsterJump);
|
||||||
|
|
||||||
void CTriggerMonsterJump::__MAKE_VHOOK(Spawn)()
|
void CTriggerMonsterJump::__MAKE_VHOOK(Spawn)()
|
||||||
@ -630,6 +629,8 @@ void CTargetCDAudio::Play()
|
|||||||
UTIL_Remove(this);
|
UTIL_Remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LINK_ENTITY_TO_CLASS(trigger_hurt, CTriggerHurt, CCSTriggerHurt);
|
||||||
|
|
||||||
void CTriggerHurt::__MAKE_VHOOK(Spawn)()
|
void CTriggerHurt::__MAKE_VHOOK(Spawn)()
|
||||||
{
|
{
|
||||||
InitTrigger();
|
InitTrigger();
|
||||||
@ -890,20 +891,31 @@ LINK_ENTITY_TO_CLASS(trigger_once, CTriggerOnce, CCSTriggerOnce);
|
|||||||
|
|
||||||
void CTriggerOnce::__MAKE_VHOOK(Spawn)()
|
void CTriggerOnce::__MAKE_VHOOK(Spawn)()
|
||||||
{
|
{
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
m_flWait = -2;
|
||||||
|
#else
|
||||||
m_flWait = -1;
|
m_flWait = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
CTriggerMultiple::Spawn();
|
CTriggerMultiple::Spawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
void CTriggerOnce::Restart()
|
||||||
|
{
|
||||||
|
m_flWait = -2;
|
||||||
|
CTriggerMultiple::Spawn();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void CBaseTrigger::MultiTouch(CBaseEntity *pOther)
|
void CBaseTrigger::MultiTouch(CBaseEntity *pOther)
|
||||||
{
|
{
|
||||||
entvars_t *pevToucher;
|
entvars_t *pevToucher = pOther->pev;
|
||||||
|
|
||||||
pevToucher = pOther->pev;
|
|
||||||
|
|
||||||
// Only touch clients, monsters, or pushables (depending on flags)
|
// Only touch clients, monsters, or pushables (depending on flags)
|
||||||
if ((pevToucher->flags & FL_CLIENT && !(pev->spawnflags & SF_TRIGGER_NOCLIENTS))
|
if (((pevToucher->flags & FL_CLIENT) && !(pev->spawnflags & SF_TRIGGER_NOCLIENTS))
|
||||||
|| (pevToucher->flags & FL_MONSTER && (pev->spawnflags & SF_TRIGGER_ALLOWMONSTERS))
|
|| ((pevToucher->flags & FL_MONSTER) && (pev->spawnflags & SF_TRIGGER_ALLOWMONSTERS))
|
||||||
|| (pev->spawnflags & SF_TRIGGER_PUSHABLES && FClassnameIs(pevToucher,"func_pushable")))
|
|| ((pev->spawnflags & SF_TRIGGER_PUSHABLES) && FClassnameIs(pevToucher, "func_pushable")))
|
||||||
{
|
{
|
||||||
ActivateMultiTrigger(pOther);
|
ActivateMultiTrigger(pOther);
|
||||||
}
|
}
|
||||||
@ -959,6 +971,12 @@ void CBaseTrigger::ActivateMultiTrigger(CBaseEntity *pActivator)
|
|||||||
// called while C code is looping through area links...
|
// called while C code is looping through area links...
|
||||||
SetTouch(NULL);
|
SetTouch(NULL);
|
||||||
pev->nextthink = gpGlobals->time + 0.1f;
|
pev->nextthink = gpGlobals->time + 0.1f;
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
if (!(pev->spawnflags & SF_TRIGGER_NO_RESTART) && m_flWait == -2)
|
||||||
|
SetThink(NULL);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
SetThink(&CBaseTrigger::SUB_Remove);
|
SetThink(&CBaseTrigger::SUB_Remove);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1034,7 +1052,7 @@ void CTriggerVolume::__MAKE_VHOOK(Spawn)()
|
|||||||
// set size and link into world
|
// set size and link into world
|
||||||
SET_MODEL(ENT(pev), STRING(pev->model));
|
SET_MODEL(ENT(pev), STRING(pev->model));
|
||||||
|
|
||||||
pev->model = NULL;
|
pev->model = 0;
|
||||||
pev->modelindex = 0;
|
pev->modelindex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,8 +42,10 @@
|
|||||||
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
||||||
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
||||||
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
||||||
|
#define SF_TRIGGER_NO_RESTART 64 // it is not allowed to be restarted on a new round
|
||||||
|
|
||||||
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
|
|
||||||
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
||||||
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
@ -377,6 +379,10 @@ class CTriggerOnce: public CTriggerMultiple
|
|||||||
public:
|
public:
|
||||||
virtual void Spawn();
|
virtual void Spawn();
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
virtual void Restart();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HOOK_GAMEDLL
|
#ifdef HOOK_GAMEDLL
|
||||||
|
|
||||||
void Spawn_();
|
void Spawn_();
|
||||||
|
@ -37,8 +37,10 @@
|
|||||||
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
||||||
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
||||||
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
||||||
|
#define SF_TRIGGER_NO_RESTART 64 // it is not allowed to be restarted on a new round
|
||||||
|
|
||||||
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
|
|
||||||
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
||||||
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
||||||
@ -203,6 +205,7 @@ public:
|
|||||||
class CTriggerOnce: public CTriggerMultiple {
|
class CTriggerOnce: public CTriggerMultiple {
|
||||||
public:
|
public:
|
||||||
virtual void Spawn() = 0;
|
virtual void Spawn() = 0;
|
||||||
|
virtual void Restart() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// QUAKED trigger_counter (.5 .5 .5) ? nomessage
|
// QUAKED trigger_counter (.5 .5 .5) ? nomessage
|
||||||
|
Loading…
x
Reference in New Issue
Block a user