Skip to content

Commit 78d8ef9

Browse files
committed
Always destroy bullets/lasers on kill when in practice team (fixes ddnet#4694)
to prevent /teleporting back to start line and cheating
1 parent 8d66175 commit 78d8ef9

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

src/game/server/entities/laser.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ CLaser::CLaser(CGameWorld *pGameWorld, vec2 Pos, vec2 Direction, float StartEner
2525
m_TeleportCancelled = false;
2626
m_IsBlueTeleport = false;
2727
m_TuneZone = GameServer()->Collision()->IsTune(GameServer()->Collision()->GetMapIndex(m_Pos));
28-
m_TeamMask = GameServer()->GetPlayerChar(Owner) ? GameServer()->GetPlayerChar(Owner)->Teams()->TeamMask(GameServer()->GetPlayerChar(Owner)->Team(), -1, m_Owner) : 0;
28+
CCharacter *pOwnerChar = GameServer()->GetPlayerChar(m_Owner);
29+
m_TeamMask = pOwnerChar ? pOwnerChar->Teams()->TeamMask(pOwnerChar->Team(), -1, m_Owner) : 0;
30+
m_BelongsToPracticeTeam = pOwnerChar && pOwnerChar->Teams()->IsPractice(pOwnerChar->Team());
31+
2932
GameWorld()->InsertEntity(this);
3033
DoBounce();
3134
}
@@ -230,7 +233,7 @@ void CLaser::Reset()
230233

231234
void CLaser::Tick()
232235
{
233-
if(g_Config.m_SvDestroyLasersOnDeath && m_Owner >= 0)
236+
if((g_Config.m_SvDestroyLasersOnDeath || m_BelongsToPracticeTeam) && m_Owner >= 0)
234237
{
235238
CCharacter *pOwnerChar = GameServer()->GetPlayerChar(m_Owner);
236239
if(!(pOwnerChar && pOwnerChar->IsAlive()))

src/game/server/entities/laser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class CLaser : public CEntity
3838
int m_TuneZone;
3939
bool m_TeleportCancelled;
4040
bool m_IsBlueTeleport;
41+
bool m_BelongsToPracticeTeam;
4142
};
4243

4344
#endif

src/game/server/entities/projectile.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ CProjectile::CProjectile(
4444

4545
m_TuneZone = GameServer()->Collision()->IsTune(GameServer()->Collision()->GetMapIndex(m_Pos));
4646

47+
CCharacter *pOwnerChar = GameServer()->GetPlayerChar(m_Owner);
48+
m_BelongsToPracticeTeam = pOwnerChar && pOwnerChar->Teams()->IsPractice(pOwnerChar->Team());
49+
4750
GameWorld()->InsertEntity(this);
4851
}
4952

@@ -142,7 +145,7 @@ void CProjectile::Tick()
142145
{
143146
TeamMask = pOwnerChar->Teams()->TeamMask(pOwnerChar->Team(), -1, m_Owner);
144147
}
145-
else if(m_Owner >= 0 && (m_Type != WEAPON_GRENADE || g_Config.m_SvDestroyBulletsOnDeath))
148+
else if(m_Owner >= 0 && (m_Type != WEAPON_GRENADE || g_Config.m_SvDestroyBulletsOnDeath || m_BelongsToPracticeTeam))
146149
{
147150
m_MarkedForDestroy = true;
148151
return;

src/game/server/entities/projectile.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class CProjectile : public CEntity
4747
int m_Bouncing;
4848
bool m_Freeze;
4949
int m_TuneZone;
50+
bool m_BelongsToPracticeTeam;
5051

5152
public:
5253
void SetBouncing(int Value);

0 commit comments

Comments
 (0)