Beispiel #1
0
        public void UpdateBuffsGUI()
        {
            var buffs = GetComponentsInChildren <UIBuff>(BuffRoot);

            for (int i = 0; i < ActiveBuffs.Count; ++i)
            {
                var b = ActiveBuffs.ElementAt(i);

                if (i >= buffs.Length)
                {
                    var buff = GameObject.Instantiate(BuffPrefab, BuffRoot);
                    buff.Init(b.Key, b.Value);
                    buff.transform.localPosition = new Vector3(i * 0.5f, 0, 0);
                }
                else
                {
                    buffs[i].Init(b.Key, b.Value);
                    buffs[i].transform.localPosition = new Vector3(i * 0.5f, 0, 0);
                }
            }
            for (int j = ActiveBuffs.Count; j < buffs.Length; ++j)
            {
                Destroy(buffs[j].gameObject);
            }
        }
Beispiel #2
0
        public void Init()
        {
            foreach (var a in Abilities)
            {
                Destroy(a.gameObject);
            }

            Abilities.Clear();

            ActiveBuffs.Clear();

            foreach (var a in AbilityDefinisions)
            {
                Abilities.Add(Instantiate(a, this.transform));
            }

            foreach (var a in Abilities)
            {
                a.User = this;
            }

            _damageTimer = _damageAccumulator = 0;
            _blockTimer  = _damageAccumulator = 0;
            _blockTimer  = _blockAccumulator = 0;
            _deathTimer  = 0;

            NewTurn();
        }
Beispiel #3
0
        public void NewTurn()
        {
            ActionPoints = ActionPointsPerTurn;


            bool keepBlock = ActiveBuffs.Any(s => s.Key.KeepBlockNextTurn);

            foreach (var buff in ActiveBuffs.Keys.Where(b => b.TickOnStartTurn).ToList())
            {
                ActiveBuffs[buff]--;
                if (ActiveBuffs[buff] <= 0 || buff.RemoveAllStacksOnTick)
                {
                    ActiveBuffs.Remove(buff);
                }
            }

            UpdateBuffsGUI();

            if (keepBlock)
            {
                // Nothing we have to keep block
            }
            else
            {
                Block = 0;
            }
        }
Beispiel #4
0
        /// <summary>
        /// Updates player position. Saves change to database if needed.
        /// </summary>
        /// <param name="x">new x</param>
        /// <param name="y">new y</param>
        /// <param name="z">new z</param>
        /// <param name="saveChangesToDB">set it to true, if this change should be saved to database</param>
        private void UpdatePosition(float x, float y, float z, ushort angle, bool saveChangesToDB)
        {
            if (ActiveBuffs.Any(b => b.StateType == StateType.Immobilize || b.StateType == StateType.Sleep || b.StateType == StateType.Stun))
            {
                OnPositionChanged?.Invoke(this);
                return;
            }

            PosX  = x;
            PosY  = y;
            PosZ  = z;
            Angle = angle;

            if (IsDuelApproved && MathExtensions.Distance(PosX, DuelX, PosZ, DuelZ) >= 45)
            {
                FinishDuel(DuelCancelReason.TooFarAway);
            }

            //_logger.LogDebug($"Character {Id} moved to x={PosX} y={PosY} z={PosZ} angle={Angle}");

            if (saveChangesToDB)
            {
                _taskQueue.Enqueue(ActionType.SAVE_CHARACTER_MOVE,
                                   Id, x, y, z, angle);
            }

            OnPositionChanged?.Invoke(this);
        }
 public bool AddBuff(Buff buff, Unit performer, GameEntity mediator)
 {
     if (!CanAddBuff(buff))
     {
         return(false);
     }
     buff.Performer = performer;
     buff.Mediator  = mediator;
     if (IsInGame)
     {
         if (CanAddBuff(buff))
         {
             buff.TargetPosition = this.Position;
             buff.TargetEntity   = this;
             if (buff.TryStartPerform())
             {
                 ActiveBuffs.Add(buff);
             }
         }
     }
     else
     {
         ActiveBuffs.Add(buff);
     }
     return(true);
 }
 public void ClearBuffs()
 {
     foreach (var v in new List <Buff>(ActiveBuffs))
     {
         v.TryEndPerform(true);
     }
     ActiveBuffs.Clear();
 }
 public void RemoveBuff(Buff buff)
 {
     ActiveBuffs.Remove(buff);
     if (IsInGame)
     {
         buff.TryEndPerform(false);
     }
 }
