From 1b1497d43999416f2da35de6bbf05795ccbb7bc6 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 8 Apr 2023 21:27:43 -0500 Subject: [PATCH] adds a reloadModuleFiles(%moduleGroup); command method checks last module.filename execution via getTimeStamp() the last time it was run, and compares fileModifiedTime to see if the next time that file had been altered. called in moduleExec --- .../game/core/utility/scripts/module.tscript | 72 ++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/Templates/BaseGame/game/core/utility/scripts/module.tscript b/Templates/BaseGame/game/core/utility/scripts/module.tscript index 151cdb138..a2617fa91 100644 --- a/Templates/BaseGame/game/core/utility/scripts/module.tscript +++ b/Templates/BaseGame/game/core/utility/scripts/module.tscript @@ -4,8 +4,78 @@ $reportModuleFileConflicts=true; if (!isObject(ExecFilesList)) new ArrayObject(ExecFilesList); +function reformatModTime(%modTime) +{ + %date = getword(%modTime,0); + %date = strreplace(%modTime,"/"," "); + %date = getword(%date,2) SPC getword(%date,0) SPC getword(%date,1); + %hourMinSec = getword(%modTime,1); + %hourMinSec = strreplace(%hourMinSec,":"," "); + %retTime = %date SPC %hourMinSec; + for (%i=0;%i<6;%i++) + { + %nTry = getWord(%retTime,%i); + if (%nTry<10) + setWord(%retTime,%i,"0" SPC %nTry); + } + return %retTime; +} + +//example usage: reloadModuleFiles("game"); +function reloadModuleFiles(%moduleGroup) +{ + //Get our modules so we can exec any specific client-side loading/handling + %modulesList = ModuleDatabase.findModules(); + for(%i=0; %i < getWordCount(%modulesList); %i++) + { + %module = getWord(%modulesList, %i); + if(%moduleGroup !$= "") + { + if(%module.group !$= %moduleGroup) + continue; + } + if(isFile(%module.ModuleScriptFilePath)) + { + %modTime = fileModifiedTime(%module.ModuleScriptFilePath); + if (getWordCount(%modTime)>0) + { + %doExec = false; + if ($lastReExecution $="") + { + %doExec = true; + } + else + { + %modTime = reformatModTime(%modTime); + if (strcmp(%modTime,$lastReExecution)>0) + { + //error("moded:"@ %modTime); + //warn("execd:"@ $lastReExecution); + %doExec = true; + } + } + if (%doExec) + { + exec(%module.ModuleScriptFilePath); + } + } + } + } + $lastReExecution = getTimeStamp(); + //erase time seperators + $lastReExecution = strreplace($lastReExecution,"_"," "); + $lastReExecution = strreplace($lastReExecution,"-"," "); + for (%i=0;%i<6;%i++) + { + %nTry = getWord($lastReExecution,%i); + if (%nTry<10) + setWord($lastReExecution,%i,"0" SPC %nTry); + } +} + function moduleExec(%functionName, %moduleGroup, %var0, %var1, %var2, %var3, %var4, %var5, %var6) -{ +{ + reloadModuleFiles(%moduleGroup); //clear per module group file execution chain %execArray = new ArrayObject("callOn" @ %functionName @ "_" @ %moduleGroup); ExecFilesList.push_back(%execArray);