/**
 * @file
 * This file defines names of switches that can be used to modify
 * the behaviour of certain parts of the PRC pack.
 * It also contains functions for getting and setting the values of
 * these switches and in addition some functions dealing with the
 * implementation of certain switches.
 */

 /*

 Creating your personal switch settings
 For singleplayer, you can create a 2da file and place it in the overide
 Then via the PRC Options switch you can read that 2da and it will
 use it to set switches for you.
 This will not work in multiplayer.
 An example is below. Copy and paste it into a plain text file saved
 as personal_switch.2da

 If there is a file named personal_switch.2da then it will be loaded
 at module load and the switches set accordingly.


2DA V2.0

    SwitchName                              SwitchType SwitchValue
0   FOO                                     float      3.14159
1   BAR                                     int        12321
2   BAZ                                     string     "Go For The Eyes Boo, Go For The Eyes!"
3   PRC_PNP_TRUESEEING                      int        1
4   PRC_TIMESTOP_LOCAL                      int        1
5   PRC_TIMESTOP_NO_HOSTILE                 int        1
6   PRC_TIMESTOP_BLANK_PC                   int        1
7   PRC_PNP_ELEMENTAL_SWARM                 int        1
8   PRC_PNP_TENSERS_TRANSFORMATION          int        1
9   PRC_PNP_BLACK_BLADE_OF_DISASTER         int        1
10  PRC_PNP_FIND_TRAPS                      int        1
11  PRC_PNP_DARKNESS                        int        1
12  PRC_PNP_DARKNESS_35ED                   int        1
13  PRC_PNP_ANIMATE_DEAD                    int        1
14  PRC_35ED_WORD_OF_FAITH                  int        1
15  PRC_CREATE_UNDEAD_UNCONTROLLED          int        1
16  PRC_CREATE_UNDEAD_PERMANENT             int        1
17  PRC_SLEEP_NO_HD_CAP                     int        1
18  PRC_USE_NEW_IMBUE_ARROW                 int        1
19  PRC_ORC_WARLORD_COHORT                  int        1
20  PRC_LICH_ALTER_SELF_DISABLE             int        1
21  PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL   int        1
22  PRC_THRALLHERD_LEADERSHIP               int        1
23  PRC_PNP_UNIMPINGED                      int        1
24  PRC_PNP_IMPENETRABILITY                 int        1
25  PRC_PNP_DULLBLADES                      int        1
26  PRC_PNP_CHAMPIONS_VALOR                 int        1
27  PRC_STAFF_CASTER_LEVEL                  int        1
28  PRC_PNP_ABILITY_DAMAGE_EFFECTS          int        1
29  PRC_PNP_REST_HEALING                    int        1
30  PRC_PNP_SOMATIC_COMPOMENTS              int        1
31  PRC_PNP_SOMATIC_ITEMS                   int        1
32  PRC_MULTISUMMON                         int        1
33  PRC_SUMMON_ROUND_PER_LEVEL              int        1
34  PRC_PNP_FAMILIAR_FEEDING                int        1
35  PRC_PNP_HOLY_AVENGER_IPROP              int        1
36  PRC_PNP_SLINGS                          int        1
37  PRC_PNP_RACIAL_SPEED                    int        1
38  PRC_PNP_ARMOR_SPEED                     int        1
39  PRC_REMOVE_PLAYER_SPEED                 int        1
40  PRC_BREW_POTION_CASTER_LEVEL            int        1
41  PRC_SCRIBE_SCROLL_CASTER_LEVEL          int        1
42  PRC_CRAFT_WAND_CASTER_LEVEL             int        1
43  PRC_CRAFTING_BASE_ITEMS                 int        1
44  PRC_XP_USE_SIMPLE_LA                    int        1
45  PRC_XP_USE_SIMPLE_RACIAL_HD             int        1
 */

 /* This variable MUST be updated with every new version of the PRC!!! */

 const string PRC_VERSION                           = "PRC 3.9.0";

 /* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */

 const string AMS_VERSION                           = "AMS_1.7.6";

/******************************************************************************\
*                                  Spell switches                              *
\******************************************************************************/

/** Material Components
 * Set switch to 1 to activate this
 * This allows material components in NWN through the materialcomp.2da
 * Just put the SpellID and UTC resref in, MINUS the .utc on the end.
 * This also requires the names of the items, formatted like so ("" included): "Object Name"
 * 
 * Set switch to 2 to activate this
 * Deducts gold instead of requiring material components
 * Put the gold value in the Cost column
 
 * Set switch to 3 to activate both at the same time
 * WARNING: This will slow spellcasting down due to 2da reads and inventory loops
 */
const string PRC_MATERIAL_COMPONENTS                 = "PRC_MATERIAL_COMPONENTS";

const string PRC_DISABLE_COMPONENTS_SHOP             = "PRC_DISABLE_COMPONENTS_SHOP";

/** Bioware True Seeing can see stealthed creatures.
 * This replaces the trueseeing effect with a See Invisible + Ultravision + Spot bonus.
 * This affects the spell and power True Seeing and the Dragon Disciple class
 */
const string PRC_PNP_TRUESEEING                      = "PRC_PNP_TRUESEEING";

/**
 * PRC_PNP_TRUESEEING must be on.
 * Value of spot skill bonus that True Seeing grants.
 * Defaults to +15 if not set.
 */
const string PRC_PNP_TRUESEEING_SPOT_BONUS           = "PRC_PNP_TRUESEEING_SPOT_BONUS";

/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_GRRESTORE                   = "PRC_BIOWARE_GRRESTORE";
/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_HEAL                        = "PRC_BIOWARE_HEAL";
/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_MASS_HEAL                   = "PRC_BIOWARE_MASS_HEAL";
/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_HARM                        = "PRC_BIOWARE_HARM";
/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_NEUTRALIZE_POISON           = "PRC_BIOWARE_NEUTRALIZE_POISON";
/** Remove the cap PRC added to this spell */
const string PRC_BIOWARE_REMOVE_DISEASE              = "PRC_BIOWARE_REMOVE_DISEASE";

/** 
 * This replaces the 3.0 Spell Focus bonuses with the 3.5 edition ones
 */
const string PRC_35_SPELL_FOCUS                      = "PRC_35_SPELL_FOCUS";

/* Blindness/Deafness effect is permanent */
const string PRC_PNP_BLINDNESS_DEAFNESS              = "PRC_PNP_BLINDNESS_DEAFNESS";

/**
 * Sets caltrops duration in seconds.
 * Defaults = permanent
 */
const string PRC_CALTROPS_DURATION                   = "PRC_CALTROPS_DURATION";

/***
 * Timestop has Bioware durations (9 seconds or 18 for Greater Timestop) rather
 * than PnP durations (1d4+1 or 2d4+2)
 */
const string PRC_TIMESTOP_BIOWARE_DURATION           = "PRC_TIMESTOP_BIOWARE_DURATION";

/**
 * Timestop has only a local affect, i.e doesn't stop people on the other areas of the module.
 * Note that AOEs continue to act during a timestop, and durations/delayed events still occur.
 */
const string PRC_TIMESTOP_LOCAL                      = "PRC_TIMESTOP_LOCAL";

/**
 * PRC_TIMESTOP_LOCAL must be enabled.
 * Caster can't perform any hostile actions while in timestop.
 */
const string PRC_TIMESTOP_NO_HOSTILE                 = "PRC_TIMESTOP_NO_HOSTILE";

/**
 * PRC_TIMESTOP_LOCAL must be enabled.
 * PCs can't see anything while stopped.
 * This might look to the player like their game crashed.
 */
const string PRC_TIMESTOP_BLANK_PC                   = "PRC_TIMESTOP_BLANK_PC";

/**
 * Instead of Bioware's sequential summons it creates multiple elementals.
 * Only works if PRC_MULTISUMMON is on
 */
const string PRC_PNP_ELEMENTAL_SWARM                 = "PRC_PNP_ELEMENTAL_SWARM";

/**
 * If you pass a save, you can't be affected by that aura for 24h.
 * NOTE: Not implemented yet
 */
const string PRC_PNP_FEAR_AURAS                      = "PRC_PNP_FEAR_AURAS";

/**
 * Not a polymorph but ability bonuses instead.
 */
const string PRC_PNP_TENSERS_TRANSFORMATION          = "PRC_PNP_TENSERS_TRANSFORMATION";

/**
 * Less powerful, more PnP accurate version.
 * Caster must concentrate to maintain it.
 */
const string PRC_PNP_BLACK_BLADE_OF_DISASTER         = "PRC_PNP_BLACK_BLADE_OF_DISASTER";

/**
 * Traps are only shown, not disarmed
 */
const string PRC_PNP_FIND_TRAPS                      = "PRC_PNP_FIND_TRAPS";

/**
 * PnP Darkness
 * Is a mobile AOE based off an item
 */
const string PRC_PNP_DARKNESS                        = "PRC_PNP_DARKNESS";

/**
 * Bioware Invisibility, Improved Invisibility
 */
const string PRC_BIOWARE_INVISIBILITY                = "PRC_BIOWARE_INVISIBILITY";

/**
 * 3.5ed Darkness
 * Gives 20% concelement rather than bioware darkness
 */
const string PRC_PNP_DARKNESS_35ED                   = "PRC_PNP_DARKNESS_35ED";

/**
 * Undead summons are permanent, but can only have 4HD/casterlevel in total
 * Does not enforce the requirement for a corpse
 * Also applies to ghoul gauntlet which otherwise will create one ghoul
 * if you dont already have a summon
 */
const string PRC_PNP_ANIMATE_DEAD                    = "PRC_PNP_ANIMATE_DEAD";

/**
 * This sets the HP limit for Symbol of Death, Symbol of Fear and Symbol of Stunning
 * spells. Default = 150.
 */
const string PRC_SYMBOL_HP_LIMIT                     = "PRC_SYMBOL_HP_LIMIT";

/**
 * "Word of Faith" spells use 3.5 ed rules rather than 3.0ed
 * basically instead of 12+ / <12 / <8 / <4 its relative to caster level
 * at >=CL / <CL / <CL-5 / <CL-10
 * This basically makes it more powerful at higher levels
 */
const string PRC_35ED_WORD_OF_FAITH                  = "PRC_35ED_WORD_OF_FAITH";

/*
 * Undead created by Create Undead and Create Greater Undead are
 * not automatically under the casters control
 * If this is set, the undead are permanently created
 */
const string PRC_CREATE_UNDEAD_UNCONTROLLED          = "PRC_CREATE_UNDEAD_UNCONTROLLED";

/*
 * Undead created by Create Undead and Create Greater Undead are
 * not removed on resting etc
 */
const string PRC_CREATE_UNDEAD_PERMANENT             = "PRC_CREATE_UNDEAD_PERMANENT";

/*
 * Sleep and Deep Slumber dont have a limit on the
 * HD of a target to be effected.
 */
const string PRC_SLEEP_NO_HD_CAP                     = "PRC_SLEEP_NO_HD_CAP";

/**
 * By request, set this to use the 1.65 behaviour for implosion, phantasmal killer,
 * and weird, i.e. death immunity counts
 * This is in addition to the extra immunities 1.66 adds
 */
const string PRC_165_DEATH_IMMUNITY                  = "PRC_165_DEATH_IMMUNITY";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will override spell DC for all spells cast (including SLAs and items)
 * This will overrule all feats, racial bonuses, etc that would effect DC
*/
const string PRC_DC_TOTAL_OVERRIDE                   = "PRC_DC_TOTAL_OVERRIDE";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will override spell DC for all spells cast (including SLAs and items)
 * This will ony override base DC+spelllevel+statmod, feats race etc are added on top of this
 * If this is set to -1, DC is calculated including class & spell level
*/
const string PRC_DC_BASE_OVERRIDE                   = "PRC_DC_BASE_OVERRIDE";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will add to spell DC for all spells cast (including SLAs and items)
*/
const string PRC_DC_ADJUSTMENT                       = "PRC_DC_ADJUSTMENT";

/*
 * By default when calculating caster level for characters with PrCs, the highest class rule will 
 * be used (ie. Bard 2/Wizard 4/Elemental Savant 6 - Wizard is the highest arcane class so levels 
 * form PrC will be added to that class, and the caster level will be 2 for Bard and 10 for Wizard).
 * When this is set, the first class rule will be used (with the same character caster level would
 * be 8 for Bard and 4 for Wizard).
*/
const string PRC_CASTERLEVEL_FIRST_CLASS_RULE        = "PRC_CASTERLEVEL_FIRST_CLASS_RULE";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will override spell casterlevel for all spells cast (including SLAs and items)
*/
const string PRC_CASTERLEVEL_OVERRIDE                = "PRC_CASTERLEVEL_OVERRIDE";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will add to spell casterlevel for all spells cast (including SLAs and items)
*/
const string PRC_CASTERLEVEL_ADJUSTMENT              = "PRC_CASTERLEVEL_ADJUSTMENT";

/*
 * Mostly internal, but builders may find a use for it
 * Used to override GetLastSpellCastClass();
*/
const string PRC_CASTERCLASS_OVERRIDE                = "PRC_CASTERCLASS_OVERRIDE";

/*
 * Mostly internal, but builders may find a use for it
 * Used to override PRCGetSpellTargetLocation();
 * To activate set a location and an int on the module
 * The int must be TRUE
*/
const string PRC_SPELL_TARGET_LOCATION_OVERRIDE      = "PRC_SPELL_TARGET_LOCATION_OVERRIDE";

/*
 * Mostly internal, but builders may find a use for it
 * Used to override PRCGetSpellTargetObject();
 * To activate set a object and an int on the module
 * The int must be TRUE
*/
const string PRC_SPELL_TARGET_OBJECT_OVERRIDE        = "PRC_SPELL_TARGET_OBJECT_OVERRIDE";

/*
 * Mostly internal, but builders may find a use for it
 * Used to increase/decrease spell area (but it won't work with AoE)
 * works with widen spell
 * Float variable - area size is multiplied by it
*/
const string PRC_SPELL_AREA_SIZE_MULTIPLIER          = "PRC_SPELL_AREA_SIZE_MULTIPLIER";

/**
 * Mostly internal
 * Used to override PRCGetSpellCastItem();
 */
const string PRC_SPELLCASTITEM_OVERRIDE              = "PRC_SPELLCASTITEM_OVERRIDE";

