PRC8/nwn/nwnprc/trunk/epicspellscripts/ss_ep_dreamscape.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

142 lines
5.7 KiB
Plaintext

//:://////////////////////////////////////////////
//:: FileName: "ss_ep_dreamscape"
/* Purpose: Dreamscape - This is a PLOT spell. A module builder MUST take
this spell into consideration when designing their module, or else they
should exclude it. It depends completely on the builder placing
something relevant into the module for it. Read comments in coding for
hints and details.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void NoValidWP(object oPC);
void TeleportPartyToLocation(object oPC, location lWP);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DREAMSC))
{
// Declarations.
location lDestination;
location lWP;
object oWP;
// Check for how many "successful" castings there have been. It is up
// to the MODULE BUILDER to increment or decrement this number!!!!
int nNumCasts = GetLocalInt(OBJECT_SELF, "nDreamscapeCount");
// Where will the Dreamscape take you this time?
switch (nNumCasts)
{
case 0: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
// I have added extra cases. It will never reach them unless you
// increment the local int "nDreamscapeCount" somewhere along the
// way. If you do not do this, the case will ALWAYS be zero.
case 1: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 2: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 3: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 4: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 5: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 6: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void NoValidWP(object oPC)
{
// This is the back-up plan. If there is no waypoint to go to, maybe you
// have an event happening in a conversation that will send them somewhere.
ActionStartConversation(OBJECT_SELF, "ss_dreamscape", TRUE, FALSE);
}
void TeleportPartyToLocation(object oPC, location lWP)
{
effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
// Cycle through all party members and teleport them to the waypoint.
object oMem = GetFirstFactionMember(oPC, FALSE);
while (oMem != OBJECT_INVALID)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oMem);
FloatingTextStringOnCreature("*begins to dream...*", oMem);
DelayCommand(3.0, AssignCommand(oMem, JumpToLocation(lWP)));
oMem = GetNextFactionMember(oPC, FALSE);
}
}