jastey Posted September 30, 2007 Share Posted September 30, 2007 I have the problem, that installation of the mod gives a parse error and terminates with the message "not found - no string provided for @51" Here is the relevant dialogue code. It's on line 251, let me know if someone wants to see the whole code.. (...) INTERJECT_COPY_TRANS Hellfear 14 DKDrizztNymphen == DKDrizzJ IF ~InParty("DKDrizzt") InMyArea("DKDrizzt") !StateCheck("DKDrizzt",CD_STATE_NOTVALID) ~ THEN @46 END EXTEND_BOTTOM PLAYER1 33 // tree of life gut check IF ~InParty("DKDrizzt") InMyArea("DKDrizzt") !StateCheck("DKDrizzt",CD_STATE_NOTVALID) Global("DKDrizztLebensbaum","GLOBAL",0)~ THEN DO ~SetGlobal("DKDrizztLebensbaum","GLOBAL",1)~ EXTERN PLAYER1 Lebensbaum END APPEND PLAYER1 IF ~~ THEN BEGIN Lebensbaum SAY @47 IF ~~ THEN REPLY @48 EXTERN DKDrizzJ Leben_1 IF ~~ THEN REPLY @49 EXTERN DKDrizzJ Leben_2 END END EXTEND_BOTTOM PLAYER1 25 IF ~InParty("DKDrizzt") InMyArea("DKDrizzt") !StateCheck("DKDrizzt",CD_STATE_NOTVALID) Global("DKDrizztHoelle","GLOBAL",0)~ THEN DO ~SetGlobal("DKDrizztHoelle","GLOBAL",1)~ EXTERN DKDrizzJ Hoelle END ADD_STATE_TRIGGER C6Harp 12 ~OR(3) !InParty("DKDrizzt") !InMyArea("DKDrizzt") StateCheck("DKDrizzt",CD_STATE_NOTVALID)~ ADD_STATE_TRIGGER C6Harp 0 ~OR(3) !InParty("DKDrizzt") !InMyArea("DKDrizzt") StateCheck("DKDrizzt",CD_STATE_NOTVALID)~ ADD_STATE_TRIGGER Obsgol01 3 ~!PartyHasItem("DKGOLT")~ APPEND OBSGOL01 IF ~~ THEN BEGIN DK_9 SAY @50 IF ~~ THEN DO ~SetGlobal("DKGolemVerwandlung","GLOBAL",1)~ EXIT END IF ~PartyHasItem("DKGOLT") Global("PCSphere","GLOBAL",0) Dead("obsdem03") NumTimesTalkedToGT(0)~ THEN BEGIN DK_10 SAY @51 <-- this is the error line IF ~~ THEN REPLY @52 EXIT IF ~~ THEN REPLY @53 GOTO DK_9 END END EXTEND_BOTTOM OBSGOL01 4 IF ~PartyHasItem("DKGOLT")~ THEN REPLY @54 GOTO DK_9 END The tra-file looks like: (...)@49 = ~Ich kann nicht verlangen, dass Ihr mir weiterhin folgt. Aber Ihr wart recht brauchbar und Eure Fähigkeiten könnten weiter von Nutzen sein. Ich würde mich freuen, wenn Ihr mich weiter unterstützt.~ @50 = ~(Die magische Flüssigkeit verändert den Golem...)~ @51 = ~Da sind keine anderen Eindringlinge... dieser Diener kann eine Weile ruhen.~ @52 = ~Ja, ruhe dich aus.~ (...) Since the tra line is there, I know the problem lies somewhere else, but I am a bit clueless. I had the "don't know @xy" error message before, when I CHAINed into an undefined / not yet existent dialogue file, but this time I don't see any logical error in my code. Link to comment
Gort Posted October 1, 2007 Share Posted October 1, 2007 does it compile fine if you just do SAY ~...~ instead of using .tra? Link to comment
CoM_Solaufein Posted October 1, 2007 Share Posted October 1, 2007 IF ~PartyHasItem("DKGOLT")Global("PCSphere","GLOBAL",0) Dead("obsdem03") NumTimesTalkedToGT(0)~ THEN BEGIN DK_10 SAY @51 <-- this is the error line IF ~~ THEN REPLY @52 EXIT IF ~~ THEN REPLY @53 GOTO DK_9 END END Two ENDs? Link to comment
jastey Posted October 1, 2007 Author Share Posted October 1, 2007 Gort: I will try tonight. An inner voice tells me that the text isn't the problem, though. CoM_Solaufein: The second end belongs to the "APPEND OBSGOL01" one state above. Thank you for your time, though! If anyone spotts anything or has an idea what the real error could be, I'd be happy for every hint. I fear I'll have to compile the .d state by state, though. Link to comment
Gort Posted October 1, 2007 Share Posted October 1, 2007 I'm just not sure if it uses the .tra you need. I'd try to delete all .d content that uses strings greater than 49 - to make it compile - and see how it looks in game (are these strings from that file or not) Link to comment
Guest jastey* Posted October 1, 2007 Share Posted October 1, 2007 I'm just not sure if it uses the .tra you need. I'd try to delete all .d content that uses strings greater than 49 - to make it compile - and see how it looks in game (are these strings from that file or not)Before this error I had another one, where it said it doesn't find a string where in reality I was using a dlg-file in a CHAIN that wasn't defined yet (i.e. the BEGIN .dlg was after the CHAIN were the dlg was called the first time.). So, if WeiDU sais the string is the error if in reality it was a non-existent dlg, I assume the problem is something strange in this case, too. But your suggestion is a good one, I will try this. Link to comment
jastey Posted October 1, 2007 Author Share Posted October 1, 2007 Gort, you were right! What a silly mistake: I forgot to put the "AUTO_TRA ~modfolder/%s~" into the tp2. It was using the setup.tra all along.. I have two other problem now: In one of the scripts, it states IF OR(2) HitBy(Myself,ACID) HitBy(Myself,FIRE) (...) Compiling this, WeiDU gives the error message: [HitBy] argument [ACID] not found in [Damages.ids] Referring to IESDP, ACID is the first entry of Damages.ids. What am I supposed to do with this? Can I append the .ids, or is ACID something I shouldn't use for some reason? Second thing: Although the Readme.html is in the language folder, WeiDU gives the error message: "DKDrizzt/%s/Readme.html not found". The tp2 states: AT_INTERACTIVE_EXIT ~VIEW DKDrizzt/%s/ReadMe.html~ (Yesyes, I will change this to readme call in the beginning, once WeiDU 202 is out. ) Since the file is there in the appropriate language folder, I am clueless what I should look for. Another format problem, maybe? Link to comment
cmorgan Posted October 1, 2007 Share Posted October 1, 2007 AT_INTERACTIVE_EXIT ~VIEW DKDrizzt/%s/ReadMe.html~ ? ACTION_IF FILE_EXISTS ~banterpack/ReadMe - Banter Packs.%LANGUAGE%.txt~ THEN BEGIN AT_INTERACTIVE_EXIT ~VIEW banterpack/ReadMe - Banter Packs.%LANGUAGE%.txt~ END (which should include an ELSE and pick an existing one, if one does not exist for that language) or /* prep tras for sound references */ COPY ~BG1NPC/TRA/%LANGUAGE%/BG1NPC_tmp.tra~ ~BG1NPC/TRA/%LANGUAGE%/BG1NPC.tra~ EVALUATE_BUFFER LOAD_TRA ~BG1NPC/TRA/%LANGUAGE%/BG1NPC.tra~ I avoid %s, and specify %LANGUAGE% so I would do AT_INTERACTIVE_EXIT ~VIEW DKDrizzt/%LANGUAGE%/ReadMe.html~ and then make sure the appropriate translated readme is in the correct subdirectory. As for the ACID, 0x0001 ACID is in DAMAGES and DMGTYPE and everything looks fine ther, so I don't know why it wouldn't work (but check case sensitivity, as DyValiTool seems to expect capitalization to match; perhaps something is out of whack there, but i doubt it). but a related question... my NI reads SVTRIOBJ.IDS as different from the TRIGGER.IDS: SVTRIOBJ.IDS 0x0002 AttackedBy(O:Object*,I:Style*AStyles) 0x0020 HitBy(O:Object*,I:Style*AStyles) TRIGGER.IDS 0x0002 AttackedBy(O:Object*,I:Style*AStyles) 0x0020 HitBy(O:Object*,I:DameType*Damages) AStyles only has the entries 4 0 DEFAULT 1 MELEE 2 RANGED So my question is - when does the engine want to use TRIGGER and when does it want to use SVTRIOBJ.IDS? It looks like your syntax is correct... Link to comment
jastey Posted October 1, 2007 Author Share Posted October 1, 2007 Thank you, cmorgan! I should have said I will change the readme call to the beginning later anyway, sorry for the bother! I just thought it could be something with the .html, I never worked with that before (and it's reaching a time around here where I shouldn't post help questions any more, as they will embarrass me tomorrow morning.) I never heard of "SVTRIOBJ.IDS"... Link to comment
devSin Posted October 2, 2007 Share Posted October 2, 2007 Just use the numeric value (according to cmorgan, it's 1, so you'd just use HitBy(Myself,1)). You can use decimal or hex (hexadecimal requires one of the latest versions of WeiDU). You won't need to change any IDS files when you do this. If you want to fix it (for whatever reason), you just need to prepend a line to the file (the fixpack should have code to do this; you can steal it from there). No compilers should be case-sensitive (ACID is equivalent to Acid is equivalent to acid). SVTRIOBJ is junk. You'll never even need to look at it; TRIGGER will always have the values you want. Link to comment
cmorgan Posted October 2, 2007 Share Posted October 2, 2007 Cool. So ignore SVTRIOBJ, and for safest code, use the numbers - and the DyValiTool generation of case sensitive "errors" like this is probably becausethe tool itself is very old (it shows errors on DSH with tra # references, can't handle stringfixer calls , etc., so that doesn't suprise me). So the only question left is what platform is not finding a reference to ACID as a valid part of DAMAGES.IDS; will all IE platforms respond correcty to HitBy(Myself,1) as is? (reminder to self - it probably would save alot of lines of code if we didn't fix up the IDS entries, and just used the number references - as long as we know that the numbers work across all IE games... which means generating a list of what works on BG, what works on SoA, and what works on ToB. I have not seen a good organized breakdown of this that I remember - I probably need to go back and restudy the IESDP.) (Edit again - I somehow remember devSin patiently explaining this to me at least once before over a year ago - I guess some things take a long time to soak into my brain ) Link to comment
jastey Posted October 2, 2007 Author Share Posted October 2, 2007 Thank you! I guess I will patch it on damages.ids, because I am suspicious, too. I am using SoA+ToB, full install, so I am surprised ACID can't be found. Link to comment
devSin Posted October 2, 2007 Share Posted October 2, 2007 The compilers skip the first line of an IDS file. Always. If the symbol is on the first line, it will never be read and cannot be used. You can prepend "IDS V1.0" or just insert a blank line at the head of the file. Number references will work everywhere. Always. When you compile your script, all your IDS references are compiled to a number. The numeric value can also be used in dialogues (the engine only cares about the number -- although it can resolve the symbolic constants like ACID to the number that the engine knows how to use, those constants really only exist for the convenience of the designer). Link to comment
Guest jastey* Posted October 2, 2007 Share Posted October 2, 2007 The compilers skip the first line of an IDS file. Always. If the symbol is on the first line, it will never be read and cannot be used. You can prepend "IDS V1.0" or just insert a blank line at the head of the file. Number references will work everywhere. Always. When you compile your script, all your IDS references are compiled to a number. The numeric value can also be used in dialogues (the engine only cares about the number -- although it can resolve the symbolic constants like ACID to the number that the engine knows how to use, those constants really only exist for the convenience of the designer). That means I will put in the "1" and if it compiles fine everything is allright? That's cool. Thank you for the explanation, again! Link to comment
devSin Posted October 2, 2007 Share Posted October 2, 2007 It will compile fine (I'm pretty sure WeiDU doesn't try to reverse-resolve numeric references, so it will work for every user, regardless of the state of their IDS files). Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.