PRC8/nwn/nwnprc/trunk/newspellbook/tob_aptitudeconv.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

158 lines
6.1 KiB
Plaintext

//:://////////////////////////////////////////////
//:: Weapon Aptitude conversation script
//:: tob_aptitudeconv
//:://////////////////////////////////////////////
/** @file
This script controls the weapon selection
conversation for Warblade's Aptitude
@author Primogenitor - Original
@author Ornedan - Modifications
@author Fox - ripped from Psionics convo
@date Modified - 2005.03.13
@date Modified - 2005.09.23
@date Modified - 2008.01.25
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
////#include "prc_alterations"
#include "inc_dynconv"
#include "prc_inc_wpnrest"
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
const int STAGE_SELECT_OPTION = 0;
const int STAGE_SELECT_WEAPON = 1;
const int CHOICE_FOCUS_WEAPON_1 = 1;
const int CHOICE_CRITICAL_WEAPON_1 = 2;
const int CHOICE_FOCUS_WEAPON_2 = 3;
const int CHOICE_CRITICAL_WEAPON_2 = 4;
const string OPTION_FOCUS_WEAPON_1 = "PRC_WEAPAPT_FOCUS_1";
const string OPTION_CRITICAL_WEAPON_1 = "PRC_WEAPAPT_CRITICAL_1";
const string OPTION_FOCUS_WEAPON_2 = "PRC_WEAPAPT_FOCUS_2";
const string OPTION_CRITICAL_WEAPON_2 = "PRC_WEAPAPT_CRITICAL_2";
const string WEAPON_FILE = "prc_weap_items";
const int DEBUG_CONVO = FALSE;
//////////////////////////////////////////////////
/* Function defintions */
//////////////////////////////////////////////////
string GetOptionText(object oPC, string sOptionText, string sOption)
{
string sWeapon;
int nWeaponIndex = GetLocalInt(oPC, sOption);
if(nWeaponIndex)
sWeapon = GetStringByStrRef(StringToInt(Get2DACache(WEAPON_FILE, "Name", nWeaponIndex-1)));
else
sWeapon = GetStringByStrRef(16837740);
return ReplaceString(sOptionText, "%(CURRENT)", sWeapon);
}
void main()
{
object oPC = GetPCSpeaker();
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
// 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;
if(nValue == DYNCONV_SETUP_STAGE)
{
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Running setup stage for stage " + IntToString(nStage));
// Check if this stage is marked as already set up
// This stops list duplication when scrolling
if(!GetIsStageSetUp(nStage, oPC))
{
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Stage was not set up already");
// Level selection stage
if (nStage == STAGE_SELECT_OPTION)
{
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Options");
SetHeader(GetStringByStrRef(16837741));
AddChoice(GetOptionText(oPC, GetStringByStrRef(16837736), OPTION_FOCUS_WEAPON_1), CHOICE_FOCUS_WEAPON_1);
//AddChoice(GetOptionText(oPC, GetStringByStrRef(16837737), OPTION_CRITICAL_WEAPON_1), CHOICE_CRITICAL_WEAPON_1);
//AddChoice(GetOptionText(oPC, GetStringByStrRef(16837738), OPTION_FOCUS_WEAPON_2), CHOICE_FOCUS_WEAPON_2);
//AddChoice(GetOptionText(oPC, GetStringByStrRef(16837739), OPTION_CRITICAL_WEAPON_2), CHOICE_CRITICAL_WEAPON_2);
SetDefaultTokens();
}
else if(nStage == STAGE_SELECT_WEAPON)
{
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Building weapon selection");
SetHeader(GetStringByStrRef(16827087));
//Add weapons from 2da file
int i = 0;
while(Get2DACache(WEAPON_FILE, "label", i) != "") //until we hit a nonexistant line
{
int nName = StringToInt(Get2DACache(WEAPON_FILE, "Name", i));
AddChoice(GetStringByStrRef(nName), i+1); //choice # = row # in WEAPON_FILE + 1
i++; //go to next line
}
// This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
MarkStageSetUp(nStage, oPC);
// Set the next, previous and wait tokens to default values
SetDefaultTokens();
}
}
// Do token setup
SetupTokens();
}
else if(nValue == DYNCONV_EXITED)
{
}
else if(nValue == DYNCONV_ABORTED)
{
}
else
{
int nChoice = GetChoice(oPC);
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Handling PC response, stage = " + IntToString(nStage) + "; nChoice = " + IntToString(nChoice) + "; choice text = '" + GetChoiceText(oPC) + "'");
ClearCurrentStage(oPC);
if(nStage == STAGE_SELECT_OPTION)
{
nStage = STAGE_SELECT_WEAPON;
if(nChoice==CHOICE_FOCUS_WEAPON_1)
SetLocalString(oPC, "PRC_WeapApt_Option", OPTION_FOCUS_WEAPON_1);
else if(nChoice==CHOICE_CRITICAL_WEAPON_1)
SetLocalString(oPC, "PRC_WeapApt_Option", OPTION_CRITICAL_WEAPON_1);
else if(nChoice==CHOICE_FOCUS_WEAPON_2)
SetLocalString(oPC, "PRC_WeapApt_Option", OPTION_FOCUS_WEAPON_2);
else if(nChoice==CHOICE_CRITICAL_WEAPON_2)
SetLocalString(oPC, "PRC_WeapApt_Option", OPTION_CRITICAL_WEAPON_2);
else
nStage == STAGE_SELECT_OPTION;
}
else if(nStage == STAGE_SELECT_WEAPON)
{
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: Weapon selected. Entering Confirmation.");
string sOption = GetLocalString(oPC, "PRC_WeapApt_Option");
SetLocalInt(oPC, sOption, nChoice); //nChoice = row # in WEAPON_FILE + 1
nStage = STAGE_SELECT_OPTION;
}
if(DEBUG_CONVO) DoDebug("tob_aptitudeconv: New stage: " + IntToString(nStage));
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
}