Esempio n. 1
0
 /// <summary>
 /// Send notification to client, when new buff added.
 /// </summary>
 protected override void BuffAdded(ActiveBuff buff)
 {
     if (Client != null)
     {
         SendAddBuff(buff);
     }
     base.BuffAdded(buff);
 }
Esempio n. 2
0
        private void Buff_OnReset(ActiveBuff sender)
        {
            sender.OnReset -= Buff_OnReset;

            _taskQueue.Enqueue(ActionType.REMOVE_BUFF,
                               Id, sender.SkillId, sender.SkillLevel);

            ActiveBuffs.Remove(sender);
        }
Esempio n. 3
0
        /// <summary>
        /// Updates collection of active buffs. Also writes changes to database.
        /// </summary>
        /// <param name="skill">skill, that client sends</param>
        /// <returns>Newly added or updated active buff</returns>
        public ActiveBuff AddActiveBuff(Skill skill)
        {
            var resetTime = DateTime.UtcNow.AddSeconds(skill.KeepTime);
            var buff      = ActiveBuffs.FirstOrDefault(b => b.SkillId == skill.SkillId);

            if (buff != null) // We already have such buff. Try to update reset time.
            {
                if (buff.SkillLevel > skill.SkillLevel)
                {
                    // Do nothing, if character already has higher lvl buff.
                    return(buff);
                }
                else
                {
                    // If bufs are the same level, we should only update reset time.
                    if (buff.SkillLevel == skill.SkillLevel)
                    {
                        _taskQueue.Enqueue(ActionType.UPDATE_BUFF_RESET_TIME,
                                           Id, skill.SkillId, skill.SkillLevel, resetTime);

                        buff.ResetTime = resetTime;

                        // Send update of buff.
                        if (Client != null)
                        {
                            SendAddBuff(buff);
                        }

                        _logger.LogDebug($"Character {Id} got buff {buff.SkillId} of level {buff.SkillLevel}. Buff will be active next {buff.CountDownInSeconds} seconds");
                    }
                }
            }
            else
            {
                // It's a new buff, add it to database.
                _taskQueue.Enqueue(ActionType.SAVE_BUFF,
                                   Id, skill.SkillId, skill.SkillLevel, resetTime);
                buff = new ActiveBuff()
                {
                    SkillId    = skill.SkillId,
                    SkillLevel = skill.SkillLevel,
                    ResetTime  = resetTime
                };
                ActiveBuffs.Add(buff);
                _logger.LogDebug($"Character {Id} got buff {buff.SkillId} of level {buff.SkillLevel}. Buff will be active next {buff.CountDownInSeconds} seconds");
            }

            return(buff);
        }
Esempio n. 4
0
 private void SendTargetRemoveBuff(IKillable target, ActiveBuff buff) => _packetsHelper.SendTargetRemoveBuff(Client, target, buff);
Esempio n. 5
0
 private void SendRemoveBuff(ActiveBuff buff) => _packetsHelper.SendRemoveBuff(Client, buff);