Beispiel #8
0
        public void RefreshBuffs()
        {
            foreach (var buff in ActiveBuffs.Where(b => b.Value == 0).ToList())
            {
                ActiveBuffs.Remove(buff.Key);
            }

            UpdateBuffsGUI();
        }
 private bool TestActiveBuffs(IPlayerPowerInfo powers)
 {
     if (ActiveBuffs != null)
     {
         return(AllActiveBuffs
             ? ActiveBuffs.All(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno))
             : ActiveBuffs.Any(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno)));
     }
     return(true);
 }
Beispiel #10
0
        public int DealDamage(int damage, bool ignoreBlock = false)
        {
            int mod = 100;

            if (ActiveBuffs.Any(a => a.Key.MegaVulnerable))
            {
                mod += 50;
            }

            if (ActiveBuffs.Any(a => a.Key.Vulnerable))
            {
                mod += 25;
            }

            if (mod != 100)
            {
                damage = (damage * mod) / 100;
            }

            if (damage > 0 && ActiveBuffs.Any(b => b.Key.TakeNoDamage))
            {
                damage = 1;
            }

            if (!ignoreBlock)
            {
                int remain = Block - damage;
                if (remain > 0)
                {
                    Block  = remain;
                    damage = 0;
                }
                else
                {
                    Block  = 0;
                    damage = -remain;
                }
            }
            CurrentHealth -= damage;
            if (CurrentHealth <= 0)
            {
                Kill();
            }

            _damageAccumulator += damage;

            _damageTimer = 1.5f;

            return(damage);
        }
Beispiel #11
0
        public void EndTurn()
        {
            ActionPoints = 0;

            foreach (var buff in ActiveBuffs.Keys.Where(b => !b.TickOnStartTurn).ToList())
            {
                ActiveBuffs[buff]--;
                if (ActiveBuffs[buff] <= 0 || buff.RemoveAllStacksOnTick)
                {
                    ActiveBuffs.Remove(buff);
                }
            }

            UpdateBuffsGUI();
        }
Beispiel #12
0
        public override void Update(TimeSpan deltaTime)
        {
            base.Update(deltaTime);

            bool changes = false;

            for (int i = ActiveBuffs.Count - 1; i >= 0; i--)
            {
                ActiveBuffs[i].Update(deltaTime);
                if (ActiveBuffs[i].Active == false)
                {
                    ActiveBuffs.RemoveAt(i);
                    changes = true;
                }
            }
            if (changes && !Screen.MenuConsole.IsActive)
            {
                // refresh player's stats
                Screen.MenuConsole.PrintPlayerStats();
            }
        }
        public override void GameUpdate(float dtime)
        {
            base.GameUpdate(dtime);

            var running = Running;

            if (MotionObject != null)
            {
                running &= MotionUnit.Velocity.Length() > 0;
            }

            if (running)
            {
                if (!wasRunning)
                {
                    OnTakesFootstep();
                }
                wasRunning   = true;
                footstepAcc += dtime;
                if (footstepAcc >= FootstepRelativePeriod / RunSpeed)
                {
                    OnTakesFootstep();
                    footstepAcc = 0;
                }
            }
            else
            {
                wasRunning  = false;
                footstepAcc = 0;
            }

            if (RageEnabled)
            {
                UpdateRage(dtime);
            }

            float waterLevel = Game.Instance.Map.Settings.WaterHeight - Translation.Z - 0.3f;

            RunSpeed = MaxRunSpeed * Math.Max(0.2f, (1 - Math.Max(waterLevel, 0) / MaxWaterDepth));
            bool wasDrowning = isDrowning;

            isDrowning = waterLevel > MaxWaterDepth && State == UnitState.Alive;

            if (isDrowning)
            {
                if (!wasDrowning)
                {
                    OnStartsPiranhas();
                }

                OnUpdatePiranhas(dtime);
            }
            else
            {
                if (wasDrowning)
                {
                    OnEndsPiranhas();
                }
            }

            foreach (var v in Abilities)
            {
                v.UpdateCooldown(dtime);
            }

            foreach (var v in new List <Buff>(ActiveBuffs))
            {
                if (!v.IsPerforming)
                {
                    ActiveBuffs.Remove(v);
                }
            }

            if (MotionObject != null)
            {
                var ip = MotionObject.InterpolatedPosition;
                var ir = MotionUnit.InterpolatedRotation;
                UpdateTranslation(dtime, ip);
                if (Rotation != ir)
                {
                    Rotation = ir;
                }

                if (wasOnGround != IsOnGround)
                {
                    wasOnGround = IsOnGround;
                    InvalidateAnimation();
                }

                if (isOnGroundDebug != null)
                {
                    isOnGroundDebug.Visible = IsOnGround;
                }
            }
            else
            {
                Running = false;
            }

            if (State == UnitState.Dead)
            {
                if (removeDeadZombieTimer >= 0)
                {
                    removeDeadZombieTimer -= dtime;
                    if (removeDeadZombieTimer < 0)
                    {
                        Stop();
                    }
                }
            }

            if (Program.Settings.DisplayCooldownBars)
            {
                for (int i = 0; i < cooldownBars.Length; i++)
                {
                    cooldownBars[i].MaxValue = Abilities[i].Cooldown;
                    cooldownBars[i].Value    = Abilities[i].CurrentCooldown;
                }
            }
        }
