Elin Decompiled Documentation EA 23.200 Stable
Loading...
Searching...
No Matches
ModManager Class Reference
Inheritance diagram for ModManager:
BaseModManager

Classes

struct  SheetIndex
 

Public Member Functions

override void Init (string path, string defaultPackage="_Elona")
 
IEnumerator RefreshMods (Action onComplete, bool syncMods)
 
void SaveLoadOrder ()
 
void LoadLoadOrder ()
 
ModPackage AddPackage (DirectoryInfo dir, bool isInPackages=false)
 
ModPackage AddWorkshopPackage (WorkshopItem item, bool isInPackages=false)
 
int CountUserMod ()
 
override void ParseExtra (DirectoryInfo dir, BaseModPackage package)
 
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)
 
- Public Member Functions inherited from BaseModManager
virtual void Init (string path, string defaultPackage="_Elona")
 
void InitLang ()
 
virtual void ParseExtra (DirectoryInfo dir, BaseModPackage package)
 

Public Attributes

List< FileInfo > replaceFiles = new List<FileInfo>()
 
- Public Attributes inherited from BaseModManager
DirectoryInfo dirWorkshop
 
int priorityIndex
 
List< BaseModPackagepackages = new List<BaseModPackage>()
 

Static Public Attributes

static List< object > ListPluginObject = new List<object>()
 
static bool disableMod = false
 
- Static Public Attributes inherited from BaseModManager
static BaseModManager Instance
 
static string rootMod
 
static string rootDefaultPacakge
 
static bool isInitialized
 
static List< string > listChainLoad = new List<string>()
 

Properties

static List< string > ListChainLoad [get]
 
static DirectoryInfo DirWorkshop [get]
 
static bool IsInitialized [get]
 

Private Member Functions

void HandleResults (UgcQuery query)
 

Detailed Description

Definition at line 14 of file ModManager.cs.

Member Function Documentation

◆ AddPackage()

ModPackage ModManager.AddPackage ( DirectoryInfo  dir,
bool  isInPackages = false 
)
inline

Definition at line 266 of file ModManager.cs.

267 {
268 ModPackage modPackage = new ModPackage
269 {
270 dirInfo = dir,
271 installed = true
272 };
273 packages.Add(modPackage);
274 modPackage.isInPackages = isInPackages;
275 modPackage.loadPriority = priorityIndex;
277 return modPackage;
278 }
List< BaseModPackage > packages

References installed, BaseModManager.packages, and BaseModManager.priorityIndex.

Referenced by Init(), and RefreshMods().

◆ AddWorkshopPackage()

ModPackage ModManager.AddWorkshopPackage ( WorkshopItem  item,
bool  isInPackages = false 
)
inline

Definition at line 280 of file ModManager.cs.

281 {
282 UserGeneratedContent.Client.GetItemInstallInfo(item.FileId, out var _, out var folderPath, out var _);
283 DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
284 ModPackage modPackage = new ModPackage
285 {
286 item = item,
287 dirInfo = directoryInfo,
288 installed = directoryInfo.Exists,
289 banned = item.IsBanned
290 };
291 packages.Add(modPackage);
292 modPackage.isInPackages = isInPackages;
293 modPackage.loadPriority = priorityIndex;
295 return modPackage;
296 }

References installed, item, BaseModManager.packages, and BaseModManager.priorityIndex.

Referenced by HandleResults().

◆ CountUserMod()

int ModManager.CountUserMod ( )
inline

Definition at line 298 of file ModManager.cs.

299 {
300 int num = 0;
301 foreach (BaseModPackage package in packages)
302 {
303 if (!package.builtin)
304 {
305 num++;
306 }
307 }
308 return num;
309 }

References BaseModPackage.builtin, and BaseModManager.packages.

Referenced by LayerTitle.OnClickContinue(), and LayerTitle.OnClickStart().

◆ HandleResults()

void ModManager.HandleResults ( UgcQuery  query)
inlineprivate

Definition at line 84 of file ModManager.cs.

