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

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);
}
}