diff --git a/src/game/server/entities/laser.cpp b/src/game/server/entities/laser.cpp index d61833cbb..b0784b593 100644 --- a/src/game/server/entities/laser.cpp +++ b/src/game/server/entities/laser.cpp @@ -201,27 +201,31 @@ void CLaser::DoBounce() int TileFIndex = GameServer()->Collision()->GetFTileIndex(MapIndex); bool IsSwitchTeleGun = GameServer()->Collision()->IsSwitch(MapIndex) == TILE_ALLOW_TELE_GUN; bool IsBlueSwitchTeleGun = GameServer()->Collision()->IsSwitch(MapIndex) == TILE_ALLOW_BLUE_TELE_GUN; + int IsTeleInWeapon = GameServer()->Collision()->IsTeleportWeapon(MapIndex); - if(IsSwitchTeleGun || IsBlueSwitchTeleGun) { - // Delay specifies which weapon the tile should work for. - // Delay = 0 means all. - int delay = GameServer()->Collision()->GetSwitchDelay(MapIndex); + if(!IsTeleInWeapon) + { + if(IsSwitchTeleGun || IsBlueSwitchTeleGun) { + // Delay specifies which weapon the tile should work for. + // Delay = 0 means all. + int delay = GameServer()->Collision()->GetSwitchDelay(MapIndex); - if((delay != 3 && delay != 0) && m_Type == WEAPON_RIFLE) { - IsSwitchTeleGun = IsBlueSwitchTeleGun = false; + if((delay != 3 && delay != 0) && m_Type == WEAPON_RIFLE) { + IsSwitchTeleGun = IsBlueSwitchTeleGun = false; + } } + + m_IsBlueTeleport = TileFIndex == TILE_ALLOW_BLUE_TELE_GUN || IsBlueSwitchTeleGun; + + // Teleport is canceled if the last bounce tile is not a TILE_ALLOW_TELE_GUN. + // Teleport also works if laser didn't bounce. + m_TeleportCancelled = + m_Type == WEAPON_RIFLE + && (TileFIndex != TILE_ALLOW_TELE_GUN + && TileFIndex != TILE_ALLOW_BLUE_TELE_GUN + && !IsSwitchTeleGun + && !IsBlueSwitchTeleGun); } - - m_IsBlueTeleport = TileFIndex == TILE_ALLOW_BLUE_TELE_GUN || IsBlueSwitchTeleGun; - - // Teleport is canceled if the last bounce tile is not a TILE_ALLOW_TELE_GUN. - // Teleport also works if laser didn't bounce. - m_TeleportCancelled = - m_Type == WEAPON_RIFLE - && (TileFIndex != TILE_ALLOW_TELE_GUN - && TileFIndex != TILE_ALLOW_BLUE_TELE_GUN - && !IsSwitchTeleGun - && !IsBlueSwitchTeleGun); } //m_Owner = -1;