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.
176 lines
6.1 KiB
Plaintext
176 lines
6.1 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: Short description
|
|
//:: filename
|
|
//:://////////////////////////////////////////////
|
|
/** @file
|
|
Long description
|
|
|
|
|
|
@author Joe Random
|
|
@date Created - yyyy.mm.dd
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_dynconv"
|
|
#include "inc_ecl"
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constant defintions */
|
|
//////////////////////////////////////////////////
|
|
|
|
const int STAGE_TYPE = 0;
|
|
const int STAGE_LEVEL = 1;
|
|
const int STAGE_CONFIRM = 2;
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Aid functions */
|
|
//////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Main function */
|
|
//////////////////////////////////////////////////
|
|
|
|
void main()
|
|
{
|
|
object oPC = GetPCSpeaker();
|
|
/* Get the value of the local variable set by the conversation script calling
|
|
* this script. Values:
|
|
* DYNCONV_ABORTED Conversation aborted
|
|
* DYNCONV_EXITED Conversation exited via the exit node
|
|
* DYNCONV_SETUP_STAGE System's reply turn
|
|
* 0 Error - something else called the script
|
|
* Other The user made a choice
|
|
*/
|
|
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
|
|
// The stage is used to determine the active conversation node.
|
|
// 0 is the entry node.
|
|
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)
|
|
{
|
|
// Check if this stage is marked as already set up
|
|
// This stops list duplication when scrolling
|
|
if(!GetIsStageSetUp(nStage, oPC))
|
|
{
|
|
if(nStage == STAGE_TYPE)
|
|
{
|
|
SetHeader("What do you want to change?");
|
|
AddChoice("XP and GP", 1, oPC);
|
|
AddChoice("GP", 2, oPC);
|
|
AddChoice("XP", 3, oPC);
|
|
MarkStageSetUp(nStage, oPC);
|
|
SetDefaultTokens();
|
|
}
|
|
else if(nStage == STAGE_LEVEL)
|
|
{
|
|
SetHeader("What level do you want to go to?");
|
|
int i;
|
|
for(i=1;i<=40;i++)
|
|
{
|
|
AddChoice("Level "+IntToString(i), i, oPC);
|
|
}
|
|
MarkStageSetUp(nStage, oPC);
|
|
SetDefaultTokens();
|
|
}
|
|
else if(nStage == STAGE_CONFIRM)
|
|
{
|
|
int nLevel = GetLocalInt(OBJECT_SELF, "xpgplevel");
|
|
int nType = GetLocalInt(OBJECT_SELF, "xpgptype");
|
|
string sHeader;
|
|
sHeader = "You have selected ";
|
|
switch(nType)
|
|
{
|
|
default:
|
|
case 1: sHeader += "Experience and Gold"; break;
|
|
case 2: sHeader += "Gold"; break;
|
|
case 3: sHeader += "Experience"; break;
|
|
}
|
|
sHeader += ".\n";
|
|
sHeader += "You have selected level "+IntToString(nLevel)+".\n";
|
|
sHeader += "Is this correct?";
|
|
SetHeader(sHeader);
|
|
AddChoice("Yes", 1, oPC);
|
|
AddChoice("No", 2, oPC);
|
|
MarkStageSetUp(nStage, oPC);
|
|
SetDefaultTokens();
|
|
}
|
|
}
|
|
|
|
// Do token setup
|
|
SetupTokens();
|
|
}
|
|
// End of conversation cleanup
|
|
else if(nValue == DYNCONV_EXITED)
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "xpgplevel");
|
|
DeleteLocalInt(OBJECT_SELF, "xpgptype");
|
|
}
|
|
// Abort conversation cleanup.
|
|
// NOTE: This section is only run when the conversation is aborted
|
|
// while aborting is allowed. When it isn't, the dynconvo infrastructure
|
|
// handles restoring the conversation in a transparent manner
|
|
else if(nValue == DYNCONV_ABORTED)
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "xpgplevel");
|
|
DeleteLocalInt(OBJECT_SELF, "xpgptype");
|
|
}
|
|
// Handle PC responses
|
|
else
|
|
{
|
|
// variable named nChoice is the value of the player's choice as stored when building the choice list
|
|
// variable named nStage determines the current conversation node
|
|
int nChoice = GetChoice(oPC);
|
|
if(nStage == STAGE_TYPE)
|
|
{
|
|
SetLocalInt(OBJECT_SELF, "xpgptype", nChoice);
|
|
nStage = STAGE_LEVEL;
|
|
}
|
|
else if(nStage == STAGE_LEVEL)
|
|
{
|
|
SetLocalInt(OBJECT_SELF, "xpgplevel", nChoice);
|
|
nStage = STAGE_CONFIRM;
|
|
}
|
|
else if(nStage == STAGE_CONFIRM)
|
|
{
|
|
if(nChoice == 1)
|
|
{
|
|
int nLevel = GetLocalInt(OBJECT_SELF, "xpgplevel");
|
|
int nType = GetLocalInt(OBJECT_SELF, "xpgptype");
|
|
int nGold = GetGold(oPC);
|
|
int nTargetGold = StringToInt(Get2DACache("itemvalue", "MAXSINGLEITEMVALUE", nLevel-1))*10;
|
|
switch(nType)
|
|
{
|
|
default:
|
|
case 1:
|
|
SetXP(oPC, nLevel*(nLevel-1)*500);
|
|
SetPersistantLocalInt(oPC, sXP_AT_LAST_HEARTBEAT, nLevel*(nLevel-1)*500);
|
|
GiveGoldToCreature(oPC, nTargetGold-nGold);
|
|
break;
|
|
case 2:
|
|
GiveGoldToCreature(oPC, nTargetGold-nGold);
|
|
break;
|
|
case 3:
|
|
SetXP(oPC, nLevel*(nLevel-1)*500);
|
|
SetPersistantLocalInt(oPC, sXP_AT_LAST_HEARTBEAT, nLevel*(nLevel-1)*500);
|
|
break;
|
|
}
|
|
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
|
|
}
|
|
else
|
|
nStage = STAGE_TYPE;
|
|
}
|
|
|
|
// Store the stage value. If it has been changed, this clears out the choices
|
|
SetStage(nStage, oPC);
|
|
}
|
|
}
|