forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
178 lines
7.3 KiB
Plaintext
178 lines
7.3 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: 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);
|
|
}
|
|
}
|