protected override void OnValidShoot(GameObject target, ref float damage) { WeaponManager weps = PlayerObject.GetComponent <WeaponManager>(); Transform cam = PlayerObject.GetComponent <Scp049PlayerScript>().plyCam.transform; Ray ray = new Ray(cam.position, cam.forward); Physics.Raycast(cam.position + cam.forward, cam.forward, out RaycastHit playerHit, PlayerMask); HitboxIdentity hitbox = playerHit.collider?.GetComponent <HitboxIdentity>(); damage = 0; if (overCharged) { damage = HmdPlugin.TagDamage; if (hitbox != null) { Timing.In(x => { OverchargeDetonate(weps, target.GetComponent <PlyMovementSync>().position); if (weps.GetShootPermission(target.GetComponent <CharacterClassManager>())) { float glitchTime = x; for (int i = 0; i < HmdPlugin.TagGlitches; i++) { Timing.In(y => TargetShake(target), glitchTime += GlitchLength); } } }, HmdPlugin.TagTime); } else if (Physics.Raycast(ray, out RaycastHit hit, 500f, WorldMask)) { Timing.In(x => { OverchargeDetonate(weps, hit.point); }, DetonateFlash(hit.point)); } } else { PlayerStats stats = target.GetComponent <PlayerStats>(); float damageTmp; if (target.GetComponent <CharacterClassManager>().curClass == (int)Role.SCP_106) { damageTmp = HmdPlugin.Scp106Damage; } else { damageTmp = HitHandler(hitbox); } stats.HurtPlayer( new PlayerStats.HitInfo( damageTmp, PlayerObject.GetComponent <NicknameSync>().myNick + " (" + PlayerObject.GetComponent <CharacterClassManager>().SteamId + ")", DamageTypes.E11StandardRifle, PlayerObject.GetComponent <QueryProcessor>().PlayerId ), target); } int shots = Barrel == 1 ? HmdPlugin.SuppressedKrakatoa : HmdPlugin.Krakatoa; for (int i = 0; i < shots; i++) { weps.CallRpcConfirmShot(false, weps.curWeapon); } }