/*
 * This is for builders. It should not be set on the module, but should be set on players/creatures.
 * When this is set, it will add to spell metamagic. Not all spells may accept this.
 * Only use Empower, Extend, or Maximize.
 * Still, Silent, and Quicken wont work
*/
const string PRC_METAMAGIC_ADJUSTMENT                 = "PRC_METAMAGIC_ADJUSTMENT";

/*
 * Mostly internal, but builders may find a use for it
 * Used to override PRCGetMetaMagicFeat();
 * Only use Empower, Extend, or Maximize.
 * Still, Silent, and Quicken wont work
*/
const string PRC_METAMAGIC_OVERRIDE                   = "PRC_METAMAGIC_OVERRIDE";

/*
 * Override for SpellID for PRCGetSpellID()
 * Doesnt effect spellID from effects, or automatic 2da reads
 */
const string PRC_SPELLID_OVERRIDE                     = "PRC_SPELLID_OVERRIDE";

/*
 * This switch toggles whether items are destroyed by Claws of the Bebilith or
 * simply unequipped.
 */
 const string PRC_BEBILITH_CLAWS_DESTROY              = "PRC_BEBILITH_CLAWS_DESTROY";

/*
 * When on, unidentified items will automatically by identified when aquired
 * respecting normal lore skill rules.
 */
 const string PRC_AUTO_IDENTIFY_ON_ACQUIRE              = "PRC_AUTO_IDENTIFY_ON_ACQUIRE";

/*
 * When on, identified items will automatically by unidentified when aquired
 * provided the new owner is not a friend/neutral and not to/from a store
 */
 const string PRC_AUTO_UNIDENTIFY_ON_UNACQUIRE              = "PRC_AUTO_UNIDENTIFY_ON_UNACQUIRE";

/*
 * Extra damage switch for Apocalypse from the Sky
 * spell does 10d6 by default, 40d4 with this set
 */

const string PRC_AFTS_EXTRA_DAMAGE                         = "PRC_AFTS_EXTRA_DAMAGE";


// switch whether unlearning spells for spont casters at level up should go according to PnP or Bioware rules
// if on, will unlearn according to Bioware rules (e.g. as many as you want)
const string PRC_BIO_UNLEARN = "PRC_BIO_UNLEARN";

/** PRC_UNLEARN_SPELL_MAXNR
If PRC_BIO_UNLEARN is ON, you may want to restrict the nr of spells that a spontaneous caster
can unlearn to just a few spells ("normal" Bioware rules allow unlearning all spells at every level).
When PRC_UNLEARN_SPELL_MAXNR is set to (hopefully) a small value, the spontaneous caster
will still be able to unlearn spells at EVERY level up with no restrictions to the spell level that may
be unlearned, but the maximum nr of spells that can be unlearned are determined by the value on the switch
When PRC_UNLEARN_SPELL_MAXNR is not set and PRC_BIO_UNLEARN is ON, the spont caster
may unlearn as many spells as he wishes at every level up

If PRC_BIO_UNLEARN is Off, the maximum spell level that can be unlearned and the caster level
at which unlearning a spell becomes possible will be determined according to PnP rules. However,
you may want to give your spont casters more than one single spell to unlearn via this switch. If
PRC_UNLEARN_SPELL_MAXNR is set to a positive value, this is the nr of spells that the spontaneous
caster may unlearn (assuming he is allowed to unlearn at least one spell according to PnP rules). If
PRC_UNLEARN_SPELL_MAXNR is not set and PRC_BIO_UNLEARN is Off, unlearning spells goes
according to the exact PnP rules, e.g. at most one spell may be unlearned (at specific caster levels and
with restrictions on the maximum spell level that can be unlearned)
*/
// holds the maximum nr of spells that can be unlearned when the spont caster is entitled to unlearn at least one spell
const string PRC_UNLEARN_SPELL_MAXNR = "PRC_UNLEARN_SPELL_MAXNR";

/******************************************************************************\
*                                  Class switches                              *
\******************************************************************************/

/*
 * This turns on the new improved imbue arrow functionallity
 * so all the player has to do is cast the spell at an arrow in their inventory
 * If this is off, players get the default bioware imbue arrow as a bonus feat on their hides
*/
const string PRC_USE_NEW_IMBUE_ARROW                 = "PRC_USE_NEW_IMBUE_ARROW";

/*
 * If this is set, the Dragon Disciple size increases at level 15 and 25
 * will give ability increases matching the new size
 * In any case, DDs will benefit from increased natural damage
*/
const string PRC_DRAGON_DISCIPLE_SIZE_CHANGES        = "PRC_DRAGON_DISCIPLE_SIZE_CHANGES";

/*
 *   Start of samurai switches
 */

/*
 * This values are divided by 100 when applied so a value of 100 is equivalent
 * to 1.0
 */

/*
 *
 *
 *
 */
const string PRC_SAMURAI_                            = "PRC_SAMURAI_";

/*
 * This allows samurai to sacrifice stolen items
 */
const string PRC_SAMURAI_ALLOW_STOLEN_SACRIFICE      = "PRC_SAMURAI_ALLOW_STOLEN_SACRIFICE";

/*
 * This allows samurai to sacrifice unidentified items
 * They will get full value for them however
 */
const string PRC_SAMURAI_ALLOW_UNIDENTIFIED_SACRIFICE= "PRC_SAMURAI_ALLOW_UNIDENTIFIED_SACRIFICE";

/*
 * This scales the value of sacrificed items
 * This values are divided by 100 when applied so a value of 100 is equivalent
 * to 1.0
 */
const string PRC_SAMURAI_SACRIFICE_SCALAR_x100       = "PRC_SAMURAI_SACRIFICE_SCALAR_x100";

/*
 * This scales the maximum value a samurai can have
 * This values are divided by 100 when applied so a value of 100 is equivalent
 * to 1.0
 */
const string PRC_SAMURAI_VALUE_SCALAR_x100           = "PRC_SAMURAI_VALUE_SCALAR_x100";

/*
 * Stop and Itemproperty being addeable
 * This is just a prefix, they should be finished as
 * PRC_SAMURAI_BAN_[type]_[subtype]_[param1]_[value]
 * If an itemproperty is missing one of those, or you wish to ban all of a
 * particular type use * instead of a number.
 * Examples:
 * Not allowing divine damage :                         PRC_SAMURAI_BAN_16_8_*_*
 * Not allowing divine damage vs undead:                PRC_SAMURAI_BAN_18_24_8_*
 * Not allowing +20 encancement weapons                 PRC_SAMURAI_BAN_6_*_*_20
 * see also DoSamuraiBanDefaults in inc_switch_setup
 *
 */
const string PRC_SAMURAI_BAN_                            = "PRC_SAMURAI_BAN_";

/*
 *  Normally, some bans on itemproperties are setup automatically.
 *  If this switch is set, then nothing is banned automatically
 *  thus giving admins full controll.
 */
const string PRC_SAMURAI_DISABLE_DEFAULT_BAN             = "PRC_SAMURAI_DISABLE_DEFAULT_BAN";

/*
 * Orc Warlord gets a single additional cohort that must be an orc of some sort instead
 * of multiple summons
 */
const string PRC_ORC_WARLORD_COHORT                  = "PRC_ORC_WARLORD_COHORT";

/*
 * Disables the Lichs Alter Self ability
 * This was original a fudge for the HotU fairy/wolf/elemental quest
 */
const string PRC_LICH_ALTER_SELF_DISABLE             = "PRC_LICH_ALTER_SELF_DISABLE";

/*
 * Reduces the True Necromancers aura visual effects
 * It continues to function the same though
 */
const string PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL             = "PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL";

/*
 * Thrallherd uses leadership system rather than its own summons
 * They still cannot use Leadership, Epic Leadership or Legendary Commander feats
 */
const string PRC_THRALLHERD_LEADERSHIP             = "PRC_THRALLHERD_LEADERSHIP";

/*
 * Prevents Spellfire wielders from absorbing their own
 * spells/powers
 */
const string PRC_SPELLFIRE_DISALLOW_CHARGE_SELF     = "PRC_SPELLFIRE_DISALLOW_CHARGE_SELF";

/*
 * Prevents Spellfire channelers from absorbing from
 * scrolls/potions
 */
const string PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION = "PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION";

/*
 * Disables the PRCs sorcerer newspelbook extension
 */
const string PRC_SORC_DISALLOW_NEWSPELLBOOK     = "PRC_SORC_DISALLOW_NEWSPELLBOOK";

/*
 * Disables the PRCs bards newspelbook extension
 */
const string PRC_BARD_DISALLOW_NEWSPELLBOOK     = "PRC_BARD_DISALLOW_NEWSPELLBOOK";

/*
 * Bards suffer no arcane spell failure chance when casting in light armor
 */
const string PRC_BARD_LIGHT_ARMOR_SPELLCASTING  = "PRC_BARD_LIGHT_ARMOR_SPELLCASTING";

/**
 * By default, CW Samurai get a plain katana and a plain wakizashi (shortsword) at 1st level.
 * Setting this to non-zero value prevents that.
 */
const string PRC_CWSAMURAI_NO_HEIRLOOM_DAISHO = "PRC_CWSAMURAI_NO_HEIRLOOM_DAISHO";

/**
 * Determines the number of wight henchmen a Soul Eater can have via their Soul Slave
 * class ability.
 * Default: 4
 * Special: Due to it not being possible to differentiate between a set 0 and an unset 0,
 *          to prevent any wight henchmen, set the switch to -1. (0 counts as the default)
 */
const string PRC_SOUL_EATER_MAX_SLAVES       = "PRC_SOUL_EATER_MAX_SLAVES";


/**
 * For the Psionic Slayer prestige class, this switch limits the Favored Enemy selection
 * to the Aberration racial type.
 *
 * This switch is provided to allow builders to more closely represent the Pen and Paper 
 * Illithid Slayer class, instead of the broader Open Game License "Slayer" class.
 *
 * Type: Int  
 * Values: 0 [Default] (Favored Enemy racial type is not limited)
 *		   1 (Favored Enemy race is limited to Aberration only)
 */
const string PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY       = "PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY";

/**
 * For the Psionic Slayer prestige class, this switch requires a character to make a "kill"
 * of a specific type of creature before the class becomes available.
 *
 * Use of this switch requires that the module builder add a "Psionic Slayer Kill Token" 
 * (included in the PRC Items) to the designated creature. 
 *
 * Alternately, a script or item can be made that will run the script "prc_psysly_killt" 
 * on the PC. This script will set the flag that allows the target PC to take the Psionic Slayer Class.
 * Example code:  
 *				ExecuteScript("prc_psysly_killt", oPC); // Where oPC is an player charcter object
 *
 * This switch is provided to allow builders to more closely represent the Pen and Paper 
 * Illithid Slayer class, instead of the broader Open Game License "Slayer" class.
 *
 * Type: Int  
 * Values: 0 [Default] (Kill Token / Script NOT required for taking the Psionic Slayer Class)
 *		   1 (Kill Token / Script REQUIRED before the Psionic Slayer Class is available to take)
 */
const string PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN       = "PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN";


/**
 * By default the Werewolf class uses the Bioware Polymorph effect to perfrom its
 * Hybrid Form Shapchange.
 *
 * This switch allows the Werewolf class to be toggled to use the PRC Shifter 
 * Shapchange code instead. 
 *
 * Type: Int 
 * Values: 0 [Default] (Werewolf Hybrid Shapchange uses Bioware Polymorph)
 *		   1 (Werewolf Hybrid Shapchange uses PRC Shifter shape change code)
 */
const string PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPCHANGE       = "PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPCHANGE";

/**
 * Sets the max bonus for the PnP Shifter shifting systems
 *
 * Type: Int 
 * Values: any greater than 0
 */
const string PRC_PNP_SHIFTER_BONUS                            = "PRC_PNP_SHIFTER_BONUS";

/*
 * This spawns one chicken every six seconds if the PC is a commoner
 * Chickens last 1 hour per switch value (so 1 is 1 hour, 2 is 2 hours, etc)
*/
const string PRC_CHICKEN_INFESTED                 = "PRC_CHICKEN_INFESTED";

/******************************************************************************\
  *                     Template and Weapon of Legacy switches                 *
\******************************************************************************/

/**
 * Disable players selecting templates via PRC Options convo
 */
const string PRC_DISABLE_CONVO_TEMPLATE_GAIN = "PRC_DISABLE_CONVO_TEMPLATE_GAIN";


/**
 * Disable players selecting Weapons of Legacy via PRC Options convo
 */
const string PRC_DISABLE_WOL_GAIN = "PRC_DISABLE_WOL_GAIN";

/**
 * Disable having to defeat the encounter areas to gain a Weapon of Legacy
 */
const string PRC_DISABLE_WOL_AREA = "PRC_DISABLE_WOL_AREA";

/******************************************************************************\
*                               Epic Spell switches                            *
\******************************************************************************/

/**
 * If set, then the switches below will not be set to default values.
 * Should be used if any customisation is done.
 */
const string PRC_EPIC_INGORE_DEFAULTS                = "PRC_EPIC_INGORE_DEFAULTS";

/**
 * Do epic spells cost XP to cast?
 * Defaults to: TRUE
 */
const string PRC_EPIC_XP_COSTS                       = "PRC_EPIC_XP_COSTS";

/**
 * Do casters take 10 when researching?
 * Defaults to: FALSE
 */
const string PRC_EPIC_TAKE_TEN_RULE                  = "PRC_EPIC_TAKE_TEN_RULE";

/**
 * Use caster's primary ability (divine casters Wis, arcane Int/Cha as appropriate)
 * Defaults to: FALSE
 */
const string PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE  = "PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE";

/**
 * Do epic spells do backlash damage if specified in the spell?
 * Defaults to: TRUE
 */
const string PRC_EPIC_BACKLASH_DAMAGE                = "PRC_EPIC_BACKLASH_DAMAGE";

/**
 * Do school foci change the research and casting DC?
 * Defaults to: TRUE
 */
const string PRC_EPIC_FOCI_ADJUST_DC                 = "PRC_EPIC_FOCI_ADJUST_DC";

/**
 * DC multiplier for gold to research.
 * Defaults to: 9000 as per PnP
 */
const string PRC_EPIC_GOLD_MULTIPLIER                = "PRC_EPIC_GOLD_MULTIPLIER";

/**
 * Amount the researched spell's gold cost is divided by to get it's XP cost.
 * Defaults to: 25
 */
const string PRC_EPIC_XP_FRACTION                    = "PRC_EPIC_XP_FRACTION";

