REO-EE/_module/nss/nwnx_funcs_w.nss
Jaysyn904 f82740bbbd Initial commit
Initial commit
2024-02-22 13:22:03 -05:00

1970 lines
92 KiB
Plaintext
Raw Permalink Blame History

#include "nwnx_funcs_effst"
const int LV_TYPE_INT = 1;
const int LV_TYPE_FLT = 2;
const int LV_TYPE_STR = 3;
const int LV_TYPE_OBJ = 4;
const int LV_TYPE_LOC = 5;
const int EVENT_CREATURE_HEARTBEAT =0;
const int EVENT_CREATURE_PERCEPTION =1;
const int EVENT_CREATURE_SPELLCASTAT =2;
const int EVENT_CREATURE_ATTACKED =3;
const int EVENT_CREATURE_DAMAGED =4;
const int EVENT_CREATURE_DISTURBED =5;
const int EVENT_CREATURE_ENDCOMBAT =6;
const int EVENT_CREATURE_DIALOG =7;
const int EVENT_CREATURE_SPAWN =8;
const int EVENT_CREATURE_RESTED =9;
const int EVENT_CREATURE_DEATH =10;
const int EVENT_CREATURE_USERDEFINDED =11;
const int EVENT_CREATURE_BLOCKED =12;
const int EVENT_AREA_HEARTBEAT =0;
const int EVENT_AREA_USERDEFINED =1;
const int EVENT_AREA_ENTER =2;
const int EVENT_AREA_EXIT =3;
const int EVENT_PLACEABLE_CLOSED =0;
const int EVENT_PLACEABLE_DAMAGED =1;
const int EVENT_PLACEABLE_DEATH =2;
const int EVENT_PLACEABLE_DISARM =3;
const int EVENT_PLACEABLE_HEARTBEAT =4;
const int EVENT_PLACEABLE_DISTURBED =5;
const int EVENT_PLACEABLE_LOCK =6;
const int EVENT_PLACEABLE_ATTACKED =7;
const int EVENT_PLACEABLE_OPEN =8;
const int EVENT_PLACEABLE_SPELLCASTAT =9;
const int EVENT_PLACEABLE_TRAPTRIGGERED =10;
const int EVENT_PLACEABLE_UNLOCK =11;
const int EVENT_PLACEABLE_USED =12;
const int EVENT_PLACEABLE_USERDEFINED =13;
const int EVENT_PLACEABLE_DIALOG =14;
const int EVENT_PLACEABLE_CLICK =15;
const int EVENT_AOE_HEARTBEAT =0;
const int EVENT_AOE_USERDEFINED =1;
const int EVENT_AOE_ENTER =2;
const int EVENT_AOE_EXIT =3;
const int EVENT_DOOR_OPEN =0;
const int EVENT_DOOR_CLOSED =1;
const int EVENT_DOOR_DAMAGED =2;
const int EVENT_DOOR_DEATH =3;
const int EVENT_DOOR_DISARM =4;
const int EVENT_DOOR_HEARTBEAT =5;
const int EVENT_DOOR_LOCK =6;
const int EVENT_DOOR_ATTACKED =7;
const int EVENT_DOOR_SPELLCASTAT =8;
const int EVENT_DOOR_TRAPTRIGGERED =9;
const int EVENT_DOOR_UNLOCK =10;
const int EVENT_DOOR_USERDEFINED =11;
const int EVENT_DOOR_CLICK =12;
const int EVENT_DOOR_DIALOG =13;
const int EVENT_DOOR_FAILTOOPEN =14;
const int EVENT_ENCOUNTER_ENTERED =0;
const int EVENT_ENCOUNTER_EXIT =1;
const int EVENT_ENCOUNTER_HEARTBEAT =2;
const int EVENT_ENCOUNTER_EXHAUSTED =3;
const int EVENT_ENCOUNTER_USERDEFINED =4;
const int EVENT_MODULE_HEARTBEAT =0;
const int EVENT_MODULE_USRDEFINED =1;
const int EVENT_MODULE_MODLOAD =2;
const int EVENT_MODULE_MODSTART =3;
const int EVENT_MODULE_CLIENTENTR =4;
const int EVENT_MODULE_CLIENTLEAV =5;
const int EVENT_MODULE_ACTVTITEM =6;
const int EVENT_MODULE_ACQUIRITEM =7;
const int EVENT_MODULE_UNAQREITEM =8;
const int EVENT_MODULE_PLRDEATH =9;
const int EVENT_MODULE_PLRDYING =10;
const int EVENT_MODULE_SPAWNBTNDN =11;
const int EVENT_MODULE_PLRREST =12;
const int EVENT_MODULE_PLRLVLUP =13;
const int EVENT_MODULE_CUTSNABORT =14;
const int EVENT_MODULE_PLREQITM =15;
const int EVENT_MODULE_PLRUNEQITM =16;
const int EVENT_MODULE_PLRCHAT =17;
const int EVENT_STORE_OPENSTORE =0;
const int EVENT_STORE_CLOSESTORE =1;
const int EVENT_TRIGGER_HEARTBEAT =0;
const int EVENT_TRIGGER_ENTER =1;
const int EVENT_TRIGGER_EXIT =2;
const int EVENT_TRIGGER_USERDEFINED =3;
const int EVENT_TRIGGER_TRAPTRIGGERED =4;
const int EVENT_TRIGGER_DISARM =5;
const int EVENT_TRIGGER_CLICK =6;
const int ITEM_VALUE_IDENTIFIED = 1;
const int ITEM_VALUE_UNIDENTIFIED = 2;
const int ITEM_VALUE_ADDITIONAL = 3;
const int QUICKBAR_TYPE_INVALID = 0; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_ITEM = 1; // set/getquickslot: no
const int QUICKBAR_TYPE_SPELL = 2; // set/getquickslot: yes; Param#: 4; see struct quickslot_s;
const int QUICKBAR_TYPE_PARRY = 3; // set/getquickslot: yes; Param#: 1; iParam1 = 10
const int QUICKBAR_TYPE_FEAT = 4; // set/getquickslot: yes; Param#: 1; iParam1 = Feat id
const int QUICKBAR_TYPE_TALKTO = 6; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_ATTACK = 7; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_EMOTE = 8; // set/getquickslot: yes; Param#: 1; iParam1 = emote id
const int QUICKBAR_TYPE_MODE = 10; // set/getquickslot: yes; Param#: 1; iParam1 = mode id
const int QUICKBAR_TYPE_DM_CREATECREATURE = 11; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATEITEM = 12; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATEENCOUNTER = 13; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATEWAYPOINT = 14; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATETRIGGER = 15; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATEPORTAL = 16; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_CREATEPLACEABLE = 17; // set/getquickslot: no
const int QUICKBAR_TYPE_MACRO = 18; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_TOGGLEINVULNERABLE = 19; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_FORCEREST = 20; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_GOTO = 21; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_HEAL = 22; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_KILL = 23; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_TAKECONTROL = 24; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_TAKECONTROLFULLPOWERS = 25; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_GIVEGOLD = 27; // set/getquickslot: yes; Param#: 1; iParam1 = gold amount
const int QUICKBAR_TYPE_DM_TAKEGOLD = 28; // set/getquickslot: yes; Param#: 1; iParam1 = NEGATIVE gold amount
const int QUICKBAR_TYPE_DM_GIVEITEM = 29; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_TAKEITEM = 30; // set/getquickslot: no
const int QUICKBAR_TYPE_DM_GIVEXP = 31; // set/getquickslot: yes; Param#: 1; iParam1 = xp amount
const int QUICKBAR_TYPE_DM_TAKEXP = 32; // set/getquickslot: yes; Param#: 1; iParam1 = NEGATIVE xp amount
const int QUICKBAR_TYPE_DM_GIVELEVEL = 33; // set/getquickslot: yes; Param#: 1; iParam1 = number of levels
const int QUICKBAR_TYPE_DM_TAKELEVEL = 34; // set/getquickslot: yes; Param#: 1; iParam1 = NEGATIVE number of levels
const int QUICKBAR_TYPE_DM_LIMBO = 35; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_DM_TOGGLEAI = 36; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_POSSESSFAMILIAR = 38; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_EXAMINE = 40; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_BARTER = 41; // set/getquickslot: yes; Param#: 0
const int QUICKBAR_TYPE_ASSOCIATECOMMAND = 42; // set/getquickslot: yes; Param#: 1; iParam1 = command id
const int QUICKBAR_TYPE_CANCELPOLYMORPH = 43; // ??
const int QUICKBAR_TYPE_SPELLLIKEABILITY = 44; // set/getquickslot: yes; Param#: 1; basically the same as spell
const int QUICKBAR_TYPE_DM_SHIFTALIGNMENTGOOD = 45; // set/getquickslot: yes; Param#: 1; iParam1 = amount to shift towards allignment
const int QUICKBAR_TYPE_DM_SHIFTALIGNMENTEVIL = 46; // set/getquickslot: yes; Param#: 1; iParam1 = amount to shift towards allignment
const int QUICKBAR_TYPE_DM_SHIFTALIGNMENTLAWFUL = 47; // set/getquickslot: yes; Param#: 1; iParam1 = amount to shift towards allignment
const int QUICKBAR_TYPE_DM_SHIFTALIGNMENTCHAOTIC = 48; // set/getquickslot: yes; Param#: 1; iParam1 = amount to shift towards allignment
const int TIMINGBAR_LABEL_FLAGTRAP = 1;
const int TIMINGBAR_LABEL_RECOVERTRAP = 2;
const int TIMINGBAR_LABEL_DISARMTRAP = 3;
const int TIMINGBAR_LABEL_EXAMINETRAP = 4;
const int TIMINGBAR_LABEL_SETTRAP = 5;
const int TIMINGBAR_LABEL_REST = 6;
const int TIMINGBAR_LABEL_UNLOCK = 7;
const int TIMINGBAR_LABEL_LOCK = 8;
const int TIMINGBAR_LABEL_NONE = 9;
const int REGENERATION_ALL = 1;
const int REGENERATION_ITEM = 2;
const int REGENERATION_EFFECT = 3;
struct localvar_s {
int iType;
string sName;
object obj;
int nPos;
string sLabel;
string sCommand;
};
struct itemproperty_s {
int Type;
int SubType;
int Chance;
int CostTable;
int CostTablevalue;
int Param1;
int Param1Value;
};
struct MemorizedSpellSlot {
int id;
int ready, meta, domain;
};
struct levelstats_s {
int iClass;
int iHP;
int iSkillPoints;
int iAbility;
};
struct quickslot_s {
int iType; // see QUICKBAR_TYPE_* section above
int iClass; // only used with QUICKBAR_TYPE_SPELL. Is the class position (1-3), not class type! which will cast the spell
int iParam1; // see QUICKBAR_TYPE_* section above
int iMetaMagic; // only used with QUICKBAR_TYPE_SPELL. Values are the same as defined in nwscript for METAMAGIC_
// This is also used for Cleric Domain spells in which case iMetamagic is ored with 512.
// The following 2 strings are used with Macros (iType = 18) and DM Creator objects (iType = 11-17)
string sS1; //the label of the quickslot for Macros and DM Creator objects
string sS2; //for Macros this is the command, for DM Creator objects it's the ResRef of the object to be spawned
};
// Returns the object given by soID
// soID is a hex string, e.g.: 7FFFFFEF. It is not necessary to use leading zeros: EF = 000000EF;
object NWNXFuncs_StringToObject(string soID);
// Returns the total number of areas in the module;
int NWNXFuncs_GetAreaCount();
// returns the area in the modules area list given by iIndex
// iIndex is zero based
object NWNXFuncs_GetAreaByPosition(int iIndex);
// Returns the first area of the module.
// Use with NWNXFuncs_GetNextArea to loop through all areas
object NWNXFuncs_GetFirstArea();
// Returns the first area of the module.
// Use with NWNXFuncs_GetFirstArea to loop through all areas
// As long as GetFirstArea isn't called again the area index is preserved,
// so it is possible to use this with DelayCommand calls to get around TMI errors
object NWNXFuncs_GetNextArea();
// Returns the total number of Local Variables set on oObject
int NWNXFuncs_GetLocalVariableCount(object oObject);
// returns the type and name (as localvar_s struct) of the local variable at position iIndex
// iIndex is zero based
struct localvar_s NWNXFuncs_GetLocalVarByPosition(object oObject, int iVarPos);
// Returns the type and name (as localvar_s struct) of the first local variable on oObject
// Use with NWNXFuncs_GetNextLocalVar to loop through all local variables on an object
struct localvar_s NWNXFuncs_GetFirstLocalVariable(object oObject);
// Returns the type and name (as localvar_s struct) of the next local variable on oObject
// Use with NWNXFuncs_GetFirstLocalVar to loop through all local variables on an object
// As long as GetFirstLocalVar isn't called again the index of the variable is preserved,
// so it is possble to use this with DelayCommand calls to get around possible TMI errors
struct localvar_s NWNXFuncs_GetNextLocalVariable(struct localvar_s lv);
// Checks if oObject has a local variable with the name sVarName
// iVarType specifies the type of local variable to look for (LV_TYPE_*)
// The default (iVarType = 0) disregards type and find the first local variable with the specified name
// The return value is the type of variable (LV_TYPE_*) or zero if no local variable was found
int NWNXFuncs_GetHasLocalVariable(object oObject, string sVarName, int iVarType = 0);
// changes the SpellID (returned by GetEffectSpellID or GetEffectSpellIDInternal) of the last effect applied
// on oObject to iSpellID. If the last effect applied used EffectLinkEffects(...) this will affect
// all the effects linked together.
void NWNXFuncs_SetLastEffectSpellID(object oObject, int iSpellID);
// changes the Creator (returned by GetEffectCreator) of the last effect applied on oObject to oEffectCreator
// if sEffectCreator is specified as an 8 character hex string (e.g.: from ObjectToString) it is used instead of oEffectCreator
// If the last effect applied used EffectLinkEffects(...) this will affect all the effects linked together.
void NWNXFuncs_SetLastEffectCreator(object oObject, object oEffectCreator, string sEffectCreator = "");
// dumps some information about all the effects applied to oObject to the log file
void NWNXFuncs_DumpEffects(object oObject);
// dumps all local variables of an object to the log file
void NWNXFuncs_DumpLocals(object oObject);
// Sets the gold pieces of oObject to iGold.
// No notification is given to a player whose gold is changed.
void NWNXFuncs_SetGold(object oCreature, int iGold);
// Sets a base ability score iAbility (ABILITY_STRENGTH, ABILITY_DEXTERITY, etc) to iValue
// The range of iValue is 3 to 255
// bAdjustCurrentHitPoints is only used when Constitution is set: if false a potential increase in hitpoints
// will only affect oCreature's maximum hit points. The missing hit points can be regained the normal way: resting,
// healing, regeneration, etc.
void NWNXFuncs_SetAbilityScore(object oCreature, int iAbility, int iValue, int bAdjustCurrentHitPoints = 1);
// Changes a base ability score iAbility (ABILITY_STRENGTH, ABILITY_DEXTERITY, etc) by iValue
void NWNXFuncs_ModAbilityScore(object oCreature, int iAbility, int iValue, int bAdjustCurrentHitPoints = 1);
// Adds a feat to oObject's general featlist
// If iLevel is greater than 0 the feat is also added to the featlist for that level
void NWNXFuncs_AddFeat(object oCreature, int iFeat, int iLevel=0);
// Sets the amount of xp oObject currently has to iXP
// No notification is given to a player whose xp is changed
// This will not delevel a PC - they will keep their current levels - until they gain or lose xp in a "regular" way
void NWNXFuncs_SetXP(object oPC, int iXP);
// Set the racial type of oObject to iRace;
// Will not change the actual appearance of iObject
void NWNXFuncs_SetRace(object oCreature, int iRace);
// Sets the base AC for a given AC type
// Effectively, this is the base AC of the item (armour or shield) worn; or the Natural AC set in the toolset for a creature; ; does not make changes to any items themselves
// Valid values for iACType are:
// AC_ARMOUR_ENCHANTMENT_BONUS (base ac of the armor worn)
// AC_SHIELD_ENCHANTMENT_BONUS (base ac of the shield worn)
// AC_NATURAL_BONUS (base ac of a creature set in the toolset)
void NWNXFuncs_SetBaseAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Returns the base AC for a given AC type
// Effectively, this is the base AC of the item (armour or shield) worn; or the Natural AC set in the toolset for a creature
// See NWNXFuncs_SetBaseAC for iACType values
int NWNXFuncs_GetBaseAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Sets the AC bonus for a given AC type
// Effectively, this is the AC bonus of a worn item or from EffectACIncrease; does not make changes to any items themselves
// Valid values for iACType are:
// AC_ARMOUR_ENCHANTMENT_BONUS (highest bonus ac from an item with Armor AC)
// AC_SHIELD_ENCHANTMENT_BONUS (highest bonus ac from an item with Shield AC)
// AC_NATURAL_BONUS (highest bonus ac from an item with Natural AC)
// AC_DEFLECTION_BONUS (highest bonus ac from an item with Deflection AC)
// AC_DODGE_BONUS (highest bonus ac from an item with Dodge AC)
void NWNXFuncs_SetBonusAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Returns the AC bonus for a given AC type
// See NWNXFuncs_SetBonusAC for iACType values
int NWNXFuncs_GetBonusAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Sets the AC penalty for a given AC type
// See NWNXFuncs_SetBonusAC for iACType values
void NWNXFuncs_SetPenaltyAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Returns the AC penalty for a given AC type
// See NWNXFuncs_SetBonusAC for iACType values
int NWNXFuncs_GetPenaltyAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS);
// Sets the Skill Points saved during level-up
void NWNXFuncs_SetSavedSkillPoints(object oPC, int iSkillPoints, int nLevel=0);
// Returns the Skill Points saved during level-up
int NWNXFuncs_GetSavedSkillPoints(object oPC, int nLevel=0);
// Sets the Armor Check Penalty currently incured from wearing armor or a shield
// AC_ARMOUR_ENCHANTMENT_BONUS sets the penalty from armor
// AC_SHIELD_ENCHANTMENT_BONUS sets the penalty from a shield
// Does not actually modify the items themselves
// Value is reset when the respective item is unequipped or equipped
void NWNXFuncs_SetArmorCheckPenalty(object oCreature, int iPenalty, int iShield_Armor = AC_ARMOUR_ENCHANTMENT_BONUS);
// Returns the Armor Check Penalty currently incurred from wearing armor or a shield
int NWNXFuncs_GetArmorCheckPenalty(object oCreature, int iShield_Armor = AC_ARMOUR_ENCHANTMENT_BONUS);
// Returns the speed of oObject
// Values correspond with the ones in creaturespeed.2da
int NWNXFuncs_GetMovementRate(object oCreature);
// Sets the type of familiar oObject can summon
// Does not allow summoning of familiars without having the necessary feat
void NWNXFuncs_SetFamiliarType(object oCreature, int iFamiliarType);
// Sets the type of animal companion oObject can summon
// Does not allow summoning of animal companians without having the necessary feat
void NWNXFuncs_SetAnimalCompanion(object oCreature, int iAnimalCompanionType);
// Sets hitpoints gained at iLevel
void NWNXFuncs_SetHitPointsByLevel(object oCreature, int iHP, int iLevel);
// Changes the hitpoints gained at iLevel by iHPMod
void NWNXFuncs_ModHitPointsByLevel(object oCreature, int iHPMod, int iLevel);
// Sets the amount of hitpoints oObject has currently to iHP
void NWNXFuncs_SetCurrentHitPoints(object oCreature, int iHP);
// Sets the amount of hitpoints oObject can maximally have to iHP
void NWNXFuncs_SetMaxHitPoints(object oCreature, int iHP);
// Set the saving throw bonus iSavingThrow of oObject to iValue;
void NWNXFuncs_SetSavingThrowBonus(object oCreature, int iSavingThrow, int iValue);
// Changes the saving throw bonus iSavingThrow of oObject by iValue;
void NWNXFuncs_ModSavingThrowBonus(object oCreature, int iSavingThrow, int iValue);
// Changes the skill ranks for iSkill on oObject to iValue
void NWNXFuncs_SetSkill(object oCreature, int iSkill, int iValue);
// Changes the skill ranks for iSkill on oObject by iValue
void NWNXFuncs_ModSkill(object oCreature, int iSkill, int iValue);
// Changes the skill ranks for iSkill gained at iLevel on oObject to iValue
void NWNXFuncs_SetSkillByLevel(object oCreature, int iSkill, int iValue, int iLevel);
// Changes the skill ranks for iSkill gained at iLevel on oObject by iValue
void NWNXFuncs_ModSkillByLevel(object oCreature, int iSkill, int iValue, int iLevel);
// Changes the internal size of a creature to iSize (CREATURE_SIZE_*)
// This does not change the physical size of the creature model as seen in game
void NWNXFuncs_SetCreatureSize(object oCreature, int iSize = CREATURE_SIZE_MEDIUM);
// Returns the total weight of all items equiped by oCreature in tenth of pounds
int NWNXFuncs_GetEquippedWeight(object oCreature);
// Changes the number of saved skillpoints by iSkillPoints
void NWNXFuncs_ModSavedSkillPoints(object oPC, int iSkillPoints, int nLevel=0);
// Removes a feat from a creature
// If bRemoveFromLevel is FALSE, the feat will only be removed from the general feat list (the feat lists for each character level are ignored;
// If bRemoveFromLevel is TRUE, the feat will be removed from the general feat list and from the feat list for the appropriate level
// If found, the feat will be removed from the general feat list whether it exists in a level feat list or not, and vice versa
int NWNXFuncs_RemoveFeat(object oCreature, int iFeat, int bRemoveFromLevel=TRUE);
// Checks if oCreature inherently knows a feat (as opposed to a feat given from an equipped item)
// Returns FALSE if oCreature does not know the feat, TRUE if the feat is known
// The return value (if greater than 0) also denotes the position of the feat in the general feat list offset by +1
int NWNXFuncs_GetFeatKnown(object oCreature, int iFeat);
// Retuns a delimited list of all the known feats of oCreature
// Not sure how useful this is in general but I'll be using it to enter it into mysql
// GetAllKnownFeats can fail if oCreature has too many feats (more precisely if the returned string would be longer than 2048 characters)
// Worst case scenario (all feats are above row 10000) is about 340 feats for the default delimiter
string NWNXFuncs_GetAllKnownFeats(object oCreature, string sDelimiter=",");
// Removes all feats from oCreature's general feat list (oCreature will not have any feats in game)
// If bClearLevelFeatLists is true it will remove all the feats from the level stat lists too
void NWNXFuncs_RemoveAllFeats(object oCreature, int bClearLevelFeatLists=1);
// Sets all skills of oCreature to zero
void NWNXFuncs_SetAllSkillsToZero(object oCreature);
// Adds iSpell (SPELL_*) to oCreature's list of spells
// iClass is the type of class to add the spell for (CLASS_TYPE_*)
// While iSpellLevel does not seem to matter for memorizing and casting the spell (the spell will show up at the right spell level in
// the spellbook, it might potentially cause problems selecting new spells
// If iCharacterLevel is greater than zero, the spell will be added to the Spells Known list for that level
// Only works for spell casting classes that need to select which spells they want to know (Sorcerer, Wizard, Bard)
void NWNXFuncs_AddKnownSpell(object oCreature, int iClass, int iSpellLevel, int iSpell, int iCharacterLevel=0);
// Removes a spell from a creature
// If bRemoveFromLevel is FALSE, the spell will only be removed from the class spell list (the spell lists for each character level are ignored;
// If bRemoveFromLevel is TRUE, the spell will be removed from the class spell list and from the spell list for the appropriate level
// If found, the spell will be removed from the class spell list whether it exists in a level spell list or not, and vice versa
// Only works for spell casting classes that need to select which spells they want to know (Sorcerer, Wizard, Bard)
void NWNXFuncs_RemoveKnownSpell(object oCreature, int iClass, int iSpell, int bRemoveFromLevel=TRUE);
// Returns TRUE if one of oCreature's classes knows the spell iSpell at a specific spell level
// If iSpellLevel is left at the default value (-1) all of iClass's spell levels are searched for the spell and
// the return value is the spell level +1 at which the spell was found or FALSE if the spell was not found
// Only works for spell casting classes that need to select which spells they want to know (Sorcerer, Wizard, Bard)
int NWNXFuncs_GetKnowsSpell(object oCreature, int iClass, int iSpell, int iSpellLevel=-1);
// Removes all known spells for a class
// Only works for spell casting classes that need to select which spells they want to know (Sorcerer, Wizard, Bard)
void NWNXFuncs_RemoveAllSpells(object oCreature, int iClass);
// Sets the Base Attack Bonus Override of oObject to iBaB
// If BAB Override is greater than zero GetBaseAttackBonus will return this instead
// The original BAB can be restored by setting the BAB Override to zero
// The range of iBab is 0 to 254
// Unfortunately this is not a permanent setting as the game calculates the BaB every time a player logs in
void NWNXFuncs_SetBaseAttackBonusOverride(object oCreature, int iBaB);
// Modifies the Bab override of oCreature by iBab
void NWNXFuncs_ModBaseAttackBonusOverride(object oCreature, int iBaB);
// Returns the current BaB override of oCreature
// If BAB Override is greater than zero this will return the same as GetBaseAttackBonus()
int NWNXFuncs_GetBaseAttackBonusOverride(object oCreature);
// Sets the weight of an item;
// iWeight is in tenth of pounds (iWeight = 100 will set the item weight to 10.0; fractions are not displayed in game)
void NWNXFuncs_SetItemWeight(object oItem, int iWeight);
// Sets one of 3 different item values, determined by iType
// The value of an (identified) item is Identified Value + Additional Cost/Value
// ITEM_VALUE_IDENTIFIED: The item value when the item is identified. If bZeroAdditionalCost is TRUE, the additional cost of the item will be set to zero. (just to save a function call)
// ITEM_VALUE_UNIDENTIFIED: The value of an item as long as it is unidentified
// ITEM_VALUE_ADDITIONAL: An additional value which is added to the identified value of the item (This was used in the toolset since there was no other way of
// directly adjusting the value of an item. Can be set beyond the 32,000 allowed in the toolset.
void NWNXFuncs_SetItemValue(object oItem, int iValue, int iType = ITEM_VALUE_IDENTIFIED, int bZeroAdditionalCost = TRUE);
// Returns one of 3 different item values, determined by iType
// ITEM_VALUE_IDENTIFIED: The item value when the item is identified.
// ITEM_VALUE_UNIDENTIFIED: The value of an item as long as it is unidentified
// ITEM_VALUE_ADDITIONAL: An additional value which is added to the identified value of the item.
int NWNXFuncs_GetItemValue(object oItem, int iType = ITEM_VALUE_ADDITIONAL);
// Set the charges an item has left.
// This can be used to set item charges up to 255 (the nwscript function limits this to 50).
void NWNXFuncs_SetItemCharges(object oItem, int iCharges);
// Sets either one of the two domains of a cleric to iDomain
// iDomain_1_2 can either be 1 or 2
void NWNXFuncs_SetDomain(object oCreature, int iDomain_1_2, int iDomain);
// Returns either one of the two domains of a cleric
// iDomain_1_2 can either be 1 or 2
int NWNXFuncs_GetDomain(object oCreature, int iDomain_1_2);
// Sets the specialist spell school of a Wizard
void NWNXFuncs_SetWizardSpecialization(object oCreature, int iSpecialization);
// Returns the specialist spell school of a Wizard
int NWNXFuncs_GetWizardSpecialization(object oCreature);
// Replaces a spell with another one.
// This will replace all occurences of iOldSpell with iNewSpell (in the ClassList as well as the LevelStatList)
void NWNXFuncs_ReplaceKnownSpell(object oCreature, int iClass, int iOldSpell, int iNewSpell);
// Returns the remaining spell slots (uses) oCreature has for a given class and spell level. (only applies to Bards and Sorcerers)
int NWNXFuncs_GetRemainingSpellSlots(object oCreature, int iClass, int iSpellLevel);
// Sets the remaining spell slots (uses) oCreature has for a given class and spell level. (only applies to Bards and Sorcerers)
// nSlots cannot exceed the maximum spell slots for that spell level
void NWNXFuncs_SetRemainingSpellSlots(object oCreature, int iClass, int iSpellLevel, int nSlots);
// Returns the maximum spell slots (uses) oCreature has for a given class and spell level. (only applies to Bards and Sorcerers)
int NWNXFuncs_GetMaxSpellSlots(object oCreature, int iClass, int iSpellLevel);
// Returns the number of bonus spell slots oCreature receives from items and effects (but not from high ability scores).
int NWNXFuncs_GetBonusSpellSlots(object oCreature, int iClass, int iSpellLevel);
// Returns information about a memorized spell (spell id, meta magic and whether the spell is ready to be cast)
struct MemorizedSpellSlot NWNXFuncs_GetMemorizedSpellSlot(object oCreature, int iClass, int iSpellLevel, int iIndex);
// Sets information about a spell in a memorized spell slot (spell id, meta magic and whether the spell is ready to be cast);
void NWNXFuncs_SetMemorizedSpellSlot(object oCreature, int iClass, int iSpellLevel, int iIndex, struct MemorizedSpellSlot spell);
// Sets all spells for the given spell levels to be ready to cast (as if the creature had rested)
void NWNXFuncs_RestoreMemorizedSpells(object oCreature, int iClass, int iFromSpellLevel = 0, int iToSpellLevel = 9);
// Returns the number of feats oCreature has (not including feats gained from items)
int NWNXFuncs_GetFeatCount(object oCreature);
// returns a string delimited by sDelimiter of all known spells of a given class and spell level
string NWNXFuncs_GetKnownSpells(object oCreature, int iClass, int iSpellLevel, string sDelimiter=",");
// returns the number of spells known for a given class and spell level
int NWNXFuncs_GetKnownSpellCount(object oCreature, int iClass, int iSpellLevel);
// Set an object's conversation resref (Creatures and Placeables only);
void NWNXFuncs_SetConversation(object oObject, string sConvo);
// Returns an object's conversation resref (Creatures and Placeables only);
string NWNXFuncs_GetConversation(object oObject);
// Sets the type of body bag a placeable or creature leaves behind on death
// iBodyBag values are in bodybag.2da
void NWNXFuncs_SetBodyBag(object oObject, int iBodyBag);
// Returns the type of body bag a placeable or creature leaves behind on death
int NWNXFuncs_GetBodyBag(object oObject);
// Returns a | delimited string of all feats oCreature gained at level iLevel
string NWNXFuncs_GetFeatsGainedAtLevel(object oCreature, int iLevel);
// Returns a | delimited string of the number of ranks oCreature gained to their skills at level iLevel
// the skills are in the same order as in skills.2da
string NWNXFuncs_GetSkillRanksGainedAtLevel(object oCreature, int iLevel);
// Returns a | delimited string of spells oCreature gained for a given spell level at level iLevel
string NWNXFuncs_GetSpellsGainedAtLevel(object oCreature, int iSpellLevel, int iLevel);
// returns Class, Hitpoints, Saved SkillPoints and which Ability was raised by oCreature at level iLevel
// levelstats.iAbility corresponds to the ABILITY_* constants and is 6 if no ability was raised at the given level
struct levelstats_s NWNXFuncs_GetStatsGainedAtLevel(object oCreature, int iLevel);
// Returns data for a given quickslot; 0-11 F1-F12 / 12-23 = SHIFT+(F1-F12) / 24-35 = CTRL+(F1-F12)
// Won't work for items
struct quickslot_s NWNXFuncs_GetQuickSlot(object oPC, int iSlot);
// Sets data for a given quickslot
// bUpdateGUI set to FALSE is useful when changing several quickslots at the same time.
// Each GUI update freezes the client for a fraction of a second, which isn't a problem if it happens only once
// but becomes VERY noticable for all 36 quickslots.
// Either call NWNXFuncs_SetQuickslot with bUpdateGUI = TRUE at the end of a series of changing quickslot or call
// NWNXFuncs_UpdateQuickbarGUI after all quickslots are set.
// Won't work for items
void NWNXFuncs_SetQuickSlot(object oPC, int iSlot, struct quickslot_s slotData, int bUpdateGUI=TRUE);
// Needs to be called after NWNXFuncs_SetQuickSlot has been used
// to actually update oPC's GUI with the changes
void NWNXFuncs_UpdateQuickbarGUI(object oPC);
// Changes oCreatures class type at iPosition(1-3)
void NWNXFuncs_SetClassByPosition(object oCreature, int iPosition, int iClass);
// Sets the gender of oCreature to iGender (GENDER_*)
// This does NOT change the creature appearance in any way, unless a player relogs or a creature is saved and respawned
void NWNXFuncs_SetGender(object oCreature, int iGender);
// Sets the modules current date and time
// The values for wtDate and wtTime are calculated in the following manner
// wtDate = YY * (28*12) + (MM-1) * 28 + DD-1 (where YY := Year, MM := Month, DD := Day)
// wtTime = hh * 1000*60*MinutesPerHour + mm * 60*1000 + ss * 1000 + ms (where hh := hour, mm := Minute, ss := Second, ms := Millisecond; MinutesPerHour is the value set in the toolset)
void NWNXFuncs_SetWorldDateTime(int wtDate, int wtTime, int P3=0);
// Returns the modules current date as an unsigned integer value
int NWNXFuncs_GetWorldDate();
// Returns the modules current time as an unsigned integer value
int NWNXFuncs_GetWorldTime();
// Returns the id of the faction oCreature belongs to
int NWNXFuncs_GetFactionID(object oCreature);
// Changes the faction id of oCreature to iFactionID
void NWNXFuncs_SetFactionID(object oCreature, int iFactionID);
// Returns the soundsset of oCreature (row number of soundset.2da)
int NWNXFuncs_GetSoundSetID(object oCreature);
// Changes the soundsset of oCreature to iSoundSetID (row number of soundset.2da)
void NWNXFuncs_SetSoundSetID(object oCreature, int iSoundSetID);
// Retuns the bonus to a saving throw for oCreature
// This is the additional bonus, usually set in the toolset for NPCs, not a bonus from items or effects
int NWNXFuncs_GetSavingThrowBonus(object oCreature, int iSavingThrow = SAVING_THROW_FORT);
// Puts oCreature into Limbo
// Can be Removed with JumpToLocation/Object
void NWNXFuncs_JumpCreatureToLimbo(object oCreature);
// Changes the level for oCreature's class at position iClassPos
// This should not be used on player characters to increase their level
// as it will crash the server once they log off
void NWNXFuncs_SetClassLevel(object oCreature, int iClassPos, int iLevel);
// Return the Damage Immunity (in percent) of oCreature against a specific Damage Type
// Will return Damage Vulnerability too, in which case the return value will be negative
int NWNXFuncs_GetDamageImmunity(object oCreature, int iDamageType=DAMAGE_TYPE_BLUDGEONING);
// Gets the highest spell id (last effect applied) of all effects applied to oObject
// meant to work in conjunction with SetEffectSpellIDByEffectID / SetCreatorByEffectID
int NWNXFuncs_GetHighestEffectID(object oObject);
//*
// The following functions are for NWNXFuncs_GetFirst_NextEffectInternal loops only and should not be
// used within a reguler GetFirst/NextEffect loop
//*
// Cycles through the effects of oObject
// if bExposedOnly is true this function only cycles through effect which are returned
// by the "real" GetFirst/NextEffect. Otherwise it includes effects not exposed to scripts
// Do NOT add or remove effects in a NWNXFuncs_GetFirst/GetNextEffectInternal loop!
// instead use NWNXFuncs_QueueRemoveEffectInternal to add an effect to the removal queue and
// NWNXFuncs_RemoveQueuedEffectsInternal after the loop is done to remove the effects.
// NWNXFuncs_GetFirstEffectInternal will empty an existing queue, but not remove any effects
// Both functions return FALSE if no (more) effects could be found, TRUE if they found an effect
// The actual effect is stored internally and all other functions to manipulate an effect or return data from it
// use this internal effect and therefore don't require an object as a paramter.
// (They actually use OBJECT_SELF but it could be any valid object.)
int NWNXFuncs_GetFirstEffectInternal(object oObject, int bExposedOnly = FALSE);
int NWNXFuncs_GetNextEffectInternal(object oObject);
// Returns the remaining duration in milliseconds of the effect on oObject currently selected by NWNXFuncs_GetFirst/NextEffectInternal
// Uses the current effect from NWNXFuncs_GetFirst/NextEffectInternal
int NWNXFuncs_GetEffectRemainingDurationInternal();
// Returns the Integers associated with an effect as a <20> separated string
// Uses the current effect from NWNXFuncs_GetFirst/NextEffectInternal
// These integers are usually the Parameters from the create Effect functions
// e.g.: For EffectAbilityIncrease(ABILITY_DEXTERITY, 7) GetEffectIntegers would return 1<>7<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>
// Most (all) effects seem to have 8 integers associated with them, whether they have any meaning or not
// Returns an empty string if an error occured
string NWNXFuncs_GetEffectIntegersInternal();
// Returns a specific Integer associated with an effect
// Uses the current effect from NWNXFuncs_GetFirst/NextEffectInternal
// nNthInteger starts at 0 (for the first integer)
// Returns -1 on error
int NWNXFuncs_GetEffectIntegerInternal(int nNthInteger);
// Changes the Integer values associated with an effect
// Uses the current effect from NWNXFuncs_GetFirst/NextEffectInternal
// nNthInteger starts at 0 (for the first integer)
// Changing integers values doesn't necessarily propagate through all values affected by the original effect.
// e.g.: Changing the strength bonus (2nd int) from EffectAbilityIncrease(ABILITY_STRENGTH, ...) will change the Strength score
// but won't update the Attack Bonus or Damage
// Since most (all) effects have at least 8 integer values associated with them, the unused ones could be used to store additional custom information
void NWNXFuncs_SetEffectIntegerInternal(int nNthInteger, int iIntValue);
// Returns the id of an effect
// Uses the current effect from NWNXFuncs_GetFirst/NextEffectInternal
int NWNXFuncs_GetEffectIDInternal();
// The following 5 functions do exactly the same as their regular script counterparts
// but can be used in a NWNXFuncs_GetFirst/NextEffectInternal loop without having to run a GetFirst/GetNext alongside it
int NWNXFuncs_GetEffectTypeInternal(int bRealType = TRUE);
int NWNXFuncs_GetEffectSubTypeInternal();
string NWNXFuncs_GetEffectCreatorInternal();
int NWNXFuncs_GetEffectSpellIdInternal();
int NWNXFuncs_GetEffectDurationTypeInternal();
// Queues the current effect of an NWNXFuncs_GetFirst/NextEffectInternal loop for removal
// Calling NWNXFuncs_GetFirstEffectInternal will empty the queue, but not remove any effects
void NWNXFuncs_QueueRemoveEffectInternal();
// To be used AFTER an NWNXFuncs_GetFirst/NextEffectInternal loop.
// Removes all queued effects
// Calling NWNXFuncs_GetFirstEffectInternal will empty the queue, but not remove any effects
void NWNXFuncs_RemoveQueuedEffectsInternal(object oObject);
//*
// The following functions are for can be used inside a regular GetFirst/GetNextEffect loop
// and do the same as the "internal" versions; With the exception of NWNXFuncs_GetEffectRealType, which
// always returns the "internal" effect type
// However, they invalidate a NWNXFuncs_GetFirst/NextEffectInternal loop
//*
string NWNXFuncs_GetEffectIntegers(object oObject);
int NWNXFuncs_GetEffectInteger(object oObject, int nNthInteger);
void NWNXFuncs_SetEffectInteger(object oObject, int nNthInteger, int iIntValue);
float NWNXFuncs_GetEffectRemainingDuration(object oObject);
int NWNXFuncs_GetEffectID(object oObject);
int NWNXFuncs_GetEffectRealType(object oObject);
// Applies a visual effect at a specified location that only oPC can see
// This only works with instant visual effects (VFX_FNF_*, VFX_IMP_*)
void NWNXFuncs_ApplyVisualEffectForPC(object oPC, int nVFX, vector vPos);
// Changes the geometry of a trap created by a subsequent CreateTrapAtLocation(...) call
// Needs to be called before CreateTrapAtLocation!
// sGeometry is a list of x and y coordinates separated by <20> (the z coordinate is
// calculated automatically so that the trap is placed on the floor)
// The coordinates list also not include the the first coordinate pair (actual location
// of the trap), because the location parameter from CreateTrapAtLocation will
// be used for that.
// If bAbsoluteCoordinates is FALSE, all coordinates in the list are treated as being relative to
// the location of the trap.
// If bAbsoluteCoordinates is TRUE, the coordinates in the list are treated as absolute coordinates
// for the area.
// If an invalid (odd) number of coordinates is used, CreateTrapAtLocation behaves as usual
// and creates a square trap of the specified size
// See trap_example.nss for details on relative coordinates
// See trap_respawn.nss and trap_area_respwn.nss for details on absolute coordinates (and how
// to repawn traps that aren't square
void NWNXFuncs_SetCustomTrapGeometry(string sGeometry, int bAbsoluteCoordinates=FALSE);
// Applies a simple rotation to the coordinates created by NWNXFuncs_SetCustomTrapGeometry
// Needs to be called after NWNXFuncs_SetCustomTrapGeometry but before CreateTrapAtLocation
// This does NOT work when using Absolute Coordinates
// See trap_example.nss for details
void NWNXFuncs_RotateCustomTrapGeometry(float fAngle);
// Returns the geometry of a trigger type trap as a list of x and y coordinates, separated by <20>
// See trap_respawn.nss and trap_area_respwn.nss for details
string NWNXFuncs_GetTrapGeometry(object oTrap);
// Returns a row from surfacemat.2da indicating the material of the location given
// Return -1 on error
int NWNXFuncs_GetSurfaceMaterial(location lLoc);
// Changes the debug level (how much gets logged) for the plugin
// same as the option in nwnx.ini
void NWNXFuncs_SetDebugLevel(int iDebugLevel);
// Displays a timing bar for oPC (the same one that is displayed when resting or disarmaing a trap)
// iDuration is the time in milliseconds until the bar is filled
// iLabel is a reference (TIMINGBAR_LABEL_*) to what label is displayed above the timing bar. (Unforunately this
// doesn't directly reference a tlk entry)
// Unlike with a "regular" game event (rest, unlock, disarm trap, etc) the timing bar
// will not disappear when the bar is filled or the player takes any actions, but only
// if NWNXFuncs_StopTimingbar is called
void NWNXFuncs_StartTimingbar(object oPC, int iDuration, int iLabel);
// Removes a timing bar for oPC
void NWNXFuncs_StopTimingbar(object oPC);
// Set a creature's age
void NWNXFuncs_SetAge(object oCreature, int iAge);
// Changes the Tag of an object
void NWNXFuncs_SetTag(object oObject, string sTag);
// returns the name of an eventscript for an object
string NWNXFuncs_GetEventScript(object oObject, int iEvent);
// sets an eventscript for an object
void NWNXFuncs_SetEventScript(object oObject, string sScript, int iEvent);
// Clear the playerdata of logged off players
// This is rather experimental.
// This function deletes all the persistent player data the server stores
// when a player logs off: Location, local variables, effects, etc.
// This does not affect any scripted custom persistency between resets
// After a call to NWNXFuncs_ClearPlayerTURDs the server will essentially
// behave as if it had been reset when player logon's are concerened.
void NWNXFuncs_ClearPlayerTURDs();
// Sets the class type taken at a specific level
void NWNXFuncs_SetClassByLevel(object oCreature, int iClass, int iLevel);
// Replaces one class of a creature with another
// including classes in the level statlist of the creature
void NWNXFuncs_ReplaceClass(object oCreature, int iOldClass, int iNewClass);
// Updates the character sheet of a player
// Most of the information on the char sheet is just for display purposes and the
// actual values used (e.g. for combat) are recalculated when needed.
// This function "resyncs" the charsheet with the real values should they go out
// of sync (can happen with NWNXFuncs_ReplaceClass)
void NWNXFuncs_UpdateCharacterSheet(object oPC);
// Returns a custom effect as defined by the gameeffect_s struct (see nwnx_funcs_effst.nss and nwnx_funcs_eff.nss)
effect NWNXFuncs_EffectCustomEffect(struct gameeffect_s e);
// Returns the duration subtype of the current effect in a GetFirst/NextEffect loop
int NWNXFuncs_GetEffectSubType(object oObject);
// Boots a PC displaying a tlk entry rather than the standard "You have been booted"
void NWNXFuncs_BootPCWithMessage(object oPC, int iTlkEntry);
// Get Information about an itemproperty
float NWNXFuncs_GetItemPropertyDuration(itemproperty ip);
float NWNXFuncs_GetItemPropertyDurationRemaining(itemproperty ip);
int NWNXFuncs_GetItemPropertyInteger(itemproperty ip, int nInt);
int NWNXFuncs_GetItemPropertySpellId(itemproperty ip);
// These don't do anything (yet)
void NWNXFuncs_SetItemPropertyInteger(itemproperty ip, int nInt, int iValue);
void NWNXFuncs_SetItemPropertySpellId(itemproperty ip, int iSpellID);
// Create a Custom ItemProperty
// Can be used to apply itemproperties which are defined via 2DAs (itempropdef.2da, iprp_*.2da, etc) but do not have scripting functions
itemproperty NWNXFuncs_ItemPropertyCustom(int iType, int iSubType, int iCostTableValue, int iParam1Value);
//**** Original work by virusman ****
const int VISIBILITY_TYPE_DEFAULT = 0;
const int VISIBILITY_TYPE_VISIBLE = 1;
const int VISIBILITY_TYPE_INVISIBLE = 2;
// Sets the visibility of oObject for everybody
void NWNXFuncs_SetVisibilityOverride(object oObject, int nVisibilityType);
// Sets whether oObject2 can see oObject1
void NWNXFuncs_SetVisibility(object oObject1, object oObject2, int nVisibility);
// Gets the visibility of oObject
int NWNXFuncs_GetVisibilityOverride(object oObject);
// Gets whether oObject2 can see oObject1
int NWNXFuncs_GetVisibility(object oObject1, object oObject2);
//**************************************
// Gets the amount of regeneration a creature currently possess
int NWNXFuncs_GetRegeneration(object oCreature, int nType=REGENERATION_ALL);
// Helper function to add overrides for specific immunities
// The override is simply a bitfield (integer)
// the last one (DEATH) would be 2^32 which a script INT cannot hold (max is 2^(32-1)) but Death has to be explicitly checked for anyways
// Overrides |= 2 << (iImmunity - 1)
int NWNXFuncs_ImmunityOverride(int Overrides, int iImmunity);
// Sets immunity overrides for a creature
void NWNXFuncs_SetImmunityOverride(object oCreature, int Override);
// Removes all immunity overrides for a creature
void NWNXFuncs_RemoveAllImmunityOverrides(object oCreature);
// Directly adds a single immunity override to a creature
void NWNXFuncs_AddImmunityOverride(object oCreature, int iImmunity);
// Remove a single immunity override from a creature
void NWNXFuncs_RemoveImmunityOverride(object oCreature, int iImmunity);
//Get the AutoRemoveKey flag from a door or placeable object
int NWNXFuncs_GetAutoRemoveKeyFlag(object oObject);
//Set the AutoRemoveKey flag from a door or placeable object
void NWNXFuncs_SetAutoRemoveKeyFlag(object oObject, int iFlag);
//Get the Destination Tag of an area transition (Door or Trigger)
string NWNXFuncs_GetDestinationTag(object oObject);
//Set the Destination Tag of an area transition (Door or Trigger)
void NWNXFuncs_SetDestinationTag(object oObject, string sTag);
//*******************************************************************************************************************
object NWNXFuncs_StringToObject(string soID) {
return GetLocalObject(OBJECT_SELF, "NWNX!FUNCS!STRINGTOOBJECT<43>"+soID);
}
object NWNXFuncs_GetFirstArea() {
return GetLocalObject(OBJECT_SELF, "NWNX!FUNCS!GETFIRSTAREA");
}
object NWNXFuncs_GetNextArea() {
return GetLocalObject(OBJECT_SELF, "NWNX!FUNCS!GETNEXTAREA");
}
object NWNXFuncs_GetAreaByPosition(int iIndex) {
return GetLocalObject(OBJECT_SELF, "NWNX!FUNCS!GETAREABYPOSITION<4F>"+IntToString(iIndex));
}
struct localvar_s NWNXFuncs_GetFirstLocalVariable(object oObject) {
return NWNXFuncs_GetLocalVarByPosition(oObject, 0);
}
struct localvar_s NWNXFuncs_GetNextLocalVariable(struct localvar_s lv) {
return NWNXFuncs_GetLocalVarByPosition(lv.obj, lv.nPos + 1);
}
struct localvar_s NWNXFuncs_GetLocalVarByPosition(object oObject, int iVarPos) {
SetLocalString(oObject, "NWNX!FUNCS!GETLOCALVARBYPOSITION", IntToString(iVarPos)+ " ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
string sVar = GetLocalString(oObject, "NWNX!FUNCS!GETLOCALVARBYPOSITION");
DeleteLocalString(oObject, "NWNX!FUNCS!GETLOCALVARBYPOSITION");
struct localvar_s lv;
if (sVar != "") {
int iP = FindSubString(sVar, "<22>");
lv.iType = StringToInt(GetStringLeft(sVar, iP));
lv.sName = GetStringRight(sVar, GetStringLength(sVar)-(iP+1));
lv.obj = oObject;
lv.nPos = iVarPos;
}
return lv;
}
void NWNXFuncs_DumpEffects(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!PRINTEFFECTS", "-");
DeleteLocalString(oObject, "NWNX!FUNCS!PRINTEFFECTS");
}
void NWNXFuncs_DumpLocals(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!PRINTLOCALVARS", "-");
DeleteLocalString(oObject, "NWNX!FUNCS!PRINTLOCALVARS");
}
void NWNXFuncs_SetGold(object oCreature, int iGold) {
SetLocalString(oCreature, "NWNX!FUNCS!SETGOLD", IntToString(iGold));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETGOLD");
}
void NWNXFuncs_SetAbilityScore(object oCreature, int iAbility, int iValue, int bAdjustCurrentHitPoints = 1) {
SetLocalString(oCreature, "NWNX!FUNCS!SETABILITYSCORE", IntToString(iAbility)+" "+IntToString(iValue)+ " 0"+ " "+IntToString(bAdjustCurrentHitPoints));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETABILITYSCORE");
}
void NWNXFuncs_ModAbilityScore(object oCreature, int iAbility, int iValue, int bAdjustCurrentHitPoints = 1) {
SetLocalString(oCreature, "NWNX!FUNCS!SETABILITYSCORE", IntToString(iAbility)+" "+IntToString(iValue)+" 1"+ " "+IntToString(bAdjustCurrentHitPoints));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETABILITYSCORE");
}
int NWNXFuncs_GetBaseAttackBonusOverride(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETBABOVERRIDE", "---");
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETBABOVERRIDE"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETBABOVERRIDE");
return iRet;
}
void NWNXFuncs_SetBaseAttackBonusOverride(object oCreature, int iBaB) {
SetLocalString(oCreature, "NWNX!FUNCS!SETBABOVERRIDE", IntToString(iBaB)+ " 0");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETBABOVERRIDE");
}
void NWNXFuncs_ModBaseAttackBonusOverride(object oCreature, int iBaB) {
SetLocalString(oCreature, "NWNX!FUNCS!SETBABOVERRIDE", IntToString(iBaB)+ " 1");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETBABOVERRIDE");
}
void NWNXFuncs_AddFeat(object oCreature, int iFeat, int iLevel=0) {
if (!iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!ADDFEAT", IntToString(iFeat));
DeleteLocalString(oCreature, "NWNX!FUNCS!ADDFEAT");
}
else if(iLevel > 0) {
SetLocalString(oCreature, "NWNX!FUNCS!ADDFEATATLEVEL", IntToString(iLevel)+" "+IntToString(iFeat));
DeleteLocalString(oCreature, "NWNX!FUNCS!ADDFEATATLEVEL");
}
}
void NWNXFuncs_SetXP(object oPC, int iXP) {
SetLocalString(oPC, "NWNX!FUNCS!SETXP", IntToString(iXP));
DeleteLocalString(oPC, "NWNX!FUNCS!SETXP");
}
void NWNXFuncs_SetRace(object oCreature, int iRace) {
SetLocalString(oCreature, "NWNX!FUNCS!SETRACE", IntToString(iRace));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETRACE");
}
void NWNXFuncs_SetBaseAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!SETBASEAC", IntToString(iValue)+" "+IntToString(iACType));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETBASEAC");
}
int NWNXFuncs_GetBaseAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!GETBASEAC", IntToString(iACType));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETBASEAC"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETBASEAC");
return iRet;
}
void NWNXFuncs_SetBonusAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!SETBONUSAC", IntToString(iValue)+" "+IntToString(iACType));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETBONUSAC");
}
int NWNXFuncs_GetBonusAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!GETBONUSAC", IntToString(iACType));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETBONUSAC"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETBONUSAC");
return iRet;
}
void NWNXFuncs_SetPenaltyAC(object oCreature, int iValue, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!SETPENALTYAC", IntToString(iValue)+" "+IntToString(iACType));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETPENALTYAC");
}
int NWNXFuncs_GetPenaltyAC(object oCreature, int iACType = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!GETPENALTYAC", IntToString(iACType));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETPENALTYAC"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETPENALTYAC");
return iRet;
}
void NWNXFuncs_SetSavedSkillPoints(object oPC, int iSkillPoints, int nLevel=0) {
SetLocalString(oPC, "NWNX!FUNCS!SETSAVEDSKILLPOINTS", IntToString(iSkillPoints)+" 0 " +IntToString(nLevel));
DeleteLocalString(oPC, "NWNX!FUNCS!SETSAVEDSKILLPOINTS");
}
int NWNXFuncs_GetSavedSkillPoints(object oPC, int nLevel=0) {
SetLocalString(oPC, "NWNX!FUNCS!GETSAVEDSKILLPOINTS", IntToString(nLevel));
int iRet = StringToInt(GetLocalString(oPC, "NWNX!FUNCS!GETSAVEDSKILLPOINTS"));
DeleteLocalString(oPC, "NWNX!FUNCS!GETSAVEDSKILLPOINTS");
return iRet;
}
void NWNXFuncs_SetArmorCheckPenalty(object oCreature, int iPenalty, int iShield_Armor = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!SETARMORCHECKPENALTY", IntToString(iPenalty)+" "+IntToString(iShield_Armor));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETARMORCHECKPENALTY");
}
int NWNXFuncs_GetArmorCheckPenalty(object oCreature, int iShield_Armor = AC_ARMOUR_ENCHANTMENT_BONUS) {
SetLocalString(oCreature, "NWNX!FUNCS!GETARMORCHECKPENALTY", IntToString(iShield_Armor));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETARMORCHECKPENALTY"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETARMORCHECKPENALTY");
return iRet;
}
int NWNXFuncs_GetMovementRate(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETMOVEMENTRATE", "-");
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETMOVEMENTRATE"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETMOVEMENTRATE");
return iRet;
}
void NWNXFuncs_SetFamiliarType(object oCreature, int iFamiliarType) {
SetLocalString(oCreature, "NWNX!FUNCS!SETFAMILIARTYPE", IntToString(iFamiliarType));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETFAMILIARTYPE");
}
void NWNXFuncs_SetAnimalCompanion(object oCreature, int iAnimalCompanionType) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCOMPANIONTYPE", IntToString(iAnimalCompanionType));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCOMPANIONTYPE");
}
void NWNXFuncs_SetHitPointsByLevel(object oCreature, int iHP, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETHITPOINTSBYLEVEL", IntToString(iHP)+" "+IntToString(iLevel)+" 0");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETHITPOINTSBYLEVEL");
}
void NWNXFuncs_ModHitPointsByLevel(object oCreature, int iHPMod, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETHITPOINTSBYLEVEL", IntToString(iHPMod)+" "+IntToString(iLevel)+" 1");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETHITPOINTSBYLEVEL");
}
void NWNXFuncs_SetCurrentHitPoints(object oCreature, int iHP) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCURRENTHITPOINTS", IntToString(iHP));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCURRENTHITPOINTS");
}
void NWNXFuncs_SetMaxHitPoints(object oCreature, int iHP) {
SetLocalString(oCreature, "NWNX!FUNCS!SETMAXHITPOINTS", IntToString(iHP));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETMAXHITPOINTS");
}
void NWNXFuncs_SetSavingThrowBonus(object oCreature, int iSavingThrow, int iValue) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS", IntToString(iSavingThrow)+" "+IntToString(iValue)+" 0");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS");
}
void NWNXFuncs_ModSavingThrowBonus(object oCreature, int iSavingThrow, int iValue) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS", IntToString(iSavingThrow)+" "+IntToString(iValue)+" 1");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS");
}
void NWNXFuncs_SetSkill(object oCreature, int iSkill, int iValue) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSKILL", IntToString(iSkill)+" "+IntToString(iValue)+" 0");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSKILL");
}
void NWNXFuncs_ModSkill(object oCreature, int iSkill, int iValue) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSKILL", IntToString(iSkill)+" "+IntToString(iValue)+" 1");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSKILL");
}
void NWNXFuncs_SetSkillByLevel(object oCreature, int iSkill, int iValue, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSKILLBYLEVEL", IntToString(iSkill)+" "+IntToString(iValue)+" "+IntToString(iLevel)+" 0");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSKILLBYLEVEL");
}
void NWNXFuncs_ModSkillByLevel(object oCreature, int iSkill, int iValue, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSKILLBYLEVEL", IntToString(iSkill)+" "+IntToString(iValue)+" "+IntToString(iLevel)+" 1");
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSKILLBYLEVEL");
}
int NWNXFuncs_GetAreaCount() {
object oObject = GetModule();
SetLocalString(oObject, "NWNX!FUNCS!GETAREACOUNT", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETAREACOUNT"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETAREACOUNT");
return iRet;
}
int NWNXFuncs_GetLocalVariableCount(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETLOCALVARIABLECOUNT", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETLOCALVARIABLECOUNT"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETLOCALVARIABLECOUNT");
return iRet;
}
int NWNXFuncs_GetHasLocalVariable(object oObject, string sVarName, int iVarType = 0) {
SetLocalString(oObject, "NWNX!FUNCS!GETHASLOCALVARIABLE", sVarName+ " " +IntToString(iVarType));
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETHASLOCALVARIABLE"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETHASLOCALVARIABLE");
return iRet;
}
void NWNXFuncs_SetCreatureSize(object oCreature, int iSize = CREATURE_SIZE_MEDIUM) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCREATURESIZE", IntToString(iSize));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCREATURESIZE");
}
int NWNXFuncs_GetEquippedWeight(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETEQUIPPEDWEIGHT", "-");
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETEQUIPPEDWEIGHT"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETEQUIPPEDWEIGHT");
return iRet;
}
void NWNXFuncs_ModSavedSkillPoints(object oPC, int iSkillPoints, int nLevel=0) {
SetLocalString(oPC, "NWNX!FUNCS!SETSAVEDSKILLPOINTS", IntToString(iSkillPoints)+" 1 "+IntToString(nLevel));
DeleteLocalString(oPC, "NWNX!FUNCS!SETSAVEDSKILLPOINTS");
}
int NWNXFuncs_RemoveFeat(object oCreature, int iFeat, int bRemoveFromLevel=TRUE) {
SetLocalString(oCreature, "NWNX!FUNCS!REMOVEFEAT", IntToString(iFeat)+" "+IntToString(bRemoveFromLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!REMOVEFEAT"));
DeleteLocalString(oCreature, "NWNX!FUNCS!REMOVEFEAT");
return iRet;
}
int NWNXFuncs_GetFeatKnown(object oCreature, int iFeat) {
SetLocalString(oCreature, "NWNX!FUNCS!GETFEATKNOWN", IntToString(iFeat));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETFEATKNOWN"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETFEATKNOWN");
return iRet;
}
string NWNXFuncs_GetAllKnownFeats(object oCreature, string sDelimiter=",") {
// reserve enough space for the return string
// spacer = 256 bytes
string sSpacer;
int iCount = NWNXFuncs_GetFeatCount(oCreature);
iCount = (iCount*5+(iCount-1)*GetStringLength(sDelimiter))+1;
iCount = iCount / 256 +1;
for (iCount; iCount>0; iCount--) {
sSpacer += " ";
}
SetLocalString(oCreature, "NWNX!FUNCS!GETALLKNOWNFEATS", sDelimiter+GetStringLeft(sSpacer, GetStringLength(sSpacer)-GetStringLength(sDelimiter)));
string sRet = GetLocalString(oCreature, "NWNX!FUNCS!GETALLKNOWNFEATS");
DeleteLocalString(oCreature, "NWNX!FUNCS!GETALLKNOWNFEATS");
return sRet;
}
void NWNXFuncs_RemoveAllFeats(object oCreature, int bClearLevelFeatLists=1) {
SetLocalString(oCreature, "NWNX!FUNCS!CLEARFEATLIST", IntToString(bClearLevelFeatLists));
DeleteLocalString(oCreature, "NWNX!FUNCS!CLEARFEATLIST");
}
void NWNXFuncs_SetAllSkillsToZero(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!ZEROALLSKILLS", "-");
DeleteLocalString(oCreature, "NWNX!FUNCS!ZEROALLSKILLS");
}
void NWNXFuncs_AddKnownSpell(object oCreature, int iClass, int iSpellLevel, int iSpell, int iCharacterLevel=0) {
SetLocalString(oCreature, "NWNX!FUNCS!ADDKNOWNSPELL", IntToString(iClass)+" "+IntToString(iSpellLevel)+" "+IntToString(iSpell)+" "+IntToString(iCharacterLevel));
DeleteLocalString(oCreature, "NWNX!FUNCS!ADDKNOWNSPELL");
}
void NWNXFuncs_RemoveKnownSpell(object oCreature, int iClass, int iSpell, int bRemoveFromLevel=TRUE) {
SetLocalString(oCreature, "NWNX!FUNCS!REMOVEKNOWNSPELL", IntToString(iClass)+" "+IntToString(iSpell)+" "+IntToString(bRemoveFromLevel));
DeleteLocalString(oCreature, "NWNX!FUNCS!REMOVEKNOWNSPELL");
}
void NWNXFuncs_RemoveAllSpells(object oCreature, int iClass) {
SetLocalString(oCreature, "NWNX!FUNCS!REMOVEALLSPELLS", IntToString(iClass));
DeleteLocalString(oCreature, "NWNX!FUNCS!REMOVEALLSPELLS");
}
int NWNXFuncs_GetKnowsSpell(object oCreature, int iClass, int iSpell, int iSpellLevel=-1) {
SetLocalString(oCreature, "NWNX!FUNCS!GETKNOWSSPELL", IntToString(iClass)+" "+IntToString(iSpell)+" "+IntToString(iSpellLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETKNOWSSPELL"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETKNOWSSPELL");
return iRet;
}
void NWNXFuncs_SetItemWeight(object oItem, int iWeight) {
SetLocalString(oItem, "NWNX!FUNCS!SETITEMWEIGHT", IntToString(iWeight));
DeleteLocalString(oItem, "NWNX!FUNCS!SETITEMWEIGHT");
}
void NWNXFuncs_SetItemValue(object oItem, int iValue, int iType = ITEM_VALUE_IDENTIFIED, int bZeroAdditionalCost = TRUE) {
SetLocalString(oItem, "NWNX!FUNCS!SETITEMVALUE", IntToString(iValue)+" "+IntToString(iType)+" "+IntToString(bZeroAdditionalCost));
DeleteLocalString(oItem, "NWNX!FUNCS!SETITEMVALUE");
}
int NWNXFuncs_GetItemValue(object oItem, int iType = ITEM_VALUE_ADDITIONAL) {
SetLocalString(oItem, "NWNX!FUNCS!GETITEMVALUE", IntToString(iType));
int iRet = StringToInt(GetLocalString(oItem, "NWNX!FUNCS!GETITEMVALUE"));
DeleteLocalString(oItem, "NWNX!FUNCS!GETITEMVALUE");
return iRet;
}
void NWNXFuncs_SetItemCharges(object oItem, int iCharges) {
SetLocalString(oItem, "NWNX!FUNCS!SETITEMCHARGES", IntToString(iCharges));
DeleteLocalString(oItem, "NWNX!FUNCS!SETITEMCHARGES");
}
void NWNXFuncs_SetDomain(object oCreature, int iDomain_1_2, int iDomain) {
SetLocalString(oCreature, "NWNX!FUNCS!SETDOMAIN", IntToString(iDomain_1_2)+" "+IntToString(iDomain));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETDOMAIN");
}
int NWNXFuncs_GetDomain(object oCreature, int iDomain_1_2) {
SetLocalString(oCreature, "NWNX!FUNCS!GETDOMAIN", IntToString(iDomain_1_2));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETDOMAIN"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETDOMAIN");
return iRet;
}
void NWNXFuncs_SetWizardSpecialization(object oCreature, int iSpecialization) {
SetLocalString(oCreature, "NWNX!FUNCS!SETWIZARDSPECIALIZATION", IntToString(iSpecialization));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETWIZARDSPECIALIZATION");
}
int NWNXFuncs_GetWizardSpecialization(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETWIZARDSPECIALIZATION", "-");
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETWIZARDSPECIALIZATION"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETWIZARDSPECIALIZATION");
return iRet;
}
void NWNXFuncs_ReplaceKnownSpell(object oCreature, int iClass, int iOldSpell, int iNewSpell) {
SetLocalString(oCreature, "NWNX!FUNCS!REPLACEKNOWNSPELL", IntToString(iClass)+" "+IntToString(iOldSpell)+" "+IntToString(iNewSpell));
DeleteLocalString(oCreature, "NWNX!FUNCS!REPLACEKNOWNSPELL");
}
int NWNXFuncs_GetRemainingSpellSlots(object oCreature, int iClass, int iSpellLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!GETREMAININGSPELLSLOTS", IntToString(iClass)+" "+IntToString(iSpellLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETREMAININGSPELLSLOTS"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETREMAININGSPELLSLOTS");
return iRet;
}
void NWNXFuncs_SetRemainingSpellSlots(object oCreature, int iClass, int iSpellLevel, int nSlots) {
SetLocalString(oCreature, "NWNX!FUNCS!SETREMAININGSPELLSLOTS", IntToString(iClass)+" "+IntToString(iSpellLevel)+" "+IntToString(nSlots));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETREMAININGSPELLSLOTS");
}
int NWNXFuncs_GetMaxSpellSlots(object oCreature, int iClass, int iSpellLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!GETMAXSPELLSLOTS", IntToString(iClass)+" "+IntToString(iSpellLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETMAXSPELLSLOTS"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETMAXSPELLSLOTS");
return iRet;
}
int NWNXFuncs_GetBonusSpellSlots(object oCreature, int iClass, int iSpellLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!GETBONUSSPELLSLOTS", IntToString(iClass)+" "+IntToString(iSpellLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETBONUSSPELLSLOTS"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETBONUSSPELLSLOTS");
return iRet;
}
struct MemorizedSpellSlot NWNXFuncs_GetMemorizedSpellSlot(object oCreature, int iClass, int iSpellLevel, int iIndex) {
SetLocalString(oCreature, "NWNX!FUNCS!GETMEMORIZEDSPELLSLOT", IntToString(iClass)+" "+IntToString(iSpellLevel)+" "+IntToString(iIndex));
int nSpell = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETMEMORIZEDSPELLSLOT"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETMEMORIZEDSPELLSLOT");
struct MemorizedSpellSlot iRet;
if (nSpell >= 0) {
iRet.id = nSpell & 0xFFFF;
iRet.meta = (nSpell >> 16) & 0x7F;
iRet.ready = (nSpell >> 24) & 1;
} else
iRet.id = -1;
return iRet;
}
void NWNXFuncs_SetMemorizedSpellSlot(object oCreature, int iClass, int iSpellLevel, int iIndex, struct MemorizedSpellSlot spell) {
int P4 = (spell.id & 0xFFFF) | ((spell.meta& 0xFF) << 16) | (spell.ready << 24);
SetLocalString(oCreature, "NWNX!FUNCS!SETMEMORIZEDSPELLSLOT", IntToString(iClass)+" "+IntToString(iSpellLevel)+" "+IntToString(iIndex)+" "+IntToString(P4));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETMEMORIZEDSPELLSLOT");
}
void NWNXFuncs_RestoreMemorizedSpells(object oCreature, int iClass, int iFromSpellLevel = 0, int iToSpellLevel = 9) {
SetLocalString(oCreature, "NWNX!FUNCS!RESTOREMEMORIZEDSPELLS", IntToString(iClass)+" "+IntToString(iFromSpellLevel)+" "+IntToString(iToSpellLevel));
DeleteLocalString(oCreature, "NWNX!FUNCS!RESTOREMEMORIZEDSPELLS");
}
int NWNXFuncs_GetFeatCount(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETFEATCOUNT", " ");
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETFEATCOUNT"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETFEATCOUNT");
return iRet;
}
string NWNXFuncs_GetKnownSpells(object oCreature, int iClass, int iSpellLevel, string sDelimiter=",") {
if (GetStringLength(sDelimiter) > 9) return "-1";
// reserve enough space for the return string
// spacer = 256 bytes
string sSpacer;
int iCount = NWNXFuncs_GetKnownSpellCount(oCreature, iClass, iSpellLevel);
iCount = (iCount*5+(iCount-1)*GetStringLength(sDelimiter))+1;
iCount = iCount / 256 +1;
for (iCount; iCount>0; iCount--) {
sSpacer += " ";
}
SetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLS", IntToString(iClass)+" "+IntToString(iSpellLevel)+" "+sDelimiter+" "+sSpacer);
string sRet = GetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLS");
DeleteLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLS");
return sRet;
}
int NWNXFuncs_GetKnownSpellCount(object oCreature, int iClass, int iSpellLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLCOUNT", IntToString(iClass)+ " " +IntToString(iSpellLevel));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLCOUNT"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETKNOWNSPELLCOUNT");
return iRet;
}
void NWNXFuncs_SetConversation(object oObject, string sConvo) {
SetLocalString(oObject, "NWNX!FUNCS!SETCONVERSATION", sConvo);
DeleteLocalString(oObject, "NWNX!FUNCS!SETCONVERSATION");
}
string NWNXFuncs_GetConversation(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETCONVERSATION", " ");
string sRet = GetLocalString(oObject, "NWNX!FUNCS!GETCONVERSATION");
DeleteLocalString(oObject, "NWNX!FUNCS!GETCONVERSATION");
return sRet;
}
void NWNXFuncs_SetBodyBag(object oObject, int iBodyBag) {
SetLocalString(oObject, "NWNX!FUNCS!SETBODYBAG", IntToString(iBodyBag));
DeleteLocalString(oObject, "NWNX!FUNCS!SETBODYBAG");
}
int NWNXFuncs_GetBodyBag(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!SETBODYBAG", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!SETBODYBAG"));
DeleteLocalString(oObject, "NWNX!FUNCS!SETBODYBAG");
return iRet;
}
string NWNXFuncs_GetFeatsGainedAtLevel(object oCreature, int iLevel) {
int i=0;
string sSpacer;
for (i; i<4; i++) {
sSpacer += "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
}
SetLocalString(oCreature, "NWNX!FUNCS!GETFEATSGAINEDATLEVEL", IntToString(iLevel)+" "+sSpacer);
string sRet = (GetLocalString(oCreature, "NWNX!FUNCS!GETFEATSGAINEDATLEVEL"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETFEATSGAINEDATLEVEL");
return sRet;
}
string NWNXFuncs_GetSkillRanksGainedAtLevel(object oCreature, int iLevel) {
string sSpacer = "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
SetLocalString(oCreature, "NWNX!FUNCS!GETSKILLRANKSGAINEDATLEVEL", IntToString(iLevel)+" "+sSpacer);
string sRet = GetLocalString(oCreature, "NWNX!FUNCS!GETSKILLRANKSGAINEDATLEVEL");
DeleteLocalString(oCreature, "NWNX!FUNCS!GETSKILLRANKSGAINEDATLEVEL");
return sRet;
}
string NWNXFuncs_GetSpellsGainedAtLevel(object oCreature, int iSpellLevel, int iLevel) {
string sSpacer = "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
SetLocalString(oCreature, "NWNX!FUNCS!GETSPELLSGAINEDATLEVEL", IntToString(iLevel)+" "+IntToString(iSpellLevel)+" "+sSpacer);
string sRet = GetLocalString(oCreature, "NWNX!FUNCS!GETSPELLSGAINEDATLEVEL");
DeleteLocalString(oCreature, "NWNX!FUNCS!GETSPELLSGAINEDATLEVEL");
return sRet;
}
struct levelstats_s NWNXFuncs_GetStatsGainedAtLevel(object oCreature, int iLevel) {
string sSpacer = "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
SetLocalString(oCreature, "NWNX!FUNCS!GETSTATSGAINEDATLEVEL", IntToString(iLevel)+" "+sSpacer);
string sRet = GetLocalString(oCreature, "NWNX!FUNCS!GETSTATSGAINEDATLEVEL");
DeleteLocalString(oCreature, "NWNX!FUNCS!GETSTATSGAINEDATLEVEL");
struct levelstats_s ls;
int iP, iStart=0;
iP = FindSubString(sRet, "|", iStart); ls.iAbility = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "|", iStart); ls.iClass = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "|", iStart); ls.iHP = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "|", iStart); ls.iSkillPoints = StringToInt(GetSubString(sRet, iStart, iP-iStart));
return ls;
}
struct quickslot_s NWNXFuncs_GetQuickSlot(object oPC, int iSlot) {
SetLocalString(oPC, "NWNX!FUNCS!GETQUICKSLOT", IntToString(iSlot)+" --------------------------------------------------------------------------------------------------------------------------------");
string sRet = GetLocalString(oPC, "NWNX!FUNCS!GETQUICKSLOT");
PrintString(sRet);
DeleteLocalString(oPC, "NWNX!FUNCS!GETQUICKSLOT");
struct quickslot_s qs;
int iP, iStart=0;
iP = FindSubString(sRet, "<22>", iStart); iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart); qs.iType = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart); qs.iClass = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart); qs.iParam1 = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart); qs.iMetaMagic = StringToInt(GetSubString(sRet, iStart, iP-iStart)); iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart);
if (iP < 0) return qs;
qs.sS1 = GetSubString(sRet, iStart, iP-iStart) ; iStart = iP+1;
iP = FindSubString(sRet, "<22>", iStart); qs.sS2 = GetSubString(sRet, iStart, iP-iStart) ; iStart = iP+1;
return qs;
}
void NWNXFuncs_SetQuickSlot(object oPC, int iSlot, struct quickslot_s slotData, int bUpdateGUI=TRUE) {
string sQuickSlot = IntToString(iSlot)+" "+IntToString(slotData.iType)+" "+IntToString(slotData.iClass) +" "+IntToString(slotData.iParam1)+" "+IntToString(slotData.iMetaMagic)+" "+IntToString(bUpdateGUI);
switch(slotData.iType) {
case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: sQuickSlot += "<22>"+ slotData.sS1 +"<22>"+ slotData.sS2; break;
}
PrintString(sQuickSlot);
SetLocalString(oPC, "NWNX!FUNCS!SETQUICKSLOT", sQuickSlot);
DeleteLocalString(oPC, "NWNX!FUNCS!SETQUICKSLOT");
}
void NWNXFuncs_UpdateQuickbarGUI(object oPC) {
SetLocalString(oPC, "NWNX!FUNCS!UPDATEQUICKBAR", "-");
DeleteLocalString(oPC, "NWNX!FUNCS!UPDATEQUICKBAR");
}
void NWNXFuncs_SetClassByPosition(object oCreature, int iPosition, int iClass) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCLASSBYPOSITION", IntToString(iPosition)+" "+IntToString(iClass));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCLASSBYPOSITION");
}
void NWNXFuncs_SetGender(object oCreature, int iGender) {
SetLocalString(oCreature, "NWNX!FUNCS!SETGENDER", IntToString(iGender));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETGENDER");
}
void NWNXFuncs_SetWorldDateTime(int wtDate, int wtTime, int P3=0) {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!SETWORLDTIME", IntToString(wtDate)+" "+IntToString(wtTime)+" "+IntToString(P3));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!SETWORLDTIME");
}
int NWNXFuncs_GetWorldDate() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME", "1");
int ret = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME");
return ret;
}
int NWNXFuncs_GetWorldTime() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME", "0");
int ret = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETWORLDTIME");
return ret;
}
int NWNXFuncs_GetFactionID(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETFACTIONID", "-");
int ret = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETFACTIONID"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETFACTIONID");
return ret;
}
void NWNXFuncs_SetFactionID(object oCreature, int iFactionID) {
SetLocalString(oCreature, "NWNX!FUNCS!SETFACTIONID", IntToString(iFactionID));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETFACTIONID");
}
int NWNXFuncs_GetSoundSetID(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETSOUNDSETID", "-");
int ret = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETSOUNDSETID"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETSOUNDSETID");
return ret;
}
void NWNXFuncs_SetSoundSetID(object oCreature, int iSoundSetID) {
SetLocalString(oCreature, "NWNX!FUNCS!SETSOUNDSETID", IntToString(iSoundSetID));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETSOUNDSETID");
}
int NWNXFuncs_GetSavingThrowBonus(object oCreature, int iSavingThrow = SAVING_THROW_FORT) {
SetLocalString(oCreature, "NWNX!FUNCS!GETSAVINGTHROWBONUS", IntToString(iSavingThrow));
int ret = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETSAVINGTHROWBONUS"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETSAVINGTHROWBONUS");
return ret;
}
void NWNXFuncs_JumpCreatureToLimbo(object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!JUMPTOLIMBO", "-");
DeleteLocalString(oCreature, "NWNX!FUNCS!JUMPTOLIMBO");
}
void NWNXFuncs_SetClassLevel(object oCreature, int iClassPos, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCLASSLEVEL", IntToString(iClassPos)+" "+IntToString(iLevel));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCLASSLEVEL");
}
int NWNXFuncs_GetDamageImmunity(object oCreature, int iDamageType=DAMAGE_TYPE_BLUDGEONING) {
SetLocalString(oCreature, "NWNX!FUNCS!GETDAMAGEIMMUNITY", IntToString(iDamageType));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETDAMAGEIMMUNITY"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETDAMAGEIMMUNITY");
return iRet;
}
int NWNXFuncs_GetHighestEffectID(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETHIGHESTEFFECTID", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETHIGHESTEFFECTID"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETHIGHESTEFFECTID");
return iRet;
}
void NWNXFuncs_SetEffectCreatorByEffectID(object oObject, int iEffectID, string sNewCreatorID) {
SetLocalString(oObject, "NWNX!FUNCS!SETEFFECTCREATORBYEFFECTID", IntToString(iEffectID)+" "+sNewCreatorID);
DeleteLocalString(oObject, "NWNX!FUNCS!SETEFFECTCREATORBYEFFECTID");
}
void NWNXFuncs_SetEffectSpellIDByEffectID(object oObject, int iEffectID, int iNewSpellID) {
SetLocalString(oObject, "NWNX!FUNCS!SETEFFECTSPELLIDBYEFFECTID", IntToString(iEffectID)+" "+IntToString(iNewSpellID));
DeleteLocalString(oObject, "NWNX!FUNCS!SETEFFECTSPELLIDBYEFFECTID");
}
int NWNXFuncs_GetFirstEffectInternal(object oObject, int bExposedOnly = FALSE) {
SetLocalString(oObject, "NWNX!FUNCS!GETFIRSTALLEFFECT", IntToString(bExposedOnly));
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETFIRSTALLEFFECT"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETFIRSTALLEFFECT");
return iRet;
}
int NWNXFuncs_GetNextEffectInternal(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETNEXTALLEFFECT", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETNEXTALLEFFECT"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETNEXTALLEFFECT");
return iRet;
}
int NWNXFuncs_GetEffectRemainingDurationInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTREMAININGDURATION", "-");
int sRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTREMAININGDURATION"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTREMAININGDURATION");
return sRet;
}
string NWNXFuncs_GetEffectIntegersInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS", "-1 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
string sRet = GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS");
return sRet;
}
int NWNXFuncs_GetEffectIntegerInternal(int nNthInteger) {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS", IntToString(nNthInteger));
string sRet = GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTINTEGERS");
if (GetStringLength(sRet) == 0) return -1;
return StringToInt(sRet);
}
void NWNXFuncs_SetEffectIntegerInternal(int nNthInteger, int iIntValue) {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!SETALLEFFECTINTEGERS", IntToString(nNthInteger)+" "+IntToString(iIntValue));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!SETALLEFFECTINTEGERS");
}
int NWNXFuncs_GetEffectIDInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTID", "-");
int iRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTID"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTID");
return iRet;
}
int NWNXFuncs_GetEffectTypeInternal(int bRealType = TRUE) {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTTYPE", IntToString(bRealType));
int iRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTTYPE"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTTYPE");
return iRet;
}
int NWNXFuncs_GetEffectSubTypeInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSUBTYPE", "-");
int iRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSUBTYPE"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSUBTYPE");
return iRet;
}
string NWNXFuncs_GetEffectCreatorInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTCREATOR", "-");
string sRet = GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTCREATOR");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTCREATOR");
return sRet;
}
int NWNXFuncs_GetEffectSpellIdInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSPELLID", "-");
int iRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSPELLID"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTSPELLID");
return iRet;
}
int NWNXFuncs_GetEffectDurationTypeInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTDURATIONTYPE", "-");
int iRet = StringToInt(GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTDURATIONTYPE"));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETALLEFFECTDURATIONTYPE");
return iRet;
}
void NWNXFuncs_QueueRemoveEffectInternal() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!QUEUEREMOVEEFFECT", "-");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!QUEUEREMOVEEFFECT");
}
void NWNXFuncs_RemoveQueuedEffectsInternal(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!REMOVEQUEUEDEFFECTS", "-");
DeleteLocalString(oObject, "NWNX!FUNCS!REMOVEQUEUEDEFFECTS");
}
void NWNXFuncs_ApplyVisualEffectForPC(object oPC, int nVFX, vector vPos) {
SetLocalString(oPC, "NWNX!FUNCS!APPLYVFXFORPC", IntToString(nVFX)+" "+FloatToString(vPos.x)+" "+FloatToString(vPos.y)+" "+FloatToString(vPos.z));
DeleteLocalString(oPC, "NWNX!FUNCS!APPLYVFXFORPC");
}
string NWNXFuncs_GetEffectIntegers(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS", "-1 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
string sRet = GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS");
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS");
return sRet;
}
int NWNXFuncs_GetEffectInteger(object oObject, int nNthInteger) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS", IntToString(nNthInteger));
string sRet = GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS");
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTINTEGERS");
if (GetStringLength(sRet) == 0) return -1;
return StringToInt(sRet);
}
void NWNXFuncs_SetEffectInteger(object oObject, int nNthInteger, int iIntValue) {
SetLocalString(oObject, "NWNX!FUNCS!SETEFFECTINTEGERS", IntToString(nNthInteger)+" "+IntToString(iIntValue));
DeleteLocalString(oObject, "NWNX!FUNCS!SETEFFECTINTEGERS");
}
float NWNXFuncs_GetEffectRemainingDuration(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTREMAININGDURATION", "------------------------------");
float sRet = StringToFloat(GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTREMAININGDURATION"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTREMAININGDURATION");
return sRet;
}
int NWNXFuncs_GetEffectID(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTID", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTID"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTID");
return iRet;
}
int NWNXFuncs_GetEffectRealType(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTREALTYPE", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTREALTYPE"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTREALTYPE");
return iRet;
}
void NWNXFuncs_SetCustomTrapGeometry(string sGeometry, int bAbsolute=FALSE) {
sGeometry = IntToString(bAbsolute)+"<22>"+sGeometry;
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!SETCUSTOMGEOMETRY", sGeometry);
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!SETCUSTOMGEOMETRY");
}
void NWNXFuncs_RotateCustomTrapGeometry(float fAngle) {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!ROTATECUSTOMGEOMETRY", FloatToString(fAngle));
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!SETCUSTOMGEOMETRY");
}
string NWNXFuncs_GetTrapGeometry(object oTrap) {
string sSpacer = "--------------------------------------------------------------------------------------------------------------------------------";
sSpacer += sSpacer + sSpacer + sSpacer;
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETTRIGGERGEOMETRY", sSpacer);
string sRet = GetLocalString(OBJECT_SELF, "NWNX!FUNCS!GETTRIGGERGEOMETRY");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!GETTRIGGERGEOMETRY");
return sRet;
}
int NWNXFuncs_GetSurfaceMaterial(location lLoc) {
vector v = GetPositionFromLocation(lLoc);
object oArea = GetAreaFromLocation(lLoc);
SetLocalString(oArea, "NWNX!FUNCS!GETSURFACEMATERIAL", FloatToString(v.x)+" "+FloatToString(v.y)+" "+FloatToString(v.z));
int iRet = StringToInt(GetLocalString(oArea, "NWNX!FUNCS!GETSURFACEMATERIAL"));
DeleteLocalString(oArea, "NWNX!FUNCS!GETSURFACEMATERIAL");
return iRet;
}
void NWNXFuncs_StartTimingbar(object oPC, int iDuration, int iLabel) {
SetLocalString(oPC, "NWNX!FUNCS!TIMEBARSTART", IntToString(iDuration)+" "+IntToString(iLabel));
DeleteLocalString(oPC, "NWNX!FUNCS!TIMEBARSTART");
}
void NWNXFuncs_StopTimingbar(object oPC) {
SetLocalString(oPC, "NWNX!FUNCS!TIMEBARSTOP", "-");
DeleteLocalString(oPC, "NWNX!FUNCS!TIMEBARSTOP");
}
void NWNXFuncs_SetAge(object oCreature, int iAge) {
SetLocalString(oCreature, "NWNX!FUNCS!SETAGE", IntToString(iAge));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETAGE");
}
void NWNXFuncs_SetTag(object oObject, string sTag) {
SetLocalString(oObject, "NWNX!FUNCS!SETTAG", sTag);
DeleteLocalString(oObject, "NWNX!FUNCS!SETTAG");
}
void NWNXFuncs_SetEventScript(object oObject, string sScript, int iEvent) {
SetLocalString(oObject, "NWNX!FUNCS!SETEVENT", IntToString(iEvent)+" "+sScript);
DeleteLocalString(oObject, "NWNX!FUNCS!SETEVENT");
}
string NWNXFuncs_GetEventScript(object oObject, int iEvent) {
SetLocalString(oObject, "NWNX!FUNCS!GETEVENT", IntToString(iEvent)+" -----------------");
string sRet = GetLocalString(oObject, "NWNX!FUNCS!GETEVENT");
DeleteLocalString(oObject, "NWNX!FUNCS!GETEVENT");
return sRet;
}
void NWNXFuncs_ClearPlayerTURDs() {
SetLocalString(OBJECT_SELF, "NWNX!FUNCS!CLEARTURDLIST", "-");
DeleteLocalString(OBJECT_SELF, "NWNX!FUNCS!CLEARTURDLIST");
}
void NWNXFuncs_SetClassByLevel(object oCreature, int iClass, int iLevel) {
SetLocalString(oCreature, "NWNX!FUNCS!SETCLASSBYLEVEL", IntToString(iClass)+" "+IntToString(iLevel));
DeleteLocalString(oCreature, "NWNX!FUNCS!SETCLASSBYLEVEL");
}
void NWNXFuncs_ReplaceClass(object oCreature, int iOldClass, int iNewClass) {
SetLocalString(oCreature, "NWNX!FUNCS!REPLACECLASS", IntToString(iOldClass)+" "+IntToString(iNewClass));
DeleteLocalString(oCreature, "NWNX!FUNCS!REPLACECLASS");
}
void NWNXFuncs_UpdateCharacterSheet(object oPC) {
SetLocalString(oPC, "NWNX!FUNCS!UPDATECHARSHEET", ObjectToString(oPC));
DeleteLocalString(oPC, "NWNX!FUNCS!UPDATECHARSHEET");
}
/*
struct gameeffect_s {
int Type;
string Creator;
int SpellID;
int NumInts;
string Ints;
};
*/
effect NWNXFuncs_EffectCustomEffect(struct gameeffect_s e) {
object o = GetModule();
SetLocalInt(o, "NWNXFUNCS_CE", 1);
SetLocalInt(o, "NWNXFUNCS_CE_NUMINTS", e.NumInts);
SetLocalString(o, "NWNXFUNCS_CE_INTS", e.Ints);
SetLocalString(o, "NWNXFUNCS_CE_EFFECT", IntToString(e.Type)+" "+e.Creator+" "+IntToString(e.SpellID));
effect Eff = EffectAppear();
DeleteLocalInt(o, "NWNXFUNCS_CE");
DeleteLocalInt(o, "NWNXFUNCS_CE_NUMINTS");
DeleteLocalString(o, "NWNXFUNCS_CE_INTS");
DeleteLocalString(o, "NWNXFUNCS_CUSTOMEFFECT");
return Eff;
}
int NWNXFuncs_GetEffectSubType(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETEFFECTDURATIONSUBTYPE", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETEFFECTDURATIONSUBTYPE"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETEFFECTDURATIONSUBTYPE");
return iRet;
}
void NWNXFuncs_BootPCWithMessage(object oPC, int iTlkEntry) {
SetLocalString(oPC, "NWNX!FUNCS!BOOTPCWITHMESSAGE", IntToString(iTlkEntry));
DeleteLocalString(oPC, "NWNX!FUNCS!BOOTPCWITHMESSAGE");
}
float NWNXFuncs_GetItemPropertyDuration(itemproperty ip) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "1 0 0");
GetItemPropertyType(ip);
float fRet = GetLocalFloat(oModule, "NWNX_FUNCS_IPRP");
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
DeleteLocalFloat(oModule, "NWNX_FUNCS_IPRP");
return fRet;
}
float NWNXFuncs_GetItemPropertyDurationRemaining(itemproperty ip) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "6 0 0");
GetItemPropertyType(ip);
float fRet = GetLocalFloat(oModule, "NWNX_FUNCS_IPRP");
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
DeleteLocalFloat(oModule, "NWNX_FUNCS_IPRP");
return fRet;
}
int NWNXFuncs_GetItemPropertyInteger(itemproperty ip, int nInt) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "3 "+IntToString(nInt)+" 0");
int iRet = GetItemPropertyType(ip);
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
return iRet;
}
void NWNXFuncs_SetItemPropertyInteger(itemproperty ip, int nInt, int iValue) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "4 "+IntToString(nInt)+" "+IntToString(iValue));
GetItemPropertyType(ip);
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
}
int NWNXFuncs_GetItemPropertySpellId(itemproperty ip) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "2 0 0");
int iRet = GetItemPropertyType(ip);
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
return iRet;
}
void NWNXFuncs_SetItemPropertySpellId(itemproperty ip, int iSpellID) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", "5 "+IntToString(iSpellID)+" 0");
GetItemPropertyType(ip);
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
}
itemproperty NWNXFuncs_ItemPropertyCustom(int iType, int iSubType, int iCostTableValue, int iParam1Value) {
object oModule = GetModule();
SetLocalString(oModule, "NWNX_FUNCS_IPRP", IntToString(iType)+ " " +IntToString(iSubType)+ " " +IntToString(iCostTableValue)+ " " +IntToString(iParam1Value));
itemproperty ip = ItemPropertyNoDamage();
DeleteLocalString(oModule, "NWNX_FUNCS_IPRP");
return ip;
}
void NWNXFuncs_SetVisibilityOverride(object oObject, int nVisibilityType) {
SetLocalString(oObject, "NWNX!FUNCS!SET_VISIBILITY_OVERRIDE", IntToString(nVisibilityType));
DeleteLocalString(oObject, "NWNX!FUNCS!SET_VISIBILITY_OVERRIDE");
}
void NWNXFuncs_SetVisibility(object oObject1, object oObject2, int nVisibility) {
SetLocalString(oObject1, "NWNX!FUNCS!SET_VISIBILITY", ObjectToString(oObject2)+" "+IntToString(nVisibility));
DeleteLocalString(oObject1, "NWNX!FUNCS!SET_VISIBILITY");
}
int NWNXFuncs_GetVisibilityOverride(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GET_VISIBILITY_OVERRIDE", "'-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GET_VISIBILITY_OVERRIDE"));
DeleteLocalString(oObject, "NWNX!FUNCS!GET_VISIBILITY_OVERRIDE");
return iRet;
}
int NWNXFuncs_GetVisibility(object oObject1, object oObject2) {
SetLocalString(oObject1, "NWNX!FUNCS!GET_VISIBILITY", ObjectToString(oObject2));
int iRet = StringToInt(GetLocalString(oObject1, "NWNX!FUNCS!GET_VISIBILITY"));
DeleteLocalString(oObject1, "NWNX!FUNCS!GET_VISIBILITY");
return iRet;
}
int NWNXFuncs_GetRegeneration(object oCreature, int nType=REGENERATION_ALL) {
SetLocalString(oCreature, "NWNX!FUNCS!GETREGENERATION", IntToString(nType));
int iRet = StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETREGENERATION"));
DeleteLocalString(oCreature, "NWNX!FUNCS!GETREGENERATION");
return iRet;
}
int NWNXFuncs_ImmunityOverride(int Overrides, int iImmunity) {
if (iImmunity == 0 ) return Overrides | 1;
return Overrides | (2 << (iImmunity -1));
}
void NWNXFuncs_SetImmunityOverride(object oCreature, int Override) {
SetLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE", Override);
}
void NWNXFuncs_RemoveAllImmunityOverrides(object oCreature) {
DeleteLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE");
}
void NWNXFuncs_AddImmunityOverride(object oCreature, int iImmunity) {
int Override = GetLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE");
if (iImmunity == 0) Override |= 1;
else Override |= 2 << (iImmunity-1);
SetLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE", Override);
}
/* For some reason my prc compiler doesn't like the NOT operator
void NWNXFuncs_RemoveImmunityOverride(object oCreature, int iImmunity) {
int Override = GetLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE");
if (iImmunity == 0) Override = Override ~ 1;
else Override = Override ~ (2 << (iImmunity-1));
SetLocalInt(oCreature, "NWNXFUNCS_IMMOVERRIDE", Override);
}
*/
int NWNXFuncs_GetAutoRemoveKeyFlag(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETAUTOREMOVEKEY", "-");
int iRet = StringToInt(GetLocalString(oObject, "NWNX!FUNCS!GETAUTOREMOVEKEY"));
DeleteLocalString(oObject, "NWNX!FUNCS!GETAUTOREMOVEKEY");
return iRet;
}
void NWNXFuncs_SetAutoRemoveKeyFlag(object oObject, int iFlag) {
SetLocalString(oObject, "NWNX!FUNCS!SETAUTOREMOVEKEY", IntToString(iFlag));
DeleteLocalString(oObject, "NWNX!FUNCS!SETAUTOREMOVEKEY");
}
string NWNXFuncs_GetDestinationTag(object oObject) {
SetLocalString(oObject, "NWNX!FUNCS!GETDESTINATIONTAG", "---------------------------------");
string sTag = GetLocalString(oObject, "NWNX!FUNCS!GETDESTINATIONTAG");
DeleteLocalString(oObject, "NWNX!FUNCS!GETDESTINATIONTAG");
return sTag;
}
void NWNXFuncs_SetDestinationTag(object oObject, string sTag) {
SetLocalString(oObject, "NWNX!FUNCS!SETDESTINATIONTAG", sTag);
DeleteLocalString(oObject, "NWNX!FUNCS!SETDESTINATIONTAG");
}