Jump to content

EXTEND_TOP_REGEXP?


jastey

Recommended Posts

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: 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
Guest jastey*
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

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

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

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

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

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

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*
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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...