Elin Decompiled Documentation EA 23.331 Nightly
Loading...
Searching...
No Matches
ModPackage Class Reference
Inheritance diagram for ModPackage:

Classes

struct  SheetIndex
 

Public Member Functions

void CopyContentTo (string dir)
 
IReadOnlyList< FileInfo > ParseTalkText (DirectoryInfo dir)
 
IReadOnlyList< FileInfo > ParseMap (DirectoryInfo dir, bool addToList=true)
 
IReadOnlyList< FileInfo > ParseMapPiece (DirectoryInfo dir, bool addToList=true)
 
IReadOnlyList< FileInfo > ParseTextureReplace (DirectoryInfo dir)
 
IReadOnlyList< FileInfo > ParseTexture (DirectoryInfo dir)
 
IReadOnlyList< FileInfo > ParsePortrait (DirectoryInfo dir)
 
void ParseLangMod (DirectoryInfo dir)
 
IReadOnlyList< FileInfo > ParseSound (DirectoryInfo dir)
 
override void GenerateCustomContentProfiles ()
 
override SortedDictionary< string, string > ExportSourceLocalizations ()
 
override void ImportSourceLocalizations (IReadOnlyDictionary< string, string > texts)
 
override void ClearSourceLocalizations (string lang)
 
override string UpdateSourceLocalizationFile (string lang, bool force=false)
 
void AddOrUpdateLang (DirectoryInfo dir)
 
void UpdateDialogs (DirectoryInfo dir, string dirTemp)
 
void UpdateTalks (DirectoryInfo dir, string dirTemp)
 
void UpdateExcelBook (FileInfo f, string dirTemp, bool updateOnlyText)
 
int UpdateExcelSheet (ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
 

Detailed Description

Definition at line 10 of file ModPackage.cs.

Member Function Documentation

◆ AddOrUpdateLang()

void ModPackage.AddOrUpdateLang ( DirectoryInfo  dir)
inline

Definition at line 335 of file ModPackage.cs.

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 }
Version version
Definition: BaseCore.cs:17
static string packageCore
Definition: CorePath.cs:153
Definition: Core.cs:14
SourceManager sources
Definition: Core.cs:33
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
Definition: IO.cs:10
static void DeleteDirectory(string path)
Definition: IO.cs:392
static void Copy(string fromPath, string toPath)
Definition: IO.cs:309
static void SaveText(string path, string text)
Definition: IO.cs:103
static void CopyDir(string sourceDirectory, string targetDirectory, Func< string, bool > funcExclude=null)
Definition: IO.cs:276
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
Definition: Log.cs:4
static string system
Definition: Log.cs:5
Definition: MOD.cs:7
static Dictionary< string, LangSetting > langs
Definition: MOD.cs:8
void UpdateDialogs(DirectoryInfo dir, string dirTemp)
Definition: ModPackage.cs:402
void UpdateTalks(DirectoryInfo dir, string dirTemp)
Definition: ModPackage.cs:419
void UpdateSourceTexts(string path)
void ExportSourceTexts(string path)
int GetInt()
Definition: Version.cs:21

References EClass.core, Debug, LangSetting.GetVersion(), Lang.IsBuiltin(), MOD.langs, LangSetting.name, CorePath.packageCore, Lang.runUpdate, LangSetting.SetVersion(), Core.sources, Log.system, UpdateDialogs(), and UpdateTalks().

Referenced by ModManager.ParseExtra().

◆ ClearSourceLocalizations()

override void ModPackage.ClearSourceLocalizations ( string  lang)
inline

Definition at line 297 of file ModPackage.cs.

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 }
static string langCode
Definition: Lang.cs:29

References Debug, and Lang.langCode.

◆ CopyContentTo()

void ModPackage.CopyContentTo ( string  dir)
inline

Definition at line 19 of file ModPackage.cs.

20 {
22 IO.CopyAll(dirInfo.FullName, dir);
23 EClass.ui.Say(dir);
24 }
static UI ui
Definition: EClass.cs:17
static void CopyAll(string fromPath, string toPath, bool overwrite=true)
Definition: IO.cs:337

References EClass.ui.

Referenced by LayerMod.OnInit().

◆ ExportSourceLocalizations()

override SortedDictionary< string, string > ModPackage.ExportSourceLocalizations ( )
inline

Definition at line 266 of file ModPackage.cs.

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 }

References $, Debug, and item.

Referenced by UpdateSourceLocalizationFile().

◆ GenerateCustomContentProfiles()

override void ModPackage.GenerateCustomContentProfiles ( )
inline

Definition at line 203 of file ModPackage.cs.

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 }
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)

References CustomCharaContent.CreateFromRow(), CustomElementContent.CreateFromRow(), CustomMaterialContent.CreateFromRow(), CustomStatContent.CreateFromRow(), CustomThingContent.CreateFromRow(), and CustomZoneContent.CreateFromRow().

◆ ImportSourceLocalizations()

override void ModPackage.ImportSourceLocalizations ( IReadOnlyDictionary< string, string >  texts)
inline

Definition at line 289 of file ModPackage.cs.

290 {
291 foreach (SourceData.BaseRow sourceRow in sourceRows)
292 {
293 sourceRow.ImportTexts(texts, sourceRow.UseAlias ? "alias" : "id");
294 }
295 }