85 {
86 foreach (WorkshopItem results in query.ResultsList)
87 {
88 if (results.IsSubscribed)
89 {
90 AddWorkshopPackage(results);
91 }
92 }
93 }
ModPackage AddWorkshopPackage(WorkshopItem item, bool isInPackages=false)
Definition: ModManager.cs:280

References AddWorkshopPackage().

Referenced by RefreshMods().

◆ Init()

override void ModManager.Init ( string  path,
string  defaultPackage = "_Elona" 
)
inlinevirtual

Reimplemented from BaseModManager.

Definition at line 35 of file ModManager.cs.

36 {
37 base.Init(path, defaultPackage);
38 IniData elinIni = Core.GetElinIni();
39 Debug.Log("IsOffline:" + BaseCore.IsOffline);
40 if (elinIni != null)
41 {
43 {
44 string key = elinIni.GetKey("path_workshop");
45 if (!key.IsEmpty())
46 {
47 dirWorkshop = new DirectoryInfo(key);
48 }
49 }
50 else
51 {
52 DirectoryInfo parent = new DirectoryInfo(App.Client.GetAppInstallDirectory(SteamSettings.behaviour.settings.applicationId)).Parent.Parent;
53 dirWorkshop = new DirectoryInfo(parent.FullName + "/workshop/content/2135150");
54 elinIni.Global["path_workshop"] = dirWorkshop.FullName ?? "";
55 Core.SaveElinIni(elinIni);
56 }
57 }
58 if (dirWorkshop != null && !dirWorkshop.Exists)
59 {
60 dirWorkshop = null;
61 }
62 Debug.Log("dirWorkshop:" + dirWorkshop);
63 Debug.Log("Mod Init:" + BaseModManager.rootDefaultPacakge);
64 packages.Clear();
65 DirectoryInfo[] directories = new DirectoryInfo(BaseModManager.rootMod).GetDirectories();
66 Array.Reverse(directories);
67 DirectoryInfo[] array = directories;
68 foreach (DirectoryInfo directoryInfo in array)
69 {
70 if (!EClass.debug.skipMod || !Application.isEditor || !(directoryInfo.Name != "_Elona"))
71 {
72 AddPackage(directoryInfo, isInPackages: true);
73 }
74 }
75 DirectoryInfo[] directories2 = new DirectoryInfo(CorePath.custom).GetDirectories();
76 ModPackage package = new ModPackage();
77 array = directories2;
78 foreach (DirectoryInfo dir in array)
79 {
80 ParseExtra(dir, package);
81 }
82 }
static bool IsOffline
Definition: BaseCore.cs:9
static string rootDefaultPacakge
static string rootMod
DirectoryInfo dirWorkshop
bool skipMod
Definition: CoreDebug.cs:134
static string custom
Definition: CorePath.cs:163
Definition: Core.cs:14
static void SaveElinIni(IniData ini)
Definition: Core.cs:800
static IniData GetElinIni()
Definition: Core.cs:766
Definition: EClass.cs:5
static CoreDebug debug
Definition: EClass.cs:48
ModPackage AddPackage(DirectoryInfo dir, bool isInPackages=false)
Definition: ModManager.cs:266

References AddPackage(), CorePath.custom, EClass.debug, Debug, BaseModManager.dirWorkshop, Core.GetElinIni(), BaseCore.IsOffline, BaseModManager.packages, BaseModManager.rootDefaultPacakge, BaseModManager.rootMod, Core.SaveElinIni(), and CoreDebug.skipMod.

Referenced by Core.StartCase().

◆ LoadLoadOrder()

void ModManager.LoadLoadOrder ( )
inline

Definition at line 236 of file ModManager.cs.

237 {
238 string path = CorePath.rootExe + "loadorder.txt";
239 if (!File.Exists(path))
240 {
241 return;
242 }
243 Dictionary<string, BaseModPackage> dictionary = new Dictionary<string, BaseModPackage>();
244 foreach (BaseModPackage package in packages)
245 {
246 if (!package.builtin)
247 {
248 dictionary[package.dirInfo.FullName] = package;
249 }
250 }
251 int num = 0;
252 string[] array = File.ReadAllLines(path);
253 for (int i = 0; i < array.Length; i++)
254 {
255 string[] array2 = array[i].Split(',');
256 if (dictionary.ContainsKey(array2[0]))
257 {
258 BaseModPackage baseModPackage = dictionary[array2[0]];
259 baseModPackage.loadPriority = num;
260 baseModPackage.willActivate = array2[1] == "1";
261 }
262 num++;
263 }
264 }
DirectoryInfo dirInfo

