Shargast_PRC8/_module/Chapter 1/nss/bhh_mod_def_load.nss
Jaysyn904 66a0a3e043 Initial commit
Initial commit.
2024-08-03 14:13:18 -04:00

227 lines
11 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Example XP3 OnLoad Script
//:: x3_mod_def_load
//:: (c) 2008 Bioware Corp.
//:://////////////////////////////////////////////
// Modified by Proleric 14-May-2008 :
//
// - All module and area switches for horses included (commented out).
// - No horses in interior areas by default.
// - Some area switches enabled as an example.
// - Fix for the save/load bug with unattached NPCs (commented out, because it's module-specific).
/*
Put into: OnModuleLoad Event
This example script demonstrates how to tweak the
behavior of several subsystems in your module.
For more information, please check x2_inc_switches
which holds definitions for several variables that
can be set on modules, creatures, doors or waypoints
to change the default behavior of Bioware scripts.
Warning:
Using some of these switches may change your games
balancing and may introduce bugs or instabilities. We
recommend that you only use these switches if you
know what you are doing. Consider these features
unsupported!
Please do NOT report any bugs you experience while
these switches have been changed from their default
positions.
Make sure you visit the forums at nwn.bioware.com
to find out more about these scripts.
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-16
//:://////////////////////////////////////////////
/*
Example settings for horses at the bottom.
*/
//:://////////////////////////////////////////////
//:: Updated By: Azbest
//:: Last Update: April 18th, 2008
//:://////////////////////////////////////////////
#include "x2_inc_switches"
#include "x2_inc_restsys"
// Custom code
void bhLoadBugFix(string sNPC_Tag);
// end Custom code
void main()
{
if (GetGameDifficulty() == GAME_DIFFICULTY_CORE_RULES || GetGameDifficulty() == GAME_DIFFICULTY_DIFFICULT)
{
// * Setting the switch below will enable a seperate Use Magic Device Skillcheck for
// * rogues when playing on Hardcore+ difficulty. This only applies to scrolls
SetModuleSwitch (MODULE_SWITCH_ENABLE_UMD_SCROLLS, TRUE);
// * Activating the switch below will make AOE spells hurt neutral NPCS by default
// SetModuleSwitch (MODULE_SWITCH_AOE_HURT_NEUTRAL_NPCS, TRUE);
}
// * AI: Activating the switch below will make the creaures using the WalkWaypoint function
// * able to walk across areas
// SetModuleSwitch (MODULE_SWITCH_ENABLE_CROSSAREA_WALKWAYPOINTS, TRUE);
// * Spells: Activating the switch below will make the Glyph of Warding spell behave differently:
// * The visual glyph will disappear after 6 seconds, making them impossible to spot
// SetModuleSwitch (MODULE_SWITCH_ENABLE_INVISIBLE_GLYPH_OF_WARDING, TRUE);
// * Craft Feats: Want 50 charges on a newly created wand? We found this unbalancing,
// * but since it is described this way in the book, here is the switch to get it back...
// SetModuleSwitch (MODULE_SWITCH_ENABLE_CRAFT_WAND_50_CHARGES, TRUE);
// * Craft Feats: Use this to disable Item Creation Feats if you do not want
// * them in your module
// SetModuleSwitch (MODULE_SWITCH_DISABLE_ITEM_CREATION_FEATS, TRUE);
// * Palemaster: Deathless master touch in PnP only affects creatures up to a certain size.
// * We do not support this check for balancing reasons, but you can still activate it...
// SetModuleSwitch (MODULE_SWITCH_SPELL_CORERULES_DMASTERTOUCH, TRUE);
// * Epic Spellcasting: Some Epic spells feed on the liveforce of the caster. However this
// * did not fit into NWNs spell system and was confusing, so we took it out...
// SetModuleSwitch (MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER, TRUE);
// * Epic Spellcasting: Some Epic spells feed on the liveforce of the caster. However this
// * did not fit into NWNs spell system and was confusing, so we took it out...
// SetModuleSwitch (MODULE_SWITCH_RESTRICT_USE_POISON_TO_FEAT, TRUE);
// * Spellcasting: Some people don't like caster's abusing expertise to raise their AC
// * Uncommenting this line will drop expertise mode whenever a spell is cast by a player
// SetModuleSwitch (MODULE_VAR_AI_STOP_EXPERTISE_ABUSE, TRUE);
// * Item Event Scripts: The game's default event scripts allow routing of all item related events
// * into a single file, based on the tag of that item. If an item's tag is "test", it will fire a
// * script called "test" when an item based event (equip, unequip, acquire, unacquire, activate,...)
// * is triggered. Check "x2_it_example.nss" for an example.
// * This feature is disabled by default.
SetModuleSwitch (MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS, TRUE);
if (GetModuleSwitchValue (MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE)
{
// * If Tagbased scripts are enabled, and you are running a Local Vault Server
// * you should use the line below to add a layer of security to your server, preventing
// * people to execute script you don't want them to. If you use the feature below,
// * all called item scrips will be the prefix + the Tag of the item you want to execute, up to a
// * maximum of 16 chars, instead of the pure tag of the object.
// * i.e. without the line below a user activating an item with the tag "test",
// * will result in the execution of a script called "test". If you uncomment the line below
// * the script called will be "1_test.nss"
// SetUserDefinedItemEventPrefix("1_");
}
// * This initializes Bioware's wandering monster system as used in Hordes of the Underdark
// * You can deactivate it, making your module load faster if you do not use it.
// * If you want to use it, make sure you set "x2_mod_def_rest" as your module's OnRest Script
// SetModuleSwitch (MODULE_SWITCH_USE_XP2_RESTSYSTEM, TRUE);
if (GetModuleSwitchValue(MODULE_SWITCH_USE_XP2_RESTSYSTEM) == TRUE)
{
// * This allows you to specify a different 2da for the wandering monster system.
// SetWanderingMonster2DAFile("des_restsystem");
//* Do not change this line.
WMBuild2DACache();
}
// CUSTOM CODE FOR HORSES
//
// See Proleric's Lexicon or x3_inc_horse for full explanation of the module options.
//
// This example excludes horses from indoor areas, except one in which no mounting is allowed.
//
// Similar lines in the official Bioware script have been consolidated into this section.
SetMaxHenchmen(99);
// Fix for the save/load bug with unattached NPCs.
// You will need one line for each henchman in your module, and one for any other NPC who might own horses at some point.
// Activate the next two lines to see how this works in this demo module.
// bhLoadBugFix("Meruppi");
// bhLoadBugFix("Gidush");
// Area Control
SetLocalInt(GetModule(), "X3_MOUNTS_EXTERNAL_ONLY", TRUE); // Horses not allowed in indoor areas
// SetLocalInt(GetModule(), "X3_MOUNTS_NO_UNDERGROUND", TRUE); // Horses not allowed underground
// SetLocalInt(GetObjectByTag("AreaTag"), "X3_NO_HORSES", TRUE); // Horses not allowed in this area
SetLocalInt(GetObjectByTag("DismountZone"), "X3_NO_MOUNTING", TRUE); // No mounting in this area
SetLocalInt(GetObjectByTag("DismountZone"), "X3_MOUNT_OK_EXCEPTION", TRUE); // Horses allowed in this area
// SetLocalFloat(GetObjectByTag("DismountZone"), "fX3_MOUNT_MULTIPLE", 0.5); // Mount animation faster or slower in this area
// SetLocalFloat(GetObjectByTag("DismountZone"), "fX3_DISMOUNT_MULTIPLE", 0.5); // Dismount animation faster or slower in this area
// SetLocalInt(GetObjectByTag("AreaTag"), "X3_ABORT_WHEN_STUCK", TRUE); // Abort mount if unable to run to horse in this area
// Abilities & Combat
// SetLocalInt(GetModule(), "X3_HORSE_DISABLE_SPEED", TRUE); // No speed increase on mounting
// SetLocalInt(GetModule(), "X3_HORSE_DISABLE_SKILL", TRUE); // No skill penalties to Hide etc on mounting
// SetLocalInt(GetModule(), "X3_MOUNT_NO_REST_DISMOUNT", TRUE); // Allow rest when mounted
// SetLocalInt(GetModule(), "X3_HORSE_ENABLE_ACBOOST", TRUE); // Increase rider AC to match horse on mounting
// SetLocalInt(GetModule(), "X3_NO_MOUNTED_COMBAT_FEAT", TRUE); // Disable Mounted Combat feat
// SetLocalInt(GetModule(), "X3_HORSE_ENABLE_HPBOOST", TRUE); // Give rider temporary hit points on mounting
// SetLocalInt(GetModule(), "X3_ENABLE_MOUNT_DAMAGE", TRUE); // Horse shares damage on dismounting
// SetLocalInt(GetModule(), "X3_HORSE_NO_CORPSES", TRUE); // Mounted horses leave no corpses
// SetLocalInt(GetModule(), "X3_NO_SHAPESHIFT_SPELL_CHECK", TRUE); // Allow mounted creatures to be shapeshifted by spells
// Henchman Control
SetLocalInt(GetModule(), "X3_RESTORE_HENCHMEN_LOCATIONS", TRUE); // Henchmen's horses respawn near henchmen on loading saved game
// SetLocalInt(GetModule(), "X3_HORSE_NO_HENCHMAN_INCREASE", TRUE); // No increase in maximum henchmen to accommodate horses
// SetLocalInt(GetModule(), "X3_HORSE_MAX_HENCHMEN ", 5); // Upper limit on maximum henchmen to accommodate horses
// Saddlebags
// SetLocalInt(GetModule(), "X3_HORSE_ENABLE_SADDLEBAGS", TRUE); // Enable saddlebags
// SetLocalString(GetModule(), "X3_SADDLEBAG_DATABASE", "MyDataBase"); // Name of saddlebag database
// Paladin Mounts
// SetLocalInt(GetModule(), "X3_HORSE_PALADIN_USE_PHB", TRUE); // Paladin mount summoning duration as Player's Handbook
// SetLocalInt(GetModule(), "X3_MOUNT_NO_REST_DESPAWN", TRUE); // Paladin mount does not despawn on rest
// SetLocalString(GetModule(), "X3_PALMOUNT_SUMMONOVR", "MyScript"); // Custom summoning script
// SetLocalString(GetModule(), "X3_EXTEND_PALMOUNT", "MyScript"); // Custom post-mount script
// SetLocalString(GetModule(), "X3_EXTEND_PALDMOUNT", "MyScript"); // Custom post-dismount script
// Mounting System
// SetLocalInt(GetModule(), "X3_NO_MOUNT_COMMANDABLE", TRUE); // Allow horse and rider to be commandable during mount / dismount
// SetLocalInt(GetModule(), "X3_HORSE_ACT_VS_DELAY", TRUE); // Use actions rather than delays when mounting/dismounting
// SetLocalFloat(GetModule(), "fX3_MOUNT_DELAY", 2.0); // Mount animation additional time in seconds
// SetLocalFloat(GetModule(), "fX3_TIMEOUT_TO_MOUNT", 6.0); // Maximum time allowed to run to horse in seconds
SetLocalInt(GetModule(), "bX3_MOUNT_NO_ZAXIS", TRUE); // Enabled in official Bioware script
// SetLocalFloat(GetModule(), "fX3_FREQUENCY", 2.0); // Frequency of pathfinding during run to horse in seconds
// Database
// SetLocalInt(GetModule(), "X3_ENABLE_MOUNT_DB", TRUE); // Enable data base functions
}
// Fix for the save/load bug with unattached NPCs
// Calls to this function are commented out above, because they must be bespoke for each module.
void bhLoadBugFix(string sNPC_Tag)
{
object oNPC = GetObjectByTag(sNPC_Tag);
location oLoc = GetLocation(oNPC);
int nHench = 1;
object oHench;
oHench = GetHenchman(oNPC, nHench);
while (GetIsObjectValid(oHench))
{
SetAILevel(oHench, AI_LEVEL_HIGH);
AssignCommand(oHench, JumpToLocation(oLoc));
oHench = GetHenchman(oNPC, ++nHench);
}
}