/**
 * Proportion of research gold is lost in a failed attempt. The full cost is
 * divided by this value to get the amount lost.
 * Defaults to: 2 (i.e half)
 */
const string PRC_EPIC_FAILURE_FRACTION_GOLD          = "PRC_EPIC_FAILURE_FRACTION_GOLD";

/**
 * Probablity out of 100 of seeds being destroyed when learnt.
 * Defaults to: 50
 */
const string PRC_EPIC_BOOK_DESTRUCTION               = "PRC_EPIC_BOOK_DESTRUCTION";

/** 100% immunity and 20h duration instead of 50% and casterlevel+10 rounds. */
const string PRC_PNP_UNIMPINGED                      = "PRC_PNP_UNIMPINGED";

/** 100% immunity and 20h duration instead of 50% and casterlevel+10 rounds. */
const string PRC_PNP_IMPENETRABILITY                 = "PRC_PNP_IMPENETRABILITY";

/** 100% immunity and 20h duration instead of 50% and casterlevel+10 rounds. */
const string PRC_PNP_DULLBLADES                      = "PRC_PNP_DULLBLADES";

/** 20h instead of rounds per level */
const string PRC_PNP_CHAMPIONS_VALOR                  = "PRC_PNP_CHAMPIONS_VALOR";

/*
 * Disable learning epic spells via the PRC OPtions Convo
 * Does not need PRC_EPIC_INGORE_DEFAULTS to be set
 */
const string PRC_EPIC_CONVO_LEARNING_DISABLE         = "PRC_EPIC_CONVO_LEARNING_DISABLE";




/******************************************************************************\
*                                General switches                              *
\******************************************************************************/


/** DO NOT SET THIS SWITCH
 * If the PRC  is in use, this will be set automatically
 * It is only here to be used by other scripts
 * Bit surplus to requirements, since this very script is part of the PRC,
 * but fo completeness sake
 */
const string MARKER_PRC                              = "Marker_PRC";

/** DO NOT SET THIS SWITCH
 * The companion sets it automatically.
 * It is only here to be used by other scripts.
 */
const string MARKER_PRC_COMPANION                    = "Marker_PRCCompanion";

/** DO NOT SET THIS SWITCH
 * If CEP 1.68 and the PRC companion/merge is in use, this will be set automatically
 * It is only here to be used by other scripts
 */
const string MARKER_CEP1                             = "Marker_CEP1";

/** DO NOT SET THIS SWITCH
 * If CEP 2 and the PRC companion/merge is in use, this will be set automatically
 * It is only here to be used by other scripts
 */
const string MARKER_CEP2                             = "Marker_CEP2";

/** DO NOT SET THIS SWITCH
 * If Project Q and the PRC companion/merge is in use, this will be set automatically
 * It is only here to be used by other scripts
 */
const string MARKER_Q                                = "Marker_Q";

/**
 * Spells cast from magic staffs use the wielder's casterlevel rather than the
 * item's if the wielder's casterlevel is higher.
 * This makes magic staffs more valuable to mages, especially at high levels.
 */
const string PRC_STAFF_CASTER_LEVEL                  = "PRC_STAFF_CASTER_LEVEL";

/**
 * [DEFUNCT]
 * A wand must be equipped before it can cast a spell
 * 
 * Any value above 0 turns off the requirement to have a wand equipped to use it
 *
 * This switch is defunct, wands must *always* be equipped to use them.
 */
const string PRC_EQUIP_WAND                          = "PRC_EQUIP_WAND";

/**
 * NPCs go through spellhooking as if they are PCs.
 */
const string PRC_NPC_HAS_PC_SPELLCASTING             = "PRC_NPC_HAS_PC_SPELLCASTING";

/**
 * Stops players banking loads of XP without leveling by using the level they
 * would have with their current XP instead of whatever their level is.
 */
const string PRC_ECL_USES_XP_NOT_HD                  = "PRC_ECL_USES_XP_NOT_HD";

/**
 * Stops demilich, i.e. Lich class has only 4 levels
 */
const string PRC_DISABLE_DEMILICH                    = "PRC_DISABLE_DEMILICH";

/**
 * Defines the possible uses of the Epic Spell Laboratory. Values as follows:
 *
 * 0 = (default) Can teleport to the Epic Spell Laboratory, merchant sells all
 *     epic spells and new wizard scrolls.
 * 1 = Can teleport to the Epic Spell Laboratory, merchant sells only the epic
 *     spells available in HotU and new wizard scrolls.
 * 2 = Can teleport to the Epic Spell Laboratory, but the merchant is unavailable.
 * 3 = Cannot teleport to the Epic Spell Laboratory.
 */
const string PRC_SPELLSLAB                           = "PRC_SPELLSLAB";

/**
 * Disables the sale of scrolls from the epic spell laboratory.
 */
const string PRC_SPELLSLAB_NOSCROLLS                 = "PRC_SPELLSLAB_NOSCROLLS";

/**
 * Makes reaching 0 in an ability score have the special effects it should have
 * according to PnP.
 *
 * @see inc_abil_damage.nss
 */
const string PRC_PNP_ABILITY_DAMAGE_EFFECTS          = "PRC_PNP_ABILITY_DAMAGE_EFFECTS";

/**
 * Turns on the included version of supply based rest by demitious
 * See inc_sbr_readme.nss for details
 */
const string PRC_SUPPLY_BASED_REST                   = "PRC_SUPPLY_BASED_REST";

/**
 * Charaters only gain a number of hitpoints equal to their level from resting.
 */
const string PRC_PNP_REST_HEALING                    = "PRC_PNP_REST_HEALING";

/**
 * Resting causes game time to advance.
 * See inc_time.nss for details
 */
const string PRC_PNP_REST_TIME                       = "PRC_PNP_REST_TIME";

/**
 * Limits the amount of times that a player can rest
 * If this is set to -1, it's one rest per 24 hours
 * If this is set to -2, it's one rest per 16 hours (24 hours minus the 8 hours spent sleeping/learning spells in PnP that is resting)
 * If this is set to 1+, it's 1 (or 2, or 3) hours per level between rests
 * If this is set to 0, it's off
 */
const string PRC_PNP_REST_LIMIT                      = "PRC_PNP_REST_LIMIT";

/**
 * Wizards use PnP spellschools instead of Bioware's
 * They must be generalists, but there is no way to enforce that
 * If letoscript is enabled, then all wizards will be set to PnP Spellschool as their school
 * plus the ConvoCC will set it if this switch is on
 */
const string PRC_PNP_SPELL_SCHOOLS                   = "PRC_PNP_SPELL_SCHOOLS";

/**
 * Players have a variable tracking how far ahead of the module clock they are
 * and when all players are ahead, the module clock advances to catch up.
 * This includes 8 hours when resting and time spent crafting
 *
 * See inc_time for implementation
 *
 */
const string PRC_PLAYER_TIME                         = "PRC_PLAYER_TIME";

/**
 * You must have at least 1 hand free to cast spells with somatic components.
 * This means at most a small shield in the off hand and
 * no dual wielded weapons, though ranged and doublehanded are OK.
 */
const string PRC_PNP_SOMATIC_COMPOMENTS              = "PRC_PNP_SOMATIC_COMPOMENTS";

/**
 * You must have at least 1 hand free to use items that you do not have equipped.
 * This means at most a small shield in the off hand and
 * no dual weilded weapons, though ranged and doublehanded are OK.
 */
const string PRC_PNP_SOMATIC_ITEMS                   = "PRC_PNP_SOMATIC_ITEMS";

/**
 * Second or subsequent summons dont destroy the first.
 * Can cause lag with high numbers of summons and/or tight spaces
 */
const string PRC_MULTISUMMON                         = "PRC_MULTISUMMON";

/**
 * Summons last for a number of rounds equal to caster level, rather than 24h or other timings
 */
const string PRC_SUMMON_ROUND_PER_LEVEL              = "PRC_SUMMON_ROUND_PER_LEVEL";

/**
 * Enable Bioware version of Plant Domain Power (turn vermin) - makes this
 * domain power a little less useless in the OC.
 */
const string PRC_BIOWARE_PLANT_DOMAIN_POWER          = "PRC_BIOWARE_PLANT_DOMAIN_POWER";

/**
 * Enable Bioware version of Animal Domain Power (better summons)
 */
const string PRC_BIOWARE_ANIMAL_DOMAIN_POWER          = "PRC_BIOWARE_ANIMAL_DOMAIN_POWER";

/**
 * Animal companions follow PnP rules rather than Bioware's.
 */
const string PRC_PNP_ANIMAL_COMPANIONS               = "PRC_PNP_ANIMAL_COMPANIONS";

/**
 * Familiars follow PnP rules rather than Bioware's.
 * This makes them a lot weaker and less suited for combat.
 * Includes bonded summoner familiars.
 */
const string PRC_PNP_FAMILIARS                       = "PRC_PNP_FAMILIARS";

/**
 * This disables the ability to heal Bioware familiars by feading them
 * through the conversation
 */
const string PRC_PNP_FAMILIAR_FEEDING                = "PRC_PNP_FAMILIAR_FEEDING";

/**
 * Use PRC henchmen-familiars instead of BioWare's - this will allow
 * new classes to have familiars, but summoned creatures will no longer 
 * be 'true' familiars (ie. can't possess PRC familiar)
 */
const string PRC_FAMILIARS                           = "PRC_FAMILIARS";

/**
 * Enable spell sharing for all familiars and animal companions
 * By default it's only enabled for pnp and bonded familiars, paladin
 * mounts and healer celestial companions.
 */
const string PRC_ENABLE_SPELL_SHARING                 = "PRC_ENABLE_SPELL_SHARING";

/**
 * This disables the 2 free spells wizards get at levelup
 * The GUI still shows, but it does nothing or rather its effects are undone afterwards
 * It requires letoscript to work.
 * not implemented yet
 */
const string PRC_NO_FREE_WIZ_SPELLS                        = "PRC_NO_FREE_WIZ_SPELLS";


const string PRC_WITCH_DISABLE_SPELL_LEARN                 = "PRC_WITCH_DISABLE_SPELL_LEARN";

/**
 * Set to 1, it automatically applies Ambidexterity as a bonus feat
 * if you have Two Weapon Fighting
 *
 * Default: NWN standard
 */
const string PRC_35_TWO_WEAPON_FIGHTING                     = "PRC_35_TWO_WEAPON_FIGHTING";

/**
 * Set to 1, it ignores the Disarmable flag on NPCs
 *
 * Default: NWN standard
 */
const string PRC_PNP_DISARM                                 = "PRC_PNP_DISARM";

/**
 * Sets the behaviour of the PRC Power Attack. Set this to either
 * PRC_POWER_ATTACK_DISABLED or PRC_POWER_ATTACK_FULL_PNP if you give
 * it a value.
 *
 * Default: One cannot use a higher power attack setting than one could using
 *          Bioware Power Attack. ie, if one possessed PA, but not IPA, one
 *          can only use PA up to 5. And up to 10 with IPA.
 *
 * @see PRC_POWER_ATTACK_DISABLED
 * @see PRC_POWER_ATTACK_FULL_PNP
 */
const string PRC_POWER_ATTACK                        = "PRC_POWER_ATTACK";

/**
 * A possible value of PRC_POWER_ATTACK.
 * If this is used, PRC Power Attack is completely disabled. The feats will
 * not be granted to players and even if they somehow gain access to the feats,
 * they will have no effect.
 *
 * @see PRC_POWER_ATTACK
 */
const int PRC_POWER_ATTACK_DISABLED = -1;

/**
 * A possible value of PRC_POWER_ATTACK.
 * If this is used, PRC Power Attack behaves as the Pen and Paper version.
 * This means ability to sacrifice any amount of attack bonus, up to one's
 * BAB. The existence of Bioware IPA is ignored as a limiting factor, only
 * normal Power Attack is required.
 *
 * @see PRC_POWER_ATTACK
 */
const int PRC_POWER_ATTACK_FULL_PNP = 1;

/**
 * Sets the behaviour of the PRC Power Attack.
 * If this is set, the Bioware Power Attack modes are included in the
 * calculation against the characters BAB limit.
 * Default: PRC Power Attack ignores whether BW Power Attack is active or not,
 *          which may result in the character paying a total amount of AB
 *          greater than their BAB.
 */
const string PRC_POWER_ATTACK_STACK_WITH_BW          = "PRC_POWER_ATTACK_STACK_WITH_BW";


/*
 * Disabling specific feat and/or skills
 * Each of these has 2 parts. One part is a variable defining the size of the list
 * The other part is the list itself. The numbers are the row numbers in feat.2da or skills.2da
 * or spells.2da.
 * For example, if you want to disable Knockdown and Improved Knockdown you would set
 * the variables as follows:
 * PRC_DISABLE_FEAT_COUNT = 2
 * PRC_DISABLE_FEAT_1     = 23
 * PRC_DISABLE_FEAT_2     = 17
 */
const string PRC_DISABLE_FEAT_COUNT                  = "PRC_DISABLE_FEAT_COUNT";
const string PRC_DISABLE_FEAT_                       = "PRC_DISABLE_FEAT_";
const string PRC_DISABLE_SKILL_COUNT                 = "PRC_DISABLE_SKILL_COUNT";
const string PRC_DISABLE_SKILL_                      = "PRC_DISABLE_SKILL_";

//WARNING! WILL DO BAD THINGS TO SPONTANEOUS CASTERS AFFECTED
const string PRC_DISABLE_SPELL_COUNT                 = "PRC_DISABLE_SPELL_COUNT";
const string PRC_DISABLE_SPELL_                      = "PRC_DISABLE_SPELL_";

/*
 * Setting this will stop the GUI automatically appearing when a player is petrified on
 * hardcore
 * You can use a script named "prc_pw_petrific" which will always be run at petrification
 * (regardless of this switch) on hardcore to pop up the GUI as you want it, rather than
 * being forced to use biowares
*/
const string PRC_NO_PETRIFY_GUI                      = "PRC_NO_PETRIFY_GUI";


/*
 * Set this to remove the switch changing convo feat.
 * This should be set for PWs to avoid players screwing around with switches
 * A value of zero allows anyone to change switches
 * A value of 1 allows only DMs to change switches
 * Any other value prohibits everyone from changing switches
 */

const string PRC_DISABLE_SWITCH_CHANGING_CONVO       = "PRC_DISABLE_SWITCH_CHANGING_CONVO";

