|
| 1 | +using System.Diagnostics; |
| 2 | +using System.Xml; |
| 3 | +using System.Xml.Serialization; |
| 4 | +using Maple2.File.IO; |
| 5 | +using Maple2.File.IO.Crypto.Common; |
| 6 | +using Maple2.File.Parser.Xml.String; |
| 7 | + |
| 8 | +namespace Maple2.File.Parser; |
| 9 | + |
| 10 | +public class BanWordParser { |
| 11 | + private readonly M2dReader xmlReader; |
| 12 | + private readonly XmlSerializer nameSerializer; |
| 13 | + |
| 14 | + public BanWordParser(M2dReader xmlReader) { |
| 15 | + this.xmlReader = xmlReader; |
| 16 | + nameSerializer = new XmlSerializer(typeof(StringMapping)); |
| 17 | + } |
| 18 | + |
| 19 | + public IEnumerable<(int Id, string Name)> ParseBanWords() { |
| 20 | + int i = 0; |
| 21 | + foreach (PackFileEntry entry in xmlReader.Files.Where(entry => entry.Name.Contains("banword") && !entry.Name.Contains("ugc"))) { |
| 22 | + XmlReader reader = xmlReader.GetXmlReader(entry); |
| 23 | + var mapping = nameSerializer.Deserialize(reader) as StringMapping; |
| 24 | + |
| 25 | + Debug.Assert(mapping != null); |
| 26 | + |
| 27 | + Dictionary<int, string> banWords = mapping.key.ToDictionary(_ => i++, key => key.name); |
| 28 | + foreach (var banWord in banWords) { |
| 29 | + if (string.IsNullOrEmpty(banWord.Value)) { |
| 30 | + continue; |
| 31 | + } |
| 32 | + yield return (banWord.Key, banWord.Value); |
| 33 | + } |
| 34 | + } |
| 35 | + } |
| 36 | + |
| 37 | + public IEnumerable<(int Id, string Name)> ParseUgcBanWords() { |
| 38 | + int i = 0; |
| 39 | + foreach (PackFileEntry entry in xmlReader.Files.Where(entry => entry.Name.Contains("ugcbanword"))) { |
| 40 | + XmlReader reader = xmlReader.GetXmlReader(entry); |
| 41 | + var mapping = nameSerializer.Deserialize(reader) as StringMapping; |
| 42 | + |
| 43 | + Debug.Assert(mapping != null); |
| 44 | + |
| 45 | + Dictionary<int, string> banWords = mapping.key.ToDictionary(_ => i++, key => key.name); |
| 46 | + foreach (var banWord in banWords) { |
| 47 | + if (string.IsNullOrEmpty(banWord.Value)) { |
| 48 | + continue; |
| 49 | + } |
| 50 | + yield return (banWord.Key, banWord.Value); |
| 51 | + } |
| 52 | + } |
| 53 | + } |
| 54 | +} |
0 commit comments