server-master/srcs/WingsAPI.Game/Mates/MateEntityFactory.cs
2026-02-10 18:21:30 +01:00

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
};
}