示例#1
0
        public virtual void OnTick()
        {
            if (CooldownTick > 0)
            {
                CooldownTick--;
            }

            if (!Entity.IsSpawned)
            {
                return;
            }

            if (IsDead)
            {
                return;
            }

            if (IsInvulnerable)
            {
                Health = MaxHealth;
            }

            if (Health <= 0)
            {
                Kill();
                return;
            }

            if (Entity.KnownPosition.Y < 0 && !IsDead)
            {
                CooldownTick = 0;
                TakeHit(null, 300, DamageCause.Void);
                LastDamageCause = DamageCause.Void;
                return;
            }

            if (IsInWater(Entity.KnownPosition))
            {
                Air--;
                if (Air <= 0)
                {
                    if (Math.Abs(Air) % 10 == 0)
                    {
                        Health -= 10;
                        var player = Entity as Player;
                        if (player != null)
                        {
                            player.SendUpdateAttributes();
                            player.BroadcastEntityEvent();
                        }
                        Entity.BroadcastSetEntityData();
                        LastDamageCause = DamageCause.Drowning;
                    }
                }

                if (IsOnFire)
                {
                    IsOnFire = false;
                    FireTick = 0;
                    Entity.BroadcastSetEntityData();
                }
            }
            else
            {
                Air = 300;
            }

            if (IsInSolid(Entity.KnownPosition))
            {
                if (SuffocationTicks <= 0)
                {
                    Health -= 10;
                    var player = Entity as Player;
                    if (player != null)
                    {
                        player.SendUpdateAttributes();
                        player.BroadcastEntityEvent();
                    }
                    Entity.BroadcastSetEntityData();
                    LastDamageCause  = DamageCause.Suffocation;
                    SuffocationTicks = 10;
                }
                else
                {
                    SuffocationTicks--;
                }
            }
            else
            {
                SuffocationTicks = 10;
            }

            if (IsInLava(Entity.KnownPosition))
            {
                if (LastDamageCause.Equals(DamageCause.Lava))
                {
                    FireTick += 2;
                }
                else
                {
                    FireTick = 300;
                    IsOnFire = true;
                    Entity.BroadcastSetEntityData();
                }

                if (LavaTicks <= 0)
                {
                    Health -= 40;

                    var player = Entity as Player;
                    if (player != null)
                    {
                        player.SendUpdateAttributes();
                        player.BroadcastEntityEvent();
                    }
                    Entity.BroadcastSetEntityData();
                    LastDamageCause = DamageCause.Lava;
                    LavaTicks       = 10;
                }
                else
                {
                    LavaTicks--;
                }
            }
            else
            {
                LavaTicks = 0;
            }

            if (!IsInLava(Entity.KnownPosition) && IsOnFire)
            {
                FireTick--;
                if (FireTick <= 0)
                {
                    IsOnFire = false;
                }

                if (Math.Abs(FireTick) % 20 == 0)
                {
                    Health -= 10;
                    var player = Entity as Player;
                    if (player != null)
                    {
                        player.SendUpdateAttributes();
                        player.BroadcastEntityEvent();
                    }
                    Entity.BroadcastSetEntityData();
                    LastDamageCause = DamageCause.FireTick;
                }
            }
        }
