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

42 lines
No EOL
1.4 KiB
C#

using System.Collections.Concurrent;
using System.Collections.Generic;
namespace WingsEmu.Game.Configurations;
public interface IMonsterTalkingConfig
{
bool HasPossibleMessages(int monsterVnum);
IReadOnlyList<string> PossibleMessage(int monsterVnum);
}
public class MonsterTalkingConfig : IMonsterTalkingConfig
{
private readonly ConcurrentDictionary<int, List<string>> _monsterMessage = new();
private readonly HashSet<int> _monstersWithMessage = new();
public MonsterTalkingConfig(IEnumerable<MonsterTalkingConfiguration> configurations)
{
foreach (MonsterTalkingConfiguration config in configurations)
{
if (config?.PossibleMessages == null || config.MobVnums == null)
{
continue;
}
foreach (int mobVnum in config.MobVnums)
{
_monstersWithMessage.Add(mobVnum);
_monsterMessage.TryAdd(mobVnum, config.PossibleMessages);
}
}
}
public bool HasPossibleMessages(int monsterVnum) => _monstersWithMessage.Contains(monsterVnum);
public IReadOnlyList<string> PossibleMessage(int monsterVnum) => _monsterMessage.TryGetValue(monsterVnum, out List<string> list) ? list : null;
}
public class MonsterTalkingConfiguration
{
public List<string> PossibleMessages { get; set; }
public List<int> MobVnums { get; set; }
}