The change on the entering object you have there... will it cause the triggercto fire with a companion?
( if the companion is controlled ) yep, that's the point. If your NPC + dialog are set up to talk to companions, or your campaign is set to use SoZ dialog, this is what you'd want to happen. Or if using DoSpeakTrigger() then player-control is passed automatically to a character able to talk -- often the Owned PC. If not done right, this gives rise to the warping wizard to the front rank, that we've been complaining about here and there on the forum recently. The engine itself will also handle some of this.
Yes, NwN2 made Conversations very confusing by introducing the ability to control any of several characters. Kaldor and I are at least 2 competent scripters who've banged our heads against it for months. Personally i think I can figure things out on a case-by-case basis, and I believe Tchos vouches for the integrity of many of the stock dialog scripts that handle things, CreateIPSpeaker() in particular. ( so do i ) EE in fact started a whole thread on this, asking for a "bullet proof" dialog startup.
iirc, there was no firm conclusion. So, KISS (and stock scripts) are best until a glitch shows up.
So the DoSpeakTrigger is the one that could cause problems.
yes it could be. But since i can't replicate the problem your module has I'm at a loss. It might be in campaign settings (doubt it highly), it might be a faulty #include in .Hak or Override (doubt it), it might be the iPoint or trigger values (also unlikely -- if the conversation fires up, the script should fire up).
So ... you say the ga_disease script fires up if ActionStartConversation() is called from the trigger itself. That is, bypassing DoSpeakTrigger(). ( note: if you do that you're going to have to be especially careful with the early-return conditions for the trigger's onEnter event, because as I said if the player isn't controlling GetFirstPC() when the party crosses the trigger i think it's going to fail )
( and DestroyObject() isn't the most graceful way to cope with potential future errors; there are numerous other ways, from simply setting it done to flagging it done from the conversation's last node )
This was probably the last time that I would try to usexthe functions of the speak trigger. Better custom scripts.
uh, maybe. If you look at DoSpeakTrigger(), the "!bDoNotChangePlayer" section, and think you can handle that better than they did .....
/shrug.
But what you really want to do is simply find out why DoSpeakTrigger() is failing when ActionStartConversation() isn't
do you want me to paste a copy of the default 'ginc_trigger' on Pastebin? What bothers me is that DoSpeakTrigger() isn't failing afaict. The dialog starts. Try a very simple script:
void main()
{
SendMessageToPC(GetFirstPC(FALSE), "Script runs on " + GetName(OBJECT_SELF));
}