103 lines
No EOL
4.2 KiB
C#
103 lines
No EOL
4.2 KiB
C#
using PhoenixLib.Events;
|
|
using WingsEmu.DTOs.Mates;
|
|
using WingsEmu.Game.Algorithm;
|
|
using WingsEmu.Game.Characters;
|
|
using WingsEmu.Game.Entities;
|
|
using WingsEmu.Game.Managers.StaticData;
|
|
using WingsEmu.Game.Npcs;
|
|
using WingsEmu.Packets.Enums;
|
|
|
|
namespace WingsEmu.Game.Mates;
|
|
|
|
public class MateEntityFactory : IMateEntityFactory
|
|
{
|
|
private readonly IBattleEntityAlgorithmService _algorithm;
|
|
private readonly IAsyncEventPipeline _eventPipeline;
|
|
private readonly IMateTransportFactory _mateTransportFactory;
|
|
private readonly INpcMonsterManager _npcMonsterManager;
|
|
private readonly IRandomGenerator _randomGenerator;
|
|
|
|
public MateEntityFactory(INpcMonsterManager npcMonsterManager, IAsyncEventPipeline eventPipeline, IBattleEntityAlgorithmService algorithm, IRandomGenerator randomGenerator,
|
|
IMateTransportFactory mateTransportFactory)
|
|
{
|
|
_npcMonsterManager = npcMonsterManager;
|
|
_eventPipeline = eventPipeline;
|
|
_algorithm = algorithm;
|
|
_randomGenerator = randomGenerator;
|
|
_mateTransportFactory = mateTransportFactory;
|
|
}
|
|
|
|
public IMateEntity CreateMateEntity(IPlayerEntity owner, MonsterData monsterData, MateType mateType) => CreateMateEntity(owner, monsterData, mateType, 1);
|
|
|
|
public IMateEntity CreateMateEntity(IPlayerEntity playerEntity, MateDTO mateDto)
|
|
{
|
|
var monsterData = new MonsterData(_npcMonsterManager.GetNpc(mateDto.NpcMonsterVNum));
|
|
var mate = new MateEntity(playerEntity, monsterData, mateDto.Level, mateDto.MateType, _mateTransportFactory, _eventPipeline, _algorithm, _randomGenerator)
|
|
{
|
|
Attack = mateDto.Attack,
|
|
CanPickUp = mateDto.CanPickUp,
|
|
CharacterId = mateDto.CharacterId,
|
|
Defence = mateDto.Defence,
|
|
Direction = mateDto.Direction,
|
|
Experience = mateDto.Experience,
|
|
Hp = mateDto.Hp,
|
|
Level = mateDto.Level,
|
|
Loyalty = mateDto.Loyalty,
|
|
Mp = mateDto.Mp,
|
|
MateName = mateDto.MateName,
|
|
Skin = mateDto.Skin,
|
|
IsSummonable = mateDto.IsSummonable,
|
|
MapX = mateDto.MapX,
|
|
MapY = mateDto.MapY,
|
|
MateType = mateDto.MateType,
|
|
PetSlot = mateDto.PetSlot,
|
|
MinilandX = mateDto.MinilandX,
|
|
MinilandY = mateDto.MinilandY,
|
|
IsTeamMember = mateDto.IsTeamMember,
|
|
IsLimited = mateDto.IsLimited
|
|
};
|
|
|
|
return mate;
|
|
}
|
|
|
|
public IMateEntity CreateMateEntity(IPlayerEntity owner, int monsterVnum, MateType mateType)
|
|
{
|
|
IMonsterData monsterData = _npcMonsterManager.GetNpc(monsterVnum);
|
|
return monsterData == null ? null : CreateMateEntity(owner, new MonsterData(monsterData), mateType, 1);
|
|
}
|
|
|
|
public IMateEntity CreateMateEntity(IPlayerEntity owner, MonsterData monsterData, MateType mateType, byte level) => CreateMateEntity(owner, monsterData, mateType, level, false);
|
|
|
|
public IMateEntity CreateMateEntity(IPlayerEntity owner, MonsterData monsterData, MateType mateType, byte level, bool isLimited) =>
|
|
new MateEntity(owner, monsterData, level, mateType, _mateTransportFactory, _eventPipeline, _algorithm, _randomGenerator)
|
|
{
|
|
IsLimited = isLimited
|
|
};
|
|
|
|
public MateDTO CreateMateDto(IMateEntity mateEntity) => new()
|
|
{
|
|
Id = mateEntity.Id,
|
|
Attack = mateEntity.Attack,
|
|
CanPickUp = mateEntity.CanPickUp,
|
|
CharacterId = mateEntity.CharacterId,
|
|
Defence = mateEntity.Defence,
|
|
Direction = mateEntity.Direction,
|
|
Experience = mateEntity.Experience,
|
|
Hp = mateEntity.Hp,
|
|
Level = mateEntity.Level,
|
|
Loyalty = mateEntity.Loyalty,
|
|
Mp = mateEntity.Mp,
|
|
MateName = mateEntity.MateName,
|
|
Skin = mateEntity.Skin,
|
|
IsSummonable = mateEntity.IsSummonable,
|
|
MapX = mateEntity.MapX,
|
|
MapY = mateEntity.MapY,
|
|
MateType = mateEntity.MateType,
|
|
PetSlot = mateEntity.PetSlot,
|
|
MinilandX = mateEntity.MinilandX,
|
|
MinilandY = mateEntity.MinilandY,
|
|
IsTeamMember = mateEntity.IsTeamMember,
|
|
NpcMonsterVNum = mateEntity.NpcMonsterVNum,
|
|
IsLimited = mateEntity.IsLimited
|
|
};
|
|
} |