/*
 * Set this to remove checks to enforce domains
 * e.g. Fire Gensai dont have to take the Fire domain, etc
 */

const string PRC_DISABLE_DOMAIN_ENFORCEMENT          = "PRC_DISABLE_DOMAIN_ENFORCEMENT";

/*
 * Set this to remove replace bioware HolyAvenger itemproperties
 * with PnP HolyAvenger itemprperties instead
 * (for paladins, +5 +2d6 divine vs evil, castspel:dispel magic @ casterlevel = paladinlevels)
 * (for non paladins, +2)
 */

const string PRC_PNP_HOLY_AVENGER_IPROP              = "PRC_PNP_HOLY_AVENGER_IPROP";

/* Set this to enable the permanent death and XP cost functionality
 * of Necrotic Termination spell.
 */

 const string PRC_NEC_TERM_PERMADEATH                = "PRC_NEC_TERM_PERMADEATH" ;

 /*
  * Set this to enable alignment changes for the casting of spells with an alignment descriptor
  */
const string PRC_SPELL_ALIGNMENT_SHIFT              = "PRC_SPELL_ALIGNMENT_SHIFT";

 /*
  * Enforces restrictions for casting spells with descriptors of opposed alignments
  * Possible values:
  * 0 - off
  * 1 - all classes can cast, but casting causes alignment shift
  * 2 - casting causes alingment shift, some classes can't cast (cleric, favoured soul, etc)
  * 3 - casting is not allowed
  */
const string PRC_SPELL_ALIGNMENT_RESTRICT            = "PRC_SPELL_ALIGNMENT_RESTRICT";

 /*
  * Set this to give a number of Free cohorts as with leadership
  * This can be used to simulate a party of players
  * Unlike normal cohorts, those granted through this switch
  * do not have the -2 level lag.
  */
 const string PRC_BONUS_COHORTS                      = "PRC_BONUS_COHORTS";

 /*
  * Disable the use of custom cohorts
  */
 const string PRC_DISABLE_CUSTOM_COHORTS                      = "PRC_DISABLE_CUSTOM_COHORTS";

 /*
  * Disable the use of standard cohorts
  */
 const string PRC_DISABLE_STANDARD_COHORTS                      = "PRC_DISABLE_STANDARD_COHORTS";

 /*
  * Disable registration of custom cohorts
  */
 const string PRC_DISABLE_REGISTER_COHORTS                      = "PRC_DISABLE_REGISTER_COHORTS";
 
  /*
   * Disable cohorts starting with gear
   */
 const string PRC_DISABLE_COHORT_STARTING_GEAR                  = "PRC_DISABLE_COHORT_STARTING_GEAR";

 /*
  * Gives all slings equiped Mighty +20 for free
  * Simulates PnP rules where you can add strength to damage
  */
 const string PRC_PNP_SLINGS                      = "PRC_PNP_SLINGS";

 /*
  * This is a local variable set on NPCs that is converted to real XP
  * in the OnSpawn event. Used for epic spells and other XP-burning stuff
  */
 const string PRC_NPC_XP                             = "PRC_NPC_XP";

 /*
  * Applys speed increase/decrease effects
  * Simulates PnP rules where different races have different speeds
  */
 const string PRC_PNP_RACIAL_SPEED                      = "PRC_PNP_RACIAL_SPEED";

 /*
  * Applys speed increase/decrease effects
  * Simulates PnP rules where different armors have different speeds
  * Medium armor is a 25% speed reduction, Heavy is a 33% reduction
  */
 const string PRC_PNP_ARMOR_SPEED                      = "PRC_PNP_ARMOR_SPEED";
 
 /*
   * Applies a 99% speed boost when out of combat
   * Warning that it will likely cause PCs to be overly speedy when combat starts
   * Potential problem causer
   */
 const string PRC_FAST_TRAVEL_SPEED                      = "PRC_FAST_TRAVEL_SPEED";
 
  /*
   * Applys a Discipline bonus equal to BAB to all characters if turned on
   * Bonus only applies to characters with 0 ranks in Discipline
   */
 const string PRC_PNP_KNOCKDOWN                      = "PRC_PNP_KNOCKDOWN"; 

 /*
  * by Bioware rules, PCs have approximatly a 7th faster movement than NPCs
  * so they can outrun them quite easily.
  * This switch removes that so they are on even footings.
  */
 const string PRC_REMOVE_PLAYER_SPEED                      = "PRC_REMOVE_PLAYER_SPEED";

 /*
  * Enforces racial appearance as defined in racialtypes.2da
  */
 const string PRC_ENFORCE_RACIAL_APPEARANCE                = "PRC_ENFORCE_RACIAL_APPEARANCE";

 /*
  * When set it will restore characters true appearance on module enter.
  * Created to counter BioWare 'horse script' appearance change. Might cause bugs with some
  * custom clothing haks.
  * If not enabled - players can restore appearance by using 'End PnP Polymorph' feat
  */
 const string PRC_ON_ENTER_RESTORE_APPEARANCE              = "PRC_ON_ENTER_RESTORE_APPEARANCE";

 /*
  * by default, on aquire script for races only runs for NPCs if they have a PC as a master
  * This runs it for all NPCs, note this will take significantly more CPU time.
  */
 const string PRC_NPC_FORCE_RACE_ACQUIRE                      = "PRC_NPC_FORCE_RACE_ACQUIRE";

 /*
  * by default, if you acquire a pre-1.68 cloak it will be randomly recolored so that it
  * doenst look beiger than beige. This disables that if you realy want beige cloaks for some reason.
  */
 const string PRC_DYNAMIC_CLOAK_AUTOCOLOUR_DISABLE                      = "PRC_DYNAMIC_CLOAK_AUTOCOLOUR_DISABLE";

 /*
  * this switch will disable automatic update of 'use limitation by class' properties for magic scrolls and wands.
  * By default a character of given class can use all wands/scrolls with the spells that are on her class spell-list.
  * NOTES:
  * - scrolls/wands with no limitations are never updated
  * - can be disabled by setting "ip_lock" local int to 1 on the scroll/wand
  */
 const string PRC_SCROLL_AUTOUPDATE_RESTR_DISABLE                      = "PRC_SCROLL_AUTOUPDATE_RESTR_DISABLE";

 /*
  * disable all the appearance-changing options on the PRC OPtions convo
  */
 const string PRC_APPEARNCE_CHANGE_DISABLE                      = "PRC_APPEARNCE_CHANGE_DISABLE";




/******************************************************************************\
*                      Death/Bleeding system                                   *
\******************************************************************************/
 /*
  * Turns on the PRC PnP Bleeding & Death system
  * see prc_inc_death for details
  * NOTE: This will only work if the module has no other scripts for
  * OnPlayerDying and OnPlayerDeath events. Otherwise those will interfere with
  * this system
  */
const string PRC_PNP_DEATH_ENABLE                           = "PRC_PNP_DEATH_ENABLE";

 /*
  *  if FALSE, dont bleed just die
  *  By PnP this would be 1 round, or 6 seconds
  */
const string PRC_DEATH_OR_BLEED     						= "PRC_DEATH_OR_BLEED";

/*
 * Damage when bleeding
 * By PnP, this would be 1
 */
const string PRC_DEATH_DAMAGE_FROM_BLEEDING        = "PRC_DEATH_DAMAGE_FROM_BLEEDING";

/*
 * Damage when stable
 * By PnP, this would be 0
 */
const string PRC_DEATH_DAMAGE_FROM_STABLE          = "PRC_DEATH_DAMAGE_FROM_STABLE";

/*
 * Healing when Stable
 * By PnP, this would be 0
 */
const string PRC_DEATH_HEAL_FROM_STABLE            = "PRC_DEATH_HEAL_FROM_STABLE";

/*
 * % chance to improve when bleeding
 * By PnP, this would be 10
 */
const string PRC_DEATH_BLEED_TO_STABLE_CHANCE      = "PRC_DEATH_BLEED_TO_STABLE_CHANCE";

/*
 * % chance to resume bleeding when stable
 * By PnP, this would be 0
 */
const string PRC_DEATH_STABLE_TO_BLEED_CHANCE      = "PRC_DEATH_STABLE_TO_BLEED_CHANCE";

/*
 * % chance to improve when stable
 * By PnP, this would be 10
 */
const string PRC_DEATH_STABLE_TO_DISABLED_CHANCE   = "PRC_DEATH_STABLE_TO_DISABLED_CHANCE";


/******************************************************************************\
*                               ACP switches                              *
\******************************************************************************/
/*
 * This is a set of settings for Ragnaroks Alternate Combat animations Pack (ACP)
 * Main hak:
 * http://nwvault.ign.com/View.php?view=hakpaks.Detail&id=5895
 * CEP heads:
 * http://nwvault.ign.com/View.php?view=hakpaks.Detail&id=5934
 * CEP robes:
 * http://nwvault.ign.com/View.php?view=hakpaks.Detail&id=5950
 * (credit to USAgreco66kg for those CEP files)
 *
 * Note on haks: You should NOT add the acp_2da hak if you have the PRC installed
 * Plus, once you press the OK button to add the ACP haks, make sure
 * you press cancel as soon as it appears. Otherwise, the toolset will crash
 * as it tries to compile the PRC scripts.
 *
 * If you are using CEP2, then you only need ragnaroks main package. Compatible robes
 * and heads are included within CEP2.
 *
 * As of NWN v1.67 there is no need to press the cancel button as the toolset no longer
 * attempts to compile scripts in haks.
 *
 */

/*
 * Set this to give players radial feats to change combat animations
 */
const string PRC_ACP_MANUAL                          = "PRC_ACP_MANUAL";

/*
 * Set this so that players will change combat animations automatically
 * based on weapons equiped and class
 */
const string PRC_ACP_AUTOMATIC                       = "PRC_ACP_AUTOMATIC";

/*
 * Set this so that NPCs will change combat animations automatically
 * based on weapons equiped and class
 * This can either be set on the module for a global setting
 * or set on individual NPCs for specific individuals
 */
const string PRC_ACP_NPC_AUTOMATIC                   = "PRC_ACP_NPC_AUTOMATIC";

/*
 * Set this for a number of minutes delay betwen changing animations
 * This is useful to stop people spamming the server with changes
 * If not set, it defaults to 90 seconds. To set to zero, set var to -1
 */
const string PRC_ACP_DELAY                           = "PRC_ACP_DELAY";


/******************************************************************************\
*                               File End switches                              *
\******************************************************************************/

/**
 * If this is set it will disable the defaults and the module builder must set
 * the values manually.
 * Otherwise it will set the automatically, and will take the PRC companion
 * into account, including CEP if its the CEP/PRC companion.
 */
const string FILE_END_MANUAL                         = "FILE_END_MANUAL";

/** Last line of classes.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_CLASSES                        = "FILE_END_CLASSES";

/** Last line of racialtypes.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_RACIALTYPES                    = "FILE_END_RACIALTYPES";

/** Last line of gender.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_GENDER                         = "FILE_END_GENDER";

/** Last line of portraits.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_PORTRAITS                      = "FILE_END_PORTRAITS";

/** Last line of skills.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_SKILLS                         = "FILE_END_SKILLS";

/** Defines the line after which none of the cls_feat_*.2da have entries.
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_CLASS_FEAT                     = "FILE_END_CLASS_FEAT";

/** Defines the line after which none of the cls_psipw_*.2da have entries.
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_CLASS_POWER                    = "FILE_END_CLASS_POWER";

/** Defines the line after which none of the cls_spgn_*.2da have entries.
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
 const string FILE_END_CLASS_SPELLBOOK               = "FILE_END_CLASS_SPELLBOOK";

/** Last line of feat.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_FEAT                           = "FILE_END_FEAT";

/** Last line of hen_familiar.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_FAMILIAR                       = "FILE_END_FAMILIAR";

/** Last line of hen_companion.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_ANIMALCOMP                     = "FILE_END_ANIMALCOMP";

/** Last line of domains.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_DOMAINS                        = "FILE_END_DOMAINS";

/** Last line of soundset.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_SOUNDSET                       = "FILE_END_SOUNDSET";

/** Last line of spells.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_SPELLS                         = "FILE_END_SPELLS";

/** Last line of appearance.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_APPEARANCE                     = "FILE_END_APPEARANCE";

/** Last line of wingmodel.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_WINGS                          = "FILE_END_WINGS";

/** Last line of tailmodel.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_TAILS                          = "FILE_END_TAILS";

/** Last line of baseitems.2da
 * This will be set automatically to a default unless FILE_END_MANUAL is turned on */
const string FILE_END_BASEITEMS                          = "FILE_END_BASEITEMS";



/******************************************************************************\
*                            Poison system switches                            *
\******************************************************************************/

/**
 * If this is set, uses the last three characters from the item's tag
 * instead of the local variable 'pois_idx' to define the poison the item
 * represents. The value is used as an index to poison.2da.
 */
const string PRC_USE_TAGBASED_INDEX_FOR_POISON       = "USE_TAGBASED_INDEX_FOR_POISON";

/**
 * Number of times the poisoned item works. Or if PRC_USES_PER_ITEM_POISON_DIE
 * is set, the number of dice rolled to determine it. Should be at least 1 if
 * set.
 * Default: 1
 */
const string PRC_USES_PER_ITEM_POISON_COUNT          = "PRC_USES_PER_ITEM_POISON_COUNT";

/**
 * Size of dice used to determine number of times the poisoned item works. Value
 * should be at least 2.
 * If value is less than 2, the die roll is skipped.
 * Default: No dice are rolled.
 */
const string PRC_USES_PER_ITEM_POISON_DIE            = "USES_PER_ITEM_POISON_DIE";

/**
 * If this is nonzero, only weapons that do slashing or piercing damage are allowed
 * to be poisoned.
 * Default: All weapons can be poisoned.
 */
const string PRC_ALLOW_ONLY_SHARP_WEAPONS            = "PRC_ALLOW_ONLY_SHARP_WEAPONS";

/**
 * If this is nonzero, inhaled and ingest poisons may be placed on weapons in
 * addition to contact and injury poisons.
 * Default: Only contact and injury poisons are allowed on weapons.
 */
const string PRC_ALLOW_ALL_POISONS_ON_WEAPONS        = "PRC_ALLOW_ALL_POISONS_ON_WEAPONS";

/**
 * If this is nonzero, a DEX check is rolled against Handle_DC in the poison's
 * column in poison.2da.
 * Possessing the Use Poison feat will always pass this check.
 * Default: A static 5% failure chance is used, as per the DMG.
 */
