int OBJECT_VISUAL_TRANSFORM_SCALE = 10;
int OBJECT_VISUAL_TRANSFORM_ROTATE_X = 21;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Y = 22;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Z = 23;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_X = 31;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Y = 32;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z = 33;
int OBJECT_VISUAL_TRANSFORM_ANIMATION_SPEED = 40;
// Gets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// Returns the current (or default) value.
float GetObjectVisualTransform(object oObject, int nTransform);
// Sets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// - fValue depends on the transformation to apply.
// Returns the old/previous value.
float SetObjectVisualTransform(object oObject, int nTransform, float fValue);
// Sets an integer material shader uniform override.
// - sMaterial needs to be a material on that object.
// - sParam needs to be a valid shader parameter already defined on the material. void SetMaterialShaderUniformInt(object oObject, string sMaterial, string sParam, int nValue);
// Sets a vec4 material shader uniform override.
// - sMaterial needs to be a material on that object.
// - sParam needs to be a valid shader parameter already defined on the material.
// - You can specify a single float value to set just a float, instead of a vec4. void SetMaterialShaderUniformVec4(object oObject, string sMaterial, string sParam, float fValue1, float fValue2 = 0.0, float fValue3 = 0.0, float fValue4 = 0.0);
// Resets material shader parameters on the given object:
// - Supply a material to only reset shader uniforms for meshes with that material.
// - Supply a parameter to only reset shader uniforms of that name.
// - Supply both to only reset shader uniforms of that name on meshes with that material. void ResetMaterialShaderUniforms(object oObject, string sMaterial = "", string sParam = "");
int OBJECT_VISUAL_TRANSFORM_SCALE = 10;
int OBJECT_VISUAL_TRANSFORM_ROTATE_X = 21;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Y = 22;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Z = 23;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_X = 31;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Y = 32;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z = 33;
int OBJECT_VISUAL_TRANSFORM_ANIMATION_SPEED = 40;
// Gets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// Returns the current (or default) value.
float GetObjectVisualTransform(object oObject, int nTransform);
// Sets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// - fValue depends on the transformation to apply.
// Returns the old/previous value.
float SetObjectVisualTransform(object oObject, int nTransform, float fValue);
// Sets an integer material shader uniform override.
// - sMaterial needs to be a material on that object.
// - sParam needs to be a valid shader parameter already defined on the material.
void SetMaterialShaderUniformInt(object oObject, string sMaterial, string sParam, int nValue);
// Sets a vec4 material shader uniform override.
// - sMaterial needs to be a material on that object.
// - sParam needs to be a valid shader parameter already defined on the material.
// - You can specify a single float value to set just a float, instead of a vec4.
void SetMaterialShaderUniformVec4(object oObject, string sMaterial, string sParam, float fValue1, float fValue2 = 0.0, float fValue3 = 0.0, float fValue4 = 0.0);
// Resets material shader parameters on the given object:
// - Supply a material to only reset shader uniforms for meshes with that material.
// - Supply a parameter to only reset shader uniforms of that name.
// - Supply both to only reset shader uniforms of that name on meshes with that material.
void ResetMaterialShaderUniforms(object oObject, string sMaterial = "", string sParam = "");
// Execute a script chunk.
// The script chunk runs immediately, same as ExecuteScript().
// The script is jitted in place and currently not cached: Each invocation will recompile the script chunk.
// Note that the script chunk will run as if a separate script. This is not eval().
// By default, the script chunk is wrapped into void main() {}. Pass in bWrapIntoMain = FALSE to override.
// Returns "" on success, or the compilation error.
string ExecuteScriptChunk(string sScriptChunk, object oObject = OBJECT_SELF, int bWrapIntoMain = TRUE);
// Returns a UUID. This UUID will not be associated with any object.
// The generated UUID is currently a v4.
string GetRandomUUID();
// Returns the given objects' UUID. This UUID is persisted across save boundaries,
// like Save/RestoreCampaignObject and save games.
//
// Thus, reidentification is only guaranteed in scenarios where players cannot introduce
// new objects (i.e. servervault servers).
//
// UUIDs are guaranteed to be unique in any single running game.
//
// If a loaded object would collide with a UUID already present in the game, the
// object receives no UUID and a warning is emitted to the log. Requesting a UUID
// for the new object will generate a random one.
//
// This UUID is useful to, for example:
// - Safely identify servervault characters
// - Track serialisable objects (like items or creatures) as they are saved to the
// campaign DB - i.e. persistent storage chests or dropped items.
// - Track objects across multiple game instances (in trusted scenarios).
//
// Currently, the following objects can carry UUIDs:
// Items, Creatures, Placeables, Triggers, Doors, Waypoints, Stores,
// Encounters, Areas.
//
// Will return "" (empty string) when the given object cannot carry a UUID.
string GetObjectUUID(object oObject);
// Forces the given object to receive a new UUID, discarding the current value.
void ForceRefreshObjectUUID(object oObject);
// Looks up a object on the server by it's UUID.
// Returns OBJECT_INVALID if the UUID is not on the server.
object GetObjectByUUID(string sUUID);
mymodel_0
40 mymodel_1
80.5 mymodel_2
// Makes oPC load texture sNewName instead of sOldName.
// If oPC is OBJECT_INVALID, it will apply the override to all active players
// Setting sNewName to "" will clear the override and revert to original.
void SetTextureOverride(string sOldName, string sNewName = "", object oPC = OBJECT_INVALID);
[[nwsync.downloader.repositories]]
name = "NWVault"
url = "http://sync.neverwintervault.org/"
int DOMAIN_AIR = 0;
int DOMAIN_ANIMAL = 1;
int DOMAIN_DEATH = 3;
int DOMAIN_DESTRUCTION = 4;
int DOMAIN_EARTH = 5;
int DOMAIN_EVIL = 6;
int DOMAIN_FIRE = 7;
int DOMAIN_GOOD = 8;
int DOMAIN_HEALING = 9;
int DOMAIN_KNOWLEDGE = 10;
int DOMAIN_MAGIC = 13;
int DOMAIN_PLANT = 14;
int DOMAIN_PROTECTION = 15;
int DOMAIN_STRENGTH = 16;
int DOMAIN_SUN = 17;
int DOMAIN_TRAVEL = 18;
int DOMAIN_TRICKERY = 19;
int DOMAIN_WAR = 20;
int DOMAIN_WATER = 21;
// Returns oCreature's spell school specialization in nClass (SPELL_SCHOOL_* constants)
// Unless custom content is used, only Wizards have spell schools
// Returns -1 on error
int GetSpecialization(object oCreature, int nClass = CLASS_TYPE_WIZARD);
// Returns oCreature's domain in nClass (DOMAIN_* constants)
// nDomainIndex - 1 or 2
// Unless custom content is used, only Clerics have domains
// Returns -1 on error
int GetDomain(object oCreature, int nDomainIndex = 1, int nClass = CLASS_TYPE_CLERIC);
int SCREEN_ANCHOR_TOP_LEFT = 0;
int SCREEN_ANCHOR_TOP_RIGHT = 1;
int SCREEN_ANCHOR_BOTTOM_LEFT = 2;
int SCREEN_ANCHOR_BOTTOM_RIGHT = 3;
int SCREEN_ANCHOR_CENTER = 4;
// Displays sMsg on oPC's screen.
// The message is displayed on top of whatever is on the screen, including UI elements
// nX, nY - coordinates of the first character to be displayed. The value is in terms
// of character 'slot' relative to the nAnchor anchor point.
// If the number is negative, it is applied from the bottom/right.
// nAnchor - SCREEN_ANCHOR_* constant
// fLife - Duration in seconds until the string disappears.
// nRGBA, nRGBA2 - Colors of the string in 0xRRGGBBAA format. String starts at nRGBA,
// but as it nears end of life, it will slowly blend into nRGBA2.
// nID - Optional ID of a string. If not 0, subsequent calls to PostString will
// remove the old string with the same ID, even if it's lifetime has not elapsed.
// Only positive values are allowed.
// sFont - If specified, use this custom font instead of default console font.
void PostString(object oPC, string sMsg, int nX = 0, int nY = 0, int nAnchor = SCREEN_ANCHOR_TOP_LEFT, float fLife = 10.0f, int nRGBA = 2147418367, int nRGBA2 = 2147418367, int nID = 0, string sFont="");
// Returns the build number of oPlayer (i.e. 8193).
// Returns 0 if the given object isn't a player or did not advertise their build info.
int GetPlayerBuildVersionMajor(object oPlayer);
// Returns the patch revision of oPlayer (i.e. 8).
// Returns 0 if the given object isn't a player or did not advertise their build info.
int GetPlayerBuildVersionMinor(object oPlayer);
// Returns the build number of oPlayer (i.e. 8193).
// Returns 0 if the given object isn't a player or did not advertise their build info.
int GetPlayerBuildVersionMajor(object oPlayer);
// Returns the patch revision of oPlayer (i.e. 8).
// Returns 0 if the given object isn't a player or did not advertise their build info.
int GetPlayerBuildVersionMinor(object oPlayer);
// Returns TRUE if the given player-controlled creature has DM privileges
// gained through a player login (as opposed to the DM client).
// Note: GetIsDM() also returns TRUE for player creature DMs.
int GetIsPlayerDM(object oCreature);
// Returns the script parameter value for a given parameter name.
// Script parameters can be set for conversation scripts in the toolset's
// Conversation Editor, or for any script with SetScriptParam().
// * Will return "" if a parameter with the given name does not exist.
string GetScriptParam(string sParamName);
// Set a script parameter value for the next script to be run.
// Call this function to set parameters right before calling ExecuteScript().
void SetScriptParam(string sParamName, string sParamValue);
// Makes oPC enter a targeting mode, letting them select an object as a target
// If a PC selects a target, it will trigger the module OnPlayerTarget event.
void EnterTargetingMode(object oPC, int nValidObjectTypes = OBJECT_TYPE_ALL, int nMouseCursorId = MOUSECURSOR_MAGIC);
// Gets the target object in the module OnPlayerTarget event.
// Returns the area object when the target is the ground.
object GetTargetingModeSelectedObject();
// Gets the target position in the module OnPlayerTarget event.
vector GetTargetingModeSelectedPosition();
// Gets the player object that triggered the OnPlayerTarget event.
object GetLastPlayerToSelectTarget();
// Returns the number of uses per day remaining of the given item and item property.
// * Will return 0 if the given item does not have the requested item property,
// or the item property is not uses/day.
int GetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip);
// Sets the number of uses per day remaining of the given item and item property.
// * Will do nothing if the given item and item property is not uses/day.
// * Will constrain nUsesPerDay to the maximum allowed as the cost table defines.
void SetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip, int nUsesPerDay);
// Queue an action to use an active item property.
// * oItem - item that has the item property to use
// * ip - item property to use
// * object oTarget - target
// * nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells)
// * bDecrementCharges - decrement charges if item property is limited
void ActionUseItemOnObject(object oItem, itemproperty ip, object oTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);
// Queue an action to use an active item property.
// * oItem - item that has the item property to use
// * ip - item property to use
// * location lTarget - target location (must be in the same area as item possessor)
// * nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells)
// * bDecrementCharges - decrement charges if item property is limited
void ActionUseItemAtLocation(object oItem, itemproperty ip, location lTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);
// Sets oObject's hilite color to nColor
// The nColor format is 0xRRGGBB; -1 clears the color override.
void SetObjectHiliteColor(object oObject, int nColor = -1);
// Replace's oObject's texture sOld with sNew.
// Specifying sNew = "" will restore the original texture.
// If sNew cannot be found, the original texture will be restored.
// sNew must refer to a simple texture, not PLT
void ReplaceObjectTexture(object oObject, string sOld, string sNew = "");
// Sets the detailed wind data for oArea
// The predefined values in the toolset are:
// NONE: vDirection=(1.0, 1.0, 0.0), fMagnitude=0.0, fYaw=0.0, fPitch=0.0
// LIGHT: vDirection=(1.0, 1.0, 0.0), fMagnitude=1.0, fYaw=100.0, fPitch=3.0
// HEAVY: vDirection=(1.0, 1.0, 0.0), fMagnitude=2.0, fYaw=150.0, fPitch=5.0
void SetAreaWind(object oArea, vector vDirection, float fMagnitude, float fYaw, float fPitch);
// Returns TRUE if the given player-controlled creature has DM privileges
// gained through a player login (as opposed to the DM client).
// Note: GetIsDM() also returns TRUE for player creature DMs.
int GetIsPlayerDM(object oCreature);
// Returns the script parameter value for a given parameter name.
// Script parameters can be set for conversation scripts in the toolset's
// Conversation Editor, or for any script with SetScriptParam().
// * Will return "" if a parameter with the given name does not exist.
string GetScriptParam(string sParamName);
// Set a script parameter value for the next script to be run.
// Call this function to set parameters right before calling ExecuteScript().
void SetScriptParam(string sParamName, string sParamValue);
// Makes oPC enter a targeting mode, letting them select an object as a target
// If a PC selects a target, it will trigger the module OnPlayerTarget event.
void EnterTargetingMode(object oPC, int nValidObjectTypes = OBJECT_TYPE_ALL, int nMouseCursorId = MOUSECURSOR_MAGIC);
// Gets the target object in the module OnPlayerTarget event.
// Returns the area object when the target is the ground.
object GetTargetingModeSelectedObject();
// Gets the target position in the module OnPlayerTarget event.
vector GetTargetingModeSelectedPosition();
// Gets the player object that triggered the OnPlayerTarget event.
object GetLastPlayerToSelectTarget();
// Returns the number of uses per day remaining of the given item and item property.
// * Will return 0 if the given item does not have the requested item property,
// or the item property is not uses/day.
int GetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip);
// Sets the number of uses per day remaining of the given item and item property.
// * Will do nothing if the given item and item property is not uses/day.
// * Will constrain nUsesPerDay to the maximum allowed as the cost table defines.
void SetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip, int nUsesPerDay);
// Queue an action to use an active item property.
// * oItem - item that has the item property to use
// * ip - item property to use
// * object oTarget - target
// * nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells)
// * bDecrementCharges - decrement charges if item property is limited
void ActionUseItemOnObject(object oItem, itemproperty ip, object oTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);
// Queue an action to use an active item property.
// * oItem - item that has the item property to use
// * ip - item property to use
// * location lTarget - target location (must be in the same area as item possessor)
// * nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells)
// * bDecrementCharges - decrement charges if item property is limited
void ActionUseItemAtLocation(object oItem, itemproperty ip, location lTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);
// Sets oObject's hilite color to nColor
// The nColor format is 0xRRGGBB; -1 clears the color override.
void SetObjectHiliteColor(object oObject, int nColor = -1);
// Sets the cursor (MOUSECURSOR_*) to use when hovering over oObject
void SetObjectMouseCursor(object oObject, int nCursor = -1);
// Replace's oObject's texture sOld with sNew.
// Specifying sNew = "" will restore the original texture.
// If sNew cannot be found, the original texture will be restored.
// sNew must refer to a simple texture, not PLT
void ReplaceObjectTexture(object oObject, string sOld, string sNew = "");
// Sets the detailed wind data for oArea
// The predefined values in the toolset are:
// NONE: vDirection=(1.0, 1.0, 0.0), fMagnitude=0.0, fYaw=0.0, fPitch=0.0
// LIGHT: vDirection=(1.0, 1.0, 0.0), fMagnitude=1.0, fYaw=100.0, fPitch=3.0
// HEAVY: vDirection=(1.0, 1.0, 0.0), fMagnitude=2.0, fYaw=150.0, fPitch=5.0
void SetAreaWind(object oArea, vector vDirection, float fMagnitude, float fYaw, float fPitch);
effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE, float fScale=1.0f, vector vTranslate=[0.0,0.0,0.0], vector vRotate=[0.0,0.0,0.0]);
effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE, float fScale=1.0f, vector vTranslate=[0.0,0.0,0.0], vector vRotate=[0.0,0.0,0.0]);
[size=12pt][b]New script commands[/b][/size]
// Returns the currently executing event (EVENT_SCRIPT_*) or 0 if not determinable.
// Note: Will return 0 in DelayCommand/AssignCommand. ExecuteScript(Chunk) will inherit their event ID from their parent event.
int GetCurrentlyRunningEvent();
// Get the integer parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 8.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or 0 on error/when not set.
int GetEffectInteger(effect eEffect, int nIndex);
// Get the float parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 4.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or 0.0f on error/when not set.
float GetEffectFloat(effect eEffect, int nIndex);
// Get the string parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 6.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or "" on error/when not set.
string GetEffectString(effect eEffect, int nIndex);
// Get the object parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 4.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or OBJECT_INVALID on error/when not set.
object GetEffectObject(effect eEffect, int nIndex);
// Get the vector parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 2.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or {0.0f, 0.0f, 0.0f} on error/when not set.
vector GetEffectVector(effect eEffect, int nIndex);
// Check if nBaseItemType fits in oTarget's inventory.
// Note: Does not check inside any container items possessed by oTarget.
// * nBaseItemType: a BASE_ITEM_* constant.
// * oTarget: a valid creature, placeable or item.
// Returns: TRUE if the baseitem type fits, FALSE if not or on error.
int GetBaseItemFitsInInventory(int nBaseItemType, object oTarget);
// Get oObject's local cassowary variable reference sVarName
// * Return value on error: empty solver
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
cassowary GetLocalCassowary(object oObject, string sVarName);
// Set a reference to the given solver on oObject.
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
void SetLocalCassowary(object oObject, string sVarName, cassowary cSolver);
// Delete local solver reference.
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
void DeleteLocalCassowary(object oObject, string sVarName);
// Clear out this solver, removing all state, constraints and suggestions.
// This is provided as a convenience if you wish to reuse a cassowary variable.
// It is not necessary to call this for solvers you simply want to let go out of scope.
void CassowaryReset(cassowary cSolver);
// Add a constraint to the system.
// * The constraint needs to be a valid comparison equation, one of: >=, ==, <=.
// * This implementation is a linear constraint solver.
// * You cannot multiply or divide variables and expressions with each other.
// Doing so will result in a error when attempting to add the constraint.
// (You can, of course, multiply or divide by constants).
// * fStrength must be >= CASSOWARY_STRENGTH_WEAK && <= CASSOWARY_STRENGTH_REQUIRED.
// * Any referenced variables can be retrieved with CassowaryGetValue().
// * Returns "" on success, or the parser/constraint system error message.
string CassowaryConstrain(cassowary cSolver, string sConstraint, float fStrength = CASSOWARY_STRENGTH_REQUIRED);
// Suggest a value to the solver.
// * Edit variables are soft constraints and exist as an optimisation for complex systems.
// You can do the same with Constrain("v == 5", CASSOWARY_STRENGTH_xxx); but edit variables
// allow you to suggest values without having to rebuild the solver.
// * fStrength must be >= CASSOWARY_STRENGTH_WEAK && < CASSOWARY_STRENGTH_REQUIRED
// Suggested values cannot be required, as suggesting a value must not invalidate the solver.
void CassowarySuggestValue(cassowary cSolver, string sVarName, float fValue, float fStrength = CASSOWARY_STRENGTH_STRONG);
// Get the value for the given variable, or 0.0 on error.
float CassowaryGetValue(cassowary cSolver, string sVarName);
// Gets a printable debug state of the given solver, which may help you debug
// complex systems.
string CassowaryDebug(cassowary cSolver);
// Overrides a given strref to always return sValue instead of what is in the TLK file.
// Setting sValue to "" will delete the override
void SetTlkOverride(int nStrRef, string sValue="");
// Constructs a custom itemproperty given all the parameters explicitly.
// This function can be used in place of all the other ItemPropertyXxx constructors
// Use GetItemProperty{Type,SubType,CostTableValue,Param1Value} to see the values for a given itemproperty.
itemproperty ItemPropertyCustom(int nType, int nSubType=-1, int nCostTableValue=-1, int nParam1Value=-1);
// Returns the number of script instructions remaining for the currently-running script.
// Once this value hits zero, the script will abort with TOO MANY INSTRUCTIONS.
// The instruction limit is configurable by the user, so if you have a really long-running
// process, this value can guide you with splitting it up into smaller, discretely schedulable parts.
// Note: Running this command and checking/handling the value also takes up some instructions.
int GetScriptInstructionsRemaining();
// Returns a modified copy of jArray with the value order changed according to nTransform:
// * JSON_ARRAY_SORT_ASCENDING, JSON_ARRAY_SORT_DESCENDING
// Sorting is dependent on the type and follows json standards (.e.g. 99 < "100").
// * JSON_ARRAY_SHUFFLE
// Randomises the order of elements.
// * JSON_ARRAY_REVERSE
// Reverses the array.
// * JSON_ARRAY_UNIQUE
// Returns a modified copy of jArray with duplicate values removed.
// Coercable but different types are not considered equal (e.g. 99 != "99"); int/float equivalence however applies: 4.0 == 4.
// Order is preserved.
// * JSON_ARRAY_COALESCE
// Returns the first non-null entry. Empty-ish values (e.g. "", 0) are not considered null, only the json scalar type.
json JsonArrayTransform(json jArray, int nTransform);
// Returns the nth-matching index or key of jNeedle in jHaystack.
// Supported haystacks: object, array
// Ordering behaviour for objects is unspecified.
// Return null when not found or on any error.
json JsonFind(json jHaystack, json jNeedle, int nNth = 0, int nConditional = JSON_FIND_EQUAL);
// Returns a copy of the range (nBeginIndex, nEndIndex) inclusive of jArray.
// Negative nEndIndex values count from the other end.
// Out-of-bound values are clamped to the array range.
// Examples:
// json a = JsonParse("[0, 1, 2, 3, 4]");
// JsonArrayGetRange(a, 0, 1) // => [0, 1]
// JsonArrayGetRange(a, 1, -1) // => [1, 2, 3, 4]
// JsonArrayGetRange(a, 0, 4) // => [0, 1, 2, 3, 4]
// JsonArrayGetRange(a, 0, 999) // => [0, 1, 2, 3, 4]
// JsonArrayGetRange(a, 1, 0) // => []
// JsonArrayGetRange(a, 1, 1) // => [1]
// Returns a null type on error, including type mismatches.
json JsonArrayGetRange(json jArray, int nBeginIndex, int nEndIndex);
// Returns the result of a set operation on two arrays.
// Operations:
// * JSON_SET_SUBSET (v <= o):
// Returns true if every element in jValue is also in jOther.
// * JSON_SET_UNION (v | o):
// Returns a new array containing values from both sides.
// * JSON_SET_INTERSECT (v & o):
// Returns a new array containing only values common to both sides.
// * JSON_SET_DIFFERENCE (v - o):
// Returns a new array containing only values not in jOther.
// * JSON_SET_SYMMETRIC_DIFFERENCE (v ^ o):
// Returns a new array containing all elements present in either array, but not both.
json JsonSetOp(json jValue, int nOp, json jOther);
// Returns the column name of s2DA at nColumn index (starting at 0).
// Returns "" if column nColumn doesn't exist (at end).
string Get2DAColumn(string s2DA, int nColumnIdx);
// Returns the number of defined rows in the 2da s2DA.
int Get2DARowCount(string s2DA);