stoffe Posted December 10, 2006 Author Share Posted December 10, 2006 Well it worked partially there Stoffe however it still copies files into the overide. Then it tries to patch the 2da files. When it gives it's error it also leaves the files in override. here is the installlog. Hmm, that's not right, it should check right at the beginning before proceeding to do anything else. Weird it didn't do like that with the mod I used to test the 1.2.8b9 installer with. Must have moved things around improperly. I'll have another look at it tomorrow and try to fix it more reliably that time. Link to comment Share on other sites More sharing options...
Darkkender Posted December 11, 2006 Share Posted December 11, 2006 Cool, I was hoping the installlog above would help you out. Link to comment Share on other sites More sharing options...
stoffe Posted December 12, 2006 Author Share Posted December 12, 2006 Well it worked partially there Stoffe however it still copies files into the overide. Then it tries to patch the 2da files. When it gives it's error it also leaves the files in override. Unless I've managed to screw up again (which in itself wouldn't be surprising) the patcher should now hopefully check for required files before doing anything no matter what. I've uploaded v1.2.8b10 which should contain this fix. Link to comment Share on other sites More sharing options...
Darkkender Posted December 12, 2006 Share Posted December 12, 2006 I'll give it a try and see that it works. If it doesn't I'm keeping my mouth shut though. Link to comment Share on other sites More sharing options...
DreadWizardDM Posted April 9, 2007 Share Posted April 9, 2007 Hey Stoffe quick question **grinning** any chance you can give lessons on this thing live over teamspeak or vent? LOL.. i want to learn and well ...sadly readme files just confuse me haha. I want to take all these old mods I have downloaded and incorporate them into a tsl patcher somehow so thatway whenever I decide to use or remove a mod its easier and I dont have to fight for days with files. Link to comment Share on other sites More sharing options...
rocky348 Posted May 28, 2007 Share Posted May 28, 2007 Ok, I think i followed your dialog tutorial step for step, but i get the following output when I run the setup file, what did I do wrong? • Patch operation started... • Copying file "upcrystals.2da" to Override folder... • Modifying 2DA file upcrystals.2da... • Finished updating 2DA file C:\Program Files\LucasArts\SWKotOR2\override\upcrystals.2da. • Copying file "globalcat.2da" to Override folder... • Modifying 2DA file globalcat.2da... • Finished updating 2DA file C:\Program Files\LucasArts\SWKotOR2\override\globalcat.2da. • Modifying GFF blueprints... • Copying file "atton.dlg" to Override folder... • Modifying GFF file atton.dlg... • Unable to find a field label matching "AddField0" in atton.dlg, skipping... • Unable to find a field label matching "AddField1" in atton.dlg, skipping... • Unable to find a field label matching "AddField2" in atton.dlg, skipping... • Unable to find a field label matching "AddField3" in atton.dlg, skipping... • Unable to find a field label matching "AddField4" in atton.dlg, skipping... • Unable to find a field label matching "AddField5" in atton.dlg, skipping... • Unable to find a field label matching "AddField6" in atton.dlg, skipping... • Unable to find a field label matching "AddField7" in atton.dlg, skipping... • Unable to find a field label matching "AddField8" in atton.dlg, skipping... • Unable to find a field label matching "AddField9" in atton.dlg, skipping... • Unable to find a field label matching "AddField10" in atton.dlg, skipping... • Unable to find a field label matching "AddField11" in atton.dlg, skipping... • Unable to find a field label matching "AddField12" in atton.dlg, skipping... • Unable to find a field label matching "AddField13" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY2 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY1" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY4 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY3" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY6 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY5" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY8 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY7" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY10 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY9" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY12 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY11" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY14 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY13" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY16 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY15" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY18 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY17" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY20 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY19" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY22 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY21" in atton.dlg, skipping... • Invalid memory token 2DAMEMORY24 encountered, unable to insert a proper value in the 2da! • Unable to find a field label matching "2DAMEMORY23" in atton.dlg, skipping... • Finished updating GFF file atton.dlg • Installing unmodified files... • Copying file "pc_colo_101.uti" to the "Override" folder... • Copying file "pc_colo_102.uti" to the "Override" folder... • Copying file "pc_colo_103.uti" to the "Override" folder... • Copying file "pc_colo_104.uti" to the "Override" folder... • Copying file "pc_dblsbr100.uti" to the "Override" folder... • Copying file "pc_dblsbr101.uti" to the "Override" folder... • Copying file "pc_dblsbr102.uti" to the "Override" folder... • Copying file "pc_dblsbr103.uti" to the "Override" folder... • Copying file "pc_dblsbr104.uti" to the "Override" folder... • Copying file "pc_lghtsbr100.uti" to the "Override" folder... • Copying file "pc_lghtsbr101.uti" to the "Override" folder... • Copying file "pc_lghtsbr102.uti" to the "Override" folder... • Copying file "pc_lghtsbr103.uti" to the "Override" folder... • Copying file "pc_lghtsbr104.uti" to the "Override" folder... • Copying file "t7_atton01.tga" to the "Override" folder... • Copying file "t7_atton01.txi" to the "Override" folder... • Copying file "t7_maul01.tga" to the "Override" folder... • Copying file "t7_maul01.txi" to the "Override" folder... • Copying file "vis_lghtsbr01.uti" to the "Override" folder... • Copying file "vis_lghtsbr02.uti" to the "Override" folder... • Copying file "visas1.ncs" to the "Override" folder... • Copying file "visas2.ncs" to the "Override" folder... • Copying file "w_dblsbr_200.mdl" to the "Override" folder... • Copying file "w_dblsbr_200.mdx" to the "Override" folder... • Copying file "w_dblsbr_201.mdl" to the "Override" folder... • Copying file "w_dblsbr_201.mdx" to the "Override" folder... • Copying file "w_dblsbr_202.mdl" to the "Override" folder... • Copying file "w_dblsbr_202.mdx" to the "Override" folder... • Copying file "w_dblsbr_203.mdl" to the "Override" folder... • Copying file "w_dblsbr_203.mdx" to the "Override" folder... • Copying file "w_dblsbr_204.mdl" to the "Override" folder... • Copying file "w_dblsbr_204.mdx" to the "Override" folder... • Copying file "w_lghtsbr_101.mdl" to the "Override" folder... • Copying file "w_lghtsbr_101.mdx" to the "Override" folder... • Copying file "w_lghtsbr_226.mdl" to the "Override" folder... • Copying file "w_lghtsbr_226.mdx" to the "Override" folder... • Copying file "w_lghtsbr_228.mdl" to the "Override" folder... • Copying file "w_lghtsbr_228.mdx" to the "Override" folder... • Copying file "w_lghtsbr_229.mdl" to the "Override" folder... • Copying file "w_lghtsbr_229.mdx" to the "Override" folder... • Copying file "w_lghtsbr_230.mdl" to the "Override" folder... • Copying file "w_lghtsbr_230.mdx" to the "Override" folder... • Copying file "Aleek.tga" to the "Override" folder... • Copying file "Aleek.txi" to the "Override" folder... • Copying file "atton1.ncs" to the "Override" folder... • Copying file "atton2.ncs" to the "Override" folder... • Copying file "atton_lghtsbr01.uti" to the "Override" folder... • Copying file "atton_lghtsbr02.uti" to the "Override" folder... • Copying file "bao_dblsbr01.uti" to the "Override" folder... • Copying file "bao_dblsbr02.uti" to the "Override" folder... • Copying file "baodur1.ncs" to the "Override" folder... • Copying file "baodur2.ncs" to the "Override" folder... • Copying file "baosaber.dlg" to the "Override" folder... • Copying file "disc_lghtsbr01.uti" to the "Override" folder... • Copying file "disc_lghtsbr02.uti" to the "Override" folder... • Copying file "disciple1.ncs" to the "Override" folder... • Copying file "disciple2.ncs" to the "Override" folder... • Copying file "iw_dblsbr_200.tga" to the "Override" folder... • Copying file "iw_dblsbr_201.tga" to the "Override" folder... • Copying file "iw_dblsbr_202.tga" to the "Override" folder... • Copying file "iw_dblsbr_203.tga" to the "Override" folder... • Copying file "iw_dblsbr_204.tga" to the "Override" folder... • Copying file "iw_lghtsbr_101.tga" to the "Override" folder... • Copying file "iw_lghtsbr_226.tga" to the "Override" folder... • Copying file "iw_lghtsbr_228.tga" to the "Override" folder... • Copying file "iw_lghtsbr_229.tga" to the "Override" folder... • Copying file "iw_lghtsbr_230.tga" to the "Override" folder... • Copying file "iw_SbrCrstl_100.tga" to the "Override" folder... • Copying file "iw_SbrCrstl_101.tga" to the "Override" folder... • Copying file "iw_SbrCrstl_102.tga" to the "Override" folder... • Copying file "iw_SbrCrstl_103.tga" to the "Override" folder... • Copying file "iw_SbrCrstl_104.tga" to the "Override" folder... • Copying file "maiden1.ncs" to the "Override" folder... • Copying file "maiden2.ncs" to the "Override" folder... • Copying file "maiden_dblsbr01.uti" to the "Override" folder... • Copying file "maiden_dblsbr02.uti" to the "Override" folder... • Copying file "mira1.ncs" to the "Override" folder... • Copying file "mira2.ncs" to the "Override" folder... • Copying file "mira_lghtsbr01.uti" to the "Override" folder... • Copying file "mira_lghtsbr02.uti" to the "Override" folder... • Copying file "pc_colo_100.uti" to the "Override" folder... • Done. All changes have been applied. Oh what do you know, i've been working on this for 20 hours straight now. LOL thanks any help would be appreciated ciao for now Link to comment Share on other sites More sharing options...
Ulic and Cay Posted July 20, 2007 Share Posted July 20, 2007 Ok so I've been thinking about trying to ensure the compatibility of one of my mods with TSLRP when its released. Dashus recently explained to me that TG is apparently putting all their files (.2da's, .jrl, .dlg's, etc.) in a subfolder within the "override" folder. Now TSLPatcher could get at almost any file within that subfolder that a modder may need to edit except for .2da files. Now I was under the impression that .2da files couldn't be placed within a subfolder and still work (I thought that's why TSLPatcher didn't let you modify the location where .2da's were placed) but over here http://www.lucasforums.com/showthread.php?p=2346623#post2346623 Pavlos told me that I was wrong and, as I said, Dashus, if I read his PM right, told me that TG was doing just that. They're smart cookies so I guess I'm convinced. What I want to know is: If the game will read them, why can't we direct TSLPatcher to edit or place .2da files wherever we want? Also, again if it is possible, is there some workaround? Could I manually edit the "changes.ini" to direct TSLPatcher to put my changes wherever I want? Sorry for the long, rambling, post. Link to comment Share on other sites More sharing options...
stoffe Posted July 20, 2007 Author Share Posted July 20, 2007 What I want to know is: If the game will read them, why can't we direct TSLPatcher to edit or place .2da files wherever we want? It's a sort of brute force way of resolving ambiguity as to which file to modify. If you place 2DA files (or pretty much any file) in sub-folders you allow for a condition where the ResRef (filename) of that resource is no longer unique within the override scope. For example, if you have 20 different mods using sub-folders for their data in the override folder you could technically have 20 different appearance.2da files in your override folder, of which the game will only load one and completely ignore the rest (causing all the mods whose 2DA file was ignored to malfunction in the process). Since I don't know how the game determines which file to use if it encounters multiple copies of the same file within the override folder and its sub-folders this is a kind of forced way to resolve that ambiguity. It would be a relatively simple matter to make the TSLPatcher look inside sub-folders as well and pick the first match it finds, but handling the consequences of doing so would not be as simple. Sub-folders within the override folder is a mixed blessing. It makes it easier to organize the files belonging to different mods, but at the same time it makes it a lot harder to detect and avoid mod conflicts where different mods modify the same standard game files (or add new files that are named the same). If you have everything in the override folder directly you'll immediately notice if a file you attempt to copy there already exists. So in short, the TSLPatcher not looking in sub-folders is a "feature" since I couldn't think of any better ideas how to resolve such ambiguities. If anyone has a better idea of how to handle that I'm all ears. Link to comment Share on other sites More sharing options...
Ulic and Cay Posted July 20, 2007 Share Posted July 20, 2007 Thanks for your rationale. So what do people think is the best way for me to try and ensure compatibility with TSLRP if I'm using TSLPatcher? I guess I'll grab people's attention with the "info.rtf" file telling them if they have TSLRP installed they'll have to move the files I need to the override folder manually like Pavlos suggested on the other thread. I guess that's not a huge hassle... If someone has another idea let me know. Thanks again stoffe Link to comment Share on other sites More sharing options...
stoffe Posted July 26, 2007 Author Share Posted July 26, 2007 So what do people think is the best way for me to try and ensure compatibility with TSLRP if I'm using TSLPatcher? Personally I think it would be best to wait until the Restoration Project mod has been released. It's hard to know what needs to be done from a compatibility standpoint before knowing what they have changed, what files are affected and how they are organized. In more general terms I've always put it in the info.rtf instructions that all standard files required by the mod must be moved into the main override folder if they already exist there in sub-folders. Can't make it much more eye-catching than that, so if people still don't read the instructions it's their own fault if they mess up the game by installing the mod improperly. Link to comment Share on other sites More sharing options...
Kristy Kistic Posted August 12, 2007 Share Posted August 12, 2007 Hi Stoffe Is there a way to check if a field already exists in a gff file before actually adding a new one? (Like the ExclusiveColumn token for 2da's.) The point being I'd like to avoid adding the exact same field if it already exists. Link to comment Share on other sites More sharing options...
stoffe Posted August 13, 2007 Author Share Posted August 13, 2007 Hi Stoffe Is there a way to check if a field already exists in a gff file before actually adding a new one? (Like the ExclusiveColumn token for 2da's.) The point being I'd like to avoid adding the exact same field if it already exists. I've made a quick modification to how the TSLPatcher modifies GFF files. If it now encounters a field with the same label, data type and position in the GFF tree as one it tried to add it will not add a new field, but modify the existing field instead, setting the values the new field would have been given. The exception is structs added to a List field since they have no label, but are rather accessed by the list index they are added as, which would be dynamic if some mod has already modified the same file earlier. I've uploaded version 1.2.9b which contains this change. See the first post (or the SWK Modding tools page) for a download link. Same disclaimer as usual: This has only been minimally tested so use it at your own risk. It seemed to work as intended when I tried it, but there might be bugs and oversights. If you notice anything odd please let me know. Link to comment Share on other sites More sharing options...
Undying_Jedi Posted August 15, 2007 Share Posted August 15, 2007 hi, can anyone help me with this problem? I downloaded several mods from filefront and a few of them included TSLPatcher as easy installation. those include Jedi Temple on Coruscant, HK Factory Reconstructed, and New Force Powers. the problem is that whenever i click the install mod it says "An unhandled Error Occurred!" I tried to download the latest patcher and unzip it to the mod folder but it still didnt work. Right now i cant install any of the mods that include the patcher and since i dont have any moding abilities i cant do it manually. if anyone can help it would be much appreciated!! Link to comment Share on other sites More sharing options...
stoffe Posted August 15, 2007 Author Share Posted August 15, 2007 can anyone help me with this problem? I downloaded several mods from filefront and a few of them included TSLPatcher as easy installation. those include Jedi Temple on Coruscant, HK Factory Reconstructed, and New Force Powers. the problem is that whenever i click the install mod it says "An unhandled Error Occurred!" Without knowing more exactly how you do things it's impossible to say what could be wrong. A few things: Do you extract the downloaded mod to a folder on your harddrive or are you trying to run the installer from within a zip file? If you extract the mod files, to where do you extract them? If you extracted them from ZIP files did you preserve the folder structure within the archive? (WinZip has a nasty habit of flattening the folder hierarchy within an archive if you just drag and drop files out from it.) Does your user account on the computer have write access to the KOTOR/TSL game folder? When does that message occur? Directly when you start the installer? When you click the "Install" button in the installer? Some time during the installation process? If you get to the start if the installation process did you select the correct destination folder if asked? It should be the KOTOR/TSL game folder, not the override folder. Link to comment Share on other sites More sharing options...
Undying_Jedi Posted August 15, 2007 Share Posted August 15, 2007 1, i extracted the mod into a folder before i tried to run it 2, i extracted my files to F:Games\Star Wars KOTOR 2 stuff\HK-Factory Reconstructed (the other mods are extracted to the same place within the folder Star Wars KOTOR 2 stuff, but with a different folder name ex: F:...\...\Jedi Temple) 3, I used WinRAR and i always extract them fully, so i'm pretty sure that its not flattened or something like that 4, i have an admin account on my windows xp (as opposed to limited) so i should have full access. and i installed the star wars games from this account 5, the error occurrs right after i click the install button in the installer. it doesnt even ask for my game folder 6, i never got to that part because i think the error happens right before it asks me, but i know its the game folder and not the override that i should be inputing Its happening to my KOTOR I mods now too. i cant use the super skip taris mod and its the same error. hope this helps Link to comment Share on other sites More sharing options...
stoffe Posted August 15, 2007 Author Share Posted August 15, 2007 5, the error occurrs right after i click the install button in the installer. it doesnt even ask for my game folder Hmm, weird. Does the confirmation dialog box appear after you click the Install button? Does the mod info text box get cleared and any line posted in the progress log there, or does it crash before anything else seemingly happens? You could try opening the changes.ini file found inside the tslpatchdata folder of the mod you try to install, and under the [settings] section change the value of the PlaintextLog key from 0 to 1, save and then try to run the installer again. Does that make any difference? Link to comment Share on other sites More sharing options...
Undying_Jedi Posted August 15, 2007 Share Posted August 15, 2007 Thanks!!!!!!! its working now! much appreciated!! just so you know, the error occured when the installer just began installing, so there was one line of words displayed. again, thanks so much!! Link to comment Share on other sites More sharing options...
Darth Vanisher Posted August 20, 2007 Share Posted August 20, 2007 Err... excuse me, wanted to ask something about TSL Patcher. Actually, it's about the .2da files. I have difficulty in using the ChangesEdit, about adding new lines for .2da files. Here's the case. I want the TSL patcher to create new lines for the .2da files (spells, upcrystals, and baseitems), so I choose the .2da files selection on the changes.ini tree. After that I add the .2da files I wrote above. Then it shows a blank modifier. I have read the readme file, and it tell me about comparing something. So I've tried to compare by clicking the "finger button" on the TSL patcher. After that, the "Select ORIGINAL .2da to compare against" window appear. So I choose the upcrystal.2da that places in my Override folder. Then the "Select MODIFIED .2da to compare against ORIGINAL" window appear. So I choose the upcrystal.2da from the mod I have in the TSL Patcher folder. After that it shows a bunch of lines. From there, I don't understand what to do next. How to make the installer add a new lines for the mod each time it's installed? I'm getting confused at this... Thank you very much for your time... and your help. Link to comment Share on other sites More sharing options...
Kristy Kistic Posted August 29, 2007 Share Posted August 29, 2007 Hi stoffe I have some questions about using TSLP for integrating dialog files. (I absolutely love this idea, btw). I used the meditation.rar file that you supplied as an example, So... From what I gather, if the parent of the branch you want to add is an entry the Path var would be EntryList\<entry#>\RepliesList What is the Path var syntax if the parent is a reply? What is the Path var syntax if the branch you want to add is in the StartingList? One last thing. I noticed you pretty much hard coded the entry and reply indexes into the changes.ini file. Suppose for arguments sake, that these indexes already existed (as in someone had already added to the dialog file). Is there a token to determine the count of the EntryList and ReplyList? Or does TSLP check for this and adjust as needed? Link to comment Share on other sites More sharing options...
stoffe Posted August 29, 2007 Author Share Posted August 29, 2007 From what I gather, if the parent of the branch you want to add is an entry the Path var would be EntryList\<entry#>\RepliesList What is the Path var syntax if the parent is a reply? What is the Path var syntax if the branch you want to add is in the StartingList? The RepliesList field under each Entry struct in the EntryList contains an index link to a struct in the ReplyList for each Reply that comes below that Entry. The EntriesList field under each Reply struct in the ReplyList contains an index link to a struct in the EntryList for each Entry that comes below that Reply. So, to add a new Reply node below an existing Entry in the DLG file, you find the list index of the parent Entry (#) within the EntryList and set the parent like EntryList\#\RepliesList for your new node. To add a new Entry node below an existing Reply in the DLG file you find the list index of the parent Reply (#) within the ReplyList and set the parent like ReplyList\#\EntriesList for your new node. Consequently, since the patcher needs to know the index of the parent node in the ReplyList or EntryList this means the patching will fail if the user has a heavily modified version of the DLG file in their install destination (override or ERF/RIM file) since those indexes may no longer exist, or they may have been renumbered if a DLG editor that doesn't preserve the indexing order of the nodes was used to modify it. In other words this isn't as safe to do as for example TLK or 2DA patching since it assumes a certain structure of the source file but has no way of verifying if this actually is the case, but in the instances that it does work it should save the user some trouble having to merge things manually. One last thing. I noticed you pretty much hard coded the entry and reply indexes into the changes.ini file. If you mean the Value of the Index fields those aren't really hardcoded, since the values assigned when the fields are created will be overwritten further down, during the convoluted modifying of the fields that have been added before. For example, if you look at these modifiers (relevant parts highlighted): [gff_kreia_Index_0] FieldType=DWORD Label=Index Value=738 [color=Yellow][b]2DAMEMORY8=!FieldPath[/b][/color] [gff_kreia_ReplyList_738_0] FieldType=Struct Path=ReplyList Label= TypeId=ListIndex AddField0=gff_kreia_Listener_3 AddField1=gff_kreia_AnimList_3 AddField2=gff_kreia_Text_3 AddField3=gff_kreia_VO_ResRef_3 AddField4=gff_kreia_Script_3 AddField5=gff_kreia_Delay_3 AddField6=gff_kreia_Comment_3 AddField7=gff_kreia_Sound_3 AddField8=gff_kreia_Quest_3 AddField9=gff_kreia_PlotIndex_3 AddField10=gff_kreia_PlotXPPercentage_3 AddField11=gff_kreia_WaitFlags_3 AddField12=gff_kreia_CameraAngle_3 AddField13=gff_kreia_FadeType_3 AddField14=gff_kreia_EntriesList_0 AddField15=gff_kreia_SoundExists_3 AddField16=gff_kreia_ActionParam1_3 AddField17=gff_kreia_ActionParam1b_3 AddField18=gff_kreia_ActionParam2_3 AddField19=gff_kreia_ActionParam2b_3 AddField20=gff_kreia_ActionParam3_3 AddField21=gff_kreia_ActionParam3b_3 AddField22=gff_kreia_ActionParam4_3 AddField23=gff_kreia_ActionParam4b_3 AddField24=gff_kreia_ActionParam5_3 AddField25=gff_kreia_ActionParam5b_3 AddField26=gff_kreia_ActionParamStrA_3 AddField27=gff_kreia_ActionParamStrB_3 AddField28=gff_kreia_AlienRaceNode_3 AddField29=gff_kreia_CamVidEffect_3 AddField30=gff_kreia_Changed_3 AddField31=gff_kreia_Emotion_3 AddField32=gff_kreia_FacialAnim_3 AddField33=gff_kreia_NodeID_3 AddField34=gff_kreia_NodeUnskippable_3 AddField35=gff_kreia_PostProcNode_3 AddField36=gff_kreia_RecordNoOverri_3 AddField37=gff_kreia_RecordVO_3 AddField38=gff_kreia_Script2_3 AddField39=gff_kreia_VOTextChanged_3 AddField40=gff_kreia_CameraID_3 AddField41=gff_kreia_RecordNoVOOverri_3 [color=Yellow][b]2DAMEMORY7=ListIndex[/b][/color] [kreia.dlg] AddField0=gff_kreia_RepliesList_3_0 AddField1=gff_kreia_EntryList_627_0 AddField2=gff_kreia_EntryList_628_0 AddField3=gff_kreia_EntryList_629_0 AddField4=gff_kreia_ReplyList_738_0 AddField5=gff_kreia_ReplyList_739_0 AddField6=gff_kreia_ReplyList_740_0 2DAMEMORY2=2DAMEMORY1 2DAMEMORY4=2DAMEMORY3 2DAMEMORY6=2DAMEMORY5 [color=Yellow][b]2DAMEMORY8=2DAMEMORY7[/b][/color] 2DAMEMORY10=2DAMEMORY9 2DAMEMORY12=2DAMEMORY11 In the first one, the line 2DAMEMORY8=!FieldPath stores the full field path to the new Reply-link node that was just added in the 2DAMEMORY8 token (needed since you don't know beforehand what list index it will end up as). In the second one, the line 2DAMEMORY7=ListIndex stores the list index the new struct that is inserted ends up as in the ReplyList in the 2DAMEMORY7 token. In the third one, the line 2DAMEMORY8=2DAMEMORY7 links these two stored pieces of info together. It assigns the value in the 2DAMEMORY7 token (the list index) to the field at the path stored in the 2DAMEMORY8 token. For example, say that the RepliesList link to your new Reply node that is added to entry 587 in the EntryList gets added as EntryList\587\RepliesList\4\Index. And that your new reply node struct added to the ReplyList (which the previous link should point to) gets added at list index 600 in the Reply List. Then the third highlighted modifier above would read, when parsed by the patcher: Assign the value 600 to the field EntryList\587\RepliesList\4\Index Thus the initial value that was assigned when the Index field was created above (738) would be overwritten by the actual value (600) soon afterwards, and it's no longer hardcoded but dynamic. Very convoluted and primitive, but at least it works (in the cases I've tested) until someone can figure out a better way of doing it. (Wish I had used XML instead of INI as format for the patcher config file back when I first made it. Would have made it a lot easier to structure this sort of thing logically in the configuration. ) Link to comment Share on other sites More sharing options...
Kristy Kistic Posted August 30, 2007 Share Posted August 30, 2007 Umm...sorry about that entire line of questioning. I completely missed a post where you explained about using the gff compare function. When I asked those questions I thought I was going to have to do it by hand (wasn't questioning your coding). Still, thanks for the reply, though Link to comment Share on other sites More sharing options...
stoffe Posted September 19, 2007 Author Share Posted September 19, 2007 I've uploaded TSLPatcher v1.2.10b1 and ChangeEdit v1.0.5b1 to correct a problem I just noticed, download link is in the first post in this thread as usual. These updates fixes a bug/oversight with ExoString fields and ExoLocString field substrings containing linefeeds or carriage return characters when patching GFF format files. Earlier the INI file would get messed up and only the text before the first LF/CR would be added to the GFF files. Now all the text should be properly added even with multiple paragraphs. INI config files already broken by this bug (*nudge* Brotherhood of Shadow mod *nudge*) can be fixed manually with a text editor by removing the newlines so all the text in following a lang# key is on the same line in the INI file, and then insert <#LF#> where the newlines should be. (Make sure you turn off word/line wrapping in the text editor first) E.g this... lang0=The quick brown fox jumps over the lazy dog! ...would have to be changed to look like this: lang0=The quick brown fox<#LF#><#LF#>jumps over the lazy dog! ...which would end up like this in the GFF substring after patching the file: The quick brown fox jumps over the lazy dog If you don't do this fix, the text in the GFF substring after patching would just be: The quick brown fox Note: This only applies to changes.ini files that have already been broken due to this bug. ChangeEdit has been updated to handle this automatically when creating new files, or creating new GFF file modifiers in an existing one. Link to comment Share on other sites More sharing options...
Soulforged Posted November 9, 2007 Share Posted November 9, 2007 Hi I'm using the patcher (newest version) and trying to assing a new value thourgh a memory token for an item's BaseItem field. What I want is to copy an existent line on baseitems.2da and modify somethings inside it and I want the memory token to save the new line by its number in the index. Then an item will get modified and use that token as the value for it's BaseItem field. However everytime I do it the field ends up with the original value (that's the value of the line that's being copied) instead of the new one. Here's the relevant part of the code (since it's too large to post here): (Tlk StrRef and other bunch of things)... [2DAList] (...) Table1=baseitems.2da (...) [GFFList] (...) File13=w_melee_19.uti (...) [baseitems.2da] (...) CopyRow1=baseitems_add_ryyk_blade (...) [baseitems_add_ryyk_blade] RowIndex=4 ExclusiveColumn=label 2DAMEMORY137=RowLabel label=Ryyk_Blade name=StrRef431 damageflags=4 numdice=3 dietoroll=4 critthreat=1 crithitmult=3 reqfeat0=2DAMEMORY27 specfeat=2DAMEMORY29 focfeat=2DAMEMORY28 That created the new line, it works, the new line appears as I wanted it on baseitems.2da, however when I read the log it says that what's being saved is the value "4" (original value), instead of the new value which should be "107", at the end of the table. (...) [w_melee_19.uti] BaseItem=2DAMEMORY137 LocalizedName(strref)=StrRef431 DescIdentified(strref)=StrRef432 UpgradeLevel=3 !ReplaceFile=1 That modifies the weapon, however as the value being stored is "4" instead of the new line...Well it doesn't work. I've taken a look to Chainz Bao Dur armor, but he adds a new line from scratch instead of copying it. So any thoughts? EDIT: Never mind problem solved. I had to put the 2DAMEMORY creation after I set the label for the base item. Then it stored it correctly. Thanks anyway. Link to comment Share on other sites More sharing options...
stoffe Posted November 10, 2007 Author Share Posted November 10, 2007 trying to assing a new value thourgh a memory token for an item's BaseItem field. What I want is to copy an existent line on baseitems.2da and modify somethings inside it and I want the memory token to save the new line by its number in the index. Then an item will get modified and use that token as the value for it's BaseItem field. The problem is with the line... 2DAMEMORY137=RowLabel ...as this will save the value in the (Row Label) column, while the baseitems.2da file is indexed by line number. So you should use... 2DAMEMORY137=RowIndex ...instead, since this will save the line number your new line gets added as in the token. Generally there are three key values you can use to identify a particular row in most cases: RowIndex - the line number of the row RowLabel - The label of the row, displayed as a (Row Label) column in KotorTool. LabelIndex - The value in the label column of the row. This obviously only works with 2DA files that have a label column, and is mostly used for editing/copying existing rows where you don't know what the row label or line number is (usually since the target lines were dynamically added by a mod earlier). Link to comment Share on other sites More sharing options...
Soulforged Posted November 10, 2007 Share Posted November 10, 2007 The problem is with the line... 2DAMEMORY137=RowLabel ...as this will save the value in the (Row Label) column, while the baseitems.2da file is indexed by line number. So you should use... 2DAMEMORY137=RowIndex ...instead, since this will save the line number your new line gets added as in the token. Generally there are three key values you can use to identify a particular row in most cases: RowIndex - the line number of the row RowLabel - The label of the row, displayed as a (Row Label) column in KotorTool. LabelIndex - The value in the label column of the row. This obviously only works with 2DA files that have a label column, and is mostly used for editing/copying existing rows where you don't know what the row label or line number is (usually since the target lines were dynamically added by a mod earlier). Thanks stoffe, though as I said it worked with RowLabel I just had to put the 2DAMEMORY line after the itemtype was created. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.