Initial commit
Initial commit.
This commit is contained in:
91
_module/nss/picklock.nss
Normal file
91
_module/nss/picklock.nss
Normal file
@@ -0,0 +1,91 @@
|
||||
//Script gives experience points to a PC who picks a lock.
|
||||
//Place this script in the OnUnLock Event of the door, chest, etc.
|
||||
//They must not have key in inventory for it to work.
|
||||
|
||||
//Note: Although I arrived at this idea independently, I later
|
||||
//found a similar script on NWN Vault to give xp when a trap
|
||||
//is disarmed. This script was written by Velmar. I give credit
|
||||
//to a like minded individual. :)
|
||||
|
||||
//VARIABLES:
|
||||
//
|
||||
//nExp = XP to be given
|
||||
//oPC = PC who unlocked object
|
||||
//oItem = variable to check through oPC's inventory
|
||||
//sKey = string of key required to unlock object
|
||||
//oKey = key object required to unlock object
|
||||
//nDC = DC to unlock object
|
||||
//nAlreadyPicked = local integer on calling object to prevent PC
|
||||
// from locking object and picking to gain xp
|
||||
// repeatedly
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
//VARIABLE DECLARATIONS----------------------------
|
||||
|
||||
int nExp = 0;
|
||||
object oPC = GetLastUnlocked();
|
||||
object oItem = GetFirstItemInInventory(oPC);
|
||||
string sKey = GetTrapKeyTag(OBJECT_SELF);
|
||||
object oKey = GetObjectByTag(sKey);
|
||||
int nDC = GetLockUnlockDC(OBJECT_SELF);
|
||||
int nKeyAssociated = TRUE;
|
||||
int nAlreadyUnlocked = FALSE;
|
||||
|
||||
//if object's lock has already been unlocked before, don't give xp
|
||||
|
||||
nAlreadyUnlocked = GetLocalInt(OBJECT_SELF,"AlreadyUnlocked");
|
||||
|
||||
if (nAlreadyUnlocked == TRUE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//Regardless of whether lock was just picked or key was used,
|
||||
//localint "AlreadyUnlocked" will be set to indicate unlocking.
|
||||
|
||||
SetLocalInt(OBJECT_SELF,"AlreadyUnlocked",TRUE);
|
||||
|
||||
//if oKey is OBJECT_INVALID then no key is associated with object
|
||||
|
||||
if (oKey == OBJECT_INVALID)
|
||||
{
|
||||
nKeyAssociated = FALSE;
|
||||
}
|
||||
|
||||
//If a key is associated with the door, check oPC's inventory for the key
|
||||
//If oPC has key, return from script
|
||||
|
||||
while (oItem != OBJECT_INVALID && nKeyAssociated == TRUE)
|
||||
{
|
||||
if (oItem == oKey)
|
||||
{
|
||||
return;
|
||||
}
|
||||
oItem = GetNextItemInInventory(oPC);
|
||||
}
|
||||
//The amount of experience given will depend on DC of the lock.
|
||||
//This section is adjustable to suit level of XP required.
|
||||
// put similar xp from traps award
|
||||
int iXPawarddc = (GetLockUnlockDC(OBJECT_SELF) *2);
|
||||
// Multiplies the Trap Disarm DC by 8
|
||||
|
||||
int iXPaward = (iXPawarddc -((GetHitDice(oPC)-1)*2));
|
||||
// Subtracts 8 for every level -1 of the pc from the XP award (this way 1st level Pcs get full xp).
|
||||
|
||||
SendMessageToPC( (oPC ),"Unlocked");
|
||||
// Sends a message to the PC letting them Know that the trap was disarmed.
|
||||
|
||||
if (iXPaward >= 1)
|
||||
// checks to make sure that the xp award is at least 1.
|
||||
|
||||
GiveXPToCreature(oPC, iXPaward);
|
||||
// If the XP reward is at least 1 then give the PC a reward.
|
||||
|
||||
else
|
||||
// If the XP award is less then 1.
|
||||
|
||||
|
||||
GiveXPToCreature(oPC, 1);
|
||||
}
|
Reference in New Issue
Block a user