Welcome back to the NWN rabbit hole.
Check out the Henchmen Always Bleed To Death (HABD) set of scripts. If I'm not mistaken, in addition to the bleeding system, there's respawn funtionality. This should have everything you need in one package.
For conversations, you're looking for a Starting Conditional script. This is a script that is placed in the "Text Appears When" field of the conversation (as opposed to the "Actions Taken" field). This starting conditional is a simple script that resolves to either TRUE or FALSE. If it determines that a set of criteria has been met (such as the quest has already been given), then it can return TRUE and display the conversation option, rather than another conversation node that would give the new quest.
A simple journal conversation starting conditional script might look like:
int StartingConditional()
{
if (GetLocalInt(GetPCSpeaker(),"Quest"+GetLocalString(OBJECT_SELF,"Quest")) >= 2)
{
return TRUE;
}
return FALSE;
}
The above looks to see if a number on the PC for a specific quest is >=2. If it is, then the script is TRUE and the conversation option that this starting conditional is tied to, displays. If the conditional resolves to FALSE, the PC never sees the conversation option.
Oh, and when building quest-based conversations, they're usually done in reverse, so that the 'final' quest completion conversation node is top (the starting conditional looks for the 'finished' value first and then subsequently to earlier stages in the quest process:
Node 1: I'm completely finished with the quest
Node 2: I've finished and am returning to speak to you about it
Node 3: I haven't finished the quest, but I've been given it.
Node 4: I have not yet been given the quest yet.
Hope that helps.