BIOWARE: a "preview" button for submitting
to these message boards would help. I sure hope this posts nicely. I'd
hate a typo to make my post look bad.
<b>1. NPC Monolog/Conversation</b>
<b>2. What it does: This script allows an NPC to run through several
lines of his/her own "over the head" text.</b>
<b>3. Notes: </b>
I searched the boards and found this question came up a lot but there
were no solutions that I could find. I finally figured this out and have
tested it.
This script is set up for one NPC to talk as though giving a lecture. I
haven't tested modifications on making two NPCs talk to each other, but
that's coming shortly as I have another place where I want two NPCs to
talk to each other.
First you must go into the NPC's OnSpawn event and simply uncomment the
line:
SetSpawnInCondition (NW_FLAG_HEARTBEAT_EVENT);
found in the Custom User Defined Events section to activate the NPC's
Heartbeat event. Don't forget to save the script under a different name
so you don't over-write the default script (and don't forget to assign
your new script to the NPC's OnSpawn event).
Next, you'll need to place the following script in the OnEnter event of
a generic trigger defining the area in which you want the player to
cause this conversation, or you might try placing it in the NPC's
OnPerceive event (though I have not tested that). This script speaks the
first line of the conversation and sets a local variable on the NPC that
will control the flow of script.
NWScript: void main()
{
object oPriest=GetObjectByTag("fc_PlatformPriest");
AssignCommand(oPriest, SpeakString("According to thy instructions, oh Great Mictlantecuhtli, we have weeded out the unworthy from our potential supplicants."));
SetLocalInt(oPriest, "iShowLine", 1);
}
Then this is the template (complete with custom content from my module -
sorry about the stereotypical cult-sacrificing-victims side-plot) for
the custom conversation. Place this script in the NPC's OnUserDefined
event. The example stops mid-conversation but by then you should have
figured out the concept.
NWScript:
void main()
{
int nEvent = GetUserDefinedEventNumber();
if (nEvent == 1001)
{
object oPriest=GetObjectByTag("fc_PlatformPriest");
if (IsInConversation(oPriest) == FALSE && GetIsInCombat(oPriest) == FALSE)
{
int iLine=GetLocalInt(oPriest, "iShowLine");
object oVictim1=GetNearestObjectByTag("fc_PlatformVictim", OBJECT_SELF, 1);
object oPC=GetFirstPC();
switch(iLine)
{
case 1:
AssignCommand(oPriest, SpeakString("Now we are prepared to sacrifice them to thee, oh master!"));
SetLocalInt(oPriest, "iShowLine", 2);
break;
case 2:
AssignCommand(oPriest, SpeakString("And through thy devine power, let fire fly from my fingertips --"));
SetLocalInt(oPriest, "iShowLine", 3);
break;
case 3:
AssignCommand(oPriest, SpeakString("And through our gathered witnessing of this event, we shall all receive thy blessing!!"));
SetLocalInt(oPriest, "iShowLine", 4);
break;
case 4:
AssignCommand(oPriest, SpeakString("Now DIE ye mortal scum! DIE for Mictlantecuhtli!!"));
SetLocalInt(oPriest, "iShowLine", 5);
break;
case 5:
AssignCommand(oPriest, ActionCastSpellAtObject(SPELL_FLAME_ARROW, oVictim1, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
AdjustAlignment(oPC, ALIGNMENT_EVIL, 5);
SetLocalInt(oPriest, "iShowLine", 6);
break;
case 6:
AssignCommand(oPriest, SpeakString("YES!! Feel the power! Feel the presence of Mictlantecuhtli seeping into your souls!"));
SetLocalInt(oPriest, "iShowLine", 7);
break;
case 7:
AssignCommand(oPriest, SpeakString("And now for the second of three."));
SetLocalInt(oPriest, "iShowLine", 8) ;
break;
}
}
};
return;
}
Please note the last case should still set the NPC's local variable up,
or the last line will continually repeat.
Members, please feel free to send me a message through the boards' "My
Messages" system.
Hopefully, a multi-NPC conversation script is coming soon as I have a
place for that too.
DragonTayl.
|