const string PRC_DEXBASED_WEAPON_POISONING_FAILURE_CHANCE = "PRC_DEXBASED_WEAPON_POISONING_FAILURE_CHANCE";

/**
 * Number of hits the poison will function on the weapon. Or if
 * PRC_USES_PER_WEAPON_POISON_DIE is set, the number of dice rolled.
 * If this is set, the value should be >= 1.
 * Default: 1
 */
const string PRC_USES_PER_WEAPON_POISON_COUNT        = "PRC_USES_PER_WEAPON_POISON_COUNT";

/**
 * Size of the die rolled when determining the amount of hits the poison will
 * work on. If this is set, the value should be at least 2.
 * Default: Dice aren't rolled.
 */
const string PRC_USES_PER_WEAPON_POISON_DIE          = "PRC_USES_PER_WEAPON_POISON_DIE";

/**
 * This is the name of the script to be run when someone attempts to poison food to
 * check if the targeted item is food. The default script returns FALSE for everything,
 * so you must define your own to have this functionality.
 *
 * This switch has string values instead of integers.
 *
 * Default: poison_is_food <- an example script, just returns false
 *
 * @see poison_is_food
 */
const string PRC_POISON_IS_FOOD_SCRIPT_NAME          = "PRC_POISON_IS_FOOD_SCRIPT_NAME";

/**
 * This switch determines whether a creature equipping a poisoned item is assumed to be
 * acting smartly in that it attempts to clean the item first. If it's not set, the
 * creature just directly equips the item and gets poisoned.
 *
 * Default: Off, the creature gets poisoned without any checks
 *
 * @see poison_onequip
 */
const string PRC_POISON_ALLOW_CLEAN_IN_EQUIP         = "PRC_POISON_ALLOW_CLEAN_IN_EQUIP";

/**
 * 
 * Default: crafting requires only gold and xp
 */
const string PRC_CRAFT_POISON_USE_INGREDIENST        = "PRC_CRAFT_POISON_USE_INGREDIENST";

/******************************************************************************\
*                             PRGT system switches                             *
\******************************************************************************/

//these three are strings not switches
const string PRC_PRGT_XP_SCRIPT_TRIGGERED            = "PRC_PRGT_XP_SCRIPT_TRIGGERED";
const string PRC_PRGT_XP_SCRIPT_DISARMED             = "PRC_PRGT_XP_SCRIPT_DISARMED";
const string PRC_PRGT_XP_SCRIPT_RECOVERED            = "PRC_PRGT_XP_SCRIPT_RECOVERED";

/**
 * @TODO: Write description.
 */
const string PRC_PRGT_XP_AWARD_FOR_TRIGGERED         = "PRC_PRGT_XP_AWARD_FOR_TRIGGERED";

/**
 * @TODO: Write description.
 */
const string PRC_PRGT_XP_AWARD_FOR_RECOVERED         = "PRC_PRGT_XP_AWARD_FOR_RECOVERED";

/**
 * @TODO: Write description.
 */
const string PRC_PRGT_XP_AWARD_FOR_DISARMED          = "PRC_PRGT_XP_AWARD_FOR_DISARMED";



/******************************************************************************\
*                               Psionics switches                              *
\******************************************************************************/

/**
 * If this is set, use ac_appearances.2da to determine an Astral Construct's
 * appearance instead of the values hardcoded into the script.
 */
const string PRC_PSI_ASTRAL_CONSTRUCT_USE_2DA        = "ASTRAL_CONSTRUCT_USE_2DA";

/**
 * If this is set, Astral Construct's duration will be multiplied by given
 * number. Examples:
 * 10  - duration is equal to 1 minute per manifester level
 * 600 - duration is equal to 1 hour per manifester level
 */
const string PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD        = "PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD";


/**
 * If this is set, The Astral Seed power will attempt to use the provided string as
 * the ResRef to create the Astral Seed object instead of the of the phylactery 
 * ResRef("x2_plc_phylact").
 * May be used by builders to create an object that CAN be destroyed, or has other traits,
 * as desired. 
 * Type: String
 * Values: "" [Default] (Blank, or not set: Use default phylactery ResRef for Astral Seed)
 *         STRING (Entered String will be used as the ResRef of created Astral Seed object)
 */
const string PRC_PSI_ASTRAL_SEED_RESREF        = "PRC_PSI_ASTRAL_SEED_RESREF";

/**
 * By default the Astral Seed power respawns the player, and then makes them immobile for 
 * 24-game-hours.
 * If this switch is set, it will adjust the imobility time period; shortening it, lengthing it, or 
 * effectively eliminating it.
 * Type: Int
 * Values: 0 [Default] (Not set: Use default 24 hour duration)
 *         -1          (Any negative value will result in a fixed duratoion of 2 seconds, which effectively eliminates the wait period)
 *         1           (Any potitive value: multiply duration by the value provided and then divide result by 1000. 
 *                      Values less than 1000 will shorten the duration, values higher than 1000 will lengthen it.)
 */
const string PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000        = "PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000";

/**
 * By default, when the Astral Seed power is activated upon death, the user loses one level's
 * worth of XP. This may not be compatabile with all death and respawn systems.
 * If this flag is set, the XP loss is completely eliminated. The standard PRC event hook script
 * of "prc_pw_astralseed" may be used to script any additional effects to occure upon Astral Seed
 * respawning, including scripting specific XP loss amount.
 * Type: Int 
 * Values: 0 [Default] (Not set: lose 1 level worth of XP upon Astral Seed respawn)
 *         1           (Any potitive value: Remove all XP loss from Astral Seed respawn)
 */
const string PRC_PSI_ASTRAL_SEED_RESPAWN_NO_LEVEL_LOSS        = "PRC_PSI_ASTRAL_SEED_RESPAWN_NO_LEVEL_LOSS";


/**
 * Setting this switch active makes Psychic Reformation only allow one to
 * reselect psionic powers instead of fully rebuilding their character.
 *
 * Possible values:
 * 0              = Off, Psychic Reformation behaves as specified in the power
 *                  description. That is, the target is deleveled by a certain
 *                  amount and then releveled back to where they were.
 * Nonzero, not 2 = On, Psychic Reformation only nulls a selected number of
 *                  the target's selected powers and allows reselection.
 * 2              = On, and the XP cost is reduced to 25 per level reformed.
 */
const string PRC_PSI_PSYCHIC_REFORMATION_NERF        = "PRC_PSI_PSYCHIC_REFORMATION_NERF";

/**
 * Determines how Rapid Metabolism works.
 * When set, heals the feat possessor by their Hit Dice + Constitution modifier
 * every 24h.
 * Default: Heals the feat possessor by 1 + their Constitution modifier every
 *          turn (60s).
 */
const string PRC_PNP_RAPID_METABOLISM                = "PRC_PNP_RAPID_METABOLISM";

/**
 * Determines how the epic feat Improved Metapsionics works.
 * When set, the total cost of metapsionics applied to power being manifested is
 * summed and Improved Metapsionics cost reduction is applied to the sum.
 * Default: Improved Metapsionics cost reduction is applied separately to each
 *          metapsionic used with power being manifested.
 */
const string PRC_PSI_IMP_METAPSIONICS_USE_SUM        = "PRC_PSI_IMP_METAPSIONICS_USE_SUM";


/**
 * A switch a player can personally toggle. If this is set, their augmentation level
 * is considered to be the amount of PP they are willing to pay for augmentation.
 * Default: A player's augmentation level is the number of times to augment the power.
 */
const string PRC_PLAYER_SWITCH_AUGMENT_IS_PP         = "PRC_PLAYER_SWITCH_AUGMENT_IS_PP";

/**
 * A switch a player can personally toggle. If set, the metapsionics code attempts
 * to avoid exceeding the manifester level cap by skipping application of
 * such active metapsionic feats where the cost would cause manifester level cap to
 * be exceeded. Quicken Power is exempt from ever being skipped if it is active.
 */
const string PRC_PLAYER_SWITCH_AUTOMETAPSI           = "PRC_PLAYER_SWITCH_AUTOMETAPSI";

/******************************************************************************\
*                               PnP Polymorphing switches                      *
\******************************************************************************/

/**
 * These switches are used to limit the targets that can be used with the
 * PRC Polymorph / Shifting mechanics.
 *
 * Remember, mimicing uses the targetting instance, whereas
 * shifting into that form again later creats a new instance from
 * the resref. Thus if you modify creatures after they have been
 * placed from the palette, odd things may happen.
 *
 * Also if you give any monster the "Archetypal Form" feat, the players
 * will not be able to take that monsters shape.
 */

/**
 * If set, the system compares user HD to target CR.
 * Default: user HD is compared to target HD
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_USECR                     = "PNP_SHFT_USECR";

/**
 * If set, the system does not allow target creatures of size Huge or greater.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_S_HUGE                    = "PNP_SHFT_S_HUGE";

/**
 * If set, the system does not allow target creatures of size Large.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_S_LARGE                   = "PNP_SHFT_S_LARGE";

/**
 * If set, the system does not allow target creatures of size Medium.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_S_MEDIUM                  = "PNP_SHFT_S_MEDIUM";

/**
 * If set, the system does not allow target creatures of size Small.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_S_SMALL                   = "PNP_SHFT_S_SMALL";

/**
 * If set, the system does not allow target creatures of size Tiny or smaller.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_S_TINY                    = "PNP_SHFT_S_TINY";

/**
 * If set, the system does not allow target creatures of type Outsider.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_OUTSIDER                = "PNP_SHFT_F_OUTSIDER";

/**
 * If set, the system does not allow target creatures of type Elemental.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_ELEMENTAL               = "PNP_SHFT_F_ELEMENTAL";

/**
 * If set, the system does not allow target creatures of type Construct.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_CONSTRUCT               = "PNP_SHFT_F_CONSTRUCT";

/**
 * If set, the system does not allow target creatures of type Undead.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_UNDEAD                  = "PNP_SHFT_F_UNDEAD";

/**
 * If set, the system does not allow target creatures of type Dragon.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_DRAGON                  = "PNP_SHFT_F_DRAGON";

/**
 * If set, the system does not allow target creatures of type Aberration.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_ABERRATION              = "PNP_SHFT_F_ABERRATION";

/**
 * If set, the system does not allow target creatures of type Ooze.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_OOZE                    = "PNP_SHFT_F_OOZE";

/**
 * If set, the system does not allow target creatures of type Magical Beast.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_MAGICALBEAST            = "PNP_SHFT_F_MAGICALBEAST";

/**
 * If set, the system does not allow target creatures of type Giant.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_GIANT                   = "PNP_SHFT_F_GIANT";

/**
 * If set, the system does not allow target creatures of type Vermin.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_VERMIN                  = "PNP_SHFT_F_VERMIN";

/**
 * If set, the system does not allow target creatures of type Beast.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_BEAST                   = "PNP_SHFT_F_BEAST";

/**
 * If set, the system does not allow target creatures of type Animal.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_ANIMAL                  = "PNP_SHFT_F_ANIMAL";

/**
 * If set, the system does not allow target creatures of type Monstrous Humanoid.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_MONSTROUSHUMANOID       = "PNP_SHFT_F_MONSTROUSHUMANOID";

/**
 * If set, the system does not allow target creatures of type Humanoid.
 * Values: 0 is not set, anything else is set.
 */
const string PNP_SHFT_F_HUMANOID                = "PNP_SHFT_F_HUMANOID";

/******************************************************************************\
*                            Combat System Switches                            *
\******************************************************************************/

/**
 * ebonfowl: when TRUE critical hits will not multiply elemental melee damage
 * from effects in scripted combat
 */
const string PRC_PNP_ELEMENTAL_DAMAGE                = "PRC_PNP_ELEMENTAL_DAMAGE";

/**
 * TODO: Write description.
 */
const string PRC_SPELL_SNEAK_DISABLE                 = "PRC_SPELL_SNEAK_DISABLE";

/**
 * Use 3.5 edition unarmed damage progression instead of 3.0 edition.
 * Default: Use 3.0 unarmed damage progression.
 */
const string PRC_3_5e_FIST_DAMAGE                    = "PRC_3_5e_FIST_DAMAGE";

/**
 * Use a Brawler character's size as a part of determining their unarmed
 * damage.
 * Default: A Brawler's size is ignored.
 */
const string PRC_BRAWLER_SIZE                        = "PRC_BRAWLER_SIZE";

/**
 * Use appearance size rather than racial-determined size
 * This also means it includes bonuses from classes and spells
 */
const string PRC_APPEARANCE_SIZE                        = "PRC_APPEARANCE_SIZE";

/**
  * This reenables the Bioware Monk attack progression, with up to 6 monk attacks per round
*/
const string PRC_BIOWARE_MONK_ATTACKS                  ="PRC_BIOWARE_MONK_ATTACKS";

/**
 * This switch (if on) takes care that only light weapons (one size smaller than the creature size)
 * are finessable, meaning that small races can only finesse tiny weapons
 */
const string PRC_SMALL_CREATURE_FINESSE                  ="PRC_SMALL_CREATURE_FINESSE";

/**
 * turns on combat debugging for scripted combat,
 * similar to Bioware's dm_enablecombatdebugging 1
 * will show a lot of info about the attack and damage rolls
 */
const string PRC_COMBAT_DEBUG                        = "PRC_COMBAT_DEBUG";

/**
 * switches on Biowares Divine Power version (bonus atacks come at full AB)
 */
const string PRC_BIOWARE_DIVINE_POWER                = "PRC_BIOWARE_DIVINE_POWER";

/**
 * if True, allows us to select a better target in prc combat functions
 * by switching from one target to another (closer) target
 * only relevant for melee combat (we never switch targets on ranged combat)
 */
const string PRC_ALLOW_SWITCH_OF_TARGET                = "PRC_ALLOW_SWITCH_OF_TARGET";

/**
 * disable coup the grace on first attack in round
 */
const string PRC_DISABLE_COUP_DE_GRACE                = "PRC_DISABLE_COUP_DE_GRACE";

/**
 * limit to the (non-dice) damage of a flame weapon or darkfire spell
 * if the switch is not set or zero, non-dice damage of flame weapon or darkfire is limited to 10
 * it is recommended not to set these switches higher than 10
 */
const string PRC_FLAME_WEAPON_DAMAGE_MAX             = "PRC_FLAME_WEAPON_DAMAGE_MAX";
const string PRC_DARKFIRE_DAMAGE_MAX                 = "PRC_DARKFIRE_DAMAGE_MAX";