◆ ParseLangMod()

void ModPackage.ParseLangMod ( DirectoryInfo  dir)
inline

Definition at line 161 of file ModPackage.cs.

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 }
string lang
Definition: CoreConfig.cs:593
Lang.LangCode langCode
Definition: CoreDebug.cs:129
CoreDebug debug
Definition: Core.cs:31
CoreConfig config
Definition: Core.cs:70

References $, Core.config, EClass.core, Core.debug, Debug, CoreConfig.lang, and CoreDebug.langCode.

Referenced by ModManager.ParseExtra().

◆ ParseMap()

IReadOnlyList< FileInfo > ModPackage.ParseMap ( DirectoryInfo  dir,
bool  addToList = true 
)
inline

Definition at line 44 of file ModPackage.cs.

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 }
static List< FileInfo > listMaps
Definition: MOD.cs:26

References $, Debug, and MOD.listMaps.

Referenced by ModManager.ParseExtra().

◆ ParseMapPiece()

IReadOnlyList< FileInfo > ModPackage.ParseMapPiece ( DirectoryInfo  dir,
bool  addToList = true 
)
inline

Definition at line 65 of file ModPackage.cs.

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 }
static List< FileInfo > listPartialMaps
Definition: MOD.cs:28

References $, Debug, and MOD.listPartialMaps.

Referenced by ModManager.ParseExtra().

◆ ParsePortrait()

IReadOnlyList< FileInfo > ModPackage.ParsePortrait ( DirectoryInfo  dir)
inline

Definition at line 123 of file ModPackage.cs.

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 }
void Add(FileInfo fi, string path=null, string prefix="")
Definition: ModItemList.cs:85
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

References $, ModItemList< T >.Add(), Portrait.allIds, Debug, Portrait.modFull, Portrait.modOverlays, Portrait.modPortraitBGFs, Portrait.modPortraitBGs, and Portrait.modPortraits.

Referenced by ModManager.ParseExtra().

◆ ParseSound()

IReadOnlyList< FileInfo > ModPackage.ParseSound ( DirectoryInfo  dir)
inline

Definition at line 176 of file ModPackage.cs.

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 }
static Dictionary< string, FileInfo > sounds
Definition: MOD.cs:30

References $, Debug, and MOD.sounds.

Referenced by ModManager.ParseExtra().

◆ ParseTalkText()

IReadOnlyList< FileInfo > ModPackage.ParseTalkText ( DirectoryInfo  dir)
inline

Definition at line 26 of file ModPackage.cs.

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 }
static List< ExcelData > modList
Definition: TalkText.cs:5

References $, Debug, and TalkText.modList.

Referenced by ModManager.ParseExtra().

◆ ParseTexture()

IReadOnlyList< FileInfo > ModPackage.ParseTexture ( DirectoryInfo  dir)
inline

Definition at line 103 of file ModPackage.cs.

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 }
static Dictionary< string, string > dictModItems

References $, Debug, and SpriteReplacer.dictModItems.

Referenced by ModManager.ParseExtra().

◆ ParseTextureReplace()

IReadOnlyList< FileInfo > ModPackage.ParseTextureReplace ( DirectoryInfo  dir)
inline

Definition at line 86 of file ModPackage.cs.

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 }

References $, and Debug.

Referenced by ModManager.ParseExtra().

◆ UpdateDialogs()

void ModPackage.UpdateDialogs ( DirectoryInfo  dir,
string  dirTemp 
)
inline

Definition at line 402 of file ModPackage.cs.

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 }
void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
Definition: ModPackage.cs:431

References UpdateDialogs(), and UpdateExcelBook().

Referenced by AddOrUpdateLang(), and UpdateDialogs().

◆ UpdateExcelBook()

void ModPackage.UpdateExcelBook ( FileInfo  f,
string  dirTemp,
bool  updateOnlyText 
)
inline

Definition at line 431 of file ModPackage.cs.

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 }
int UpdateExcelSheet(ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
Definition: ModPackage.cs:469

References UpdateExcelSheet().

Referenced by UpdateDialogs(), and UpdateTalks().

◆ UpdateExcelSheet()

int ModPackage.UpdateExcelSheet ( ISheet  destSheet,
ISheet  oldSheet,
bool  updateOnlytext 
)
inline

Definition at line 469 of file ModPackage.cs.

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 }

References Debug.

Referenced by UpdateExcelBook().

◆ UpdateSourceLocalizationFile()

override string ModPackage.UpdateSourceLocalizationFile ( string  lang,
bool  force = false 
)
inline

Definition at line 308 of file ModPackage.cs.

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 }
static void SaveFile(string path, object obj, bool compress=false, JsonSerializerSettings setting=null)
Definition: IO.cs:88
override SortedDictionary< string, string > ExportSourceLocalizations()
Definition: ModPackage.cs:266

References ExportSourceLocalizations().

Referenced by LayerMod.OnInit().

◆ UpdateTalks()

void ModPackage.UpdateTalks ( DirectoryInfo  dir,
string  dirTemp 
)
inline

Definition at line 419 of file ModPackage.cs.

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 }

References UpdateExcelBook().

Referenced by AddOrUpdateLang().


The documentation for this class was generated from the following file: