Further file organization
Further file organization
This commit is contained in:
177
nwn/nwnprc/trunk/scripts/prc_teleprt_conv.nss
Normal file
177
nwn/nwnprc/trunk/scripts/prc_teleprt_conv.nss
Normal file
@@ -0,0 +1,177 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Teleport location selection conversation
|
||||
//:: prc_teleprt_conv
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
This file builds the entries for a teleport
|
||||
target selection dialog when used with the
|
||||
dynamic conversation system.
|
||||
|
||||
@author Ornedan
|
||||
@date Created - 2005.05.29
|
||||
@date Modified - 2005.09.23
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_alterations"
|
||||
#include "prc_inc_teleport"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constant defintions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
const int STAGE_MAIN = 0;
|
||||
const int STAGE_SELECTION_MADE = 1;
|
||||
|
||||
const int ERROR_CODE_5_again =1 ;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Aid functions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Main function */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
|
||||
int nStage = GetStage(oPC);
|
||||
int bTransViaPlants = GetLocalInt(oPC, "PRC_TransportViaPlants");
|
||||
|
||||
// Check which of the conversation scripts called the scripts
|
||||
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
|
||||
return;
|
||||
|
||||
// Build system reply
|
||||
if(nValue == DYNCONV_SETUP_STAGE)
|
||||
{
|
||||
// Check if this stage is marked as already set up
|
||||
// This stops list duplication when scrolling
|
||||
if(!GetIsStageSetUp(nStage, oPC))
|
||||
{
|
||||
// Build the list of choices
|
||||
if(nStage == STAGE_MAIN)
|
||||
{
|
||||
// Set the header text
|
||||
string sToken = GetStringByStrRef(16825270); // "Select location to use"
|
||||
SetHeader(sToken);
|
||||
|
||||
int i;
|
||||
struct metalocation mlocL;
|
||||
object oArea;
|
||||
// Print the quickselections up front
|
||||
for(i = 1; i <= PRC_NUM_TELEPORT_QUICKSELECTS; i++)
|
||||
{// Quickselection
|
||||
sToken = GetStringByStrRef(16825271) + " " + IntToString(i) + ": ";
|
||||
//if(GetLocalInt(oPC, "PRC_Teleport_QuickSelection_" + IntToString(i)))
|
||||
if(GetHasTeleportQuickSelection(oPC, i))
|
||||
{
|
||||
//mlocL = GetLocalMetalocation(oPC, "PRC_Teleport_QuickSelection_" + IntToString(i));
|
||||
mlocL = GetTeleportQuickSelection(oPC, i);
|
||||
oArea = GetAreaFromMetalocation(mlocL);
|
||||
if((bTransViaPlants && GetIsAreaNatural(oArea) && !GetIsAreaInterior(oArea))
|
||||
|| !bTransViaPlants)
|
||||
{
|
||||
sToken += MetalocationToString(mlocL);
|
||||
AddChoice(sToken, -i, oPC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Print the contents of the array, skipping any locations not in the current module
|
||||
int nMax = GetNumberOfStoredTeleportTargetLocations(oPC);
|
||||
for(i = 0; i < nMax; i++)
|
||||
{
|
||||
mlocL = GetNthStoredTeleportTargetLocation(oPC, i);
|
||||
oArea = GetAreaFromMetalocation(mlocL);
|
||||
if(oArea != OBJECT_INVALID)
|
||||
{
|
||||
if((bTransViaPlants && GetIsAreaNatural(oArea) && !GetIsAreaInterior(oArea))
|
||||
|| !bTransViaPlants)
|
||||
AddChoice(MetalocationToString(mlocL), i, oPC);
|
||||
}
|
||||
}
|
||||
|
||||
if (nMax == 0) // This ejects people from the conversation for having no locations
|
||||
{
|
||||
FloatingTextStringOnCreature("You do not have any teleport locations stored, aborting teleport.", oPC, FALSE);
|
||||
// Mark the conversation as finished and allow exiting
|
||||
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
|
||||
}
|
||||
|
||||
MarkStageSetUp(STAGE_MAIN, oPC);
|
||||
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
|
||||
}
|
||||
// The user made their selection
|
||||
else if(nStage == STAGE_SELECTION_MADE)
|
||||
{
|
||||
// Set the header text
|
||||
string sToken = GetStringByStrRef(16825306); // "Selection made. Select finish to continue."
|
||||
SetHeader(sToken);
|
||||
|
||||
// Get the metalocation to store
|
||||
int nReturn = GetLocalInt(oPC, "PRC_TeleportSelectionConvo_Selection");
|
||||
struct metalocation mlocL = nReturn < 0 ? // Is it a quickselection?
|
||||
GetTeleportQuickSelection(oPC, -nReturn) :
|
||||
GetNthStoredTeleportTargetLocation(oPC, nReturn);
|
||||
// Store the return value
|
||||
if(GetLocalInt(oPC, "PRC_TeleportTargetSelection_ReturnAsMetalocation"))
|
||||
SetLocalMetalocation(oPC,
|
||||
GetLocalString(oPC, "PRC_TeleportTargetSelection_ReturnStoreName"),
|
||||
mlocL);
|
||||
else
|
||||
SetLocalLocation(oPC,
|
||||
GetLocalString(oPC, "PRC_TeleportTargetSelection_ReturnStoreName"),
|
||||
MetalocationToLocation(mlocL));
|
||||
// Mark the conversation as finished and allow exiting
|
||||
//AllowExit();
|
||||
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
|
||||
}
|
||||
}
|
||||
// Do token setup
|
||||
SetupTokens();
|
||||
}
|
||||
// Conversation ended normally
|
||||
else if(nValue == DYNCONV_EXITED)
|
||||
{
|
||||
// Schedule the callback script to be run
|
||||
string sScript = GetLocalString(oPC, "PRC_TeleportTargetSelection_CallbackScript");
|
||||
DelayCommand(0.3f, ExecuteScript(sScript, oPC));
|
||||
|
||||
if(DEBUG) SendMessageToPC(oPC, "prc_teleprt_conv: Got target location, running script " + sScript);
|
||||
|
||||
DeleteLocalInt(oPC, "PRC_TeleportSelectionConvo_Selection");
|
||||
DeleteLocalString(oPC, "PRC_TeleportTargetSelection_CallbackScript");
|
||||
DeleteLocalString(oPC, "PRC_TeleportTargetSelection_ReturnStoreName");
|
||||
DeleteLocalInt(oPC, "PRC_TeleportTargetSelection_ReturnAsMetalocation");
|
||||
DeleteLocalInt(oPC, "PRC_TransportViaPlants");
|
||||
}
|
||||
// Conversation aborted
|
||||
else if(nValue == DYNCONV_ABORTED)
|
||||
{
|
||||
DeleteLocalInt(oPC, "PRC_TeleportSelectionConvo_Selection");
|
||||
DeleteLocalString(oPC, "PRC_TeleportTargetSelection_CallbackScript");
|
||||
DeleteLocalString(oPC, "PRC_TeleportTargetSelection_ReturnStoreName");
|
||||
DeleteLocalInt(oPC, "PRC_TeleportTargetSelection_ReturnAsMetalocation");
|
||||
DeleteLocalInt(oPC, "PRC_TransportViaPlants");
|
||||
}
|
||||
else
|
||||
{
|
||||
int nChoice = GetChoice(oPC);
|
||||
if(nStage == STAGE_MAIN)
|
||||
{
|
||||
nStage = STAGE_SELECTION_MADE;
|
||||
SetLocalInt(oPC, "PRC_TeleportSelectionConvo_Selection", nChoice);
|
||||
}
|
||||
|
||||
// Store the stage value. If it has been changed, this clears out the choices
|
||||
SetStage(nStage, oPC);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user