References BaseModPackage.builtin, BaseModPackage.dirInfo, and BaseModManager.packages.

Referenced by RefreshMods().

◆ ParseExtra()

override void ModManager.ParseExtra ( DirectoryInfo  dir,
BaseModPackage  package 
)
inlinevirtual

Reimplemented from BaseModManager.

Definition at line 311 of file ModManager.cs.

312 {
313 switch (dir.Name)
314 {
315 case "TalkText":
316 {
317 FileInfo[] files = dir.GetFiles();
318 foreach (FileInfo fileInfo in files)
319 {
320 if (fileInfo.Name.EndsWith(".xlsx"))
321 {
322 TalkText.modList.Add(new ExcelData(fileInfo.FullName));
323 }
324 }
325 break;
326 }
327 case "Map":
328 {
329 if (package.builtin)
330 {
331 break;
332 }
333 FileInfo[] files = dir.GetFiles();
334 foreach (FileInfo fileInfo5 in files)
335 {
336 if (fileInfo5.Name.EndsWith(".z"))
337 {
338 MOD.listMaps.Add(fileInfo5);
339 }
340 }
341 break;
342 }
343 case "Map Piece":
344 {
345 if (package.builtin)
346 {
347 break;
348 }
349 FileInfo[] files = dir.GetFiles();
350 foreach (FileInfo fileInfo3 in files)
351 {
352 if (fileInfo3.Name.EndsWith(".mp"))
353 {
354 MOD.listPartialMaps.Add(fileInfo3);
355 }
356 }
357 break;
358 }
359 case "Texture Replace":
360 {
361 FileInfo[] files = dir.GetFiles();
362 foreach (FileInfo fileInfo6 in files)
363 {
364 if (fileInfo6.Name.EndsWith(".png"))
365 {
366 replaceFiles.Add(fileInfo6);
367 }
368 }
369 break;
370 }
371 case "Texture":
372 {
373 FileInfo[] files = dir.GetFiles();
374 foreach (FileInfo fileInfo4 in files)
375 {
376 if (fileInfo4.Name.EndsWith(".png"))
377 {
378 SpriteReplacer.dictModItems[fileInfo4.Name.Replace(".png", "")] = fileInfo4.GetFullFileNameWithoutExtension();
379 }
380 }
381 break;
382 }
383 case "Portrait":
384 {
385 FileInfo[] files = dir.GetFiles();
386 foreach (FileInfo fileInfo2 in files)
387 {
388 if (fileInfo2.Name.EndsWith(".png"))
389 {
390 if (fileInfo2.Name.StartsWith("BG_"))
391 {
392 Portrait.modPortraitBGs.Add(fileInfo2);
393 }
394 else if (fileInfo2.Name.StartsWith("BGF_"))
395 {
396 Portrait.modPortraitBGFs.Add(fileInfo2);
397 }
398 else if (fileInfo2.Name.EndsWith("-full.png"))
399 {
400 Portrait.modFull.Add(fileInfo2);
401 }
402 else if (fileInfo2.Name.EndsWith("-overlay.png"))
403 {
404 Portrait.modOverlays.Add(fileInfo2);
405 }
406 else
407 {
408 Portrait.modPortraits.Add(fileInfo2);
409 }
410 Portrait.allIds.Add(fileInfo2.Name);
411 }
412 }
413 break;
414 }
415 case "Lang":
416 {
417 DirectoryInfo[] directories = dir.GetDirectories();
418 foreach (DirectoryInfo directoryInfo in directories)
419 {
420 if (!directoryInfo.Name.StartsWith("_") && !TryAddLang(directoryInfo, isNew: false))
421 {
422 Debug.Log("Generating Language Mod Contents:" + directoryInfo.FullName);
423 IO.CopyDir(CorePath.packageCore + "Lang/EN", directoryInfo.FullName);
424 Directory.CreateDirectory(directoryInfo.FullName + "/Dialog");
425 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", directoryInfo.FullName + "/Dialog");
426 EClass.sources.ExportSourceTexts(directoryInfo.FullName + "/Game");
427 IO.Copy(CorePath.packageCore + "Lang/lang.ini", directoryInfo.FullName + "/");
428 TryAddLang(directoryInfo, isNew: true);
429 }
430 }
431 break;
432 }
433 }
434 bool TryAddLang(DirectoryInfo dirLang, bool isNew)
435 {
436 string name = dirLang.Name;
437 FileInfo[] files2 = dirLang.GetFiles();
438 foreach (FileInfo fileInfo7 in files2)
439 {
440 if (fileInfo7.Name == "lang.ini")
441 {
442 LangSetting langSetting = new LangSetting(fileInfo7.FullName)
443 {
444 id = name,
445 dir = dirLang.FullName + "/"
446 };
447 if (isNew)
448 {
449 langSetting.SetVersion();
450 }
451 else if ((Application.isEditor || Lang.runUpdate) && !Lang.IsBuiltin(dirLang.Name) && langSetting.GetVersion() != EClass.core.version.GetInt())
452 {
454 Log.system = "Updated Language Files:" + Environment.NewLine + Environment.NewLine;
455 Debug.Log("Updating Language:" + langSetting.name + "/" + langSetting.GetVersion() + "/" + EClass.core.version.GetInt());
456 string text = dirLang.FullName + "/Game";
457 Directory.Move(text, text + "_temp");
460 IO.DeleteDirectory(text + "_temp");
461 text = dirLang.FullName + "/Dialog";
462 Directory.Move(text, text + "_temp");
463 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", text);
464 UpdateDialogs(new DirectoryInfo(text), text + "_temp");
465 IO.DeleteDirectory(text + "_temp");
466 text = dirLang.FullName + "/Data";
467 IO.CopyDir(text, text + "_temp");
468 IO.Copy(CorePath.packageCore + "Lang/EN/Data/god_talk.xlsx", text);
469 IO.Copy(CorePath.packageCore + "Lang/EN/Data/chara_talk.xlsx", text);
470 UpdateTalks(new DirectoryInfo(text), text + "_temp");
471 IO.DeleteDirectory(text + "_temp");
472 langSetting.SetVersion();
473 IO.SaveText(dirLang.FullName + "/update.txt", Log.system);
474 }
475 MOD.langs[name] = langSetting;
476 return true;
477 }
478 }
479 return false;
480 }
481 }
Version version
Definition: BaseCore.cs:17
static string packageCore
Definition: CorePath.cs:157
static Core core
Definition: EClass.cs:6
static SourceManager sources
Definition: EClass.cs:42
Definition: IO.cs:11
static void DeleteDirectory(string path)
Definition: IO.cs:353
static void Copy(string fromPath, string toPath)
Definition: IO.cs:278
static void SaveText(string path, string text)
Definition: IO.cs:104
static void CopyDir(string sourceDirectory, string targetDirectory, Func< string, bool > funcExclude=null)
Definition: IO.cs:245
string name
Definition: LangSetting.cs:24
void SetVersion()
Definition: LangSetting.cs:114
int GetVersion()
Definition: LangSetting.cs:100
Definition: Lang.cs:6
static bool IsBuiltin(string id)
Definition: Lang.cs:62
static bool runUpdate
Definition: Lang.cs:24
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 List< FileInfo > listMaps
Definition: MOD.cs:20
static List< FileInfo > listPartialMaps
Definition: MOD.cs:22
void Add(FileInfo fi, string path=null, string prefix="")
Definition: ModItemList.cs:85
void UpdateTalks(DirectoryInfo dir, string dirTemp)
Definition: ModManager.cs:500
List< FileInfo > replaceFiles
Definition: ModManager.cs:27
void UpdateDialogs(DirectoryInfo dir, string dirTemp)
Definition: ModManager.cs:483
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
void UpdateSourceTexts(string path)
void ExportSourceTexts(string path)
static Dictionary< string, string > dictModItems
static List< ExcelData > modList
Definition: TalkText.cs:5
int GetInt()
Definition: Version.cs:21

