Elin Decompiled Documentation EA 23.102 Nightly
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 265 of file ModManager.cs.

266 {
267 ModPackage modPackage = new ModPackage
268 {
269 dirInfo = dir,
270 installed = true
271 };
272 packages.Add(modPackage);
273 modPackage.isInPackages = isInPackages;
274 modPackage.loadPriority = priorityIndex;
276 return modPackage;
277 }
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 279 of file ModManager.cs.

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

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

Referenced by HandleResults().

◆ CountUserMod()

int ModManager.CountUserMod ( )
inline

Definition at line 297 of file ModManager.cs.

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

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:279

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:133
static string custom
Definition: CorePath.cs:163
Definition: Core.cs:14
static void SaveElinIni(IniData ini)
Definition: Core.cs:793
static IniData GetElinIni()
Definition: Core.cs:759
Definition: EClass.cs:5
static CoreDebug debug
Definition: EClass.cs:48
ModPackage AddPackage(DirectoryInfo dir, bool isInPackages=false)
Definition: ModManager.cs:265

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 235 of file ModManager.cs.

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

311 {
312 switch (dir.Name)
313 {
314 case "TalkText":
315 {
316 FileInfo[] files = dir.GetFiles();
317 foreach (FileInfo fileInfo in files)
318 {
319 if (fileInfo.Name.EndsWith(".xlsx"))
320 {
321 TalkText.modList.Add(new ExcelData(fileInfo.FullName));
322 }
323 }
324 break;
325 }
326 case "Map":
327 {
328 if (package.builtin)
329 {
330 break;
331 }
332 FileInfo[] files = dir.GetFiles();
333 foreach (FileInfo fileInfo5 in files)
334 {
335 if (fileInfo5.Name.EndsWith(".z"))
336 {
337 MOD.listMaps.Add(fileInfo5);
338 }
339 }
340 break;
341 }
342 case "Map Piece":
343 {
344 if (package.builtin)
345 {
346 break;
347 }
348 FileInfo[] files = dir.GetFiles();
349 foreach (FileInfo fileInfo3 in files)
350 {
351 if (fileInfo3.Name.EndsWith(".mp"))
352 {
353 MOD.listPartialMaps.Add(fileInfo3);
354 }
355 }
356 break;
357 }
358 case "Texture Replace":
359 {
360 FileInfo[] files = dir.GetFiles();
361 foreach (FileInfo fileInfo6 in files)
362 {
363 if (fileInfo6.Name.EndsWith(".png"))
364 {
365 replaceFiles.Add(fileInfo6);
366 }
367 }
368 break;
369 }
370 case "Texture":
371 {
372 FileInfo[] files = dir.GetFiles();
373 foreach (FileInfo fileInfo4 in files)
374 {
375 if (fileInfo4.Name.EndsWith(".png"))
376 {
377 SpriteReplacer.dictModItems[fileInfo4.Name.Replace(".png", "")] = fileInfo4.GetFullFileNameWithoutExtension();
378 }
379 }
380 break;
381 }
382 case "Portrait":
383 {
384 FileInfo[] files = dir.GetFiles();
385 foreach (FileInfo fileInfo2 in files)
386 {
387 if (fileInfo2.Name.EndsWith(".png"))
388 {
389 if (fileInfo2.Name.StartsWith("BG_"))
390 {
391 Portrait.modPortraitBGs.Add(fileInfo2);
392 }
393 else if (fileInfo2.Name.StartsWith("BGF_"))
394 {
395 Portrait.modPortraitBGFs.Add(fileInfo2);
396 }
397 else if (fileInfo2.Name.EndsWith("-full.png"))
398 {
399 Portrait.modFull.Add(fileInfo2);
400 }
401 else if (fileInfo2.Name.EndsWith("-overlay.png"))
402 {
403 Portrait.modOverlays.Add(fileInfo2);
404 }
405 else
406 {
407 Portrait.modPortraits.Add(fileInfo2);
408 }
409 Portrait.allIds.Add(fileInfo2.Name);
410 }
411 }
412 break;
413 }
414 case "Lang":
415 {
416 DirectoryInfo[] directories = dir.GetDirectories();
417 foreach (DirectoryInfo directoryInfo in directories)
418 {
419 if (!directoryInfo.Name.StartsWith("_") && !TryAddLang(directoryInfo, isNew: false))
420 {
421 Debug.Log("Generating Language Mod Contents:" + directoryInfo.FullName);
422 IO.CopyDir(CorePath.packageCore + "Lang/EN", directoryInfo.FullName);
423 Directory.CreateDirectory(directoryInfo.FullName + "/Dialog");
424 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", directoryInfo.FullName + "/Dialog");
425 EClass.sources.ExportSourceTexts(directoryInfo.FullName + "/Game");
426 IO.Copy(CorePath.packageCore + "Lang/lang.ini", directoryInfo.FullName + "/");
427 TryAddLang(directoryInfo, isNew: true);
428 }
429 }
430 break;
431 }
432 }
433 bool TryAddLang(DirectoryInfo dirLang, bool isNew)
434 {
435 string name = dirLang.Name;
436 FileInfo[] files2 = dirLang.GetFiles();
437 foreach (FileInfo fileInfo7 in files2)
438 {
439 if (fileInfo7.Name == "lang.ini")
440 {
441 LangSetting langSetting = new LangSetting(fileInfo7.FullName)
442 {
443 id = name,
444 dir = dirLang.FullName + "/"
445 };
446 if (isNew)
447 {
448 langSetting.SetVersion();
449 }
450 else if ((Application.isEditor || Lang.runUpdate) && !Lang.IsBuiltin(dirLang.Name) && langSetting.GetVersion() != EClass.core.version.GetInt())
451 {
453 Log.system = "Updated Language Files:" + Environment.NewLine + Environment.NewLine;
454 Debug.Log("Updating Language:" + langSetting.name + "/" + langSetting.GetVersion() + "/" + EClass.core.version.GetInt());
455 string text = dirLang.FullName + "/Game";
456 Directory.Move(text, text + "_temp");
459 IO.DeleteDirectory(text + "_temp");
460 text = dirLang.FullName + "/Dialog";
461 Directory.Move(text, text + "_temp");
462 IO.CopyDir(CorePath.packageCore + "Lang/_Dialog", text);
463 UpdateDialogs(new DirectoryInfo(text), text + "_temp");
464 IO.DeleteDirectory(text + "_temp");
465 text = dirLang.FullName + "/Data";
466 IO.CopyDir(text, text + "_temp");
467 IO.Copy(CorePath.packageCore + "Lang/EN/Data/god_talk.xlsx", text);
468 IO.Copy(CorePath.packageCore + "Lang/EN/Data/chara_talk.xlsx", text);
469 UpdateTalks(new DirectoryInfo(text), text + "_temp");
470 IO.DeleteDirectory(text + "_temp");
471 langSetting.SetVersion();
472 IO.SaveText(dirLang.FullName + "/update.txt", Log.system);
473 }
474 MOD.langs[name] = langSetting;
475 return true;
476 }
477 }
478 return false;
479 }
480 }
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:341
static void Copy(string fromPath, string toPath)
Definition: IO.cs:266
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:233
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:499
List< FileInfo > replaceFiles
Definition: ModManager.cs:27
void UpdateDialogs(DirectoryInfo dir, string dirTemp)
Definition: ModManager.cs:482
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())
198 {
199 package5.Activate();
200 if (package5.activated)
201 {
202 BaseModManager.listChainLoad.Add(package5.dirInfo.FullName);
203 }
204 }
205 }
207 BaseModManager.isInitialized = true;
208 yield return new WaitForEndOfFrame();
209 onComplete?.Invoke();
210 if ((bool)loading)
211 {
212 UnityEngine.Object.Destroy(loading.gameObject);
213 }
214 yield return null;
215 }
static List< string > listChainLoad
bool IsValidVersion()
Text Log(string s)
void HandleResults(UgcQuery query)
Definition: ModManager.cs:84
void LoadLoadOrder()
Definition: ModManager.cs:235
static bool disableMod
Definition: ModManager.cs:25
static List< object > ListPluginObject
Definition: ModManager.cs:23
static void OnModsActivated()
Definition: ModUtil.cs:17
Definition: Util.cs:10
static Transform Instantiate(string path, Component parent=null)
Definition: Util.cs:67

References BaseModPackage.Activate(), BaseModPackage.activated, AddPackage(), 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, 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 217 of file ModManager.cs.

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

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

References UpdateDialogs(), and UpdateExcelBook().

Referenced by ParseExtra(), and UpdateDialogs().

◆ UpdateExcelBook()

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

Definition at line 511 of file ModManager.cs.

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

References UpdateExcelSheet().

Referenced by UpdateDialogs(), and UpdateTalks().

◆ UpdateExcelSheet()

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

Definition at line 549 of file ModManager.cs.

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

References Debug.

Referenced by UpdateExcelBook().

◆ UpdateTalks()

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

Definition at line 499 of file ModManager.cs.

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

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: