Jump to content

Conversation between 2 npcs problem


StealthDick

Recommended Posts

I have an NPC involved in a conversation with another NPC that won't say his line of dialogue, but his line's result script works.

Example: The first npc enters a trigger and spouts dialogue at the problem NPC, the problem NPC looks at the first do to forcelook but doesn't respond to him with the dialogue he was given.

I put rewardxp in the problem npc's result script just to check if the NPC is getting the line properly, and the player gets xp continuously but the line isn't said, and the conversation doesn't progress.

More in-depth:

This is the first and second npc's script:

Begin SaytoDone aaaSSSBunkerConvo
SSSBunker12REF.sayto SSSBunker01REF aaaSSSBunkerConvo 1 1
end

They both have separate scripts with different variables, but only the first npc is talking properly. I had the whole convo working properly a few days ago, and I have no idea what I could have done to mess it up.

Does anyone have any input that might make this work? Thanks.

Link to comment
Share on other sites

I would like to add that this isnt my first time making a conversation between 2 npcs, the mod I'm working on has 3 other WORKING cases of npc conversations and one of them are between 3 npcs. This one just refuses to work, idk why it wont work.

Link to comment
Share on other sites

Just some suggestions based upon your report. The script seems to be working, so I surmise the problem lies with the dialog sound file.

 

* Have you tried "captioning" to see if the issue is purely audio? (Though I have no idea how that is added. Something to be added to the wiki article.)

 

* Are you certain the sound file is recognized and processed properly? Correct location? Please see the 'Music & Sounds' section of the wiki "Getting started creating mods using GECK" article.

 

* Noticed a change in your naming convention for the sound file: "aaaSSSBunkerConvo" versus "SSSBunker12REF" (etc.) for other refs. That sort of thing has tripped up more than one scripter.

 

-Dubious-

Link to comment
Share on other sites

Just some suggestions based upon your report. The script seems to be working, so I surmise the problem lies with the dialog sound file.

 

* Have you tried "captioning" to see if the issue is purely audio? (Though I have no idea how that is added. Something to be added to the wiki article.)

 

* Are you certain the sound file is recognized and processed properly? Correct location? Please see the 'Music & Sounds' section of the wiki "Getting started creating mods using GECK" article.

 

* Noticed a change in your naming convention for the sound file: "aaaSSSBunkerConvo" versus "SSSBunker12REF" (etc.) for other refs. That sort of thing has tripped up more than one scripter.

 

-Dubious-

I use geck-pu so it would tell me if I did something incorrectly within a script, and the npc doesnt have a sound file connected to its dialogue, so it cant be that.

Link to comment
Share on other sites

It used to work but it just stopped, its been stumping me for the past few days.

Also, I'd like to add that the first npc skips over the second's dialogue, even though it doesn't meet the required conditions. Which leads me to believe that the game runs the second npc's dialogue but doesn't display it. Even after adding temporary sound files it doesn't go in the correct sequence.

Edited by StealthDick
Link to comment
Share on other sites

 

the first npc skips over the second's dialogue, even though it doesn't meet the required conditions

Sorry for the very basic questions, but that is often where something that worked has gotten broken. Making you explain the process often brings out the problem from the forest of potential issues.

 

