mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-17 21:48:19 +00:00
Make invincible players immune to freeze, death and teleport tiles and give them unlimited jumps
Specifically: * Ignore freeze, deep freeze, deep unfreeze, live freeze, and live unfreeze tiles * Ignore also the switched variants of those tiles * Allow movement when deep and live frozen * Ignore death tiles * Ignore red tele, blue tele, red checkpoint tele, and blue checkpoint tele tiles * Unlimited jumps * Disable /rescue Switches, doors, draggers, etc. are not disabled for invincible players in this patch
This commit is contained in:
parent
f51664e5ce
commit
b564110675
|
@ -757,19 +757,19 @@ void CCharacter::HandleTiles(int Index)
|
||||||
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aType[Team()] = TILE_SWITCHCLOSE;
|
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aType[Team()] = TILE_SWITCHCLOSE;
|
||||||
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aLastUpdateTick[Team()] = GameWorld()->GameTick();
|
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aLastUpdateTick[Team()] = GameWorld()->GameTick();
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
m_Core.m_DeepFrozen = true;
|
m_Core.m_DeepFrozen = true;
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
m_Core.m_DeepFrozen = false;
|
m_Core.m_DeepFrozen = false;
|
||||||
|
@ -817,14 +817,14 @@ void CCharacter::HandleTiles(int Index)
|
||||||
if(NewJumps != m_Core.m_Jumps)
|
if(NewJumps != m_Core.m_Jumps)
|
||||||
m_Core.m_Jumps = NewJumps;
|
m_Core.m_Jumps = NewJumps;
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_LFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_LFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = true;
|
m_Core.m_LiveFrozen = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_LUNFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_LUNFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
|
@ -833,7 +833,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// freeze
|
// freeze
|
||||||
if(((m_TileIndex == TILE_FREEZE) || (m_TileFIndex == TILE_FREEZE)) && !m_Core.m_Super && !m_Core.m_DeepFrozen)
|
if(((m_TileIndex == TILE_FREEZE) || (m_TileFIndex == TILE_FREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && !m_Core.m_DeepFrozen)
|
||||||
{
|
{
|
||||||
Freeze();
|
Freeze();
|
||||||
}
|
}
|
||||||
|
@ -843,21 +843,21 @@ void CCharacter::HandleTiles(int Index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// deep freeze
|
// deep freeze
|
||||||
if(((m_TileIndex == TILE_DFREEZE) || (m_TileFIndex == TILE_DFREEZE)) && !m_Core.m_Super && !m_Core.m_DeepFrozen)
|
if(((m_TileIndex == TILE_DFREEZE) || (m_TileFIndex == TILE_DFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && !m_Core.m_DeepFrozen)
|
||||||
{
|
{
|
||||||
m_Core.m_DeepFrozen = true;
|
m_Core.m_DeepFrozen = true;
|
||||||
}
|
}
|
||||||
else if(((m_TileIndex == TILE_DUNFREEZE) || (m_TileFIndex == TILE_DUNFREEZE)) && !m_Core.m_Super && m_Core.m_DeepFrozen)
|
else if(((m_TileIndex == TILE_DUNFREEZE) || (m_TileFIndex == TILE_DUNFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && m_Core.m_DeepFrozen)
|
||||||
{
|
{
|
||||||
m_Core.m_DeepFrozen = false;
|
m_Core.m_DeepFrozen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// live freeze
|
// live freeze
|
||||||
if(((m_TileIndex == TILE_LFREEZE) || (m_TileFIndex == TILE_LFREEZE)) && !m_Core.m_Super)
|
if(((m_TileIndex == TILE_LFREEZE) || (m_TileFIndex == TILE_LFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = true;
|
m_Core.m_LiveFrozen = true;
|
||||||
}
|
}
|
||||||
else if(((m_TileIndex == TILE_LUNFREEZE) || (m_TileFIndex == TILE_LUNFREEZE)) && !m_Core.m_Super)
|
else if(((m_TileIndex == TILE_LUNFREEZE) || (m_TileFIndex == TILE_LUNFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = false;
|
m_Core.m_LiveFrozen = false;
|
||||||
}
|
}
|
||||||
|
@ -959,7 +959,7 @@ void CCharacter::HandleTuneLayer()
|
||||||
void CCharacter::DDRaceTick()
|
void CCharacter::DDRaceTick()
|
||||||
{
|
{
|
||||||
mem_copy(&m_Input, &m_SavedInput, sizeof(m_Input));
|
mem_copy(&m_Input, &m_SavedInput, sizeof(m_Input));
|
||||||
if(m_Core.m_LiveFrozen && !m_CanMoveInFreeze && !m_Core.m_Super)
|
if(m_Core.m_LiveFrozen && !m_CanMoveInFreeze && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Input.m_Direction = 0;
|
m_Input.m_Direction = 0;
|
||||||
m_Input.m_Jump = 0;
|
m_Input.m_Jump = 0;
|
||||||
|
@ -1007,7 +1007,7 @@ void CCharacter::DDRacePostCoreTick()
|
||||||
|
|
||||||
m_FrozenLastTick = false;
|
m_FrozenLastTick = false;
|
||||||
|
|
||||||
if(m_Core.m_DeepFrozen && !m_Core.m_Super)
|
if(m_Core.m_DeepFrozen && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
Freeze();
|
Freeze();
|
||||||
|
|
||||||
// following jump rules can be overridden by tiles, like Refill Jumps, Stopper and Wall Jump
|
// following jump rules can be overridden by tiles, like Refill Jumps, Stopper and Wall Jump
|
||||||
|
@ -1032,9 +1032,9 @@ void CCharacter::DDRacePostCoreTick()
|
||||||
m_Core.m_Jumped = 1;
|
m_Core.m_Jumped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_Core.m_Super || m_Core.m_EndlessJump) && m_Core.m_Jumped > 1)
|
if((m_Core.m_Super || m_Core.m_Invincible || m_Core.m_EndlessJump) && m_Core.m_Jumped > 1)
|
||||||
{
|
{
|
||||||
// Super players and players with infinite jumps always have light feet
|
// Super players, invincible players and players with infinite jumps always have light feet
|
||||||
m_Core.m_Jumped = 1;
|
m_Core.m_Jumped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1056,7 +1056,7 @@ bool CCharacter::Freeze(int Seconds)
|
||||||
{
|
{
|
||||||
if(!GameWorld()->m_WorldConfig.m_PredictFreeze)
|
if(!GameWorld()->m_WorldConfig.m_PredictFreeze)
|
||||||
return false;
|
return false;
|
||||||
if(Seconds <= 0 || m_Core.m_Super || m_FreezeTime > Seconds * GameWorld()->GameTickSpeed())
|
if(Seconds <= 0 || m_Core.m_Super || m_Core.m_Invincible || m_FreezeTime > Seconds * GameWorld()->GameTickSpeed())
|
||||||
return false;
|
return false;
|
||||||
if(m_Core.m_FreezeStart < GameWorld()->GameTick() - GameWorld()->GameTickSpeed())
|
if(m_Core.m_FreezeStart < GameWorld()->GameTick() - GameWorld()->GameTickSpeed())
|
||||||
{
|
{
|
||||||
|
|
|
@ -199,6 +199,8 @@ void CCharacter::SetInvincible(bool Invincible)
|
||||||
SetSuper(false);
|
SetSuper(false);
|
||||||
|
|
||||||
m_Core.m_Invincible = Invincible;
|
m_Core.m_Invincible = Invincible;
|
||||||
|
if(Invincible)
|
||||||
|
UnFreeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCharacter::SetLiveFrozen(bool Active)
|
void CCharacter::SetLiveFrozen(bool Active)
|
||||||
|
@ -1377,7 +1379,7 @@ void CCharacter::HandleSkippableTiles(int Index)
|
||||||
Collision()->GetFCollisionAt(m_Pos.x + GetProximityRadius() / 3.f, m_Pos.y + GetProximityRadius() / 3.f) == TILE_DEATH ||
|
Collision()->GetFCollisionAt(m_Pos.x + GetProximityRadius() / 3.f, m_Pos.y + GetProximityRadius() / 3.f) == TILE_DEATH ||
|
||||||
Collision()->GetFCollisionAt(m_Pos.x - GetProximityRadius() / 3.f, m_Pos.y - GetProximityRadius() / 3.f) == TILE_DEATH ||
|
Collision()->GetFCollisionAt(m_Pos.x - GetProximityRadius() / 3.f, m_Pos.y - GetProximityRadius() / 3.f) == TILE_DEATH ||
|
||||||
Collision()->GetFCollisionAt(m_Pos.x - GetProximityRadius() / 3.f, m_Pos.y + GetProximityRadius() / 3.f) == TILE_DEATH) &&
|
Collision()->GetFCollisionAt(m_Pos.x - GetProximityRadius() / 3.f, m_Pos.y + GetProximityRadius() / 3.f) == TILE_DEATH) &&
|
||||||
!m_Core.m_Super && !(Team() && Teams()->TeeFinished(m_pPlayer->GetCid())))
|
!m_Core.m_Super && !m_Core.m_Invincible && !(Team() && Teams()->TeeFinished(m_pPlayer->GetCid())))
|
||||||
{
|
{
|
||||||
Die(m_pPlayer->GetCid(), WEAPON_WORLD);
|
Die(m_pPlayer->GetCid(), WEAPON_WORLD);
|
||||||
return;
|
return;
|
||||||
|
@ -1507,7 +1509,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// freeze
|
// freeze
|
||||||
if(((m_TileIndex == TILE_FREEZE) || (m_TileFIndex == TILE_FREEZE)) && !m_Core.m_Super && !m_Core.m_DeepFrozen)
|
if(((m_TileIndex == TILE_FREEZE) || (m_TileFIndex == TILE_FREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && !m_Core.m_DeepFrozen)
|
||||||
{
|
{
|
||||||
Freeze();
|
Freeze();
|
||||||
}
|
}
|
||||||
|
@ -1515,17 +1517,17 @@ void CCharacter::HandleTiles(int Index)
|
||||||
UnFreeze();
|
UnFreeze();
|
||||||
|
|
||||||
// deep freeze
|
// deep freeze
|
||||||
if(((m_TileIndex == TILE_DFREEZE) || (m_TileFIndex == TILE_DFREEZE)) && !m_Core.m_Super && !m_Core.m_DeepFrozen)
|
if(((m_TileIndex == TILE_DFREEZE) || (m_TileFIndex == TILE_DFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && !m_Core.m_DeepFrozen)
|
||||||
m_Core.m_DeepFrozen = true;
|
m_Core.m_DeepFrozen = true;
|
||||||
else if(((m_TileIndex == TILE_DUNFREEZE) || (m_TileFIndex == TILE_DUNFREEZE)) && !m_Core.m_Super && m_Core.m_DeepFrozen)
|
else if(((m_TileIndex == TILE_DUNFREEZE) || (m_TileFIndex == TILE_DUNFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible && m_Core.m_DeepFrozen)
|
||||||
m_Core.m_DeepFrozen = false;
|
m_Core.m_DeepFrozen = false;
|
||||||
|
|
||||||
// live freeze
|
// live freeze
|
||||||
if(((m_TileIndex == TILE_LFREEZE) || (m_TileFIndex == TILE_LFREEZE)) && !m_Core.m_Super)
|
if(((m_TileIndex == TILE_LFREEZE) || (m_TileFIndex == TILE_LFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = true;
|
m_Core.m_LiveFrozen = true;
|
||||||
}
|
}
|
||||||
else if(((m_TileIndex == TILE_LUNFREEZE) || (m_TileFIndex == TILE_LUNFREEZE)) && !m_Core.m_Super)
|
else if(((m_TileIndex == TILE_LUNFREEZE) || (m_TileFIndex == TILE_LUNFREEZE)) && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = false;
|
m_Core.m_LiveFrozen = false;
|
||||||
}
|
}
|
||||||
|
@ -1706,31 +1708,31 @@ void CCharacter::HandleTiles(int Index)
|
||||||
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aType[Team()] = TILE_SWITCHCLOSE;
|
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aType[Team()] = TILE_SWITCHCLOSE;
|
||||||
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aLastUpdateTick[Team()] = Server()->Tick();
|
Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aLastUpdateTick[Team()] = Server()->Tick();
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
m_Core.m_DeepFrozen = true;
|
m_Core.m_DeepFrozen = true;
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
m_Core.m_DeepFrozen = false;
|
m_Core.m_DeepFrozen = false;
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_LFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_LFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
m_Core.m_LiveFrozen = true;
|
m_Core.m_LiveFrozen = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Collision()->GetSwitchType(MapIndex) == TILE_LUNFREEZE && Team() != TEAM_SUPER)
|
else if(Collision()->GetSwitchType(MapIndex) == TILE_LUNFREEZE && Team() != TEAM_SUPER && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Switchers()[Collision()->GetSwitchNumber(MapIndex)].m_aStatus[Team()])
|
||||||
{
|
{
|
||||||
|
@ -1862,7 +1864,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
int z = Collision()->IsTeleport(MapIndex);
|
int z = Collision()->IsTeleport(MapIndex);
|
||||||
if(!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons && z && !Collision()->TeleOuts(z - 1).empty())
|
if(!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons && z && !Collision()->TeleOuts(z - 1).empty())
|
||||||
{
|
{
|
||||||
if(m_Core.m_Super)
|
if(m_Core.m_Super || m_Core.m_Invincible)
|
||||||
return;
|
return;
|
||||||
int TeleOut = GameWorld()->m_Core.RandomOr0(Collision()->TeleOuts(z - 1).size());
|
int TeleOut = GameWorld()->m_Core.RandomOr0(Collision()->TeleOuts(z - 1).size());
|
||||||
m_Core.m_Pos = Collision()->TeleOuts(z - 1)[TeleOut];
|
m_Core.m_Pos = Collision()->TeleOuts(z - 1)[TeleOut];
|
||||||
|
@ -1877,7 +1879,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
int evilz = Collision()->IsEvilTeleport(MapIndex);
|
int evilz = Collision()->IsEvilTeleport(MapIndex);
|
||||||
if(evilz && !Collision()->TeleOuts(evilz - 1).empty())
|
if(evilz && !Collision()->TeleOuts(evilz - 1).empty())
|
||||||
{
|
{
|
||||||
if(m_Core.m_Super)
|
if(m_Core.m_Super || m_Core.m_Invincible)
|
||||||
return;
|
return;
|
||||||
int TeleOut = GameWorld()->m_Core.RandomOr0(Collision()->TeleOuts(evilz - 1).size());
|
int TeleOut = GameWorld()->m_Core.RandomOr0(Collision()->TeleOuts(evilz - 1).size());
|
||||||
m_Core.m_Pos = Collision()->TeleOuts(evilz - 1)[TeleOut];
|
m_Core.m_Pos = Collision()->TeleOuts(evilz - 1)[TeleOut];
|
||||||
|
@ -1899,7 +1901,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
}
|
}
|
||||||
if(Collision()->IsCheckEvilTeleport(MapIndex))
|
if(Collision()->IsCheckEvilTeleport(MapIndex))
|
||||||
{
|
{
|
||||||
if(m_Core.m_Super)
|
if(m_Core.m_Super || m_Core.m_Invincible)
|
||||||
return;
|
return;
|
||||||
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
||||||
for(int k = m_TeleCheckpoint - 1; k >= 0; k--)
|
for(int k = m_TeleCheckpoint - 1; k >= 0; k--)
|
||||||
|
@ -1936,7 +1938,7 @@ void CCharacter::HandleTiles(int Index)
|
||||||
}
|
}
|
||||||
if(Collision()->IsCheckTeleport(MapIndex))
|
if(Collision()->IsCheckTeleport(MapIndex))
|
||||||
{
|
{
|
||||||
if(m_Core.m_Super)
|
if(m_Core.m_Super || m_Core.m_Invincible)
|
||||||
return;
|
return;
|
||||||
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
||||||
for(int k = m_TeleCheckpoint - 1; k >= 0; k--)
|
for(int k = m_TeleCheckpoint - 1; k >= 0; k--)
|
||||||
|
@ -2082,7 +2084,7 @@ void CCharacter::DDRaceTick()
|
||||||
if(m_Input.m_Direction != 0 || m_Input.m_Jump != 0)
|
if(m_Input.m_Direction != 0 || m_Input.m_Jump != 0)
|
||||||
m_LastMove = Server()->Tick();
|
m_LastMove = Server()->Tick();
|
||||||
|
|
||||||
if(m_Core.m_LiveFrozen && !m_Core.m_Super)
|
if(m_Core.m_LiveFrozen && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
m_Input.m_Direction = 0;
|
m_Input.m_Direction = 0;
|
||||||
m_Input.m_Jump = 0;
|
m_Input.m_Jump = 0;
|
||||||
|
@ -2136,7 +2138,7 @@ void CCharacter::DDRacePostCoreTick()
|
||||||
|
|
||||||
m_FrozenLastTick = false;
|
m_FrozenLastTick = false;
|
||||||
|
|
||||||
if(m_Core.m_DeepFrozen && !m_Core.m_Super)
|
if(m_Core.m_DeepFrozen && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
Freeze();
|
Freeze();
|
||||||
|
|
||||||
// following jump rules can be overridden by tiles, like Refill Jumps, Stopper and Wall Jump
|
// following jump rules can be overridden by tiles, like Refill Jumps, Stopper and Wall Jump
|
||||||
|
@ -2161,9 +2163,9 @@ void CCharacter::DDRacePostCoreTick()
|
||||||
m_Core.m_Jumped = 1;
|
m_Core.m_Jumped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_Core.m_Super || m_Core.m_EndlessJump) && m_Core.m_Jumped > 1)
|
if((m_Core.m_Super || m_Core.m_Invincible || m_Core.m_EndlessJump) && m_Core.m_Jumped > 1)
|
||||||
{
|
{
|
||||||
// Super players and players with infinite jumps always have light feet
|
// Super players, invincible players and players with infinite jumps always have light feet
|
||||||
m_Core.m_Jumped = 1;
|
m_Core.m_Jumped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2208,7 +2210,7 @@ void CCharacter::DDRacePostCoreTick()
|
||||||
|
|
||||||
bool CCharacter::Freeze(int Seconds)
|
bool CCharacter::Freeze(int Seconds)
|
||||||
{
|
{
|
||||||
if(Seconds <= 0 || m_Core.m_Super || m_FreezeTime > Seconds * Server()->TickSpeed())
|
if(Seconds <= 0 || m_Core.m_Super || m_Core.m_Invincible || m_FreezeTime > Seconds * Server()->TickSpeed())
|
||||||
return false;
|
return false;
|
||||||
if(m_FreezeTime == 0 || m_Core.m_FreezeStart < Server()->Tick() - Server()->TickSpeed())
|
if(m_FreezeTime == 0 || m_Core.m_FreezeStart < Server()->Tick() - Server()->TickSpeed())
|
||||||
{
|
{
|
||||||
|
@ -2382,7 +2384,7 @@ void CCharacter::DDRaceInit()
|
||||||
|
|
||||||
void CCharacter::Rescue()
|
void CCharacter::Rescue()
|
||||||
{
|
{
|
||||||
if(m_SetSavePos[GetPlayer()->m_RescueMode] && !m_Core.m_Super)
|
if(m_SetSavePos[GetPlayer()->m_RescueMode] && !m_Core.m_Super && !m_Core.m_Invincible)
|
||||||
{
|
{
|
||||||
if(m_LastRescue + (int64_t)g_Config.m_SvRescueDelay * Server()->TickSpeed() > Server()->Tick())
|
if(m_LastRescue + (int64_t)g_Config.m_SvRescueDelay * Server()->TickSpeed() > Server()->Tick())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue