Skip to content

Commit a046c60

Browse files
author
Maximilian F
authored
Multiple preceding key words functionality added
1 parent 986e75e commit a046c60

21 files changed

+1221
-53
lines changed

BuildMod.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ for /r %%M in (*.lua) do (
2626
rmdir /s /q "MOD"
2727
mkdir "MOD"
2828
)
29-
29+
rmdir /s /q "_TEMP"
3030
REM ########################################################
3131
REM ############### PREPARATION ############################
3232
REM ########################################################

MODBUILDER/LoadAndExecuteModScript.lua

Lines changed: 170 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,19 @@ function HandleModScript(MOD_DEF)
33
for m=1,getn(MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"]),1 do
44
for i=1,getn(MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"]),1 do
55
for k=1,getn(MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["VALUE_CHANGE_TABLE"]),1 do
6+
local PRECEDING_KEY_WORDS_SUB = nil
7+
if MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["PRECEDING_KEY_WORDS"] ~= nil then
8+
PRECEDING_KEY_WORDS_SUB = MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["PRECEDING_KEY_WORDS"]
9+
elseif MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["REPLACE_AFTER_ENTRY"] ~= nil then
10+
PRECEDING_KEY_WORDS_SUB = MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["REPLACE_AFTER_ENTRY"]
11+
end
612
ExchangePropertyValue
713
(
8-
gsub(THIS_FOLDER_PATH," ","") .. "MODBUILDER" .. strchar(92) .. "MOD" .. strchar(92) .. gsub(NMS_MOD_DEFINITION_CONTAINER["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["MBIN_FILE_SOURCE"],".MBIN",".EXML"),
14+
THIS_FOLDER_PATH .. "MODBUILDER" .. strchar(92) .. "MOD" .. strchar(92) .. gsub(NMS_MOD_DEFINITION_CONTAINER["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["MBIN_FILE_SOURCE"],".MBIN",".EXML"),
915
strchar(34) .. MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["VALUE_CHANGE_TABLE"][k][1] .. strchar(34),
1016
MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["VALUE_CHANGE_TABLE"][k][2],
11-
MOD_DEF["MODIFICATIONS"][n]["MBIN_CHANGE_TABLE"][m]["EXML_CHANGE_TABLE"][i]["REPLACE_AFTER_ENTRY"]
12-
)
17+
PRECEDING_KEY_WORDS_SUB
18+
)
1319
end
1420
end
1521
end
@@ -24,31 +30,182 @@ function LoadFileData(file)
2430
end
2531

2632
THIS_FOLDER_PATH = LoadFileData("THIS_FOLDER_PATH.txt")
33+
THIS_FOLDER_PATH = strsub(THIS_FOLDER_PATH, 1, strlen(THIS_FOLDER_PATH)-1)
34+
35+
function ExchangePropertyValue(file, property, value, preceding_key_words)
36+
print("\n" .. file, "\n", property, value)
37+
preceding_key_words_empty = 0
38+
if type(preceding_key_words) == "table" then
39+
if getn(preceding_key_words) == 0 then
40+
preceding_key_words_empty = 1
41+
else
42+
if preceding_key_words[1] == "" or preceding_key_words[1] == nil then
43+
preceding_key_words_empty = 1
44+
end
45+
end
46+
if preceding_key_words_empty == 0 then
47+
local preceding_key_words = CopyTable(preceding_key_words)
48+
for z=1,getn(preceding_key_words),1 do
49+
preceding_key_words[z] = strchar(34) .. preceding_key_words[z] .. strchar(34)
50+
end
51+
end
52+
elseif type(preceding_key_words) == "string" then
53+
if preceding_key_words == "" or preceding_key_words == nil then
54+
preceding_key_words_empty = 1
55+
else
56+
preceding_key_words = strchar(34) .. preceding_key_words .. strchar(34)
57+
end
58+
end
59+
local TextFileTable = ParseTextFileIntoTable(file)
60+
local preceding_key_words_found = 0
61+
local line = ""
62+
local j = 1
63+
local CurrentLine = 0
64+
for i=1,getn(TextFileTable),1 do
65+
line=TextFileTable[i]
66+
if (line ~= nil) then
67+
if preceding_key_words_empty == 0 and preceding_key_words_found == 0 then
68+
if type(preceding_key_words) == "table" then
69+
if strfind(line, preceding_key_words[j]) then
70+
if j == getn(preceding_key_words) then
71+
preceding_key_words_found = 1
72+
end
73+
j = j+1
74+
end
75+
elseif type(preceding_key_words) == "string" then
76+
if strfind(line, preceding_key_words) then
77+
preceding_key_words_found = 1
78+
end
79+
end
80+
end
81+
if strfind(line, property) and ( (preceding_key_words_empty == 1) or ( (preceding_key_words_empty == 0) and (preceding_key_words_found == 1) ) ) then
82+
local initial_pos = strfind(line, property)
83+
local start_pos = strfind(line, "value=", initial_pos)
84+
local end_pos = strfind(line, '"', start_pos+7)
85+
local exstring = strsub(line, start_pos+7, end_pos-1)
86+
local newline = gsub(line, exstring, value)
87+
print("LUA: Exchanged line: " .. line .. " with line: " .. newline)
88+
-- print(newline)
89+
TextFileTable[i] = newline
90+
preceding_key_words_found = 0
91+
WriteToFile(ConvertLineTableToText(TextFileTable), file)
92+
break
93+
end
94+
end
95+
end
96+
end
2797

28-
function ExchangePropertyValue(file, property, value, replace_after_entry)
98+
function ConvertLineTableToText(LineTable)
99+
local Text = ""
100+
for i=1,getn(LineTable)-1,1 do
101+
Text = Text .. LineTable[i] .. "\n"
102+
end
103+
Text = Text .. LineTable[getn(LineTable)]
104+
return Text
105+
end
106+
107+
function ParseTextFileIntoTable(file)
108+
local filehandle = openfile(file, 'r')
109+
local LineTable = {}
110+
local LineCount = 0
111+
line = read(filehandle, '*l')
112+
while line ~= nil do
113+
LineCount=LineCount+1
114+
tinsert(LineTable, line)
115+
line = read(filehandle, '*l')
116+
end
117+
closefile(filehandle)
118+
return LineTable, LineCount
119+
end
120+
121+
function CopyTable(table_to_clone)
122+
local TableClone = {}
123+
for k,v in table_to_clone do
124+
tinsert(TableClone,v)
125+
end
126+
return TableClone
127+
end
128+
129+
function ReplaceLastLine(TextChunk, line, newline)
130+
local _,linecount = gsub(TextChunk,"\n","")
131+
local TempTextChunk = gsub(TextChunk,"\n","X_TEMP_LINEBREAK_X",linecount-2)
132+
TempTextChunk = gsub(TempTextChunk, "\n" .. line, "\n" .. newline, 1)
133+
return gsub(TempTextChunk,"X_TEMP_LINEBREAK_X","\n")
134+
end
135+
136+
function ExchangePropertyValueOLD(file, property, value, preceding_key_words)
29137
print(file)
30-
if replace_after_entry ~= "" and replace_after_entry ~= nil then replace_after_entry = strchar(34) .. replace_after_entry .. strchar(34) end
138+
preceding_key_words_empty = 0
139+
if type(preceding_key_words) == "table" then
140+
if getn(preceding_key_words) == 0 then
141+
preceding_key_words_empty = 1
142+
else
143+
if preceding_key_words[1] == "" or preceding_key_words[1] == nil then
144+
preceding_key_words_empty = 1
145+
end
146+
end
147+
if preceding_key_words_empty == 0 then
148+
for z=1,getn(preceding_key_words),1 do
149+
preceding_key_words[z] = strchar(34) .. preceding_key_words[z] .. strchar(34)
150+
end
151+
end
152+
elseif type(preceding_key_words) == "string" then
153+
if preceding_key_words == "" or preceding_key_words == nil then
154+
preceding_key_words_empty = 1
155+
else
156+
preceding_key_words = strchar(34) .. preceding_key_words .. strchar(34)
157+
end
158+
end
31159
local filedata = LoadFileData(file)
32160
local filehandle = openfile(file, 'r')
33-
local replace_after_entry_found = 0
161+
local preceding_key_words_found = 0
162+
local preceding_key_words_found_initial = 0
34163
local TextChunkToReplace = ""
35164
local line = ""
165+
local j = 1
166+
local CurrentLine = 0
36167
local _,linecount = gsub(filedata,"\n","")
37168
for i=1,linecount+1,1 do
38169
line=read(filehandle, '*l')
39170
if (line ~= nil) then
40-
if strfind(line, replace_after_entry) then replace_after_entry_found = 1 end
41-
if replace_after_entry_found == 1 then TextChunkToReplace = TextChunkToReplace .. line .. "\n" end
42-
if strfind(line, property) and ( (replace_after_entry == "" or replace_after_entry == nil) or ( (replace_after_entry ~= "" and replace_after_entry ~= nil) and replace_after_entry_found == 1 ) ) then
171+
if preceding_key_words_empty == 0 and preceding_key_words_found == 0 then
172+
if type(preceding_key_words) == "table" then
173+
if strfind(line, preceding_key_words[j]) then
174+
if j == getn(preceding_key_words) then
175+
preceding_key_words_found = 1
176+
end
177+
preceding_key_words_found_initial = 1
178+
j = j+1
179+
end
180+
elseif type(preceding_key_words) == "string" then
181+
if strfind(line, preceding_key_words) then
182+
preceding_key_words_found = 1
183+
preceding_key_words_found_initial = 1
184+
end
185+
end
186+
end
187+
if preceding_key_words_found_initial == 1 then
188+
CurrentLine=CurrentLine+1
189+
if CurrentLine == 1 then
190+
TextChunkToReplace = TextChunkToReplace .. line
191+
else
192+
TextChunkToReplace = TextChunkToReplace .. "\n" .. line
193+
end
194+
end
195+
if strfind(line, property) and ( (preceding_key_words_empty == 1) or ( (preceding_key_words_empty == 0) and (preceding_key_words_found == 1) ) ) then
43196
local initial_pos = strfind(line, property)
44197
local start_pos = strfind(line, "value=", initial_pos)
45198
local end_pos = strfind(line, '"', start_pos+7)
46199
local exstring = strsub(line, start_pos+7, end_pos-1)
47200
local newline = gsub(line, exstring, value)
48-
local TextChunkToReplaceMod = gsub(TextChunkToReplace, line, newline)
49-
if replace_after_entry == "" or replace_after_entry == nil then filedata = gsub(filedata, line, newline)
50-
else filedata = gsub(filedata, TextChunkToReplace, TextChunkToReplaceMod) end
51-
replace_after_entry_found = 0
201+
if preceding_key_words_empty == 1 then
202+
filedata = gsub(filedata, line, newline)
203+
else
204+
TextChunkToReplaceMod = ReplaceLastLine(TextChunkToReplace, line, newline)
205+
filedata,c = gsub(filedata, TextChunkToReplace, TextChunkToReplaceMod, 1)
206+
end
207+
preceding_key_words_found = 0
208+
preceding_key_words_found_initial = 0
52209
closefile(filehandle)
53210
WriteToFile(filedata, file)
54211
break

ModScriptCollection/AlwaysDay.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@ NMS_MOD_DEFINITION_CONTAINER =
22
{
33
["MOD_FILENAME"] = "AlwaysDay.pak",
44
["MOD_AUTHOR"] = "Mjjstal",
5-
["NMS_VERSION"] = "1.72",
5+
["NMS_VERSION"] = "1.77", --version on first mod release
66
["MODIFICATIONS"] =
77
{
88
{
9-
["PAK_FILE_SOURCE"] = "NMSARC.59B126E2.pak",
9+
["PAK_FILE_SOURCE"] = "NMSARC.59B126E2.pak", --globals
1010
["MBIN_CHANGE_TABLE"] =
1111
{
1212
{
1313
["MBIN_FILE_SOURCE"] = "GCSKYGLOBALS.GLOBALS.MBIN",
1414
["EXML_CHANGE_TABLE"] =
1515
{
1616
{
17-
["REPLACE_AFTER_ENTRY"] = "",
17+
["PRECEDING_KEY_WORDS"] = "", -- use a single string or a list = {"PrecedingKeyWord1", "PrecedingKeyWord2"}, leave empty "" or {} if not necessary
1818
["VALUE_CHANGE_TABLE"] =
1919
{
20-
{"MinNightFade", "1.0"}, -- Original "0.62"
21-
{"MaxNightFade", "1.0"} -- Original ""0.68"
20+
{"MinNightFade", "1.0"}, -- Original "0.62" always leave the orig. value as a reference
21+
{"MaxNightFade", "1.0"} -- Original "0.68"
2222
}
23-
} --for multiple EXML changes with REPLACE_AFTER_ENTRY copy this chunk below and add a comma behind this line here
23+
} --for multiple EXML changes with PRECEDING_KEY_WORDS copy this chunk below and add a comma behind this line here
2424
}
2525
} --for multiple MBIN sources: copy this chunk below and add a comma behind this line here
2626
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
NMS_MOD_DEFINITION_CONTAINER =
2+
{
3+
["MOD_FILENAME"] = "AmbientGameMode.pak",
4+
["MOD_AUTHOR"] = "Mjjstal",
5+
["NMS_VERSION"] = "1.77",
6+
["MODIFICATIONS"] =
7+
{
8+
{
9+
["PAK_FILE_SOURCE"] = "NMSARC.59B126E2.pak",
10+
["MBIN_CHANGE_TABLE"] =
11+
{
12+
{
13+
["MBIN_FILE_SOURCE"] = "GCDEBUGOPTIONS.GLOBAL.MBIN",
14+
["EXML_CHANGE_TABLE"] =
15+
{
16+
{
17+
["PRECEDING_KEY_WORDS"] = "NewSaveGameMode",
18+
["VALUE_CHANGE_TABLE"] =
19+
{
20+
{"PresetGameMode", "6152"}
21+
}
22+
}
23+
}
24+
}
25+
}
26+
}
27+
}
28+
}

ModScriptCollection/DenserForests.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ NMS_MOD_DEFINITION_CONTAINER =
22
{
33
["MOD_FILENAME"] = "DenserForests.pak",
44
["MOD_AUTHOR"] = "Mjjstal",
5-
["NMS_VERSION"] = "1.72",
5+
["NMS_VERSION"] = "1.77",
66
["MODIFICATIONS"] =
77
{
88
{
@@ -14,23 +14,23 @@ NMS_MOD_DEFINITION_CONTAINER =
1414
["EXML_CHANGE_TABLE"] =
1515
{
1616
{
17-
["REPLACE_AFTER_ENTRY"] = "FOREST",
17+
["PRECEDING_KEY_WORDS"] = "FOREST",
1818
["VALUE_CHANGE_TABLE"] =
1919
{
2020
{"PatchSize", "320"}, -- Original "64"
2121
{"RegionScale", "6"} -- Original "6"
2222
}
2323
},
2424
{
25-
["REPLACE_AFTER_ENTRY"] = "GRASS",
25+
["PRECEDING_KEY_WORDS"] = "GRASS",
2626
["VALUE_CHANGE_TABLE"] =
2727
{
2828
{"PatchSize", "100"}, -- Original "100"
2929
{"RegionScale", "5"} -- Original "5"
3030
}
3131
},
3232
{
33-
["REPLACE_AFTER_ENTRY"] = "BIOMEPLANT",
33+
["PRECEDING_KEY_WORDS"] = "BIOMEPLANT",
3434
["VALUE_CHANGE_TABLE"] =
3535
{
3636
{"PatchSize", "550"}, -- Original "550"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
NMS_MOD_DEFINITION_CONTAINER =
2+
{
3+
["MOD_FILENAME"] = "DisableSaving.pak",
4+
["MOD_AUTHOR"] = "Mjjstal",
5+
["NMS_VERSION"] = "1.77",
6+
["MODIFICATIONS"] =
7+
{
8+
{
9+
["PAK_FILE_SOURCE"] = "NMSARC.59B126E2.pak",
10+
["MBIN_CHANGE_TABLE"] =
11+
{
12+
{
13+
["MBIN_FILE_SOURCE"] = "GCDEBUGOPTIONS.GLOBAL.MBIN",
14+
["EXML_CHANGE_TABLE"] =
15+
{
16+
{
17+
["PRECEDING_KEY_WORDS"] = "",
18+
["VALUE_CHANGE_TABLE"] =
19+
{
20+
{"DisableSaving", "True"} -- Original "False"
21+
}
22+
}
23+
}
24+
}
25+
}
26+
}
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
NMS_MOD_DEFINITION_CONTAINER =
2+
{
3+
["MOD_FILENAME"] = "ForceVRMode.pak",
4+
["MOD_AUTHOR"] = "Mjjstal",
5+
["NMS_VERSION"] = "1.77",
6+
["MODIFICATIONS"] =
7+
{
8+
{
9+
["PAK_FILE_SOURCE"] = "NMSARC.59B126E2.pak",
10+
["MBIN_CHANGE_TABLE"] =
11+
{
12+
{
13+
["MBIN_FILE_SOURCE"] = "GCDEBUGOPTIONS.GLOBAL.MBIN",
14+
["EXML_CHANGE_TABLE"] =
15+
{
16+
{
17+
["PRECEDING_KEY_WORDS"] = "",
18+
["VALUE_CHANGE_TABLE"] =
19+
{
20+
{"PipelineFile", "PIPELINES/PIPELINEDEFERREDVR.BIN"} -- Original "PIPELINES/PIPELINEDEFERRED.BIN"
21+
}
22+
}
23+
}
24+
}
25+
}
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)