/**
 * ebonfowl: when this switch is not FALSE, the attack bonus is capped as it is in-game, if FALSE,
 * attack bonus is uncapped
 */
const string PRC_CAPPED_ATTACK_BONUS                 = "PRC_CAPPED_ATTACK_BONUS";


/******************************************************************************\
*                           Craft System Switches                           *
\******************************************************************************/

/*
 * Completely disable the PRC Crafting System
 */
const string PRC_DISABLE_CRAFT                       = "PRC_DISABLE_CRAFT";

/*
 * Disables epic crafting
 */
const string PRC_DISABLE_CRAFT_EPIC                  = "PRC_DISABLE_CRAFT_EPIC";

/*
 * Set this on an area to disable crafting within that area
 * Best used in conjunction with the time elapsing and no-rest
 * This applies to both PRC Crafting and biowares scroll/wand/potions
 */
const string PRC_AREA_DISABLE_CRAFTING               = "PRC_AREA_DISABLE_CRAFTING";

/*
 * Inverts the behavior of previous switch
 * Will disable crafting on all areas BUT ones with the
 * PRC_AREA_DISABLE_CRAFTING switch set
 * Only works for new crafting system
 */
const string PRC_AREA_DISABLE_CRAFTING_INVERT        = "PRC_AREA_DISABLE_CRAFTING_INVERT";

/*
 * Multiply the delay (in seconds) after the creation of an item in which a PC
 * can't craft anything. This is divided by 100 to get a float.
 * Normally, it's set to the market price of the item. Set
 * it to less than 100 to reduce it instead. (default: 0).
 *
 * This is independant of PRC_PLAYER_TIME
 *
 */
const string PRC_CRAFT_TIMER_MULTIPLIER              = "PRC_CRAFT_TIMER_MULTIPLIER";

/*
 * Absolute maximum delay (in seconds) where crafting is disabled for a PC,
 * regardless of the item's market price. By default it's 0 (meaning that there's
 * no delay at all).
 *
 * This is independant of PRC_PLAYER_TIME
 *
 */
const string PRC_CRAFT_TIMER_MAX                     = "PRC_CRAFT_TIMER_MAX";

/*
 * Absolute minimum delay (in seconds) where crafting is disabled for a PC,
 * regardless of the item's market price. By default it's 0 (meaning that there's
 * no delay at all).
 *
 * This is independant of PRC_PLAYER_TIME
 *
 */
const string PRC_CRAFT_TIMER_MIN                     = "PRC_CRAFT_TIMER_MIN";

/**
 * These three switches modify Bioware crafting so that the items produced have the
 * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible
 * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce
 * level 5 items.
 * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball
 *
 * @see PRC_SCRIBE_SCROLL_CASTER_LEVEL
 * @see PRC_CRAFT_WAND_CASTER_LEVEL
 */
const string PRC_BREW_POTION_CASTER_LEVEL            = "PRC_BREW_POTION_CASTER_LEVEL";

/**
 * These three switches modify Bioware crafting so that the items produced have the
 * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible
 * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce
 * level 5 items.
 * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball
 *
 * @see PRC_BREW_POTION_CASTER_LEVEL
 * @see PRC_CRAFT_WAND_CASTER_LEVEL
 */
const string PRC_SCRIBE_SCROLL_CASTER_LEVEL          = "PRC_SCRIBE_SCROLL_CASTER_LEVEL";

/**
 * These three switches modify Bioware crafting so that the items produced have the
 * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible
 * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce
 * level 5 items.
 * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball
 *
 * @see PRC_BREW_POTION_CASTER_LEVEL
 * @see PRC_SCRIBE_SCROLL_CASTER_LEVEL
 */
const string PRC_CRAFT_WAND_CASTER_LEVEL             = "PRC_CRAFT_WAND_CASTER_LEVEL";

/**
 * As above, except it applies to rods
 */
const string PRC_CRAFT_ROD_CASTER_LEVEL             = "PRC_CRAFT_ROD_CASTER_LEVEL";

/**
 * As above, except it applies to staffs
 */
const string PRC_CRAFT_STAFF_CASTER_LEVEL             = "PRC_CRAFT_STAFF_CASTER_LEVEL";

/*
 * Characters with a crafting feat always have the appropriate base item in their inventory
 */
const string PRC_CRAFTING_BASE_ITEMS               = "PRC_CRAFTING_BASE_ITEMS";

/*
 * Max level of spells brewed into potions
 * defaults to 3
 */
const string X2_CI_BREWPOTION_MAXLEVEL               = "X2_CI_BREWPOTION_MAXLEVEL";

/*
 * cost modifier of spells brewed into poitions
 * defaults to 50
 */
const string X2_CI_BREWPOTION_COSTMODIFIER           = "X2_CI_BREWPOTION_COSTMODIFIER";

/*
 * cost modifier of spells scribed into scrolls
 * defaults to 25
 */
const string X2_CI_SCRIBESCROLL_COSTMODIFIER         = "X2_CI_SCRIBESCROLL_COSTMODIFIER";

/*
 * Max level of spells crafted into wands
 * defaults to 4
 */
const string X2_CI_CRAFTWAND_MAXLEVEL                = "X2_CI_CRAFTWAND_MAXLEVEL";

/*
 * cost modifier of spells crafted into wands
 * defaults to 750
 */
const string X2_CI_CRAFTWAND_COSTMODIFIER            = "X2_CI_CRAFTWAND_COSTMODIFIER";

/*
 * cost modifier of spells crafted into rods
 * note that adding a second spell costs 75% and 3 or more costs 50%
 * defaults to 750
 */
const string X2_CI_CRAFTROD_COSTMODIFIER            = "X2_CI_CRAFTROD_COSTMODIFIER";

/*
 * cost modifier of spells crafted into staffs
 * note that adding a second spell costs 75% and 3 or more costs 50%
 * defaults to 750
 */
const string X2_CI_CRAFTSTAFF_COSTMODIFIER            = "X2_CI_CRAFTSTAFF_COSTMODIFIER";

/**
 * Allows the use of arbitrary itemproperties and uses NWN item costs
 *  ie. not PnP
 */
const string PRC_CRAFTING_ARBITRARY                 = "PRC_CRAFTING_ARBITRARY";

/**
 * Scales the item costs overall for the purposes of crafting
 * defaults to 100
 */
const string PRC_CRAFTING_COST_SCALE                 = "PRC_CRAFTING_COST_SCALE";

/**
 * Scales the item costs for mundane item crafting
 * defaults to 100
 */
const string PRC_CRAFTING_MUNDANE_COST_SCALE        = "PRC_CRAFTING_MUNDANE_COST_SCALE";

/**
 * Sets crafting time per 1000gp in market price:
 * 1 - off, no time required
 * 2 - round
 * 3 - turn
 * 4 - hour
 * 5 - day
 * defaults to 1 hour/1000gp
 */
const string PRC_CRAFTING_TIME_SCALE                 = "PRC_CRAFTING_TIME_SCALE";

/**
 * TO DISABLE SPECIFIC PROPERTIES:
 *
 * Set a switch with the name:
 *
 * PRC_CRAFT_DISABLE_<name of crafting 2da file>_<line number of property>
 *
 * where the 2da files are named craft_* (lower case)
 * or itempropdef in the case of arbitrary crafting
 *
 * eg. PRC_CRAFT_DISABLE_itempropdef_15
 *
 * disables all castspell properties in arbitrary crafting mode
 */

/******************************************************************************\
*                           Teleport System Switches                           *
\******************************************************************************/

/**
 * Defines the maximum number of teleport target locations a PC may store.
 * Default: 50
 */
const string PRC_TELEPORT_MAX_TARGET_LOCATIONS          = "PRC_TELEPORT_MAX_TARGET_LOCATIONS";

/**
 * If this is set, all spells/powers/effects with the [Teleportation] descriptor
 * (ie, their scripts use GetCanTeleport()) fail.
 *
 * Default: Off
 */
const string PRC_DISABLE_TELEPORTATION                  = "PRC_DISABLE_TELEPORTATION";

/**
 * If a local integer variable by this name is set on an area, certain
 * teleportation destinations are unavailable based on the value of the variable.
 * This affects the return value of GetCanTeleport() when the bMovesCreature parameter
 * is true.
 *
 * Possible values are a bitwise combinations of the following:
 * PRC_DISABLE_TELEPORTATION_FROM_AREA
 * PRC_DISABLE_TELEPORTATION_TO_AREA
 * PRC_DISABLE_TELEPORTATION_WITHIN_AREA
 */
const string PRC_DISABLE_TELEPORTATION_IN_AREA          = "PRC_DISABLE_TELEPORTATION_IN_AREA";

/**
 * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables teleporting
 * from the area in question to other areas.
 */
const int PRC_DISABLE_TELEPORTATION_FROM_AREA           = 0x1;

/**
 * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables teleporting
 * from other areas to the area in question.
 */
const int PRC_DISABLE_TELEPORTATION_TO_AREA             = 0x2;

/**
 * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables both teleporting
 * from area in question to another location in that same area.
 */
const int PRC_DISABLE_TELEPORTATION_WITHIN_AREA         = 0x4;

/**
 * Forces spells/powers/effects that use GetTeleportError() to behave in a
 * specific way when their destination is in an area on which this local
 * variable is set.
 * Based on the value of this variable, such a spell/power will always behave in
 * a way described by one of the entries of Teleport results table. This happens
 * even if the spell/power would normally ignore the table.
 *
 * Default: Each spell / power behaves by it's normal specification.
 *
 * Values:
 * PRC_FORCE_TELEPORTATION_RESULT_ONTARGET
 * PRC_FORCE_TELEPORTATION_RESULT_OFFTARGET
 * PRC_FORCE_TELEPORTATION_RESULT_WAYOFFTARGET
 * PRC_FORCE_TELEPORTATION_RESULT_MISHAP
 */
const string PRC_FORCE_TELEPORTATION_RESULT             = "PRC_FORCE_TELEPORTATION_RESULT";

/**
 * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by
 * the variable always succeed.
 */
const int PRC_FORCE_TELEPORTATION_RESULT_ONTARGET       = 1;

/**
 * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by
 * the variable always dump the target(s) in a random location in the same area.
 */
const int PRC_FORCE_TELEPORTATION_RESULT_OFFTARGET      = 2;

/**
 * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by
 * the variable always dump the target(s) in a random location among the users's
 * stored teleport choices, or if there are no others, just stay where the user is.
 */
const int PRC_FORCE_TELEPORTATION_RESULT_WAYOFFTARGET   = 3;

/**
 * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by
 * the variable always do the following:
 * // Mishap:
 * // You and anyone else teleporting with you have gotten “scrambled.”
 * // You each take 1d10 points of damage, and you reroll on the chart to see where you wind up.
 * // For these rerolls, roll 1d20+80. Each time “Mishap” comes up, the characters take more damage and must reroll.
 */
const int PRC_FORCE_TELEPORTATION_RESULT_MISHAP         = 4;

/**
 * If a variable by this name is non-zero on a creature, that creature cannot
 * teleport. If you use this in your own scripts, please do not set it to
 * a static value or directly remove it.
 * Instead, increase it's value by one when the disabling occurs and decrease
 * by one when the disabling turns off. This is required in order to be able to
 * handle overlapping sources of forbiddance.
 *
 * Note: This stops all effects with the [Teleportation] descriptor, by causing
 * GetCanTeleport() to always return FALSE.
 */
const string PRC_DISABLE_CREATURE_TELEPORT              = "PRC_DISABLE_CREATURE_TELEPORT";


/******************************************************************************\
*                          Persistent World switches                           *
\******************************************************************************/

/**
 * Persistant time tracking.
 * When the first player logs on, the clock is set forward to the last time that
 * player logged off.
 */
const string PRC_PW_TIME                             = "PRC_PW_TIME";

/**
 * Number of rounds between exporting characters (1 round = 6 seconds).
 */
const string PRC_PW_PC_AUTOEXPORT                    = "PRC_PW_PC_AUTOEXPORT";

/**
 * A player's HP is stored via persistant locals every HB and restored on logon.
 */
const string PRC_PW_HP_TRACKING                      = "PRC_PW_HP_TRACKING";

/**
 * A player's location is stored via persistant locals every HB and restored
 * on logon.
 */
const string PRC_PW_LOCATION_TRACKING                = "PRC_PW_LOCATION_TRACKING";

/**
 * Player places map pins are tracked via persistant locals and restored on logon
 */
const string PRC_PW_MAPPIN_TRACKING                   = "PRC_PW_MAPPIN_TRACKING";

/**
 * Being dead is stored via persistant locals and restored on logon.
 */
const string PRC_PW_DEATH_TRACKING                   = "PRC_PW_DEATH_TRACKING";

/**
 * Spells cast are tracked via persistant locals and restored on logon
 */
const string PRC_PW_SPELL_TRACKING                   = "PRC_PW_SPELL_TRACKING";

/**
 * Players cant logon for this many minutes after a server load
 */
const string PRC_PW_LOGON_DELAY                      = "PRC_PW_LOGON_DELAY";



/******************************************************************************\
*                             XP system switches                               *
\******************************************************************************/

/**
 * This modifies the amount of XP a character recieves based on Level Adjustment
 * - Doesn't take racial hit dice into account.
 * - Should work with any prior XP system.
 * - Use this on pre-exisitng modules.
 */
const string PRC_XP_USE_SIMPLE_LA                    = "PRC_XP_USE_SIMPLE_LA";

/**
 * Any new characters entering the module are automatically given racial hit dice
 * Unlike PnP, they do not get to select what feats/skills the racial HD grant
 * Instead the default bioware package will be used.
 * Do not use if the ConvoCCs racial hit dice option is in use.
 */
const string PRC_XP_USE_SIMPLE_RACIAL_HD             = "PRC_XP_USE_SIMPLE_RACIAL_HD";

/**
 * Characters must earn their racial HD through the normal levelup process
 * Player must still take all their racial HD before they can take more
 * than one level in a non-racial class.
 * PRC_XP_USE_SIMPLE_RACIAL_HD must be on, and the convoCC racial hit dice option
 * must be off
 */
const string PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP  = "PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP";

/**
 * Characters are given racial HD via LevelupHenchman so can't select feats etc
 * Uses the default packages for each class, which are poor to say the least
 * PRC_XP_USE_SIMPLE_RACIAL_HD must be on, and the convoCC racial hit dice option
 * must be off
 */
