server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/ServerConfigs/ImportObjects/ImportObjectExtensions.cs
2026-02-10 18:21:30 +01:00

265 lines
No EOL
8.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using WingsAPI.Data.Drops;
using WingsAPI.Data.Shops;
using WingsEmu.DTOs.Maps;
using WingsEmu.DTOs.Recipes;
using WingsEmu.DTOs.ServerDatas;
using WingsEmu.DTOs.Shops;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Drops;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.ItemBoxes;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Maps;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Monsters;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Npcs;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Portals;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Recipes;
using WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects.Teleporters;
namespace WingsEmu.Plugins.BasicImplementations.ServerConfigs.ImportObjects;
public static class ImportObjectExtensions
{
public static List<DropDTO> ToDto(this DropObject obj)
{
var drops = new List<DropDTO>();
if (obj.MonsterVnums != null)
{
drops.AddRange(obj.MonsterVnums.Select(vnum => new DropDTO
{
Amount = obj.Quantity,
DropChance = obj.Chance,
ItemVNum = obj.ItemVNum,
MonsterVNum = vnum
}));
}
if (obj.MapIds != null)
{
drops.AddRange(obj.MapIds.Select(mapId => new DropDTO
{
Amount = obj.Quantity,
DropChance = obj.Chance,
ItemVNum = obj.ItemVNum,
MapId = mapId
}));
}
if (obj.Races != null)
{
drops.AddRange(obj.Races.Select(raceDrop => new DropDTO
{
Amount = obj.Quantity,
DropChance = obj.Chance,
ItemVNum = obj.ItemVNum,
RaceType = raceDrop[0],
RaceSubType = raceDrop[1]
}));
}
if (obj.MonsterVnums?.Any() != false || obj.MapIds?.Any() != false || obj.Races?.Any() != false)
{
return drops;
}
drops.Add(new DropDTO
{
Amount = obj.Quantity,
DropChance = obj.Chance,
ItemVNum = obj.ItemVNum
});
return drops;
}
public static PortalDTO ToDto(this PortalObject portal) =>
new PortalDTO
{
Type = portal.Type,
DestinationMapId = portal.DestinationMapId,
DestinationX = portal.DestinationX,
DestinationY = portal.DestinationY,
IsDisabled = portal.IsDisabled,
SourceX = portal.SourceX,
SourceY = portal.SourceY,
SourceMapId = portal.SourceMapId,
RaidType = portal.RaidType,
MapNameId = portal.MapNameId
};
public static ServerMapDto ToDto(this ConfiguredMapObject toDto) =>
new ServerMapDto
{
Id = toDto.MapId,
AmbientId = toDto.AmbientId,
MapVnum = toDto.MapVnum,
MusicId = toDto.MusicId,
NameId = toDto.NameId,
Flags = toDto.Flags ?? new List<MapFlags>()
};
public static ItemBoxDto ToDtos(this RandomBoxObject obj)
{
if (obj.Categories.Count < 0)
{
return null;
}
var list = new List<ItemBoxItemDto>();
int i = 0;
foreach (RandomBoxCategory category in obj.Categories)
{
if (category.Items == null || !category.Items.Any())
{
continue;
}
i++;
foreach (RandomBoxItem item in category.Items)
{
list.Add(new ItemBoxItemDto
{
ItemGeneratedAmount = (short)item.Quantity,
ItemGeneratedUpgrade = item.Upgrade,
ItemGeneratedVNum = (short)item.ItemVnum,
ItemGeneratedRandomRarity = item.RandomRarity,
MaximumOriginalItemRare = item.MaximumRandomRarity,
MinimumOriginalItemRare = item.MinimumRandomRarity,
Probability = (short)category.Chance
});
}
}
return new ItemBoxDto
{
Id = obj.ItemVnum,
MinimumRewards = obj.MinimumRewards,
MaximumRewards = obj.MaximumRewards,
ItemBoxType = ItemBoxType.RANDOM_PICK,
ShowsRaidBoxPanelOnOpen = obj.HideRewardInfo == false,
Items = list
};
}
public static ItemBoxDto ToDto(this ItemBoxImportFile obj)
{
var list = new List<ItemBoxItemDto>();
if (obj.Items.Count == 0)
{
return null;
}
foreach (RandomBoxItem item in obj.Items)
{
list.Add(new ItemBoxItemDto
{
ItemGeneratedAmount = (short)item.Quantity,
ItemGeneratedUpgrade = item.Upgrade,
ItemGeneratedVNum = (short)item.ItemVnum,
ItemGeneratedRandomRarity = item.RandomRarity,
MaximumOriginalItemRare = item.MaximumRandomRarity,
MinimumOriginalItemRare = item.MinimumRandomRarity
});
}
return new ItemBoxDto
{
Id = obj.ItemVnum,
MinimumRewards = obj.MinimumRewards,
MaximumRewards = obj.MaximumRewards,
ItemBoxType = ItemBoxType.BUNDLE,
ShowsRaidBoxPanelOnOpen = obj.ShowRaidBoxModalOnOpen,
Items = list
};
}
public static ShopSkillDTO ToDto(this MapNpcShopSkillObject obj, byte tabId, short position) => new()
{
SkillVNum = obj.SkillVnum,
Type = tabId,
Slot = position
};
public static RecipeDTO ToDto(this RecipeObject obj) => new()
{
ProducedItemVnum = obj.ItemVnum,
Amount = obj.Quantity,
ProducerNpcVnum = obj.ProducerNpcVnum,
ProducerMapNpcId = obj.ProducerMapNpcId,
ProducerItemVnum = obj.ProducerItemVnum
};
public static RecipeItemDTO ToDto(this RecipeItemObject obj, short slot) => new()
{
ItemVNum = obj.ItemVnum,
Slot = slot,
Amount = obj.Quantity
};
public static ShopItemDTO ToDto(this MapNpcShopItemObject obj, byte shopType, short position) =>
new()
{
Type = shopType,
ItemVNum = (short)obj.ItemVnum,
Rare = obj.Rarity,
Slot = position,
Upgrade = obj.Upgrade,
Price = obj.Price,
Color = obj.Design
};
public static ShopDTO ToDto<T>(this MapNpcShopObject<T> shop) =>
new()
{
Name = shop.Name,
MenuType = shop.MenuType,
ShopType = shop.ShopType
};
public static MapNpcDTO ToDto(this MapNpcObject obj) =>
new()
{
Id = obj.MapNpcId,
NpcVNum = (short)obj.NpcMonsterVnum,
MapX = obj.PosX,
MapY = obj.PosY,
MapId = obj.MapId,
Dialog = (short)obj.DialogId,
QuestDialog = obj.QuestDialog,
Effect = (short)obj.Effect,
EffectDelay = (short)obj.EffectDelay,
Direction = obj.Direction,
IsMoving = obj.IsMoving,
IsSitting = obj.IsSitting,
IsDisabled = obj.IsDisabled,
CanAttack = obj.CanAttack,
HasGodMode = obj.HasGodMode,
CustomName = obj.CustomName
};
public static TeleporterDTO ToDto(this TeleporterObject teleporterObject) => new()
{
Index = teleporterObject.Index,
Type = teleporterObject.Type,
MapId = teleporterObject.MapId,
MapNpcId = teleporterObject.MapNpcId,
MapX = teleporterObject.MapX,
MapY = teleporterObject.MapY
};
public static MapMonsterDTO ToDto(this MapMonsterObject obj) => new()
{
MapId = obj.MapId,
MonsterVNum = obj.MonsterVNum,
Direction = obj.Position,
MapX = obj.MapX,
MapY = obj.MapY,
IsMoving = obj.IsMoving
};
}