100 lines
No EOL
4.6 KiB
C#
100 lines
No EOL
4.6 KiB
C#
using System;
|
|
using WingsEmu.Game._enum;
|
|
using WingsEmu.Game.Battle;
|
|
using WingsEmu.Game.Entities;
|
|
using WingsEmu.Game.Managers.StaticData;
|
|
using WingsEmu.Packets.Enums;
|
|
|
|
namespace WingsEmu.Game.Buffs;
|
|
|
|
public class BuffFactory : IBuffFactory
|
|
{
|
|
private readonly IBuffsDurationConfiguration _buffsDurationConfiguration;
|
|
private readonly ICardsManager _cardsManager;
|
|
private readonly IRandomGenerator _randomGenerator;
|
|
|
|
public BuffFactory(ICardsManager cardsManager, IRandomGenerator randomGenerator, IBuffsDurationConfiguration buffsDurationConfiguration)
|
|
{
|
|
_cardsManager = cardsManager;
|
|
_randomGenerator = randomGenerator;
|
|
_buffsDurationConfiguration = buffsDurationConfiguration;
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, bool forceCreationStats = false) => CreateBuff(cardId, caster, BuffFlag.NORMAL);
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, TimeSpan duration, BuffFlag buffFlag, bool forceCreationStats = false)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
return card == null ? null : CreateBuff(cardId, caster, caster.Level, duration, buffFlag, BuffGroup.Neutral, BuffCategory.GeneralEffect, forceCreationStats);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, BuffGroup buffGroup, BuffFlag buffFlag, bool forceCreationStats = false)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
return card == null ? null : CreateBuff(cardId, caster, caster.Level, TimeSpan.FromMilliseconds(card.Duration * 100), buffFlag, buffGroup, card.BuffCategory, forceCreationStats);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, BuffFlag buffFlags, bool forceCreationStats = false)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
return card == null
|
|
? null
|
|
: CreateBuff(cardId, caster, caster.Level, TimeSpan.FromMilliseconds(card.Duration * 100), buffFlags, (BuffGroup)card.BuffType, card.BuffCategory, forceCreationStats);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, BuffGroup buffGroup, BuffCategory buffCategory, bool forceCreationStats = false)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
return card == null ? null : CreateBuff(cardId, caster, caster.Level, TimeSpan.FromMilliseconds(card.Duration * 100), BuffFlag.NORMAL, buffGroup, buffCategory, forceCreationStats);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, int level, TimeSpan duration, BuffFlag buffCategory, bool forceCreationStats = false) =>
|
|
CreateBuff(cardId, caster, level, duration, buffCategory, BuffGroup.Neutral, BuffCategory.GeneralEffect, forceCreationStats);
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, TimeSpan duration, bool forceCreationStats = false)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
return card == null ? null : CreateBuff(cardId, caster, caster.Level, duration, BuffFlag.NORMAL, (BuffGroup)card.BuffType, card.BuffCategory, forceCreationStats);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, IBattleEntity caster, int level, TimeSpan duration, BuffFlag buffFlags, BuffGroup buffGroup, BuffCategory buffCategory, bool forceCreationStats)
|
|
{
|
|
Card card = _cardsManager.GetCardByCardId((short)cardId);
|
|
if (card == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
BuffDuration randomDuration = _buffsDurationConfiguration.GetBuffDurationById(cardId);
|
|
if (randomDuration != null && !forceCreationStats)
|
|
{
|
|
duration = TimeSpan.FromMilliseconds(_randomGenerator.RandomNumber(randomDuration.MinDuration, randomDuration.MaxDuration + 1));
|
|
buffFlags = randomDuration.IsPermanent ? BuffFlag.BIG | BuffFlag.NO_DURATION : buffFlags;
|
|
}
|
|
|
|
return new Buff(
|
|
Guid.NewGuid(),
|
|
card.Id,
|
|
card.Level,
|
|
duration,
|
|
card.EffectId,
|
|
card.Name,
|
|
card.TimeoutBuff,
|
|
buffGroup,
|
|
card.TimeoutBuffChance,
|
|
card.SecondBCardsDelay,
|
|
card.GroupId,
|
|
buffCategory,
|
|
DateTime.UtcNow,
|
|
buffFlags,
|
|
card.BCards,
|
|
card.IsConstEffect,
|
|
(ElementType)card.ElementType,
|
|
level,
|
|
caster
|
|
);
|
|
}
|
|
|
|
public Buff CreateBuff(int cardId, int level, TimeSpan duration, BuffFlag buffCategory, bool forceCreationStats = false) =>
|
|
CreateBuff(cardId, null, level, duration, buffCategory, BuffGroup.Neutral, BuffCategory.GeneralEffect, forceCreationStats);
|
|
} |