コード例 #1
0
 public void Kill(EDamageCause deathcause)
 {
     if (IsServer())
     {
         Channel.Send(nameof(Network_Kill), ECall.Clients, (int)deathcause);
     }
     Kill(deathcause, false);
 }
コード例 #2
0
 private void Kill(EDamageCause deathcause, bool ignoreServer)
 {
     if (!ignoreServer && !IsServer())
     {
         return;
     }
     Health = 0;
     OnPlayerDeath(deathcause, null);
 }
コード例 #3
0
        public void PlayerCollision(Vector3 momentum, EDamageCause deathCause = EDamageCause.COLLISION)
        {
            if (!IsServer())
            {
                return;
            }
            var magnitude = momentum.magnitude;
            var speed     = magnitude / Player.Rigidbody.mass;
            var damage    = (10 / 4) * speed; // 100 damage at 40 m/s

            DamagePlayer((int)damage, deathCause, World.Instance);
        }
コード例 #4
0
        private void OnPlayerDeath(EDamageCause reason, IEntity killedBy)
        {
            PlayerDeathEvent @event = new PlayerDeathEvent(Player);

            @event.DeathMessage = "<b>" + Player.User.Name + "</b> died (" + reason + ")";
            @event.Killer       = killedBy;
            @event.DeathCause   = reason;
            EventManager.Instance.CallEvent(@event);
            if (@event.DeathMessage != null && IsServer())
            {
                Chat.Instance.SendServerMessage(@event.DeathMessage);
            }
        }
コード例 #5
0
        public void DamagePlayer(int damage, EDamageCause cause, IEntity damagingEntity = null)
        {
            PlayerDamageEvent @event = new PlayerDamageEvent(Player);

            @event.Damage = damage;
            @event.DamageCausingEntity = damagingEntity;
            @event.DamageCause         = cause;
            EventManager.Instance.CallEvent(@event);

            bool wasDead = IsDead;

            Health -= @event.Damage;

            if (IsDead && !wasDead)
            {
                OnPlayerDeath(@event.DamageCause, damagingEntity);
            }
        }