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));
                }
            }
        }
Exemple #2
0
        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);
            }
        }