Elin Decompiled Documentation EA 23.317 Nightly
Loading...
Searching...
No Matches
ModPackage.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Linq;
5using NPOI.SS.UserModel;
6using NPOI.XSSF.UserModel;
7using Newtonsoft.Json;
8using UnityEngine;
9
10public class ModPackage : EMod
11{
12 public struct SheetIndex
13 {
14 public int dest;
15
16 public int old;
17 }
18
19 public void CopyContentTo(string dir)
20 {
21 IO.DeleteDirectory(dir);
22 IO.CopyAll(dirInfo.FullName, dir);
23 EClass.ui.Say(dir);
24 }
25
26 public IReadOnlyList<FileInfo> ParseTalkText(DirectoryInfo dir)
27 {
28 List<FileInfo> list = new List<FileInfo>();
29 FileInfo[] files = dir.GetFiles("*.xlsx", SearchOption.TopDirectoryOnly);
30 foreach (FileInfo fileInfo in files)
31 {
32 ExcelData excelData = new ExcelData(fileInfo.FullName);
33 TalkText.modList.Add(excelData);
34 talkTexts.Add(excelData);
35 list.Add(fileInfo);
36 }
37 if (list.Count > 0)
38 {
39 Debug.Log($"TalkText: {talkTexts.Count}");
40 }
41 return list;
42 }
43
44 public IReadOnlyList<FileInfo> ParseMap(DirectoryInfo dir, bool addToList = true)
45 {
46 List<FileInfo> list = new List<FileInfo>();
47 FileInfo[] files = dir.GetFiles("*.z", SearchOption.TopDirectoryOnly);
48 foreach (FileInfo fileInfo in files)
49 {
50 string key = Path.ChangeExtension(fileInfo.Name, null);
51 if (addToList)
52 {
53 MOD.listMaps.Add(fileInfo);
54 }
55 maps[key] = fileInfo;
56 list.Add(fileInfo);
57 }
58 if (list.Count > 0)
59 {
60 Debug.Log($"Map: {maps.Count}");
61 }
62 return list;
63 }
64
65 public IReadOnlyList<FileInfo> ParseMapPiece(DirectoryInfo dir, bool addToList = true)
66 {
67 List<FileInfo> list = new List<FileInfo>();
68 FileInfo[] files = dir.GetFiles("*.mp", SearchOption.TopDirectoryOnly);
69 foreach (FileInfo fileInfo in files)
70 {
71 string key = Path.ChangeExtension(fileInfo.Name, null);
72 if (addToList)
73 {
74 MOD.listPartialMaps.Add(fileInfo);
75 }
76 partialMaps[key] = fileInfo;
77 list.Add(fileInfo);
78 }
79 if (list.Count > 0)
80 {
81 Debug.Log($"PartialMap: {partialMaps.Count}");
82 }
83 return list;
84 }
85
86 public IReadOnlyList<FileInfo> ParseTextureReplace(DirectoryInfo dir)
87 {
88 List<FileInfo> list = new List<FileInfo>();
89 FileInfo[] files = dir.GetFiles("*.png", SearchOption.TopDirectoryOnly);
90 foreach (FileInfo fileInfo in files)
91 {
92 string key = Path.ChangeExtension(fileInfo.Name, null);
93 textureReplaces[key] = fileInfo;
94 list.Add(fileInfo);
95 }
96 if (list.Count > 0)
97 {
98 Debug.Log($"Texture Replace: {textureReplaces.Count}");
99 }
100 return list;
101 }
102
103 public IReadOnlyList<FileInfo> ParseTexture(DirectoryInfo dir)
104 {
105 List<FileInfo> list = new List<FileInfo>();
106 FileInfo[] files = dir.GetFiles("*.png", SearchOption.AllDirectories);
107 foreach (FileInfo fileInfo in files)
108 {
109 string key = Path.ChangeExtension(Path.GetRelativePath(dir.FullName, fileInfo.FullName).NormalizePath(), null);
110 string text = Path.ChangeExtension(fileInfo.FullName, null);
111 Dictionary<string, string> dictModItems = SpriteReplacer.dictModItems;
112 string value = (textures[key] = text);
113 dictModItems[key] = value;
114 list.Add(fileInfo);
115 }
116 if (list.Count > 0)
117 {
118 Debug.Log($"Texture: {textures.Count}");
119 }
120 return list;
121 }
122
123 public IReadOnlyList<FileInfo> ParsePortrait(DirectoryInfo dir)
124 {
125 List<FileInfo> list = new List<FileInfo>();
126 FileInfo[] files = dir.GetFiles("*.png", SearchOption.TopDirectoryOnly);
127 foreach (FileInfo fileInfo in files)
128 {
129 string name = fileInfo.Name;
130 if (name.StartsWith("BG_", StringComparison.Ordinal))
131 {
132 Portrait.modPortraitBGs.Add(fileInfo);
133 }
134 else if (name.StartsWith("BGF_", StringComparison.Ordinal))
135 {
136 Portrait.modPortraitBGFs.Add(fileInfo);
137 }
138 else if (name.EndsWith("-full.png", StringComparison.Ordinal))
139 {
140 Portrait.modFull.Add(fileInfo);
141 }
142 else if (name.EndsWith("-overlay.png", StringComparison.Ordinal))
143 {
144 Portrait.modOverlays.Add(fileInfo);
145 }
146 else
147 {
148 Portrait.modPortraits.Add(fileInfo);
149 }
150 Portrait.allIds.Add(name);
151 portraits[name] = fileInfo;
152 list.Add(fileInfo);
153 }
154 if (list.Count > 0)
155 {
156 Debug.Log($"Portrait: {portraits.Count}");
157 }
158 return list;
159 }
160
161 public void ParseLangMod(DirectoryInfo dir)
162 {
163 if (Mapping == null)
164 {
165 Mapping = new FileMapping(dir.Parent);
166 }
167 Mapping.RebuildLangModMapping(EClass.core.config?.lang ?? EClass.core.debug.langCode.ToString());
168 Lang.excelDialog = null;
169 Debug.Log("LangMod: " + string.Join(", ", Mapping.OrderedLangMods));
170 if (Mapping.SourceSheets.Count > 0)
171 {
172 Debug.Log($"Source Sheets: {Mapping.SourceSheets.Count}, {Mapping.SourceLangMod}");
173 }
174 }
175
176 public IReadOnlyList<FileInfo> ParseSound(DirectoryInfo dir)
177 {
178 List<FileInfo> list = new List<FileInfo>();
179 FileInfo[] files = dir.GetFiles("*.*", SearchOption.AllDirectories);
180 foreach (FileInfo fileInfo in files)
181 {
182 if (ModUtil.GetAudioType(fileInfo.Extension) != 0)
183 {
184 string key = Path.ChangeExtension(Path.GetRelativePath(dir.FullName, fileInfo.FullName).NormalizePath(), null);
185 Dictionary<string, FileInfo> dictionary = MOD.sounds;
186 FileInfo value = (sounds[key] = fileInfo);
187 dictionary[key] = value;
188 list.Add(fileInfo);
189 }
190 }
191 if (list.Count > 0)
192 {
193 Debug.Log($"Sound: {sounds.Count}");
194 }
195 int num = sounds.Keys.Count((string k) => k.StartsWith("BGM/"));
196 if (num > 0)
197 {
198 Debug.Log($"BGM: {num}");
199 }
200 return list;
201 }
202
203 public override void GenerateCustomContentProfiles()
204 {
205 customContent.Clear();
206 foreach (SourceData.BaseRow sourceRow in sourceRows)
207 {
208 if (!(sourceRow is SourceChara.Row r))
209 {
210 if (!(sourceRow is SourceReligion.Row row))
211 {
212 if (!(sourceRow is SourceZone.Row r2))
213 {
214 if (!(sourceRow is SourceElement.Row r3))
215 {
216 if (!(sourceRow is SourceMaterial.Row r4))
217 {
218 if (!(sourceRow is SourceStat.Row r5))
219 {
220 if (!(sourceRow is SourceThing.Row r6))
221 {
222 if (!(sourceRow is SourceFaction.Row) && sourceRow is SourceQuest.Row)
223 {
224 }
225 }
226 else
227 {
228 customContent.Add(CustomThingContent.CreateFromRow(r6, this));
229 }
230 }
231 else
232 {
233 customContent.Add(CustomStatContent.CreateFromRow(r5, this));
234 }
235 }
236 else
237 {
238 customContent.Add(CustomMaterialContent.CreateFromRow(r4, this));
239 }
240 }
241 else
242 {
243 customContent.Add(CustomElementContent.CreateFromRow(r3, this));
244 }
245 }
246 else
247 {
248 customContent.Add(CustomZoneContent.CreateFromRow(r2, this));
249 }
250 }
251 else if (row.id.StartsWith("cwl") || row.id.StartsWith("custom"))
252 {
253 customContent.Add(CustomReligionContent.CreateFromRow(row, this));
254 }
255 }
256 else
257 {
258 ModUtil.FixDefaultCharaRowPref(r);
259 customContent.Add(CustomCharaContent.CreateFromRow(r, this));
260 }
261 }
262 customContent.RemoveAll((ICustomContent p) => p == null);
263 }
264
265 public override SortedDictionary<string, string> ExportSourceLocalizations()
266 {
267 SortedDictionary<string, string> sortedDictionary = new SortedDictionary<string, string>();
268 try
269 {
270 foreach (SourceData.BaseRow sourceRow in sourceRows)
271 {
272 foreach (KeyValuePair<string, string> item in sourceRow.ExportTexts(sourceRow.UseAlias ? "alias" : "id"))
273 {
274 item.Deconstruct(out var key, out var value);
275 string key2 = key;
276 string value2 = value;
277 sortedDictionary[key2] = value2;
278 }
279 }
280 }
281 catch (Exception arg)
282 {
283 Debug.LogError($"#source failed to export localization for {title}/{id}\n{arg}");
284 }
285 return sortedDictionary;
286 }
287
288 public override void ImportSourceLocalizations(IReadOnlyDictionary<string, string> texts)
289 {
290 foreach (SourceData.BaseRow sourceRow in sourceRows)
291 {
292 sourceRow.ImportTexts(texts, sourceRow.UseAlias ? "alias" : "id");
293 }
294 }
295
296 public override void ClearSourceLocalizations(string lang)
297 {
298 Mapping.RebuildLangModMapping(lang);
299 for (FileInfo fileInfo = Mapping.RelocateFile("SourceLocalization.json"); fileInfo != null; fileInfo = Mapping.RelocateFile("SourceLocalization.json"))
300 {
301 fileInfo.Delete();
302 Debug.Log("#source-localization deleted " + fileInfo.ShortPath());
303 }
304 Mapping.RebuildLangModMapping(Lang.langCode);
305 }
306
307 public override string UpdateSourceLocalizationFile(string lang, bool force = false)
308 {
309 if (!base.IsSourceLocalizable)
310 {
311 return null;
312 }
313 IReadOnlyDictionary<string, string> modEntries = SourceLocalization.GetModEntries(id, lang);
314 SortedDictionary<string, string> sortedDictionary = ExportSourceLocalizations();
315 SortedDictionary<string, string> final = new SortedDictionary<string, string>();
316 foreach (var (key, defaultValue) in sortedDictionary)
317 {
318 final[key] = modEntries.GetValueOrDefault(key, defaultValue);
319 }
320 string text3 = Path.Combine(dirInfo.FullName, "LangMod/" + lang + "/SourceLocalization.json");
321 if (force || modEntries.Count != final.Count || modEntries.Any((KeyValuePair<string, string> kv) => !final.ContainsKey(kv.Key)))
322 {
323 JsonSerializerSettings setting = new JsonSerializerSettings
324 {
325 PreserveReferencesHandling = PreserveReferencesHandling.None,
326 NullValueHandling = NullValueHandling.Ignore
327 };
328 IO.SaveFile(text3, final, compress: false, setting);
329 SourceLocalization.UpdateModEntries(id, lang, final);
330 }
331 return text3;
332 }
333
334 public void AddOrUpdateLang(DirectoryInfo dir)
335 {
336 Core core = EClass.core;
337 SourceManager sources = core.sources;
338 DirectoryInfo[] directories = dir.GetDirectories();
339 foreach (DirectoryInfo directoryInfo in directories)
340 {
341 if (!directoryInfo.Name.StartsWith("_") && !TryAddLang(directoryInfo, isNew: false))
342 {
343 Debug.Log("Generating Language Mod Contents:" + directoryInfo.FullName);
344 IO.CopyDir(CorePath.packageCore + "Lang/EN", directoryInfo.FullName);
345 Directory.CreateDirectory(directoryInfo.FullName + "/Dialog");
346 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", directoryInfo.FullName + "/Dialog");
347 sources.ExportSourceTexts(directoryInfo.FullName + "/Game");
348 IO.Copy(CorePath.packageCore + "Lang/lang.ini", directoryInfo.FullName + "/");
349 TryAddLang(directoryInfo, isNew: true);
350 }
351 }
352 bool TryAddLang(DirectoryInfo dirLang, bool isNew)
353 {
354 string name = dirLang.Name;
355 FileInfo[] files = dirLang.GetFiles();
356 foreach (FileInfo fileInfo in files)
357 {
358 if (fileInfo.Name == "lang.ini")
359 {
360 LangSetting langSetting = new LangSetting(fileInfo.FullName)
361 {
362 id = name,
363 dir = dirLang.FullName + "/"
364 };
365 if (isNew)
366 {
367 langSetting.SetVersion();
368 }
369 else if ((Application.isEditor || Lang.runUpdate) && !Lang.IsBuiltin(dirLang.Name) && langSetting.GetVersion() < core.version.GetInt())
370 {
371 sources.Init();
372 Log.system = "Updated Language Files:" + Environment.NewLine + Environment.NewLine;
373 Debug.Log("Updating Language:" + langSetting.name + "/" + langSetting.GetVersion() + "/" + core.version.GetInt());
374 string text = dirLang.FullName + "/Game";
375 Directory.Move(text, text + "_temp");
376 sources.ExportSourceTexts(text);
377 sources.UpdateSourceTexts(text);
378 IO.DeleteDirectory(text + "_temp");
379 text = dirLang.FullName + "/Dialog";
380 Directory.Move(text, text + "_temp");
381 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", text);
382 UpdateDialogs(new DirectoryInfo(text), text + "_temp");
383 IO.DeleteDirectory(text + "_temp");
384 text = dirLang.FullName + "/Data";
385 IO.CopyDir(text, text + "_temp");
386 IO.Copy(CorePath.packageCore + "Lang/EN/Data/god_talk.xlsx", text);
387 IO.Copy(CorePath.packageCore + "Lang/EN/Data/chara_talk.xlsx", text);
388 UpdateTalks(new DirectoryInfo(text), text + "_temp");
389 IO.DeleteDirectory(text + "_temp");
390 langSetting.SetVersion();
391 IO.SaveText(dirLang.FullName + "/update.txt", Log.system);
392 }
393 MOD.langs[name] = langSetting;
394 return true;
395 }
396 }
397 return false;
398 }
399 }
400
401 public void UpdateDialogs(DirectoryInfo dir, string dirTemp)
402 {
403 DirectoryInfo[] directories = dir.GetDirectories();
404 foreach (DirectoryInfo directoryInfo in directories)
405 {
406 UpdateDialogs(directoryInfo, dirTemp + "/" + directoryInfo.Name);
407 }
408 FileInfo[] files = dir.GetFiles();
409 foreach (FileInfo fileInfo in files)
410 {
411 if (fileInfo.Name.EndsWith("xlsx"))
412 {
413 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: true);
414 }
415 }
416 }
417
418 public void UpdateTalks(DirectoryInfo dir, string dirTemp)
419 {
420 FileInfo[] files = dir.GetFiles();
421 foreach (FileInfo fileInfo in files)
422 {
423 if (fileInfo.Name == "god_talk.xlsx" || fileInfo.Name == "chara_talk.xlsx")
424 {
425 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: false);
426 }
427 }
428 }
429
430 public void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
431 {
432 string path = dirTemp + "/" + f.Name;
433 if (!File.Exists(path))
434 {
435 return;
436 }
437 XSSFWorkbook xSSFWorkbook;
438 using (FileStream @is = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
439 {
440 xSSFWorkbook = new XSSFWorkbook((Stream)@is);
441 }
442 XSSFWorkbook xSSFWorkbook2;
443 using (FileStream is2 = File.Open(f.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
444 {
445 xSSFWorkbook2 = new XSSFWorkbook((Stream)is2);
446 }
447 for (int i = 0; i < xSSFWorkbook2.NumberOfSheets; i++)
448 {
449 ISheet sheetAt = xSSFWorkbook2.GetSheetAt(i);
450 ISheet sheet = xSSFWorkbook.GetSheet(sheetAt.SheetName);
451 if (sheet == null)
452 {
453 Log.system = Log.system + "Old sheet not found:" + sheetAt.SheetName + Environment.NewLine;
454 continue;
455 }
456 int num = UpdateExcelSheet(sheetAt, sheet, updateOnlyText);
457 Log.system = Log.system + ((num == 0) ? "(No Changes) " : "(Updated) ") + f.FullName + "(" + sheetAt.SheetName + ")" + Environment.NewLine;
458 if (num != 0)
459 {
460 Log.system = Log.system + num + Environment.NewLine;
461 }
462 Log.system += Environment.NewLine;
463 }
464 using FileStream stream = new FileStream(f.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
465 xSSFWorkbook2.Write(stream);
466 }
467
468 public int UpdateExcelSheet(ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
469 {
470 Dictionary<string, string[]> dictionary = new Dictionary<string, string[]>();
471 int num = 0;
472 int num2 = 0;
473 int num3 = 10;
474 IRow row2 = destSheet.GetRow(0);
475 IRow row3 = oldSheet.GetRow(0);
476 List<SheetIndex> list = new List<SheetIndex>();
477 int cellnum = FindField(row2, "id");
478 int cellnum2 = FindField(row3, "id");
479 for (int i = 0; i < row2.LastCellNum; i++)
480 {
481 ICell cell = row2.GetCell(i);
482 if (cell == null)
483 {
484 break;
485 }
486 string stringCellValue = cell.StringCellValue;
487 if (stringCellValue == "id" || (updateOnlytext && stringCellValue != "text"))
488 {
489 continue;
490 }
491 for (int j = 0; j < row3.LastCellNum; j++)
492 {
493 cell = row3.GetCell(j);
494 if (cell == null)
495 {
496 break;
497 }
498 if (cell.StringCellValue == stringCellValue)
499 {
500 list.Add(new SheetIndex
501 {
502 dest = i,
503 old = j
504 });
505 Debug.Log(destSheet.SheetName + "/" + stringCellValue + "/" + i + "/" + j);
506 break;
507 }
508 }
509 }
510 for (int k = 2; k <= oldSheet.LastRowNum; k++)
511 {
512 IRow row4 = oldSheet.GetRow(k);
513 if (row4 == null)
514 {
515 if (num2 >= num3)
516 {
517 break;
518 }
519 num2++;
520 continue;
521 }
522 num2 = 0;
523 ICell cell2 = row4.GetCell(cellnum2);
524 if (cell2 == null)
525 {
526 continue;
527 }
528 string text = ((cell2.CellType == CellType.Numeric) ? cell2.NumericCellValue.ToString() : cell2.StringCellValue);
529 if (text.IsEmpty())
530 {
531 continue;
532 }
533 string[] array = new string[list.Count];
534 for (int l = 0; l < list.Count; l++)
535 {
536 ICell cell3 = row4.GetCell(list[l].old);
537 if (cell3 != null)
538 {
539 string stringCellValue2 = cell3.StringCellValue;
540 if (!stringCellValue2.IsEmpty())
541 {
542 array[l] = stringCellValue2;
543 }
544 }
545 }
546 dictionary.Add(text, array);
547 }
548 num2 = 0;
549 for (int m = 2; m <= destSheet.LastRowNum; m++)
550 {
551 IRow row5 = destSheet.GetRow(m);
552 if (row5 == null)
553 {
554 if (num2 >= num3)
555 {
556 break;
557 }
558 num2++;
559 continue;
560 }
561 num2 = 0;
562 ICell cell4 = row5.GetCell(cellnum);
563 if (cell4 == null)
564 {
565 continue;
566 }
567 string text2 = ((cell4.CellType == CellType.Numeric) ? cell4.NumericCellValue.ToString() : cell4.StringCellValue);
568 if (text2.IsEmpty() || !dictionary.ContainsKey(text2))
569 {
570 continue;
571 }
572 string[] array2 = dictionary[text2];
573 for (int n = 0; n < list.Count; n++)
574 {
575 ICell cell5 = row5.GetCell(list[n].dest) ?? row5.CreateCell(list[n].dest, CellType.String);
576 if (cell5 != null)
577 {
578 cell5.SetCellValue(array2[n]);
579 cell5.SetCellType(CellType.String);
580 cell5.SetAsActiveCell();
581 num++;
582 }
583 }
584 }
585 return num;
586 static int FindField(IRow row, string id)
587 {
588 for (int num4 = 0; num4 < row.LastCellNum; num4++)
589 {
590 ICell cell6 = row.GetCell(num4);
591 if (cell6 == null)
592 {
593 break;
594 }
595 if (cell6.StringCellValue == id)
596 {
597 return num4;
598 }
599 }
600 return -1;
601 }
602 }
603}
string lang
Definition: CoreConfig.cs:593
Lang.LangCode langCode
Definition: CoreDebug.cs:129
static string packageCore
Definition: CorePath.cs:153
Definition: Core.cs:14
SourceManager sources
Definition: Core.cs:33
CoreDebug debug
Definition: Core.cs:31
CoreConfig config
Definition: Core.cs:70
static CustomCharaContent CreateFromRow(SourceChara.Row r, ModPackage owner=null)
static CustomElementContent CreateFromRow(SourceElement.Row r, ModPackage owner=null)
static CustomMaterialContent CreateFromRow(SourceMaterial.Row r, ModPackage owner=null)
static CustomStatContent CreateFromRow(SourceStat.Row r, ModPackage owner=null)
static CustomThingContent CreateFromRow(SourceThing.Row r, ModPackage mod=null)
static CustomZoneContent CreateFromRow(SourceZone.Row r, ModPackage owner=null)
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
static UI ui
Definition: EClass.cs:17
string name
Definition: LangSetting.cs:24
void SetVersion()
Definition: LangSetting.cs:114
int GetVersion()
Definition: LangSetting.cs:100
Definition: Lang.cs:7
static bool IsBuiltin(string id)
Definition: Lang.cs:65
static bool runUpdate
Definition: Lang.cs:25
static string langCode
Definition: Lang.cs:29
Definition: Log.cs:4
static string system
Definition: Log.cs:5
Definition: MOD.cs:7
static Dictionary< string, LangSetting > langs
Definition: MOD.cs:8
static Dictionary< string, FileInfo > sounds
Definition: MOD.cs:26
static List< FileInfo > listMaps
Definition: MOD.cs:22
static List< FileInfo > listPartialMaps
Definition: MOD.cs:24
void Add(FileInfo fi, string path=null, string prefix="")
Definition: ModItemList.cs:85
void CopyContentTo(string dir)
Definition: ModPackage.cs:19
IReadOnlyList< FileInfo > ParseTalkText(DirectoryInfo dir)
Definition: ModPackage.cs:26
void UpdateDialogs(DirectoryInfo dir, string dirTemp)
Definition: ModPackage.cs:401
override void ClearSourceLocalizations(string lang)
Definition: ModPackage.cs:296
override string UpdateSourceLocalizationFile(string lang, bool force=false)
Definition: ModPackage.cs:307
void ParseLangMod(DirectoryInfo dir)
Definition: ModPackage.cs:161
void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
Definition: ModPackage.cs:430
IReadOnlyList< FileInfo > ParseTexture(DirectoryInfo dir)
Definition: ModPackage.cs:103
void AddOrUpdateLang(DirectoryInfo dir)
Definition: ModPackage.cs:334
override void GenerateCustomContentProfiles()
Definition: ModPackage.cs:203
IReadOnlyList< FileInfo > ParseMapPiece(DirectoryInfo dir, bool addToList=true)
Definition: ModPackage.cs:65
override void ImportSourceLocalizations(IReadOnlyDictionary< string, string > texts)
Definition: ModPackage.cs:288
override SortedDictionary< string, string > ExportSourceLocalizations()
Definition: ModPackage.cs:265
void UpdateTalks(DirectoryInfo dir, string dirTemp)
Definition: ModPackage.cs:418
IReadOnlyList< FileInfo > ParseTextureReplace(DirectoryInfo dir)
Definition: ModPackage.cs:86
IReadOnlyList< FileInfo > ParsePortrait(DirectoryInfo dir)
Definition: ModPackage.cs:123
IReadOnlyList< FileInfo > ParseMap(DirectoryInfo dir, bool addToList=true)
Definition: ModPackage.cs:44
int UpdateExcelSheet(ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
Definition: ModPackage.cs:468
IReadOnlyList< FileInfo > ParseSound(DirectoryInfo dir)
Definition: ModPackage.cs:176
static ModItemList< Sprite > modPortraitBGFs
Definition: Portrait.cs:8
static ModItemList< Sprite > modPortraitBGs
Definition: Portrait.cs:10
static ModItemList< Sprite > modOverlays
Definition: Portrait.cs:14
static ModItemList< Sprite > modPortraits
Definition: Portrait.cs:12
static HashSet< string > allIds
Definition: Portrait.cs:20
static ModItemList< Sprite > modFull
Definition: Portrait.cs:16
static Dictionary< string, string > dictModItems
static List< ExcelData > modList
Definition: TalkText.cs:5