References ModItemList< T >.Add(), Portrait.allIds, BaseModPackage.builtin, EClass.core, Debug, SpriteReplacer.dictModItems, SourceManager.ExportSourceTexts(), Version.GetInt(), LangSetting.GetVersion(), SourceManager.Init(), Lang.IsBuiltin(), MOD.langs, MOD.listMaps, MOD.listPartialMaps, Portrait.modFull, TalkText.modList, Portrait.modOverlays, Portrait.modPortraitBGFs, Portrait.modPortraitBGs, Portrait.modPortraits, LangSetting.name, CorePath.packageCore, replaceFiles, Lang.runUpdate, LangSetting.SetVersion(), EClass.sources, Log.system, UpdateDialogs(), SourceManager.UpdateSourceTexts(), UpdateTalks(), and BaseCore.version.

◆ RefreshMods()

IEnumerator ModManager.RefreshMods ( Action  onComplete,
bool  syncMods 
)
inline

Definition at line 95 of file ModManager.cs.

96 {
97 bool sync = !BaseCore.IsOffline && syncMods && UserGeneratedContent.Client.GetNumSubscribedItems() != 0;
98 LoadingScreen loading = (sync ? Util.Instantiate<LoadingScreen>("LoadingScreen") : null);
99 if (!disableMod && (!EClass.debug.skipMod || !Application.isEditor))
100 {
101 if (sync)
102 {
103 UgcQuery activeQuery = UgcQuery.GetSubscribed(withLongDescription: false, withMetadata: false, withKeyValueTags: false, withAdditionalPreviews: false, 0u);
104 activeQuery.Execute(HandleResults);
105 loading?.Log("Fetching subscribed Mods...(Hit ESC to cancel)");
106 while (activeQuery.handle != UGCQueryHandle_t.Invalid && !UnityEngine.Input.GetKey(KeyCode.Escape))
107 {
108 yield return new WaitForEndOfFrame();
109 }
110 }
111 else
112 {
113 loading?.Log("Fetching offline Mods.");
114 if (dirWorkshop != null)
115 {
116 DirectoryInfo[] directories = dirWorkshop.GetDirectories();
117 foreach (DirectoryInfo dir in directories)
118 {
119 AddPackage(dir);
120 }
121 }
122 }
123 }
124 if (sync)
125 {
126 bool valid = false;
127 while (!valid)
128 {
129 valid = true;
130 foreach (BaseModPackage package in packages)
131 {
132 WorkshopItem workshopItem = package.item as WorkshopItem;
133 if (!package.installed && workshopItem != null && !workshopItem.IsBanned)
134 {
135 valid = false;
136 string text = "Downloading " + workshopItem.Title + ": ";
137 if (!package.progressText)
138 {
139 package.progressText = loading.Log(text);
140 }
141 if (package.downloadStarted && workshopItem.DownloadCompletion >= 1f)
142 {
143 package.progressText.text = text + "Done!";
144 package.installed = true;
145 }
146 else if (workshopItem.IsDownloading || workshopItem.IsDownloadPending)
147 {
148 package.progressText.text = text + (int)(workshopItem.DownloadCompletion * 100f) + "%";
149 }
150 else if (!package.downloadStarted)
151 {
152 package.downloadStarted = true;
153 workshopItem.DownloadItem(highPriority: true);
154 Debug.Log("start downloading:" + workshopItem.Title + "/" + workshopItem.IsInstalled + "/" + package.installed + "/" + workshopItem.IsDownloading + "/" + workshopItem.IsDownloadPending + "/" + workshopItem.DownloadCompletion);
155 }
156 }
157 }
158 if (!valid && UnityEngine.Input.GetKey(KeyCode.Escape))
159 {
160 break;
161 }
162 yield return new WaitForEndOfFrame();
163 }
164 }
165 foreach (BaseModPackage package2 in packages)
166 {
167 package2.Init();
168 Debug.Log(package2.title + "/" + package2.id + "/" + package2.installed + "/" + package2.dirInfo.FullName);
169 }
172 foreach (BaseModPackage package3 in packages)
173 {
174 if (package3.isInPackages || !package3.willActivate)
175 {
176 continue;
177 }
178 foreach (BaseModPackage package4 in packages)
179 {
180 if (package4.isInPackages && package3.id == package4.id)
181 {
182 package4.hasPublishedPackage = true;
183 }
184 }
185 }
186 loading?.Log("Total number of Mods:" + packages.Count);
187 if ((bool)loading)
188 {
189 loading.Log("Activating Mods...");
190 yield return new WaitForEndOfFrame();
191 yield return new WaitForEndOfFrame();
192 }
194 ListPluginObject.Clear();
195 foreach (BaseModPackage package5 in packages)
196 {
197 if (package5.IsValidVersion() && (!disableMod || package5.builtin))
198 {
199 package5.Activate();
200 if (package5.activated)
201 {
202 BaseModManager.listChainLoad.Add(package5.dirInfo.FullName);
203 }
204 }
205 }
208 BaseModManager.isInitialized = true;
209 yield return new WaitForEndOfFrame();
210 onComplete?.Invoke();
211 if ((bool)loading)
212 {
213 UnityEngine.Object.Destroy(loading.gameObject);
214 }
215 yield return null;
216 }
static List< string > listChainLoad
bool IsValidVersion()
Text Log(string s)
void HandleResults(UgcQuery query)
Definition: ModManager.cs:84
void LoadLoadOrder()
Definition: ModManager.cs:236
static bool disableMod
Definition: ModManager.cs:25
static List< object > ListPluginObject
Definition: ModManager.cs:23
static void OnModsActivated()
Definition: ModUtil.cs:17
static void LoadTypeFallback()
Definition: ModUtil.cs:21
Definition: Util.cs:10
static Transform Instantiate(string path, Component parent=null)
Definition: Util.cs:67

