void DrawMousedOverPlayerName() { WorldRaycastResult result = World.Raycast(new Ray(Camera.Active.Position, Camera.Active.LookVector), true, 2000f, World.OurPlayer); ClientPlayer mousedOverPlayer = result.HitPlayer ? (ClientPlayer)result.PlayerResult.Player : null; if (mousedOverPlayer != null && mousedOverPlayer.StateInfo != null) { NetworkPlayer netPlayer = null; // Find the networkplayer from their character foreach (NetworkPlayer np in netPlayerComponent.NetPlayers) { if (np.CharacterId.HasValue && np.CharacterId.Value == mousedOverPlayer.StateInfo.Id) { netPlayer = np; break; } } if (netPlayer != null) { Vector2 nameSize = font.MeasureString(netPlayer.Name); font.DrawString(netPlayer.Name, Renderer.ScreenWidth / 2f, Renderer.ScreenHeight / 2f - 125, Renderer.Sprites.SpriteBatch, TextAlign.Center, Color.White, new Color(0, 0, 0, 0.6f)); } } }
public override void FireBullet(Player _player, Vector3 origin, Vector3 dir, Vector3 recoil, int blockDamage, float playerDamage, float maxDist = float.MaxValue) { ServerMPPlayer player = (ServerMPPlayer)_player; bool sv_impacts = DashCMD.GetCVar <bool>("sv_impacts"); bool sv_hitboxes = DashCMD.GetCVar <bool>("sv_hitboxes"); int shooterPing = player.StateInfo.Owner.Stats.Ping; int rollbackOffset = DashCMD.GetCVar <int>("rp_rollback_offset"); int bulletDelta = player.LastBulletDeltaTime; if (sv_hitboxes) { DashCMD.WriteLine("[RB] Starting bullet {0}ms delta with {1}ms offset", ConsoleColor.Green, bulletDelta, rollbackOffset); } // Raycast BeginRollback(shooterPing + bulletDelta + rollbackOffset); Ray ray = new Ray(origin, dir + recoil); WorldRaycastResult result = Raycast(ray, true, maxDist, player); EndRollback(); // Handle intersection if (result.Intersects) { if (result.HitTerrain) { // Damage terrain TerrainRaycastResult tResult = result.TerrainResult; if (blockDamage > 0) { tResult.Chunk.DamageBlock(tResult.BlockIndex.Value, blockDamage); } } else if (result.HitPlayer) { // Damage player PlayerRaycastResult pResult = result.PlayerResult; bool ff = DashCMD.GetCVar <bool>("mp_friendlyfire"); bool infh = DashCMD.GetCVar <bool>("ch_infhealth"); if (!infh && (ff || player.Team != pResult.Player.Team)) { DamagePlayer(player, player.ItemManager.SelectedItem.GetType().Name, (ServerMPPlayer)pResult.Player, playerDamage, origin); if (sv_impacts) { DashCMD.WriteLine("[IMP] Hit player for {0} damage. Health After: {1}", playerDamage, pResult.Player.Health); } } } ImpactAt(result.IntersectionPosition.Value); } }