@@ -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)
2430end
2531
2632THIS_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
0 commit comments