const string PRC_XP_USE_SIMPLE_RACIAL_HD_NO_SELECTION  = "PRC_XP_USE_SIMPLE_RACIAL_HD_NO_SELECTION";

/**
 * Enables PRC XP system.
 * This may cause balance issues with pre-exisiting modules, so it is recomended
 * that only builders use this and do extensive playtesting and tweaking for
 * balance.
 *
 * Uses the dmgxp.2da file which is a copy of the XP tables in the DMG and ELH
 * these are based on the formula of 13.3333 encounters of CR = ECL to advance
 * a level.
 * Enconters of CR > ECL+8 or CR < ECL-8 dont give XP.
 * Tables are setup so that parties' levels will converge over time.
 */
const string PRC_XP_USE_PNP_XP                       = "PRC_XP_USE_PNP_XP";

/**
 * PRC XP system will use default bioware xptable.2da instead of dmgxp.2da
 */
const string PRC_XP_USE_BIOWARE_XPTABLE              = "PRC_XP_USE_BIOWARE_XPTABLE";

/**
 * This value is divided by 100 when applied so a value of 100 is equivalent to 1.0
 * slider for PnP XP system, multiplier for final XP amount
 * This can also be set on individual PCs for the same result. If it is not set, then
 * it defaults to 1.0.
 */
const string PRC_XP_SLIDER_x100                      = "PRC_XP_SLIDER_x100";

/**
 * Player groups will get small xp bonuses. Formula is group size - 1 * switch/100
 * so with a default value of 10 (10%) a party of 4 PCs receives 30% XP bonus
 */
const string PRC_XP_GROUP_BONUS                      = "PRC_XP_GROUP_BONUS";

/**
 * Use ECL for NPCs instead of CR.
 * Should be close, but I dont know how Bioware CR calculations work with the
 * PRC races.
 * Also note ECL is a measure of power in a campaign, wheras CR is measure of
 * power in a single encounter. Thus ECL weights use/day abilitieis more than
 * CR does.
 */
const string PRC_XP_USE_ECL_NOT_CR                   = "PRC_XP_USE_ECL_NOT_CR";

/**
 * If this is set, ECL = LA + racial hit dice
 * EVEN IF THE CHARACTER DOESNT HAVE ANY RACIAL HIT DICE!
 * So it penalizes the power races far more than PnP because they don't get any
 * of the other benefits of racial hit dice (BAB, HP, saves, skills, feats, etc)
 */
const string PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA     = "PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA";

/**
 * These values are divided by 100 when applied so a value of 100 is equivalent
 * to 1.0.
 * This is for purposes of party size for dividing XP awards by.
 * By PnP only PCs would count, and possibly henchmen too, but you might want to
 * tweak others for balance purposes, for example to hinder a solo wizard with
 * dozens of summons.
 */
const string PRC_XP_PC_PARTY_COUNT_x100              = "PRC_XP_PC_PARTY_COUNT_x100";
const string PRC_XP_HENCHMAN_PARTY_COUNT_x100        = "PRC_XP_HENCHMAN_PARTY_COUNT_x100";
const string PRC_XP_DOMINATED_PARTY_COUNT_x100       = "PRC_XP_DOMINATED_PARTY_COUNT_x100";
const string PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100 = "PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100";
const string PRC_XP_FAMILIAR_PARTY_COUNT_x100        = "PRC_XP_FAMILIAR_PARTY_COUNT_x100";
const string PRC_XP_SUMMONED_PARTY_COUNT_x100        = "PRC_XP_SUMMONED_PARTY_COUNT_x100";
const string PRC_XP_UNKNOWN_PARTY_COUNT_x100         = "PRC_XP_UNKNOWN_PARTY_COUNT_x100";

/**
 * Use SetXP rather than GiveXP. Will bypass any possible Bioware interference.
 */
const string PRC_XP_USE_SETXP                        = "PRC_XP_USE_SETXP";

/**
 * Give XP to NPCs
 */
const string PRC_XP_GIVE_XP_TO_NPCS                  = "PRC_XP_GIVE_XP_TO_NPCS";

/**
 * Setting this switch will turn off the messages about being too far awy to gain XP
 */
const string PRC_XP_DISABLE_SPAM                 	 = "PRC_XP_DISABLE_SPAM";

/**
 * PCs must be in the same area as the CR to gain XP.
 * Helps stop powerlevelling by detering low level characters hanging around
 * with 1 very strong char.
 */
const string PRC_XP_MUST_BE_IN_AREA                  = "PRC_XP_MUST_BE_IN_AREA";

/**
 * Maximum distance that a PC must be to gain XP.
 * Helps stop powerlevelling by detering low level characters hanging around
 * with 1 very strong char.
 */
const string PRC_XP_MAX_PHYSICAL_DISTANCE            = "PRC_XP_MAX_PHYSICAL_DISTANCE";

/**
 * Maximum level difference in levels between killer and PC being awarded XP.
 * Helps stop powerlevelling by detering low level characters hanging around
 * with 1 very strong char.
 */
const string PRC_XP_MAX_LEVEL_DIFF                   = "PRC_XP_MAX_LEVEL_DIFF";

/**
 * Gives XP to NPCs when no PCs are in their faction
 * This might cause lag if large numebrs of NPCs in the same faction.
 */
const string PRC_XP_GIVE_XP_TO_NON_PC_FACTIONS       = "PRC_XP_GIVE_XP_TO_NON_PC_FACTIONS";




/******************************************************************************\
*                      Database and Letoscript switches                        *
\******************************************************************************/

/**
 * Set this if you want to use the bioware db for 2da caching
 * the value is the number of Hbs between caching runs
 * Defaults to 300 (30 mins) if not set
 * cache will be flushed automatically when the PRC version changes
 * If this is set to -1 or lower, it is never stored for persistance over
 * module restarts.
 * The bioware database will bloat infinitely on Linux, due to biowares poor
 * handling.
 */
const string PRC_USE_BIOWARE_DATABASE                = "PRC_USE_BIOWARE_DATABASE";

/**
 * Set this if you are using NWNX and any sort of database.
 */
const string PRC_USE_DATABASE                        = "PRC_USE_DATABASE";

/**
 * Set this if you are using SQLite (the built-in database in NWNX-ODBC2).
 * This will use transactions and SQLite specific syntax.
 */
const string PRC_DB_SQLITE                          = "PRC_DB_SQLITE";

/**
 * This is the interval of each transaction. By default it is 600 seconds.
 * Shorter will mean slower, but less data lost in the event of a server crash.
 * Longer is visa versa.
 */
const string PRC_DB_SQLITE_INTERVAL                 = "PRC_DB_SQLITE_INTERVAL";

/**
 * Set this if you are using MySQL.
 * This will not use transactions and will use MySQL specific syntax
 */
const string PRC_DB_MYSQL                            = "PRC_DB_MYSQL";


/**
 * [DEFUNCT]
 * This will precache 2da files into the database.
 * The first time a module runs with this set it will lag a lot for a long time
 * as the game does 2da reads.
 * Afterwards it will be much faster.
 * This is a really, really long lag. Like days/weeks type length.
 * This is not the "normal" precaching that the spellbooks & psionics does.
 */
const string PRC_DB_PRECACHE                         = "PRC_DB_PRECACHE";

/**
 * [DEFUNCT]
 * TODO: Write description.
 */
const string PRC_USE_LETOSCRIPT                      = "PRC_USE_LETOSCRIPT";

/**
 * [DEFUNCT]
 * Set this to 1 if using build 18
 */
const string PRC_LETOSCRIPT_PHEONIX_SYNTAX           = "PRC_LETOSCRIPT_PHEONIX_SYNTAX";

/**
 * [DEFUNCT]
 * Set this to 1 to have Letoscript convert stat boosts on the hide to
 * permanent ones.
 */
const string PRC_LETOSCRIPT_FIX_ABILITIES            = "PRC_LETOSCRIPT_FIX_ABILITIES";

/**
 * [DEFUNCT]
 * Letoscript needs a string named PRC_LETOSCRIPT_NWN_DIR set to the
 * directory of NWN. If it doesnt work, try different slash options: // \\ / \
 */
const string PRC_LETOSCRIPT_NWN_DIR                  = "PRC_LETOSCRIPT_NWN_DIR";

/**
 * [DEFUNCT]
 * Switch so that Unicorn will use the SQL database for SCO/RCO
 * Must have the zeoslib.dlls installed for this
 *
 * UNTESTED!!!
 */
const string PRC_LETOSCRIPT_UNICORN_SQL              = "PRC_LETOSCRIPT_UNICORN_SQL";

/**
 * [DEFUNCT]
 * This is a string, not integer.
 * If the IP is set, Letoscript will use ActivatePortal instead of booting.
 * The IP and Password must be correct for your server or bad things will happen.
 * - If your IP is non-static make sure this is kept up to date.
 *
 * See the Lexicon entry on ActivatePortal for more information.
 *
 * @see PRC_LETOSCRIPT_PORTAL_PASSWORD
 */
const string PRC_LETOSCRIPT_PORTAL_IP                = "PRC_LETOSCRIPT_PORTAL_IP";

/**
 * [DEFUNCT]
 * This is a string, not integer.
 * If the IP is set, Letoscript will use ActivatePortal instead of booting.
 * The IP and Password must be correct for your server or bad things will happen.
 * - If your IP is non-static make sure this is kept up to date.
 *
 * See the Lexicon entry on ActivatePortal for more information.
 *
 * @see PRC_LETOSCRIPT_PORTAL_IP
 */
const string PRC_LETOSCRIPT_PORTAL_PASSWORD          = "PRC_LETOSCRIPT_PORTAL_PASSWORD";

/**
 * [DEFUNCT]
 * If set you must be using Unicorn.
 * Will use getnewest bic instead of filename reconstruction (which fails if
 * multiple characters have the same name)
 */
const string PRC_LETOSCRIPT_GETNEWESTBIC             = "PRC_LETOSCRIPT_GETNEWESTBIC";

//This switch is set automatically after prc_onmodload detects NWNX_Funcs plugin
const string PRC_NWNX_FUNCS                          = "PRC_NWNX_FUNCS";


/******************************************************************************\
*                          ConvoCC switches  [DEFUNCT]                         *
\******************************************************************************/

/**
 * [DEFUNCT]
 * Activates the ConvoCC.
 * This doesn't turn on the database and letoscript as well, which you must
 * do yourself.
 *
 * @see PRC_USE_DATABASE
 * @see PRC_USE_LETOSCRIPT
 */
const string PRC_CONVOCC_ENABLE                      = "PRC_CONVOCC_ENABLE";

/**
 * [DEFUNCT]
 * Avariel characters have bird wings.
 */
const string PRC_CONVOCC_AVARIEL_WINGS               = "PRC_CONVOCC_AVARIEL_WINGS";

/**
 * [DEFUNCT]
 * Fey'ri characters have bat wings.
 */
const string PRC_CONVOCC_FEYRI_WINGS                 = "PRC_CONVOCC_FEYRI_WINGS";

/**
 * [DEFUNCT]
 * Aasimar characters have the option of angel wings
 * Note: Not set by PRC_CONVOCC_ENFORCE_PNP_RACIAL as it isn't part of PnP
 */

const string PRC_CONVOCC_AASIMAR_WINGS               = "PRC_CONVOCC_AASIMAR_WINGS";

/**
 * [DEFUNCT]
 * Fey'ri characters have a demonic tail.
 */
const string PRC_CONVOCC_FEYRI_TAIL                  = "PRC_CONVOCC_FEYRI_TAIL";

/**
 * [DEFUNCT]
 * Teifling characters have the option of a demonic tail.
 */
const string PRC_CONVOCC_TIEFLING_TAIL               = "PRC_CONVOCC_TIEFLING_TAIL";

/**
 * [DEFUNCT]
 * Force Drow characters to be of the correct gender for their race.
 */
const string PRC_CONVOCC_DROW_ENFORCE_GENDER         = "PRC_CONVOCC_DROW_ENFORCE_GENDER";

/**
 *[DEFUNCT]
 * Force Genasi clerics to select the relevant elemental domain as one of
 * their feats.
 */
const string PRC_CONVOCC_GENASI_ENFORCE_DOMAINS      = "PRC_CONVOCC_GENASI_ENFORCE_DOMAINS";

/**
 *[DEFUNCT]
 * Female Rakshasa use the female rakshasa model. Use together with PRC_CONVOCC_USE_RACIAL_APPEARANCES
 * @see PRC_CONVOCC_USE_RACIAL_APPEARANCES
 */
const string PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE = "PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE";

/**
 *[DEFUNCT]
 * A combination switch to turn on all the racial enforcement settings.
 * @see PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE
 * @see PRC_CONVOCC_GENASI_ENFORCE_DOMAINS
 * @see PRC_CONVOCC_DROW_ENFORCE_GENDER
 * @see PRC_CONVOCC_TIEFLING_TAIL
 * @see PRC_CONVOCC_FEYRI_TAIL
 * @see PRC_CONVOCC_FEYRI_WINGS
 * @see PRC_CONVOCC_AVARIEL_WINGS
 */
const string PRC_CONVOCC_ENFORCE_PNP_RACIAL          = "PRC_CONVOCC_ENFORCE_PNP_RACIAL";

/**
 * [DEFUNCT]
 * Note: feat enforcement switches don't do anything (TODO?)
 */

/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_BLOOD_OF_THE_WARLORD= "PRC_CONVOCC_ENFORCE_BLOOD_OF_THE_WARLORD";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_NIMBUSLIGHT    = "PRC_CONVOCC_ENFORCE_FEAT_NIMBUSLIGHT";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_HOLYRADIANCE   = "PRC_CONVOCC_ENFORCE_FEAT_HOLYRADIANCE";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_SERVHEAVEN     = "PRC_CONVOCC_ENFORCE_FEAT_SERVHEAVEN";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_SAC_VOW        = "PRC_CONVOCC_ENFORCE_FEAT_SAC_VOW";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_VOW_OBED       = "PRC_CONVOCC_ENFORCE_FEAT_VOW_OBED";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_THRALL_TO_DEMON= "PRC_CONVOCC_ENFORCE_FEAT_THRALL_TO_DEMON";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_DISCIPLE_OF_DARKNESS="PRC_CONVOCC_ENFORCE_FEAT_DISCIPLE_OF_DARKNESS";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_LICHLOVED      = "PRC_CONVOCC_ENFORCE_FEAT_LICHLOVED";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_EVIL_BRANDS    = "PRC_CONVOCC_ENFORCE_FEAT_EVIL_BRANDS";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_VILE_WILL_DEFORM="PRC_CONVOCC_ENFORCE_FEAT_VILE_WILL_DEFORM";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_OBESE="PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_OBESE";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_GAUNT="PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_GAUNT";
/** Separate enforcement of feats with special restrictions. */
const string PRC_CONVOCC_ENFORCE_FEAT_LOLTHS_MEAT   = "PRC_CONVOCC_ENFORCE_FEAT_LOLTHS_MEAT";