示例#2
0
        public virtual void OnTick()
        {
            if (!Entity.IsSpawned)
            {
                return;
            }

            if (IsDead)
            {
                return;
            }

            if (CooldownTick > 0)
            {
                CooldownTick--;
            }
            else
            {
                LastDamageSource = null;
            }

            if (IsInvulnerable)
            {
                Health = MaxHealth;
            }

            if (Health <= 0)
            {
                Kill();
                return;
            }

            if (Entity.KnownPosition.Y < 0 && !IsDead)
            {
                CooldownTick = 0;
                TakeHit(null, 300, DamageCause.Void);
                return;
            }

            if (IsInWater(Entity.KnownPosition))
            {
                Entity.IsInWater = true;

                Air--;
                if (Air <= 0)
                {
                    if (Math.Abs(Air) % 10 == 0)
                    {
                        TakeHit(null, 1, DamageCause.Drowning);
                        Entity.BroadcastSetEntityData();
                    }
                }

                Entity.BroadcastSetEntityData();
            }
            else
            {
                Air = MaxAir;

                if (Entity.IsInWater)
                {
                    Entity.IsInWater = false;
                    Entity.BroadcastSetEntityData();
                }
            }

            if (IsOnFire && (Entity.IsInWater || IsStandingInWater(Entity.KnownPosition)))
            {
                IsOnFire = false;
                FireTick = 0;
                Entity.BroadcastSetEntityData();
            }

            if (IsInSolid(Entity.KnownPosition))
            {
                if (SuffocationTicks <= 0)
                {
                    TakeHit(null, 1, DamageCause.Suffocation);
                    Entity.BroadcastSetEntityData();

                    SuffocationTicks = 10;
                }
                else
                {
                    SuffocationTicks--;
                }
            }
            else
            {
                SuffocationTicks = 10;
            }

            if (IsInLava(Entity.KnownPosition))
            {
                if (LastDamageCause.Equals(DamageCause.Lava))
                {
                    FireTick += 2;
                }
                else
                {
                    Ignite(300);
                }

                if (LavaTicks <= 0)
                {
                    TakeHit(null, 4, DamageCause.Lava);
                    Entity.BroadcastSetEntityData();

                    LavaTicks = 10;
                }
                else
                {
                    LavaTicks--;
                }
            }
            else
            {
                LavaTicks = 0;
            }

            if (!IsInLava(Entity.KnownPosition) && IsOnFire)
            {
                FireTick--;
                if (FireTick <= 0)
                {
                    IsOnFire = false;
                    Entity.BroadcastSetEntityData();
                }

                if (Math.Abs(FireTick) % 20 == 0)
                {
                    if (Entity is Player)
                    {
                        Player player = (Player)Entity;
                        player.DamageCalculator.CalculatePlayerDamage(null, player, null, 1, DamageCause.FireTick);
                        TakeHit(null, 1, DamageCause.FireTick);
                    }
                    else
                    {
                        TakeHit(null, 1, DamageCause.FireTick);
                    }
                    Entity.BroadcastSetEntityData();
                }
            }
        }
示例#3
0
        public virtual void OnTick()
        {
            if (CooldownTick > 0)
            {
                CooldownTick--;
            }

            if (!Entity.IsSpawned)
            {
                return;
            }

            if (IsDead)
            {
                return;
            }

            if (IsInvulnerable)
            {
                Health = MaxHealth;
            }

            if (Health <= 0)
            {
                Kill();
                return;
            }

            if (Entity.KnownPosition.Y < 0 && !IsDead)
            {
                CooldownTick = 0;
                TakeHit(null, 300, DamageCause.Void);
                return;
            }

            if (IsInWater(Entity.KnownPosition))
            {
                Air--;
                if (Air <= 0)
                {
                    if (Math.Abs(Air) % 10 == 0)
                    {
                        TakeHit(null, 1, DamageCause.Drowning);
                        Entity.BroadcastSetEntityData();
                    }
                }

                if (IsOnFire)
                {
                    IsOnFire = false;
                    FireTick = 0;
                    Entity.BroadcastSetEntityData();
                }
            }
            else
            {
                Air = 300;
            }

            if (IsInSolid(Entity.KnownPosition))
            {
                if (SuffocationTicks <= 0)
                {
                    TakeHit(null, 1, DamageCause.Suffocation);
                    Entity.BroadcastSetEntityData();

                    SuffocationTicks = 10;
                }
                else
                {
                    SuffocationTicks--;
                }
            }
            else
            {
                SuffocationTicks = 10;
            }

            if (IsInLava(Entity.KnownPosition))
            {
                if (LastDamageCause.Equals(DamageCause.Lava))
                {
                    FireTick += 2;
                }
                else
                {
                    FireTick = 300;
                    IsOnFire = true;
                    Entity.BroadcastSetEntityData();
                }

                if (LavaTicks <= 0)
                {
                    TakeHit(null, 4, DamageCause.Lava);
                    Entity.BroadcastSetEntityData();

                    LavaTicks = 10;
                }
                else
                {
                    LavaTicks--;
                }
            }
            else
            {
                LavaTicks = 0;
            }

            if (!IsInLava(Entity.KnownPosition) && IsOnFire)
            {
                FireTick--;
                if (FireTick <= 0)
                {
                    IsOnFire = false;
                }

                if (Math.Abs(FireTick) % 20 == 0)
                {
                    TakeHit(null, 1, DamageCause.FireTick);
                    Entity.BroadcastSetEntityData();
                }
            }
        }