References BaseModPackage.Activate(), BaseModPackage.activated, AddPackage(), BaseModPackage.builtin, EClass.debug, Debug, BaseModPackage.dirInfo, BaseModManager.dirWorkshop, disableMod, BaseModPackage.downloadStarted, HandleResults(), BaseModPackage.id, BaseModPackage.Init(), BaseModPackage.installed, BaseModPackage.isInPackages, BaseModPackage.IsValidVersion(), BaseModManager.listChainLoad, ListPluginObject, LoadLoadOrder(), BaseModPackage.loadPriority, ModUtil.LoadTypeFallback(), LoadingScreen.Log(), ModUtil.OnModsActivated(), BaseModManager.packages, BaseModPackage.progressText, CoreDebug.skipMod, BaseModPackage.title, Util, and BaseModPackage.willActivate.

Referenced by Core.StartCase().

◆ SaveLoadOrder()

void ModManager.SaveLoadOrder ( )
inline

Definition at line 218 of file ModManager.cs.

219 {
220 if (disableMod)
221 {
222 return;
223 }
224 List<string> list = new List<string>();
225 foreach (BaseModPackage package in packages)
226 {
227 if (!package.builtin && Directory.Exists(package.dirInfo.FullName))
228 {
229 string item = package.dirInfo.FullName + "," + (package.willActivate ? 1 : 0);
230 list.Add(item);
231 }
232 }
233 File.WriteAllLines(CorePath.rootExe + "loadorder.txt", list);
234 }
static string rootExe
Definition: CorePath.cs:172