/**
 *[DEFUNCT]
 * A combination switch to turn on all the feat enforcement settings. Doesn't do anything
 */
const string PRC_CONVOCC_ENFORCE_FEATS               = "PRC_CONVOCC_ENFORCE_FEATS";

/**
 * [DEFUNCT]
 * Stops players from changing their wings. Turning this on gives players only the "none" choice
 * at the wing stage of the convoCC. Use in conjuction with the wing switches.
 * @see PRC_CONVOCC_AVARIEL_WINGS
 * @see PRC_CONVOCC_FEYRI_WINGS
 * @see PRC_CONVOCC_AASIMAR_WINGS
 */
const string PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS    = "PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS";

/**
 * [DEFUNCT]
 * Stops players from changing their tail. Turning this on gives players only the "none" choice
 * at the tail stage of the convoCC. Use in conjuction with the tail switches.
 * @see PRC_CONVOCC_FEYRI_TAIL
 * @see PRC_CONVOCC_TIEFLING_TAIL
 */
const string PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL     = "PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL";

/**
 * [DEFUNCT]
 * Stops players from changing their model at all. Doesn't do anything
 */
const string PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL    = "PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL";

/**
 * [DEFUNCT]
 * Players are only given a choice of appearances that match their race. For most races, this is the
 * default appearance defined in racialtypes.2da.
 * @see PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE
 */
const string PRC_CONVOCC_USE_RACIAL_APPEARANCES      = "PRC_CONVOCC_USE_RACIAL_APPEARANCES";
/**
 * [DEFUNCT]
 * Player can only choose a portrait that matches their race as in portraits.2da. Because
 * Bioware's elf, dwarf etc. subrace portraits are labelled as eg. 'elf' not 'drow' and because
 * half elves have no portraits, this is actually done on appearance and not on race for PCs using
 * Bioware's PC appearance models.
 */
const string PRC_CONVOCC_USE_RACIAL_PORTRAIT         = "PRC_CONVOCC_USE_RACIAL_PORTRAIT";

/**
 * [DEFUNCT]
 * Players can only select from the player voicesets. NPC voicesets are not
 * complete, so wont play sounds for many things such as emotes.
 */
const string PRC_CONVOCC_ONLY_PLAYER_VOICESETS       = "PRC_CONVOCC_ONLY_PLAYER_VOICESETS";

/**
 * [DEFUNCT]
 * Only allows players to select voiceset of the same gender as their character.
 */
const string PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX   = "PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX";

/**
 * [DEFUNCT]
 * Allow players to keep their exisiting voiceset.
 * The ConvoCC cannot allow players to select custom voiceset, so the only way
 * for players to have them is to select them in the Bioware character creator
 * and then select to keep them in the ConvoCC.
 */
const string PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET      = "PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET";

/**
 * [DEFUNCT]
 * Allow players to keep their exisiting portrait.
 * The ConvoCC cannot allow players to select custom portraits, so the only way
 * for players to have them is to select them in the Bioware character creator
 * and then select to keep them in the ConvoCC.
 */
const string PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT      = "PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT";

/**
 * [DEFUNCT]
 * Only allow players to select portraits of the same gender as their character.
 * Most of the NPC portraits do not have a gender so are also removed.
 */
const string PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX    = "PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX";

/**
 * [DEFUNCT]
 * This option give players the ability to start with racial hit dice for some
 * of the more powerful races. These are defined in ECL.2da.
 * For these races, players do not pick a class in the ConvoCC but instead
 * select 1 or more levels in a racial class (such as monsterous humanoid, or
 * outsider).
 * This is not a complete ECL system, it merely gives players the racial hit
 * dice component of their race. It does not make any measure of the Level
 * Adjustment component. For example, a pixie has no racial hit dice, but has a
 * +4 level adjustment. Doesn't do anything
 */
const string PRC_CONVOCC_ENABLE_RACIAL_HITDICE       = "PRC_CONVOCC_ENABLE_RACIAL_HITDICE";

/**
 * [DEFUNCT]
 * This option allows players to keep their skillpoints from one level to
 * the next, if they want to.
 */
const string PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER  = "PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER";

/**
 * [DEFUNCT]
 * This will identify new characters based on XP as in v1.3
 * This is less secure than using the encrypted key.
 * @see PRC_CONVOCC_ENCRYPTION_KEY
 */
const string PRC_CONVOCC_USE_XP_FOR_NEW_CHAR         = "PRC_CONVOCC_USE_XP_FOR_NEW_CHAR";

/**
 * [DEFUNCT]
 * This is the key used to encrypt characters' names if USE_XP_FOR_NEW_CHAR
 * is false in order to identify returning characters. It should be in the
 * range 1-100.
 * If USE_XP_FOR_NEW_CHAR is true along with this, then returning characters
 * will be encrypted too, so once everone has logged on at least once,
 * USE_XP_FOR_NEW_CHAR can be set to false for greater security.
 *
 * WARNING: Changing this value after some PCs have gone through the convoCC will
 * cause them to have to go through it again. The encryption uses the player's
 * public CD key, so they won't be able to log into their account from different
 * NWN installs as the key won't match using this system
 */
const string PRC_CONVOCC_ENCRYPTION_KEY              = "PRC_CONVOCC_ENCRYPTION_KEY";

/**
 * [DEFUNCT]
 * As requested, an option to alter the amount of points available in the stat
 * point-buy at character creation.
 * Default: 30
 */
const string PRC_CONVOCC_STAT_POINTS                 = "PRC_CONVOCC_STAT_POINTS";

/**
 * [DEFUNCT]
 * As requested, if set this will give a number of bonus feats equal to this
 * value to each created character, similar to human Quick To Master feat.
 */
const string PRC_CONVOCC_BONUS_FEATS                 = "PRC_CONVOCC_BONUS_FEATS";

/**
 * [DEFUNCT]
 * As requested, this will cap the maximum a stat can start at, excluding racial
 * modifies.
 * Default: 18
 */
const string PRC_CONVOCC_MAX_STAT                    = "PRC_CONVOCC_MAX_STAT";

/**
 * [DEFUNCT]
 * As requested, this will change the skill point multplier at level 1.
 * Default: 4
 */
const string PRC_CONVOCC_SKILL_MULTIPLIER            = "PRC_CONVOCC_SKILL_MULTIPLIER";

/**
 * [DEFUNCT]
 * As requested, this will give a bonus to skill points after multiplication.
 */
const string PRC_CONVOCC_SKILL_BONUS                 = "PRC_CONVOCC_SKILL_BONUS";

/**
 * [DEFUNCT]
 * When set, the convoCC NO LONGER STARTS AUTOMATICALLY on logging in. It must be called
 * by a script in the module. This allows the module builder to start the convoCC from a
 * particular area or trigger's On Enter event. The script should call the convoCC with
 * ExecuteScript("prc_ccc_main", oPC) where oPC is the PC. It's advisable to check the
 * entering object is a PC and not a NPC or DM.
 */

const string PRC_CONVOCC_CUSTOM_START_LOCATION       = "PRC_CONVOCC_CUSTOM_START_LOCATION";

/**
 * [DEFUNCT]
 * When set, this switch causes a custom script to be used to determine whether a PC should go
 * through the convoCC or not.
 * The script must:
 * - be called "ccc_custom_enter"
 * - set the local int "CONVOCC_LAST_STATUS" on the PC (OBJECT_SELF)
 * - include prc_ccc_const (for the constants the local int can be set to)
 * otherwise the PC will always be booted
 *
 * possible values for CONVOCC_LAST_STATUS:
 * CONVOCC_ENTER_BOOT_PC (causes the PC to get kicked)
 * CONVOCC_ENTER_NEW_PC (causes the PC to go through the convoCC)
 * CONVOCC_ENTER_RETURNING_PC (causes the PC to skip the convoCC)
 *
 * This switch will completely bypass the convoCC methods for determining whether to run the
 * convoCC on an entering PC, so if necessary, your custom marker for 'done' would be set
 * in 'ccc_custom_exit'
 * @see PRC_CONVOCC_CUSTOM_EXIT_SCRIPT
 */
const string PRC_CONVOCC_CUSTOM_ENTER_SCRIPT          = "PRC_CONVOCC_CUSTOM_ENTER_SCRIPT";

/**
 * [DEFUNCT]
 * When set, this switch causes a custom script to be executed at the last stage of the convoCC,
 * just before booting the player. The script must be named 'ccc_custom_exit'.
 * Possible uses include: giving PCs gold and/or equipment, giving PCs PW items
 * (even plot items get removed at the start of the convoCC), setting a new persistant location,
 * setting a custom marker for having done the convoCC in conjunction with
 * 'ccc_custom_enter'
 * @see PRC_CONVOCC_CUSTOM_ENTER_SCRIPT
 */

const string PRC_CONVOCC_CUSTOM_EXIT_SCRIPT          = "PRC_CONVOCC_CUSTOM_EXIT_SCRIPT";

/******************************************************************************\
*                              Truenaming switches                             *
\******************************************************************************/

/**
 * Sets the CR Multiplier for Evolving Mind utterances
 * This is divided by 100 to get a float.
 * Ex: To multiply by 1.5, set this value to 150
 *
 * The formula used is (CR * Multiplier) + 15
 *
 * defaults to PnP: (CR * 2) + 15
 */
const string PRC_TRUENAME_CR_MULTIPLIER              = "PRC_TRUENAME_CR_MULTIPLIER";

/**
 * Gives a bonus based on Truenamer level
 * PC Truenamer level is divided by this value
 * Ex: To give a bonus equal to 1/2 Truenamer level, set this to 2
 *
 * The formula used is (CR * Multiplier) + 15 - Bonus
 *
 * defaults to PnP: 0/No bonus
 */
const string PRC_TRUENAME_LEVEL_BONUS                = "PRC_TRUENAME_LEVEL_BONUS";

/**
 * Sets the Constant value added to the DC
 * Ex: To make the constant 10, simply set this value to 10
 *
 * The formula used is (CR * Multiplier) + Constant
 *
 * defaults to PnP: +15.
 */
const string PRC_TRUENAME_DC_CONSTANT                = "PRC_TRUENAME_DC_CONSTANT";

/**
 * Turns off the Law of Sequence when set to 1
 *
 * defaults to PnP: On
 */
const string PRC_LAW_OF_SEQUENCE                     = "PRC_LAW_OF_SEQUENCE";

/**
 * Turns off the Law of Resistance when set to 1
 *
 * defaults to PnP: On
 */
const string PRC_LAW_OF_RESISTANCE                   = "PRC_LAW_OF_RESISTANCE";

/**
 * Sets the Constant value added to the DC
 * Ex: To make the constant 10, simply set this value to 10
 *
 * The formula used is Constant + (2 * Utterance Level)
 *
 * defaults to PnP: +25.
 */
const string PRC_PERFECTED_MAP_CONSTANT              = "PRC_PERFECTED_MAP_CONSTANT";

/**
 * Sets the Multiplier value added to the DC
 * Ex: To make the multiplier 4, simply set this value to 4
 *
 * The formula used is 25 + (Multiplier * Utterance Level)
 *
 * defaults to PnP: 2.
 */
const string PRC_PERFECTED_MAP_MULTIPLIER            = "PRC_PERFECTED_MAP_MULTIPLIER";

/******************************************************************************\
*                                Binding switches                              *
\******************************************************************************/

/**
 * Sets how many seconds it takes to contact a vestige. 
 * Any number less than 6 is ignored
 */
const string PRC_CONTACT_VESTIGE_TIMER               = "PRC_CONTACT_VESTIGE_TIMER";

/**
 * Sets how many seconds it takes to bind a vestige. 
 * Any number less than 12 is ignored
 */
const string PRC_BIND_VESTIGE_TIMER                  = "PRC_BIND_VESTIGE_TIMER";

/******************************************************************************\
*                                Encounter switches                            *
\******************************************************************************/

/** Encounter areas
 *  Setting this will disable access to the encounter areas from the PRC Options convo
 */
const string PRC_DISABLE_ENCOUNTERS                  = "PRC_DISABLE_ENCOUNTERS";

/**
 * This script prevents hacking to another user account without Master Server Authentication
 *
 * Stores public cd keys for each account in database. In case the key was registered with
 * another account player is booted from the server.
 *
 * All credits go to FunkySwerve
 */
const string PRC_PW_SECURITY_CD_CHECK            = "PRC_PW_SECURITY_CD_CHECK";


/******************************************************************************\
*                             Debugging Switches                               *
\******************************************************************************/

/**
 * Toggles everything guarded by "if(DEBUG)". Mostly calls to DoDebug().
 */
const string PRC_DEBUG                               = "PRC_DEBUG";




///////////////////////
// Function protypes //
///////////////////////
/* NOTE: if you are looking for a function that used to be in here, it's probably in inc_switch_setup */

/**
 * Checks the state of a PRC switch.
 * NOTE: This will only work with switches that use integer values. You
 * must get the value of non-integer-valued switches manually.
 *
 * @param sSwitch  One of the PRC_* constant strings defined in prc_inc_switch
 * @return         The value of the switch queried
 */
int GetPRCSwitch(string sSwitch);

/**
 * Sets a PRC switch state.
 * NOTE: As this will only set switches with integer values, you will need
 * to manually set the (few) switches that should have a value other than
 * integer.
 *
 * @param sSwitch  One of the PRC_* constant strings defined in prc_inc_switch
 * @param nState   The integer value to set the switch to
 */
void SetPRCSwitch(string sSwitch, int nState);

//const string PRC_FILE_END_TOKEN = "prc_fe_tkn";

//////////////////////////
// Function definitions //
//////////////////////////

int GetPRCSwitch(string sSwitch)
{
    return GetLocalInt(GetModule(), sSwitch);
}

void SetPRCSwitch(string sSwitch, int nState)
{
    SetLocalInt(GetModule(), sSwitch, nState);
}
