Elin Decompiled Documentation EA 23.331 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 ModUtil.FixDefaultThingRowPref(r6);
229 customContent.Add(CustomThingContent.CreateFromRow(r6, this));
230 }
231 }
232 else
233 {
234 customContent.Add(CustomStatContent.CreateFromRow(r5, this));
235 }
236 }
237 else
238 {
239 customContent.Add(CustomMaterialContent.CreateFromRow(r4, this));
240 }
241 }
242 else
243 {
244 customContent.Add(CustomElementContent.CreateFromRow(r3, this));
245 }
246 }
247 else
248 {
249 customContent.Add(CustomZoneContent.CreateFromRow(r2, this));
250 }
251 }
252 else if (row.id.StartsWith("cwl") || row.id.StartsWith("custom"))
253 {
254 customContent.Add(CustomReligionContent.CreateFromRow(row, this));
255 }
256 }
257 else
258 {
259 ModUtil.FixDefaultCharaRowPref(r);
260 customContent.Add(CustomCharaContent.CreateFromRow(r, this));
261 }
262 }
263 customContent.RemoveAll((ICustomContent p) => p == null);
264 }
265
266 public override SortedDictionary<string, string> ExportSourceLocalizations()
267 {
268 SortedDictionary<string, string> sortedDictionary = new SortedDictionary<string, string>();
269 try
270 {
271 foreach (SourceData.BaseRow sourceRow in sourceRows)
272 {
273 foreach (KeyValuePair<string, string> item in sourceRow.ExportTexts(sourceRow.UseAlias ? "alias" : "id"))
274 {
275 item.Deconstruct(out var key, out var value);
276 string key2 = key;
277 string value2 = value;
278 sortedDictionary[key2] = value2;
279 }
280 }
281 }
282 catch (Exception arg)
283 {
284 Debug.LogError($"#source failed to export localization for {title}/{id}\n{arg}");
285 }
286 return sortedDictionary;
287 }
288
289 public override void ImportSourceLocalizations(IReadOnlyDictionary<string, string> texts)
290 {
291 foreach (SourceData.BaseRow sourceRow in sourceRows)
292 {
293 sourceRow.ImportTexts(texts, sourceRow.UseAlias ? "alias" : "id");
294 }
295 }
296
297 public override void ClearSourceLocalizations(string lang)
298 {
299 Mapping.RebuildLangModMapping(lang);
300 for (FileInfo fileInfo = Mapping.RelocateFile("SourceLocalization.json"); fileInfo != null; fileInfo = Mapping.RelocateFile("SourceLocalization.json"))
301 {
302 fileInfo.Delete();
303 Debug.Log("#source-localization deleted " + fileInfo.ShortPath());
304 }
305 Mapping.RebuildLangModMapping(Lang.langCode);
306 }
307
308 public override string UpdateSourceLocalizationFile(string lang, bool force = false)
309 {
310 if (!base.IsSourceLocalizable)
311 {
312 return null;
313 }
314 IReadOnlyDictionary<string, string> modEntries = SourceLocalization.GetModEntries(id, lang);
315 SortedDictionary<string, string> sortedDictionary = ExportSourceLocalizations();
316 SortedDictionary<string, string> final = new SortedDictionary<string, string>();
317 foreach (var (key, defaultValue) in sortedDictionary)
318 {
319 final[key] = modEntries.GetValueOrDefault(key, defaultValue);
320 }
321 string text3 = Path.Combine(dirInfo.FullName, "LangMod/" + lang + "/SourceLocalization.json");
322 if (force || modEntries.Count != final.Count || modEntries.Any((KeyValuePair<string, string> kv) => !final.ContainsKey(kv.Key)))
323 {
324 JsonSerializerSettings setting = new JsonSerializerSettings
325 {
326 PreserveReferencesHandling = PreserveReferencesHandling.None,
327 NullValueHandling = NullValueHandling.Ignore
328 };
329 IO.SaveFile(text3, final, compress: false, setting);
330 SourceLocalization.UpdateModEntries(id, lang, final);
331 }
332 return text3;
333 }
334
335 public void AddOrUpdateLang(DirectoryInfo dir)
336 {
337 Core core = EClass.core;
338 SourceManager sources = core.sources;
339 DirectoryInfo[] directories = dir.GetDirectories();
340 foreach (DirectoryInfo directoryInfo in directories)
341 {
342 if (!directoryInfo.Name.StartsWith("_") && !TryAddLang(directoryInfo, isNew: false))
343 {
344 Debug.Log("Generating Language Mod Contents:" + directoryInfo.FullName);
345 IO.CopyDir(CorePath.packageCore + "Lang/EN", directoryInfo.FullName);
346 Directory.CreateDirectory(directoryInfo.FullName + "/Dialog");
347 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", directoryInfo.FullName + "/Dialog");
348 sources.ExportSourceTexts(directoryInfo.FullName + "/Game");
349 IO.Copy(CorePath.packageCore + "Lang/lang.ini", directoryInfo.FullName + "/");
350 TryAddLang(directoryInfo, isNew: true);
351 }
352 }
353 bool TryAddLang(DirectoryInfo dirLang, bool isNew)
354 {
355 string name = dirLang.Name;
356 FileInfo[] files = dirLang.GetFiles();
357 foreach (FileInfo fileInfo in files)
358 {
359 if (fileInfo.Name == "lang.ini")
360 {
361 LangSetting langSetting = new LangSetting(fileInfo.FullName)
362 {
363 id = name,
364 dir = dirLang.FullName + "/"
365 };
366 if (isNew)
367 {
368 langSetting.SetVersion();
369 }
370 else if ((Application.isEditor || Lang.runUpdate) && !Lang.IsBuiltin(dirLang.Name) && langSetting.GetVersion() < core.version.GetInt())
371 {
372 sources.Init();
373 Log.system = "Updated Language Files:" + Environment.NewLine + Environment.NewLine;
374 Debug.Log("Updating Language:" + langSetting.name + "/" + langSetting.GetVersion() + "/" + core.version.GetInt());
375 string text = dirLang.FullName + "/Game";
376 Directory.Move(text, text + "_temp");
377 sources.ExportSourceTexts(text);
378 sources.UpdateSourceTexts(text);
379 IO.DeleteDirectory(text + "_temp");
380 text = dirLang.FullName + "/Dialog";
381 Directory.Move(text, text + "_temp");
382 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", text);
383 UpdateDialogs(new DirectoryInfo(text), text + "_temp");
384 IO.DeleteDirectory(text + "_temp");
385 text = dirLang.FullName + "/Data";
386 IO.CopyDir(text, text + "_temp");
387 IO.Copy(CorePath.packageCore + "Lang/EN/Data/god_talk.xlsx", text);
388 IO.Copy(CorePath.packageCore + "Lang/EN/Data/chara_talk.xlsx", text);
389 UpdateTalks(new DirectoryInfo(text), text + "_temp");
390 IO.DeleteDirectory(text + "_temp");
391 langSetting.SetVersion();
392 IO.SaveText(dirLang.FullName + "/update.txt", Log.system);
393 }
394 MOD.langs[name] = langSetting;
395 return true;
396 }
397 }
398 return false;
399 }
400 }
401
402 public void UpdateDialogs(DirectoryInfo dir, string dirTemp)
403 {
404 DirectoryInfo[] directories = dir.GetDirectories();
405 foreach (DirectoryInfo directoryInfo in directories)
406 {
407 UpdateDialogs(directoryInfo, dirTemp + "/" + directoryInfo.Name);
408 }
409 FileInfo[] files = dir.GetFiles();
410 foreach (FileInfo fileInfo in files)
411 {
412 if (fileInfo.Name.EndsWith("xlsx"))
413 {
414 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: true);
415 }
416 }
417 }
418
419 public void UpdateTalks(DirectoryInfo dir, string dirTemp)
420 {
421 FileInfo[] files = dir.GetFiles();
422 foreach (FileInfo fileInfo in files)
423 {
424 if (fileInfo.Name == "god_talk.xlsx" || fileInfo.Name == "chara_talk.xlsx")
425 {
426 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: false);
427 }
428 }
429 }
430
431 public void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
432 {
433 string path = dirTemp + "/" + f.Name;
434 if (!File.Exists(path))
435 {
436 return;
437 }
438 XSSFWorkbook xSSFWorkbook;
439 using (FileStream @is = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
440 {
441 xSSFWorkbook = new XSSFWorkbook((Stream)@is);
442 }
443 XSSFWorkbook xSSFWorkbook2;
444 using (FileStream is2 = File.Open(f.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
445 {
446 xSSFWorkbook2 = new XSSFWorkbook((Stream)is2);
447 }
448 for (int i = 0; i < xSSFWorkbook2.NumberOfSheets; i++)
449 {
450 ISheet sheetAt = xSSFWorkbook2.GetSheetAt(i);
451 ISheet sheet = xSSFWorkbook.GetSheet(sheetAt.SheetName);
452 if (sheet == null)
453 {
454 Log.system = Log.system + "Old sheet not found:" + sheetAt.SheetName + Environment.NewLine;
455 continue;
456 }
457 int num = UpdateExcelSheet(sheetAt, sheet, updateOnlyText);
458 Log.system = Log.system + ((num == 0) ? "(No Changes) " : "(Updated) ") + f.FullName + "(" + sheetAt.SheetName + ")" + Environment.NewLine;
459 if (num != 0)
460 {
461 Log.system = Log.system + num + Environment.NewLine;
462 }
463 Log.system += Environment.NewLine;
464 }
465 using FileStream stream = new FileStream(f.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
466 xSSFWorkbook2.Write(stream);
467 }
468
469 public int UpdateExcelSheet(ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
470 {
471 Dictionary<string, string[]> dictionary = new Dictionary<string, string[]>();
472 int num = 0;
473 int num2 = 0;
474 int num3 = 10;
475 IRow row2 = destSheet.GetRow(0);
476 IRow row3 = oldSheet.GetRow(0);
477 List<SheetIndex> list = new List<SheetIndex>();
478 int cellnum = FindField(row2, "id");
479 int cellnum2 = FindField(row3, "id");
480 for (int i = 0; i < row2.LastCellNum; i++)
481 {
482 ICell cell = row2.GetCell(i);
483 if (cell == null)
484 {
485 break;
486 }
487 string stringCellValue = cell.StringCellValue;
488 if (stringCellValue == "id" || (updateOnlytext && stringCellValue != "text"))
489 {
490 continue;
491 }
492 for (int j = 0; j < row3.LastCellNum; j++)
493 {
494 cell = row3.GetCell(j);
495 if (cell == null)
496 {
497 break;
498 }
499 if (cell.StringCellValue == stringCellValue)
500 {
501 list.Add(new SheetIndex
502 {
503 dest = i,
504 old = j
505 });
506 Debug.Log(destSheet.SheetName + "/" + stringCellValue + "/" + i + "/" + j);
507 break;
508 }
509 }
510 }
511 for (int k = 2; k <= oldSheet.LastRowNum; k++)
512 {
513 IRow row4 = oldSheet.GetRow(k);
514 if (row4 == null)
515 {
516 if (num2 >= num3)
517 {
518 break;
519 }
520 num2++;
521 continue;
522 }
523 num2 = 0;
524 ICell cell2 = row4.GetCell(cellnum2);
525 if (cell2 == null)
526 {
527 continue;
528 }
529 string text = ((cell2.CellType == CellType.Numeric) ? cell2.NumericCellValue.ToString() : cell2.StringCellValue);
530 if (text.IsEmpty())
531 {
532 continue;
533 }
534 string[] array = new string[list.Count];
535 for (int l = 0; l < list.Count; l++)
536 {
537 ICell cell3 = row4.GetCell(list[l].old);
538 if (cell3 != null)
539 {
540 string stringCellValue2 = cell3.StringCellValue;
541 if (!stringCellValue2.IsEmpty())
542 {
543 array[l] = stringCellValue2;
544 }
545 }
546 }
547 dictionary.Add(text, array);
548 }
549 num2 = 0;
550 for (int m = 2; m <= destSheet.LastRowNum; m++)
551 {
552 IRow row5 = destSheet.GetRow(m);
553 if (row5 == null)
554 {
555 if (num2 >= num3)
556 {
557 break;
558 }
559 num2++;
560 continue;
561 }
562 num2 = 0;
563 ICell cell4 = row5.GetCell(cellnum);
564 if (cell4 == null)
565 {
566 continue;
567 }
568 string text2 = ((cell4.CellType == CellType.Numeric) ? cell4.NumericCellValue.ToString() : cell4.StringCellValue);
569 if (text2.IsEmpty() || !dictionary.ContainsKey(text2))
570 {
571 continue;
572 }
573 string[] array2 = dictionary[text2];
574 for (int n = 0; n < list.Count; n++)
575 {
576 ICell cell5 = row5.GetCell(list[n].dest) ?? row5.CreateCell(list[n].dest, CellType.String);
577 if (cell5 != null)
578 {
579 cell5.SetCellValue(array2[n]);
580 cell5.SetCellType(CellType.String);
581 cell5.SetAsActiveCell();
582 num++;
583 }
584 }
585 }
586 return num;
587 static int FindField(IRow row, string id)
588 {
589 for (int num4 = 0; num4 < row.LastCellNum; num4++)
590 {
591 ICell cell6 = row.GetCell(num4);
592 if (cell6 == null)
593 {
594 break;
595 }
596 if (cell6.StringCellValue == id)
597 {
598 return num4;
599 }
600 }
601 return -1;
602 }
603 }
604}
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:61
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:30
static List< FileInfo > listMaps
Definition: MOD.cs:26
static List< FileInfo > listPartialMaps
Definition: MOD.cs:28
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:402
override void ClearSourceLocalizations(string lang)
Definition: ModPackage.cs:297
override string UpdateSourceLocalizationFile(string lang, bool force=false)
Definition: ModPackage.cs:308
void ParseLangMod(DirectoryInfo dir)
Definition: ModPackage.cs:161
void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
Definition: ModPackage.cs:431
IReadOnlyList< FileInfo > ParseTexture(DirectoryInfo dir)
Definition: ModPackage.cs:103
void AddOrUpdateLang(DirectoryInfo dir)
Definition: ModPackage.cs:335
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:289
override SortedDictionary< string, string > ExportSourceLocalizations()
Definition: ModPackage.cs:266
void UpdateTalks(DirectoryInfo dir, string dirTemp)
Definition: ModPackage.cs:419
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:469
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