Beispiel #14
0
        public bool IsVisible(IController controller)
        {
            if (HeroClass != HeroClass.None && Hud.Game.Me.HeroClassDefinition.HeroClass != HeroClass)
            {
                return(false);
            }
            if (controller.Game.IsInTown && !ShowInTown)
            {
                return(false);
            }
            //return true;
            var visible = true;
            var player  = controller.Game.Me;
            var powers  = player.Powers;

            if (EquippedSkills != null)
            {
                visible = AllEquippedSkills
                    ? EquippedSkills.All(skill => powers.UsedSkills.Any(playerSkill => (skill.Icon.HasValue ? playerSkill.SnoPower.Sno == skill.Sno && playerSkill.Rune == skill.Icon.Value : playerSkill.SnoPower.Sno == skill.Sno) && (!playerSkill.IsOnCooldown || !CheckSkillCooldowns)))
                    : EquippedSkills.Any(skill => powers.UsedSkills.Any(playerSkill => (skill.Icon.HasValue ? playerSkill.SnoPower.Sno == skill.Sno && playerSkill.Rune == skill.Icon.Value : playerSkill.SnoPower.Sno == skill.Sno) && (!playerSkill.IsOnCooldown || !CheckSkillCooldowns)));
            }

            if (visible && MissingSkills != null)
            {
                visible = MissingSkills.Any(skill => powers.UsedSkills.All(playerSkill => playerSkill.SnoPower.Sno != skill.Sno));
            }

            if (visible && EquippedPassives != null)
            {
                visible = EquippedPassives.All(passive => powers.UsedPassives.Any(playerPassive => playerPassive.Sno == passive));
            }

            if (visible && MissingPassives != null)
            {
                visible = MissingPassives.Any(passive => powers.UsedPassives.All(playerPassive => playerPassive.Sno != passive));
            }

            if (visible && ActiveBuffs != null)
            {
                visible = AllActiveBuffs
                    ? ActiveBuffs.All(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno))
                    : ActiveBuffs.Any(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno));
            }
            if (visible && InactiveBuffs != null)
            {
                visible = AllInactiveBuffs
                    ? InactiveBuffs.All(buff => buff.Icon.HasValue ? !powers.BuffIsActive(buff.Sno, buff.Icon.Value) : !powers.BuffIsActive(buff.Sno))
                    : InactiveBuffs.Any(buff => buff.Icon.HasValue ? !powers.BuffIsActive(buff.Sno, buff.Icon.Value) : !powers.BuffIsActive(buff.Sno));
            }

            if (visible && ActorSnoIds != null)
            {
                visible = Hud.Game.Actors.Any(a => ActorSnoIds.Contains(a.SnoActor.Sno));
            }

            if (visible && InvocationActorSnoIds != null)
            {
                visible = !Hud.Game.Actors.Any(a => a.SummonerAcdDynamicId == Hud.Game.Me.SummonerId && InvocationActorSnoIds.Contains(a.SnoActor.Sno));
            }

            if (visible && CustomCondition != null)
            {
                visible = CustomCondition.Invoke(Hud);
            }

            return(visible);
        }