/
NLObP
/
AAEmu
Обзор
Документация
Войти
/
NLObP
/
AAEmu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
AAEmu.Game/Models/Game/Skills/BuffModifiers.cs
123 строки
4 KB
Roger Barreto
Collection expressions check + blank lines update (#1110)
11 дек 2024, 19:38
Не верифицирован
11 дек 2024, 19:38
0ce5643
Код
Авторство
О чём код?
using System.Collections.Generic; using System.Linq; using AAEmu.Game.Core.Managers; using AAEmu.Game.GameData; using AAEmu.Game.Models.Game.Skills.Static; using AAEmu.Game.Models.Game.Skills.Templates; using AAEmu.Game.Models.Game.Units; namespace AAEmu.Game.Models.Game.Skills; public class BuffModifiers { private Dictionary<uint, List<BuffModifier>> _modifiersByBuffId; private Dictionary<uint, List<BuffModifier>> _modifiersByTagId; public BuffModifiers() { _modifiersByBuffId = []; _modifiersByTagId = []; } public double ApplyModifiers(BuffTemplate buff, BuffAttribute attribute, double baseValue) { double endValue = baseValue; var modifiers = GetModifiersForBuffIdWithAttribute(buff.Id, attribute).OrderBy(mod => mod.UnitModifierType).ToList(); foreach (var tag in SkillManager.Instance.GetBuffTags(buff.Id)) { modifiers.AddRange(GetModifiersForTagIdWithAttribute(tag, attribute)); } foreach (var modifier in modifiers) { switch (modifier.UnitModifierType) { case UnitModifierType.Percent: endValue += (endValue * (modifier.Value / 100.0f)); break; case UnitModifierType.Value: endValue += modifier.Value; break; } } return endValue; } public List<BuffModifier> GetModifiersForBuffIdWithAttribute(uint skillId, BuffAttribute attribute) { var modifiers = GetModifiersForBuffId(skillId); if (modifiers == null) return []; return modifiers.Where(mod => mod.BuffAttribute == attribute).ToList(); } public List<BuffModifier> GetModifiersForTagIdWithAttribute(uint tagId, BuffAttribute attribute) { var modifiers = GetModifiersForTagId(tagId); if (modifiers == null) return []; return modifiers.Where(mod => mod.BuffAttribute == attribute).ToList(); } public List<BuffModifier> GetModifiersForBuffId(uint skillId) { if (_modifiersByBuffId.TryGetValue(skillId, out var id)) return id; return null; } public List<BuffModifier> GetModifiersForTagId(uint tagId) { if (_modifiersByTagId.TryGetValue(tagId, out var id)) return id; return null; } public void AddModifiers(uint ownerId) { var modifiers = BuffGameData.Instance.GetModifiersForBuff(ownerId); if (modifiers != null) { foreach (var modifier in modifiers) { AddModifier(modifier); } } } public void RemoveModifiers(uint ownerId) { var modifiers = BuffGameData.Instance.GetModifiersForBuff(ownerId); foreach (var modifier in modifiers) { RemoveModifier(modifier); } } public void AddModifier(BuffModifier modifier) { if (modifier.BuffId > 0) { if (!_modifiersByBuffId.ContainsKey(modifier.BuffId)) _modifiersByBuffId.Add(modifier.BuffId, []); _modifiersByBuffId[modifier.BuffId].Add(modifier); } if (modifier.TagId > 0) { if (!_modifiersByTagId.ContainsKey(modifier.TagId)) _modifiersByTagId.Add(modifier.TagId, []); _modifiersByTagId[modifier.TagId].Add(modifier); } } public void RemoveModifier(BuffModifier modifier) { if (_modifiersByBuffId.TryGetValue(modifier.BuffId, out var buffsById)) buffsById.Remove(modifier); if (_modifiersByTagId.TryGetValue(modifier.TagId, out var buffsByTag)) buffsByTag.Remove(modifier); } }