How are you setting the dialog conditions? (In "End Result Script" for each spoken line one assumes, but let's make sure.)

 

Are you reusing a single variable to track the dialog process or stages or something else?

 

Have you tried some "debug print" checks on the condition variable(s) to ensure they are set correctly at the various check points?

 

It is my understanding the the "GECK Extender" has more detailed error messages than GECK-PU:

GECK Extender NVSE Plugin. Project to extend GECK functionality and bug fixes. Compatible with all NVSE script extender plugins. (Do not use together with GECK Powerup (nor the Forked version), which it replaces.) Note the optional "Patcher" to make GECK 4GB aware and auto load NVSE is a separate file.

 

But such tools are only useful for syntax errors. If a statement is syntactically correct but logically bad, they won't necessarily catch that.

 

-Dubious-

Link to comment
Share on other sites

 

 

the first npc skips over the second's dialogue, even though it doesn't meet the required conditions

Sorry for the very basic questions, but that is often where something that worked has gotten broken. Making you explain the process often brings out the problem from the forest of potential issues.

 

How are you setting the dialog conditions? (In "End Result Script" for each spoken line one assumes, but let's make sure.)

 

Are you reusing a single variable to track the dialog process or stages or something else?

 

Have you tried some "debug print" checks on the condition variable(s) to ensure they are set correctly at the various check points?

 

It is my understanding the the "GECK Extender" has more detailed error messages than GECK-PU:

GECK Extender NVSE Plugin. Project to extend GECK functionality and bug fixes. Compatible with all NVSE script extender plugins. (Do not use together with GECK Powerup (nor the Forked version), which it replaces.) Note the optional "Patcher" to make GECK 4GB aware and auto load NVSE is a separate file.

 

But such tools are only useful for syntax errors. If a statement is syntactically correct but logically bad, they won't necessarily catch that.

 

-Dubious-

 

So in each result script (end), I have ""set aaaSSSQuest.bSSSBunkerConvo to aaaSSSQuest.bSSSBunkerConvo + 1"

It works exactly the same as if I just had "set aaaSSSQuest.bSSSBunkerConvo to 1 (2,3, etc.)".

 

All the conditions for each response from the two actors are nearly identical, the GetIsID, the bSSSBunkerConvo value, and a bEvacuate variable that tracks whether or not the PC persuaded the first npc to evacuate.

 

The initial conversation starter WAS a trigger, but I made just added the conversation starter to the first npc's script.

 

I don't know what "debug checks" are. If I had a guess, its probably the caps or xp I reward the player if the script runs properly. I'm probably wrong.

 

When it comes to syntax, I'm pretty sure everything is spelled correctly. I ran the script recompiler a few times with no error.

 

Its late for me rn, but I'll checkout GECK Extender in the morning.

Link to comment
Share on other sites

Re: "debug checks". Please see 'TIP: Debugging data to file' under the "Scripting" section of the wiki "Getting started creating mods using GECK" article. Your XP reward is somewhat serving that role in telling you the script is being processed, but seeing the actual content of "aaaSSSQuest.bSSSBunkerConvo" will tell you if it is getting incremented as you expect, and what the actual value is when the check is made. "Debug" printouts are a very useful and powerful tool, well worth learning about. They are simple and not hard to implement. By using NVSE's SetDebugMode command (or your own variable to trigger the same logic capability) you can turn the outputs on or off easily as needed.

 

In practice the potential problem I see with using a "+1" increment method is that it doesn't immediately and obviously tell you just which line of dialog was last processed. You have to calculate which line it should be, and if something unexpected (but perfectly valid) occurs, you are not immediately aware of it unless you realize the count is off. It does indeed work the same as you say, but is less helpful in debugging situations such as this. If you are "skipping" over the second line of dialog, the next (third) dialog line will increment to "2" instead of "3".

 

-Dubious-

Link to comment
Share on other sites

I changed all the script surrounding the dialogue again, and the problem still persists. Prior I forgot to mention how the whole exchange between the NPCs go:

 

NPC1 Greets NPC2, NPC2 is supposed to talk next.
NPC2 doesn't say anything, the rewardxp runs in his resultscript (begin)
NPC1 responds to NPC2 (although NPC2 hasn't said anything)
NPC2 then responds to NPC1 with what he was supposed to say prior, but the dialogue stops because the sequence is out of order.

No matter how many times I change both of the NPC's scripts it always goes as follows. This morning I changed it again to match other conversations I have in my mod, but the SAME problem remains.


Here's my new scripts:

NPC1 Script:

scn aaaSSSGREETERBunkerScript

short bFailOnce
short DoOnce

Begin SaytoDone aaaSSSGreeterToEnforcer01
SSSBunker12REF.sayto SSSBunker01REF aaaSSSEnforcerToGreeter01 1 1
end

Begin SaytoDone aaaSSSGreeterToEnforcer02
SSSBunker12REF.sayto SSSBunker01REF aaaSSSEnforcerToGreeter02 1 1
end


Begin OnHit Player

if bFailOnce == 0
	setobjectivedisplayed aaaSSSQuest 12 0
		set bFailOnce to 1 
endif
END

Begin Gamemode
if aaaSSSQuest.StartTalking1 == 1
if DoOnce == 0
SSSBunker01REF.sayto SSSBunker12REF aaaSSSGreeterToEnforcer01 1 1
set DoOnce to 1
endif
endif

if aaaSSSQuest.bEvacuate == 3
	.addscriptpackage aaaSSSBunkerEvacuatePackage
		set aaaSSSQuest.bEvacuate to 4
endif
	if (.getincell aaaTurnerBunkerINT != 1) && (aaaSSSQuest.bEvacuate == 4)
		disable
endif
END


NPC2 Script:

scn aaaSSSEnforcerBunkerScript

short bFailOnce

Begin SaytoDone aaaSSSEnforcerToGreeter01
SSSBunker01REF.sayto SSSBunker12REF aaaSSSGreeterToEnforcer02 1 1
end

Begin SaytoDone aaaSSSEnforcerToGreeter02
.addscriptpackage aaaSSSEnforcerGreetPackage
end

Begin Gamemode

if aaaSSSQuest.bEvacuate == 3
	.addscriptpackage aaaSSSBunkerEvacuatePackage
		set aaaSSSQuest.bEvacuate to 4
endif
	if (.getincell aaaTurnerBunkerINT != 1) && (aaaSSSQuest.bEvacuate == 4)
		disable
endif
END



Begin OnHit Player

if bFailOnce == 0
	setobjectivedisplayed aaaSSSQuest 12 0
		set bFailOnce to 1 
endif
END

All of the conditions in the dialogue resultscript (end) are set up properly, I even changed it to "set aaaSSSQuest.bSSSBunkerConvo to 1(2,3,etc.)"

I've even deleted NPC2 and remade him from the ground up believing there was a problem with the NPC itself. So I'm still stumped.

 

Also, this is off-topic, but Geck Extender tells me that I only need one "endif" for an "if" statement, and here I thought the whole time that I could have as much as I wanted. Does the amount of "endif"s actually matter?

Edited by StealthDick
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...