References BaseModPackage.builtin, BaseModPackage.dirInfo, disableMod, item, BaseModManager.packages, and CorePath.rootExe.

Referenced by LayerMod.OnInit(), and LayerMod.OnKill().

◆ UpdateDialogs()

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

Definition at line 483 of file ModManager.cs.

484 {
485 DirectoryInfo[] directories = dir.GetDirectories();
486 foreach (DirectoryInfo directoryInfo in directories)
487 {
488 UpdateDialogs(directoryInfo, dirTemp + "/" + directoryInfo.Name);
489 }
490 FileInfo[] files = dir.GetFiles();
491 foreach (FileInfo fileInfo in files)
492 {
493 if (fileInfo.Name.EndsWith("xlsx"))
494 {
495 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: true);
496 }
497 }
498 }
void UpdateExcelBook(FileInfo f, string dirTemp, bool updateOnlyText)
Definition: ModManager.cs:512

References UpdateDialogs(), and UpdateExcelBook().

Referenced by ParseExtra(), and UpdateDialogs().

◆ UpdateExcelBook()

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

Definition at line 512 of file ModManager.cs.

513 {
514 string path = dirTemp + "/" + f.Name;
515 if (!File.Exists(path))
516 {
517 return;
518 }
519 XSSFWorkbook xSSFWorkbook;
520 using (FileStream @is = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
521 {
522 xSSFWorkbook = new XSSFWorkbook((Stream)@is);
523 }
524 XSSFWorkbook xSSFWorkbook2;
525 using (FileStream is2 = File.Open(f.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
526 {
527 xSSFWorkbook2 = new XSSFWorkbook((Stream)is2);
528 }
529 for (int i = 0; i < xSSFWorkbook2.NumberOfSheets; i++)
530 {
531 ISheet sheetAt = xSSFWorkbook2.GetSheetAt(i);
532 ISheet sheet = xSSFWorkbook.GetSheet(sheetAt.SheetName);
533 if (sheet == null)
534 {
535 Log.system = Log.system + "Old sheet not found:" + sheetAt.SheetName + Environment.NewLine;
536 continue;
537 }
538 int num = UpdateExcelSheet(sheetAt, sheet, updateOnlyText);
539 Log.system = Log.system + ((num == 0) ? "(No Changes) " : "(Updated) ") + f.FullName + "(" + sheetAt.SheetName + ")" + Environment.NewLine;
540 if (num != 0)
541 {
542 Log.system = Log.system + num + Environment.NewLine;
543 }
544 Log.system += Environment.NewLine;
545 }
546 using FileStream stream = new FileStream(f.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
547 xSSFWorkbook2.Write(stream);
548 }
int UpdateExcelSheet(ISheet destSheet, ISheet oldSheet, bool updateOnlytext)
Definition: ModManager.cs:550

References UpdateExcelSheet().

Referenced by UpdateDialogs(), and UpdateTalks().

◆ UpdateExcelSheet()

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

Definition at line 550 of file ModManager.cs.

551 {
552 Dictionary<string, string[]> dictionary = new Dictionary<string, string[]>();
553 int num = 0;
554 int num2 = 0;
555 int num3 = 10;
556 IRow row2 = destSheet.GetRow(0);
557 IRow row3 = oldSheet.GetRow(0);
558 List<SheetIndex> list = new List<SheetIndex>();
559 int cellnum = FindField(row2, "id");
560 int cellnum2 = FindField(row3, "id");
561 for (int i = 0; i < row2.LastCellNum; i++)
562 {
563 ICell cell = row2.GetCell(i);
564 if (cell == null)
565 {
566 break;
567 }
568 string stringCellValue = cell.StringCellValue;
569 if (stringCellValue == "id" || (updateOnlytext && stringCellValue != "text"))
570 {
571 continue;
572 }
573 for (int j = 0; j < row3.LastCellNum; j++)
574 {
575 cell = row3.GetCell(j);
576 if (cell == null)
577 {
578 break;
579 }
580 if (cell.StringCellValue == stringCellValue)
581 {
582 list.Add(new SheetIndex
583 {
584 dest = i,
585 old = j
586 });
587 Debug.Log(destSheet.SheetName + "/" + stringCellValue + "/" + i + "/" + j);
588 break;
589 }
590 }
591 }
592 for (int k = 2; k <= oldSheet.LastRowNum; k++)
593 {
594 IRow row4 = oldSheet.GetRow(k);
595 if (row4 == null)
596 {
597 if (num2 >= num3)
598 {
599 break;
600 }
601 num2++;
602 continue;
603 }
604 num2 = 0;
605 ICell cell2 = row4.GetCell(cellnum2);
606 if (cell2 == null)
607 {
608 continue;
609 }
610 string text = ((cell2.CellType == CellType.Numeric) ? cell2.NumericCellValue.ToString() : cell2.StringCellValue);
611 if (text.IsEmpty())
612 {
613 continue;
614 }
615 string[] array = new string[list.Count];
616 for (int l = 0; l < list.Count; l++)
617 {
618 ICell cell3 = row4.GetCell(list[l].old);
619 if (cell3 != null)
620 {
621 string stringCellValue2 = cell3.StringCellValue;
622 if (!stringCellValue2.IsEmpty())
623 {
624 array[l] = stringCellValue2;
625 }
626 }
627 }
628 dictionary.Add(text, array);
629 }
630 num2 = 0;
631 for (int m = 2; m <= destSheet.LastRowNum; m++)
632 {
633 IRow row5 = destSheet.GetRow(m);
634 if (row5 == null)
635 {
636 if (num2 >= num3)
637 {
638 break;
639 }
640 num2++;
641 continue;
642 }
643 num2 = 0;
644 ICell cell4 = row5.GetCell(cellnum);
645 if (cell4 == null)
646 {
647 continue;
648 }
649 string text2 = ((cell4.CellType == CellType.Numeric) ? cell4.NumericCellValue.ToString() : cell4.StringCellValue);
650 if (text2.IsEmpty() || !dictionary.ContainsKey(text2))
651 {
652 continue;
653 }
654 string[] array2 = dictionary[text2];
655 for (int n = 0; n < list.Count; n++)
656 {
657 ICell cell5 = row5.GetCell(list[n].dest) ?? row5.CreateCell(list[n].dest, CellType.String);
658 if (cell5 != null)
659 {
660 cell5.SetCellValue(array2[n]);
661 cell5.SetCellType(CellType.String);
662 cell5.SetAsActiveCell();
663 num++;
664 }
665 }
666 }
667 return num;
668 static int FindField(IRow row, string id)
669 {
670 for (int num4 = 0; num4 < row.LastCellNum; num4++)
671 {
672 ICell cell6 = row.GetCell(num4);
673 if (cell6 == null)
674 {
675 break;
676 }
677 if (cell6.StringCellValue == id)
678 {
679 return num4;
680 }
681 }
682 return -1;
683 }
684 }

References Debug.

Referenced by UpdateExcelBook().

◆ UpdateTalks()

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

Definition at line 500 of file ModManager.cs.

501 {
502 FileInfo[] files = dir.GetFiles();
503 foreach (FileInfo fileInfo in files)
504 {
505 if (fileInfo.Name == "god_talk.xlsx" || fileInfo.Name == "chara_talk.xlsx")
506 {
507 UpdateExcelBook(fileInfo, dirTemp, updateOnlyText: false);
508 }
509 }
510 }

References UpdateExcelBook().

Referenced by ParseExtra().

Member Data Documentation

◆ disableMod

bool ModManager.disableMod = false
static

Definition at line 25 of file ModManager.cs.

Referenced by RefreshMods(), SaveLoadOrder(), and Core.StartCase().

◆ ListPluginObject

List<object> ModManager.ListPluginObject = new List<object>()
static

Definition at line 23 of file ModManager.cs.

Referenced by RefreshMods(), and Core.StartCase().

◆ replaceFiles

List<FileInfo> ModManager.replaceFiles = new List<FileInfo>()

Definition at line 27 of file ModManager.cs.

Referenced by TextureManager.Init(), and ParseExtra().

Property Documentation

◆ DirWorkshop

DirectoryInfo ModManager.DirWorkshop
staticget

Definition at line 31 of file ModManager.cs.

◆ IsInitialized

bool ModManager.IsInitialized
staticget

Definition at line 33 of file ModManager.cs.

Referenced by Core.StartCase().

◆ ListChainLoad

List<string> ModManager.ListChainLoad
staticget

Definition at line 29 of file ModManager.cs.


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