I think I have found a new bug, anyone like to verify?

Post » Wed May 11, 2011 10:56 pm

http://www.gamesas.com/index.php?/topic/1117314-cant-get-character-to-speak-dialogue/

After a lot, of trouble shooting, these are my findings.

When using an activator (in my case it was the invisible "trigger boxes" used for traps) with an ontriggeractor player block scripted with a sayto, startconversation, or say for a certain NPC, that NPC will lose the functionality of speaking recorded dialogue or reading lip files. It may be more or less specific but these are my findings thus far!
User avatar
jadie kell
 
Posts: 3497
Joined: Sat Jul 29, 2006 3:54 pm

Post » Thu May 12, 2011 12:54 am

http://www.gamesas.com/index.php?/topic/1117314-cant-get-character-to-speak-dialogue/

After a lot, of trouble shooting, these are my findings.

When using an activator (in my case it was the invisible "trigger boxes" used for traps) with an ontriggeractor player block scripted with a sayto, startconversation, or say for a certain NPC, that NPC will lose the functionality of speaking recorded dialogue or reading lip files. It may be more or less specific but these are my findings thus far!

Hmm... I have two "trigger boxes" that tells an NPC to speak some dialogues, and they work just fine. Everything goes smoothly. Can you see any subtitles when the dialogues are supposed to play? What script are you using? Post it! :D

Here is my script; it is still unfinished, but has worked so far.
Spoiler
scn aaaForbiddenISladMQ03FireRingScript

float timer
float fQuestDelayTime
short triggered
int button
int buttonPressed
short NextFight

Begin GameMode

set fQuestDelayTime to .1

; Don't worry about the text inside these blocks :D

if FIMQ03.Fighter == 2 && FIMQ03.Announce == 10
;PLAY AUDIO11
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 98
endif

if FIMQ03.Fighter == 3 && FIMQ03.Announce == 11
;PLAY AUDIO12
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 98
endif

if FIMQ03.Fighter == 4 && FIMQ03.Announce == 12
;PLAY AUDIO13
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 98
endif

if FIMQ03.Fighter == 5 && FIMQ03.Announce == 13
;PLAY AUDIO14
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 98
endif

if triggered == 0
if getdistance player <= 100
disableplayercontrols
set triggered to 1
set FIMQ03.Announce to 1
endif
endif

; Don't worry about the text inside these blocks :D

set timer to ( timer - GetSecondsPassed )

if ( timer <= 0 )
if FIMQ03.Announce == 1 ; One of the trigger boxes sets this "FIMQ03.Announce" to 1
;PLAY AUDIO2
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1 ; Ensures that other dialogues won't start playing until the timer is < 0
set FIMQ03.Announce to 2 ; Changes the "Announce" to 2, so the other dialogue starts playing when the timer is < 0. This pattern repeats itself for some time... Until the script changes again...

elseif FIMQ03.Announce == 2
;PLAY AUDIO3
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 3

elseif FIMQ03.Announce == 3
;PLAY AUDIO4
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 4

elseif FIMQ03.Announce == 4
;PLAY AUDIO5
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 5

elseif FIMQ03.Announce == 5
;PLAY AUDIO6
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 6

elseif FIMQ03.Announce == 6
;PLAY AUDIO7
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 7

elseif FIMQ03.Announce == 7
;PLAY AUDIO8
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
set FIMQ03.Announce to 99

elseif FIMQ03.Announce == 99
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
if buttonPressed == 0
message " "
message " "
player.additem aaaForbiddenFIMQ03FireRingToken 1
messagebox "Which one will I choose?", "Give up", "Continue"
set buttonPressed to 1
endif

if buttonPressed == 1
set button to getbuttonpressed

if button == 0
set FIMQ03.FireRingThingy to 1
set buttonPressed to 2

elseif button == 1
set FIMQ03.FireRingThingy to 2
set buttonPressed to 3
else
return
endif
elseif buttonPressed == 2
set FIMQ03.Announce to 8
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
elseif buttonPressed == 3
set FIMQ03.Announce to 9
set timer to AnnounceSpeaker.say aaaForbiddenCombatHall1 1 aaaForbiddenQueenAdmarel 1
endif

endif
endif




end

User avatar
jessica Villacis
 
Posts: 3385
Joined: Tue Jan 23, 2007 2:03 pm

Post » Wed May 11, 2011 7:18 pm

Hmm... I have two "trigger boxes" that tells an NPC to speak some dialogues, and they work just fine. Everything goes smoothly. Can you see any subtitles when the dialogues are supposed to play? What script are you using? Post it! :D


Yes, the dialogue line is spoken normally (result script runs, etc.) but the audio and lip are ignored.

Our scripts are quite different.
scn script

;;For when the player meets NPC

short doonce

begin ontriggeractor player

if getstage Quest == 6

if doonce != 1
disableplayercontrols
endif

NPCRef.enable
NPCRef.startconversation player
set doonce to 1
endif

end


Commenting out "NPCRef.startconversation player" makes the NPC speak again. I have since called startconversation by a script on the NPC itself without problems. However, the script as is, the NPC loses ALL ability to speak recorded lines and act out lip files.

I have done tons of troubleshooting on this, and the result is always that within this blocktype, say, sayto, or startconversation results in a loss of ability to speak.
User avatar
Matt Gammond
 
Posts: 3410
Joined: Mon Jul 02, 2007 2:38 pm

Post » Thu May 12, 2011 2:24 am

Try waiting several frames between enabling the NPC and calling say or startConversation. The game has to queue his body and face data and add the reference to the world, which takes a minimum of a frame and possibly longer (unpredictable, happens in a background thread). It can't animate the face until the face is loaded.
I've seen this happen when manually queuing an NPC; from what I recall it usually clears up after the first spoken dialog.
User avatar
Invasion's
 
Posts: 3546
Joined: Fri Aug 18, 2006 6:09 pm

Post » Thu May 12, 2011 12:55 am

Try waiting several frames between enabling the NPC and calling say or startConversation. The game has to queue his body and face data and add the reference to the world, which takes a minimum of a frame and possibly longer (unpredictable, happens in a background thread). It can't animate the face until the face is loaded.
I've seen this happen when manually queuing an NPC; from what I recall it usually clears up after the first spoken dialog.


The problem also occurs on NPCs that are never enabled/disabled if startconversation or say/sayto is called within this block type.
User avatar
Killah Bee
 
Posts: 3484
Joined: Sat Oct 06, 2007 12:23 pm


Return to IV - Oblivion