Added NWNX & removed conflicting spell scripts
Added NWNX & removed conflicting spell scripts
This commit is contained in:
parent
f08007d10d
commit
7a2452f20c
_module
dlg
69_hench_conv.dlg.jsonakbethhench.dlg.jsoncranefoothench.dlg.jsongreeter.dlg.jsonkingsleyhench.dlg.jsonkiranethhench.dlg.jsonmarthekhench.dlg.jsonsithdarhench.dlg.jsonsnagglehench.dlg.jsonsorateshench.dlg.jsontempin0001.dlg.jsonthaliahench.dlg.json
ifo
ncs
array_example.ncsnw_s0_curcrwn.ncsnw_s0_curlgtw.ncsnw_s0_curminw.ncsnw_s0_curmodw.ncsnw_s0_harm.ncsnw_s0_heal.ncsnw_s0_healcirc.ncsnw_s0_raisdead.ncsnw_s0_resserec.ncson_pubsub.ncs
nss
array_example.nssinc_array.nssnw_s0_curcrwn.nssnw_s0_curlgtw.nssnw_s0_curminw.nssnw_s0_curmodw.nssnw_s0_harm.nssnw_s0_heal.nssnw_s0_healcirc.nssnw_s0_raisdead.nssnw_s0_resserec.nssnwnx.nssnwnx_admin.nssnwnx_appearance.nssnwnx_area.nssnwnx_chat.nssnwnx_consts.nssnwnx_creature.nssnwnx_damage.nssnwnx_data.nssnwnx_dialog.nssnwnx_effect.nssnwnx_elc.nssnwnx_encounter.nssnwnx_events.nssnwnx_feat.nssnwnx_feedback.nssnwnx_item.nssnwnx_itemprop.nssnwnx_lua.nssnwnx_object.nssnwnx_player.nssnwnx_player_qbs.nssnwnx_profiler.nssnwnx_race.nssnwnx_race_2da.nssnwnx_redis.nssnwnx_redis_lib.nssnwnx_redis_ps.nssnwnx_redis_short.nssnwnx_regex.nssnwnx_rename.nssnwnx_reveal.nssnwnx_ruby.nssnwnx_skillranks.nssnwnx_spellcheck.nssnwnx_sql.nssnwnx_tests.nssnwnx_tileset.nssnwnx_time.nssnwnx_util.nssnwnx_visibility.nssnwnx_weapon.nssnwnx_webhook.nssnwnx_webhook_rch.nsson_pubsub.nss
ra_tdog.mod@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1856,7 +1856,7 @@
|
||||
"Text": {
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "of course."
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -2280,7 +2280,7 @@
|
||||
"Text": {
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "of course."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1744,7 +1744,7 @@
|
||||
"id": 87702,
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "\"Of course.\""
|
||||
"0": "\"Of course\""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1660,7 +1660,7 @@
|
||||
},
|
||||
"Mod_CustomTlk": {
|
||||
"type": "cexostring",
|
||||
"value": "prc4_cep1_merge"
|
||||
"value": "ra_tdog"
|
||||
},
|
||||
"Mod_CutSceneList": {
|
||||
"type": "list",
|
||||
@ -1673,7 +1673,7 @@
|
||||
"Mod_Description": {
|
||||
"type": "cexolocstring",
|
||||
"value": {
|
||||
"0": "Beyond the Dungeon of Graves v1.2\n\nBY: Tolen\n\n\nBased on Rappan Athuk: The Dungeon of Graves, published by Necromancer Games.\n\nPRC added & merged by Jaysyn\n\n\nRequires CEP 1"
|
||||
"0": "Beyond the Dungeon of Graves v1.2\n\nOriginall By: Tolen\n\n\nBased on Rappan Athuk: The Dungeon of Graves, published by Necromancer Games.\n\nPRC added & merged by Jaysyn\n\n\nRequires CEP 1"
|
||||
}
|
||||
},
|
||||
"Mod_DuskHour": {
|
||||
@ -2008,7 +2008,7 @@
|
||||
},
|
||||
"Mod_Tag": {
|
||||
"type": "cexostring",
|
||||
"value": "BeyondDungeonoG"
|
||||
"value": "MODULE"
|
||||
},
|
||||
"Mod_Version": {
|
||||
"type": "dword",
|
||||
|
BIN
_module/ncs/array_example.ncs
Normal file
BIN
_module/ncs/array_example.ncs
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
_module/ncs/on_pubsub.ncs
Normal file
BIN
_module/ncs/on_pubsub.ncs
Normal file
Binary file not shown.
143
_module/nss/array_example.nss
Normal file
143
_module/nss/array_example.nss
Normal file
@ -0,0 +1,143 @@
|
||||
//#include "inc_array"
|
||||
#include "nwnx_time"
|
||||
|
||||
// nwnx_data also includes inc_array, so don't double dip.
|
||||
#include "nwnx_data"
|
||||
|
||||
void Log(string msg)
|
||||
{
|
||||
WriteTimestampedLogEntry(msg);
|
||||
}
|
||||
|
||||
void TestArrayOnModule()
|
||||
{
|
||||
|
||||
string array = "test";
|
||||
|
||||
// By default, temporary arrays are created on the module.
|
||||
Array_PushBack_Str(array, "BItem1");
|
||||
Array_PushBack_Str(array, "AItem2");
|
||||
Array_PushBack_Str(array, "AItem3");
|
||||
Array_PushBack_Str(array, "BItem2");
|
||||
Array_Debug_Dump(array, "After first load");
|
||||
|
||||
int foo = Array_Find_Str(array, "AItem3");
|
||||
Log("Found element AItem3 at index = " + IntToString(foo));
|
||||
|
||||
Array_Set_Str(array, 2, "Suck it up...");
|
||||
Array_Debug_Dump(array, "After set 2 = 'Suck it up...'");
|
||||
|
||||
Array_Erase(array, 1);
|
||||
Array_Debug_Dump(array, "After delete 1");
|
||||
|
||||
Array_PushBack_Str(array, "MItem1");
|
||||
Array_PushBack_Str(array, "QItem2");
|
||||
Array_PushBack_Str(array, "NItem3");
|
||||
Array_PushBack_Str(array, "KItem2");
|
||||
|
||||
Array_Debug_Dump(array, "After add more");
|
||||
Array_SortAscending(array);
|
||||
|
||||
Array_Debug_Dump(array, "After sort");
|
||||
|
||||
Array_Shuffle(array);
|
||||
Array_Debug_Dump(array, "After shuffle");
|
||||
|
||||
Log( (Array_Contains_Str(array, "NItem3")) ? "Passed.. found it" : "Failed.. should have found it" );
|
||||
Log( (Array_Contains_Str(array, "KItem2")) ? "Passed.. found it" : "Failed.. should have found it" );
|
||||
Log( (Array_Contains_Str(array, "xxxxxx")) ? "Failed.. not found" : "Passed.. should not exist" );
|
||||
|
||||
Array_Clear(array);
|
||||
// Load up the array with 100 entries
|
||||
int i;
|
||||
|
||||
struct NWNX_Time_HighResTimestamp b;
|
||||
b = NWNX_Time_GetHighResTimeStamp();
|
||||
Log("Start Time: " + IntToString(b.seconds) + "." + IntToString(b.microseconds));
|
||||
for (i=0; i<1000; i++)
|
||||
{
|
||||
Array_PushBack_Str(array, IntToString(d100()) + " xxx " + IntToString(i));
|
||||
}
|
||||
b = NWNX_Time_GetHighResTimeStamp();
|
||||
Log("Loaded 1000: " + IntToString(b.seconds) + "." + IntToString(b.microseconds));
|
||||
Array_Shuffle(array);
|
||||
b = NWNX_Time_GetHighResTimeStamp();
|
||||
Log("Shuffled 1000: " + IntToString(b.seconds) + "." + IntToString(b.microseconds));
|
||||
for (i=5; i<995; i++)
|
||||
{
|
||||
// Delete the third entry a bunch of times
|
||||
Array_Erase(array, 3);
|
||||
}
|
||||
b = NWNX_Time_GetHighResTimeStamp();
|
||||
Log("Delete ~990: " + IntToString(b.seconds) + "." + IntToString(b.microseconds));
|
||||
Array_Debug_Dump(array, "After mass insert/delete");
|
||||
|
||||
}
|
||||
|
||||
void TestArrayOnChicken()
|
||||
{
|
||||
string array="chicken";
|
||||
// Let's create an array "on" our favorite creature: the deadly nw_chicken
|
||||
// Note - arrays aren't really attached to the item, but the module, and they
|
||||
// are tagged with the objects string representation.
|
||||
object oCreature = CreateObject(OBJECT_TYPE_CREATURE, "nw_chicken", GetStartingLocation());
|
||||
if (!GetIsObjectValid(oCreature))
|
||||
{
|
||||
Log("NWNX_Creature test: Failed to create creature");
|
||||
return;
|
||||
}
|
||||
|
||||
Array_PushBack_Str(array, "BItem1", oCreature);
|
||||
Array_PushBack_Str(array, "AItem2", oCreature);
|
||||
Array_PushBack_Str(array, "AItem3", oCreature);
|
||||
Array_PushBack_Str(array, "BItem2", oCreature);
|
||||
Array_Debug_Dump(array, "After Chicken array load", oCreature);
|
||||
|
||||
}
|
||||
|
||||
void TestNWNXArray()
|
||||
{
|
||||
Log("");
|
||||
Log("Start NWNX_Data test.");
|
||||
string array = "test2";
|
||||
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "XItem1");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "ZItem2");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "ZItem3");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "XItem2");
|
||||
Array_Debug_Dump(array, "After first load");
|
||||
|
||||
int foo = NWNX_Data_Array_Find_Str(GetModule(), array, "ZItem3");
|
||||
Log("Found element AItem3 at index = " + IntToString(foo));
|
||||
|
||||
NWNX_Data_Array_Set_Str(GetModule(), array, 2, "Suck it up...");
|
||||
Array_Debug_Dump(array, "After set 2 = 'Suck it up...'");
|
||||
|
||||
NWNX_Data_Array_Erase(NWNX_DATA_TYPE_STRING, GetModule(), array, 1);
|
||||
Array_Debug_Dump(array, "After delete 1");
|
||||
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "MItem1");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "QItem2");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "NItem3");
|
||||
NWNX_Data_Array_PushBack_Str(GetModule(), array, "KItem2");
|
||||
|
||||
Array_Debug_Dump(array, "After add more");
|
||||
NWNX_Data_Array_SortAscending(NWNX_DATA_TYPE_STRING, GetModule(), array);
|
||||
|
||||
Array_Debug_Dump(array, "After sort");
|
||||
|
||||
}
|
||||
|
||||
// Uncomment and assign to some event click.
|
||||
/* */
|
||||
void main()
|
||||
{
|
||||
Log("Start");
|
||||
|
||||
TestArrayOnModule();
|
||||
|
||||
TestArrayOnChicken();
|
||||
|
||||
TestNWNXArray();
|
||||
}
|
||||
/* */
|
504
_module/nss/inc_array.nss
Normal file
504
_module/nss/inc_array.nss
Normal file
@ -0,0 +1,504 @@
|
||||
#include "nwnx_regex"
|
||||
|
||||
/// @addtogroup data Data
|
||||
/// @brief Provides a number of data structures for NWN code to use (simulated arrays)
|
||||
/// @{
|
||||
/// @file nwnx_data.nss
|
||||
|
||||
const int INVALID_INDEX = -1;
|
||||
const int TYPE_FLOAT = 0;
|
||||
const int TYPE_INTEGER = 1;
|
||||
const int TYPE_OBJECT = 2;
|
||||
const int TYPE_STRING = 3;
|
||||
|
||||
/// @defgroup data_array_at Array At
|
||||
/// @brief Returns the element at the index.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @return The element of associated type.
|
||||
/// @{
|
||||
string Array_At_Str(string tag, int index, object obj=OBJECT_INVALID);
|
||||
float Array_At_Flt(string tag, int index, object obj=OBJECT_INVALID);
|
||||
int Array_At_Int(string tag, int index, object obj=OBJECT_INVALID);
|
||||
object Array_At_Obj(string tag, int index, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
|
||||
/// Clears the entire array, such that size==0.
|
||||
void Array_Clear(string tag, object obj=OBJECT_INVALID);
|
||||
|
||||
/// @defgroup data_array_contains Array Contains
|
||||
/// @brief Checks if array contains the element.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @return TRUE if the collection contains the element.
|
||||
/// @{
|
||||
int Array_Contains_Flt(string tag, float element, object obj=OBJECT_INVALID);
|
||||
int Array_Contains_Int(string tag, int element, object obj=OBJECT_INVALID);
|
||||
int Array_Contains_Obj(string tag, object element, object obj=OBJECT_INVALID);
|
||||
int Array_Contains_Str(string tag, string element, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
/// Copies the array of name otherTag over the array of name tag.
|
||||
void Array_Copy(string tag, string otherTag, object obj=OBJECT_INVALID);
|
||||
|
||||
/// Erases the element at index, and shuffles any elements from index size-1 to index + 1 left.
|
||||
void Array_Erase(string tag, int index, object obj=OBJECT_INVALID);
|
||||
|
||||
/// @defgroup data_array_find Array Find
|
||||
/// @brief Get the index at which the element is located.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @return Returns the index at which the element is located, or ARRAY_INVALID_INDEX.
|
||||
/// @{
|
||||
int Array_Find_Flt(string tag, float element, object obj=OBJECT_INVALID);
|
||||
int Array_Find_Int(string tag, int element, object obj=OBJECT_INVALID);
|
||||
int Array_Find_Obj(string tag, object element, object obj=OBJECT_INVALID);
|
||||
int Array_Find_Str(string tag, string element, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
/// @defgroup data_array_insert Array Insert
|
||||
/// @brief Inserts the element at the index, where size > index >= 0.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void Array_Insert_Flt(string tag, int index, float element, object obj=OBJECT_INVALID);
|
||||
void Array_Insert_Int(string tag, int index, int element, object obj=OBJECT_INVALID);
|
||||
void Array_Insert_Obj(string tag, int index, object element, object obj=OBJECT_INVALID);
|
||||
void Array_Insert_Str(string tag, int index, string element, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
/// @defgroup data_array_pushback Array Pushback
|
||||
/// @brief Pushes an element to the back of the collection.
|
||||
/// @remark Functionally identical to an insert at index size-1.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void Array_PushBack_Flt(string tag, float element, object obj=OBJECT_INVALID);
|
||||
void Array_PushBack_Int(string tag, int element, object obj=OBJECT_INVALID);
|
||||
void Array_PushBack_Obj(string tag, object element, object obj=OBJECT_INVALID);
|
||||
void Array_PushBack_Str(string tag, string element, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
/// Resizes the array. If the array is shrinking, it chops off elements at the ned.
|
||||
void Array_Resize(string tag, int size, object obj=OBJECT_INVALID);
|
||||
|
||||
/// Reorders the array such each possible permutation of elements has equal probability of appearance.
|
||||
void Array_Shuffle(string tag, object obj=OBJECT_INVALID);
|
||||
|
||||
/// Returns the size of the array.
|
||||
int Array_Size(string tag, object obj=OBJECT_INVALID);
|
||||
|
||||
/// Sorts the collection based on descending order.
|
||||
void Array_SortAscending(string tag, int type=TYPE_STRING, object obj=OBJECT_INVALID);
|
||||
|
||||
/// Sorts the collection based on descending order.
|
||||
void Array_SortDescending(string tag, int type=TYPE_STRING, object obj=OBJECT_INVALID);
|
||||
|
||||
/// @defgroup data_array_set Array Set
|
||||
/// @brief Sets the element at the index, where size > index >= 0.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void Array_Set_Flt(string tag, int index, float element, object obj=OBJECT_INVALID);
|
||||
void Array_Set_Int(string tag, int index, int element, object obj=OBJECT_INVALID);
|
||||
void Array_Set_Obj(string tag, int index, object element, object obj=OBJECT_INVALID);
|
||||
void Array_Set_Str(string tag, int index, string element, object obj=OBJECT_INVALID);
|
||||
/// @}
|
||||
|
||||
/// @}
|
||||
|
||||
//
|
||||
// Local Utility Functions.
|
||||
//
|
||||
string GetTableName(string tag, object obj=OBJECT_INVALID, int bare=FALSE) {
|
||||
if (obj == OBJECT_INVALID)
|
||||
obj = GetModule();
|
||||
|
||||
string sName = "array_" + ObjectToString(obj) + "_" + tag;
|
||||
// Remove invalid characters from the tag rather than failing.
|
||||
string sCleansed = NWNX_Regex_Replace(sName, "[^A-Za-z0-9_\$@#]", "");
|
||||
// But provide some feedback.
|
||||
if (GetStringLength(sName) != GetStringLength(sCleansed) || GetStringLength(sCleansed) == 0) {
|
||||
WriteTimestampedLogEntry("WARNING: Invalid table name detected for array with tag <" + tag + ">. Only characters (a-zA-Z0-9), _, @, $ and # are allowed. Using <"+sCleansed+"> instead.");
|
||||
|
||||
}
|
||||
|
||||
// BARE returns just the table name with no wrapping.
|
||||
if (bare == TRUE) {
|
||||
return sCleansed;
|
||||
}
|
||||
|
||||
// Table name wraped in quotes to avoid token expansion.
|
||||
return "\""+sCleansed+"\"";
|
||||
}
|
||||
|
||||
string GetTableCreateString(string tag, object obj=OBJECT_INVALID) {
|
||||
// for simplicity sake, everything is turned into a string. Possible enhancement
|
||||
// to create specific tables for int/float/whatever.
|
||||
return "CREATE TABLE IF NOT EXISTS " + GetTableName(tag, obj) + " ( ind INTEGER PRIMARY KEY, value TEXT )";
|
||||
}
|
||||
|
||||
int TableExists(string tag, object obj=OBJECT_INVALID) {
|
||||
string stmt = "SELECT name FROM sqlite_master WHERE type = 'table' AND name = @tablename";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindString(sqlQuery, "@tablename", GetTableName(tag, obj));
|
||||
return SqlStep(sqlQuery);
|
||||
}
|
||||
|
||||
void ExecuteStatement(string statement, object obj=OBJECT_INVALID) {
|
||||
if (obj == OBJECT_INVALID)
|
||||
obj = GetModule();
|
||||
// There's no direct "execute this.." everything has to be prepared then executed.
|
||||
//WriteTimestampedLogEntry("SQL: " + statement);
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), statement);
|
||||
SqlStep(sqlQuery);
|
||||
}
|
||||
|
||||
void CreateArrayTable(string tag, object obj=OBJECT_INVALID) {
|
||||
string createStatement = GetTableCreateString(tag, obj);
|
||||
ExecuteStatement(createStatement, obj);
|
||||
}
|
||||
|
||||
// Get the table row count. Returns -1 on error (0 is a valid number of rows in a table)
|
||||
int GetRowCount(string tag, object obj=OBJECT_INVALID) {
|
||||
if (obj == OBJECT_INVALID)
|
||||
obj = GetModule();
|
||||
CreateArrayTable(tag, obj);
|
||||
string stmt = "SELECT COUNT(1) FROM " + GetTableName(tag, obj);
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
if ( SqlStep(sqlQuery) ) {
|
||||
return SqlGetInt(sqlQuery, 0);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// return the value contained in location "index"
|
||||
string Array_At_Str(string tag, int index, object obj=OBJECT_INVALID)
|
||||
{
|
||||
// Just "create if not exists" to ensure it exists for the insert.
|
||||
CreateArrayTable(tag, obj);
|
||||
|
||||
string stmt = "SELECT value FROM " + GetTableName(tag, obj) + " WHERE ind = @ind";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", index);
|
||||
if ( SqlStep(sqlQuery) ) {
|
||||
return SqlGetString(sqlQuery, 0);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
float Array_At_Flt(string tag, int index, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string st = Array_At_Str(tag, index, obj);
|
||||
if (st == "") {
|
||||
return 0.0;
|
||||
}
|
||||
return StringToFloat(st);
|
||||
}
|
||||
|
||||
int Array_At_Int(string tag, int index, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string st = Array_At_Str(tag, index, obj);
|
||||
if (st == "") {
|
||||
return 0;
|
||||
}
|
||||
return StringToInt(st);
|
||||
}
|
||||
|
||||
object Array_At_Obj(string tag, int index, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string st = Array_At_Str(tag, index, obj);
|
||||
if (st == "") {
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
return StringToObject(st);
|
||||
}
|
||||
|
||||
void Array_Clear(string tag, object obj=OBJECT_INVALID)
|
||||
{
|
||||
ExecuteStatement("delete from "+GetTableName(tag, obj), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Return true/value (1/0) if the array contains the value "element"
|
||||
int Array_Contains_Str(string tag, string element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
CreateArrayTable(tag, obj);
|
||||
string stmt = "SELECT COUNT(1) FROM "+GetTableName(tag, obj)+" WHERE value = @element";
|
||||
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindString(sqlQuery, "@element", element);
|
||||
|
||||
int pos = -1;
|
||||
if ( SqlStep(sqlQuery) ) {
|
||||
pos = SqlGetInt(sqlQuery, 0);
|
||||
if (pos > 0) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int Array_Contains_Flt(string tag, float element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Contains_Str(tag, FloatToString(element), obj);
|
||||
}
|
||||
|
||||
int Array_Contains_Int(string tag, int element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Contains_Str(tag, IntToString(element), obj);
|
||||
}
|
||||
|
||||
int Array_Contains_Obj(string tag, object element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Contains_Str(tag, ObjectToString(element), obj);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Array_Copy(string tag, string otherTag, object obj=OBJECT_INVALID)
|
||||
{
|
||||
CreateArrayTable(otherTag, obj);
|
||||
ExecuteStatement("INSERT INTO "+GetTableName(otherTag, obj)+" SELECT * FROM "+GetTableName(tag, obj), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Array_Erase(string tag, int index, object obj=OBJECT_INVALID)
|
||||
{
|
||||
int rows = GetRowCount(tag, obj);
|
||||
// Silently fail if "index" is outside the range of valid indicies.
|
||||
if (index >= 0 && index < rows) {
|
||||
string stmt = "DELETE FROM "+GetTableName(tag, obj)+" WHERE ind = @ind";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", index);
|
||||
SqlStep(sqlQuery);
|
||||
|
||||
stmt = "UPDATE "+GetTableName(tag, obj)+" SET ind = ind - 1 WHERE ind > @ind";
|
||||
sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", index);
|
||||
SqlStep(sqlQuery);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// return the index in the array containing "element"
|
||||
// if not found, return INVALID_INDEX
|
||||
int Array_Find_Str(string tag, string element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string stmt = "SELECT IFNULL(MIN(ind),@invalid_index) FROM "+GetTableName(tag, obj)+" WHERE value = @element";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@invalid_index", INVALID_INDEX);
|
||||
SqlBindString(sqlQuery, "@element", element);
|
||||
if ( SqlStep(sqlQuery) ) {
|
||||
return SqlGetInt(sqlQuery, 0);
|
||||
}
|
||||
return INVALID_INDEX;
|
||||
}
|
||||
|
||||
int Array_Find_Flt(string tag, float element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Find_Str(tag, FloatToString(element), obj);
|
||||
}
|
||||
|
||||
int Array_Find_Int(string tag, int element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Find_Str(tag, IntToString(element), obj);
|
||||
}
|
||||
|
||||
int Array_Find_Obj(string tag, object element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return Array_Find_Str(tag, ObjectToString(element), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Insert a new element into position 'index'. If index is beyond the number of rows in the array,
|
||||
// this will quietly fail. This could be changed if you wanted to support sparse
|
||||
// arrays.
|
||||
void Array_Insert_Str(string tag, int index, string element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
int rows = GetRowCount(tag, obj);
|
||||
// Index numbers are off by one, much like C arrays, so for "rows=10" - values are 0-9.
|
||||
// It's not unreasonable to fail if you try to insert ind=10 into an array who's indexes
|
||||
// only go to 9, but I guess it doesn't hurt as long as we're not allowing gaps in
|
||||
// index numbers.
|
||||
if (index >= 0 && index <= rows) {
|
||||
// index is passed as an integer, so immune (as far as I know) to SQL injection for a one shot query.
|
||||
ExecuteStatement("UPDATE "+GetTableName(tag, obj)+" SET ind = ind + 1 WHERE ind >= "+IntToString(index), obj);
|
||||
// Element, however, is not.
|
||||
string stmt = "INSERT INTO "+GetTableName(tag, obj)+" VALUES ( @ind, @element )";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", index);
|
||||
SqlBindString(sqlQuery, "@element", element);
|
||||
SqlStep(sqlQuery);
|
||||
}
|
||||
}
|
||||
|
||||
void Array_Insert_Flt(string tag, int index, float element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Insert_Str(tag, index, FloatToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_Insert_Int(string tag, int index, int element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Insert_Str(tag, index, IntToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_Insert_Obj(string tag, int index, object element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Insert_Str(tag, index, ObjectToString(element), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Insert a new element at the end of the array.
|
||||
void Array_PushBack_Str(string tag, string element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
// If rowCount = 10, indexes are from 0 to 9, so this becomes the 11th entry at index 10.
|
||||
int rowCount = GetRowCount(tag, obj);
|
||||
|
||||
string stmt = "INSERT INTO "+GetTableName(tag, obj)+" VALUES ( @ind, @element )";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", rowCount);
|
||||
SqlBindString(sqlQuery, "@element", element);
|
||||
SqlStep(sqlQuery);
|
||||
}
|
||||
|
||||
void Array_PushBack_Flt(string tag, float element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_PushBack_Str(tag, FloatToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_PushBack_Int(string tag, int element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_PushBack_Str(tag, IntToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_PushBack_Obj(string tag, object element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_PushBack_Str(tag, ObjectToString(element), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Cuts the array off at size 'size'. Elements beyond size are removed.
|
||||
void Array_Resize(string tag, int size, object obj=OBJECT_INVALID)
|
||||
{
|
||||
// Int immune to sql injection so easier to one-shot it.
|
||||
ExecuteStatement("DELETE FROM "+GetTableName(tag, obj)+" WHERE ind >= " + IntToString(size), obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Array_Shuffle(string tag, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string table = GetTableName(tag, obj, TRUE);
|
||||
ExecuteStatement("CREATE TABLE " +table+ "_temp AS SELECT ROW_NUMBER() OVER(ORDER BY RANDOM())-1, value FROM " +table, obj);
|
||||
ExecuteStatement("DELETE FROM " +table , obj);
|
||||
ExecuteStatement("INSERT INTO " +table+ " SELECT * FROM " +table+ "_temp", obj);
|
||||
ExecuteStatement("DROP TABLE " +table+ "_TEMP", obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int Array_Size(string tag, object obj=OBJECT_INVALID)
|
||||
{
|
||||
return GetRowCount(tag, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Sort the array by value according to 'direction' (ASC or DESC).
|
||||
// Supplying a type allows for correct numerical sorting of integers or floats.
|
||||
void Array_Sort(string tag, string dir="ASC", int type=TYPE_STRING, object obj=OBJECT_INVALID)
|
||||
{
|
||||
string table = GetTableName(tag, obj, TRUE);
|
||||
string direction = GetStringUpperCase(dir);
|
||||
|
||||
if ( ! (direction == "ASC" || direction == "DESC") ) {
|
||||
WriteTimestampedLogEntry("WARNING: Invalid sort direction <" + direction + "> supplied. Defaulting to ASC.");
|
||||
direction = "ASC";
|
||||
}
|
||||
|
||||
// default orderBy for strings.
|
||||
string orderBy = "ORDER BY value " + direction;
|
||||
switch(type) {
|
||||
case TYPE_INTEGER:
|
||||
orderBy = "ORDER BY CAST(value AS INTEGER)" + direction;
|
||||
break;
|
||||
case TYPE_FLOAT:
|
||||
orderBy = "ORDER BY CAST(value AS DECIMAL)" + direction;
|
||||
break;
|
||||
}
|
||||
ExecuteStatement("CREATE TABLE " +table+ "_temp AS SELECT ROW_NUMBER() OVER(" + orderBy + ")-1, value FROM " +table, obj);
|
||||
ExecuteStatement("DELETE FROM " +table, obj);
|
||||
ExecuteStatement("INSERT INTO " +table+ " SELECT * FROM " +table+ "_temp", obj);
|
||||
ExecuteStatement("DROP TABLE " +table+ "_temp", obj);
|
||||
}
|
||||
|
||||
void Array_SortAscending(string tag, int type=TYPE_STRING, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Sort(tag, "ASC", type, obj);
|
||||
}
|
||||
|
||||
void Array_SortDescending(string tag, int type=TYPE_STRING, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Sort(tag, "DESC", type, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Set the value of array index 'index' to a 'element'
|
||||
// This will quietly eat values if index > array size
|
||||
void Array_Set_Str(string tag, int index, string element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
int rows = GetRowCount(tag, obj);
|
||||
if (index >= 0 && index <= rows) {
|
||||
string stmt = "UPDATE "+GetTableName(tag, obj)+" SET value = @element WHERE ind = @ind";
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
SqlBindInt(sqlQuery, "@ind", rows);
|
||||
SqlBindString(sqlQuery, "@element", element);
|
||||
SqlStep(sqlQuery);
|
||||
}
|
||||
}
|
||||
|
||||
void Array_Set_Flt(string tag, int index, float element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Set_Str(tag, index, FloatToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_Set_Int(string tag, int index, int element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Set_Str(tag, index, IntToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_Set_Obj(string tag, int index, object element, object obj=OBJECT_INVALID)
|
||||
{
|
||||
Array_Set_Str(tag, index, ObjectToString(element), obj);
|
||||
}
|
||||
|
||||
void Array_Debug_Dump(string tag, string title = "xxx", object obj=OBJECT_INVALID) {
|
||||
if (title != "xxx") {
|
||||
WriteTimestampedLogEntry("== " + title + " ======================================");
|
||||
}
|
||||
WriteTimestampedLogEntry("Table name = " + GetTableName(tag, obj));
|
||||
string stmt = "SELECT ind, value FROM " + GetTableName(tag, obj);
|
||||
sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt);
|
||||
int ind = -1;
|
||||
string value = "";
|
||||
while ( SqlStep(sqlQuery) ) {
|
||||
ind = SqlGetInt(sqlQuery, 0);
|
||||
value = SqlGetString(sqlQuery, 1);
|
||||
WriteTimestampedLogEntry(tag + "[" + IntToString(ind) + "] = " + value);
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cure Critical Wounds
|
||||
//:: NW_S0_CurCrWn
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// As cure light wounds, except cure critical wounds
|
||||
// cures 4d8 points of damage plus 1 point per
|
||||
// caster level (up to +20).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Oct 18, 2000
|
||||
//:: Modified: 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: VFX Pass By: Preston W, On: June 20, 2001
|
||||
//:: Update Pass By: Preston W, On: July 26, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetSpellTargetObject();
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
int nCure = d8(4);
|
||||
spellsCure(nCure, 20, 32, VFX_IMP_SUNSTRIKE, VFX_IMP_HEALING_G, GetSpellId());
|
||||
if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
|
||||
}
|
||||
}
|
||||
|
@ -1,36 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cure Light Wounds
|
||||
//:: NW_S0_CurLgtW
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// When laying your hand upon a living creature,
|
||||
// you channel positive energy that cures 1d8 points
|
||||
// of damage plus 1 point per caster level (up to +5).
|
||||
// Since undead are powered by negative energy, this
|
||||
// spell inflicts damage on them instead of curing
|
||||
// their wounds. An undead creature can attempt a
|
||||
// Will save to take half damage.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Brennon Holmes
|
||||
//:: Created On: Oct 12, 2000
|
||||
//:: Modified: 69MEH69 JUL2003 Henchman bleeding
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Update Pass By: Preston W, On: July 26, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetSpellTargetObject();
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
int nCure = d8(1);
|
||||
spellsCure(nCure, 5, 8, VFX_IMP_SUNSTRIKE, VFX_IMP_HEALING_S, GetSpellId());
|
||||
if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
|
||||
}
|
||||
}
|
||||
|
@ -1,31 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cure Minor Wounds
|
||||
//:: NW_S0_CurMinW
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// As cure light wounds, except cure minor wounds
|
||||
// cures only 1 point of damage
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Oct 18, 2000
|
||||
//:: Modified: 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Preston Watamaniuk, On: Feb 22, 2001
|
||||
//:: Last Updated By: Preston Watamaniuk, On: April 6, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetSpellTargetObject();
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
int nCure = 1;
|
||||
spellsCure(4, 0, 4, VFX_IMP_SUNSTRIKE, VFX_IMP_HEAD_HEAL, GetSpellId());
|
||||
if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cure Moderate Wounds
|
||||
//:: NW_S0_CurModW
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// As cure light wounds, except cure moderate wounds
|
||||
// cures 2d8 points of damage plus 1 point per
|
||||
// caster level (up to +10).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Oct 18, 2001
|
||||
//:: Modified: 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Update Pass By: Preston W, On: July 25, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetSpellTargetObject();
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
int nCure = d8(2);
|
||||
spellsCure(nCure, 10, 16, VFX_IMP_SUNSTRIKE, VFX_IMP_HEALING_M, GetSpellId());
|
||||
if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
|
||||
}
|
||||
}
|
||||
|
@ -1,67 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Harm]
|
||||
//:: [NW_S0_Harm.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Reduces target to 1d4 HP on successful touch
|
||||
//:: attack. If the target is undead it is healed.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Keith Soleski
|
||||
//:: Created On: Jan 18, 2001
|
||||
//:: Modified: 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: VFX Pass By: Preston W, On: June 20, 2001
|
||||
//:: Update Pass By: Preston W, On: Aug 1, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget = GetSpellTargetObject();
|
||||
int nDamage, nHeal;
|
||||
int nMetaMagic = GetMetaMagicFeat();
|
||||
int nTouch = TouchAttackMelee(oTarget);
|
||||
effect eVis = EffectVisualEffect(246);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_G);
|
||||
effect eHeal, eDam;
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
//Check that the target is undead
|
||||
if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
//Figure out the amount of damage to heal
|
||||
nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget);
|
||||
//Set the heal effect
|
||||
eHeal = EffectHeal(nHeal);
|
||||
//Apply heal effect and VFX impact
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HARM, FALSE));
|
||||
if(GetIsHenchmanDying(oTarget))
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, 21);
|
||||
}
|
||||
}
|
||||
else if (nTouch) //== TRUE) 1 or 2 are valid return numbers from TouchAttackMelee
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HARM));
|
||||
if (!MyResistSpell(OBJECT_SELF, oTarget))
|
||||
{
|
||||
nDamage = GetCurrentHitPoints(oTarget) - d4(1);
|
||||
//Check for metamagic
|
||||
if (nMetaMagic == METAMAGIC_MAXIMIZE)
|
||||
{
|
||||
nDamage = GetCurrentHitPoints(oTarget) - 1;
|
||||
}
|
||||
eDam = EffectDamage(nDamage,DAMAGE_TYPE_NEGATIVE);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Heal
|
||||
//:: [NW_S0_Heal.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Heals the target to full unless they are undead.
|
||||
//:: If undead they reduced to 1d4 HP.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 12, 2001
|
||||
//:: Modified 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Update Pass By: Preston W, On: Aug 1, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget = GetSpellTargetObject();
|
||||
effect eKill, eHeal;
|
||||
int nDamage, nHeal, nModify, nMetaMagic, nTouch;
|
||||
effect eSun = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_X);
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
//Check to see if the target is an undead
|
||||
if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEAL));
|
||||
//Make a touch attack
|
||||
if (TouchAttackMelee(oTarget))
|
||||
{
|
||||
//Make SR check
|
||||
if (!MyResistSpell(OBJECT_SELF, oTarget))
|
||||
{
|
||||
//Roll damage
|
||||
nModify = d4();
|
||||
nMetaMagic = GetMetaMagicFeat();
|
||||
//Make metamagic check
|
||||
if (nMetaMagic == METAMAGIC_MAXIMIZE)
|
||||
{
|
||||
nModify = 1;
|
||||
}
|
||||
//Figure out the amount of damage to inflict
|
||||
nDamage = GetCurrentHitPoints(oTarget) - nModify;
|
||||
//Set damage
|
||||
eKill = EffectDamage(nDamage, DAMAGE_TYPE_POSITIVE);
|
||||
//Apply damage effect and VFX impact
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eSun, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEAL, FALSE));
|
||||
//Figure out how much to heal
|
||||
nHeal = GetMaxHitPoints(oTarget);
|
||||
//Set the heal effect
|
||||
eHeal = EffectHeal(nHeal);
|
||||
//Apply the heal effect and the VFX impact
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
||||
if(GetIsHenchmanDying(oTarget))
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, 21);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,115 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Healing Circle
|
||||
//:: NW_S0_HealCirc
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// Positive energy spreads out in all directions
|
||||
// from the point of origin, curing 1d8 points of
|
||||
// damage plus 1 point per caster level (maximum +20)
|
||||
// to nearby living allies.
|
||||
//
|
||||
// Like cure spells, healing circle damages undead in
|
||||
// its area rather than curing them.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Oct 18,2000
|
||||
//:: Modified 69MEH69 JUL2003
|
||||
//:://////////////////////////////////////////////
|
||||
//:: VFX Pass By: Preston W, On: June 20, 2001
|
||||
//:: Update Pass By: Preston W, On: Aug 1, 2001
|
||||
#include "69_hench_lib"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget;
|
||||
int nCasterLvl = GetCasterLevel(OBJECT_SELF);
|
||||
int nDamagen, nModify, nHurt, nHP;
|
||||
int nMetaMagic = GetMetaMagicFeat();
|
||||
effect eKill;
|
||||
effect eHeal;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_M);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
|
||||
float fDelay;
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
//Limit caster level
|
||||
if (nCasterLvl > 20)
|
||||
{
|
||||
nCasterLvl = 20;
|
||||
}
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation());
|
||||
//Get first target in shape
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
fDelay = GetRandomDelay();
|
||||
//Check if racial type is undead
|
||||
if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE));
|
||||
//Make SR check
|
||||
if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
|
||||
{
|
||||
nModify = d8() + nCasterLvl;
|
||||
//Make metamagic check
|
||||
if (nMetaMagic == METAMAGIC_MAXIMIZE)
|
||||
{
|
||||
nModify = 8 + nCasterLvl;
|
||||
}
|
||||
//Make Fort save
|
||||
if (MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
|
||||
{
|
||||
nModify /= 2;
|
||||
}
|
||||
//Calculate damage
|
||||
nHurt = nModify;
|
||||
//Set damage effect
|
||||
eKill = EffectDamage(nHurt, DAMAGE_TYPE_POSITIVE);
|
||||
//Apply damage effect and VFX impact
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// * May 2003: Heal Neutrals as well
|
||||
if(!GetIsReactionTypeHostile(oTarget) || GetFactionEqual(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE, FALSE));
|
||||
nHP = d8();
|
||||
//Enter Metamagic conditions
|
||||
if (nMetaMagic == METAMAGIC_MAXIMIZE)
|
||||
{
|
||||
nHP =8;//Damage is at max
|
||||
}
|
||||
if (nMetaMagic == METAMAGIC_EMPOWER)
|
||||
{
|
||||
nHP = nHP + (nHP/2); //Damage/Healing is +50%
|
||||
}
|
||||
//Set healing effect
|
||||
nHP = nHP + nCasterLvl;
|
||||
eHeal = EffectHeal(nHP);
|
||||
//Apply heal effect and VFX impact
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
||||
if(GetIsHenchmanDying(oTarget))
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHP);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//Get next target in the shape
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Raise Dead]
|
||||
//:: [NW_S0_RaisDead.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Brings a character back to life with 1 HP.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 31, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
|
||||
//:: VFX Pass By: Preston W, On: June 22, 2001
|
||||
|
||||
// Jasperre:
|
||||
// - To make this operate effectivly, the AI that is, the PC speaks silently
|
||||
// when they are raised, to let NPC's get them :-P
|
||||
// This is not required, but is a simple addition.
|
||||
// - It also adds NPC re-targeting to get them back into combat.
|
||||
|
||||
#include "x2_inc_spellhook"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
If you want to make changes to all spells,
|
||||
check x2_inc_spellhook.nss to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
|
||||
//Declare major variables
|
||||
object oTarget = GetSpellTargetObject();
|
||||
effect eRaise = EffectResurrection();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RAISE_DEAD, FALSE));
|
||||
if(GetIsDead(oTarget))
|
||||
{
|
||||
//Apply raise dead effect and VFX impact
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget);
|
||||
// Jasperre's additions...
|
||||
AssignCommand(oTarget, SpeakString("I AM ALIVE!", TALKVOLUME_SILENT_TALK));
|
||||
if(!GetIsPC(oTarget) && !GetIsDMPossessed(oTarget))
|
||||
{
|
||||
// Default AI script
|
||||
ExecuteScript("nw_c2_default3", oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,91 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Ressurection]
|
||||
//:: [NW_S0_Ressurec.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Brings a character back to life with full
|
||||
//:: health.
|
||||
//:: When cast on placeables, you get a default error message.
|
||||
//:: * You can specify a different message in
|
||||
//:: X2_L_RESURRECT_SPELL_MSG_RESREF
|
||||
//:: * You can turn off the message by setting the variable
|
||||
//:: to -1
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 31, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Georg Z on 2003-07-31
|
||||
//:: VFX Pass By: Preston W, On: June 22, 2001
|
||||
|
||||
// Jasperre:
|
||||
// - To make this operate effectivly, the AI that is, the PC speaks silently
|
||||
// when they are raised, to let NPC's get them :-P
|
||||
// This is not required, but is a simple addition.
|
||||
// - It also adds NPC re-targeting to get them back into combat.
|
||||
|
||||
#include "x2_inc_spellhook"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
If you want to make changes to all spells,
|
||||
check x2_inc_spellhook.nss to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
|
||||
//Get the spell target
|
||||
object oTarget = GetSpellTargetObject();
|
||||
//Check to make sure the target is dead first
|
||||
//Fire cast spell at event for the specified target
|
||||
if (GetIsObjectValid(oTarget))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESURRECTION, FALSE));
|
||||
if (GetIsDead(oTarget))
|
||||
{
|
||||
//Declare major variables
|
||||
int nHealed = GetMaxHitPoints(oTarget);
|
||||
effect eRaise = EffectResurrection();
|
||||
effect eHeal = EffectHeal(nHealed + 10);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
|
||||
//Apply the heal, raise dead and VFX impact effect
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
|
||||
// Jasperre's additions...
|
||||
AssignCommand(oTarget, SpeakString("I AM ALIVE!", TALKVOLUME_SILENT_TALK));
|
||||
if(!GetIsPC(oTarget) && !GetIsDMPossessed(oTarget))
|
||||
{
|
||||
// Default AI script
|
||||
ExecuteScript("nw_c2_default3", oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
|
||||
{
|
||||
int nStrRef = GetLocalInt(oTarget,"X2_L_RESURRECT_SPELL_MSG_RESREF");
|
||||
if (nStrRef == 0)
|
||||
{
|
||||
nStrRef = 83861;
|
||||
}
|
||||
if (nStrRef != -1)
|
||||
{
|
||||
FloatingTextStrRefOnCreature(nStrRef,OBJECT_SELF);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
113
_module/nss/nwnx.nss
Normal file
113
_module/nss/nwnx.nss
Normal file
@ -0,0 +1,113 @@
|
||||
/// @addtogroup nwnx NWNX
|
||||
/// @brief Functions for plugin developers.
|
||||
/// @{
|
||||
/// @file nwnx.nss
|
||||
|
||||
/// @brief Scripting interface to NWNX.
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
void NWNX_CallFunction(string pluginName, string functionName);
|
||||
/// @brief Pushes the specified type to the c++ side
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
/// @param value The value of specified type to push.
|
||||
void NWNX_PushArgumentInt(string pluginName, string functionName, int value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentFloat(string pluginName, string functionName, float value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentObject(string pluginName, string functionName, object value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentString(string pluginName, string functionName, string value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentEffect(string pluginName, string functionName, effect value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentItemProperty(string pluginName, string functionName, itemproperty value);
|
||||
/// @brief Returns the specified type from the c++ side
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
/// @return The value of specified type.
|
||||
int NWNX_GetReturnValueInt(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
float NWNX_GetReturnValueFloat(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
object NWNX_GetReturnValueObject(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
string NWNX_GetReturnValueString(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
effect NWNX_GetReturnValueEffect(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
itemproperty NWNX_GetReturnValueItemProperty(string pluginName, string functionName);
|
||||
|
||||
/// @private
|
||||
string NWNX_INTERNAL_BuildString(string pluginName, string functionName, string operation)
|
||||
{
|
||||
return "NWNXEE!ABIv2!" + pluginName + "!" + functionName + "!" + operation;
|
||||
}
|
||||
/// @}
|
||||
|
||||
void NWNX_CallFunction(string pluginName, string functionName)
|
||||
{
|
||||
PlaySound(NWNX_INTERNAL_BuildString(pluginName, functionName, "CALL"));
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentInt(string pluginName, string functionName, int value)
|
||||
{
|
||||
SetLocalInt(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentFloat(string pluginName, string functionName, float value)
|
||||
{
|
||||
SetLocalFloat(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentObject(string pluginName, string functionName, object value)
|
||||
{
|
||||
SetLocalObject(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentString(string pluginName, string functionName, string value)
|
||||
{
|
||||
SetLocalString(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentEffect(string pluginName, string functionName, effect value)
|
||||
{
|
||||
TagEffect(value, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"));
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentItemProperty(string pluginName, string functionName, itemproperty value)
|
||||
{
|
||||
TagItemProperty(value, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"));
|
||||
}
|
||||
|
||||
int NWNX_GetReturnValueInt(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalInt(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
float NWNX_GetReturnValueFloat(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalFloat(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
object NWNX_GetReturnValueObject(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalObject(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
string NWNX_GetReturnValueString(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalString(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
effect NWNX_GetReturnValueEffect(string pluginName, string functionName)
|
||||
{
|
||||
effect e;
|
||||
return TagEffect(e, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
itemproperty NWNX_GetReturnValueItemProperty(string pluginName, string functionName)
|
||||
{
|
||||
itemproperty ip;
|
||||
return TagItemProperty(ip, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
344
_module/nss/nwnx_admin.nss
Normal file
344
_module/nss/nwnx_admin.nss
Normal file
@ -0,0 +1,344 @@
|
||||
/// @addtogroup admin Administration
|
||||
/// @brief Various admin related functions
|
||||
/// @{
|
||||
/// @file nwnx_admin.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Administration = "NWNX_Administration"; ///< @private
|
||||
|
||||
/// @name Administration Options
|
||||
/// @anchor admin_opts
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_ADMINISTRATION_OPTION_ALL_KILLABLE = 0; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_NON_PARTY_KILLABLE = 1; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_REQUIRE_RESURRECTION = 2; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_STOLEN_ITEMS = 3; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_ITEMS = 4; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_EXP = 5; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_GOLD = 6; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_GOLD_NUM = 7;
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_EXP_NUM = 8;
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_ITEMS_NUM = 9;
|
||||
const int NWNX_ADMINISTRATION_OPTION_PVP_SETTING = 10; // 0 = No PVP, 1 = Party PVP, 2 = Full PVP
|
||||
const int NWNX_ADMINISTRATION_OPTION_PAUSE_AND_PLAY = 11; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ONE_PARTY_ONLY = 12; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ENFORCE_LEGAL_CHARACTERS = 13; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ITEM_LEVEL_RESTRICTIONS = 14; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_CDKEY_BANLIST_ALLOWLIST = 15; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_DISALLOW_SHOUTING = 16; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_SHOW_DM_JOIN_MESSAGE = 17; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_BACKUP_SAVED_CHARACTERS = 18; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_AUTO_FAIL_SAVE_ON_1 = 19; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_VALIDATE_SPELLS = 20; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_EXAMINE_EFFECTS = 21; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_EXAMINE_CHALLENGE_RATING = 22; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_USE_MAX_HITPOINTS = 23; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_RESTORE_SPELLS_USES = 24; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_RESET_ENCOUNTER_SPAWN_POOL = 25; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_HIDE_HITPOINTS_GAINED = 26; // TRUE/FALSE
|
||||
/// @}
|
||||
|
||||
/// @name Administration Debug Types
|
||||
/// @anchor admin_debug
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_ADMINISTRATION_DEBUG_COMBAT = 0; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_SAVING_THROW = 1; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_MOVEMENT_SPEED = 2; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_HIT_DIE = 3; // TRUE/FALSE
|
||||
/// @}
|
||||
|
||||
/// @brief Gets the current player password.
|
||||
/// @return The current player password.
|
||||
string NWNX_Administration_GetPlayerPassword();
|
||||
|
||||
/// @brief Sets the password for players to login.
|
||||
/// @param password The password to use.
|
||||
void NWNX_Administration_SetPlayerPassword(string password);
|
||||
|
||||
/// @brief Clears the player password required to login.
|
||||
void NWNX_Administration_ClearPlayerPassword();
|
||||
|
||||
/// @brief Gets the current DM password.
|
||||
/// @return The current DM password.
|
||||
string NWNX_Administration_GetDMPassword();
|
||||
|
||||
/// @brief Sets the password for DMs to login.
|
||||
/// @param password The password to use.
|
||||
void NWNX_Administration_SetDMPassword(string password);
|
||||
|
||||
/// @brief Signals the server to immediately shut down.
|
||||
void NWNX_Administration_ShutdownServer();
|
||||
|
||||
/// @brief Deletes the player character from the servervault
|
||||
///
|
||||
/// The PC will be immediately booted from the game with a "Delete Character" message
|
||||
///
|
||||
/// @param oPC The player to delete.
|
||||
/// @param bPreserveBackup If true, it will leave the file on server, only appending ".deleted0" to the bic filename.
|
||||
/// @param sKickMessage An optional kick message, if left blank it will default to "Delete Character" as reason.
|
||||
void NWNX_Administration_DeletePlayerCharacter(object oPC, int bPreserveBackup = TRUE, string sKickMessage = "");
|
||||
|
||||
/// @brief Bans the provided IP.
|
||||
/// @param ip The IP Address to ban.
|
||||
void NWNX_Administration_AddBannedIP(string ip);
|
||||
|
||||
/// @brief Removes the ban on the provided IP.
|
||||
/// @param ip The IP Address to unban.
|
||||
void NWNX_Administration_RemoveBannedIP(string ip);
|
||||
|
||||
/// @brief Bans the provided Public CD Key.
|
||||
/// @param key The Public CD Key to ban.
|
||||
void NWNX_Administration_AddBannedCDKey(string key);
|
||||
|
||||
/// @brief Removes the ban on the provided Public CD Key.
|
||||
/// @param key The Public CD Key to unban.
|
||||
void NWNX_Administration_RemoveBannedCDKey(string key);
|
||||
|
||||
/// @brief Bans the provided playername.
|
||||
/// @param playerName The player name (community name) to ban.
|
||||
/// @warning A user can change their playername at will.
|
||||
void NWNX_Administration_AddBannedPlayerName(string playerName);
|
||||
|
||||
/// @brief Removes the ban on the provided playername.
|
||||
/// @param playerName The player name (community name) to unban.
|
||||
void NWNX_Administration_RemoveBannedPlayerName(string playerName);
|
||||
|
||||
/// @brief Get a list of all banned IPs/Keys/names as a string.
|
||||
/// @return A string with a listing of the banned IPs/Keys/names.
|
||||
string NWNX_Administration_GetBannedList();
|
||||
|
||||
/// @brief Set the module's name as shown to the serverlist.
|
||||
/// @param name The name to give the module.
|
||||
void NWNX_Administration_SetModuleName(string name);
|
||||
|
||||
/// @brief Set the server's name as shown to the serverlist.
|
||||
/// @param name The name to give the server.
|
||||
void NWNX_Administration_SetServerName(string name);
|
||||
|
||||
/// @brief Returns the server's name as shown to the serverlist.
|
||||
string NWNX_Administration_GetServerName();
|
||||
|
||||
/// @brief Get an @ref admin_opts "Administration Option" value.
|
||||
/// @param option An @ref admin_opts "Administration Option".
|
||||
/// @return The current setting for the supplied option from @ref admin_opts "Administration Options".
|
||||
int NWNX_Administration_GetPlayOption(int option);
|
||||
|
||||
/// @brief Set an @ref admin_opts "Administration Options" to a value.
|
||||
/// @param option The option to adjust from @ref admin_opts "Administration Options".
|
||||
/// @param value The new value for the option.
|
||||
void NWNX_Administration_SetPlayOption(int option, int value);
|
||||
|
||||
/// @brief Delete the TURD of playerName + characterName.
|
||||
///
|
||||
/// At times a PC may get stuck in a permanent crash loop when attempting to log
|
||||
/// in. This function allows administrators to delete their Temporary User
|
||||
/// Resource Data where the PC's current location is stored allowing them to log
|
||||
/// into the starting area.
|
||||
///
|
||||
/// @param playerName The community (login name).
|
||||
/// @param characterName The character name.
|
||||
/// @return Returns TRUE if successful
|
||||
int NWNX_Administration_DeleteTURD(string playerName, string characterName);
|
||||
|
||||
/// @brief Get an @ref admin_debug "Administration Debug Type" value.
|
||||
/// @param type An @ref admin_debug "Administration Debug Type".
|
||||
/// @return The current value for the supplied debug type from @ref admin_debug "Administration Debug Types".
|
||||
int NWNX_Administration_GetDebugValue(int type);
|
||||
|
||||
/// @brief Set an @ref admin_debug "Administration Debug Type" to a value.
|
||||
/// @param type The debug type to adjust from @ref admin_debug "Administration Debug Types".
|
||||
/// @param state The new state for the debug type, TRUE or FALSE
|
||||
void NWNX_Administration_SetDebugValue(int type, int state);
|
||||
|
||||
/// @brief Reload all rules (2da stuff etc).
|
||||
/// @warning DANGER, DRAGONS. Bad things may or may not happen.
|
||||
void NWNX_Administration_ReloadRules();
|
||||
|
||||
/// @}
|
||||
|
||||
string NWNX_Administration_GetPlayerPassword()
|
||||
{
|
||||
string sFunc = "GetPlayerPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetPlayerPassword(string password)
|
||||
{
|
||||
string sFunc = "SetPlayerPassword";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, password);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ClearPlayerPassword()
|
||||
{
|
||||
string sFunc = "ClearPlayerPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Administration_GetDMPassword()
|
||||
{
|
||||
string sFunc = "GetDMPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetDMPassword(string password)
|
||||
{
|
||||
string sFunc = "SetDMPassword";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, password);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ShutdownServer()
|
||||
{
|
||||
string sFunc = "ShutdownServer";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_DeletePlayerCharacter(object oPC, int bPreserveBackup = TRUE, string sKickMessage = "")
|
||||
{
|
||||
string sFunc = "DeletePlayerCharacter";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, sKickMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, bPreserveBackup);
|
||||
NWNX_PushArgumentObject(NWNX_Administration, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_AddBannedIP(string ip)
|
||||
{
|
||||
string sFunc = "AddBannedIP";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedIP(string ip)
|
||||
{
|
||||
string sFunc = "RemoveBannedIP";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_AddBannedCDKey(string key)
|
||||
{
|
||||
string sFunc = "AddBannedCDKey";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, key);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedCDKey(string key)
|
||||
{
|
||||
string sFunc = "RemoveBannedCDKey";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, key);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_AddBannedPlayerName(string playerName)
|
||||
{
|
||||
string sFunc = "AddBannedPlayerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedPlayerName(string playerName)
|
||||
{
|
||||
string sFunc = "RemoveBannedPlayerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
string NWNX_Administration_GetBannedList()
|
||||
{
|
||||
string sFunc = "GetBannedList";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetModuleName(string name)
|
||||
{
|
||||
string sFunc = "SetModuleName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, name);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetServerName(string name)
|
||||
{
|
||||
string sFunc = "SetServerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, name);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Administration_GetServerName()
|
||||
{
|
||||
string sFunc = "GetServerName";
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_GetPlayOption(int option)
|
||||
{
|
||||
string sFunc = "GetPlayOption";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, option);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetPlayOption(int option, int value)
|
||||
{
|
||||
string sFunc = "SetPlayOption";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, option);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_DeleteTURD(string playerName, string characterName)
|
||||
{
|
||||
string sFunc = "DeleteTURD";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, characterName);
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_GetDebugValue(int type)
|
||||
{
|
||||
string sFunc = "GetDebugValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, type);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetDebugValue(int type, int state)
|
||||
{
|
||||
string sFunc = "SetDebugValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, state);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, type);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ReloadRules()
|
||||
{
|
||||
string sFunc = "ReloadRules";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
73
_module/nss/nwnx_appearance.nss
Normal file
73
_module/nss/nwnx_appearance.nss
Normal file
@ -0,0 +1,73 @@
|
||||
/// @addtogroup appearance Appearance
|
||||
/// @brief Allows the appearance and some other things of creatures to be overridden per player.
|
||||
/// @{
|
||||
/// @file nwnx_appearance.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Appearance = "NWNX_Appearance"; ///< @private
|
||||
|
||||
/// @name Appearance Types
|
||||
/// @anchor appearance_types
|
||||
///
|
||||
/// The various types of changes that can be made to how a PC is perceived.
|
||||
/// @{
|
||||
const int NWNX_APPEARANCE_TYPE_APPEARANCE = 0; ///< APPEARANCE_TYPE_* or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_GENDER = 1; ///< GENDER_* or -1 to remove
|
||||
|
||||
/// @brief 0-GetMaxHitPoints(oCreature) or -1 to remove
|
||||
/// @note This is visual only. Does not change the Examine Window health status.
|
||||
const int NWNX_APPEARANCE_TYPE_HITPOINTS = 2;
|
||||
const int NWNX_APPEARANCE_TYPE_HAIR_COLOR = 3; ///< 0-175 or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_SKIN_COLOR = 4; ///< 0-175 or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_PHENOTYPE = 5; ///< PHENOTYPE_* or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_HEAD_TYPE = 6; ///< 0-? or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_SOUNDSET = 7; ///< See soundset.2da or -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_TAIL_TYPE = 8; ///< CREATURE_TAIL_TYPE_* or see tailmodel.2da, -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_WING_TYPE = 9; ///< CREATURE_WING_TYPE_* or see wingmodel.2da, -1 to remove
|
||||
const int NWNX_APPEARANCE_TYPE_FOOTSTEP_SOUND = 10; ///< 0-17 or see footstepsounds.2da, -1 to remove
|
||||
|
||||
/// @brief See portraits.2da, -1 to remove
|
||||
/// @note Does not change the Examine Window portrait.
|
||||
const int NWNX_APPEARANCE_TYPE_PORTRAIT = 11;
|
||||
///@}
|
||||
|
||||
/// @brief Override a creature's appearance type for a player.
|
||||
/// @param oPlayer The player who will see/hear things differently.
|
||||
/// @param oCreature The target creature whose appearance type to alter for oPlayer. Can be a PC.
|
||||
/// @param nType The @ref appearance_types "Appearance Type" to set or -1 to fully remove override.
|
||||
/// @param nValue The new value for the appearance type.
|
||||
void NWNX_Appearance_SetOverride(object oPlayer, object oCreature, int nType, int nValue);
|
||||
|
||||
/// @brief Get a creature's appearance type for a player.
|
||||
/// @param oPlayer The player who see/hear things differently.
|
||||
/// @param oCreature The target creature whose appearance type is altered for oPlayer. Can be a PC.
|
||||
/// @param nType The @ref appearance_types "Appearance Type" to get.
|
||||
/// @return The value for the appearance type or -1 when not set.
|
||||
int NWNX_Appearance_GetOverride(object oPlayer, object oCreature, int nType);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Appearance_SetOverride(object oPlayer, object oCreature, int nType, int nValue)
|
||||
{
|
||||
string sFunc = "SetOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Appearance, sFunc, nValue);
|
||||
NWNX_PushArgumentInt(NWNX_Appearance, sFunc, nType);
|
||||
NWNX_PushArgumentObject(NWNX_Appearance, sFunc, oCreature);
|
||||
NWNX_PushArgumentObject(NWNX_Appearance, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Appearance, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Appearance_GetOverride(object oPlayer, object oCreature, int nType)
|
||||
{
|
||||
string sFunc = "GetOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Appearance, sFunc, nType);
|
||||
NWNX_PushArgumentObject(NWNX_Appearance, sFunc, oCreature);
|
||||
NWNX_PushArgumentObject(NWNX_Appearance, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Appearance, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Appearance, sFunc);
|
||||
}
|
660
_module/nss/nwnx_area.nss
Normal file
660
_module/nss/nwnx_area.nss
Normal file
@ -0,0 +1,660 @@
|
||||
/// @addtogroup area Area
|
||||
/// @brief Functions exposing additional area properties as well as creating transitions.
|
||||
/// @{
|
||||
/// @file nwnx_area.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Area = "NWNX_Area"; ///< @private
|
||||
|
||||
/// @name Area PVP Settings
|
||||
/// @anchor area_pvp
|
||||
/// @{
|
||||
const int NWNX_AREA_PVP_SETTING_NO_PVP = 0;
|
||||
const int NWNX_AREA_PVP_SETTING_PARTY_PVP = 1;
|
||||
const int NWNX_AREA_PVP_SETTING_FULL_PVP = 2;
|
||||
const int NWNX_AREA_PVP_SETTING_SERVER_DEFAULT = 3;
|
||||
/// @}
|
||||
|
||||
/// @name Area Weather Settings
|
||||
/// @anchor area_weather
|
||||
/// @{
|
||||
const int NWNX_AREA_WEATHER_CHANCE_RAIN = 0;
|
||||
const int NWNX_AREA_WEATHER_CHANCE_SNOW = 1;
|
||||
const int NWNX_AREA_WEATHER_CHANCE_LIGHTNING = 2;
|
||||
/// @}
|
||||
|
||||
/// @name Area Day Night Cycle Settings
|
||||
/// @anchor area_daynight
|
||||
/// @{
|
||||
const int NWNX_AREA_DAYNIGHTCYCLE_CYCLE_DAY_NIGHT = 0;
|
||||
const int NWNX_AREA_DAYNIGHTCYCLE_ALWAYS_BRIGHT = 1;
|
||||
const int NWNX_AREA_DAYNIGHTCYCLE_ALWAYS_DARK = 2;
|
||||
/// @}
|
||||
|
||||
/// @name Area Sun/Moon Color Settings
|
||||
/// @anchor area_color
|
||||
/// @{
|
||||
const int NWNX_AREA_COLOR_TYPE_MOON_AMBIENT = 0;
|
||||
const int NWNX_AREA_COLOR_TYPE_MOON_DIFFUSE = 1;
|
||||
const int NWNX_AREA_COLOR_TYPE_SUN_AMBIENT = 2;
|
||||
const int NWNX_AREA_COLOR_TYPE_SUN_DIFFUSE = 3;
|
||||
/// @}
|
||||
|
||||
/// @brief A tile info struct
|
||||
struct NWNX_Area_TileInfo
|
||||
{
|
||||
int nID; ///< The tile's ID
|
||||
int nHeight; ///< The tile's height
|
||||
int nOrientation; ///< The tile's orientation
|
||||
int nGridX; ///< The tile's grid x position
|
||||
int nGridY; ///< The tile's grid y position
|
||||
};
|
||||
|
||||
/// @brief Gets the number of players in area.
|
||||
/// @param area The area object.
|
||||
/// @return The player count for the area.
|
||||
int NWNX_Area_GetNumberOfPlayersInArea(object area);
|
||||
|
||||
/// @brief Gets the creature that last entered area.
|
||||
/// @param area The area object.
|
||||
/// @return The most recent creature to enter the area.
|
||||
object NWNX_Area_GetLastEntered(object area);
|
||||
|
||||
/// @brief Gets the creature that last left area
|
||||
/// @param area The area object.
|
||||
object NWNX_Area_GetLastLeft(object area);
|
||||
|
||||
/// @brief Get the PVP setting of area
|
||||
/// @param area The area object.
|
||||
/// @return Returns the @ref area_pvp "PVP Setting" for the area.
|
||||
int NWNX_Area_GetPVPSetting(object area);
|
||||
|
||||
/// @brief Set the PVP setting of area
|
||||
/// @param area The area object.
|
||||
/// @param pvpSetting One of @ref area_pvp the "PVP Settings".
|
||||
void NWNX_Area_SetPVPSetting(object area, int pvpSetting);
|
||||
|
||||
/// @brief Get the spot modifier of area
|
||||
/// @param area The area object.
|
||||
/// @return The value of the Spot skill modifier for this area.
|
||||
int NWNX_Area_GetAreaSpotModifier(object area);
|
||||
|
||||
/// @brief Set the spot modifier of area
|
||||
/// @param area The area object.
|
||||
/// @param spotModifier The modifier to the Spot skill for this area.
|
||||
/// @sa NWNX_SkillRanks_SetAreaModifier() to change any skill modifier.
|
||||
void NWNX_Area_SetAreaSpotModifier(object area, int spotModifier);
|
||||
|
||||
/// @brief Get the listen modifer of area
|
||||
/// @param area The area object.
|
||||
/// @return The value of the Listen skill modifier for this area.
|
||||
int NWNX_Area_GetAreaListenModifier(object area);
|
||||
|
||||
/// @brief Set the listen modifier of area
|
||||
/// @param area The area object.
|
||||
/// @param listenModifier The modifier to the Listen skill for this area.
|
||||
/// @sa NWNX_SkillRanks_SetAreaModifier() to change any skill modifier.
|
||||
void NWNX_Area_SetAreaListenModifier(object area, int listenModifier);
|
||||
|
||||
/// @brief Checks the No Resting area flag
|
||||
/// @param area The area object.
|
||||
/// @return TRUE if resting is not allowed in area.
|
||||
int NWNX_Area_GetNoRestingAllowed(object area);
|
||||
|
||||
/// @brief Set whether to disable resting in the area.
|
||||
/// @param area The area object.
|
||||
/// @param bNoRestingAllowed TRUE to disable resting in the area.
|
||||
void NWNX_Area_SetNoRestingAllowed(object area, int bNoRestingAllowed);
|
||||
|
||||
/// @brief Get the wind power in area
|
||||
/// @param area The area object.
|
||||
/// @return The wind power for the area. (0-2)
|
||||
int NWNX_Area_GetWindPower(object area);
|
||||
|
||||
/// @brief Set the wind power in area
|
||||
/// @param area The area object.
|
||||
/// @param windPower Set to 0, 1 or 2.
|
||||
void NWNX_Area_SetWindPower(object area, int windPower);
|
||||
|
||||
/// @brief Get the weather chance of type in area
|
||||
/// @param type A @ref area_weather "Weather Setting".
|
||||
/// @param area The area object.
|
||||
/// @return The percentage chance for the weather type. (0-100)
|
||||
int NWNX_Area_GetWeatherChance(object area, int type);
|
||||
|
||||
/// @brief Set the weather chance of type in area
|
||||
/// @param area The area object.
|
||||
/// @param type A @ref area_weather "Weather Setting".
|
||||
/// @param chance The chance this weather event occurs.
|
||||
void NWNX_Area_SetWeatherChance(object area, int type, int chance);
|
||||
|
||||
/// @brief Get the fog clip distance in area
|
||||
/// @param area The area object.
|
||||
/// @return The fog clip distance.
|
||||
float NWNX_Area_GetFogClipDistance(object area);
|
||||
|
||||
/// @brief Set the fog clip distance in area
|
||||
/// @param area The area object.
|
||||
/// @param distance The new fog clip distance.
|
||||
void NWNX_Area_SetFogClipDistance(object area, float distance);
|
||||
|
||||
/// @brief Get the shadow opacity of area
|
||||
/// @param area The area object.
|
||||
/// @return The shadow opacity for the area. (0-100)
|
||||
int NWNX_Area_GetShadowOpacity(object area);
|
||||
|
||||
/// @brief Set the shadow opacity of area
|
||||
/// @param area The area object.
|
||||
/// @param shadowOpacity The shadow opacity to set for the area (0-100).
|
||||
void NWNX_Area_SetShadowOpacity(object area, int shadowOpacity);
|
||||
|
||||
/// @brief Get the day/night cycle of area
|
||||
/// @param area The area object.
|
||||
/// @return The @ref area_daynight "Day Night Cycle Setting".
|
||||
int NWNX_Area_GetDayNightCycle(object area);
|
||||
|
||||
/// @brief Set the day/night cycle of area
|
||||
/// @param area The area object.
|
||||
/// @param type = A @ref area_daynight "Day Night Cycle Setting".
|
||||
void NWNX_Area_SetDayNightCycle(object area, int type);
|
||||
|
||||
/// @brief Get the Sun/Moon Ambient/Diffuse colors of area
|
||||
/// @param area The area object.
|
||||
/// @param type = A @ref area_color "Sun/Moon Color Setting".
|
||||
/// @return A FOG_COLOR_* or a custom value, -1 on error.
|
||||
int NWNX_Area_GetSunMoonColors(object area, int type);
|
||||
|
||||
/// @brief Set the Sun/Moon Ambient/Diffuse colors of area
|
||||
// type = NWNX_AREA_COLOR_TYPE_*
|
||||
/// @param area The area object.
|
||||
/// @param type = A @ref area_color "Sun/Moon Color Setting".
|
||||
/// @param color = A FOG_COLOR_*.
|
||||
/// @note The color can also be represented as a hex RGB number if specific color shades are desired.
|
||||
/// The format of a hex specified color would be 0xFFEEDD where
|
||||
/// * FF would represent the amount of red in the color
|
||||
/// * EE would represent the amount of green in the color
|
||||
/// * DD would represent the amount of blue in the color.
|
||||
void NWNX_Area_SetSunMoonColors(object area, int type, int color);
|
||||
|
||||
/// @brief Create and returns a transition (square shaped of specified size) at a location.
|
||||
/// @param area The area object.
|
||||
/// @param target A door or waypoint object.
|
||||
/// @param x,y,z The position to create the transition.
|
||||
/// @param size The size of the square.
|
||||
/// @param tag If specified, the returning object will have this tag.
|
||||
/// @sa NWNX_Object_SetTriggerGeometry() if you wish to draw the transition as something other than a square.
|
||||
object NWNX_Area_CreateTransition(object area, object target, float x, float y, float z, float size = 2.0f, string tag="");
|
||||
|
||||
/// @brief Get the state of a tile animation loop.
|
||||
/// @param oArea The area object.
|
||||
/// @param fTileX, fTileY The coordinates of the tile.
|
||||
/// @param nAnimLoop The loop to check. (1-3)
|
||||
/// @return TRUE if the loop is enabled.
|
||||
int NWNX_Area_GetTileAnimationLoop(object oArea, float fTileX, float fTileY, int nAnimLoop);
|
||||
|
||||
/// @brief Set the state of a tile animation loop.
|
||||
/// @param oArea The area object.
|
||||
/// @param fTileX, fTileY The coordinates of the tile.
|
||||
/// @param nAnimLoop The loop to set (1-3).
|
||||
/// @param bEnabled TRUE or FALSE.
|
||||
/// @note Requires clients to re-enter the area for it to take effect
|
||||
void NWNX_Area_SetTileAnimationLoop(object oArea, float fTileX, float fTileY, int nAnimLoop, int bEnabled);
|
||||
|
||||
/// @brief Get the name of the tile model from any location.
|
||||
/// @param oArea The area name.
|
||||
/// @param fTileX, fTileY The coordinates of the tile.
|
||||
string NWNX_Area_GetTileModelResRef(object oArea, float fTileX, float fTileY);
|
||||
|
||||
/// @brief Test to see if there's a direct, walkable line between two points in the area.
|
||||
/// @param oArea The area object.
|
||||
/// @param fStartX, fStartY The starting points.
|
||||
/// @param fEndX, fEndY The ending points.
|
||||
/// @param fPerSpace The personal space of a creature. Found in appearance.2da.
|
||||
/// @param fHeight The height of a creature. Found in appearance.2da.
|
||||
/// @param bIgnoreDoors Whether to ignore doors in the check.
|
||||
/// @return
|
||||
/// * 1 if there is a direct walkable line.
|
||||
/// * -1 if the line is blocked by terrain.
|
||||
/// * -2 if the line is blocked by a placeable.
|
||||
/// * -3 if the line is blocked by a creature.
|
||||
int NWNX_Area_TestDirectLine(object oArea, float fStartX, float fStartY, float fEndX, float fEndY, float fPerSpace, float fHeight, int bIgnoreDoors=FALSE);
|
||||
|
||||
/// @brief Get if the area music is playing.
|
||||
/// @param oArea The area object.
|
||||
/// @param bBattleMusic Set to TRUE to get if the battle music is playing.
|
||||
/// @return TRUE if music is playing
|
||||
int NWNX_Area_GetMusicIsPlaying(object oArea, int bBattleMusic = FALSE);
|
||||
|
||||
/// @brief Create and return a generic trigger (square shaped of specified size) at a location.
|
||||
/// @param oArea The area object.
|
||||
/// @param fX, fY, fZ The position to create the trigger.
|
||||
/// @param sTag If specified, the returned trigger will have this tag.
|
||||
/// @param fSize The size of the square.
|
||||
/// @sa NWNX_Object_SetTriggerGeometry() if you wish to draw the trigger as something other than a square.
|
||||
object NWNX_Area_CreateGenericTrigger(object oArea, float fX, float fY, float fZ, string sTag = "", float fSize = 1.0f);
|
||||
|
||||
/// @brief Add oObject to the ExportGIT exclusion list, objects on this list won't be exported when NWNX_Area_ExportGIT() is called.
|
||||
/// @param oObject The object to add
|
||||
void NWNX_Area_AddObjectToExclusionList(object oObject);
|
||||
|
||||
/// @brief Remove oObject from the ExportGIT exclusion list.
|
||||
/// @param oObject The object to add
|
||||
void NWNX_Area_RemoveObjectFromExclusionList(object oObject);
|
||||
|
||||
/// @brief Export the .git file of oArea to the UserDirectory/nwnx folder, or to the location of sAlias.
|
||||
/// @note Take care with local objects set on objects, they will likely not reference the same object after a server restart.
|
||||
/// @param oArea The area to export the .git file of.
|
||||
/// @param sFileName The filename, 16 characters or less and should be lowercase. If left blank the resref of oArea will be used.
|
||||
/// @param bExportVarTable If TRUE, local variables set on oArea will be exported too.
|
||||
/// @param bExportUUID If TRUE, the UUID of oArea will be exported, if it has one.
|
||||
/// @param nObjectFilter One or more OBJECT_TYPE_* constants. These object will not be exported. For example OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR
|
||||
/// will not export creatures and doors. Use OBJECT_TYPE_ALL to filter all objects or 0 to export all objects.
|
||||
/// @param sAlias The alias of the resource directory to add the .git file to. Default: UserDirectory/nwnx
|
||||
/// @return TRUE if exported successfully, FALSE if not.
|
||||
int NWNX_Area_ExportGIT(object oArea, string sFileName = "", int bExportVarTable = TRUE, int bExportUUID = TRUE, int nObjectFilter = 0, string sAlias = "NWNX");
|
||||
|
||||
/// @brief Get the tile info of the tile at [fTileX, fTileY] in oArea.
|
||||
/// @param oArea The area name.
|
||||
/// @param fTileX, fTileY The coordinates of the tile.
|
||||
/// @return A NWNX_Area_TileInfo struct with tile info.
|
||||
struct NWNX_Area_TileInfo NWNX_Area_GetTileInfo(object oArea, float fTileX, float fTileY);
|
||||
|
||||
/// @brief Export the .are file of oArea to the UserDirectory/nwnx folder, or to the location of sAlias.
|
||||
/// @param oArea The area to export the .are file of.
|
||||
/// @param sFileName The filename, 16 characters or less and should be lowercase. This will also be the resref of the area.
|
||||
/// @param sNewName Optional new name of the area. Leave blank to use the current name.
|
||||
/// @param sNewTag Optional new tag of the area. Leave blank to use the current tag.
|
||||
/// @param sAlias The alias of the resource directory to add the .are file to. Default: UserDirectory/nwnx
|
||||
/// @return TRUE if exported successfully, FALSE if not.
|
||||
int NWNX_Area_ExportARE(object oArea, string sFileName, string sNewName = "", string sNewTag = "", string sAlias = "NWNX");
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Area_GetNumberOfPlayersInArea(object area)
|
||||
{
|
||||
string sFunc = "GetNumberOfPlayersInArea";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Area_GetLastEntered(object area)
|
||||
{
|
||||
string sFunc = "GetLastEntered";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Area_GetLastLeft(object area)
|
||||
{
|
||||
string sFunc = "GetLastLeft";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetPVPSetting(object area)
|
||||
{
|
||||
string sFunc = "GetPVPSetting";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetPVPSetting(object area, int pvpSetting)
|
||||
{
|
||||
string sFunc = "SetPVPSetting";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, pvpSetting);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetAreaSpotModifier(object area)
|
||||
{
|
||||
string sFunc = "GetAreaSpotModifier";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetAreaSpotModifier(object area, int spotModifier)
|
||||
{
|
||||
string sFunc = "SetAreaSpotModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, spotModifier);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetAreaListenModifier(object area)
|
||||
{
|
||||
string sFunc = "GetAreaListenModifier";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetAreaListenModifier(object area, int listenModifier)
|
||||
{
|
||||
string sFunc = "SetAreaListenModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, listenModifier);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetNoRestingAllowed(object area)
|
||||
{
|
||||
string sFunc = "GetNoRestingAllowed";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetNoRestingAllowed(object area, int bNoRestingAllowed)
|
||||
{
|
||||
string sFunc = "SetNoRestingAllowed";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bNoRestingAllowed);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetWindPower(object area)
|
||||
{
|
||||
string sFunc = "GetWindPower";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetWindPower(object area, int windPower)
|
||||
{
|
||||
string sFunc = "SetWindPower";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, windPower);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetWeatherChance(object area, int type)
|
||||
{
|
||||
string sFunc = "GetWeatherChance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, type);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetWeatherChance(object area, int type, int chance)
|
||||
{
|
||||
string sFunc = "SetWeatherChance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, chance);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, type);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
float NWNX_Area_GetFogClipDistance(object area)
|
||||
{
|
||||
string sFunc = "GetFogClipDistance";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueFloat(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetFogClipDistance(object area, float distance)
|
||||
{
|
||||
string sFunc = "SetFogClipDistance";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, distance);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetShadowOpacity(object area)
|
||||
{
|
||||
string sFunc = "GetShadowOpacity";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetShadowOpacity(object area, int shadowOpacity)
|
||||
{
|
||||
string sFunc = "SetShadowOpacity";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, shadowOpacity);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
|
||||
int NWNX_Area_GetDayNightCycle(object area)
|
||||
{
|
||||
string sFunc = "GetDayNightCycle";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetDayNightCycle(object area, int type)
|
||||
{
|
||||
string sFunc = "SetDayNightCycle";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, type);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetSunMoonColors(object area, int type)
|
||||
{
|
||||
string sFunc = "GetSunMoonColors";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, type);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetSunMoonColors(object area, int type, int color)
|
||||
{
|
||||
string sFunc = "SetSunMoonColors";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, color);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, type);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Area_CreateTransition(object area, object target, float x, float y, float z, float size = 2.0f, string tag="")
|
||||
{
|
||||
string sFunc = "CreateTransition";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, tag);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, size);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, z);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, y);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, x);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, target);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, area);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetTileAnimationLoop(object oArea, float fTileX, float fTileY, int nAnimLoop)
|
||||
{
|
||||
string sFunc = "GetTileAnimationLoop";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, nAnimLoop);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_SetTileAnimationLoop(object oArea, float fTileX, float fTileY, int nAnimLoop, int bEnabled)
|
||||
{
|
||||
string sFunc = "SetTileAnimationLoop";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bEnabled);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, nAnimLoop);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Area_GetTileModelResRef(object oArea, float fTileX, float fTileY)
|
||||
{
|
||||
string sFunc = "GetTileModelResRef";
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_TestDirectLine(object oArea, float fStartX, float fStartY, float fEndX, float fEndY, float fPerSpace, float fHeight, int bIgnoreDoors=FALSE)
|
||||
{
|
||||
string sFunc = "TestDirectLine";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bIgnoreDoors);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fHeight);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fPerSpace);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fEndY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fEndX);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fStartY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fStartX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_GetMusicIsPlaying(object oArea, int bBattleMusic = FALSE)
|
||||
{
|
||||
string sFunc = "GetMusicIsPlaying";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bBattleMusic);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Area_CreateGenericTrigger(object oArea, float fX, float fY, float fZ, string sTag = "", float fSize = 1.0f)
|
||||
{
|
||||
string sFunc = "CreateGenericTrigger";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fSize);
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sTag);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fZ);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_AddObjectToExclusionList(object oObject)
|
||||
{
|
||||
string sFunc = "AddObjectToExclusionList";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Area_RemoveObjectFromExclusionList(object oObject)
|
||||
{
|
||||
string sFunc = "RemoveObjectFromExclusionList";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Area_ExportGIT(object oArea, string sFileName = "", int bExportVarTable = TRUE, int bExportUUID = TRUE, int nObjectFilter = 0, string sAlias = "NWNX")
|
||||
{
|
||||
string sFunc = "ExportGIT";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sAlias);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, nObjectFilter);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bExportUUID);
|
||||
NWNX_PushArgumentInt(NWNX_Area, sFunc, bExportVarTable);
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sFileName);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Area_TileInfo NWNX_Area_GetTileInfo(object oArea, float fTileX, float fTileY)
|
||||
{
|
||||
string sFunc = "GetTileInfo";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileY);
|
||||
NWNX_PushArgumentFloat(NWNX_Area, sFunc, fTileX);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
struct NWNX_Area_TileInfo str;
|
||||
|
||||
str.nGridY = NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
str.nGridX = NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
str.nOrientation = NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
str.nHeight = NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
str.nID = NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
int NWNX_Area_ExportARE(object oArea, string sFileName, string sNewName = "", string sNewTag = "", string sAlias = "NWNX")
|
||||
{
|
||||
string sFunc = "ExportARE";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sAlias);
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sNewTag);
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sNewName);
|
||||
NWNX_PushArgumentString(NWNX_Area, sFunc, sFileName);
|
||||
NWNX_PushArgumentObject(NWNX_Area, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_Area, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Area, sFunc);
|
||||
}
|
158
_module/nss/nwnx_chat.nss
Normal file
158
_module/nss/nwnx_chat.nss
Normal file
@ -0,0 +1,158 @@
|
||||
/// @addtogroup chat Chat
|
||||
/// @brief Functions related to chat.
|
||||
/// @{
|
||||
/// @file nwnx_chat.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Chat = "NWNX_Chat"; ///< @private
|
||||
|
||||
/// @name Chat Channels
|
||||
/// @anchor chat_channels
|
||||
///
|
||||
/// Constants defining the various chat channels.
|
||||
/// @{
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_TALK = 1;
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_SHOUT = 2;
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_WHISPER = 3;
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_TELL = 4;
|
||||
const int NWNX_CHAT_CHANNEL_SERVER_MSG = 5;
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_PARTY = 6;
|
||||
const int NWNX_CHAT_CHANNEL_PLAYER_DM = 14;
|
||||
const int NWNX_CHAT_CHANNEL_DM_TALK = 17;
|
||||
const int NWNX_CHAT_CHANNEL_DM_SHOUT = 18;
|
||||
const int NWNX_CHAT_CHANNEL_DM_WHISPER = 19;
|
||||
const int NWNX_CHAT_CHANNEL_DM_TELL = 20;
|
||||
const int NWNX_CHAT_CHANNEL_DM_PARTY = 22;
|
||||
const int NWNX_CHAT_CHANNEL_DM_DM = 30;
|
||||
/// @}
|
||||
|
||||
/// @brief Sends a chat message.
|
||||
/// @remark If no target is provided, then it broadcasts to all eligible targets.
|
||||
/// @param channel The @ref chat_channels "channel" to send the message.
|
||||
/// @param message The message to send.
|
||||
/// @param sender The sender of the message.
|
||||
/// @param target The receiver of the message.
|
||||
/// @return TRUE if successful, FALSE otherwise.
|
||||
int NWNX_Chat_SendMessage(int channel, string message, object sender = OBJECT_SELF, object target = OBJECT_INVALID);
|
||||
|
||||
/// @brief Registers the script which receives all chat messages.
|
||||
/// @note If a script was previously registered, this one will take over.
|
||||
/// @param script The script name to handle the chat events.
|
||||
void NWNX_Chat_RegisterChatScript(string script);
|
||||
|
||||
/// @brief Skips a chat message
|
||||
/// @note Must be called from a chat or system script handler.
|
||||
void NWNX_Chat_SkipMessage();
|
||||
|
||||
/// @brief Gets the chat @ref chat_channels "channel".
|
||||
/// @note Must be called from a chat or system script handler.
|
||||
/// @return The @ref chat_channels "channel" the message is sent.
|
||||
int NWNX_Chat_GetChannel();
|
||||
|
||||
/// @brief Gets the message.
|
||||
/// @note Must be called from a chat or system script handler.
|
||||
/// @return The message sent.
|
||||
string NWNX_Chat_GetMessage();
|
||||
|
||||
/// @brief Gets the sender of the message.
|
||||
/// @note Must be called from a chat or system script handler.
|
||||
/// @return The object sending the message.
|
||||
object NWNX_Chat_GetSender();
|
||||
|
||||
/// @brief Gets the target of the message.
|
||||
/// @note Must be called from an chat or system script handler.
|
||||
/// @return The target of the message or OBJECT_INVALID if no target.
|
||||
object NWNX_Chat_GetTarget();
|
||||
|
||||
/// @brief Sets the distance with which the player hears talks or whispers.
|
||||
/// @remark Per player settings override server wide.
|
||||
/// @param distance The distance in meters.
|
||||
/// @param listener The listener, if OBJECT_INVALID then it will be set server wide.
|
||||
/// @param channel The @ref chat_channels "channel" to modify the distance heard. Only applicable for talk and whisper.
|
||||
void NWNX_Chat_SetChatHearingDistance(float distance, object listener = OBJECT_INVALID, int channel = NWNX_CHAT_CHANNEL_PLAYER_TALK);
|
||||
|
||||
/// @brief Gets the distance with which the player hears talks or whisper
|
||||
/// @param listener The listener, if OBJECT_INVALID then will return server wide setting.
|
||||
/// @param channel The @ref chat_channels "channel". Only applicable for talk and whisper.
|
||||
float NWNX_Chat_GetChatHearingDistance(object listener = OBJECT_INVALID, int channel = NWNX_CHAT_CHANNEL_PLAYER_TALK);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Chat_SendMessage(int channel, string message, object sender = OBJECT_SELF, object target = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SendMessage";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Chat, sFunc, target);
|
||||
NWNX_PushArgumentObject(NWNX_Chat, sFunc, sender);
|
||||
NWNX_PushArgumentString(NWNX_Chat, sFunc, message);
|
||||
NWNX_PushArgumentInt(NWNX_Chat, sFunc, channel);
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Chat_RegisterChatScript(string script)
|
||||
{
|
||||
string sFunc = "RegisterChatScript";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Chat, sFunc, script);
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Chat_SkipMessage()
|
||||
{
|
||||
string sFunc = "SkipMessage";
|
||||
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Chat_GetChannel()
|
||||
{
|
||||
string sFunc = "GetChannel";
|
||||
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Chat_GetMessage()
|
||||
{
|
||||
string sFunc = "GetMessage";
|
||||
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Chat_GetSender()
|
||||
{
|
||||
string sFunc = "GetSender";
|
||||
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueObject(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Chat_GetTarget()
|
||||
{
|
||||
string sFunc = "GetTarget";
|
||||
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueObject(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Chat_SetChatHearingDistance(float distance, object listener = OBJECT_INVALID, int channel = NWNX_CHAT_CHANNEL_PLAYER_TALK)
|
||||
{
|
||||
string sFunc = "SetChatHearingDistance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Chat, sFunc, channel);
|
||||
NWNX_PushArgumentObject(NWNX_Chat, sFunc, listener);
|
||||
NWNX_PushArgumentFloat(NWNX_Chat, sFunc, distance);
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
}
|
||||
|
||||
float NWNX_Chat_GetChatHearingDistance(object listener = OBJECT_INVALID, int channel = NWNX_CHAT_CHANNEL_PLAYER_TALK)
|
||||
{
|
||||
string sFunc = "GetChatHearingDistance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Chat, sFunc, channel);
|
||||
NWNX_PushArgumentObject(NWNX_Chat, sFunc, listener);
|
||||
NWNX_CallFunction(NWNX_Chat, sFunc);
|
||||
return NWNX_GetReturnValueFloat(NWNX_Chat, sFunc);
|
||||
}
|
182
_module/nss/nwnx_consts.nss
Normal file
182
_module/nss/nwnx_consts.nss
Normal file
@ -0,0 +1,182 @@
|
||||
/// @ingroup nwnx
|
||||
/// @addtogroup consts NWNX Constants
|
||||
/// @brief Provides various NWScript <-> Engine Constants Translation Table functions
|
||||
/// @{
|
||||
/// @file nwnx_consts.nss
|
||||
|
||||
/// @brief Translates ANIMATION_LOOPING_* and ANIMATION_FIREFORGET_* constants to their engine equivalent.
|
||||
/// @param nAnimation The nwn animation constant
|
||||
/// @return The engine equivalent of the constant
|
||||
int NWNX_Consts_TranslateNWScriptAnimation(int nAnimation);
|
||||
|
||||
/// @brief Translates engine animation constants to their ANIMATION_LOOPING_* and ANIMATION_FIREFORGET_* equivalent.
|
||||
/// @param nAnimation The engine animation constant
|
||||
/// @return The NWScript equivalent of the constant or -1 if a nwscript equivalent doesn't exist
|
||||
int NWNX_Consts_TranslateEngineAnimation(int nAnimation);
|
||||
|
||||
/// @brief Translates OBJECT_TYPE_* constants to their engine equivalent.
|
||||
/// @param nObjectType The nwn object type
|
||||
/// @return The engine equivalent of the constant
|
||||
int NWNX_Consts_TranslateNWScriptObjectType(int nObjectType);
|
||||
|
||||
|
||||
int NWNX_Consts_TranslateNWScriptAnimation(int nAnimation)
|
||||
{
|
||||
switch (nAnimation)
|
||||
{
|
||||
case ANIMATION_LOOPING_PAUSE: nAnimation = 0; break;
|
||||
case ANIMATION_LOOPING_PAUSE2: nAnimation = 52; break;
|
||||
case ANIMATION_LOOPING_LISTEN: nAnimation = 30; break;
|
||||
case ANIMATION_LOOPING_MEDITATE: nAnimation = 32; break;
|
||||
case ANIMATION_LOOPING_WORSHIP: nAnimation = 33; break;
|
||||
case ANIMATION_LOOPING_LOOK_FAR: nAnimation = 48; break;
|
||||
case ANIMATION_LOOPING_SIT_CHAIR: nAnimation = 36; break;
|
||||
case ANIMATION_LOOPING_SIT_CROSS: nAnimation = 47; break;
|
||||
case ANIMATION_LOOPING_TALK_NORMAL: nAnimation = 38; break;
|
||||
case ANIMATION_LOOPING_TALK_PLEADING: nAnimation = 39; break;
|
||||
case ANIMATION_LOOPING_TALK_FORCEFUL: nAnimation = 40; break;
|
||||
case ANIMATION_LOOPING_TALK_LAUGHING: nAnimation = 41; break;
|
||||
case ANIMATION_LOOPING_GET_LOW: nAnimation = 59; break;
|
||||
case ANIMATION_LOOPING_GET_MID: nAnimation = 60; break;
|
||||
case ANIMATION_LOOPING_PAUSE_TIRED: nAnimation = 57; break;
|
||||
case ANIMATION_LOOPING_PAUSE_DRUNK: nAnimation = 58; break;
|
||||
case ANIMATION_LOOPING_DEAD_FRONT: nAnimation = 6; break;
|
||||
case ANIMATION_LOOPING_DEAD_BACK: nAnimation = 8; break;
|
||||
case ANIMATION_LOOPING_CONJURE1: nAnimation = 15; break;
|
||||
case ANIMATION_LOOPING_CONJURE2: nAnimation = 16; break;
|
||||
case ANIMATION_LOOPING_SPASM: nAnimation = 93; break;
|
||||
case ANIMATION_LOOPING_CUSTOM1: nAnimation = 97; break;
|
||||
case ANIMATION_LOOPING_CUSTOM2: nAnimation = 98; break;
|
||||
case ANIMATION_LOOPING_CUSTOM3: nAnimation = 101; break;
|
||||
case ANIMATION_LOOPING_CUSTOM4: nAnimation = 102; break;
|
||||
case ANIMATION_LOOPING_CUSTOM5: nAnimation = 103; break;
|
||||
case ANIMATION_LOOPING_CUSTOM6: nAnimation = 104; break;
|
||||
case ANIMATION_LOOPING_CUSTOM7: nAnimation = 105; break;
|
||||
case ANIMATION_LOOPING_CUSTOM8: nAnimation = 106; break;
|
||||
case ANIMATION_LOOPING_CUSTOM9: nAnimation = 107; break;
|
||||
case ANIMATION_LOOPING_CUSTOM10: nAnimation = 108; break;
|
||||
case ANIMATION_LOOPING_CUSTOM11: nAnimation = 109; break;
|
||||
case ANIMATION_LOOPING_CUSTOM12: nAnimation = 110; break;
|
||||
case ANIMATION_LOOPING_CUSTOM13: nAnimation = 111; break;
|
||||
case ANIMATION_LOOPING_CUSTOM14: nAnimation = 112; break;
|
||||
case ANIMATION_LOOPING_CUSTOM15: nAnimation = 113; break;
|
||||
case ANIMATION_LOOPING_CUSTOM16: nAnimation = 114; break;
|
||||
case ANIMATION_LOOPING_CUSTOM17: nAnimation = 115; break;
|
||||
case ANIMATION_LOOPING_CUSTOM18: nAnimation = 116; break;
|
||||
case ANIMATION_LOOPING_CUSTOM19: nAnimation = 117; break;
|
||||
case ANIMATION_LOOPING_CUSTOM20: nAnimation = 118; break;
|
||||
case ANIMATION_MOUNT1: nAnimation = 119; break;
|
||||
case ANIMATION_DISMOUNT1: nAnimation = 120; break;
|
||||
case ANIMATION_FIREFORGET_HEAD_TURN_LEFT: nAnimation = 53; break;
|
||||
case ANIMATION_FIREFORGET_HEAD_TURN_RIGHT: nAnimation = 54; break;
|
||||
case ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD: nAnimation = 55; break;
|
||||
case ANIMATION_FIREFORGET_PAUSE_BORED: nAnimation = 56; break;
|
||||
case ANIMATION_FIREFORGET_SALUTE: nAnimation = 34; break;
|
||||
case ANIMATION_FIREFORGET_BOW: nAnimation = 35; break;
|
||||
case ANIMATION_FIREFORGET_STEAL: nAnimation = 37; break;
|
||||
case ANIMATION_FIREFORGET_GREETING: nAnimation = 29; break;
|
||||
case ANIMATION_FIREFORGET_TAUNT: nAnimation = 28; break;
|
||||
case ANIMATION_FIREFORGET_VICTORY1: nAnimation = 44; break;
|
||||
case ANIMATION_FIREFORGET_VICTORY2: nAnimation = 45; break;
|
||||
case ANIMATION_FIREFORGET_VICTORY3: nAnimation = 46; break;
|
||||
case ANIMATION_FIREFORGET_READ: nAnimation = 71; break;
|
||||
case ANIMATION_FIREFORGET_DRINK: nAnimation = 70; break;
|
||||
case ANIMATION_FIREFORGET_DODGE_SIDE: nAnimation = 90; break;
|
||||
case ANIMATION_FIREFORGET_DODGE_DUCK: nAnimation = 91; break;
|
||||
case ANIMATION_FIREFORGET_SPASM: nAnimation = 23; break;
|
||||
default: nAnimation = 0; break;
|
||||
}
|
||||
|
||||
return nAnimation;
|
||||
}
|
||||
|
||||
int NWNX_Consts_TranslateEngineAnimation(int nAnimation)
|
||||
{
|
||||
switch (nAnimation)
|
||||
{
|
||||
case 0: nAnimation = ANIMATION_LOOPING_PAUSE; break;
|
||||
case 52: nAnimation = ANIMATION_LOOPING_PAUSE2; break;
|
||||
case 30: nAnimation = ANIMATION_LOOPING_LISTEN; break;
|
||||
case 32: nAnimation = ANIMATION_LOOPING_MEDITATE; break;
|
||||
case 33: nAnimation = ANIMATION_LOOPING_WORSHIP; break;
|
||||
case 48: nAnimation = ANIMATION_LOOPING_LOOK_FAR; break;
|
||||
case 36: nAnimation = ANIMATION_LOOPING_SIT_CHAIR; break;
|
||||
case 47: nAnimation = ANIMATION_LOOPING_SIT_CROSS; break;
|
||||
case 38: nAnimation = ANIMATION_LOOPING_TALK_NORMAL; break;
|
||||
case 39: nAnimation = ANIMATION_LOOPING_TALK_PLEADING; break;
|
||||
case 40: nAnimation = ANIMATION_LOOPING_TALK_FORCEFUL; break;
|
||||
case 41: nAnimation = ANIMATION_LOOPING_TALK_LAUGHING; break;
|
||||
case 59: nAnimation = ANIMATION_LOOPING_GET_LOW; break;
|
||||
case 60: nAnimation = ANIMATION_LOOPING_GET_MID; break;
|
||||
case 57: nAnimation = ANIMATION_LOOPING_PAUSE_TIRED; break;
|
||||
case 58: nAnimation = ANIMATION_LOOPING_PAUSE_DRUNK; break;
|
||||
case 6: nAnimation = ANIMATION_LOOPING_DEAD_FRONT; break;
|
||||
case 8: nAnimation = ANIMATION_LOOPING_DEAD_BACK; break;
|
||||
case 15: nAnimation = ANIMATION_LOOPING_CONJURE1; break;
|
||||
case 16: nAnimation = ANIMATION_LOOPING_CONJURE2; break;
|
||||
case 93: nAnimation = ANIMATION_LOOPING_SPASM; break;
|
||||
case 97: nAnimation = ANIMATION_LOOPING_CUSTOM1; break;
|
||||
case 98: nAnimation = ANIMATION_LOOPING_CUSTOM2; break;
|
||||
case 101: nAnimation = ANIMATION_LOOPING_CUSTOM3; break;
|
||||
case 102: nAnimation = ANIMATION_LOOPING_CUSTOM4; break;
|
||||
case 103: nAnimation = ANIMATION_LOOPING_CUSTOM5; break;
|
||||
case 104: nAnimation = ANIMATION_LOOPING_CUSTOM6; break;
|
||||
case 105: nAnimation = ANIMATION_LOOPING_CUSTOM7; break;
|
||||
case 106: nAnimation = ANIMATION_LOOPING_CUSTOM8; break;
|
||||
case 107: nAnimation = ANIMATION_LOOPING_CUSTOM9; break;
|
||||
case 108: nAnimation = ANIMATION_LOOPING_CUSTOM10; break;
|
||||
case 109: nAnimation = ANIMATION_LOOPING_CUSTOM11; break;
|
||||
case 110: nAnimation = ANIMATION_LOOPING_CUSTOM12; break;
|
||||
case 111: nAnimation = ANIMATION_LOOPING_CUSTOM13; break;
|
||||
case 112: nAnimation = ANIMATION_LOOPING_CUSTOM14; break;
|
||||
case 113: nAnimation = ANIMATION_LOOPING_CUSTOM15; break;
|
||||
case 114: nAnimation = ANIMATION_LOOPING_CUSTOM16; break;
|
||||
case 115: nAnimation = ANIMATION_LOOPING_CUSTOM17; break;
|
||||
case 116: nAnimation = ANIMATION_LOOPING_CUSTOM18; break;
|
||||
case 117: nAnimation = ANIMATION_LOOPING_CUSTOM19; break;
|
||||
case 118: nAnimation = ANIMATION_LOOPING_CUSTOM20; break;
|
||||
case 119: nAnimation = ANIMATION_MOUNT1; break;
|
||||
case 120: nAnimation = ANIMATION_DISMOUNT1; break;
|
||||
case 53: nAnimation = ANIMATION_FIREFORGET_HEAD_TURN_LEFT; break;
|
||||
case 54: nAnimation = ANIMATION_FIREFORGET_HEAD_TURN_RIGHT; break;
|
||||
case 55: nAnimation = ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD; break;
|
||||
case 56: nAnimation = ANIMATION_FIREFORGET_PAUSE_BORED; break;
|
||||
case 34: nAnimation = ANIMATION_FIREFORGET_SALUTE; break;
|
||||
case 35: nAnimation = ANIMATION_FIREFORGET_BOW; break;
|
||||
case 37: nAnimation = ANIMATION_FIREFORGET_STEAL; break;
|
||||
case 29: nAnimation = ANIMATION_FIREFORGET_GREETING; break;
|
||||
case 28: nAnimation = ANIMATION_FIREFORGET_TAUNT; break;
|
||||
case 44: nAnimation = ANIMATION_FIREFORGET_VICTORY1; break;
|
||||
case 45: nAnimation = ANIMATION_FIREFORGET_VICTORY2; break;
|
||||
case 46: nAnimation = ANIMATION_FIREFORGET_VICTORY3; break;
|
||||
case 71: nAnimation = ANIMATION_FIREFORGET_READ; break;
|
||||
case 70: nAnimation = ANIMATION_FIREFORGET_DRINK; break;
|
||||
case 90: nAnimation = ANIMATION_FIREFORGET_DODGE_SIDE; break;
|
||||
case 91: nAnimation = ANIMATION_FIREFORGET_DODGE_DUCK; break;
|
||||
case 23: nAnimation = ANIMATION_FIREFORGET_SPASM; break;
|
||||
default: nAnimation = -1; break;
|
||||
}
|
||||
|
||||
return nAnimation;
|
||||
}
|
||||
|
||||
int NWNX_Consts_TranslateNWScriptObjectType(int nObjectType)
|
||||
{
|
||||
switch(nObjectType)
|
||||
{
|
||||
case OBJECT_TYPE_ALL: nObjectType = 0; break;
|
||||
case OBJECT_TYPE_AREA_OF_EFFECT: nObjectType = 11; break;
|
||||
case OBJECT_TYPE_CREATURE: nObjectType = 5; break;
|
||||
case OBJECT_TYPE_DOOR: nObjectType = 10; break;
|
||||
case OBJECT_TYPE_ENCOUNTER: nObjectType = 13; break;
|
||||
case OBJECT_TYPE_ITEM: nObjectType = 6; break;
|
||||
case OBJECT_TYPE_PLACEABLE: nObjectType = 9; break;
|
||||
case OBJECT_TYPE_STORE: nObjectType = 14; break;
|
||||
case OBJECT_TYPE_TRIGGER: nObjectType = 7; break;
|
||||
case OBJECT_TYPE_WAYPOINT: nObjectType = 12; break;
|
||||
default: nObjectType = 0; break;
|
||||
}
|
||||
|
||||
return nObjectType;
|
||||
}
|
||||
/// @} // End of consts
|
2150
_module/nss/nwnx_creature.nss
Normal file
2150
_module/nss/nwnx_creature.nss
Normal file
File diff suppressed because it is too large
Load Diff
253
_module/nss/nwnx_damage.nss
Normal file
253
_module/nss/nwnx_damage.nss
Normal file
@ -0,0 +1,253 @@
|
||||
/// @addtogroup damage Damage
|
||||
/// @brief Run a script before damage and attack events allowing for modification. Includes function to arbitrarily apply damage.
|
||||
/// @{
|
||||
/// @file nwnx_damage.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Damage = "NWNX_Damage"; ///< @private
|
||||
|
||||
/// @struct NWNX_Damage_DamageEventData
|
||||
/// @brief Damage Event Data
|
||||
struct NWNX_Damage_DamageEventData
|
||||
{
|
||||
object oDamager; ///< The object that inflicted the damage.
|
||||
int iBludgeoning; ///< Bludgeoning damage
|
||||
int iPierce; ///< Piercing damage
|
||||
int iSlash; ///< Slashing damage
|
||||
int iMagical; ///< Magical damage
|
||||
int iAcid; ///< Acid damage
|
||||
int iCold; ///< Cold damage
|
||||
int iDivine; ///< Divine damage
|
||||
int iElectrical; ///< Electrical damage
|
||||
int iFire; ///< Fire damage
|
||||
int iNegative; ///< Negative damage
|
||||
int iPositive; ///< Positive damage
|
||||
int iSonic; ///< Sonic damage
|
||||
int iBase; ///< Base damage
|
||||
};
|
||||
|
||||
/// @struct NWNX_Damage_AttackEventData
|
||||
/// @brief Attack Event Data
|
||||
struct NWNX_Damage_AttackEventData
|
||||
{
|
||||
object oTarget; ///< The target who took the damage
|
||||
int iBludgeoning; ///< Bludgeoning damage
|
||||
int iPierce; ///< Piercing damage
|
||||
int iSlash; ///< Slashing damage
|
||||
int iMagical; ///< Magical damage
|
||||
int iAcid; ///< Acid damage
|
||||
int iCold; ///< Cold damage
|
||||
int iDivine; ///< Divine damage
|
||||
int iElectrical; ///< Electrical damage
|
||||
int iFire; ///< Fire damage
|
||||
int iNegative; ///< Negative damage
|
||||
int iPositive; ///< Positive damage
|
||||
int iSonic; ///< Sonic damage
|
||||
int iBase; ///< Base damage
|
||||
int iAttackNumber; ///< 1-based index of the attack in current combat round
|
||||
int iAttackResult; ///< 1=hit, 3=critical hit, 4=miss, 8=concealed
|
||||
int iAttackType; ///< 1=main hand, 2=offhand, 3-5=creature, 6=haste
|
||||
int iSneakAttack; ///< 0=neither, 1=sneak attack, 2=death attack, 3=both
|
||||
};
|
||||
|
||||
/// @struct NWNX_Damage_DamageData
|
||||
/// @brief Used for DealDamage
|
||||
struct NWNX_Damage_DamageData
|
||||
{
|
||||
int iBludgeoning; ///< Bludgeoning damage
|
||||
int iPierce; ///< Piercing damage
|
||||
int iSlash; ///< Slashing damage
|
||||
int iMagical; ///< Magical damage
|
||||
int iAcid; ///< Acid damage
|
||||
int iCold; ///< Cold damage
|
||||
int iDivine; ///< Divine damage
|
||||
int iElectrical; ///< Electrical damage
|
||||
int iFire; ///< Fire damage
|
||||
int iNegative; ///< Negative damage
|
||||
int iPositive; ///< Positive damage
|
||||
int iSonic; ///< Sonic damage
|
||||
int iPower; ///< For overcoming DR
|
||||
};
|
||||
|
||||
/// @brief Sets the script to run with a damage event.
|
||||
/// @param sScript The script that will handle the damage event.
|
||||
/// @param oOwner An object if only executing for a specific object or OBJECT_INVALID for global.
|
||||
void NWNX_Damage_SetDamageEventScript(string sScript, object oOwner=OBJECT_INVALID);
|
||||
|
||||
/// @brief Get Damage Event Data
|
||||
/// @return A NWNX_Damage_DamageEventData struct.
|
||||
/// @note To use only in the Damage Event Script.
|
||||
struct NWNX_Damage_DamageEventData NWNX_Damage_GetDamageEventData();
|
||||
|
||||
/// @brief Set Damage Event Data
|
||||
/// @param data A NWNX_Damage_DamageEventData struct.
|
||||
/// @note To use only in the Damage Event Script.
|
||||
void NWNX_Damage_SetDamageEventData(struct NWNX_Damage_DamageEventData data);
|
||||
|
||||
/// @brief Sets the script to run with an attack event.
|
||||
/// @param sScript The script that will handle the attack event.
|
||||
/// @param oOwner An object if only executing for a specific object or OBJECT_INVALID for global.
|
||||
void NWNX_Damage_SetAttackEventScript(string sScript, object oOwner=OBJECT_INVALID);
|
||||
|
||||
/// @brief Get Attack Event Data
|
||||
/// @return A NWNX_Damage_AttackEventData struct.
|
||||
/// @note To use only in the Attack Event Script.
|
||||
struct NWNX_Damage_AttackEventData NWNX_Damage_GetAttackEventData();
|
||||
|
||||
/// @brief Set Attack Event Data
|
||||
/// @param data A NWNX_Damage_AttackEventData struct.
|
||||
/// @note To use only in the Attack Event Script.
|
||||
void NWNX_Damage_SetAttackEventData(struct NWNX_Damage_AttackEventData data);
|
||||
|
||||
/// @brief Deal damage to a target.
|
||||
/// @remark Permits multiple damage types and checks enhancement bonus for overcoming DR.
|
||||
/// @param data A NWNX_Damage_DamageData struct.
|
||||
/// @param oTarget The target object on whom the damage is dealt.
|
||||
/// @param oSource The source of the damage.
|
||||
/// @param iRanged Whether the attack should be treated as ranged by the engine (for example when considering damage inflicted by Acid Sheath and other such effects)
|
||||
void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, object oSource=OBJECT_SELF, int iRanged = FALSE);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Damage_SetDamageEventScript(string sScript, object oOwner=OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetEventScript";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Damage, sFunc, oOwner);
|
||||
NWNX_PushArgumentString(NWNX_Damage, sFunc, sScript);
|
||||
NWNX_PushArgumentString(NWNX_Damage, sFunc, "DAMAGE");
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Damage_DamageEventData NWNX_Damage_GetDamageEventData()
|
||||
{
|
||||
string sFunc = "GetDamageEventData";
|
||||
struct NWNX_Damage_DamageEventData data;
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
|
||||
data.oDamager = NWNX_GetReturnValueObject(NWNX_Damage, sFunc);
|
||||
data.iBludgeoning = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iPierce = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iSlash = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iMagical = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iAcid = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iCold = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iDivine = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iElectrical = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iFire = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iNegative = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iPositive = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iSonic = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iBase = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void NWNX_Damage_SetDamageEventData(struct NWNX_Damage_DamageEventData data)
|
||||
{
|
||||
string sFunc = "SetDamageEventData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iBase);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSonic);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPositive);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iNegative);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iFire);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iElectrical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iDivine);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iCold);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iAcid);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iMagical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSlash);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPierce);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iBludgeoning);
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Damage_SetAttackEventScript(string sScript, object oOwner=OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetEventScript";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Damage, sFunc, oOwner);
|
||||
NWNX_PushArgumentString(NWNX_Damage, sFunc, sScript);
|
||||
NWNX_PushArgumentString(NWNX_Damage, sFunc, "ATTACK");
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Damage_AttackEventData NWNX_Damage_GetAttackEventData()
|
||||
{
|
||||
string sFunc = "GetAttackEventData";
|
||||
struct NWNX_Damage_AttackEventData data;
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
|
||||
data.oTarget = NWNX_GetReturnValueObject(NWNX_Damage, sFunc);
|
||||
data.iBludgeoning = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iPierce = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iSlash = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iMagical = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iAcid = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iCold = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iDivine = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iElectrical = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iFire = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iNegative = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iPositive = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iSonic = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iBase = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iAttackNumber = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iAttackResult = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iAttackType = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
data.iSneakAttack = NWNX_GetReturnValueInt(NWNX_Damage, sFunc);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void NWNX_Damage_SetAttackEventData(struct NWNX_Damage_AttackEventData data)
|
||||
{
|
||||
string sFunc = "SetAttackEventData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iAttackResult);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iBase);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSonic);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPositive);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iNegative);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iFire);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iElectrical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iDivine);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iCold);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iAcid);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iMagical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSlash);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPierce);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iBludgeoning);
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, object oSource, int iRanged = FALSE)
|
||||
{
|
||||
string sFunc = "DealDamage";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, iRanged);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPower);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSonic);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPositive);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iNegative);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iFire);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iElectrical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iDivine);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iCold);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iAcid);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iMagical);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iSlash);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iPierce);
|
||||
NWNX_PushArgumentInt(NWNX_Damage, sFunc, data.iBludgeoning);
|
||||
NWNX_PushArgumentObject(NWNX_Damage, sFunc, oTarget);
|
||||
NWNX_PushArgumentObject(NWNX_Damage, sFunc, oSource);
|
||||
|
||||
NWNX_CallFunction(NWNX_Damage, sFunc);
|
||||
}
|
351
_module/nss/nwnx_data.nss
Normal file
351
_module/nss/nwnx_data.nss
Normal file
@ -0,0 +1,351 @@
|
||||
/// @addtogroup data Data
|
||||
/// @brief Provides a number of data structures for NWN code to use (simulated arrays)
|
||||
/// @{
|
||||
/// @file nwnx_data.nss
|
||||
|
||||
#include "inc_array"
|
||||
|
||||
// All these calls just pass through to the Array code in inc_array to provide
|
||||
// an NWNX_Data compatible API for ease of transition.
|
||||
|
||||
const int NWNX_DATA_INVALID_INDEX = INVALID_INDEX;
|
||||
const int NWNX_DATA_TYPE_FLOAT = TYPE_FLOAT;
|
||||
const int NWNX_DATA_TYPE_INTEGER = TYPE_INTEGER;
|
||||
const int NWNX_DATA_TYPE_OBJECT = TYPE_OBJECT;
|
||||
const int NWNX_DATA_TYPE_STRING = TYPE_STRING;
|
||||
|
||||
/// @defgroup data_array_at Array At
|
||||
/// @brief Returns the element at the index.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @return The element of associated type.
|
||||
/// @{
|
||||
string NWNX_Data_Array_At_Str(object obj, string tag, int index);
|
||||
float NWNX_Data_Array_At_Flt(object obj, string tag, int index);
|
||||
int NWNX_Data_Array_At_Int(object obj, string tag, int index);
|
||||
object NWNX_Data_Array_At_Obj(object obj, string tag, int index);
|
||||
/// @}
|
||||
|
||||
|
||||
/// Clears the entire array, such that size==0.
|
||||
void NWNX_Data_Array_Clear(int type, object obj, string tag);
|
||||
|
||||
/// @defgroup data_array_contains Array Contains
|
||||
/// @brief Checks if array contains the element.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @return TRUE if the collection contains the element.
|
||||
/// @{
|
||||
int NWNX_Data_Array_Contains_Flt(object obj, string tag, float element);
|
||||
int NWNX_Data_Array_Contains_Int(object obj, string tag, int element);
|
||||
int NWNX_Data_Array_Contains_Obj(object obj, string tag, object element);
|
||||
int NWNX_Data_Array_Contains_Str(object obj, string tag, string element);
|
||||
/// @}
|
||||
|
||||
/// Copies the array of name otherTag over the array of name tag.
|
||||
void NWNX_Data_Array_Copy(int type, object obj, string tag, string otherTag);
|
||||
|
||||
/// Erases the element at index, and shuffles any elements from index size-1 to index + 1 left.
|
||||
void NWNX_Data_Array_Erase(int type, object obj, string tag, int index);
|
||||
|
||||
/// @defgroup data_array_find Array Find
|
||||
/// @brief Get the index at which the element is located.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @return Returns the index at which the element is located, or ARRAY_INVALID_INDEX.
|
||||
/// @{
|
||||
int NWNX_Data_Array_Find_Flt(object obj, string tag, float element);
|
||||
int NWNX_Data_Array_Find_Int(object obj, string tag, int element);
|
||||
int NWNX_Data_Array_Find_Obj(object obj, string tag, object element);
|
||||
int NWNX_Data_Array_Find_Str(object obj, string tag, string element);
|
||||
/// @}
|
||||
|
||||
/// @defgroup data_array_insert Array Insert
|
||||
/// @brief Inserts the element at the index, where size > index >= 0.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void NWNX_Data_Array_Insert_Flt(object obj, string tag, int index, float element);
|
||||
void NWNX_Data_Array_Insert_Int(object obj, string tag, int index, int element);
|
||||
void NWNX_Data_Array_Insert_Obj(object obj, string tag, int index, object element);
|
||||
void NWNX_Data_Array_Insert_Str(object obj, string tag, int index, string element);
|
||||
/// @}
|
||||
|
||||
/// @defgroup data_array_pushback Array Pushback
|
||||
/// @brief Pushes an element to the back of the collection.
|
||||
/// @remark Functionally identical to an insert at index size-1.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void NWNX_Data_Array_PushBack_Flt(object obj, string tag, float element);
|
||||
void NWNX_Data_Array_PushBack_Int(object obj, string tag, int element);
|
||||
void NWNX_Data_Array_PushBack_Obj(object obj, string tag, object element);
|
||||
void NWNX_Data_Array_PushBack_Str(object obj, string tag, string element);
|
||||
/// @}
|
||||
|
||||
/// Resizes the array. If the array is shrinking, it chops off elements at the ned.
|
||||
void NWNX_Data_Array_Resize(int type, object obj, string tag, int size);
|
||||
|
||||
/// Reorders the array such each possible permutation of elements has equal probability of appearance.
|
||||
void NWNX_Data_Array_Shuffle(int type, object obj, string tag);
|
||||
|
||||
/// Returns the size of the array.
|
||||
int NWNX_Data_Array_Size(int type, object obj, string tag);
|
||||
|
||||
/// Sorts the collection based on descending order.
|
||||
void NWNX_Data_Array_SortAscending(int type, object obj, string tag);
|
||||
|
||||
/// Sorts the collection based on descending order.
|
||||
void NWNX_Data_Array_SortDescending(int type, object obj, string tag);
|
||||
|
||||
/// @defgroup data_array_set Array Set
|
||||
/// @brief Sets the element at the index, where size > index >= 0.
|
||||
/// @ingroup data
|
||||
/// @param obj The object.
|
||||
/// @param tag The tag.
|
||||
/// @param index The index.
|
||||
/// @param element The element.
|
||||
/// @{
|
||||
void NWNX_Data_Array_Set_Flt(object obj, string tag, int index, float element);
|
||||
void NWNX_Data_Array_Set_Int(object obj, string tag, int index, int element);
|
||||
void NWNX_Data_Array_Set_Obj(object obj, string tag, int index, object element);
|
||||
void NWNX_Data_Array_Set_Str(object obj, string tag, int index, string element);
|
||||
/// @}
|
||||
|
||||
/// @}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// return the value contained in location "index"
|
||||
string NWNX_Data_Array_At_Str(object obj, string tag, int index)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_At_Str(tag, index, obj);
|
||||
}
|
||||
|
||||
float NWNX_Data_Array_At_Flt(object obj, string tag, int index)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_At_Flt(tag, index, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_At_Int(object obj, string tag, int index)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_At_Int(tag, index, obj);
|
||||
}
|
||||
|
||||
object NWNX_Data_Array_At_Obj(object obj, string tag, int index)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_At_Obj(tag, index, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Clear(int type, object obj, string tag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Clear(tag, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Return true/value (1/0) if the array contains the value "element"
|
||||
int NWNX_Data_Array_Contains_Str(object obj, string tag, string element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Contains_Str(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Contains_Flt(object obj, string tag, float element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Contains_Flt(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Contains_Int(object obj, string tag, int element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Contains_Int(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Contains_Obj(object obj, string tag, object element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Contains_Obj(tag, element, obj);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void NWNX_Data_Array_Copy(int type, object obj, string tag, string otherTag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Copy(tag, otherTag, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void NWNX_Data_Array_Erase(int type, object obj, string tag, int index)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Erase(tag, index, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// return the index in the array containing "element"
|
||||
// if not found, return NWNX_DATA_INVALID_INDEX
|
||||
int NWNX_Data_Array_Find_Str(object obj, string tag, string element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Find_Str(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Find_Flt(object obj, string tag, float element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Find_Flt(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Find_Int(object obj, string tag, int element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Find_Int(tag, element, obj);
|
||||
}
|
||||
|
||||
int NWNX_Data_Array_Find_Obj(object obj, string tag, object element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Find_Obj(tag, element, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Insert a new element into position 'index'. If index is beyond the number of rows in the array,
|
||||
// this will quietly fail. This could be changed if you wanted to support sparse
|
||||
// arrays.
|
||||
void NWNX_Data_Array_Insert_Str(object obj, string tag, int index, string element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Insert_Str(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Insert_Flt(object obj, string tag, int index, float element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Insert_Flt(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Insert_Int(object obj, string tag, int index, int element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Insert_Int(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Insert_Obj(object obj, string tag, int index, object element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Insert_Obj(tag, index, element, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Insert a new element at the end of the array.
|
||||
void NWNX_Data_Array_PushBack_Str(object obj, string tag, string element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_PushBack_Str(tag, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_PushBack_Flt(object obj, string tag, float element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_PushBack_Flt(tag, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_PushBack_Int(object obj, string tag, int element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_PushBack_Int(tag, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_PushBack_Obj(object obj, string tag, object element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_PushBack_Obj(tag, element, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Cuts the array off at size 'size'. Elements beyond size are removed.
|
||||
void NWNX_Data_Array_Resize(int type, object obj, string tag, int size)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Resize(tag, size, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void NWNX_Data_Array_Shuffle(int type, object obj, string tag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Shuffle(tag, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int NWNX_Data_Array_Size(int type, object obj, string tag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
return Array_Size(tag, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Sort the array by value according to 'direciton' (ASC or DESC)
|
||||
// Note that this is a lexical sort, so sorting an array of ints or floats will have
|
||||
// odd results
|
||||
void NWNX_Data_Array_Sort(object obj, string tag, string direction)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Sort(tag, direction, TYPE_STRING, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_SortAscending(int type, object obj, string tag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_SortAscending(tag, TYPE_STRING, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_SortDescending(int type, object obj, string tag)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_SortDescending(tag, TYPE_STRING, obj);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Set the value of array index 'index' to a 'element'
|
||||
// This will quietly eat values if index > array size
|
||||
void NWNX_Data_Array_Set_Str(object obj, string tag, int index, string element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Set_Str(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Set_Flt(object obj, string tag, int index, float element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Set_Flt(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Set_Int(object obj, string tag, int index, int element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Set_Int(tag, index, element, obj);
|
||||
}
|
||||
|
||||
void NWNX_Data_Array_Set_Obj(object obj, string tag, int index, object element)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Data is deprecated. You should migrate to Array (see inc_array)");
|
||||
Array_Set_Obj(tag, index, element, obj);
|
||||
}
|
139
_module/nss/nwnx_dialog.nss
Normal file
139
_module/nss/nwnx_dialog.nss
Normal file
@ -0,0 +1,139 @@
|
||||
/// @addtogroup dialog Dialog
|
||||
/// @brief Functions exposing additional dialog properties
|
||||
/// @{
|
||||
/// @file nwnx_dialog.nss
|
||||
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Dialog = "NWNX_Dialog"; ///< @private
|
||||
|
||||
/// @name Dialog Node Types
|
||||
/// @anchor dialog_node_types
|
||||
/// @{
|
||||
const int NWNX_DIALOG_NODE_TYPE_INVALID = -1;
|
||||
const int NWNX_DIALOG_NODE_TYPE_STARTING_NODE = 0;
|
||||
const int NWNX_DIALOG_NODE_TYPE_ENTRY_NODE = 1;
|
||||
const int NWNX_DIALOG_NODE_TYPE_REPLY_NODE = 2;
|
||||
/// @}
|
||||
|
||||
/// @name Dialog Script Types
|
||||
/// @anchor dialog_script_types
|
||||
/// @{
|
||||
const int NWNX_DIALOG_SCRIPT_TYPE_OTHER = 0;
|
||||
const int NWNX_DIALOG_SCRIPT_TYPE_STARTING_CONDITIONAL = 1;
|
||||
const int NWNX_DIALOG_SCRIPT_TYPE_ACTION_TAKEN = 2;
|
||||
/// @}
|
||||
|
||||
/// @name Dialog Languages
|
||||
/// @anchor dialog_languages
|
||||
/// @{
|
||||
const int NWNX_DIALOG_LANGUAGE_ENGLISH = 0;
|
||||
const int NWNX_DIALOG_LANGUAGE_FRENCH = 1;
|
||||
const int NWNX_DIALOG_LANGUAGE_GERMAN = 2;
|
||||
const int NWNX_DIALOG_LANGUAGE_ITALIAN = 3;
|
||||
const int NWNX_DIALOG_LANGUAGE_SPANISH = 4;
|
||||
const int NWNX_DIALOG_LANGUAGE_POLISH = 5;
|
||||
const int NWNX_DIALOG_LANGUAGE_KOREAN = 128;
|
||||
const int NWNX_DIALOG_LANGUAGE_CHINESE_TRADITIONAL = 129;
|
||||
const int NWNX_DIALOG_LANGUAGE_CHINESE_SIMPLIFIED = 130;
|
||||
const int NWNX_DIALOG_LANGUAGE_JAPANESE = 131;
|
||||
/// @}
|
||||
|
||||
/// @brief Get the @ref dialog_node_types "Node Type" of the current text node
|
||||
/// @return A @ref dialog_node_types "Node Type". If called out of dialog, returns NWNX_DIALOG_NODE_TYPE_INVALID
|
||||
int NWNX_Dialog_GetCurrentNodeType();
|
||||
|
||||
/// @brief Get the @ref dialog_script_types "Script Type" of the current text node
|
||||
/// @return A @ref dialog_script_types "Node Type". If called out of dialog, returns NWNX_DIALOG_SCRIPT_TYPE_OTHER
|
||||
int NWNX_Dialog_GetCurrentScriptType();
|
||||
|
||||
/// @brief Get the absolute ID of the current node in the conversation
|
||||
/// @note NWNX_DIALOG_NODE_TYPE_ENTRY_NODE and NWNX_DIALOG_NODE_TYPE_REPLY_NODE nodes
|
||||
/// have different namespaces, so they can share the same ID
|
||||
/// @return The absolute ID in the dialog. If called out of dialog, returns -1
|
||||
int NWNX_Dialog_GetCurrentNodeID();
|
||||
|
||||
/// @brief Get the index of the current node in the list of replies/entries.
|
||||
/// @note The index is zero based, and counts items not displayed due to a StartingConditional.
|
||||
/// @return The index of the current node.
|
||||
int NWNX_Dialog_GetCurrentNodeIndex();
|
||||
|
||||
/// @brief Get the text of the current node
|
||||
/// @param language The @ref dialog_languages "language" of the text.
|
||||
/// @param gender The gender for the text.
|
||||
string NWNX_Dialog_GetCurrentNodeText(int language=NWNX_DIALOG_LANGUAGE_ENGLISH, int gender=GENDER_MALE);
|
||||
|
||||
/// @brief Set the text of the current node for given language/gender
|
||||
/// @note This will only work in a starting conditional script (action take comes after the text is displayed)
|
||||
/// @param text The text for the node.
|
||||
/// @param language The @ref dialog_languages "language" of the text.
|
||||
/// @param gender The gender for the text.
|
||||
void NWNX_Dialog_SetCurrentNodeText(string text, int language=NWNX_DIALOG_LANGUAGE_ENGLISH, int gender=GENDER_MALE);
|
||||
|
||||
/// @brief End a conversation oObject is involved in, it will fire the OnAbort script of the conversation
|
||||
/// @warning Calling this from a conversation script will crash your server.
|
||||
/// @param oObject The object in a conversation
|
||||
void NWNX_Dialog_End(object oObject);
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
int NWNX_Dialog_GetCurrentNodeType()
|
||||
{
|
||||
string sFunc = "GetCurrentNodeType";
|
||||
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Dialog_GetCurrentScriptType()
|
||||
{
|
||||
string sFunc = "GetCurrentScriptType";
|
||||
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Dialog_GetCurrentNodeID()
|
||||
{
|
||||
string sFunc = "GetCurrentNodeID";
|
||||
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Dialog_GetCurrentNodeIndex()
|
||||
{
|
||||
string sFunc = "GetCurrentNodeIndex";
|
||||
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Dialog_GetCurrentNodeText(int language=NWNX_DIALOG_LANGUAGE_ENGLISH, int gender=GENDER_MALE)
|
||||
{
|
||||
string sFunc = "GetCurrentNodeText";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Dialog, sFunc, gender);
|
||||
NWNX_PushArgumentInt(NWNX_Dialog, sFunc, language);
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Dialog_SetCurrentNodeText(string text, int language=NWNX_DIALOG_LANGUAGE_ENGLISH, int gender=GENDER_MALE)
|
||||
{
|
||||
string sFunc = "SetCurrentNodeText";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Dialog, sFunc, gender);
|
||||
NWNX_PushArgumentInt(NWNX_Dialog, sFunc, language);
|
||||
NWNX_PushArgumentString(NWNX_Dialog, sFunc, text);
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Dialog_End(object oObject)
|
||||
{
|
||||
string sFunc = "End";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Dialog, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Dialog, sFunc);
|
||||
}
|
259
_module/nss/nwnx_effect.nss
Normal file
259
_module/nss/nwnx_effect.nss
Normal file
@ -0,0 +1,259 @@
|
||||
/// @addtogroup effect Effect
|
||||
/// @brief Utility functions to manipulate the builtin effect type.
|
||||
/// @{
|
||||
/// @file nwnx_effect.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Effect = "NWNX_Effect"; ///< @private
|
||||
|
||||
/// An unpacked effect
|
||||
struct NWNX_EffectUnpacked
|
||||
{
|
||||
int nType; ///< @todo Describe
|
||||
int nSubType; ///< @todo Describe
|
||||
|
||||
float fDuration; ///< @todo Describe
|
||||
int nExpiryCalendarDay; ///< @todo Describe
|
||||
int nExpiryTimeOfDay; ///< @todo Describe
|
||||
|
||||
object oCreator; ///< @todo Describe
|
||||
int nSpellId; ///< @todo Describe
|
||||
int bExpose; ///< @todo Describe
|
||||
int bShowIcon; ///< @todo Describe
|
||||
int nCasterLevel; ///< @todo Describe
|
||||
|
||||
effect eLinkLeft; ///< @todo Describe
|
||||
int bLinkLeftValid; ///< @todo Describe
|
||||
effect eLinkRight; ///< @todo Describe
|
||||
int bLinkRightValid; ///< @todo Describe
|
||||
|
||||
int nNumIntegers; ///< @todo Describe
|
||||
int nParam0; ///< @todo Describe
|
||||
int nParam1; ///< @todo Describe
|
||||
int nParam2; ///< @todo Describe
|
||||
int nParam3; ///< @todo Describe
|
||||
int nParam4; ///< @todo Describe
|
||||
int nParam5; ///< @todo Describe
|
||||
int nParam6; ///< @todo Describe
|
||||
int nParam7; ///< @todo Describe
|
||||
float fParam0; ///< @todo Describe
|
||||
float fParam1; ///< @todo Describe
|
||||
float fParam2; ///< @todo Describe
|
||||
float fParam3; ///< @todo Describe
|
||||
string sParam0; ///< @todo Describe
|
||||
string sParam1; ///< @todo Describe
|
||||
string sParam2; ///< @todo Describe
|
||||
string sParam3; ///< @todo Describe
|
||||
string sParam4; ///< @todo Describe
|
||||
string sParam5; ///< @todo Describe
|
||||
object oParam0; ///< @todo Describe
|
||||
object oParam1; ///< @todo Describe
|
||||
object oParam2; ///< @todo Describe
|
||||
object oParam3; ///< @todo Describe
|
||||
vector vParam0; ///< @todo Describe
|
||||
vector vParam1; ///< @todo Describe
|
||||
|
||||
string sTag; ///< @todo Describe
|
||||
};
|
||||
|
||||
/// @brief Convert native effect type to unpacked structure.
|
||||
/// @param e The effect to convert.
|
||||
/// @return A constructed NWNX_EffectUnpacked.
|
||||
struct NWNX_EffectUnpacked NWNX_Effect_UnpackEffect(effect e);
|
||||
|
||||
/// @brief Convert unpacked effect structure to native type.
|
||||
/// @param e The NWNX_EffectUnpacked structure to convert.
|
||||
/// @return The effect.
|
||||
effect NWNX_Effect_PackEffect(struct NWNX_EffectUnpacked e);
|
||||
|
||||
/// @brief Set a script with optional data that runs when an effect expires
|
||||
/// @param e The effect.
|
||||
/// @param script The script to run when the effect expires.
|
||||
/// @param data Any other data you wish to send back to the script.
|
||||
/// @remark OBJECT_SELF in the script is the object the effect is applied to.
|
||||
/// @note Only works for TEMPORARY and PERMANENT effects applied to an object.
|
||||
effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = "");
|
||||
|
||||
/// @brief Get the data set with NWNX_Effect_SetEffectExpiredScript()
|
||||
/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript().
|
||||
/// @return The data attached to the effect.
|
||||
string NWNX_Effect_GetEffectExpiredData();
|
||||
|
||||
/// @brief Get the effect creator.
|
||||
/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript().
|
||||
/// @return The object from which the effect originated.
|
||||
object NWNX_Effect_GetEffectExpiredCreator();
|
||||
|
||||
/// @brief replace an already applied effect on an object
|
||||
/// Only duration, subtype, tag and spell related fields can be overwritten.
|
||||
/// @note eNew and eOld need to have the same type.
|
||||
/// @return Number of internal effects updated.
|
||||
int NWNX_Effect_ReplaceEffect(object obj, effect eOld, effect eNew);
|
||||
|
||||
/// @}
|
||||
|
||||
struct NWNX_EffectUnpacked NWNX_Effect_UnpackEffect(effect e)
|
||||
{
|
||||
string sFunc = "UnpackEffect";
|
||||
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, e);
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
|
||||
struct NWNX_EffectUnpacked n;
|
||||
n.sTag = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
|
||||
float fZ = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
float fY = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
float fX = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.vParam1 = Vector(fX, fY, fZ);
|
||||
fZ = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
fY = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
fX = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.vParam0 = Vector(fX, fY, fZ);
|
||||
n.oParam3 = NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
n.oParam2 = NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
n.oParam1 = NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
n.oParam0 = NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
n.sParam5 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.sParam4 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.sParam3 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.sParam2 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.sParam1 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.sParam0 = NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
n.fParam3 = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.fParam2 = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.fParam1 = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.fParam0 = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
n.nParam7 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam6 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam5 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam4 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam3 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam2 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam1 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nParam0 = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nNumIntegers = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
|
||||
n.bLinkRightValid = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.eLinkRight = NWNX_GetReturnValueEffect(NWNX_Effect, sFunc);
|
||||
n.bLinkLeftValid = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.eLinkLeft = NWNX_GetReturnValueEffect(NWNX_Effect, sFunc);
|
||||
|
||||
n.nCasterLevel = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.bShowIcon = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.bExpose = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nSpellId = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.oCreator = NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
|
||||
n.nExpiryTimeOfDay = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nExpiryCalendarDay = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.fDuration = NWNX_GetReturnValueFloat(NWNX_Effect, sFunc);
|
||||
|
||||
n.nSubType = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
n.nType = NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
|
||||
return n;
|
||||
}
|
||||
effect NWNX_Effect_PackEffect(struct NWNX_EffectUnpacked e)
|
||||
{
|
||||
string sFunc = "PackEffect";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nType);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nSubType);
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.fDuration);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nExpiryCalendarDay);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nExpiryTimeOfDay);
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, e.oCreator);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nSpellId);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.bExpose);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.bShowIcon);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nCasterLevel);
|
||||
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, e.eLinkLeft);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.bLinkLeftValid);
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, e.eLinkRight);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.bLinkRightValid);
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nNumIntegers);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam0);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam1);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam2);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam3);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam4);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam5);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam6);
|
||||
NWNX_PushArgumentInt(NWNX_Effect, sFunc, e.nParam7);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.fParam0);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.fParam1);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.fParam2);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.fParam3);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam0);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam1);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam2);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam3);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam4);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sParam5);
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, e.oParam0);
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, e.oParam1);
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, e.oParam2);
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, e.oParam3);
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam0.x);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam0.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam0.z);
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam1.x);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam1.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Effect, sFunc, e.vParam1.z);
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, e.sTag);
|
||||
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
return NWNX_GetReturnValueEffect(NWNX_Effect, sFunc);
|
||||
}
|
||||
|
||||
effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = "")
|
||||
{
|
||||
string sFunc = "SetEffectExpiredScript";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, data);
|
||||
NWNX_PushArgumentString(NWNX_Effect, sFunc, script);
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, e);
|
||||
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueEffect(NWNX_Effect, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Effect_GetEffectExpiredData()
|
||||
{
|
||||
string sFunc = "GetEffectExpiredData";
|
||||
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Effect, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Effect_GetEffectExpiredCreator()
|
||||
{
|
||||
string sFunc = "GetEffectExpiredCreator";
|
||||
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Effect, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Effect_ReplaceEffect(object obj, effect eOld, effect eNew)
|
||||
{
|
||||
string sFunc = "ReplaceEffect";
|
||||
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, eNew);
|
||||
NWNX_PushArgumentEffect(NWNX_Effect, sFunc, eOld);
|
||||
NWNX_PushArgumentObject(NWNX_Effect, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Effect, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Effect, sFunc);
|
||||
}
|
244
_module/nss/nwnx_elc.nss
Normal file
244
_module/nss/nwnx_elc.nss
Normal file
@ -0,0 +1,244 @@
|
||||
/// @addtogroup elc ELC
|
||||
/// @brief Replacement for ValidateCharacter: ELC & ILR
|
||||
/// @{
|
||||
/// @file nwnx_elc.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_ELC = "NWNX_ELC"; ///< @private
|
||||
|
||||
|
||||
/// @anchor elc_fail_type
|
||||
/// @name ELC Failure Types
|
||||
/// @{
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_NONE = 0;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_CHARACTER = 1;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_ITEM = 2;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_SKILL = 3;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_FEAT = 4;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_SPELL = 5;
|
||||
const int NWNX_ELC_VALIDATION_FAILURE_TYPE_CUSTOM = 6;
|
||||
/// @}
|
||||
|
||||
/// @anchor elc_fail_subtype
|
||||
/// @name ELC Failure Subtypes
|
||||
/// @note By default these constants are commented out to avoid a
|
||||
/// limitation on constants. Uncomment them as needed.
|
||||
/// @{
|
||||
const int NWNX_ELC_SUBTYPE_NONE = 0;
|
||||
/*
|
||||
const int NWNX_ELC_SUBTYPE_SERVER_LEVEL_RESTRICTION = 1;
|
||||
const int NWNX_ELC_SUBTYPE_LEVEL_HACK = 2;
|
||||
const int NWNX_ELC_SUBTYPE_COLORED_NAME = 3;
|
||||
const int NWNX_ELC_SUBTYPE_UNIDENTIFIED_EQUIPPED_ITEM = 4;
|
||||
const int NWNX_ELC_SUBTYPE_MIN_EQUIP_LEVEL = 5;
|
||||
const int NWNX_ELC_SUBTYPE_NON_PC_CHARACTER = 6;
|
||||
const int NWNX_ELC_SUBTYPE_DM_CHARACTER = 7;
|
||||
const int NWNX_ELC_SUBTYPE_NON_PLAYER_RACE = 8;
|
||||
const int NWNX_ELC_SUBTYPE_NON_PLAYER_CLASS = 9;
|
||||
const int NWNX_ELC_SUBTYPE_CLASS_LEVEL_RESTRICTION = 10;
|
||||
const int NWNX_ELC_SUBTYPE_PRESTIGE_CLASS_REQUIREMENTS = 11;
|
||||
const int NWNX_ELC_SUBTYPE_CLASS_ALIGNMENT_RESTRICTION = 12;
|
||||
const int NWNX_ELC_SUBTYPE_STARTING_ABILITY_VALUE_MAX = 13;
|
||||
const int NWNX_ELC_SUBTYPE_ABILITY_POINT_BUY_SYSTEM_CALCULATION = 14;
|
||||
const int NWNX_ELC_SUBTYPE_CLASS_SPELLCASTER_INVALID_PRIMARY_STAT = 15;
|
||||
const int NWNX_ELC_SUBTYPE_EPIC_LEVEL_FLAG = 16;
|
||||
const int NWNX_ELC_SUBTYPE_TOO_MANY_HITPOINTS = 17;
|
||||
const int NWNX_ELC_SUBTYPE_UNUSABLE_SKILL = 18;
|
||||
const int NWNX_ELC_SUBTYPE_NOT_ENOUGH_SKILLPOINTS = 19;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_NUM_RANKS_IN_CLASS_SKILL = 20;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_NUM_RANKS_IN_NON_CLASS_SKILL = 21;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_NUM_REMAINING_SKILL_POINTS = 22;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_FEAT = 23;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_REQUIRED_SPELL_LEVEL_NOT_MET = 24;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_REQUIRED_BASE_ATTACK_BONUS_NOT_MET = 25;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_REQUIRED_ABILITY_VALUE_NOT_MET = 26;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_REQUIRED_SKILL_NOT_MET = 27;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_REQUIRED_FEAT_NOT_MET = 28;
|
||||
const int NWNX_ELC_SUBTYPE_TOO_MANY_FEATS_THIS_LEVEL = 29;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_NOT_AVAILABLE_TO_CLASS = 30;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_IS_NORMAL_FEAT_ONLY = 31;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_IS_BONUS_FEAT_ONLY = 32;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_INVALID_SPELL_GAIN_WIZARD = 33;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_INVALID_SPELL_GAIN_BARD_SORCERER = 34;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_INVALID_SPELL_GAIN_OTHER_CLASSES = 35;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_SPELL = 36;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_INVALID_SPELL_LEVEL = 37;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_MINIMUM_ABILITY = 40;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_RESTRICTED_SPELL_SCHOOL = 41;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_ALREADY_KNOWN = 42;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_WIZARD_EXCEEDS_NUMSPELLS_TO_ADD = 43;
|
||||
const int NWNX_ELC_SUBTYPE_ILLEGAL_REMOVED_SPELL = 44;
|
||||
const int NWNX_ELC_SUBTYPE_REMOVED_NOT_KNOWN_SPELL = 45;
|
||||
const int NWNX_ELC_SUBTYPE_INVALID_NUM_SPELLS = 46;
|
||||
const int NWNX_ELC_SUBTYPE_SPELL_LIST_COMPARISON = 47;
|
||||
const int NWNX_ELC_SUBTYPE_SKILL_LIST_COMPARISON = 48;
|
||||
const int NWNX_ELC_SUBTYPE_FEAT_LIST_COMPARISON = 49;
|
||||
const int NWNX_ELC_SUBTYPE_MISC_SAVING_THROW = 50;
|
||||
const int NWNX_ELC_SUBTYPE_NUM_FEAT_COMPARISON = 51;
|
||||
*/
|
||||
/// @}
|
||||
|
||||
/// @brief Sets the script that runs whenever an ELC validation failure happens
|
||||
/// @param sScript The script name.
|
||||
void NWNX_ELC_SetELCScript(string sScript);
|
||||
|
||||
/// @brief Enables a custom ELC Check that will call the ELC Script with the
|
||||
/// NWNX_ELC_VALIDATION_FAILURE_TYPE_CUSTOM type.
|
||||
/// @param bEnabled TRUE to use this check.
|
||||
/// @note Only runs if you have an ELC script set, be sure to skip this check
|
||||
/// if a player doesn't fail your custom check otherwise they won't be able to log in
|
||||
void NWNX_ELC_EnableCustomELCCheck(int bEnabled);
|
||||
|
||||
/// @brief Skip an ELC Validation Failure Event
|
||||
/// @note Only to be called in the ELC Script
|
||||
void NWNX_ELC_SkipValidationFailure();
|
||||
|
||||
/// @brief Get the validation failure type
|
||||
/// @return A @ref elc_fail_type "Validation Failure Type"
|
||||
/// @note Only to be called in the ELC Script
|
||||
int NWNX_ELC_GetValidationFailureType();
|
||||
|
||||
/// @brief Get the validation failure subtype
|
||||
/// @return A @ref elc_fail_subtype "Validation Failure Subtype"
|
||||
/// @note Only to be called in the ELC Script
|
||||
int NWNX_ELC_GetValidationFailureSubType();
|
||||
|
||||
/// @brief Get the failure message
|
||||
/// @return The talk table strref the player receives.
|
||||
/// @note Only to be called in the ELC Script
|
||||
int NWNX_ELC_GetValidationFailureMessageStrRef();
|
||||
|
||||
/// @brief Set the failure message
|
||||
/// @param nStrRef The talk table strref the player receives, must be > 0.
|
||||
/// @note Only to be called in the ELC Script
|
||||
void NWNX_ELC_SetValidationFailureMessageStrRef(int nStrRef);
|
||||
|
||||
/// @brief Get the item that failed ILR validation
|
||||
/// @return The object that caused the ILR validation failure. Returns OBJECT_INVALID on error.
|
||||
/// @note Only to be called in the ELC Script during a
|
||||
/// NWNX_ELC_VALIDATION_FAILURE_TYPE_ITEM validation failure.
|
||||
object NWNX_ELC_GetValidationFailureItem();
|
||||
|
||||
/// @brief Get the character level at which the validation failure occurred
|
||||
/// @return The character level or -1 on error.
|
||||
/// @remark May not always return a level, depending on where the failure occurred.
|
||||
/// @note Only to be called in the ELC Script
|
||||
int NWNX_ELC_GetValidationFailureLevel();
|
||||
|
||||
/// @brief Get the ID of the skill that failed ELC validation
|
||||
/// @return The skill ID or -1 on error.
|
||||
/// @remark May not always return a skill id, depending on the validation failure subtype.
|
||||
/// @note Only to be called in the ELC Script during a
|
||||
/// NWNX_ELC_VALIDATION_FAILURE_TYPE_SKILL validation failure.
|
||||
int NWNX_ELC_GetValidationFailureSkillID();
|
||||
|
||||
/// @brief Get the ID of the feat that failed ELC validation
|
||||
/// @return The feat ID or -1 on error
|
||||
/// @remark May not always return a feat id, depending on the validation failure subtype.
|
||||
/// @note Only to be called in the ELC Script during a
|
||||
/// NWNX_ELC_VALIDATION_FAILURE_TYPE_FEAT validation failure.
|
||||
int NWNX_ELC_GetValidationFailureFeatID();
|
||||
|
||||
/// @brief Get the ID of the spell that failed ELC validation
|
||||
/// @return The spell ID or -1 on error
|
||||
/// @remark May not always return a spell id, depending on the validation failure subtype.
|
||||
/// @note Only to be called in the ELC Script during a
|
||||
/// NWNX_ELC_VALIDATION_FAILURE_TYPE_SPELL validation failure.
|
||||
int NWNX_ELC_GetValidationFailureSpellID();
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_ELC_SetELCScript(string sScript)
|
||||
{
|
||||
string sFunc = "SetELCScript";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_ELC, sFunc, sScript);
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_ELC_EnableCustomELCCheck(int bEnabled)
|
||||
{
|
||||
string sFunc = "EnableCustomELCCheck";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_ELC, sFunc, bEnabled);
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_ELC_SkipValidationFailure()
|
||||
{
|
||||
string sFunc = "SkipValidationFailure";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureType()
|
||||
{
|
||||
string sFunc = "GetValidationFailureType";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureSubType()
|
||||
{
|
||||
string sFunc = "GetValidationFailureSubType";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureMessageStrRef()
|
||||
{
|
||||
string sFunc = "GetValidationFailureMessageStrRef";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_ELC_SetValidationFailureMessageStrRef(int nStrRef)
|
||||
{
|
||||
string sFunc = "SetValidationFailureMessageStrRef";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_ELC, sFunc, nStrRef);
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_ELC_GetValidationFailureItem()
|
||||
{
|
||||
string sFunc = "GetValidationFailureItem";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueObject(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureLevel()
|
||||
{
|
||||
string sFunc = "GetValidationFailureLevel";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureSkillID()
|
||||
{
|
||||
string sFunc = "GetValidationFailureSkillID";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureFeatID()
|
||||
{
|
||||
string sFunc = "GetValidationFailureFeatID";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_ELC_GetValidationFailureSpellID()
|
||||
{
|
||||
string sFunc = "GetValidationFailureSpellID";
|
||||
|
||||
NWNX_CallFunction(NWNX_ELC, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_ELC, sFunc);
|
||||
}
|
285
_module/nss/nwnx_encounter.nss
Normal file
285
_module/nss/nwnx_encounter.nss
Normal file
@ -0,0 +1,285 @@
|
||||
/// @addtogroup encounter Encounter
|
||||
/// @brief Functions exposing additional encounter properties.
|
||||
/// @{
|
||||
/// @file nwnx_encounter.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Encounter = "NWNX_Encounter"; ///< @private
|
||||
|
||||
/// @brief A creature list entry for an encounter.
|
||||
struct NWNX_Encounter_CreatureListEntry
|
||||
{
|
||||
string resref; ///< The resref.
|
||||
float challengeRating; ///< The challenge rating.
|
||||
int unique; ///< Creature will be unique to the encounter.
|
||||
int alreadyUsed; //< Creature has already been used.
|
||||
};
|
||||
|
||||
|
||||
/// @brief Get the number of creatures in the encounter list
|
||||
/// @param encounter The encounter object.
|
||||
/// @return The number of creatures in the encounter list.
|
||||
int NWNX_Encounter_GetNumberOfCreaturesInEncounterList(object encounter);
|
||||
|
||||
/// @brief Gets the encounter creature list entry at the specified index
|
||||
/// @param encounter The encounter object.
|
||||
/// @param index The index of the creature in the encounter list.
|
||||
/// @return An NWNX_Encounter_CreatureListEntry.
|
||||
struct NWNX_Encounter_CreatureListEntry NWNX_Encounter_GetEncounterCreatureByIndex(object encounter, int index);
|
||||
|
||||
/// @brief Set the encounter creature list entry at the specified index
|
||||
/// @param encounter The encounter object.
|
||||
/// @param index The index of the creature in the encounter list.
|
||||
/// @param creatureEntry The NWNX_Encounter_CreatureListEntry.
|
||||
void NWNX_Encounter_SetEncounterCreatureByIndex(object encounter, int index, struct NWNX_Encounter_CreatureListEntry creatureEntry);
|
||||
|
||||
/// @brief Get the faction id of encounter
|
||||
/// @param encounter The encounter object.
|
||||
/// @return The faction id.
|
||||
int NWNX_Encounter_GetFactionId(object encounter);
|
||||
|
||||
/// @brief Set the faction id of encounter.
|
||||
/// @param encounter The encounter object.
|
||||
/// @param factionId The faction id.
|
||||
void NWNX_Encounter_SetFactionId(object encounter, int factionId);
|
||||
|
||||
/// @brief Get if encounter is player triggered only.
|
||||
/// @param encounter The encounter object.
|
||||
/// @return TRUE if encounter is player triggered only.
|
||||
int NWNX_Encounter_GetPlayerTriggeredOnly(object encounter);
|
||||
|
||||
/// @brief Set if encounter is player triggered only.
|
||||
/// @param encounter The encounter object.
|
||||
/// @param playerTriggeredOnly TRUE/FALSE
|
||||
void NWNX_Encounter_SetPlayerTriggeredOnly(object encounter, int playerTriggeredOnly);
|
||||
|
||||
/// @brief Get the reset time of encounter.
|
||||
/// @param encounter The encounter object.
|
||||
/// @return The seconds the encounter is defined to reset.
|
||||
int NWNX_Encounter_GetResetTime(object encounter);
|
||||
|
||||
/// @brief Set the reset time of encounter.
|
||||
/// @param encounter The encounter object.
|
||||
/// @param resetTime The seconds the encounter will reset.
|
||||
void NWNX_Encounter_SetResetTime(object encounter, int resetTime);
|
||||
|
||||
/// @brief Get the number of spawn points of encounter.
|
||||
/// @param encounter The encounter object.
|
||||
/// @return The count of the spawn points for the encounter.
|
||||
int NWNX_Encounter_GetNumberOfSpawnPoints(object encounter);
|
||||
|
||||
/// @brief Gets the spawn point list entry at the specified index
|
||||
/// @param encounter The encounter object.
|
||||
/// @param index The index of the spawn point in the encounter list.
|
||||
/// @return Location of spawn point.
|
||||
location NWNX_Encounter_GetSpawnPointByIndex(object encounter, int index);
|
||||
|
||||
/// @brief Get the minimum amount of creatures that encounter will spawn.
|
||||
/// @param encounter The encounter object.
|
||||
/// @return the minimal amount.
|
||||
int NWNX_Encounter_GetMinNumSpawned(object encounter);
|
||||
|
||||
/// @brief Get the maximum amount of creatures that encounter will spawn.
|
||||
/// @param encounter The encounter object.
|
||||
/// @return the maximal amount.
|
||||
int NWNX_Encounter_GetMaxNumSpawned(object encounter);
|
||||
|
||||
/// @brief Get the current number of creatures that are spawned and alive
|
||||
/// @param encounter The encounter object.
|
||||
/// @return amount of creatures
|
||||
int NWNX_Encounter_GetCurrentNumSpawned(object encounter);
|
||||
|
||||
/// @brief Get the geometry of an encounter
|
||||
/// @param oEncounter: The encounter object.
|
||||
/// @return A string of vertex positions.
|
||||
string NWNX_Encounter_GetGeometry(object oEncounter);
|
||||
|
||||
/// @brief Set the geometry of an encounter with a list of vertex positions
|
||||
/// @param oTrigger The encounter object.
|
||||
/// @param sGeometry Needs to be in the following format -> {x.x, y.y, z.z} or {x.x, y.y}
|
||||
/// Example Geometry: "{1.0, 1.0, 0.0}{4.0, 1.0, 0.0}{4.0, 4.0, 0.0}{1.0, 4.0, 0.0}"
|
||||
///
|
||||
/// @remark The Z position is optional and will be calculated dynamically based
|
||||
/// on terrain height if it's not provided.
|
||||
///
|
||||
/// @remark The minimum number of vertices is 3.
|
||||
void NWNX_Encounter_SetGeometry(object oTrigger, string sGeometry);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Encounter_GetNumberOfCreaturesInEncounterList(object encounter)
|
||||
{
|
||||
string sFunc = "GetNumberOfCreaturesInEncounterList";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Encounter_CreatureListEntry NWNX_Encounter_GetEncounterCreatureByIndex(object encounter, int index)
|
||||
{
|
||||
string sFunc = "GetEncounterCreatureByIndex";
|
||||
struct NWNX_Encounter_CreatureListEntry creatureEntry;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, index);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
creatureEntry.alreadyUsed = NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
creatureEntry.unique = NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
creatureEntry.challengeRating = NWNX_GetReturnValueFloat(NWNX_Encounter, sFunc);
|
||||
creatureEntry.resref = NWNX_GetReturnValueString(NWNX_Encounter, sFunc);
|
||||
|
||||
return creatureEntry;
|
||||
}
|
||||
|
||||
void NWNX_Encounter_SetEncounterCreatureByIndex(object encounter, int index, struct NWNX_Encounter_CreatureListEntry creatureEntry)
|
||||
{
|
||||
string sFunc = "SetEncounterCreatureByIndex";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, creatureEntry.alreadyUsed);
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, creatureEntry.unique);
|
||||
NWNX_PushArgumentFloat(NWNX_Encounter, sFunc, creatureEntry.challengeRating);
|
||||
NWNX_PushArgumentString(NWNX_Encounter, sFunc, creatureEntry.resref);
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, index);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetFactionId(object encounter)
|
||||
{
|
||||
string sFunc = "GetFactionId";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Encounter_SetFactionId(object encounter, int factionId)
|
||||
{
|
||||
string sFunc = "SetFactionId";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, factionId);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetPlayerTriggeredOnly(object encounter)
|
||||
{
|
||||
string sFunc = "GetPlayerTriggeredOnly";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Encounter_SetPlayerTriggeredOnly(object encounter, int playerTriggeredOnly)
|
||||
{
|
||||
string sFunc = "SetPlayerTriggeredOnly";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, playerTriggeredOnly);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetResetTime(object encounter)
|
||||
{
|
||||
string sFunc = "GetResetTime";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Encounter_SetResetTime(object encounter, int resetTime)
|
||||
{
|
||||
string sFunc = "SetResetTime";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, resetTime);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetNumberOfSpawnPoints(object encounter)
|
||||
{
|
||||
string sFunc = "GetNumberOfSpawnPoints";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
location NWNX_Encounter_GetSpawnPointByIndex(object encounter, int index)
|
||||
{
|
||||
string sFunc = "GetSpawnPointByIndex";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Encounter, sFunc, index);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
float o = NWNX_GetReturnValueFloat(NWNX_Encounter, sFunc);
|
||||
float z = NWNX_GetReturnValueFloat(NWNX_Encounter, sFunc);
|
||||
float y = NWNX_GetReturnValueFloat(NWNX_Encounter, sFunc);
|
||||
float x = NWNX_GetReturnValueFloat(NWNX_Encounter, sFunc);
|
||||
|
||||
return Location(GetArea(encounter), Vector(x, y, z), o);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetMinNumSpawned(object encounter)
|
||||
{
|
||||
string sFunc = "GetMinNumSpawned";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetMaxNumSpawned(object encounter)
|
||||
{
|
||||
string sFunc = "GetMaxNumSpawned";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Encounter_GetCurrentNumSpawned(object encounter)
|
||||
{
|
||||
string sFunc = "GetCurrentNumSpawned";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, encounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Encounter_GetGeometry(object oEncounter)
|
||||
{
|
||||
string sFunc = "GetGeometry";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, oEncounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Encounter, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Encounter_SetGeometry(object oEncounter, string sGeometry)
|
||||
{
|
||||
string sFunc = "SetGeometry";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Encounter, sFunc, sGeometry);
|
||||
NWNX_PushArgumentObject(NWNX_Encounter, sFunc, oEncounter);
|
||||
NWNX_CallFunction(NWNX_Encounter, sFunc);
|
||||
}
|
1590
_module/nss/nwnx_events.nss
Normal file
1590
_module/nss/nwnx_events.nss
Normal file
File diff suppressed because it is too large
Load Diff
63
_module/nss/nwnx_feat.nss
Normal file
63
_module/nss/nwnx_feat.nss
Normal file
@ -0,0 +1,63 @@
|
||||
/// @addtogroup feat Feat
|
||||
/// @brief Define feat bonuses/penalties
|
||||
/// @{
|
||||
/// @file nwnx_feat.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Feat = "NWNX_Feat"; ///< @private
|
||||
|
||||
/// @name Feat Modifiers
|
||||
/// @anchor feat_modifiers
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_FEAT_MODIFIER_INVALID = 0;
|
||||
const int NWNX_FEAT_MODIFIER_AB = 1;
|
||||
const int NWNX_FEAT_MODIFIER_ABILITY = 2;
|
||||
const int NWNX_FEAT_MODIFIER_ABVSRACE = 3;
|
||||
const int NWNX_FEAT_MODIFIER_AC = 4;
|
||||
const int NWNX_FEAT_MODIFIER_ACVSRACE = 5;
|
||||
const int NWNX_FEAT_MODIFIER_ARCANESPELLFAILURE = 6;
|
||||
const int NWNX_FEAT_MODIFIER_CONCEALMENT = 7;
|
||||
const int NWNX_FEAT_MODIFIER_DMGIMMUNITY = 8;
|
||||
const int NWNX_FEAT_MODIFIER_DMGREDUCTION = 9;
|
||||
const int NWNX_FEAT_MODIFIER_DMGRESIST = 10;
|
||||
const int NWNX_FEAT_MODIFIER_IMMUNITY = 11;
|
||||
const int NWNX_FEAT_MODIFIER_MOVEMENTSPEED = 12;
|
||||
const int NWNX_FEAT_MODIFIER_REGENERATION = 13;
|
||||
const int NWNX_FEAT_MODIFIER_SAVE = 14;
|
||||
const int NWNX_FEAT_MODIFIER_SAVEVSRACE = 15;
|
||||
const int NWNX_FEAT_MODIFIER_SAVEVSTYPE = 16;
|
||||
const int NWNX_FEAT_MODIFIER_SAVEVSTYPERACE = 17;
|
||||
const int NWNX_FEAT_MODIFIER_SPELLIMMUNITY = 18;
|
||||
const int NWNX_FEAT_MODIFIER_SRCHARGEN = 19;
|
||||
const int NWNX_FEAT_MODIFIER_SRINCLEVEL = 20;
|
||||
const int NWNX_FEAT_MODIFIER_SPELLSAVEDC = 21;
|
||||
const int NWNX_FEAT_MODIFIER_BONUSSPELL = 22;
|
||||
const int NWNX_FEAT_MODIFIER_TRUESEEING = 23;
|
||||
const int NWNX_FEAT_MODIFIER_SEEINVISIBLE = 24;
|
||||
const int NWNX_FEAT_MODIFIER_ULTRAVISION = 25;
|
||||
const int NWNX_FEAT_MODIFIER_HASTE = 26;
|
||||
const int NWNX_FEAT_MODIFIER_VISUALEFFECT = 27;
|
||||
///@}
|
||||
|
||||
/// @brief Sets a feat modifier.
|
||||
/// @param iFeat The Feat constant or value in feat.2da.
|
||||
/// @param iMod The @ref feat_modifiers "feat modifier" to set.
|
||||
/// @param iParam1, iParam2, iParam3, iParam4 The parameters for this feat modifier.
|
||||
void NWNX_Feat_SetFeatModifier(int iFeat, int iMod, int iParam1 = 0xDEADBEEF, int iParam2 = 0xDEADBEEF, int iParam3 = 0xDEADBEEF, int iParam4 = 0xDEADBEEF);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Feat_SetFeatModifier(int iFeat, int iMod, int iParam1 = 0xDEADBEEF, int iParam2 = 0xDEADBEEF, int iParam3 = 0xDEADBEEF, int iParam4 = 0xDEADBEEF)
|
||||
{
|
||||
string sFunc = "SetFeatModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iParam4);
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iParam3);
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iParam2);
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iParam1);
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iMod);
|
||||
NWNX_PushArgumentInt(NWNX_Feat, sFunc, iFeat);
|
||||
|
||||
NWNX_CallFunction(NWNX_Feat, sFunc);
|
||||
}
|
519
_module/nss/nwnx_feedback.nss
Normal file
519
_module/nss/nwnx_feedback.nss
Normal file
@ -0,0 +1,519 @@
|
||||
/// @addtogroup feedback Feedback
|
||||
/// @brief Allows combatlog, feedback and journal updated messages to be hidden globally or per player.
|
||||
/// @note
|
||||
/// * If oPC == OBJECT_INVALID it will get/set the global state:
|
||||
/// * TRUE = Message is globally hidden
|
||||
/// * FALSE = Message is not globally hidden
|
||||
/// * If oPC is a valid player it will get/set the personal state:
|
||||
/// * TRUE = Message is hidden for oPC
|
||||
/// * FALSE = Message is not hidden for oPC
|
||||
/// * -1 = Personal state is not set for Message
|
||||
/// @{
|
||||
/// @file nwnx_feedback.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Feedback = "NWNX_Feedback"; ///< @private
|
||||
|
||||
/// @name Combat Log Message Types
|
||||
/// @anchor combat_log_msgs
|
||||
/// @{
|
||||
const int NWNX_FEEDBACK_COMBATLOG_SIMPLE_ADJECTIVE = 1;
|
||||
/*
|
||||
const int NWNX_FEEDBACK_COMBATLOG_SIMPLE_DAMAGE = 2;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_COMPLEX_DAMAGE = 3;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_COMPLEX_DEATH = 4;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_COMPLEX_ATTACK = 5;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_SPECIAL_ATTACK = 6;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_SAVING_THROW = 7;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_CAST_SPELL = 8;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_USE_SKILL = 9;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_SPELL_RESISTANCE = 10;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_FEEDBACK = 11; // NOTE: This hides ALL feedback messages, to hide individual messages use NWNX_Feedback_SetFeedbackMessageHidden()
|
||||
const int NWNX_FEEDBACK_COMBATLOG_COUNTERSPELL = 12;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_TOUCHATTACK = 13;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_INITIATIVE = 14;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_DISPEL_MAGIC = 15;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_POLYMORPH = 17;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_FEEDBACKSTRING = 18;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_VIBRATE = 19;
|
||||
const int NWNX_FEEDBACK_COMBATLOG_UNLOCKACHIEVEMENT = 20;
|
||||
|
||||
// 1 -> Simple_Adjective: <charname> : <adjective described by strref>
|
||||
// 2 -> Simple_Damage: <charname> damaged : <amount>
|
||||
// 3 -> Complex_Damage: <charname> damages <charname> : <amount>
|
||||
// 4 -> Complex_Death: <charname> killed <charname>
|
||||
// 5 -> Complex_Attack: <charname> attacks <charname> : *hit* / *miss* / *parried* : (<attack roll> + <attack mod> = <modified total>)
|
||||
// 6 -> Special_Attack: <charname> attempts <special attack> on <charname> : *success* / *failure* : (<attack roll> + <attack mod> = <modified roll>)
|
||||
// 7 -> Saving_Throw: <charname> : <saving throw type> : *success* / *failure* : (<saving throw roll> + <saving throw modifier> = <modified total>)
|
||||
// 8 -> Cast_Spell: <charname> casts <spell name> : Spellcraft check *failure* / *success*
|
||||
// 9 -> Use_Skill: <charname> : <skill name> : *success* / *failure* : (<skill roll> + <skill modifier> = <modified total> vs <DC> )
|
||||
// 10 -> Spell_Resistance: <charname> : Spell Resistance <SR value> : *success* / *failure*
|
||||
// 11 -> Feedback: Reason skill/feat/ability failed.
|
||||
// 12 -> Counterspel: <charname> casts <spell name> : *spell countered by* : <charname> casting <spell name>
|
||||
// 13 -> TouchAttack: <charname> attempts <melee/ranged touch attack> on <charname> : *hit/miss/critical* : (<attack roll> + <attack mod> = <modified roll>)
|
||||
// 14 -> Initiative: <charname> : Initiative Roll : <total> : (<roll> + <modifier> = <total>)
|
||||
// 15 -> Dispel_Magic: Dispel Magic : <charname> : <spell name>, <spell name>, <spell name>...
|
||||
// 17 -> Unused, probably
|
||||
// 18 -> Same as 11, maybe. Might be unused too
|
||||
// 19 -> Unused
|
||||
// 20 -> Unused
|
||||
*/
|
||||
|
||||
/// @}
|
||||
|
||||
/// @name Feedback Message Types
|
||||
/// @anchor feedback_msgs
|
||||
/// @{
|
||||
|
||||
const int NWNX_FEEDBACK_SKILL_CANT_USE = 0;
|
||||
/*
|
||||
/// Skill Feedback Messages
|
||||
const int NWNX_FEEDBACK_SKILL_CANT_USE_TIMER = 1;
|
||||
const int NWNX_FEEDBACK_SKILL_ANIMALEMPATHY_VALID_TARGETS = 2;
|
||||
const int NWNX_FEEDBACK_SKILL_TAUNT_VALID_TARGETS = 3;
|
||||
const int NWNX_FEEDBACK_SKILL_TAUNT_TARGET_IMMUNE = 223;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_STOLE_ITEM = 4;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_STOLE_GOLD = 5;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_ATTEMPTING_TO_STEAL = 46;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_ATTEMPT_DETECTED = 150;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_STOLE_ITEM_TARGET = 47;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_STOLE_GOLD_TARGET = 48;
|
||||
const int NWNX_FEEDBACK_SKILL_PICKPOCKET_TARGET_BROKE = 57;
|
||||
const int NWNX_FEEDBACK_SKILL_HEAL_TARGET_NOT_DISPSND = 55;
|
||||
const int NWNX_FEEDBACK_SKILL_HEAL_VALID_TARGETS = 56;
|
||||
const int NWNX_FEEDBACK_SKILL_STEALTH_IN_COMBAT = 60;
|
||||
|
||||
/// Miscellaneous Targetting Messages
|
||||
const int NWNX_FEEDBACK_TARGET_UNAWARE = 6;
|
||||
const int NWNX_FEEDBACK_ACTION_NOT_POSSIBLE_STATUS = 7;
|
||||
const int NWNX_FEEDBACK_ACTION_NOT_POSSIBLE_PVP = 187;
|
||||
const int NWNX_FEEDBACK_ACTION_CANT_REACH_TARGET = 218;
|
||||
const int NWNX_FEEDBACK_ACTION_NO_LOOT = 247;
|
||||
|
||||
/// Miscellaneous Feedback Messages
|
||||
const int NWNX_FEEDBACK_WEIGHT_TOO_ENCUMBERED_TO_RUN = 8;
|
||||
const int NWNX_FEEDBACK_WEIGHT_TOO_ENCUMBERED_WALK_SLOW = 9;
|
||||
const int NWNX_FEEDBACK_WEIGHT_TOO_ENCUMBERED_CANT_PICKUP = 10;
|
||||
const int NWNX_FEEDBACK_STATS_LEVELUP = 11;
|
||||
const int NWNX_FEEDBACK_INVENTORY_FULL = 12;
|
||||
const int NWNX_FEEDBACK_CONTAINER_FULL = 212;
|
||||
const int NWNX_FEEDBACK_TRAP_TRIGGERED = 82;
|
||||
const int NWNX_FEEDBACK_DAMAGE_HEALED = 151;
|
||||
const int NWNX_FEEDBACK_EXPERIENCE_GAINNED = 182;
|
||||
const int NWNX_FEEDBACK_EXPERIENCE_LOST = 183;
|
||||
const int NWNX_FEEDBACK_JOURNALUPDATED = 184; // Doesn't actually work, use:
|
||||
// NWNX_Feedback_{Get/Set}JournalUpdatedMessageHidden()
|
||||
const int NWNX_FEEDBACK_BARTER_CANCELLED = 185;
|
||||
|
||||
/// Mode activation/deactivation Messages
|
||||
const int NWNX_FEEDBACK_DETECT_MODE_ACTIVATED = 83;
|
||||
const int NWNX_FEEDBACK_DETECT_MODE_DEACTIVATED = 84;
|
||||
const int NWNX_FEEDBACK_STEALTH_MODE_ACTIVATED = 85;
|
||||
const int NWNX_FEEDBACK_STEALTH_MODE_DEACTIVATED = 86;
|
||||
const int NWNX_FEEDBACK_PARRY_MODE_ACTIVATED = 87;
|
||||
const int NWNX_FEEDBACK_PARRY_MODE_DEACTIVATED = 88;
|
||||
const int NWNX_FEEDBACK_POWER_ATTACK_MODE_ACTIVATED = 89;
|
||||
const int NWNX_FEEDBACK_POWER_ATTACK_MODE_DEACTIVATED = 90;
|
||||
const int NWNX_FEEDBACK_IMPROVED_POWER_ATTACK_MODE_ACTIVATED = 91;
|
||||
const int NWNX_FEEDBACK_IMPROVED_POWER_ATTACK_MODE_DEACTIVATED = 92;
|
||||
const int NWNX_FEEDBACK_RAPID_SHOT_MODE_ACTIVATED = 166;
|
||||
const int NWNX_FEEDBACK_RAPID_SHOT_MODE_DEACTIVATED = 167;
|
||||
const int NWNX_FEEDBACK_FLURRY_OF_BLOWS_MODE_ACTIVATED = 168;
|
||||
const int NWNX_FEEDBACK_FLURRY_OF_BLOWS_MODE_DEACTIVATED = 169;
|
||||
const int NWNX_FEEDBACK_EXPERTISE_MODE_ACTIVATED = 227;
|
||||
const int NWNX_FEEDBACK_EXPERTISE_MODE_DEACTIVATED = 228;
|
||||
const int NWNX_FEEDBACK_IMPROVED_EXPERTISE_MODE_ACTIVATED = 229;
|
||||
const int NWNX_FEEDBACK_IMPROVED_EXPERTISE_MODE_DEACTIVATED = 230;
|
||||
const int NWNX_FEEDBACK_DEFENSIVE_CAST_MODE_ACTIVATED = 231;
|
||||
const int NWNX_FEEDBACK_DEFENSIVE_CAST_MODE_DEACTIVATED = 232;
|
||||
const int NWNX_FEEDBACK_MODE_CANNOT_USE_WEAPONS = 188;
|
||||
const int NWNX_FEEDBACK_DIRTY_FIGHTING_MODE_ACTIVATED = 237;
|
||||
const int NWNX_FEEDBACK_DIRTY_FIGHTING_MODE_DEACTIVATED = 238;
|
||||
|
||||
const int NWNX_FEEDBACK_DEFENSIVE_STANCE_MODE_ACTIVATED = 252;
|
||||
const int NWNX_FEEDBACK_DEFENSIVE_STANCE_MODE_DEACTIVATED = 253;
|
||||
|
||||
/// Equipping Feedback Messages
|
||||
const int NWNX_FEEDBACK_EQUIP_SKILL_SPELL_MODIFIERS = 71;
|
||||
const int NWNX_FEEDBACK_EQUIP_UNIDENTIFIED = 76;
|
||||
const int NWNX_FEEDBACK_EQUIP_MONK_ABILITIES = 77;
|
||||
const int NWNX_FEEDBACK_EQUIP_INSUFFICIENT_LEVEL = 98;
|
||||
const int NWNX_FEEDBACK_EQUIP_PROFICIENCIES = 119;
|
||||
const int NWNX_FEEDBACK_EQUIP_WEAPON_TOO_LARGE = 120;
|
||||
const int NWNX_FEEDBACK_EQUIP_WEAPON_TOO_SMALL = 260;
|
||||
const int NWNX_FEEDBACK_EQUIP_ONE_HANDED_WEAPON = 121;
|
||||
const int NWNX_FEEDBACK_EQUIP_TWO_HANDED_WEAPON = 122;
|
||||
const int NWNX_FEEDBACK_EQUIP_WEAPON_SWAPPED_OUT = 123;
|
||||
const int NWNX_FEEDBACK_EQUIP_ONE_CHAIN_WEAPON = 124;
|
||||
const int NWNX_FEEDBACK_EQUIP_NATURAL_AC_NO_STACK = 189;
|
||||
const int NWNX_FEEDBACK_EQUIP_ARMOUR_AC_NO_STACK = 190;
|
||||
const int NWNX_FEEDBACK_EQUIP_SHIELD_AC_NO_STACK = 191;
|
||||
const int NWNX_FEEDBACK_EQUIP_DEFLECTION_AC_NO_STACK = 192;
|
||||
const int NWNX_FEEDBACK_EQUIP_NO_ARMOR_COMBAT = 193;
|
||||
const int NWNX_FEEDBACK_EQUIP_RANGER_ABILITIES = 200;
|
||||
const int NWNX_FEEDBACK_EQUIP_ALIGNMENT = 207;
|
||||
const int NWNX_FEEDBACK_EQUIP_CLASS = 208;
|
||||
const int NWNX_FEEDBACK_EQUIP_RACE = 209;
|
||||
const int NWNX_FEEDBACK_UNEQUIP_NO_ARMOR_COMBAT = 194;
|
||||
|
||||
/// Action Feedback Messages
|
||||
const int NWNX_FEEDBACK_OBJECT_LOCKED = 13;
|
||||
const int NWNX_FEEDBACK_OBJECT_NOT_LOCKED = 14;
|
||||
const int NWNX_FEEDBACK_OBJECT_SPECIAL_KEY = 15;
|
||||
const int NWNX_FEEDBACK_OBJECT_USED_KEY = 16;
|
||||
const int NWNX_FEEDBACK_REST_EXCITED_CANT_REST = 17;
|
||||
const int NWNX_FEEDBACK_REST_BEGINNING_REST = 18;
|
||||
const int NWNX_FEEDBACK_REST_FINISHED_REST = 19;
|
||||
const int NWNX_FEEDBACK_REST_CANCEL_REST = 20;
|
||||
const int NWNX_FEEDBACK_REST_NOT_ALLOWED_IN_AREA = 54;
|
||||
const int NWNX_FEEDBACK_REST_NOT_ALLOWED_BY_POSSESSED_FAMILIAR = 153;
|
||||
const int NWNX_FEEDBACK_REST_NOT_ALLOWED_ENEMIES = 186;
|
||||
const int NWNX_FEEDBACK_REST_CANT_UNDER_THIS_EFFECT = 213;
|
||||
const int NWNX_FEEDBACK_CAST_LOST_TARGET = 21;
|
||||
const int NWNX_FEEDBACK_CAST_CANT_CAST = 22;
|
||||
const int NWNX_FEEDBACK_CAST_CNTRSPELL_TARGET_LOST_TARGET = 52;
|
||||
const int NWNX_FEEDBACK_CAST_ARCANE_SPELL_FAILURE = 61;
|
||||
const int NWNX_FEEDBACK_CAST_CNTRSPELL_TARGET_ARCANE_SPELL_FAILURE = 118;
|
||||
const int NWNX_FEEDBACK_CAST_ENTANGLE_CONCENTRATION_FAILURE = 65;
|
||||
const int NWNX_FEEDBACK_CAST_CNTRSPELL_TARGET_ENTANGLE_CONCENTRATION_FAILURE = 147;
|
||||
const int NWNX_FEEDBACK_CAST_SPELL_INTERRUPTED = 72;
|
||||
const int NWNX_FEEDBACK_CAST_EFFECT_SPELL_FAILURE = 236;
|
||||
const int NWNX_FEEDBACK_CAST_CANT_CAST_WHILE_POLYMORPHED = 107;
|
||||
const int NWNX_FEEDBACK_CAST_USE_HANDS = 210;
|
||||
const int NWNX_FEEDBACK_CAST_USE_MOUTH = 211;
|
||||
const int NWNX_FEEDBACK_CAST_DEFCAST_CONCENTRATION_FAILURE = 233;
|
||||
const int NWNX_FEEDBACK_CAST_DEFCAST_CONCENTRATION_SUCCESS = 240;
|
||||
const int NWNX_FEEDBACK_USEITEM_CANT_USE = 23;
|
||||
const int NWNX_FEEDBACK_CONVERSATION_TOOFAR = 58;
|
||||
const int NWNX_FEEDBACK_CONVERSATION_BUSY = 59;
|
||||
const int NWNX_FEEDBACK_CONVERSATION_IN_COMBAT = 152;
|
||||
const int NWNX_FEEDBACK_CHARACTER_INTRANSIT = 74;
|
||||
const int NWNX_FEEDBACK_CHARACTER_OUTTRANSIT = 75;
|
||||
const int NWNX_FEEDBACK_USEITEM_NOT_EQUIPPED = 244;
|
||||
const int NWNX_FEEDBACK_DROPITEM_CANT_DROP = 245;
|
||||
const int NWNX_FEEDBACK_DROPITEM_CANT_GIVE = 246;
|
||||
const int NWNX_FEEDBACK_CLIENT_SERVER_SPELL_MISMATCH = 259;
|
||||
|
||||
/// Combat feedback messages
|
||||
const int NWNX_FEEDBACK_COMBAT_RUNNING_OUT_OF_AMMO = 24;
|
||||
const int NWNX_FEEDBACK_COMBAT_OUT_OF_AMMO = 25;
|
||||
const int NWNX_FEEDBACK_COMBAT_HENCHMAN_OUT_OF_AMMO = 241;
|
||||
const int NWNX_FEEDBACK_COMBAT_DAMAGE_IMMUNITY = 62;
|
||||
const int NWNX_FEEDBACK_COMBAT_SPELL_IMMUNITY = 68;
|
||||
const int NWNX_FEEDBACK_COMBAT_DAMAGE_RESISTANCE = 63;
|
||||
const int NWNX_FEEDBACK_COMBAT_DAMAGE_RESISTANCE_REMAINING = 66;
|
||||
const int NWNX_FEEDBACK_COMBAT_DAMAGE_REDUCTION = 64;
|
||||
const int NWNX_FEEDBACK_COMBAT_DAMAGE_REDUCTION_REMAINING = 67;
|
||||
const int NWNX_FEEDBACK_COMBAT_SPELL_LEVEL_ABSORPTION = 69;
|
||||
const int NWNX_FEEDBACK_COMBAT_SPELL_LEVEL_ABSORPTION_REMAINING = 70;
|
||||
const int NWNX_FEEDBACK_COMBAT_WEAPON_NOT_EFFECTIVE = 117;
|
||||
const int NWNX_FEEDBACK_COMBAT_EPIC_DODGE_ATTACK_EVADED = 234;
|
||||
const int NWNX_FEEDBACK_COMBAT_MASSIVE_DAMAGE = 235;
|
||||
const int NWNX_FEEDBACK_COMBAT_SAVED_VS_MASSIVE_DAMAGE = 254;
|
||||
const int NWNX_FEEDBACK_COMBAT_SAVED_VS_DEVASTATING_CRITICAL = 257;
|
||||
|
||||
/// Feat Feedback Messages
|
||||
const int NWNX_FEEDBACK_FEAT_SAP_VALID_TARGETS = 26;
|
||||
const int NWNX_FEEDBACK_FEAT_KNOCKDOWN_VALID_TARGETS = 27;
|
||||
const int NWNX_FEEDBACK_FEAT_IMPKNOCKDOWN_VALID_TARGETS = 28;
|
||||
const int NWNX_FEEDBACK_FEAT_CALLED_SHOT_NO_LEGS = 29;
|
||||
const int NWNX_FEEDBACK_FEAT_CALLED_SHOT_NO_ARMS = 30;
|
||||
const int NWNX_FEEDBACK_FEAT_SMITE_GOOD_TARGET_NOT_GOOD = 239;
|
||||
const int NWNX_FEEDBACK_FEAT_SMITE_EVIL_TARGET_NOT_EVIL = 53;
|
||||
const int NWNX_FEEDBACK_FEAT_QUIVERING_PALM_HIGHER_LEVEL = 73;
|
||||
const int NWNX_FEEDBACK_FEAT_KEEN_SENSE_DETECT = 195;
|
||||
const int NWNX_FEEDBACK_FEAT_USE_UNARMED = 198;
|
||||
const int NWNX_FEEDBACK_FEAT_USES = 199;
|
||||
const int NWNX_FEEDBACK_FEAT_USE_WEAPON_OF_CHOICE = 243;
|
||||
|
||||
/// Party Feedback Messages
|
||||
const int NWNX_FEEDBACK_PARTY_NEW_LEADER = 31;
|
||||
const int NWNX_FEEDBACK_PARTY_MEMBER_KICKED = 32;
|
||||
const int NWNX_FEEDBACK_PARTY_KICKED_YOU = 33;
|
||||
const int NWNX_FEEDBACK_PARTY_ALREADY_CONSIDERING = 34;
|
||||
const int NWNX_FEEDBACK_PARTY_ALREADY_INVOLVED = 35;
|
||||
const int NWNX_FEEDBACK_PARTY_SENT_INVITATION = 36;
|
||||
const int NWNX_FEEDBACK_PARTY_RECEIVED_INVITATION = 37;
|
||||
const int NWNX_FEEDBACK_PARTY_JOINED = 38;
|
||||
const int NWNX_FEEDBACK_PARTY_INVITATION_IGNORED = 39;
|
||||
const int NWNX_FEEDBACK_PARTY_YOU_IGNORED_INVITATION = 40;
|
||||
const int NWNX_FEEDBACK_PARTY_INVITATION_REJECTED = 41;
|
||||
const int NWNX_FEEDBACK_PARTY_YOU_REJECTED_INVITATION = 42;
|
||||
const int NWNX_FEEDBACK_PARTY_INVITATION_EXPIRED = 43;
|
||||
const int NWNX_FEEDBACK_PARTY_LEFT_PARTY = 44;
|
||||
const int NWNX_FEEDBACK_PARTY_YOU_LEFT = 45;
|
||||
const int NWNX_FEEDBACK_PARTY_HENCHMAN_LIMIT = 49;
|
||||
const int NWNX_FEEDBACK_PARTY_CANNOT_LEAVE_THE_ONE_PARTY = 196;
|
||||
const int NWNX_FEEDBACK_PARTY_CANNOT_KICK_FROM_THE_ONE_PARTY = 197;
|
||||
const int NWNX_FEEDBACK_PARTY_YOU_INVITED_NON_SINGLETON = 202;
|
||||
const int NWNX_FEEDBACK_PVP_REACTION_DISLIKESYOU = 203;
|
||||
|
||||
/// Item Feedback Messages
|
||||
const int NWNX_FEEDBACK_ITEM_RECEIVED = 50;
|
||||
const int NWNX_FEEDBACK_ITEM_LOST = 51;
|
||||
const int NWNX_FEEDBACK_ITEM_EJECTED = 96;
|
||||
const int NWNX_FEEDBACK_ITEM_USE_UNIDENTIFIED = 97;
|
||||
const int NWNX_FEEDBACK_ITEM_GOLD_GAINED = 148;
|
||||
const int NWNX_FEEDBACK_ITEM_GOLD_LOST = 149;
|
||||
|
||||
/// Spell Scroll Learning
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_NOT_SCROLL = 78;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_CLASS = 79;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_LEVEL = 80;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_ABILITY = 81;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_OPPOSITION = 219;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_POSSESS = 220;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_KNOWN = 221;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_CANT_LEARN_DIVINE = 224;
|
||||
const int NWNX_FEEDBACK_LEARN_SCROLL_SUCCESS = 222;
|
||||
|
||||
/// Floaty text feedback
|
||||
const int NWNX_FEEDBACK_FLOATY_TEXT_STRREF = 93;
|
||||
const int NWNX_FEEDBACK_FLOATY_TEXT_STRING = 94;
|
||||
|
||||
/// Store feedback
|
||||
const int NWNX_FEEDBACK_CANNOT_SELL_PLOT_ITEM = 99;
|
||||
const int NWNX_FEEDBACK_CANNOT_SELL_CONTAINER = 100;
|
||||
const int NWNX_FEEDBACK_CANNOT_SELL_ITEM = 101;
|
||||
const int NWNX_FEEDBACK_NOT_ENOUGH_GOLD = 102;
|
||||
const int NWNX_FEEDBACK_TRANSACTION_SUCCEEDED = 103;
|
||||
const int NWNX_FEEDBACK_PRICE_TOO_HIGH = 248;
|
||||
const int NWNX_FEEDBACK_STORE_NOT_ENOUGH_GOLD = 249;
|
||||
const int NWNX_FEEDBACK_CANNOT_SELL_STOLEN_ITEM = 250;
|
||||
const int NWNX_FEEDBACK_CANNOT_SELL_RESTRICTED_ITEM = 251;
|
||||
|
||||
/// Portal control feedback
|
||||
const int NWNX_FEEDBACK_PORTAL_TIMEDOUT = 104;
|
||||
const int NWNX_FEEDBACK_PORTAL_INVALID = 105;
|
||||
|
||||
/// Chat feedback
|
||||
const int NWNX_FEEDBACK_CHAT_TELL_PLAYER_NOT_FOUND = 106;
|
||||
|
||||
/// Alignment Feedback
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_SHIFT = 108;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_PARTY_SHIFT = 111;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_CHANGE = 109;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_RESTRICTED_BY_CLASS_LOST = 110;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_RESTRICTED_BY_CLASS_GAIN = 115;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_RESTRICTED_WARNING_LOSS = 116;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_RESTRICTED_WARNING_GAIN = 112;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_EPITOME_GAINED = 113;
|
||||
const int NWNX_FEEDBACK_ALIGNMENT_EPITOME_LOST = 114;
|
||||
|
||||
/// Immunity Feedback
|
||||
const int NWNX_FEEDBACK_IMMUNITY_DISEASE = 125;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_CRITICAL_HIT = 126;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_DEATH_MAGIC = 127;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_FEAR = 128;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_KNOCKDOWN = 129;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_PARALYSIS = 130;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_NEGATIVE_LEVEL = 131;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_MIND_SPELLS = 132;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_POISON = 133;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_SNEAK_ATTACK = 134;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_SLEEP = 135;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_DAZE = 136;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_CONFUSION = 137;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_STUN = 138;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_BLINDNESS = 139;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_DEAFNESS = 140;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_CURSE = 141;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_CHARM = 142;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_DOMINATE = 143;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_ENTANGLE = 144;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_SILENCE = 145;
|
||||
const int NWNX_FEEDBACK_IMMUNITY_SLOW = 146;
|
||||
|
||||
/// Associates
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_SUMMONED = 154;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_UNSUMMONING = 155;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_UNSUMMONING_BECAUSE_REST = 156;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_UNSUMMONING_BECAUSE_DIED = 157;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_DOMINATED = 158;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_DOMINATION_ENDED = 159;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_RECOVER_TRAP = 170;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_BARTER = 171;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_EQUIP = 172;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_REPOSITORY_MOVE = 173;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_PICK_UP = 174;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_DROP = 175;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_UNEQUIP = 176;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_REST = 177;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_DIALOGUE = 178;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_GIVE_ITEM = 179;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_TAKE_ITEM = 180;
|
||||
const int NWNX_FEEDBACK_ASSOCIATE_POSSESSED_CANNOT_USE_CONTAINER = 181;
|
||||
|
||||
/// Miscellaneous Feedback
|
||||
const int NWNX_FEEDBACK_SCRIPT_ERROR = 160;
|
||||
const int NWNX_FEEDBACK_ACTION_LIST_OVERFLOW = 161;
|
||||
const int NWNX_FEEDBACK_EFFECT_LIST_OVERFLOW = 162;
|
||||
const int NWNX_FEEDBACK_AI_UPDATE_TIME_OVERFLOW = 163;
|
||||
const int NWNX_FEEDBACK_ACTION_LIST_WIPE_OVERFLOW = 164;
|
||||
const int NWNX_FEEDBACK_EFFECT_LIST_WIPE_OVERFLOW = 165;
|
||||
const int NWNX_FEEDBACK_SEND_MESSAGE_TO_PC = 204;
|
||||
const int NWNX_FEEDBACK_SEND_MESSAGE_TO_PC_STRREF = 242;
|
||||
|
||||
/// Misc GUI feedback
|
||||
const int NWNX_FEEDBACK_GUI_ONLY_PARTY_LEADER_MAY_CLICK = 201;
|
||||
const int NWNX_FEEDBACK_PAUSED = 205;
|
||||
const int NWNX_FEEDBACK_UNPAUSED = 206;
|
||||
const int NWNX_FEEDBACK_REST_YOU_MAY_NOT_AT_THIS_TIME = 214;
|
||||
const int NWNX_FEEDBACK_GUI_CHAR_EXPORT_REQUEST_SENT = 215;
|
||||
const int NWNX_FEEDBACK_GUI_CHAR_EXPORTED_SUCCESSFULLY = 216;
|
||||
const int NWNX_FEEDBACK_GUI_ERROR_CHAR_NOT_EXPORTED = 217;
|
||||
const int NWNX_FEEDBACK_CAMERA_BG = 255;
|
||||
const int NWNX_FEEDBACK_CAMERA_EQ = 256;
|
||||
const int NWNX_FEEDBACK_CAMERA_CHASECAM = 258;
|
||||
|
||||
const int NWNX_FEEDBACK_SAVING = 225;
|
||||
const int NWNX_FEEDBACK_SAVE_COMPLETE = 226;
|
||||
*/
|
||||
/// @}
|
||||
|
||||
/// @brief Gets if feedback message is hidden.
|
||||
/// @param nMessage The message identifier from @ref feedback_msgs "Feedback Messages".
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @return TRUE if the message is hidden.
|
||||
int NWNX_Feedback_GetFeedbackMessageHidden(int nMessage, object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Sets if feedback message is hidden.
|
||||
/// @param nMessage The message identifier.
|
||||
/// @param isHidden TRUE/FALSE
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @note Personal state overrides the global state which means if a global state is set
|
||||
/// to TRUE but the personal state is set to FALSE, the message will be shown to the PC.
|
||||
void NWNX_Feedback_SetFeedbackMessageHidden(int nMessage, int isHidden, object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Gets if combat log message is hidden.
|
||||
/// @param nMessage The message identifier from @ref combat_log_msgs "Combat Log Messages".
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @return TRUE if the message is hidden.
|
||||
int NWNX_Feedback_GetCombatLogMessageHidden(int nMessage, object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Sets if combat log message is hidden.
|
||||
/// @param nMessage The message identifier.
|
||||
/// @param isHidden TRUE/FALSE
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @note Personal state overrides the global state which means if a global state is set
|
||||
/// to TRUE but the personal state is set to FALSE, the message will be shown to the PC.
|
||||
void NWNX_Feedback_SetCombatLogMessageHidden(int nMessage, int isHidden, object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Gets if the journal update message is hidden.
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @return TRUE if the message is hidden.
|
||||
int NWNX_Feedback_GetJournalUpdatedMessageHidden(object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Sets if journal update message is hidden.
|
||||
/// @param isHidden TRUE/FALSE
|
||||
/// @param oPC The PC or OBJECT_INVALID for a global setting.
|
||||
/// @note Personal state overrides the global state which means if a global state is set
|
||||
/// to TRUE but the personal state is set to FALSE, the message will be shown to the PC.
|
||||
void NWNX_Feedback_SetJournalUpdatedMessageHidden(int isHidden, object oPC = OBJECT_INVALID);
|
||||
|
||||
/// @brief Set whether to use a blacklist or whitelist mode for feedback messages
|
||||
/// @param bWhitelist TRUE for all messages to be hidden by default, default FALSE.
|
||||
void NWNX_Feedback_SetFeedbackMessageMode(int bWhitelist);
|
||||
|
||||
|
||||
/// @brief Set whether to use a blacklist or whitelist mode for combat log messages
|
||||
/// @param bWhitelist TRUE for all messages to be hidden by default, default FALSE.
|
||||
/// @note If using Whitelist, be sure to whitelist NWNX_FEEDBACK_COMBATLOG_FEEDBACK for feedback messages to work.
|
||||
void NWNX_Feedback_SetCombatLogMessageMode(int bWhitelist);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Feedback_GetFeedbackMessageHidden(int nMessage, object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "GetMessageHidden";
|
||||
int nMessageType = 0;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Feedback_SetFeedbackMessageHidden(int nMessage, int isHidden, object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetMessageHidden";
|
||||
int nMessageType = 0;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, isHidden);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Feedback_GetCombatLogMessageHidden(int nMessage, object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "GetMessageHidden";
|
||||
int nMessageType = 1;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Feedback_SetCombatLogMessageHidden(int nMessage, int isHidden, object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetMessageHidden";
|
||||
int nMessageType = 1;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, isHidden);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Feedback_GetJournalUpdatedMessageHidden(object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "GetMessageHidden";
|
||||
int nMessageType = 2;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, 0);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Feedback_SetJournalUpdatedMessageHidden(int isHidden, object oPC = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetMessageHidden";
|
||||
int nMessageType = 2;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, isHidden);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, 0);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_PushArgumentObject(NWNX_Feedback, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Feedback_SetFeedbackMessageMode(int bWhitelist)
|
||||
{
|
||||
string sFunc = "SetFeedbackMode";
|
||||
int nMessageType = 0;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, bWhitelist);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Feedback_SetCombatLogMessageMode(int bWhitelist)
|
||||
{
|
||||
string sFunc = "SetFeedbackMode";
|
||||
int nMessageType = 1;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, bWhitelist);
|
||||
NWNX_PushArgumentInt(NWNX_Feedback, sFunc, nMessageType);
|
||||
NWNX_CallFunction(NWNX_Feedback, sFunc);
|
||||
}
|
207
_module/nss/nwnx_item.nss
Normal file
207
_module/nss/nwnx_item.nss
Normal file
@ -0,0 +1,207 @@
|
||||
/// @addtogroup item Item
|
||||
/// @brief Functions exposing additional item properties.
|
||||
/// @{
|
||||
/// @file nwnx_item.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Item = "NWNX_Item"; ///< @private
|
||||
|
||||
/// @brief Set an item's weight.
|
||||
/// @note Will not persist through saving.
|
||||
/// @param oItem The item object.
|
||||
/// @param weight The weight, note this is in tenths of pounds.
|
||||
void NWNX_Item_SetWeight(object oItem, int weight);
|
||||
|
||||
/// @brief Set an item's base value in gold pieces.
|
||||
/// @remark Total cost = base_value + additional_value.
|
||||
/// @remark Equivalent to SetGoldPieceValue NWNX2 function.
|
||||
/// @note Will not persist through saving.
|
||||
/// @param oItem The item object.
|
||||
/// @param gold The base gold value.
|
||||
void NWNX_Item_SetBaseGoldPieceValue(object oItem, int gold);
|
||||
|
||||
/// @brief Set an item's additional value in gold pieces.
|
||||
/// @remark Total cost = base_value + additional_value.
|
||||
/// @note Will persist through saving.
|
||||
/// @param oItem The item object.
|
||||
/// @param gold The additional gold value.
|
||||
void NWNX_Item_SetAddGoldPieceValue(object oItem, int gold);
|
||||
|
||||
/// @brief Get an item's base value in gold pieces.
|
||||
/// @param oItem The item object.
|
||||
/// @return The base gold piece value for the item.
|
||||
int NWNX_Item_GetBaseGoldPieceValue(object oItem);
|
||||
|
||||
/// @brief Get an item's additional value in gold pieces.
|
||||
/// @param oItem The item object.
|
||||
/// @return The additional gold piece value for the item.
|
||||
int NWNX_Item_GetAddGoldPieceValue(object oItem);
|
||||
|
||||
/// @brief Set an item's base item type.
|
||||
/// @warning This will not be visible until the item is refreshed (e.g. drop and take the item,
|
||||
/// or logging out and back in).
|
||||
/// @param oItem The item object.
|
||||
/// @param nBaseItem The new base item.
|
||||
void NWNX_Item_SetBaseItemType(object oItem, int nBaseItem);
|
||||
|
||||
/// @brief Make a single change to the appearance of an item.
|
||||
/// @warning This will not be visible to PCs until the item is refreshed for them (e.g. by logging out and back in).
|
||||
///
|
||||
/// Helmet models and simple items ignore nIndex.
|
||||
/// ```
|
||||
/// nType nIndex nValue
|
||||
/// ITEM_APPR_TYPE_SIMPLE_MODEL [Ignored] Model #
|
||||
/// ITEM_APPR_TYPE_WEAPON_COLOR ITEM_APPR_WEAPON_COLOR_* 0-255
|
||||
/// ITEM_APPR_TYPE_WEAPON_MODEL ITEM_APPR_WEAPON_MODEL_* Model #
|
||||
/// ITEM_APPR_TYPE_ARMOR_MODEL ITEM_APPR_ARMOR_MODEL_* Model #
|
||||
/// ITEM_APPR_TYPE_ARMOR_COLOR ITEM_APPR_ARMOR_COLOR_* [0] 0-255 [1]
|
||||
/// ```
|
||||
///
|
||||
/// [0] Where ITEM_APPR_TYPE_ARMOR_COLOR is specified, if per-part coloring is
|
||||
/// desired, the following equation can be used for nIndex to achieve that:
|
||||
///
|
||||
/// ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_ * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_
|
||||
///
|
||||
/// For example, to change the CLOTH1 channel of the torso, nIndex would be:
|
||||
///
|
||||
/// 6 + (7 * 6) + 2 = 50
|
||||
///
|
||||
/// [1] When specifying per-part coloring, the value 255 corresponds with the logical
|
||||
/// function 'clear colour override', which clears the per-part override for that part.
|
||||
void NWNX_Item_SetItemAppearance(object oItem, int nType, int nIndex, int nValue);
|
||||
|
||||
/// @brief Return a string containing the entire appearance for an item.
|
||||
/// @sa NWNX_Item_RestoreItemAppearance
|
||||
/// @param oItem The item object.
|
||||
/// @return A string representing the item's appearance.
|
||||
string NWNX_Item_GetEntireItemAppearance(object oItem);
|
||||
|
||||
/// @brief Restores an item's appearance using the value retrieved through NWNX_Item_GetEntireItemAppearance().
|
||||
/// @param oItem The item object.
|
||||
/// @param sApp A string representing the item's appearance.
|
||||
void NWNX_Item_RestoreItemAppearance(object oItem, string sApp);
|
||||
|
||||
/// @brief Get an item's base armor class
|
||||
/// @param oItem The item object.
|
||||
/// @return The base armor class.
|
||||
int NWNX_Item_GetBaseArmorClass(object oItem);
|
||||
|
||||
/// @brief Get an item's minimum level required to equip.
|
||||
/// @param oItem The item object.
|
||||
/// @return The minimum level required to equip the item.
|
||||
int NWNX_Item_GetMinEquipLevel(object oItem);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Item_SetWeight(object oItem, int w)
|
||||
{
|
||||
string sFunc = "SetWeight";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, w);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Item_SetBaseGoldPieceValue(object oItem, int g)
|
||||
{
|
||||
string sFunc = "SetBaseGoldPieceValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, g);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Item_SetAddGoldPieceValue(object oItem, int g)
|
||||
{
|
||||
string sFunc = "SetAddGoldPieceValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, g);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Item_GetBaseGoldPieceValue(object oItem)
|
||||
{
|
||||
string sFunc = "GetBaseGoldPieceValue";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Item_GetAddGoldPieceValue(object oItem)
|
||||
{
|
||||
string sFunc = "GetAddGoldPieceValue";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Item_SetBaseItemType(object oItem, int nBaseItem)
|
||||
{
|
||||
string sFunc = "SetBaseItemType";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, nBaseItem);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Item_SetItemAppearance(object oItem, int nType, int nIndex, int nValue)
|
||||
{
|
||||
string sFunc = "SetItemAppearance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, nValue);
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, nIndex);
|
||||
NWNX_PushArgumentInt(NWNX_Item, sFunc, nType);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
|
||||
}
|
||||
|
||||
string NWNX_Item_GetEntireItemAppearance(object oItem)
|
||||
{
|
||||
string sFunc = "GetEntireItemAppearance";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Item_RestoreItemAppearance(object oItem, string sApp)
|
||||
{
|
||||
string sFunc = "RestoreItemAppearance";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Item, sFunc, sApp);
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Item_GetBaseArmorClass(object oItem)
|
||||
{
|
||||
string sFunc = "GetBaseArmorClass";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Item, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Item_GetMinEquipLevel(object oItem)
|
||||
{
|
||||
string sFunc = "GetMinEquipLevel";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Item, sFunc, oItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Item, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Item, sFunc);
|
||||
}
|
110
_module/nss/nwnx_itemprop.nss
Normal file
110
_module/nss/nwnx_itemprop.nss
Normal file
@ -0,0 +1,110 @@
|
||||
/// @addtogroup itemproperty ItemProperty
|
||||
/// @brief Utility functions to manipulate the builtin itemproperty type.
|
||||
/// @{
|
||||
/// @file nwnx_itemprop.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_ItemProperty = "NWNX_ItemProperty"; ///< @private
|
||||
|
||||
/// @brief An unpacked itemproperty.
|
||||
struct NWNX_IPUnpacked
|
||||
{
|
||||
int nProperty; ///< @todo Describe
|
||||
int nSubType; ///< @todo Describe
|
||||
int nCostTable; ///< @todo Describe
|
||||
int nCostTableValue; ///< @todo Describe
|
||||
int nParam1; ///< @todo Describe
|
||||
int nParam1Value; ///< @todo Describe
|
||||
int nUsesPerDay; ///< @todo Describe
|
||||
int nChanceToAppear; ///< @todo Describe
|
||||
int bUsable; ///< @todo Describe
|
||||
int nSpellId; ///< @todo Describe
|
||||
object oCreator; ///< @todo Describe
|
||||
string sTag; ///< @todo Describe
|
||||
};
|
||||
|
||||
/// @brief Convert native itemproperty type to unpacked structure.
|
||||
/// @param ip The itemproperty to convert.
|
||||
/// @return A constructed NWNX_IPUnpacked.
|
||||
struct NWNX_IPUnpacked NWNX_ItemProperty_UnpackIP(itemproperty ip);
|
||||
|
||||
/// @brief Convert unpacked itemproperty structure to native type.
|
||||
/// @param ip The NWNX_IPUnpacked structure to convert.
|
||||
/// @return The itemproperty.
|
||||
itemproperty NWNX_ItemProperty_PackIP(struct NWNX_IPUnpacked ip);
|
||||
|
||||
/// @brief Gets the active item property at the index
|
||||
/// @param oItem - the item with the property
|
||||
/// @param nIndex - the index such as returned by some Item Events
|
||||
/// @return A constructed NWNX_IPUnpacked, except for creator, and spell id.
|
||||
struct NWNX_IPUnpacked NWNX_ItemProperty_GetActiveProperty(object oItem, int nIndex);
|
||||
|
||||
/// @}
|
||||
|
||||
struct NWNX_IPUnpacked NWNX_ItemProperty_UnpackIP(itemproperty ip)
|
||||
{
|
||||
string sFunc = "UnpackIP";
|
||||
|
||||
NWNX_PushArgumentItemProperty(NWNX_ItemProperty, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_ItemProperty, sFunc);
|
||||
|
||||
struct NWNX_IPUnpacked n;
|
||||
|
||||
n.nProperty = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nSubType = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nCostTable = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nCostTableValue = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nParam1 = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nParam1Value = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nUsesPerDay = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nChanceToAppear = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.bUsable = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nSpellId = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.oCreator = NWNX_GetReturnValueObject(NWNX_ItemProperty, sFunc);
|
||||
n.sTag = NWNX_GetReturnValueString(NWNX_ItemProperty, sFunc);
|
||||
|
||||
return n;
|
||||
}
|
||||
itemproperty NWNX_ItemProperty_PackIP(struct NWNX_IPUnpacked n)
|
||||
{
|
||||
string sFunc = "PackIP";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_ItemProperty, sFunc, n.sTag);
|
||||
NWNX_PushArgumentObject(NWNX_ItemProperty, sFunc, n.oCreator);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nSpellId);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.bUsable);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nChanceToAppear);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nUsesPerDay);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nParam1Value);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nParam1);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nCostTableValue);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nCostTable);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nSubType);
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, n.nProperty);
|
||||
|
||||
NWNX_CallFunction(NWNX_ItemProperty, sFunc);
|
||||
return NWNX_GetReturnValueItemProperty(NWNX_ItemProperty, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_IPUnpacked NWNX_ItemProperty_GetActiveProperty(object oItem, int nIndex)
|
||||
{
|
||||
string sFunc = "GetActiveProperty";
|
||||
NWNX_PushArgumentInt(NWNX_ItemProperty, sFunc, nIndex);
|
||||
NWNX_PushArgumentObject(NWNX_ItemProperty, sFunc, oItem);
|
||||
NWNX_CallFunction(NWNX_ItemProperty, sFunc);
|
||||
|
||||
struct NWNX_IPUnpacked n;
|
||||
|
||||
n.nProperty = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nSubType = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nCostTable = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nCostTableValue = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nParam1 = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nParam1Value = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nUsesPerDay = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.nChanceToAppear = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.bUsable = NWNX_GetReturnValueInt(NWNX_ItemProperty, sFunc);
|
||||
n.sTag = NWNX_GetReturnValueString(NWNX_ItemProperty, sFunc);
|
||||
|
||||
return n;
|
||||
}
|
51
_module/nss/nwnx_lua.nss
Normal file
51
_module/nss/nwnx_lua.nss
Normal file
@ -0,0 +1,51 @@
|
||||
/// @addtogroup lua LUA
|
||||
/// @brief Execute Lua code and generate events in NWScript
|
||||
/// @{
|
||||
/// @file nwnx_lua.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Lua = "NWNX_Lua"; ///< @private
|
||||
|
||||
/// @brief Evaluate LUA code.
|
||||
/// @param sCode The code to evaluate.
|
||||
void NWNX_Lua_EvalVoid(string sCode);
|
||||
|
||||
/// @brief Evaluate LUA code and return the output.
|
||||
/// @param sCode The code to evaluate.
|
||||
/// @return The result of the Lua code execution.
|
||||
string NWNX_Lua_Eval(string sCode);
|
||||
|
||||
/// @brief Generate events in NWScript to receive on the Lua side.
|
||||
///
|
||||
/// Executes all the Lua functions registered to listen to that event in order of priority.
|
||||
/// For details on events just look at the three *Event() functions in preload.lua.
|
||||
void NWNX_Lua_RunEvent(string sEvent, object oObject, string sExtra="");
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Lua_EvalVoid(string sCode)
|
||||
{
|
||||
string sFunc = "EvalVoid";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Lua, sFunc, sCode);
|
||||
NWNX_CallFunction(NWNX_Lua, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Lua_Eval(string sCode)
|
||||
{
|
||||
string sFunc = "Eval";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Lua, sFunc, sCode);
|
||||
NWNX_CallFunction(NWNX_Lua, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Lua, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Lua_RunEvent(string sEvent, object oObject, string sExtra="")
|
||||
{
|
||||
string sFunc = "RunEvent";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Lua, sFunc, sExtra);
|
||||
NWNX_PushArgumentObject(NWNX_Lua, sFunc, oObject);
|
||||
NWNX_PushArgumentString(NWNX_Lua, sFunc, sEvent);
|
||||
NWNX_CallFunction(NWNX_Lua, sFunc);
|
||||
}
|
834
_module/nss/nwnx_object.nss
Normal file
834
_module/nss/nwnx_object.nss
Normal file
@ -0,0 +1,834 @@
|
||||
/// @addtogroup object Object
|
||||
/// @brief Functions exposing additional object properties.
|
||||
/// @{
|
||||
/// @file nwnx_object.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Object = "NWNX_Object"; ///< @private
|
||||
|
||||
/// @anchor object_localvar_types
|
||||
/// @name Local Variable Types
|
||||
/// @{
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_UNKNOWN = 0;
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_INT = 1;
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_FLOAT = 2;
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_STRING = 3;
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_OBJECT = 4;
|
||||
const int NWNX_OBJECT_LOCALVAR_TYPE_LOCATION = 5;
|
||||
/// @}
|
||||
|
||||
/// @anchor object_internal_types
|
||||
/// @name Internal Object Types
|
||||
/// @{
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_INVALID = -1;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_GUI = 1;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_TILE = 2;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_MODULE = 3;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_AREA = 4;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_CREATURE = 5;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_ITEM = 6;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_TRIGGER = 7;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_PROJECTILE = 8;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_PLACEABLE = 9;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_DOOR = 10;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_AREAOFEFFECT = 11;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_WAYPOINT = 12;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_ENCOUNTER = 13;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_STORE = 14;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_PORTAL = 15;
|
||||
const int NWNX_OBJECT_TYPE_INTERNAL_SOUND = 16;
|
||||
/// @}
|
||||
|
||||
/// A local variable structure.
|
||||
struct NWNX_Object_LocalVariable
|
||||
{
|
||||
int type; ///< Int, String, Float, Object
|
||||
string key; ///< Name of the variable
|
||||
};
|
||||
|
||||
/// @brief Gets the count of all local variables.
|
||||
/// @param obj The object.
|
||||
/// @return The count.
|
||||
int NWNX_Object_GetLocalVariableCount(object obj);
|
||||
|
||||
/// @brief Gets the local variable at the provided index of the provided object.
|
||||
/// @param obj The object.
|
||||
/// @param index The index.
|
||||
/// @note Index bounds: 0 >= index < NWNX_Object_GetLocalVariableCount().
|
||||
/// @note As of build 8193.14 local variables no longer have strict ordering.
|
||||
/// this means that any change to the variables can result in drastically
|
||||
/// different order when iterating.
|
||||
/// @note As of build 8193.14, this function takes O(n) time, where n is the number
|
||||
/// of locals on the object. Individual variable access with GetLocalXxx()
|
||||
/// is now O(1) though.
|
||||
/// @note As of build 8193.14, this function may return variable type UNKNOWN
|
||||
/// if the value is the default (0/0.0/""/OBJECT_INVALID) for the type.
|
||||
/// @return An NWNX_Object_LocalVariable struct.
|
||||
struct NWNX_Object_LocalVariable NWNX_Object_GetLocalVariable(object obj, int index);
|
||||
|
||||
/// @brief Convert an object id to the actual object.
|
||||
/// @param id The object id.
|
||||
/// @return An object from the provided object ID.
|
||||
/// @remark This is the counterpart to ObjectToString.
|
||||
/// @deprecated Use the basegame StringToObject() function. This will be removed in a future NWNX release.
|
||||
object NWNX_Object_StringToObject(string id);
|
||||
|
||||
/// @brief Set oObject's position.
|
||||
/// @param oObject The object.
|
||||
/// @param vPosition A vector position.
|
||||
/// @param bUpdateSubareas If TRUE and oObject is a creature, any triggers/traps at vPosition will fire their events.
|
||||
void NWNX_Object_SetPosition(object oObject, vector vPosition, int bUpdateSubareas = TRUE);
|
||||
|
||||
/// @brief Get an object's hit points.
|
||||
/// @note Unlike the native GetCurrentHitpoints function, this excludes temporary hitpoints.
|
||||
/// @param obj The object.
|
||||
/// @return The hit points.
|
||||
int NWNX_Object_GetCurrentHitPoints(object obj);
|
||||
|
||||
/// @brief Set an object's hit points.
|
||||
/// @param obj The object.
|
||||
/// @param hp The hit points.
|
||||
void NWNX_Object_SetCurrentHitPoints(object obj, int hp);
|
||||
|
||||
/// @brief Adjust an object's maximum hit points
|
||||
/// @note Will not work on PCs.
|
||||
/// @param obj The object.
|
||||
/// @param hp The maximum hit points.
|
||||
void NWNX_Object_SetMaxHitPoints(object obj, int hp);
|
||||
|
||||
/// @brief Serialize a full object to a base64 string
|
||||
/// @param obj The object.
|
||||
/// @return A base64 string representation of the object.
|
||||
/// @note includes locals, inventory, etc
|
||||
string NWNX_Object_Serialize(object obj);
|
||||
|
||||
/// @brief Deserialize the object.
|
||||
/// @note The object will be created outside of the world and needs to be manually positioned at a location/inventory.
|
||||
/// @param serialized The base64 string.
|
||||
/// @return The object.
|
||||
object NWNX_Object_Deserialize(string serialized);
|
||||
|
||||
/// @brief Gets the dialog resref.
|
||||
/// @param obj The object.
|
||||
/// @return The name of the dialog resref.
|
||||
string NWNX_Object_GetDialogResref(object obj);
|
||||
|
||||
/// @brief Sets the dialog resref.
|
||||
/// @param obj The object.
|
||||
/// @param dialog The name of the dialog resref.
|
||||
void NWNX_Object_SetDialogResref(object obj, string dialog);
|
||||
|
||||
/// @brief Set oPlaceable's appearance.
|
||||
/// @note Will not update for PCs until they re-enter the area.
|
||||
/// @param oPlaceable The placeable.
|
||||
/// @param nAppearance The appearance id.
|
||||
void NWNX_Object_SetAppearance(object oPlaceable, int nAppearance);
|
||||
|
||||
/// @brief Get oPlaceable's appearance.
|
||||
/// @param oPlaceable The placeable.
|
||||
/// @return The appearance id.
|
||||
int NWNX_Object_GetAppearance(object oPlaceable);
|
||||
|
||||
/// @brief Determine if an object has a visual effect.
|
||||
/// @param obj The object.
|
||||
/// @param nVFX The visual effect id.
|
||||
/// @return TRUE if the object has the visual effect applied to it
|
||||
int NWNX_Object_GetHasVisualEffect(object obj, int nVFX);
|
||||
|
||||
/// @brief Check if an item can fit in an object's inventory.
|
||||
/// @param obj The object with an inventory.
|
||||
/// @param baseitem The base item id to check for a fit.
|
||||
/// @return TRUE if an item of base item type can fit in object's inventory
|
||||
int NWNX_Object_CheckFit(object obj, int baseitem);
|
||||
|
||||
/// @brief Get an object's damage immunity.
|
||||
/// @param obj The object.
|
||||
/// @param damageType The damage type to check for immunity. Use DAMAGE_TYPE_* constants.
|
||||
/// @return Damage immunity as a percentage.
|
||||
int NWNX_Object_GetDamageImmunity(object obj, int damageType);
|
||||
|
||||
/// @brief Add or move an object.
|
||||
/// @param obj The object.
|
||||
/// @param area The area.
|
||||
/// @param pos The position.
|
||||
void NWNX_Object_AddToArea(object obj, object area, vector pos);
|
||||
|
||||
/// @brief Get placeable's static setting
|
||||
/// @param obj The object.
|
||||
/// @return TRUE if placeable is static.
|
||||
int NWNX_Object_GetPlaceableIsStatic(object obj);
|
||||
|
||||
/// @brief Set placeable as static or not.
|
||||
/// @note Will not update for PCs until they re-enter the area.
|
||||
/// @param obj The object.
|
||||
/// @param isStatic TRUE/FALSE
|
||||
void NWNX_Object_SetPlaceableIsStatic(object obj, int isStatic);
|
||||
|
||||
/// @brief Gets if a door/placeable auto-removes the key after use.
|
||||
/// @param obj The object.
|
||||
/// @return TRUE/FALSE or -1 on error.
|
||||
int NWNX_Object_GetAutoRemoveKey(object obj);
|
||||
|
||||
/// @brief Sets if a door/placeable auto-removes the key after use.
|
||||
/// @param obj The object.
|
||||
/// @param bRemoveKey TRUE/FALSE
|
||||
void NWNX_Object_SetAutoRemoveKey(object obj, int bRemoveKey);
|
||||
|
||||
/// @brief Get the geometry of a trigger
|
||||
/// @param oTrigger The trigger object.
|
||||
/// @return A string of vertex positions.
|
||||
string NWNX_Object_GetTriggerGeometry(object oTrigger);
|
||||
|
||||
/// @brief Set the geometry of a trigger with a list of vertex positions
|
||||
/// @param oTrigger The trigger object.
|
||||
/// @param sGeometry Needs to be in the following format -> {x.x, y.y, z.z} or {x.x, y.y}
|
||||
/// Example Geometry: "{1.0, 1.0, 0.0}{4.0, 1.0, 0.0}{4.0, 4.0, 0.0}{1.0, 4.0, 0.0}"
|
||||
///
|
||||
/// @remark The Z position is optional and will be calculated dynamically based
|
||||
/// on terrain height if it's not provided.
|
||||
///
|
||||
/// @remark The minimum number of vertices is 3.
|
||||
void NWNX_Object_SetTriggerGeometry(object oTrigger, string sGeometry);
|
||||
|
||||
/// @brief Add an effect to an object that displays an icon and has no other effect.
|
||||
/// @remark See effecticons.2da for a list of possible effect icons.
|
||||
/// @param obj The object to apply the effect.
|
||||
/// @param nIcon The icon id.
|
||||
/// @param fDuration If specified the effect will be temporary and last this length in seconds, otherwise the effect
|
||||
/// will be permanent.
|
||||
void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0);
|
||||
|
||||
/// @brief Remove an icon effect from an object that was added by the NWNX_Object_AddIconEffect() function.
|
||||
/// @param obj The object.
|
||||
/// @param nIcon The icon id.
|
||||
void NWNX_Object_RemoveIconEffect(object obj, int nIcon);
|
||||
|
||||
/// @brief Export an object to the UserDirectory/nwnx folder.
|
||||
/// @param sFileName The filename without extension, 16 or less characters.
|
||||
/// @param oObject The object to export. Valid object types: Creature, Item, Placeable, Waypoint, Door, Store, Trigger
|
||||
void NWNX_Object_Export(string sFileName, object oObject);
|
||||
|
||||
/// @brief Get oObject's integer variable sVarName.
|
||||
/// @param oObject The object to get the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
/// @return The value or 0 on error.
|
||||
int NWNX_Object_GetInt(object oObject, string sVarName);
|
||||
|
||||
/// @brief Set oObject's integer variable sVarName to nValue.
|
||||
/// @param oObject The object to set the variable on.
|
||||
/// @param sVarName The variable name.
|
||||
/// @param nValue The integer value to to set
|
||||
/// @param bPersist When TRUE, the value is persisted to GFF, this means that it'll be saved in the .bic file of a player's character or when an object is serialized.
|
||||
void NWNX_Object_SetInt(object oObject, string sVarName, int nValue, int bPersist);
|
||||
|
||||
/// @brief Delete oObject's integer variable sVarName.
|
||||
/// @param oObject The object to delete the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
void NWNX_Object_DeleteInt(object oObject, string sVarName);
|
||||
|
||||
/// @brief Get oObject's string variable sVarName.
|
||||
/// @param oObject The object to get the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
/// @return The value or "" on error.
|
||||
string NWNX_Object_GetString(object oObject, string sVarName);
|
||||
|
||||
/// @brief Set oObject's string variable sVarName to sValue.
|
||||
/// @param oObject The object to set the variable on.
|
||||
/// @param sVarName The variable name.
|
||||
/// @param sValue The string value to to set
|
||||
/// @param bPersist When TRUE, the value is persisted to GFF, this means that it'll be saved in the .bic file of a player's character or when an object is serialized.
|
||||
void NWNX_Object_SetString(object oObject, string sVarName, string sValue, int bPersist);
|
||||
|
||||
/// @brief Delete oObject's string variable sVarName.
|
||||
/// @param oObject The object to delete the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
void NWNX_Object_DeleteString(object oObject, string sVarName);
|
||||
|
||||
/// @brief Get oObject's float variable sVarName.
|
||||
/// @param oObject The object to get the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
/// @return The value or 0.0f on error.
|
||||
float NWNX_Object_GetFloat(object oObject, string sVarName);
|
||||
|
||||
/// @brief Set oObject's float variable sVarName to fValue.
|
||||
/// @param oObject The object to set the variable on.
|
||||
/// @param sVarName The variable name.
|
||||
/// @param fValue The float value to to set
|
||||
/// @param bPersist When TRUE, the value is persisted to GFF, this means that it'll be saved in the .bic file of a player's character or when an object is serialized.
|
||||
void NWNX_Object_SetFloat(object oObject, string sVarName, float fValue, int bPersist);
|
||||
|
||||
/// @brief Delete oObject's persistent float variable sVarName.
|
||||
/// @param oObject The object to delete the variable from.
|
||||
/// @param sVarName The variable name.
|
||||
void NWNX_Object_DeleteFloat(object oObject, string sVarName);
|
||||
|
||||
/// @brief Delete any variables that match sRegex
|
||||
/// @note It will only remove variables set by NWNX_Object_Set{Int|String|Float}()
|
||||
/// @param oObject The object to delete the variables from.
|
||||
/// @param sRegex The regular expression, for example .*Test.* removes every variable that has Test in it.
|
||||
void NWNX_Object_DeleteVarRegex(object oObject, string sRegex);
|
||||
|
||||
/// @brief Get if vPosition is inside oTrigger's geometry.
|
||||
/// @note The Z value of vPosition is ignored.
|
||||
/// @param oTrigger The trigger.
|
||||
/// @param vPosition The position.
|
||||
/// @return TRUE if vPosition is inside oTrigger's geometry.
|
||||
int NWNX_Object_GetPositionIsInTrigger(object oTrigger, vector vPosition);
|
||||
|
||||
/// @brief Gets the given object's internal type (NWNX_OBJECT_TYPE_INTERNAL_*)
|
||||
/// @param oObject The object.
|
||||
/// @return The object's type (NWNX_OBJECT_TYPE_INTERNAL_*)
|
||||
int NWNX_Object_GetInternalObjectType(object oObject);
|
||||
|
||||
/// @brief Have oObject acquire oItem.
|
||||
/// @note Useful to give deserialized items to an object, may not work if oItem is already possessed by an object.
|
||||
/// @param oObject The object receiving oItem, must be a Creature, Placeable, Store or Item
|
||||
/// @param oItem The item.
|
||||
/// @return TRUE on success.
|
||||
int NWNX_Object_AcquireItem(object oObject, object oItem);
|
||||
|
||||
/// @brief Cause oObject to face fDirection.
|
||||
/// @note This function is almost identical to SetFacing(), the only difference being that it allows you to specify
|
||||
/// the target object without the use of AssignCommand(). This is useful when you want to change the facing of an object
|
||||
/// in an ExecuteScriptChunk() call where AssignCommand() does not work.
|
||||
/// @param oObject The object to change its facing of
|
||||
/// @param fDirection The direction the object should face
|
||||
void NWNX_Object_SetFacing(object oObject, float fDirection);
|
||||
|
||||
/// @brief Clear all spell effects oObject has applied to others.
|
||||
/// @param oObject The object that applied the spell effects.
|
||||
void NWNX_Object_ClearSpellEffectsOnOthers(object oObject);
|
||||
|
||||
/// @brief Peek at the UUID of oObject without assigning one if it does not have one
|
||||
/// @param oObject The object
|
||||
/// @return The UUID or "" when the object does not have or cannot have an UUID
|
||||
string NWNX_Object_PeekUUID(object oObject);
|
||||
|
||||
/// @brief Get if oDoor has a visible model.
|
||||
/// @param oDoor The door
|
||||
/// @return TRUE if oDoor has a visible model
|
||||
int NWNX_Object_GetDoorHasVisibleModel(object oDoor);
|
||||
|
||||
/// @brief Get if oObject is destroyable.
|
||||
/// @param oObject The object
|
||||
/// @return TRUE if oObject is destroyable.
|
||||
int NWNX_Object_GetIsDestroyable(object oObject);
|
||||
|
||||
/// @brief Checks for specific spell immunity. Should only be called in spellscripts
|
||||
/// @param oDefender The object defending against the spell.
|
||||
/// @param oCaster The object casting the spell.
|
||||
/// @return -1 if defender has no immunity, 2 if the defender is immune
|
||||
int NWNX_Object_DoSpellImmunity(object oDefender, object oCaster);
|
||||
|
||||
/// @brief Checks for spell school/level immunities and mantles. Should only be called in spellscripts
|
||||
/// @param oDefender The object defending against the spell.
|
||||
/// @param oCaster The object casting the spell.
|
||||
/// @return -1 defender no immunity. 2 if immune. 3 if immune, but the immunity has a limit (example: mantles)
|
||||
int NWNX_Object_DoSpellLevelAbsorption(object oDefender, object oCaster);
|
||||
|
||||
/// @brief Sets if a placeable has an inventory.
|
||||
/// @param obj The placeable.
|
||||
/// @param bHasInventory TRUE/FALSE
|
||||
/// @note Only works on placeables.
|
||||
void NWNX_Object_SetHasInventory(object obj, int bHasInventory);
|
||||
|
||||
/// @brief Get the current animation of oObject
|
||||
/// @note The returned value will be an engine animation constant, not a NWScript ANIMATION_ constant.
|
||||
/// See: https://github.com/nwnxee/unified/blob/master/NWNXLib/API/Constants/Animation.hpp
|
||||
/// @param oObject The object
|
||||
/// @return -1 on error or the engine animation constant
|
||||
int NWNX_Object_GetCurrentAnimation(object oObject);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Object_GetLocalVariableCount(object obj)
|
||||
{
|
||||
string sFunc = "GetLocalVariableCount";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Object_LocalVariable NWNX_Object_GetLocalVariable(object obj, int index)
|
||||
{
|
||||
string sFunc = "GetLocalVariable";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, index);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
struct NWNX_Object_LocalVariable var;
|
||||
var.key = NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
var.type = NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
return var;
|
||||
}
|
||||
|
||||
object NWNX_Object_StringToObject(string id)
|
||||
{
|
||||
WriteTimestampedLogEntry("WARNING: NWNX_Object_StringToObject() is deprecated, please use the basegame's StringToObject()");
|
||||
|
||||
return StringToObject(id);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetPosition(object oObject, vector vPosition, int bUpdateSubareas = TRUE)
|
||||
{
|
||||
string sFunc = "SetPosition";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bUpdateSubareas);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.x);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.z);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetCurrentHitPoints(object creature)
|
||||
{
|
||||
string sFunc = "GetCurrentHitPoints";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, creature);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetCurrentHitPoints(object creature, int hp)
|
||||
{
|
||||
string sFunc = "SetCurrentHitPoints";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, hp);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, creature);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetMaxHitPoints(object creature, int hp)
|
||||
{
|
||||
string sFunc = "SetMaxHitPoints";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, hp);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, creature);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Object_Serialize(object obj)
|
||||
{
|
||||
string sFunc = "Serialize";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Object_Deserialize(string serialized)
|
||||
{
|
||||
string sFunc = "Deserialize";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, serialized);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
return NWNX_GetReturnValueObject(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Object_GetDialogResref(object obj)
|
||||
{
|
||||
string sFunc = "GetDialogResref";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetDialogResref(object obj, string dialog)
|
||||
{
|
||||
string sFunc = "SetDialogResref";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, dialog);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetAppearance(object oPlaceable, int nAppearance)
|
||||
{
|
||||
string sFunc = "SetAppearance";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, nAppearance);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oPlaceable);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetAppearance(object oPlaceable)
|
||||
{
|
||||
string sFunc = "GetAppearance";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oPlaceable);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetHasVisualEffect(object obj, int nVFX)
|
||||
{
|
||||
string sFunc = "GetHasVisualEffect";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, nVFX);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_CheckFit(object obj, int baseitem)
|
||||
{
|
||||
string sFunc = "CheckFit";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, baseitem);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetDamageImmunity(object obj, int damageType)
|
||||
{
|
||||
string sFunc = "GetDamageImmunity";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, damageType);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_AddToArea(object obj, object area, vector pos)
|
||||
{
|
||||
string sFunc = "AddToArea";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, pos.z);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, pos.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, pos.x);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, area);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetPlaceableIsStatic(object obj)
|
||||
{
|
||||
string sFunc = "GetPlaceableIsStatic";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetPlaceableIsStatic(object obj, int isStatic)
|
||||
{
|
||||
string sFunc = "SetPlaceableIsStatic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, isStatic);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetAutoRemoveKey(object obj)
|
||||
{
|
||||
string sFunc = "GetAutoRemoveKey";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetAutoRemoveKey(object obj, int bRemoveKey)
|
||||
{
|
||||
string sFunc = "SetAutoRemoveKey";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bRemoveKey);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Object_GetTriggerGeometry(object oTrigger)
|
||||
{
|
||||
string sFunc = "GetTriggerGeometry";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oTrigger);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetTriggerGeometry(object oTrigger, string sGeometry)
|
||||
{
|
||||
string sFunc = "SetTriggerGeometry";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sGeometry);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oTrigger);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0)
|
||||
{
|
||||
string sFunc = "AddIconEffect";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, fDuration);
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, nIcon);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_RemoveIconEffect(object obj, int nIcon)
|
||||
{
|
||||
string sFunc = "RemoveIconEffect";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, nIcon);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_Export(string sFileName, object oObject)
|
||||
{
|
||||
string sFunc = "Export";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sFileName);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetInt(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "GetInt";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetInt(object oObject, string sVarName, int nValue, int bPersist)
|
||||
{
|
||||
string sFunc = "SetInt";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bPersist);
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, nValue);
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_DeleteInt(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "DeleteInt";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Object_GetString(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "GetString";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetString(object oObject, string sVarName, string sValue, int bPersist)
|
||||
{
|
||||
string sFunc = "SetString";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bPersist);
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sValue);
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_DeleteString(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "DeleteString";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
float NWNX_Object_GetFloat(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "GetFloat";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueFloat(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetFloat(object oObject, string sVarName, float fValue, int bPersist)
|
||||
{
|
||||
string sFunc = "SetFloat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bPersist);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, fValue);
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_DeleteFloat(object oObject, string sVarName)
|
||||
{
|
||||
string sFunc = "DeleteFloat";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sVarName);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_DeleteVarRegex(object oObject, string sRegex)
|
||||
{
|
||||
string sFunc = "DeleteVarRegex";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Object, sFunc, sRegex);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetPositionIsInTrigger(object oTrigger, vector vPosition)
|
||||
{
|
||||
string sFunc = "GetPositionIsInTrigger";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.z);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, vPosition.x);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oTrigger);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetInternalObjectType(object oObject)
|
||||
{
|
||||
string sFunc = "GetInternalObjectType";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_AcquireItem(object oObject, object oItem)
|
||||
{
|
||||
string sFunc = "AcquireItem";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oItem);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetFacing(object oObject, float fDirection)
|
||||
{
|
||||
string sFunc = "SetFacing";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Object, sFunc, fDirection);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_ClearSpellEffectsOnOthers(object oObject)
|
||||
{
|
||||
string sFunc = "ClearSpellEffectsOnOthers";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Object_PeekUUID(object oObject)
|
||||
{
|
||||
string sFunc = "PeekUUID";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetDoorHasVisibleModel(object oDoor)
|
||||
{
|
||||
string sFunc = "GetDoorHasVisibleModel";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oDoor);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetIsDestroyable(object oObject)
|
||||
{
|
||||
string sFunc = "GetIsDestroyable";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_DoSpellImmunity(object oDefender, object oCaster)
|
||||
{
|
||||
string sFunc = "DoSpellImmunity";
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oCaster);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oDefender);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object,sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_DoSpellLevelAbsorption(object oDefender, object oCaster)
|
||||
{
|
||||
string sFunc = "DoSpellLevelAbsorption";
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oCaster);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oDefender);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object,sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Object_SetHasInventory(object obj, int bHasInventory)
|
||||
{
|
||||
string sFunc = "SetHasInventory";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Object, sFunc, bHasInventory);
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, obj);
|
||||
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Object_GetCurrentAnimation(object oObject)
|
||||
{
|
||||
string sFunc = "GetCurrentAnimation";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Object, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Object, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Object, sFunc);
|
||||
}
|
963
_module/nss/nwnx_player.nss
Normal file
963
_module/nss/nwnx_player.nss
Normal file
@ -0,0 +1,963 @@
|
||||
/// @addtogroup player
|
||||
/// @brief Functions exposing additional player properties.
|
||||
/// @{
|
||||
/// @file nwnx_player.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Player = "NWNX_Player"; ///< @private
|
||||
|
||||
/// @brief A quickbar slot.
|
||||
struct NWNX_Player_QuickBarSlot
|
||||
{
|
||||
object oItem; ///< @todo Describe
|
||||
object oSecondaryItem; ///< @todo Describe
|
||||
int nObjectType; ///< @todo Describe
|
||||
int nMultiClass; ///< @todo Describe
|
||||
string sResRef; ///< @todo Describe
|
||||
string sCommandLabel; ///< @todo Describe
|
||||
string sCommandLine; ///< @todo Describe
|
||||
string sToolTip; ///< @todo Describe
|
||||
int nINTParam1; ///< @todo Describe
|
||||
int nMetaType; ///< @todo Describe
|
||||
int nDomainLevel; ///< @todo Describe
|
||||
int nAssociateType; ///< @todo Describe
|
||||
object oAssociate; ///< @todo Describe
|
||||
};
|
||||
|
||||
/// @brief A journal entry.
|
||||
struct NWNX_Player_JournalEntry
|
||||
{
|
||||
string sName;///< @todo Describe
|
||||
string sText;///< @todo Describe
|
||||
string sTag;///< @todo Describe
|
||||
int nState;///< @todo Describe
|
||||
int nPriority;///< @todo Describe
|
||||
int nQuestCompleted;///< @todo Describe
|
||||
int nQuestDisplayed;///< @todo Describe
|
||||
int nUpdated;///< @todo Describe
|
||||
int nCalendarDay;///< @todo Describe
|
||||
int nTimeOfDay;///< @todo Describe
|
||||
};
|
||||
|
||||
|
||||
/// @name Timing Bar Types
|
||||
/// @anchor timing_bar_types
|
||||
///
|
||||
/// The various types of timing bars.
|
||||
/// @{
|
||||
const int NWNX_PLAYER_TIMING_BAR_TRAP_FLAG = 1;
|
||||
const int NWNX_PLAYER_TIMING_BAR_TRAP_RECOVER = 2;
|
||||
const int NWNX_PLAYER_TIMING_BAR_TRAP_DISARM = 3;
|
||||
const int NWNX_PLAYER_TIMING_BAR_TRAP_EXAMINE = 4;
|
||||
const int NWNX_PLAYER_TIMING_BAR_TRAP_SET = 5;
|
||||
const int NWNX_PLAYER_TIMING_BAR_REST = 6;
|
||||
const int NWNX_PLAYER_TIMING_BAR_UNLOCK = 7;
|
||||
const int NWNX_PLAYER_TIMING_BAR_LOCK = 8;
|
||||
const int NWNX_PLAYER_TIMING_BAR_CUSTOM = 10;
|
||||
/// @}
|
||||
|
||||
/// @name Platform IDs
|
||||
/// @anchor platform_ids
|
||||
/// @{
|
||||
const int NWNX_PLAYER_PLATFORM_INVALID = 0;
|
||||
const int NWNX_PLAYER_PLATFORM_WINDOWS_X86 = 1;
|
||||
const int NWNX_PLAYER_PLATFORM_WINDOWS_X64 = 2;
|
||||
const int NWNX_PLAYER_PLATFORM_LINUX_X86 = 10;
|
||||
const int NWNX_PLAYER_PLATFORM_LINUX_X64 = 11;
|
||||
const int NWNX_PLAYER_PLATFORM_LINUX_ARM32 = 12;
|
||||
const int NWNX_PLAYER_PLATFORM_LINUX_ARM64 = 13;
|
||||
const int NWNX_PLAYER_PLATFORM_MAC_X86 = 20;
|
||||
const int NWNX_PLAYER_PLATFORM_MAC_X64 = 21;
|
||||
const int NWNX_PLAYER_PLATFORM_IOS = 30;
|
||||
const int NWNX_PLAYER_PLATFORM_ANDROID_ARM32 = 40;
|
||||
const int NWNX_PLAYER_PLATFORM_ANDROID_ARM64 = 41;
|
||||
const int NWNX_PLAYER_PLATFORM_ANDROID_X64 = 42;
|
||||
const int NWNX_PLAYER_PLATFORM_NINTENDO_SWITCH = 50;
|
||||
const int NWNX_PLAYER_PLATFORM_MICROSOFT_XBOXONE = 60;
|
||||
const int NWNX_PLAYER_PLATFORM_SONY_PS4 = 70;
|
||||
/// @}
|
||||
|
||||
/// @brief Force display placeable examine window for player
|
||||
/// @note If used on a placeable in a different area than the player, the portait will not be shown.
|
||||
/// @param player The player object.
|
||||
/// @param placeable The placeable object.
|
||||
void NWNX_Player_ForcePlaceableExamineWindow(object player, object placeable);
|
||||
|
||||
/// @brief Force opens the target object's inventory for the player.
|
||||
/// @note
|
||||
/// * If the placeable is in a different area than the player, the portrait will not be shown
|
||||
/// * The placeable's open/close animations will be played
|
||||
/// * Clicking the 'close' button will cause the player to walk to the placeable If the placeable is in a
|
||||
/// different area, the player will just walk to the edge of the current area and stop.
|
||||
/// This action can be cancelled manually.
|
||||
/// * Walking will close the placeable automatically.
|
||||
/// @param player The player object.
|
||||
/// @param placeable The placeable object.
|
||||
void NWNX_Player_ForcePlaceableInventoryWindow(object player, object placeable);
|
||||
|
||||
/// @brief Starts displaying a timing bar.
|
||||
/// @param player The player object.
|
||||
/// @param seconds The length of time the timing bar will complete.
|
||||
/// @param script The script to run at the bar's completion.
|
||||
/// @param type The @ref timing_bar_types "Timing Bar Type"
|
||||
/// @remark Only one timing bar can be ran at the same time.
|
||||
void NWNX_Player_StartGuiTimingBar(object player, float seconds, string script = "", int type = NWNX_PLAYER_TIMING_BAR_CUSTOM);
|
||||
|
||||
/// @brief Stop displaying a timing bar.
|
||||
/// @param player The player object.
|
||||
/// @param script The script to run when stopped.
|
||||
void NWNX_Player_StopGuiTimingBar(object player, string script = "");
|
||||
|
||||
/// @brief Sets whether the player should always walk when given movement commands.
|
||||
/// @param player The player object.
|
||||
/// @param bWalk TRUE to set the player to always walk.
|
||||
/// @remark Clicking on the ground or using WASD will trigger walking instead of running.
|
||||
void NWNX_Player_SetAlwaysWalk(object player, int bWalk=TRUE);
|
||||
|
||||
/// @brief Gets the player's quickbar slot info
|
||||
/// @param player The player object.
|
||||
/// @param slot Slot ID 0-35
|
||||
/// @return An NWNX_Player_QuickBarSlot struct.
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_GetQuickBarSlot(object player, int slot);
|
||||
|
||||
/// @brief Sets the player's quickbar slot info
|
||||
/// @param player The player object.
|
||||
/// @param slot Slot ID 0-35
|
||||
/// @param qbs An NWNX_Player_QuickBarSlot struct.
|
||||
void NWNX_Player_SetQuickBarSlot(object player, int slot, struct NWNX_Player_QuickBarSlot qbs);
|
||||
|
||||
/// @brief Get the name of the .bic file associated with the player's character.
|
||||
/// @param player The player object.
|
||||
/// @return The filename for this player's bic. (Not including the ".bic")
|
||||
string NWNX_Player_GetBicFileName(object player);
|
||||
|
||||
/// @brief Plays the VFX at the target position in current area for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param effectId The effect id.
|
||||
/// @param position The position to play the visual effect.
|
||||
void NWNX_Player_ShowVisualEffect(object player, int effectId, vector position);
|
||||
|
||||
/// @brief Changes the daytime music track for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param track The track id to play.
|
||||
void NWNX_Player_MusicBackgroundChangeDay(object player, int track);
|
||||
|
||||
/// @brief Changes the nighttime music track for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param track The track id to play.
|
||||
void NWNX_Player_MusicBackgroundChangeNight(object player, int track);
|
||||
|
||||
/// @brief Starts the background music for the given player only
|
||||
/// @param player The player object.
|
||||
void NWNX_Player_MusicBackgroundStart(object player);
|
||||
|
||||
/// @brief Stops the background music for the given player only
|
||||
/// @param player The player object.
|
||||
void NWNX_Player_MusicBackgroundStop(object player);
|
||||
|
||||
/// @brief Changes the battle music track for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param track The track id to play.
|
||||
void NWNX_Player_MusicBattleChange(object player, int track);
|
||||
|
||||
/// @brief Starts the battle music for the given player only
|
||||
/// @param player The player object.
|
||||
void NWNX_Player_MusicBattleStart(object player);
|
||||
|
||||
/// @brief Stops the battle music for the given player only
|
||||
/// @param player The player object.
|
||||
void NWNX_Player_MusicBattleStop(object player);
|
||||
|
||||
/// @brief Play a sound at the location of target for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param sound The sound resref.
|
||||
/// @param target The target object for the sound to originate. If target OBJECT_INVALID the sound
|
||||
/// will play at the location of the player.
|
||||
void NWNX_Player_PlaySound(object player, string sound, object target = OBJECT_INVALID);
|
||||
|
||||
/// @brief Toggle a placeable's usable flag for the given player only
|
||||
/// @param player The player object.
|
||||
/// @param placeable The placeable object.
|
||||
/// @param usable TRUE for usable.
|
||||
void NWNX_Player_SetPlaceableUsable(object player, object placeable, int usable);
|
||||
|
||||
/// @brief Override player's rest duration
|
||||
/// @param player The player object.
|
||||
/// @param duration The duration of rest in milliseconds, 1000 = 1 second. Minimum duration of 10ms. -1 clears the override.
|
||||
void NWNX_Player_SetRestDuration(object player, int duration);
|
||||
|
||||
/// @brief Apply visualeffect to target that only player can see
|
||||
/// @param player The player object.
|
||||
/// @param target The target object to play the effect upon.
|
||||
/// @param visualeffect The visual effect id.
|
||||
/// @note Only works with instant effects: VFX_COM_*, VFX_FNF_*, VFX_IMP_*
|
||||
void NWNX_Player_ApplyInstantVisualEffectToObject(object player, object target, int visualeffect);
|
||||
|
||||
/// @brief Refreshes the players character sheet
|
||||
/// @param player The player object.
|
||||
/// @note You may need to use DelayCommand if you're manipulating values
|
||||
/// through nwnx and forcing a UI refresh, 0.5s seemed to be fine
|
||||
void NWNX_Player_UpdateCharacterSheet(object player);
|
||||
|
||||
/// @brief Allows player to open target's inventory
|
||||
/// @param player The player object.
|
||||
/// @param target The target object, must be a creature or another player.
|
||||
/// @param open TRUE to open.
|
||||
/// @remark Only works if player and target are in the same area.
|
||||
void NWNX_Player_OpenInventory(object player, object target, int open = TRUE);
|
||||
|
||||
/// @brief Get player's area exploration state
|
||||
/// @param player The player object.
|
||||
/// @param area The area object.
|
||||
/// @return A string representation of the tiles explored for that area.
|
||||
string NWNX_Player_GetAreaExplorationState(object player, object area);
|
||||
|
||||
/// @brief Set player's area exploration state.
|
||||
/// @param player The player object.
|
||||
/// @param area The area object.
|
||||
/// @param str An encoded string obtained with NWNX_Player_GetAreaExplorationState()
|
||||
void NWNX_Player_SetAreaExplorationState(object player, object area, string str);
|
||||
|
||||
/// @brief Override player's rest animation.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param nAnimation The NWNX animation id. This does not take ANIMATION_LOOPING_* or
|
||||
/// ANIMATION_FIREFORGET_* constants. Instead use NWNX_Consts_TranslateNWScriptAnimation() to get
|
||||
/// the NWNX equivalent. -1 to clear the override.
|
||||
void NWNX_Player_SetRestAnimation(object oPlayer, int nAnimation);
|
||||
|
||||
/// @brief Override a visual transform on the given object that only player will see.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param oObject The target object. Can be any valid Creature, Placeable, Item or Door.
|
||||
/// @param nTransform One of OBJECT_VISUAL_TRANSFORM_* or -1 to remove the override.
|
||||
/// @param fValue Depends on the transformation to apply.
|
||||
void NWNX_Player_SetObjectVisualTransformOverride(object oPlayer, object oObject, int nTransform, float fValue);
|
||||
|
||||
/// @brief Apply a looping visualeffect to a target that only player can see
|
||||
/// @param player The player object.
|
||||
/// @param target The target object.
|
||||
/// @param visualeffect A VFX_DUR_*. Calling again will remove an applied effect. -1 to remove all effects
|
||||
/// @note Only really works with looping effects: VFX_DUR_*. Other types *kind* of work, they'll play when
|
||||
/// reentering the area and the object is in view or when they come back in view range.
|
||||
void NWNX_Player_ApplyLoopingVisualEffectToObject(object player, object target, int visualeffect);
|
||||
|
||||
/// @brief Override the name of placeable for player only
|
||||
/// @param player The player object.
|
||||
/// @param placeable The placeable object.
|
||||
/// @param name The name for the placeable for this player, "" to clear the override.
|
||||
void NWNX_Player_SetPlaceableNameOverride(object player, object placeable, string name);
|
||||
|
||||
/// @brief Gets whether a quest has been completed by a player
|
||||
/// @param player The player object.
|
||||
/// @param sQuestName The name identifier of the quest from the Journal Editor.
|
||||
/// @return TRUE if the quest has been completed. -1 if the player does not have the journal entry.
|
||||
int NWNX_Player_GetQuestCompleted(object player, string sQuestName);
|
||||
|
||||
/// @brief Place waypoints on module load representing where a PC should start
|
||||
///
|
||||
/// This will require storing the PC's cd key or community name (depending on how you store in your vault)
|
||||
/// and bic_filename along with routinely updating their location in some persistent method like OnRest,
|
||||
/// OnAreaEnter and OnClentExit.
|
||||
///
|
||||
/// @param sCDKeyOrCommunityName The Public CD Key or Community Name of the player, this will depend on your vault type.
|
||||
/// @param sBicFileName The filename for the character. Retrieved with NWNX_Player_GetBicFileName().
|
||||
/// @param oWP The waypoint object to place where the PC should start.
|
||||
/// @param bFirstConnectOnly Set to FALSE if you would like the PC to go to this location every time they login instead
|
||||
/// of just every server restart.
|
||||
void NWNX_Player_SetPersistentLocation(string sCDKeyOrCommunityName, string sBicFileName, object oWP, int bFirstConnectOnly = TRUE);
|
||||
|
||||
/// @brief Force an item name to be updated.
|
||||
/// @note This is a workaround for bug that occurs when updating item names in open containers.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param oItem The item object.
|
||||
void NWNX_Player_UpdateItemName(object oPlayer, object oItem);
|
||||
|
||||
/// @brief Possesses a creature by temporarily making them a familiar
|
||||
/// @details This command allows a PC to possess an NPC by temporarily adding them as a familiar. It will work
|
||||
/// if the player already has an existing familiar. The creatures must be in the same area. Unpossession can be
|
||||
/// done with the regular @nwn{UnpossessFamiliar} commands.
|
||||
/// @note The possessed creature will send automap data back to the possessor.
|
||||
/// If you wish to prevent this you may wish to use NWNX_Player_GetAreaExplorationState() and
|
||||
/// NWNX_Player_SetAreaExplorationState() before and after the possession.
|
||||
/// @note The possessing creature will be left wherever they were when beginning the possession. You may wish
|
||||
/// to use @nwn{EffectCutsceneImmobilize} and @nwn{EffectCutsceneGhost} to hide them.
|
||||
/// @param oPossessor The possessor player object.
|
||||
/// @param oPossessed The possessed creature object. Only works on NPCs.
|
||||
/// @param bMindImmune If FALSE will remove the mind immunity effect on the possessor.
|
||||
/// @param bCreateDefaultQB If TRUE will populate the quick bar with default buttons.
|
||||
/// @return TRUE if possession succeeded.
|
||||
int NWNX_Player_PossessCreature(object oPossessor, object oPossessed, int bMindImmune = TRUE, int bCreateDefaultQB = FALSE);
|
||||
|
||||
/// @brief Returns the platform ID of the given player (NWNX_PLAYER_PLATFORM_*)
|
||||
/// @param oPlayer The player object.
|
||||
int NWNX_Player_GetPlatformId(object oPlayer);
|
||||
|
||||
/// @brief Returns the game language of the given player (uses NWNX_DIALOG_LANGUAGE_*)
|
||||
/// @details This function returns the ID of the game language displayed to the player.
|
||||
/// Uses the same constants as nwnx_dialog.
|
||||
/// @param oPlayer The player object.
|
||||
int NWNX_Player_GetLanguage(object oPlayer);
|
||||
|
||||
/// @brief Override sOldResName with sNewResName of nResType for oPlayer.
|
||||
/// @warning If sNewResName does not exist on oPlayer's client it will crash their game.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param nResType The res type, see nwnx_util.nss for constants.
|
||||
/// @param sOldResName The old res name, 16 characters or less.
|
||||
/// @param sNewResName The new res name or "" to clear a previous override, 16 characters or less.
|
||||
void NWNX_Player_SetResManOverride(object oPlayer, int nResType, string sOldResName, string sNewResName);
|
||||
|
||||
/// @brief Set nCustomTokenNumber to sTokenValue for oPlayer only.
|
||||
/// @note The basegame SetCustomToken() will override any personal tokens.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param nCustomTokenNumber The token number.
|
||||
/// @param sTokenValue The token text.
|
||||
void NWNX_Player_SetCustomToken(object oPlayer, int nCustomTokenNumber, string sTokenValue);
|
||||
|
||||
/// @brief Override the name of creature for player only
|
||||
/// @param oPlayer The player object.
|
||||
/// @param oCreature The creature object.
|
||||
/// @param sName The name for the creature for this player, "" to clear the override.
|
||||
void NWNX_Player_SetCreatureNameOverride(object oPlayer, object oCreature, string sName);
|
||||
|
||||
/// @brief Display floaty text above oCreature for oPlayer only.
|
||||
/// @note This will also display the floaty text above creatures that are not part of oPlayer's faction.
|
||||
/// @param oPlayer The player to display the text to.
|
||||
/// @param oCreature The creature to display the text above.
|
||||
/// @param sText The text to display.
|
||||
void NWNX_Player_FloatingTextStringOnCreature(object oPlayer, object oCreature, string sText);
|
||||
|
||||
/// @brief Toggle oPlayer's PlayerDM status.
|
||||
/// @note This function does nothing for actual DMClient DMs or players with a client version < 8193.14
|
||||
/// @param oPlayer The player.
|
||||
/// @param bIsDM TRUE to toggle dm mode on, FALSE for off.
|
||||
void NWNX_Player_ToggleDM(object oPlayer, int bIsDM);
|
||||
|
||||
/// @brief Override the mouse cursor of oObject for oPlayer only
|
||||
/// @param oPlayer The player object.
|
||||
/// @param oObject The object.
|
||||
/// @param nCursor The cursor, one of MOUSECURSOR_*. -1 to clear the override.
|
||||
void NWNX_Player_SetObjectMouseCursorOverride(object oPlayer, object oObject, int nCursor);
|
||||
|
||||
/// @brief Override the hilite color of oObject for oPlayer only
|
||||
/// @param oPlayer The player object.
|
||||
/// @param oObject The object.
|
||||
/// @param nColor The color in 0xRRGGBB format, -1 to clear the override.
|
||||
void NWNX_Player_SetObjectHiliteColorOverride(object oPlayer, object oObject, int nColor);
|
||||
|
||||
/// @brief Remove effects with sEffectTag from oPlayer's TURD
|
||||
/// @note This function should be called in the NWNX_ON_CLIENT_DISCONNECT_AFTER event, OnClientLeave is too early for the TURD to exist.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param sEffectTag The effect tag.
|
||||
void NWNX_Player_RemoveEffectFromTURD(object oPlayer, string sEffectTag);
|
||||
|
||||
/// @brief Set the location oPlayer will spawn when logging in to the server.
|
||||
/// @note This function is best called in the NWNX_ON_ELC_VALIDATE_CHARACTER_BEFORE event, OnClientEnter will be too late.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param locSpawn The location.
|
||||
void NWNX_Player_SetSpawnLocation(object oPlayer, location locSpawn);
|
||||
|
||||
/// @brief Resends palettes to a DM.
|
||||
/// @param oPlayer - the DM to send them to.
|
||||
void NWNX_Player_SendDMAllCreatorLists(object oPlayer);
|
||||
|
||||
/// @brief Give a custom journal entry to oPlayer.
|
||||
/// @warning Custom entries are wiped on client enter - they must be reapplied.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param journalEntry The journal entry in the form of a struct.
|
||||
/// @param nSilentUpdate 0 = Notify player via sound effects and feedback message, 1 = Suppress sound effects and feedback message
|
||||
/// @return a positive number to indicate the new amount of journal entries on the player.
|
||||
/// @note In contrast to conventional nwn journal entries - this method will overwrite entries with the same tag, so the index / count of entries
|
||||
/// will only increase if you add new entries with unique tags
|
||||
int NWNX_Player_AddCustomJournalEntry(object oPlayer, struct NWNX_Player_JournalEntry journalEntry, int nSilentUpdate = 0);
|
||||
|
||||
/// @brief Returns a struct containing a journal entry that can then be modified.
|
||||
/// @param oPlayer The player object.
|
||||
/// @param questTag The quest tag you wish to get the journal entry for.
|
||||
/// @return a struct containing the journal entry data.
|
||||
/// @note This method will return -1 for the Updated field in the event that no matching journal entry was found,
|
||||
/// only the last matching quest tag will be returned. Eg: If you add 3 journal updates to a player, only the 3rd one will be returned as
|
||||
/// that is the active one that the player currently sees.
|
||||
struct NWNX_Player_JournalEntry NWNX_Player_GetJournalEntry(object oPlayer, string questTag);
|
||||
|
||||
/// @brief Closes any store oPlayer may have open.
|
||||
/// @param oPlayer The player object.
|
||||
void NWNX_Player_CloseStore(object oPlayer);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Player_ForcePlaceableExamineWindow(object player, object placeable)
|
||||
{
|
||||
string sFunc = "ForcePlaceableExamineWindow";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, placeable);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_ForcePlaceableInventoryWindow(object player, object placeable)
|
||||
{
|
||||
string sFunc = "ForcePlaceableInventoryWindow";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, placeable);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_INTERNAL_StopGuiTimingBar(object player, string script = "", int id = -1) ///< @private
|
||||
{
|
||||
int activeId = GetLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ACTIVE");
|
||||
// Either the timing event was never started, or it already finished.
|
||||
if (activeId == 0)
|
||||
return;
|
||||
|
||||
// If id != -1, we ended up here through DelayCommand. Make sure it's for the right ID
|
||||
if (id != -1 && id != activeId)
|
||||
return;
|
||||
|
||||
DeleteLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ACTIVE");
|
||||
|
||||
string sFunc = "StopGuiTimingBar";
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
|
||||
if(script != "")
|
||||
{
|
||||
ExecuteScript(script, player);
|
||||
}
|
||||
}
|
||||
|
||||
void NWNX_Player_StartGuiTimingBar(object player, float seconds, string script = "", int type = NWNX_PLAYER_TIMING_BAR_CUSTOM)
|
||||
{
|
||||
if (GetLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ACTIVE"))
|
||||
return;
|
||||
|
||||
string sFunc = "StartGuiTimingBar";
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, type);
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, seconds);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
|
||||
int id = GetLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ID") + 1;
|
||||
SetLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ACTIVE", id);
|
||||
SetLocalInt(player, "NWNX_PLAYER_GUI_TIMING_ID", id);
|
||||
|
||||
DelayCommand(seconds, NWNX_Player_INTERNAL_StopGuiTimingBar(player, script, id));
|
||||
}
|
||||
|
||||
void NWNX_Player_StopGuiTimingBar(object player, string script = "")
|
||||
{
|
||||
NWNX_Player_INTERNAL_StopGuiTimingBar(player, script, -1);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetAlwaysWalk(object player, int bWalk=TRUE)
|
||||
{
|
||||
string sFunc = "SetAlwaysWalk";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, bWalk);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_GetQuickBarSlot(object player, int slot)
|
||||
{
|
||||
string sFunc = "GetQuickBarSlot";
|
||||
struct NWNX_Player_QuickBarSlot qbs;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, slot);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
|
||||
qbs.oAssociate = NWNX_GetReturnValueObject(NWNX_Player, sFunc);
|
||||
qbs.nAssociateType = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.nDomainLevel = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.nMetaType = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.nINTParam1 = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.sToolTip = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
qbs.sCommandLine = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
qbs.sCommandLabel = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
qbs.sResRef = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
qbs.nMultiClass = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.nObjectType = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
qbs.oSecondaryItem = NWNX_GetReturnValueObject(NWNX_Player, sFunc);
|
||||
qbs.oItem = NWNX_GetReturnValueObject(NWNX_Player, sFunc);
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
void NWNX_Player_SetQuickBarSlot(object player, int slot, struct NWNX_Player_QuickBarSlot qbs)
|
||||
{
|
||||
string sFunc = "SetQuickBarSlot";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, qbs.oItem);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, qbs.oSecondaryItem);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nObjectType);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nMultiClass);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, qbs.sResRef);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, qbs.sCommandLabel);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, qbs.sCommandLine);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, qbs.sToolTip);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nINTParam1);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nMetaType);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nDomainLevel);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, qbs.nAssociateType);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, qbs.oAssociate);
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, slot);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Player_GetBicFileName(object player)
|
||||
{
|
||||
string sFunc = "GetBicFileName";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_ShowVisualEffect(object player, int effectId, vector position)
|
||||
{
|
||||
string sFunc = "ShowVisualEffect";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, position.x);
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, position.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, position.z);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, effectId);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBackgroundChangeDay(object player, int track)
|
||||
{
|
||||
string sFunc = "ChangeBackgroundMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, track);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, TRUE); // bool day = TRUE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBackgroundChangeNight(object player, int track)
|
||||
{
|
||||
string sFunc = "ChangeBackgroundMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, track);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, FALSE); // bool day = FALSE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBackgroundStart(object player)
|
||||
{
|
||||
string sFunc = "PlayBackgroundMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, TRUE); // bool play = TRUE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBackgroundStop(object player)
|
||||
{
|
||||
string sFunc = "PlayBackgroundMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, FALSE); // bool play = FALSE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBattleChange(object player, int track)
|
||||
{
|
||||
string sFunc = "ChangeBattleMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, track);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBattleStart(object player)
|
||||
{
|
||||
string sFunc = "PlayBattleMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, TRUE); // bool play = TRUE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_MusicBattleStop(object player)
|
||||
{
|
||||
string sFunc = "PlayBattleMusic";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, FALSE); // bool play = FALSE
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_PlaySound(object player, string sound, object target = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "PlaySound";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, target);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sound);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetPlaceableUsable(object player, object placeable, int usable)
|
||||
{
|
||||
string sFunc = "SetPlaceableUsable";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, usable);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, placeable);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetRestDuration(object player, int duration)
|
||||
{
|
||||
string sFunc = "SetRestDuration";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, duration);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_ApplyInstantVisualEffectToObject(object player, object target, int visualeffect)
|
||||
{
|
||||
string sFunc = "ApplyInstantVisualEffectToObject";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, visualeffect);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, target);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_UpdateCharacterSheet(object player)
|
||||
{
|
||||
string sFunc = "UpdateCharacterSheet";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_OpenInventory(object player, object target, int open = TRUE)
|
||||
{
|
||||
string sFunc = "OpenInventory";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, open);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, target);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Player_GetAreaExplorationState(object player, object area)
|
||||
{
|
||||
string sFunc = "GetAreaExplorationState";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, area);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetAreaExplorationState(object player, object area, string str)
|
||||
{
|
||||
string sFunc = "SetAreaExplorationState";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, str);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, area);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetRestAnimation(object oPlayer, int nAnimation)
|
||||
{
|
||||
string sFunc = "SetRestAnimation";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nAnimation);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetObjectVisualTransformOverride(object oPlayer, object oObject, int nTransform, float fValue)
|
||||
{
|
||||
string sFunc = "SetObjectVisualTransformOverride";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, fValue);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nTransform);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oObject);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_ApplyLoopingVisualEffectToObject(object player, object target, int visualeffect)
|
||||
{
|
||||
string sFunc = "ApplyLoopingVisualEffectToObject";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, visualeffect);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, target);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetPlaceableNameOverride(object player, object placeable, string name)
|
||||
{
|
||||
string sFunc = "SetPlaceableNameOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, name);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, placeable);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Player_GetQuestCompleted(object player, string sQuestName)
|
||||
{
|
||||
string sFunc = "GetQuestCompleted";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sQuestName);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, player);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetPersistentLocation(string sCDKeyOrCommunityName, string sBicFileName, object oWP, int bFirstConnectOnly = TRUE)
|
||||
{
|
||||
string sFunc = "SetPersistentLocation";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, bFirstConnectOnly);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oWP);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sBicFileName);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sCDKeyOrCommunityName);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_UpdateItemName(object oPlayer, object oItem)
|
||||
{
|
||||
string sFunc = "UpdateItemName";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oItem);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Player_PossessCreature(object oPossessor, object oPossessed, int bMindImmune = TRUE, int bCreateDefaultQB = FALSE)
|
||||
{
|
||||
string sFunc = "PossessCreature";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, bCreateDefaultQB);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, bMindImmune);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPossessed);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPossessor);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Player_GetPlatformId(object oPlayer)
|
||||
{
|
||||
string sFunc = "GetPlatformId";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Player_GetLanguage(object oPlayer)
|
||||
{
|
||||
string sFunc = "GetLanguage";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetResManOverride(object oPlayer, int nResType, string sOldResName, string sNewResName)
|
||||
{
|
||||
string sFunc = "SetResManOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sNewResName);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sOldResName);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nResType);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetCustomToken(object oPlayer, int nCustomTokenNumber, string sTokenValue)
|
||||
{
|
||||
string sFunc = "SetCustomToken";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sTokenValue);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nCustomTokenNumber);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetCreatureNameOverride(object oPlayer, object oCreature, string sName)
|
||||
{
|
||||
string sFunc = "SetCreatureNameOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sName);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oCreature);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_FloatingTextStringOnCreature(object oPlayer, object oCreature, string sText)
|
||||
{
|
||||
string sFunc = "FloatingTextStringOnCreature";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sText);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oCreature);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_ToggleDM(object oPlayer, int bIsDM)
|
||||
{
|
||||
string sFunc = "ToggleDM";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, bIsDM);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetObjectMouseCursorOverride(object oPlayer, object oObject, int nCursor)
|
||||
{
|
||||
string sFunc = "SetObjectMouseCursorOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nCursor);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oObject);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetObjectHiliteColorOverride(object oPlayer, object oObject, int nColor)
|
||||
{
|
||||
string sFunc = "SetObjectHiliteColorOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nColor);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oObject);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_RemoveEffectFromTURD(object oPlayer, string sEffectTag)
|
||||
{
|
||||
string sFunc = "RemoveEffectFromTURD";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, sEffectTag);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SetSpawnLocation(object oPlayer, location locSpawn)
|
||||
{
|
||||
string sFunc = "SetSpawnLocation";
|
||||
|
||||
vector vPosition = GetPositionFromLocation(locSpawn);
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, GetFacingFromLocation(locSpawn));
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, vPosition.z);
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, vPosition.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Player, sFunc, vPosition.x);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, GetAreaFromLocation(locSpawn));
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Player_SendDMAllCreatorLists(object oPlayer)
|
||||
{
|
||||
string sFunc = "SendDMAllCreatorLists";
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Player_AddCustomJournalEntry(object oPlayer, struct NWNX_Player_JournalEntry journalEntry, int nSilentUpdate = 0)
|
||||
{
|
||||
string sFunc = "AddCustomJournalEntry";
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, nSilentUpdate);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nTimeOfDay);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nCalendarDay);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nUpdated);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nQuestDisplayed);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nQuestCompleted);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nPriority);
|
||||
NWNX_PushArgumentInt(NWNX_Player, sFunc, journalEntry.nState);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, journalEntry.sTag);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, journalEntry.sText);
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, journalEntry.sName);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Player_JournalEntry NWNX_Player_GetJournalEntry(object oPlayer, string questTag)
|
||||
{
|
||||
string sFunc = "GetJournalEntry";
|
||||
struct NWNX_Player_JournalEntry entry;
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Player, sFunc, questTag);
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
|
||||
entry.nUpdated = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
if(entry.nUpdated == -1) // -1 set as an indicator to say that the entry was not found
|
||||
{
|
||||
return entry;
|
||||
}
|
||||
entry.nQuestDisplayed = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.nQuestCompleted = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.nPriority = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.nState = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.nTimeOfDay = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.nCalendarDay = NWNX_GetReturnValueInt(NWNX_Player, sFunc);
|
||||
entry.sName = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
entry.sText = NWNX_GetReturnValueString(NWNX_Player, sFunc);
|
||||
entry.sTag = questTag;
|
||||
return entry;
|
||||
}
|
||||
|
||||
void NWNX_Player_CloseStore(object oPlayer)
|
||||
{
|
||||
string sFunc = "CloseStore";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Player, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Player, sFunc);
|
||||
}
|
207
_module/nss/nwnx_player_qbs.nss
Normal file
207
_module/nss/nwnx_player_qbs.nss
Normal file
@ -0,0 +1,207 @@
|
||||
/// @addtogroup player
|
||||
/// @{
|
||||
/// @file nwnx_player_qbs.nss
|
||||
/// @brief Helper script for quickbar management.
|
||||
#include "nwnx_player"
|
||||
|
||||
/// @name Quickbar Slot Types
|
||||
/// @anchor qbs_types
|
||||
/// @{
|
||||
const int NWNX_PLAYER_QBS_TYPE_EMPTY = 0;
|
||||
const int NWNX_PLAYER_QBS_TYPE_ITEM = 1;
|
||||
const int NWNX_PLAYER_QBS_TYPE_SPELL = 2;
|
||||
const int NWNX_PLAYER_QBS_TYPE_SKILL = 3;
|
||||
const int NWNX_PLAYER_QBS_TYPE_FEAT = 4;
|
||||
const int NWNX_PLAYER_QBS_TYPE_DIALOG = 6;
|
||||
const int NWNX_PLAYER_QBS_TYPE_ATTACK = 7;
|
||||
const int NWNX_PLAYER_QBS_TYPE_EMOTE = 8;
|
||||
const int NWNX_PLAYER_QBS_TYPE_ITEM_PROPERTY_CASTSPELL = 9;
|
||||
const int NWNX_PLAYER_QBS_TYPE_MODE_TOGGLE = 10;
|
||||
const int NWNX_PLAYER_QBS_TYPE_COMMAND = 18;
|
||||
const int NWNX_PLAYER_QBS_TYPE_POSSESS_FAMILIAR = 38;
|
||||
const int NWNX_PLAYER_QBS_TYPE_ASSOCIATE_COMMAND = 39;
|
||||
const int NWNX_PLAYER_QBS_TYPE_EXAMINE = 40;
|
||||
const int NWNX_PLAYER_QBS_TYPE_BARTER = 41;
|
||||
const int NWNX_PLAYER_QBS_TYPE_QUICK_CHAT = 42;
|
||||
const int NWNX_PLAYER_QBS_TYPE_CANCELPOLYMORPH = 43;
|
||||
const int NWNX_PLAYER_QBS_TYPE_SPELLLIKEABILITY = 44;
|
||||
/// @}
|
||||
|
||||
/// Create an empty QBS of given type
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Empty(int type = NWNX_PLAYER_QBS_TYPE_EMPTY);
|
||||
/// Create a QBS for using an item
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseItem(object oItem, int nPropertyID = 0);
|
||||
/// Create a QBS for equipping an item
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_EquipItem(object oItem, object oSecondaryItem = OBJECT_INVALID);
|
||||
/// Create a QBS for casting a spell
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_CastSpell(int nSpell, int nClassIndex = 0, int nMetamagic = METAMAGIC_NONE, int nDomainLevel = -1);
|
||||
/// Create a QBS for using a skill
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseSkill(int nSkill);
|
||||
/// Create a QBS for using a feat
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseFeat(int nFeat);
|
||||
/// Create a QBS for starting a dialog
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_StartDialog();
|
||||
/// Create a QBS for attacking
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Attack();
|
||||
/// Create a QBS for emoting
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Emote(int nEmote);
|
||||
/// Create a QBS for toggling a mode
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_ToggleMode(int nMode);
|
||||
/// Create a QBS for examining
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Examine();
|
||||
/// Create a QBS for bartering
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Barter();
|
||||
/// Create a QBS for quickchat command
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_QuickChat(int nCommand);
|
||||
/// Create a QBS for examining
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_PossessFamiliar();
|
||||
/// Create a QBS for casting a spell
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseSpecialAbility(int nSpell, int nCasterLevel);
|
||||
/// Create a QBS for running a command
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Command(string sCommandLabel, string sCommandLine);
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Empty(int type = NWNX_PLAYER_QBS_TYPE_EMPTY)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs;
|
||||
|
||||
qbs.nObjectType = type;
|
||||
|
||||
qbs.oItem = OBJECT_INVALID;
|
||||
qbs.oSecondaryItem = OBJECT_INVALID;
|
||||
qbs.nMultiClass = 0;
|
||||
qbs.sResRef = "";
|
||||
qbs.sCommandLabel = "";
|
||||
qbs.sCommandLine = "";
|
||||
qbs.sToolTip = "";
|
||||
qbs.nINTParam1 = 0;
|
||||
qbs.nMetaType = 0;
|
||||
qbs.nDomainLevel = 0;
|
||||
qbs.nAssociateType = 0;
|
||||
qbs.oAssociate = OBJECT_INVALID;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseItem(object oItem, int nPropertyID = 0)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_ITEM);
|
||||
|
||||
qbs.oItem = oItem;
|
||||
qbs.nINTParam1 = nPropertyID;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_EquipItem(object oItem, object oSecondaryItem = OBJECT_INVALID)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_ITEM);
|
||||
|
||||
qbs.oItem = oItem;
|
||||
qbs.oSecondaryItem = oSecondaryItem;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_CastSpell(int nSpell, int nClassIndex = 0, int nMetamagic = METAMAGIC_NONE, int nDomainLevel = -1)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_SPELL);
|
||||
|
||||
qbs.nINTParam1 = nSpell;
|
||||
qbs.nMultiClass = nClassIndex;
|
||||
qbs.nMetaType = nMetamagic;
|
||||
qbs.nDomainLevel = nDomainLevel;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseSkill(int nSkill)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_SKILL);
|
||||
|
||||
qbs.nINTParam1 = nSkill;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseFeat(int nFeat)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_FEAT);
|
||||
|
||||
qbs.nINTParam1 = nFeat;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_StartDialog()
|
||||
{
|
||||
return NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_DIALOG);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Attack()
|
||||
{
|
||||
return NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_ATTACK);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Emote(int nEmote)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_EMOTE);
|
||||
|
||||
qbs.nINTParam1 = nEmote;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_ToggleMode(int nMode)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_MODE_TOGGLE);
|
||||
|
||||
qbs.nINTParam1 = nMode;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Examine()
|
||||
{
|
||||
return NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_EXAMINE);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Barter()
|
||||
{
|
||||
return NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_BARTER);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_QuickChat(int nCommand)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_QUICK_CHAT);
|
||||
|
||||
qbs.nINTParam1 = nCommand;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_PossessFamiliar()
|
||||
{
|
||||
return NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_POSSESS_FAMILIAR);
|
||||
}
|
||||
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_UseSpecialAbility(int nSpell, int nCasterLevel)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_SPELL);
|
||||
|
||||
qbs.nINTParam1 = nSpell;
|
||||
qbs.nDomainLevel = nCasterLevel;
|
||||
|
||||
return qbs;
|
||||
}
|
||||
struct NWNX_Player_QuickBarSlot NWNX_Player_QBS_Command(string sCommandLabel, string sCommandLine)
|
||||
{
|
||||
struct NWNX_Player_QuickBarSlot qbs = NWNX_Player_QBS_Empty(NWNX_PLAYER_QBS_TYPE_COMMAND);
|
||||
|
||||
qbs.sCommandLabel = sCommandLabel;
|
||||
qbs.sCommandLine = sCommandLine;
|
||||
|
||||
return qbs;
|
||||
}
|
60
_module/nss/nwnx_profiler.nss
Normal file
60
_module/nss/nwnx_profiler.nss
Normal file
@ -0,0 +1,60 @@
|
||||
/// @addtogroup profiler Profiler
|
||||
/// @brief Functions to instrument nwscript code.
|
||||
/// @remark These functions are for advanced users.
|
||||
/// @{
|
||||
/// @file nwnx_profiler.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Profiler = "NWNX_Profiler"; ///< @private
|
||||
|
||||
/// @brief Push a timing metric scope - note that every push must be matched by a corresponding pop.
|
||||
///
|
||||
/// A timing metric contains the following information.
|
||||
/// ```c
|
||||
/// {
|
||||
/// metricName: [name], // Mandatory, from user code
|
||||
/// metricFields: { time, nanoseconds }, // Automatically captured by the push/pop pair
|
||||
/// metricTags: { [tag0_tag], [tag0_value] } // Optional, from user code, can be used to
|
||||
/// filter metrics based on some category or,
|
||||
/// constant e.g. objectType or area
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// If you don't understand how this works and you wish to use it, you should research
|
||||
/// the Metrics system (see Metrics.hpp) as well as googling about how InfluxDB stores metrics.
|
||||
///
|
||||
/// @note It's possible to have more than one tag pair per metric, It is just limited
|
||||
/// to one arbitrarily here. You can edit the prototype to include more and the C++
|
||||
/// code will cope with it correctly.
|
||||
/// @param name The name to use for your metric.
|
||||
/// @param tag0_tag An optional tag to filter your metrics.
|
||||
/// @param tag0_value The tag's value for which to filter.
|
||||
void NWNX_Profiler_PushPerfScope(string name, string tag0_tag = "", string tag0_value = "");
|
||||
|
||||
/// @brief Pops a timing metric.
|
||||
/// @remark A metric must already be pushed.
|
||||
void NWNX_Profiler_PopPerfScope();
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Profiler_PushPerfScope(string name, string tag0_tag = "", string tag0_value = "")
|
||||
{
|
||||
string sFunc = "PushPerfScope";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Profiler, sFunc, name);
|
||||
|
||||
if (tag0_value != "" && tag0_tag != "")
|
||||
{
|
||||
NWNX_PushArgumentString(NWNX_Profiler, sFunc, tag0_value);
|
||||
NWNX_PushArgumentString(NWNX_Profiler, sFunc, tag0_tag);
|
||||
}
|
||||
|
||||
NWNX_CallFunction(NWNX_Profiler, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Profiler_PopPerfScope()
|
||||
{
|
||||
string sFunc = "PopPerfScope";
|
||||
|
||||
NWNX_CallFunction(NWNX_Profiler, sFunc);
|
||||
}
|
90
_module/nss/nwnx_race.nss
Normal file
90
_module/nss/nwnx_race.nss
Normal file
@ -0,0 +1,90 @@
|
||||
/// @addtogroup race Race
|
||||
/// @brief Define racial and subrace characteristics.
|
||||
/// @{
|
||||
/// @file nwnx_race.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Race = "NWNX_Race"; ///< @private
|
||||
|
||||
/// @name Racial Modifiers
|
||||
/// @anchor racial_modifiers
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_RACE_MODIFIER_INVALID = 0;
|
||||
const int NWNX_RACE_MODIFIER_AB = 1;
|
||||
const int NWNX_RACE_MODIFIER_ABVSRACE = 2;
|
||||
const int NWNX_RACE_MODIFIER_AC = 3;
|
||||
const int NWNX_RACE_MODIFIER_ACVSRACE = 4;
|
||||
const int NWNX_RACE_MODIFIER_CONCEALMENT = 5;
|
||||
const int NWNX_RACE_MODIFIER_DMGIMMUNITY = 6;
|
||||
const int NWNX_RACE_MODIFIER_DMGREDUCTION = 7;
|
||||
const int NWNX_RACE_MODIFIER_DMGRESIST = 8;
|
||||
const int NWNX_RACE_MODIFIER_FEAT = 9;
|
||||
const int NWNX_RACE_MODIFIER_FEATUSAGE = 10;
|
||||
const int NWNX_RACE_MODIFIER_IMMUNITY = 11;
|
||||
const int NWNX_RACE_MODIFIER_INITIATIVE = 12;
|
||||
const int NWNX_RACE_MODIFIER_MOVEMENTSPEED = 13;
|
||||
const int NWNX_RACE_MODIFIER_RACE = 14;
|
||||
const int NWNX_RACE_MODIFIER_REGENERATION = 15;
|
||||
const int NWNX_RACE_MODIFIER_SAVE = 16;
|
||||
const int NWNX_RACE_MODIFIER_SAVEVSRACE = 17;
|
||||
const int NWNX_RACE_MODIFIER_SAVEVSTYPE = 18;
|
||||
const int NWNX_RACE_MODIFIER_SKILL = 19;
|
||||
const int NWNX_RACE_MODIFIER_SPELLIMMUNITY = 20;
|
||||
const int NWNX_RACE_MODIFIER_SRCHARGEN = 21;
|
||||
const int NWNX_RACE_MODIFIER_SRINCLEVEL = 22;
|
||||
///@}
|
||||
|
||||
/// @brief Sets a racial modifier.
|
||||
/// @param iRace The RACIALTYPE_ constant or value in racialtypes.2da.
|
||||
/// @param iMod The @ref racial_modifiers "racial modifier" to set.
|
||||
/// @param iParam1, iParam2, iParam3 The parameters for this racial modifier.
|
||||
void NWNX_Race_SetRacialModifier(int iRace, int iMod, int iParam1, int iParam2 = 0xDEADBEEF, int iParam3 = 0xDEADBEEF);
|
||||
|
||||
/// @brief Gets the parent race for a race.
|
||||
/// @param iRace The race to check for a parent.
|
||||
/// @return The parent race if applicable, if not it just returns the race passed in.
|
||||
int NWNX_Race_GetParentRace(int iRace);
|
||||
|
||||
/// @brief Associates the race with its favored enemy feat.
|
||||
/// @param iRace The race
|
||||
/// @param iFeat The feat
|
||||
/// @note If a creature has a race that has a parent race then favored enemy bonuses will work for either race against that creature.
|
||||
/// For example a creature is a Wild Elf which has a parent race of Elf, an attacker would benefit if they had either Favored Enemy: Elf
|
||||
/// or Favored Enemy: Wild Elf
|
||||
void NWNX_Race_SetFavoredEnemyFeat(int iRace, int iFeat);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Race_SetRacialModifier(int iRace, int iMod, int iParam1, int iParam2 = 0xDEADBEEF, int iParam3 = 0xDEADBEEF)
|
||||
{
|
||||
string sFunc = "SetRacialModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iParam3);
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iParam2);
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iParam1);
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iMod);
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iRace);
|
||||
|
||||
NWNX_CallFunction(NWNX_Race, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Race_GetParentRace(int iRace)
|
||||
{
|
||||
string sFunc = "GetParentRace";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iRace);
|
||||
|
||||
NWNX_CallFunction(NWNX_Race, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Race, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Race_SetFavoredEnemyFeat(int iRace, int iFeat)
|
||||
{
|
||||
string sFunc = "SetFavoredEnemyFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Race, sFunc, iRace);
|
||||
|
||||
NWNX_CallFunction(NWNX_Race, sFunc);
|
||||
}
|
70
_module/nss/nwnx_race_2da.nss
Normal file
70
_module/nss/nwnx_race_2da.nss
Normal file
@ -0,0 +1,70 @@
|
||||
/// @ingroup race
|
||||
/// @file nwnx_race_2da.nss
|
||||
/// @brief Parse a column in the racialtypes.2da to load the modifiers.
|
||||
#include "nwnx_race"
|
||||
#include "nwnx_util"
|
||||
|
||||
/// @ingroup race
|
||||
/// @brief Translate a modifier type from a string to its constant.
|
||||
/// @param raceMod The string representation of the constant.
|
||||
/// @return The constant for the race modifier.
|
||||
int NWNX_Race_GetModifierConstant(string raceMod);
|
||||
|
||||
/// @ingroup race
|
||||
/// @brief Loops through racialtypes.2da and checks for the column for racial modifications and sets them.
|
||||
/// @note Requires NWNX_Util_Get2DARowCount()
|
||||
/// @param sColumnName The column name in the racialtypes.2da that defines the 2da for the racial mods.
|
||||
void NWNX_Race_LoadRacialModifiers(string sColumnName = "RacialModsTable");
|
||||
|
||||
int NWNX_Race_GetModifierConstant(string raceMod)
|
||||
{
|
||||
if (raceMod == "AB") return NWNX_RACE_MODIFIER_AB;
|
||||
else if (raceMod == "ABVSRACE") return NWNX_RACE_MODIFIER_ABVSRACE;
|
||||
else if (raceMod == "AC") return NWNX_RACE_MODIFIER_AC;
|
||||
else if (raceMod == "ACVSRACE") return NWNX_RACE_MODIFIER_ACVSRACE;
|
||||
else if (raceMod == "CONCEALMENT") return NWNX_RACE_MODIFIER_CONCEALMENT;
|
||||
else if (raceMod == "DMGIMMUNITY") return NWNX_RACE_MODIFIER_DMGIMMUNITY;
|
||||
else if (raceMod == "DMGREDUCTION") return NWNX_RACE_MODIFIER_DMGREDUCTION;
|
||||
else if (raceMod == "DMGRESIST") return NWNX_RACE_MODIFIER_DMGRESIST;
|
||||
else if (raceMod == "FEAT") return NWNX_RACE_MODIFIER_FEAT;
|
||||
else if (raceMod == "FEATUSAGE") return NWNX_RACE_MODIFIER_FEATUSAGE;
|
||||
else if (raceMod == "IMMUNITY") return NWNX_RACE_MODIFIER_IMMUNITY;
|
||||
else if (raceMod == "INITIATIVE") return NWNX_RACE_MODIFIER_INITIATIVE;
|
||||
else if (raceMod == "MOVEMENTSPEED") return NWNX_RACE_MODIFIER_MOVEMENTSPEED;
|
||||
else if (raceMod == "RACE") return NWNX_RACE_MODIFIER_RACE;
|
||||
else if (raceMod == "REGENERATION") return NWNX_RACE_MODIFIER_REGENERATION;
|
||||
else if (raceMod == "SAVE") return NWNX_RACE_MODIFIER_SAVE;
|
||||
else if (raceMod == "SAVEVSRACE") return NWNX_RACE_MODIFIER_SAVEVSRACE;
|
||||
else if (raceMod == "SAVEVSTYPE") return NWNX_RACE_MODIFIER_SAVEVSTYPE;
|
||||
else if (raceMod == "SKILL") return NWNX_RACE_MODIFIER_SKILL;
|
||||
else if (raceMod == "SPELLIMMUNITY") return NWNX_RACE_MODIFIER_SPELLIMMUNITY;
|
||||
else if (raceMod == "SRCHARGEN") return NWNX_RACE_MODIFIER_SRCHARGEN;
|
||||
else if (raceMod == "SRINCLEVEL") return NWNX_RACE_MODIFIER_SRINCLEVEL;
|
||||
return NWNX_RACE_MODIFIER_INVALID;
|
||||
}
|
||||
|
||||
void NWNX_Race_LoadRacialModifiers(string sColumnName = "RacialModsTable")
|
||||
{
|
||||
int iRaceRows = NWNX_Util_Get2DARowCount("racialtypes");
|
||||
int iRace;
|
||||
for (iRace = 0; iRace < iRaceRows; iRace++)
|
||||
{
|
||||
string sRaceModTable = Get2DAString("racialtypes", sColumnName, iRace);
|
||||
if(sRaceModTable != "")
|
||||
{
|
||||
int iRaceModRows = NWNX_Util_Get2DARowCount(sRaceModTable);
|
||||
int iRaceMod;
|
||||
for (iRaceMod = 0; iRaceMod < iRaceModRows; iRaceMod++)
|
||||
{
|
||||
string sType = Get2DAString(sRaceModTable, "Type", iRaceMod);
|
||||
string sParam1 = Get2DAString(sRaceModTable, "Param1", iRaceMod);
|
||||
string sParam2 = Get2DAString(sRaceModTable, "Param2", iRaceMod);
|
||||
string sParam3 = Get2DAString(sRaceModTable, "Param3", iRaceMod);
|
||||
int iParam1 = sParam1 == "" ? 0xDEADBEEF : StringToInt(sParam1);
|
||||
int iParam2 = sParam2 == "" ? 0xDEADBEEF : StringToInt(sParam2);
|
||||
int iParam3 = sParam3 == "" ? 0xDEADBEEF : StringToInt(sParam3);
|
||||
NWNX_Race_SetRacialModifier(iRace, NWNX_Race_GetModifierConstant(sType), iParam1, iParam2, iParam3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
5906
_module/nss/nwnx_redis.nss
Normal file
5906
_module/nss/nwnx_redis.nss
Normal file
File diff suppressed because it is too large
Load Diff
108
_module/nss/nwnx_redis_lib.nss
Normal file
108
_module/nss/nwnx_redis_lib.nss
Normal file
@ -0,0 +1,108 @@
|
||||
/// @addtogroup redis Redis
|
||||
/// @brief Allows connection and interfacing with a redis server.
|
||||
/// @{
|
||||
/// @file nwnx_redis_lib.nss
|
||||
/// @brief Allows connection and interfacing with a redis server.
|
||||
#include "nwnx"
|
||||
|
||||
/// @anchor redis_results
|
||||
/// @name Redis Results
|
||||
/// @{
|
||||
|
||||
/// @brief Array result
|
||||
const int NWNX_REDIS_RESULT_ARRAY = 1;
|
||||
|
||||
/// This never appears: it is rewritten into STRING for simplicity reasons.
|
||||
/// const int NWNX_REDIS_RESULT_BULK_STRING = 2;
|
||||
|
||||
/// @brief Error result
|
||||
/// @note You can retrieve errors as strings.
|
||||
const int NWNX_REDIS_RESULT_ERROR = 3;
|
||||
|
||||
/// @brief Integer result
|
||||
/// @warning This cannot represent integers above 32bit.
|
||||
/// @remark Use NWNX_Redis_GetResultAsString() if you need the string representation.
|
||||
const int NWNX_REDIS_RESULT_INTEGER = 4;
|
||||
|
||||
/// @brief String result
|
||||
const int NWNX_REDIS_RESULT_STRING = 5;
|
||||
|
||||
/// @brief Null result
|
||||
const int NWNX_REDIS_RESULT_NULL = 6;
|
||||
/// @}
|
||||
|
||||
/// Returns the result type as a int.
|
||||
int NWNX_Redis_GetResultType(int resultId);
|
||||
|
||||
/// @brief Gets the length of the given result.
|
||||
/// @param resultId The result id.
|
||||
/// @return The length or 0 if the given result wasn't a list type.
|
||||
int NWNX_Redis_GetArrayLength(int resultId);
|
||||
|
||||
/// @brief Gets a list entry as a string.
|
||||
/// @param resultId The result id.
|
||||
/// @param idx The index in the list.
|
||||
/// @return The list entry, will return "" if the given result is not a list,
|
||||
/// or if the requested index is out of bounds.
|
||||
int NWNX_Redis_GetArrayElement(int resultId, int idx);
|
||||
|
||||
/// @brief Gets the given result as a float.
|
||||
/// @param resultId The result id.
|
||||
/// @return The result as a float.
|
||||
float NWNX_Redis_GetResultAsFloat(int resultId);
|
||||
|
||||
/// @brief Gets the given result as an integer.
|
||||
/// @param resultId The result id.
|
||||
/// @return The result as an integer.
|
||||
int NWNX_Redis_GetResultAsInt(int resultId);
|
||||
|
||||
/// @brief Gets the given result as a string.
|
||||
/// @param resultId The result id.
|
||||
/// @return The result as a string.
|
||||
string NWNX_Redis_GetResultAsString(int resultId);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Redis_GetResultType(int resultId)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultType", resultId);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultType");
|
||||
return NWNX_GetReturnValueInt("NWNX_Redis", "GetResultType");
|
||||
}
|
||||
|
||||
int NWNX_Redis_GetArrayLength(int resultId)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultArrayLength", resultId);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultArrayLength");
|
||||
return NWNX_GetReturnValueInt("NWNX_Redis", "GetResultArrayLength");
|
||||
}
|
||||
|
||||
// Returns the last
|
||||
int NWNX_Redis_GetArrayElement(int resultId, int idx)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultArrayElement", resultId);
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultArrayElement", idx);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultArrayElement");
|
||||
return NWNX_GetReturnValueInt("NWNX_Redis", "GetResultArrayElement");
|
||||
}
|
||||
|
||||
float NWNX_Redis_GetResultAsFloat(int resultId)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultAsString", resultId);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultAsString");
|
||||
return StringToFloat(NWNX_GetReturnValueString("NWNX_Redis", "GetResultAsString"));
|
||||
}
|
||||
|
||||
int NWNX_Redis_GetResultAsInt(int resultId)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultAsString", resultId);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultAsString");
|
||||
return StringToInt(NWNX_GetReturnValueString("NWNX_Redis", "GetResultAsString"));
|
||||
}
|
||||
|
||||
string NWNX_Redis_GetResultAsString(int resultId)
|
||||
{
|
||||
NWNX_PushArgumentInt("NWNX_Redis", "GetResultAsString", resultId);
|
||||
NWNX_CallFunction("NWNX_Redis", "GetResultAsString");
|
||||
return NWNX_GetReturnValueString("NWNX_Redis", "GetResultAsString");
|
||||
}
|
23
_module/nss/nwnx_redis_ps.nss
Normal file
23
_module/nss/nwnx_redis_ps.nss
Normal file
@ -0,0 +1,23 @@
|
||||
/// @ingroup redis
|
||||
/// @brief Interface to Redis PUBSUB
|
||||
/// @{
|
||||
/// @file nwnx_redis_ps.nss
|
||||
#include "nwnx"
|
||||
|
||||
/// A redis PUBSUB message
|
||||
struct NWNX_Redis_PubSubMessageData {
|
||||
string channel; ///< The channel
|
||||
string message; ///< The message
|
||||
};
|
||||
|
||||
/// @brief Get a PUBSUB message
|
||||
/// @return A NWNX_Redis_PubSubMessageData struct.
|
||||
struct NWNX_Redis_PubSubMessageData NWNX_Redis_GetPubSubMessageData()
|
||||
{
|
||||
struct NWNX_Redis_PubSubMessageData ret;
|
||||
NWNX_CallFunction("NWNX_Redis", "GetPubSubData");
|
||||
ret.message = NWNX_GetReturnValueString("NWNX_Redis", "GetPubSubData");
|
||||
ret.channel = NWNX_GetReturnValueString("NWNX_Redis", "GetPubSubData");
|
||||
return ret;
|
||||
}
|
||||
/// @}
|
5900
_module/nss/nwnx_redis_short.nss
Normal file
5900
_module/nss/nwnx_redis_short.nss
Normal file
File diff suppressed because it is too large
Load Diff
42
_module/nss/nwnx_regex.nss
Normal file
42
_module/nss/nwnx_regex.nss
Normal file
@ -0,0 +1,42 @@
|
||||
/// @addtogroup regex Regex
|
||||
/// @brief Provide regular expression functions.
|
||||
/// @{
|
||||
/// @file nwnx_regex.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Regex = "NWNX_Regex"; ///< @private
|
||||
|
||||
/// @param str The string to search.
|
||||
/// @param regex The regular expression to use when searching.
|
||||
/// @return TRUE if string matches the regular expression.
|
||||
int NWNX_Regex_Search(string str, string regex);
|
||||
|
||||
/// @brief Replaces any matches of the regular expression with a string.
|
||||
/// @param str The string to search.
|
||||
/// @param regex The regular expression to use when searching.
|
||||
/// @param replace The string to replace the matches with.
|
||||
/// @param firstOnly Set to TRUE to only replace the first match.
|
||||
/// @return A new string with any replacements made.
|
||||
string NWNX_Regex_Replace(string str, string regex, string replace = "", int firstOnly = FALSE);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Regex_Search(string str, string regex)
|
||||
{
|
||||
string sFunc = "Search";
|
||||
NWNX_PushArgumentString(NWNX_Regex, sFunc, regex);
|
||||
NWNX_PushArgumentString(NWNX_Regex, sFunc, str);
|
||||
NWNX_CallFunction(NWNX_Regex, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Regex, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Regex_Replace(string str, string regex, string replace="", int firstOnly=0)
|
||||
{
|
||||
string sFunc = "Replace";
|
||||
NWNX_PushArgumentInt(NWNX_Regex, sFunc, firstOnly);
|
||||
NWNX_PushArgumentString(NWNX_Regex, sFunc, replace);
|
||||
NWNX_PushArgumentString(NWNX_Regex, sFunc, regex);
|
||||
NWNX_PushArgumentString(NWNX_Regex, sFunc, str);
|
||||
NWNX_CallFunction(NWNX_Regex, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Regex, sFunc);
|
||||
}
|
80
_module/nss/nwnx_rename.nss
Normal file
80
_module/nss/nwnx_rename.nss
Normal file
@ -0,0 +1,80 @@
|
||||
/// @addtogroup rename Rename
|
||||
/// @brief Facilitates renaming, overriding and customization of player names.
|
||||
/// @{
|
||||
/// @file nwnx_rename.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Rename = "NWNX_Rename"; ///< @private
|
||||
|
||||
/// @anchor rename_comm_name_override_type
|
||||
/// @name Community Name Override Type
|
||||
/// @{
|
||||
const int NWNX_RENAME_PLAYERNAME_DEFAULT = 0; ///< Don't rename
|
||||
const int NWNX_RENAME_PLAYERNAME_OBFUSCATE = 1; ///< Generate random string for Community Name
|
||||
const int NWNX_RENAME_PLAYERNAME_OVERRIDE = 2; ///< Use character name specified
|
||||
const int NWNX_RENAME_PLAYERNAME_ANONYMOUS = 3; ///< Use the value of the NWNX_RENAME_ANONYMOUS_NAME environment variable
|
||||
///@}
|
||||
|
||||
/// @brief Set a PC's character name and community name on the player list.
|
||||
/// @param oTarget The PC whose name is being overridden.
|
||||
/// @param sNewName The new name.
|
||||
/// @param sPrefix The prefix for their character name, sometimes used for a color code.
|
||||
/// @param sSuffix The suffix for their character name.
|
||||
/// @param iPlayerNameState How to change the Community Name, use @ref rename_comm_name_override_type "Community Name Override Type".
|
||||
/// @param oObserver If specified, the character name will appear to that specific observer as set, this overrides a global setting.
|
||||
/// @note Will not persist through saving, resets or logout.
|
||||
void NWNX_Rename_SetPCNameOverride(object oTarget, string sNewName, string sPrefix = "" , string sSuffix = "" ,
|
||||
int iPlayerNameState = NWNX_RENAME_PLAYERNAME_DEFAULT, object oObserver = OBJECT_INVALID);
|
||||
|
||||
/// @brief Gets a PC's name as overridden.
|
||||
/// @param oTarget The PC whose name to query.
|
||||
/// @param oObserver The specific observer.
|
||||
/// @return The PC's name as overridden either per observer or globally.
|
||||
/// @note If you wish to get a PC's true name use `GetName(oPC, TRUE)`.
|
||||
string NWNX_Rename_GetPCNameOverride(object oTarget, object oObserver = OBJECT_INVALID);
|
||||
|
||||
/// @brief Clears an overridden PC Name.
|
||||
/// @param oTarget The PC whose overridden name to clear, use OBJECT_INVALID if you're clearing all overrides for an observer.
|
||||
/// @param oObserver The observer whose overriden name of oTarget is being cleared.
|
||||
/// If oTarget is OBJECT_INVALID then all overrides are cleared.
|
||||
/// @param clearAll If true, both the global and personal overrides will be cleared for that target PC.
|
||||
/// Requires oObserver be OBJECT_INVALID.
|
||||
void NWNX_Rename_ClearPCNameOverride(object oTarget, object oObserver = OBJECT_INVALID, int clearAll = FALSE);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Rename_SetPCNameOverride(object oTarget, string sNewName, string sPrefix = "" , string sSuffix = "" ,
|
||||
int iPlayerNameState = NWNX_RENAME_PLAYERNAME_DEFAULT, object oObserver = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "SetPCNameOverride";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oObserver);
|
||||
NWNX_PushArgumentInt(NWNX_Rename, sFunc, iPlayerNameState);
|
||||
NWNX_PushArgumentString(NWNX_Rename, sFunc, sSuffix);
|
||||
NWNX_PushArgumentString(NWNX_Rename, sFunc, sPrefix);
|
||||
NWNX_PushArgumentString(NWNX_Rename, sFunc, sNewName);
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oTarget);
|
||||
|
||||
NWNX_CallFunction(NWNX_Rename, sFunc);
|
||||
}
|
||||
string NWNX_Rename_GetPCNameOverride(object oTarget, object oObserver = OBJECT_INVALID)
|
||||
{
|
||||
string sFunc = "GetPCNameOverride";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oObserver);
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oTarget);
|
||||
|
||||
NWNX_CallFunction(NWNX_Rename, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Rename, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Rename_ClearPCNameOverride(object oTarget, object oObserver = OBJECT_INVALID, int clearAll = FALSE)
|
||||
{
|
||||
string sFunc = "ClearPCNameOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Rename, sFunc, clearAll);
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oObserver);
|
||||
NWNX_PushArgumentObject(NWNX_Rename, sFunc, oTarget);
|
||||
|
||||
NWNX_CallFunction(NWNX_Rename, sFunc);
|
||||
}
|
49
_module/nss/nwnx_reveal.nss
Normal file
49
_module/nss/nwnx_reveal.nss
Normal file
@ -0,0 +1,49 @@
|
||||
/// @addtogroup reveal Reveal
|
||||
/// @brief Allows the selective revealing of a stealthing character to another character or their party.
|
||||
/// @{
|
||||
/// @file nwnx_reveal.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Reveal = "NWNX_Reveal"; ///< @private
|
||||
|
||||
/// @name Reveal Detection Methods
|
||||
/// @{
|
||||
const int NWNX_REVEAL_SEEN = 1; ///< Seen
|
||||
const int NWNX_REVEAL_HEARD = 0; ///< Heard
|
||||
///@}
|
||||
|
||||
/// @brief Selectively reveals the character to an observer until the next time they stealth out of sight.
|
||||
/// @param oHiding The creature who is stealthed.
|
||||
/// @param oObserver The creature to whom the hider is revealed.
|
||||
/// @param iDetectionMethod Can be specified to determine whether the hidden creature is seen or heard.
|
||||
void NWNX_Reveal_RevealTo(object oHiding, object oObserver, int iDetectionMethod = NWNX_REVEAL_HEARD);
|
||||
|
||||
/// @brief Sets whether a character remains visible to their party through stealth.
|
||||
/// @param oHiding The creature who is stealthed.
|
||||
/// @param bReveal TRUE for visible.
|
||||
/// @param iDetectionMethod Can be specified to determine whether the hidden creature is seen or heard.
|
||||
void NWNX_Reveal_SetRevealToParty(object oHiding, int bReveal, int iDetectionMethod = NWNX_REVEAL_HEARD);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Reveal_RevealTo(object oHiding, object oObserver, int iDetectionMethod = NWNX_REVEAL_HEARD)
|
||||
{
|
||||
string sFunc = "RevealTo";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Reveal, sFunc, iDetectionMethod);
|
||||
NWNX_PushArgumentObject(NWNX_Reveal, sFunc, oObserver);
|
||||
NWNX_PushArgumentObject(NWNX_Reveal, sFunc, oHiding);
|
||||
|
||||
NWNX_CallFunction(NWNX_Reveal, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Reveal_SetRevealToParty(object oHiding, int bReveal, int iDetectionMethod = NWNX_REVEAL_HEARD)
|
||||
{
|
||||
string sFunc = "SetRevealToParty";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Reveal, sFunc, iDetectionMethod);
|
||||
NWNX_PushArgumentInt(NWNX_Reveal, sFunc, bReveal);
|
||||
NWNX_PushArgumentObject(NWNX_Reveal, sFunc, oHiding);
|
||||
|
||||
NWNX_CallFunction(NWNX_Reveal, sFunc);
|
||||
}
|
23
_module/nss/nwnx_ruby.nss
Normal file
23
_module/nss/nwnx_ruby.nss
Normal file
@ -0,0 +1,23 @@
|
||||
/// @addtogroup ruby Ruby
|
||||
/// @brief Allows users to execute arbitrary Ruby from the game.
|
||||
/// @{
|
||||
/// @file nwnx_ruby.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Ruby = "NWNX_Ruby"; ///< @private
|
||||
|
||||
string NWNX_Ruby_Evaluate (string sCode);
|
||||
|
||||
/// @brief Evaluates some ruby code.
|
||||
/// @param sCode The code to evaluate.
|
||||
/// @return The output of the call.
|
||||
string NWNX_Ruby_Evaluate(string sCode)
|
||||
{
|
||||
string sFunc = "Evaluate";
|
||||
|
||||
NWNX_PushArgumentString (NWNX_Ruby, sFunc, sCode);
|
||||
NWNX_CallFunction (NWNX_Ruby, sFunc);
|
||||
return NWNX_GetReturnValueString (NWNX_Ruby, sFunc);
|
||||
}
|
||||
|
||||
/// @}
|
283
_module/nss/nwnx_skillranks.nss
Normal file
283
_module/nss/nwnx_skillranks.nss
Normal file
@ -0,0 +1,283 @@
|
||||
/// @addtogroup skillranks SkillRanks
|
||||
/// @brief Enhances and allows for manipulation of skill rank calculations including the ability to build custom
|
||||
/// skill related feats as well as modifying stock feats.
|
||||
/// @{
|
||||
/// @file nwnx_skillranks.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_SkillRanks = "NWNX_SkillRanks"; ///< @private
|
||||
|
||||
/// @name SkillRanks Key Abilities
|
||||
/// @anchor skr_key_abilities
|
||||
///
|
||||
/// The abilities as bits
|
||||
/// @{
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_STRENGTH = 1; ///< Strength
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_DEXTERITY = 2; ///< Dexterity
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CONSTITUTION = 4; ///< Constitution
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_INTELLIGENCE = 8; ///< Intelligence
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_WISDOM = 16; ///< Wisdom
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CHARISMA = 32; ///< Charisma
|
||||
///@}
|
||||
|
||||
/// @name SkillRanks Key Ability Calculation Method
|
||||
/// @anchor skr_key_ability_calc_bits
|
||||
///
|
||||
/// Constants used to calculate the ability modifier for a skill.
|
||||
/// @{
|
||||
/// @warning Use only one of these calculations in your mask! If you use more than one the first will be used.
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CALC_MIN = 64; ///< Use the minimum value of the provided ability scores.
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CALC_MAX = 128; ///< Use the maximum value of the provided ability scores.
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CALC_AVERAGE = 256; ///< Use the average value of the provided ability scores.
|
||||
const int NWNX_SKILLRANKS_KEY_ABILITY_CALC_SUM = 512; ///< Use the sum of the provided ability scores.
|
||||
///@}
|
||||
|
||||
/// @brief A feat that manipulates skill ranks.
|
||||
struct NWNX_SkillRanks_SkillFeat
|
||||
{
|
||||
int iSkill; ///< The skill this feat impacts
|
||||
int iFeat; ///< The feat
|
||||
|
||||
/// Skill feat bonus/penalty
|
||||
int iModifier;
|
||||
|
||||
/// 1 for Focus, 2 for Epic Focus. This can be set on a feat so NWNX_SkillRanks_SetFocusMod
|
||||
/// can mass change the modifier for the Skill Focus and Epic Skill Focus feats.
|
||||
int iFocusFeat;
|
||||
|
||||
/// @brief 255 char bitset string for skill ranks impacted by class levels (like Bardic Knowledge).
|
||||
///
|
||||
/// The right most bit is barbarian (class 0), second from right is bard (class 1) etc.
|
||||
/// It's not necessary to pass in the entire string, for example Ranger is class 7 and Fighter is 4
|
||||
/// If you wanted those class levels to impact the skill modifier you could set sClasses equal to
|
||||
/// "10010000". From right to left = Barbarian, Bard, Cleric, Druid, Fighter, Monk, Paladin, Ranger
|
||||
/// You can alternatively use NWNX_SkillRanks_AddSkillFeatClass() for each class
|
||||
/// @remark If unset but #fClassLevelMod is set, then all classes will be included.
|
||||
string sClasses;
|
||||
|
||||
/// Levels in class multiplier gives you skill modifier, for example 0.5f would mean 1 point for
|
||||
/// every two class levels. If #sClasses is not set and this is set then all class levels will be modified.
|
||||
float fClassLevelMod;
|
||||
|
||||
/// Used for feats like Stonecunning or Trackless Step which restrict skill modifiers by area types.
|
||||
int iAreaFlagsRequired;
|
||||
|
||||
/// Used for feats like Stonecunning or Trackless Step which restrict skill modifiers by area types.
|
||||
int iAreaFlagsForbidden;
|
||||
|
||||
/// 1 for Day, 2 for Night - if skill modifiers only take effect based on the day/night cycle or an area
|
||||
/// that's set to always night. 0 is all hours.
|
||||
int iDayOrNight;
|
||||
|
||||
/// This allows for feats that bypass the armor check penalty on skill rank calculations.
|
||||
int bBypassArmorCheckPenalty;
|
||||
|
||||
/// @brief Bitmask of @ref skr_key_abilities "abilities" and @ref skr_key_ability_calc_bits "method to calculate"
|
||||
/// the ability modifier for a skill.
|
||||
///
|
||||
/// Example **Doctor** Feat that used INT instead of WIS (if higher) for Heal skill would set to:
|
||||
/// #NWNX_SKILLRANKS_KEY_ABILITY_INTELLIGENCE | #NWNX_SKILLRANKS_KEY_ABILITY_WISDOM | #NWNX_SKILLRANKS_KEY_ABILITY_CALC_MAX;
|
||||
int iKeyAbilityMask;
|
||||
};
|
||||
|
||||
/// @param iSkill The skill to check the feat count.
|
||||
/// @return The count of feats for a specific skill.
|
||||
int NWNX_SkillRanks_GetSkillFeatCountForSkill(int iSkill);
|
||||
|
||||
/// @brief Returns a skill feat.
|
||||
/// @param iSkill The skill.
|
||||
/// @param iFeat The feat.
|
||||
/// @return A constructed NWNX_SkillRanks_SkillFeat.
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_GetSkillFeat(int iSkill, int iFeat);
|
||||
|
||||
/// @brief Returns a skill feat by index.
|
||||
/// @remark Generally used in a loop with NWNX_SkillRanks_GetSkillFeatCountForSkill().
|
||||
/// @param iSkill The skill.
|
||||
/// @param iIndex The index in the list of feats for the skill.
|
||||
/// @return A constructed NWNX_SkillRanks_SkillFeat.
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_GetSkillFeatForSkillByIndex(int iSkill, int iIndex);
|
||||
|
||||
/// @brief Modifies or creates a skill feat.
|
||||
/// @param skillFeat The defined NWNX_SkillRanks_SkillFeat.
|
||||
/// @param createIfNonExistent TRUE to create if the feat does not exist.
|
||||
void NWNX_SkillRanks_SetSkillFeat(struct NWNX_SkillRanks_SkillFeat skillFeat, int createIfNonExistent = FALSE);
|
||||
|
||||
/// @brief Add classes to a skill feat instead of working with the NWNX_SkillRanks_SkillFeat::sClasses string.
|
||||
///
|
||||
/// Manipulating the sClasses string in the NWNX_SkillRanks_SkillFeat struct can be difficult. This
|
||||
/// function allows the builder to enter one class at a time.
|
||||
/// @param skillFeat The NWNX_SkillRanks_SkillFeat for which the sClasses field will be modifier.
|
||||
/// @param iClass The class to add to the Skill Feat.
|
||||
/// @return The updated NWNX_SkillRanks_SkillFeat.
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_AddSkillFeatClass(struct NWNX_SkillRanks_SkillFeat skillFeat, int iClass);
|
||||
|
||||
/// @brief Change the modifier value for Skill Focus and Epic Skill Focus feats.
|
||||
///
|
||||
/// The stock modifier on Skill Focus and Epic Skill Focus are 3 and 10 respectively, these can be
|
||||
/// changed with this function.
|
||||
/// @param iModifier The new value for the feat modifier.
|
||||
/// @param iEpic Set to TRUE to change the value for Epic Skill Focus.
|
||||
void NWNX_SkillRanks_SetSkillFeatFocusModifier(int iModifier, int iEpic = FALSE);
|
||||
|
||||
/// @brief Gets the current penalty to Dexterity based skills when blind.
|
||||
/// @return The penalty to Dexterity when blind.
|
||||
int NWNX_SkillRanks_GetBlindnessPenalty();
|
||||
|
||||
/// @brief Set the value the Dexterity based skills get decreased due to blindness.
|
||||
/// @remark Default is 4.
|
||||
/// @param iModifier The penalty to Dexterity when blind.
|
||||
void NWNX_SkillRanks_SetBlindnessPenalty(int iModifier);
|
||||
|
||||
/// @brief Get a skill modifier for an area.
|
||||
/// @param oArea The area.
|
||||
/// @param iSkill The skill to check.
|
||||
/// @return The modifier to that skill in the area.
|
||||
int NWNX_SkillRanks_GetAreaModifier(object oArea, int iSkill);
|
||||
|
||||
/// @brief Sets a skill modifier for the area.
|
||||
/// @param oArea The area.
|
||||
/// @param iSkill The skill to change.
|
||||
/// @param iModifier The modifier to the skill in the area.
|
||||
void NWNX_SkillRanks_SetAreaModifier(object oArea, int iSkill, int iModifier);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_SkillRanks_GetSkillFeatCountForSkill(int iSkill)
|
||||
{
|
||||
string sFunc = "GetSkillFeatCountForSkill";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iSkill);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_GetSkillFeatForSkillByIndex(int iSkill, int iIndex)
|
||||
{
|
||||
string sFunc = "GetSkillFeatForSkillByIndex";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iIndex);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iSkill);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
|
||||
struct NWNX_SkillRanks_SkillFeat skillFeat;
|
||||
|
||||
skillFeat.iSkill = iSkill;
|
||||
skillFeat.iFeat = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iModifier = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iFocusFeat = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.sClasses = NWNX_GetReturnValueString(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.fClassLevelMod = NWNX_GetReturnValueFloat(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iAreaFlagsRequired = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iAreaFlagsForbidden = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iDayOrNight = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.bBypassArmorCheckPenalty = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iKeyAbilityMask = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
|
||||
return skillFeat;
|
||||
}
|
||||
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_GetSkillFeat(int iSkill, int iFeat)
|
||||
{
|
||||
string sFunc = "GetSkillFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iFeat);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iSkill);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
|
||||
struct NWNX_SkillRanks_SkillFeat skillFeat;
|
||||
|
||||
skillFeat.iSkill = iSkill;
|
||||
skillFeat.iFeat = iFeat;
|
||||
skillFeat.iModifier = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iFocusFeat = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.sClasses = NWNX_GetReturnValueString(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.fClassLevelMod = NWNX_GetReturnValueFloat(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iAreaFlagsRequired = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iAreaFlagsForbidden = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iDayOrNight = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.bBypassArmorCheckPenalty = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
skillFeat.iKeyAbilityMask = NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
|
||||
return skillFeat;
|
||||
}
|
||||
|
||||
void NWNX_SkillRanks_SetSkillFeat(struct NWNX_SkillRanks_SkillFeat skillFeat, int createIfNonExistent = FALSE)
|
||||
{
|
||||
string sFunc = "SetSkillFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, createIfNonExistent);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iKeyAbilityMask);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.bBypassArmorCheckPenalty);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iDayOrNight);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iAreaFlagsForbidden);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iAreaFlagsRequired);
|
||||
NWNX_PushArgumentFloat(NWNX_SkillRanks, sFunc, skillFeat.fClassLevelMod);
|
||||
// We only need to send the string from the point of the first set bit
|
||||
NWNX_PushArgumentString(NWNX_SkillRanks, sFunc, GetStringRight(skillFeat.sClasses, GetStringLength(skillFeat.sClasses)-FindSubString(skillFeat.sClasses, "1")));
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iFocusFeat);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iModifier);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iFeat);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, skillFeat.iSkill);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_SkillRanks_SkillFeat NWNX_SkillRanks_AddSkillFeatClass(struct NWNX_SkillRanks_SkillFeat skillFeat, int iClass)
|
||||
{
|
||||
if (GetStringLength(skillFeat.sClasses) < 255)
|
||||
{
|
||||
int i;
|
||||
string sPad;
|
||||
for (i = 0; i < 255-GetStringLength(skillFeat.sClasses); i++) { sPad = sPad + "0"; }
|
||||
skillFeat.sClasses = sPad + skillFeat.sClasses;
|
||||
}
|
||||
skillFeat.sClasses = GetStringLeft(skillFeat.sClasses, 254 - iClass) + "1" + GetStringRight(skillFeat.sClasses, iClass);
|
||||
return skillFeat;
|
||||
}
|
||||
|
||||
void NWNX_SkillRanks_SetSkillFeatFocusModifier(int iModifier, int epicFocus = FALSE)
|
||||
{
|
||||
string sFunc = "SetSkillFeatFocusModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, epicFocus);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iModifier);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SkillRanks_GetBlindnessPenalty()
|
||||
{
|
||||
string sFunc = "GetBlindnessPenalty";
|
||||
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_SkillRanks_SetBlindnessPenalty(int iModifier)
|
||||
{
|
||||
string sFunc = "SetBlindnessPenalty";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iModifier);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SkillRanks_GetAreaModifier(object oArea, int iSkill)
|
||||
{
|
||||
string sFunc = "GetAreaModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iSkill);
|
||||
NWNX_PushArgumentObject(NWNX_SkillRanks, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_SkillRanks, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_SkillRanks_SetAreaModifier(object oArea, int iSkill, int iModifier)
|
||||
{
|
||||
string sFunc = "SetAreaModifier";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iModifier);
|
||||
NWNX_PushArgumentInt(NWNX_SkillRanks, sFunc, iSkill);
|
||||
NWNX_PushArgumentObject(NWNX_SkillRanks, sFunc, oArea);
|
||||
NWNX_CallFunction(NWNX_SkillRanks, sFunc);
|
||||
}
|
43
_module/nss/nwnx_spellcheck.nss
Normal file
43
_module/nss/nwnx_spellcheck.nss
Normal file
@ -0,0 +1,43 @@
|
||||
/// @addtogroup spellchecker SpellChecker
|
||||
/// @brief Functions related to spellchecking
|
||||
/// @{
|
||||
/// @file nwnx_spellcheck.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_SpellChecker = "NWNX_SpellChecker"; ///< @private
|
||||
|
||||
/// @brief Finds misspells in a string.
|
||||
/// @param sentence The sentence to check.
|
||||
/// @return The spelling mistakes in the sentence, comma delimited. Returns blank if no errors or if .so file
|
||||
/// is improperly installed.
|
||||
/// @note If it returns an error in every word, even when spelled correctly, the dictionary is not set up correctly.
|
||||
/// @warning These functions can be performance heavy, do limit how many calls and/or how long of a sentence is passed.
|
||||
/// Make use of **DelayCommands** and **AssignCommands**
|
||||
string NWNX_SpellChecker_FindMisspell(string sentence);
|
||||
|
||||
/// @brief Get suggestions on a single word, comma delimited.
|
||||
/// @param word The string to check for suggestions.
|
||||
/// @return A comma delimited lists of suggestions for a word. Returns blank if no errors or if .so file is improperly
|
||||
/// installed.
|
||||
/// @warning These functions can be performance heavy, do limit how many calls and/or how long of a sentence is passed.
|
||||
/// Make use of **DelayCommands** and **AssignCommands**
|
||||
string NWNX_SpellChecker_GetSuggestSpell(string word);
|
||||
|
||||
/// @}
|
||||
|
||||
string NWNX_SpellChecker_FindMisspell(string sentence)
|
||||
{
|
||||
string sFunc = "FindMisspell";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_SpellChecker, sFunc, sentence);
|
||||
NWNX_CallFunction(NWNX_SpellChecker, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_SpellChecker, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_SpellChecker_GetSuggestSpell(string word)
|
||||
{
|
||||
string sFunc = "GetSuggestSpell";
|
||||
NWNX_PushArgumentString(NWNX_SpellChecker, sFunc, word);
|
||||
NWNX_CallFunction(NWNX_SpellChecker, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_SpellChecker, sFunc);
|
||||
}
|
254
_module/nss/nwnx_sql.nss
Normal file
254
_module/nss/nwnx_sql.nss
Normal file
@ -0,0 +1,254 @@
|
||||
/// @addtogroup sql SQL
|
||||
/// @brief Functions to interface with a database through SQL
|
||||
/// @{
|
||||
/// @file nwnx_sql.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_SQL = "NWNX_SQL"; ///< @private
|
||||
|
||||
/// @brief Prepares the provided query for execution.
|
||||
/// @note This does not execute the query. Will also clear any previous state.
|
||||
/// @param query The query to prepare.
|
||||
/// @return TRUE if the query was successfully prepared.
|
||||
int NWNX_SQL_PrepareQuery(string query);
|
||||
|
||||
/// @brief Executes a query which has been prepared.
|
||||
/// @return The ID of this query if successful, else FALSE.
|
||||
int NWNX_SQL_ExecutePreparedQuery();
|
||||
|
||||
/// @brief Directly execute an SQL query.
|
||||
/// @note Clears previously prepared query states.
|
||||
/// @return The ID of this query if successful, else FALSE.
|
||||
int NWNX_SQL_ExecuteQuery(string query);
|
||||
|
||||
/// @anchor sql_rtrnr
|
||||
/// @return TRUE if one or more rows are ready, FALSE otherwise.
|
||||
int NWNX_SQL_ReadyToReadNextRow();
|
||||
|
||||
/// @anchor sql_rnr
|
||||
/// @brief Reads the next row of returned data.
|
||||
/// @remark Should only be called after a successful call to @ref sql_rtrnr "NWNX_SQL_ReadyToReadNextRow()".
|
||||
void NWNX_SQL_ReadNextRow();
|
||||
|
||||
/// @param column The column to read in the active row.
|
||||
/// @return Data at the nth (0-based) column of the active row.
|
||||
/// @remark Should only be called after a successful call to @ref sql_rnr "NWNX_SQL_ReadNextRow()".
|
||||
string NWNX_SQL_ReadDataInActiveRow(int column = 0);
|
||||
|
||||
/// @brief Set the int value of a prepared statement at given position.
|
||||
/// @param position The nth ? in a prepared statement.
|
||||
/// @param value The value to set.
|
||||
void NWNX_SQL_PreparedInt(int position, int value);
|
||||
|
||||
/// @brief Set the string value of a prepared statement at given position.
|
||||
/// @param position The nth ? in a prepared statement.
|
||||
/// @param value The value to set.
|
||||
void NWNX_SQL_PreparedString(int position, string value);
|
||||
|
||||
/// @brief Set the float value of a prepared statement at given position.
|
||||
/// @param position The nth ? in a prepared statement.
|
||||
/// @param value The value to set.
|
||||
void NWNX_SQL_PreparedFloat(int position, float value);
|
||||
|
||||
/// @brief Set the ObjectId value of a prepared statement at given position.
|
||||
/// @param position The nth ? in a prepared statement.
|
||||
/// @param value The value to set.
|
||||
void NWNX_SQL_PreparedObjectId(int position, object value);
|
||||
|
||||
/// @brief Set the full serialized object value of a prepared statement at given position.
|
||||
/// @param position The nth ? in a prepared statement.
|
||||
/// @param value The value to set.
|
||||
/// @param base64 Use base64-encoded string format if TRUE (default), otherwise use binary format.
|
||||
void NWNX_SQL_PreparedObjectFull(int position, object value, int base64 = TRUE);
|
||||
|
||||
/// @brief Like NWNX_SQL_ReadDataInActiveRow, but for full serialized objects.
|
||||
///
|
||||
/// The object will be deserialized and created in the game. New object ID is returned.
|
||||
///
|
||||
/// The exact behavior depends on type of deserialized object and owner object:
|
||||
/// * If object is an item, and owner if placeable, creature or container, the item will be created in its inventory
|
||||
/// * If owner is an area, the object will be created on the ground at Vector(x,y,z)
|
||||
/// * Otherwise, the object will be created outside the world and needs to be ported manually.
|
||||
///
|
||||
/// @param column The column to read in the active row.
|
||||
/// @param owner The owner of the object.
|
||||
/// @param x, y, z The vector for objects to be placed in areas.
|
||||
/// @param base64 Use base64-encoded string format if TRUE (default), otherwise use binary format.
|
||||
/// @return The deserialized object.
|
||||
object NWNX_SQL_ReadFullObjectInActiveRow(int column = 0, object owner = OBJECT_INVALID, float x = 0.0, float y = 0.0, float z = 0.0, int base64 = TRUE);
|
||||
|
||||
/// @brief Gets the rows affected by a query.
|
||||
/// @remark This command is for non-row-based statements like INSERT, UPDATE, DELETE, etc.
|
||||
/// @return Number of rows affected by SQL statement or -1 if the query was not non-row-based.
|
||||
int NWNX_SQL_GetAffectedRows();
|
||||
|
||||
/// Gets the database type.
|
||||
/// @return The database type we're interacting with.
|
||||
/// @remark This is the same value as the value of NWNX_SQL_TYPE environment variable.
|
||||
string NWNX_SQL_GetDatabaseType();
|
||||
|
||||
/// @brief Free any resources attached to an existing prepared query.
|
||||
/// @remark Resources are automatically freed when a new query is prepared, so calling this isn't necessary.
|
||||
void NWNX_SQL_DestroyPreparedQuery();
|
||||
|
||||
/// @return The last error message generated by the database.
|
||||
string NWNX_SQL_GetLastError();
|
||||
|
||||
/// @brief Gets the number of parameteres expected by a prepared query.
|
||||
/// @return Returns the number of parameters expected by the prepared query or -1 if no query is prepared.
|
||||
int NWNX_SQL_GetPreparedQueryParamCount();
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_SQL_PrepareQuery(string query)
|
||||
{
|
||||
string sFunc = "PrepareQuery";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_SQL, sFunc, query);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SQL_ExecutePreparedQuery()
|
||||
{
|
||||
string sFunc = "ExecutePreparedQuery";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SQL_ExecuteQuery(string query)
|
||||
{
|
||||
// Note: the implementation might change as support for more SQL targets arrives.
|
||||
if (NWNX_SQL_PrepareQuery(query))
|
||||
{
|
||||
int ret = NWNX_SQL_ExecutePreparedQuery();
|
||||
NWNX_SQL_DestroyPreparedQuery();
|
||||
return ret;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int NWNX_SQL_ReadyToReadNextRow()
|
||||
{
|
||||
string sFunc = "ReadyToReadNextRow";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_SQL_ReadNextRow()
|
||||
{
|
||||
string sFunc = "ReadNextRow";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_SQL_ReadDataInActiveRow(int column = 0)
|
||||
{
|
||||
string sFunc = "ReadDataInActiveRow";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, column);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
|
||||
void NWNX_SQL_PreparedInt(int position, int value)
|
||||
{
|
||||
string sFunc = "PreparedInt";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, position);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
}
|
||||
void NWNX_SQL_PreparedString(int position, string value)
|
||||
{
|
||||
string sFunc = "PreparedString";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_SQL, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, position);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
|
||||
}
|
||||
void NWNX_SQL_PreparedFloat(int position, float value)
|
||||
{
|
||||
string sFunc = "PreparedFloat";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_SQL, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, position);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
|
||||
}
|
||||
void NWNX_SQL_PreparedObjectId(int position, object value)
|
||||
{
|
||||
string sFunc = "PreparedObjectId";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_SQL, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, position);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
|
||||
}
|
||||
void NWNX_SQL_PreparedObjectFull(int position, object value, int base64 = TRUE)
|
||||
{
|
||||
string sFunc = "PreparedObjectFull";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, base64);
|
||||
NWNX_PushArgumentObject(NWNX_SQL, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, position);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_SQL_ReadFullObjectInActiveRow(int column = 0, object owner = OBJECT_INVALID, float x = 0.0, float y = 0.0, float z = 0.0, int base64 = TRUE)
|
||||
{
|
||||
string sFunc = "ReadFullObjectInActiveRow";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, base64);
|
||||
NWNX_PushArgumentFloat(NWNX_SQL, sFunc, z);
|
||||
NWNX_PushArgumentFloat(NWNX_SQL, sFunc, y);
|
||||
NWNX_PushArgumentFloat(NWNX_SQL, sFunc, x);
|
||||
NWNX_PushArgumentObject(NWNX_SQL, sFunc, owner);
|
||||
NWNX_PushArgumentInt(NWNX_SQL, sFunc, column);
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueObject(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SQL_GetAffectedRows()
|
||||
{
|
||||
string sFunc = "GetAffectedRows";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_SQL_GetDatabaseType()
|
||||
{
|
||||
string sFunc = "GetDatabaseType";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_SQL_DestroyPreparedQuery()
|
||||
{
|
||||
string sFunc = "DestroyPreparedQuery";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_SQL_GetLastError()
|
||||
{
|
||||
string sFunc = "GetLastError";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_SQL, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_SQL_GetPreparedQueryParamCount()
|
||||
{
|
||||
string sFunc = "GetPreparedQueryParamCount";
|
||||
|
||||
NWNX_CallFunction(NWNX_SQL, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_SQL, sFunc);
|
||||
}
|
21
_module/nss/nwnx_tests.nss
Normal file
21
_module/nss/nwnx_tests.nss
Normal file
@ -0,0 +1,21 @@
|
||||
/// @ingroup nwnx
|
||||
/// @addtogroup tests NWNX Tests
|
||||
/// @brief Helper functions when running the test scripts
|
||||
/// @{
|
||||
/// @file nwnx_tests.nss
|
||||
|
||||
/// @brief Reports the test results
|
||||
/// @param sPlugin The plugin calling the test.
|
||||
/// @param sTestName The name of the test.
|
||||
/// @param bSuccess TRUE if the test passed.
|
||||
void NWNX_Tests_Report(string sPlugin, string sTestName, int bSuccess);
|
||||
|
||||
void NWNX_Tests_Report(string sPlugin, string sTestName, int bSuccess)
|
||||
{
|
||||
if (bSuccess)
|
||||
WriteTimestampedLogEntry(sPlugin + ": " + sTestName + "() success");
|
||||
else
|
||||
WriteTimestampedLogEntry(sPlugin + ": " + sTestName + "() failed");
|
||||
}
|
||||
|
||||
/// @} // End of tests
|
371
_module/nss/nwnx_tileset.nss
Normal file
371
_module/nss/nwnx_tileset.nss
Normal file
@ -0,0 +1,371 @@
|
||||
/// @addtogroup tileset Tileset
|
||||
/// @brief An advanced plugin that exposes additional tileset and tile properties and allows builders to override the tiles of an area created with CreateArea().
|
||||
/// @{
|
||||
/// @file nwnx_tileset.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Tileset = "NWNX_Tileset"; ///< @private
|
||||
|
||||
/// @brief A structure containing general tileset data.
|
||||
struct NWNX_Tileset_TilesetData
|
||||
{
|
||||
int nNumTileData; ///< The number of tiles in the tileset.
|
||||
float fHeightTransition; ///< The height difference between tiles on different heights.
|
||||
int nNumTerrain; ///< The number of terrains in the tileset.
|
||||
int nNumCrossers; ///< The number of crossers in the tileset.
|
||||
int nNumGroups; ///< The number of groups in the tileset.
|
||||
string sBorderTerrain; ///< The default border terrain of the tileset.
|
||||
string sDefaultTerrain; ///< The default terrain of the tileset.
|
||||
string sFloorTerrain; ///< The default floor terrain of the tileset.
|
||||
int nDisplayNameStrRef; ///< The name of the tileset as strref, -1 if not set.
|
||||
string sUnlocalizedName; ///< The unlocalized name of the tileset, "" if not set.
|
||||
int bInterior; ///< The type of tileset. TRUE for interior, FALSE for exterior.
|
||||
int bHasHeightTransition; ///< TRUE if the tileset supports multiple height levels. FALSE if not.
|
||||
};
|
||||
|
||||
/// @brief A structure containing the group data for a tileset.
|
||||
struct NWNX_Tileset_TilesetGroupData
|
||||
{
|
||||
string sName; ///< The name of the group.
|
||||
int nStrRef; ///< The StrRef of the group.
|
||||
int nRows; ///< The number of rows the group has.
|
||||
int nColumns; ///< The number of columns the group has.
|
||||
};
|
||||
|
||||
/// @brief A structure containing the edge and corner types of a tile.
|
||||
struct NWNX_Tileset_TileEdgesAndCorners
|
||||
{
|
||||
string sTopLeft; ///< The top left corner.
|
||||
string sTop; ///< The top edge.
|
||||
string sTopRight; ///< The top right corner.
|
||||
string sRight; ///< The right edge.
|
||||
string sBottomRight; ///< The bottom right corner.
|
||||
string sBottom; ///< The bottom edge.
|
||||
string sBottomLeft; ///< The bottom left corner.
|
||||
string sLeft; ///< The left edge.
|
||||
};
|
||||
|
||||
/// @brief A structure containing the door data for a tile.
|
||||
struct NWNX_Tileset_TileDoorData
|
||||
{
|
||||
int nType; ///< The type of door, returns an index into doortypes.2da.
|
||||
float fX; ///< The X position of the door.
|
||||
float fY; ///< The Y position of the door.
|
||||
float fZ; ///< The Z position of the door.
|
||||
float fOrientation; ///< The orientation of the door.
|
||||
};
|
||||
|
||||
/// @brief A structure containing custom tile data,
|
||||
struct NWNX_Tileset_CustomTileData
|
||||
{
|
||||
int nTileID; ///< The tile ID. See the tileset's .set file.
|
||||
int nOrientation; ///< The orientation of the tile. Valid values: 0-3.
|
||||
int nHeight; ///< The height of the tile.
|
||||
|
||||
int nMainLightColor1; ///< A `TILE_MAIN_LIGHT_COLOR_*` value.
|
||||
int nMainLightColor2; ///< A `TILE_MAIN_LIGHT_COLOR_*` value.
|
||||
int nSourceLightColor1; ///< A `TILE_SOURCE_LIGHT_COLOR_*` value.
|
||||
int nSourceLightColor2; ///< A `TILE_SOURCE_LIGHT_COLOR_*` value.
|
||||
|
||||
int bAnimLoop1; ///< A bool to enable or disable the tile's first anim loop.
|
||||
int bAnimLoop2; ///< A bool to enable or disable the tile's second anim loop.
|
||||
int bAnimLoop3; ///< A bool to enable or disable the tile's third anim loop.
|
||||
};
|
||||
|
||||
/// @brief Get general data of sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @return A NWNX_Tileset_TilesetData struct.
|
||||
struct NWNX_Tileset_TilesetData NWNX_Tileset_GetTilesetData(string sTileset);
|
||||
|
||||
/// @brief Get the name of sTileset's terrain at nIndex.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nIndex The index of the terrain. Range: NWNX_Tileset_TilesetData.nNumTerrain > nIndex >= 0
|
||||
/// @return The terrain name or "" on error.
|
||||
string NWNX_Tileset_GetTilesetTerrain(string sTileset, int nIndex);
|
||||
|
||||
/// @brief Get the name of sTileset's crosser at nIndex.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nIndex The index of the crosser. Range: NWNX_Tileset_TilesetData.nNumCrossers > nIndex >= 0
|
||||
/// @return The crosser name or "" on error.
|
||||
string NWNX_Tileset_GetTilesetCrosser(string sTileset, int nIndex);
|
||||
|
||||
/// @brief Get general data of the group at nIndex in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nIndex The index of the group. Range: NWNX_Tileset_TilesetData.nNumGroups > nIndex >= 0
|
||||
/// @return A NWNX_Tileset_TilesetGroupData struct.
|
||||
struct NWNX_Tileset_TilesetGroupData NWNX_Tileset_GetTilesetGroupData(string sTileset, int nIndex);
|
||||
|
||||
/// @brief Get tile ID of the tile at nIndex.
|
||||
/// @note NWNX_Tileset_GetTilesetGroupData() needs to be called first.
|
||||
/// @param nIndex The index of the tile. Range: (NWNX_Tileset_TilesetGroupData.nRows * NWNX_Tileset_TilesetGroupData.nColumns) > nIndex >= 0
|
||||
/// @return The tile ID or 0 on error.
|
||||
int NWNX_Tileset_GetTilesetGroupTile(int nIndex);
|
||||
|
||||
/// @brief Get the model name of a tile in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nTileID The tile ID.
|
||||
/// @return The model name or "" on error.
|
||||
string NWNX_Tileset_GetTileModel(string sTileset, int nTileID);
|
||||
|
||||
/// @brief Get the minimap texture name of a tile in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nTileID The tile ID.
|
||||
/// @return The minimap texture name or "" on error.
|
||||
string NWNX_Tileset_GetTileMinimapTexture(string sTileset, int nTileID);
|
||||
|
||||
/// @brief Get the edges and corners of a tile in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nTileID The tile ID.
|
||||
/// @return A NWNX_Tileset_TileEdgesAndCorners struct.
|
||||
struct NWNX_Tileset_TileEdgesAndCorners NWNX_Tileset_GetTileEdgesAndCorners(string sTileset, int nTileID);
|
||||
|
||||
/// @brief Get the number of doors of a tile in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nTileID The tile ID.
|
||||
/// @return The amount of doors.
|
||||
int NWNX_Tileset_GetTileNumDoors(string sTileset, int nTileID);
|
||||
|
||||
/// @brief Get the door data of a tile in sTileset.
|
||||
/// @param sTileset The tileset.
|
||||
/// @param nTileID The tile ID.
|
||||
/// @param nIndex The index of the door. Range: NWNX_Tileset_GetTileNumDoors() > nIndex >= 0
|
||||
/// @return A NWNX_Tileset_TileDoorData struct.
|
||||
struct NWNX_Tileset_TileDoorData NWNX_Tileset_GetTileDoorData(string sTileset, int nTileID, int nIndex = 0);
|
||||
|
||||
/// @brief Override the tiles of sAreaResRef with data in sOverrideName.
|
||||
/// @param sAreaResRef The resref of the area to override.
|
||||
/// @param sOverrideName The name of the override containing the custom tile data or "" to remove the override.
|
||||
void NWNX_Tileset_SetAreaTileOverride(string sAreaResRef, string sOverrideName);
|
||||
|
||||
/// @brief Create a tile override named sOverrideName.
|
||||
/// @param sOverrideName The name of the override.
|
||||
/// @param sTileSet The tileset the override should use.
|
||||
/// @param nWidth The width of the area. Valid values: 1-32.
|
||||
/// @param nHeight The height of the area. Valid values: 1-32.
|
||||
void NWNX_Tileset_CreateTileOverride(string sOverrideName, string sTileSet, int nWidth, int nHeight);
|
||||
|
||||
/// @brief Delete a tile override named sOverrideName.
|
||||
/// @note This will also delete all custom tile data associated with sOverrideName.
|
||||
/// @param sOverrideName The name of the override.
|
||||
void NWNX_Tileset_DeleteTileOverride(string sOverrideName);
|
||||
|
||||
/// @brief Set custom tile data for the tile at nIndex in sOverrideName.
|
||||
/// @note An override must first be created with NWNX_Tileset_CreateTileOverride().
|
||||
/// @param sOverrideName The name of the override.
|
||||
/// @param nIndex The index of the tile.
|
||||
/// @param strCustomTileData A NWNX_Tileset_CustomTileData struct.
|
||||
void NWNX_Tileset_SetOverrideTileData(string sOverrideName, int nIndex, struct NWNX_Tileset_CustomTileData strCustomTileData);
|
||||
|
||||
/// @brief Delete custom tile data of the tile at nIndex in sOverrideName.
|
||||
/// @param sOverrideName The name of the override.
|
||||
/// @param nIndex The tile's index or -1 to remove all custom tile data.
|
||||
void NWNX_Tileset_DeleteOverrideTileData(string sOverrideName, int nIndex);
|
||||
|
||||
/// @}
|
||||
|
||||
struct NWNX_Tileset_TilesetData NWNX_Tileset_GetTilesetData(string sTileset)
|
||||
{
|
||||
string sFunc = "GetTilesetData";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
struct NWNX_Tileset_TilesetData str;
|
||||
str.bHasHeightTransition = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.bInterior = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.sUnlocalizedName = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.nDisplayNameStrRef = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.sFloorTerrain = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sDefaultTerrain = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sBorderTerrain = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.nNumGroups = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.nNumCrossers = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.nNumTerrain = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.fHeightTransition = NWNX_GetReturnValueFloat(NWNX_Tileset, sFunc);
|
||||
str.nNumTileData = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
string NWNX_Tileset_GetTilesetTerrain(string sTileset, int nIndex)
|
||||
{
|
||||
string sFunc = "GetTilesetTerrain";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Tileset_GetTilesetCrosser(string sTileset, int nIndex)
|
||||
{
|
||||
string sFunc = "GetTilesetCrosser";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Tileset_TilesetGroupData NWNX_Tileset_GetTilesetGroupData(string sTileset, int nIndex)
|
||||
{
|
||||
string sFunc = "GetTilesetGroupData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
struct NWNX_Tileset_TilesetGroupData str;
|
||||
str.nColumns = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.nRows = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.nStrRef = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
str.sName = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
int NWNX_Tileset_GetTilesetGroupTile(int nIndex)
|
||||
{
|
||||
string sFunc = "GetTilesetGroupTile";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Tileset_GetTileModel(string sTileset, int nTileID)
|
||||
{
|
||||
string sFunc = "GetTileModel";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nTileID);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Tileset_GetTileMinimapTexture(string sTileset, int nTileID)
|
||||
{
|
||||
string sFunc = "GetTileMinimapTexture";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nTileID);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Tileset_TileEdgesAndCorners NWNX_Tileset_GetTileEdgesAndCorners(string sTileset, int nTileID)
|
||||
{
|
||||
string sFunc = "GetTileEdgesAndCorners";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nTileID);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
struct NWNX_Tileset_TileEdgesAndCorners str;
|
||||
str.sLeft = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sBottomLeft = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sBottom = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sBottomRight = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sRight = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sTopRight = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sTop = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
str.sTopLeft = NWNX_GetReturnValueString(NWNX_Tileset, sFunc);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
int NWNX_Tileset_GetTileNumDoors(string sTileset, int nTileID)
|
||||
{
|
||||
string sFunc = "GetTileNumDoors";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nTileID);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Tileset_TileDoorData NWNX_Tileset_GetTileDoorData(string sTileset, int nTileID, int nIndex = 0)
|
||||
{
|
||||
string sFunc = "GetTileDoorData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nTileID);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileset);
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
|
||||
struct NWNX_Tileset_TileDoorData str;
|
||||
str.fOrientation = NWNX_GetReturnValueFloat(NWNX_Tileset, sFunc);
|
||||
str.fZ = NWNX_GetReturnValueFloat(NWNX_Tileset, sFunc);
|
||||
str.fY = NWNX_GetReturnValueFloat(NWNX_Tileset, sFunc);
|
||||
str.fX = NWNX_GetReturnValueFloat(NWNX_Tileset, sFunc);
|
||||
str.nType = NWNX_GetReturnValueInt(NWNX_Tileset, sFunc);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
void NWNX_Tileset_SetAreaTileOverride(string sAreaResRef, string sOverrideName)
|
||||
{
|
||||
string sFunc = "SetAreaTileOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sOverrideName);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sAreaResRef);
|
||||
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Tileset_CreateTileOverride(string sOverrideName, string sTileSet, int nWidth, int nHeight)
|
||||
{
|
||||
string sFunc = "CreateTileOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nHeight);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nWidth);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sTileSet);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sOverrideName);
|
||||
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Tileset_DeleteTileOverride(string sOverrideName)
|
||||
{
|
||||
string sFunc = "DeleteTileOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sOverrideName);
|
||||
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Tileset_SetOverrideTileData(string sOverrideName, int nIndex, struct NWNX_Tileset_CustomTileData strCustomTileData)
|
||||
{
|
||||
string sFunc = "SetOverrideTileData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.bAnimLoop3);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.bAnimLoop2);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.bAnimLoop1);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nSourceLightColor2);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nSourceLightColor1);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nMainLightColor2);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nMainLightColor1);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nHeight);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nOrientation);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, strCustomTileData.nTileID);
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sOverrideName);
|
||||
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Tileset_DeleteOverrideTileData(string sOverrideName, int nIndex)
|
||||
{
|
||||
string sFunc = "DeleteOverrideTileData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Tileset, sFunc, nIndex);
|
||||
NWNX_PushArgumentString(NWNX_Tileset, sFunc, sOverrideName);
|
||||
|
||||
NWNX_CallFunction(NWNX_Tileset, sFunc);
|
||||
}
|
63
_module/nss/nwnx_time.nss
Normal file
63
_module/nss/nwnx_time.nss
Normal file
@ -0,0 +1,63 @@
|
||||
/// @addtogroup time Time
|
||||
/// @brief Provides various time related functions
|
||||
/// @{
|
||||
/// @file nwnx_time.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Time = "NWNX_Time"; ///< @private
|
||||
|
||||
/// @brief Returns the current date.
|
||||
/// @return The date in the format (mm/dd/yyyy).
|
||||
string NWNX_Time_GetSystemDate();
|
||||
|
||||
/// @brief Returns current time.
|
||||
/// @return The current time in the format (24:mm:ss).
|
||||
string NWNX_Time_GetSystemTime();
|
||||
|
||||
/// @return Returns the number of seconds since midnight on January 1, 1970.
|
||||
int NWNX_Time_GetTimeStamp();
|
||||
|
||||
/// @brief A high resolution timestamp
|
||||
struct NWNX_Time_HighResTimestamp
|
||||
{
|
||||
int seconds; ///< Seconds since epoch
|
||||
int microseconds; ///< Microseconds
|
||||
};
|
||||
|
||||
/// @return Returns the number of microseconds since midnight on January 1, 1970.
|
||||
struct NWNX_Time_HighResTimestamp NWNX_Time_GetHighResTimeStamp();
|
||||
|
||||
/// @}
|
||||
|
||||
string NWNX_Time_GetSystemDate()
|
||||
{
|
||||
string sFunc = "GetSystemDate";
|
||||
NWNX_CallFunction(NWNX_Time, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Time, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Time_GetSystemTime()
|
||||
{
|
||||
string sFunc = "GetSystemTime";
|
||||
NWNX_CallFunction(NWNX_Time, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Time, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Time_GetTimeStamp()
|
||||
{
|
||||
string sFunc = "GetTimeStamp";
|
||||
|
||||
NWNX_CallFunction(NWNX_Time, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Time, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Time_HighResTimestamp NWNX_Time_GetHighResTimeStamp()
|
||||
{
|
||||
struct NWNX_Time_HighResTimestamp t;
|
||||
string sFunc = "GetHighResTimeStamp";
|
||||
|
||||
NWNX_CallFunction(NWNX_Time, sFunc);
|
||||
t.microseconds = NWNX_GetReturnValueInt(NWNX_Time, sFunc);
|
||||
t.seconds = NWNX_GetReturnValueInt(NWNX_Time, sFunc);
|
||||
return t;
|
||||
}
|
602
_module/nss/nwnx_util.nss
Normal file
602
_module/nss/nwnx_util.nss
Normal file
@ -0,0 +1,602 @@
|
||||
/// @addtogroup util Util
|
||||
/// @brief Provides various utility functions that don't have a better home
|
||||
/// @{
|
||||
/// @file nwnx_util.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Util = "NWNX_Util"; ///< @private
|
||||
|
||||
/// @name Resref Types
|
||||
/// @anchor resref_types
|
||||
/// Constants for the various types of resrefs.
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_UTIL_RESREF_TYPE_NSS = 2009;
|
||||
const int NWNX_UTIL_RESREF_TYPE_NCS = 2010;
|
||||
const int NWNX_UTIL_RESREF_TYPE_AREA_ARE = 2012;
|
||||
const int NWNX_UTIL_RESREF_TYPE_TWODA = 2017;
|
||||
const int NWNX_UTIL_RESREF_TYPE_AREA_GIT = 2023;
|
||||
const int NWNX_UTIL_RESREF_TYPE_ITEM = 2025;
|
||||
const int NWNX_UTIL_RESREF_TYPE_CREATURE = 2027;
|
||||
const int NWNX_UTIL_RESREF_TYPE_DIALOG = 2029;
|
||||
const int NWNX_UTIL_RESREF_TYPE_TRIGGER = 2032;
|
||||
const int NWNX_UTIL_RESREF_TYPE_SOUND = 2035;
|
||||
const int NWNX_UTIL_RESREF_TYPE_ENCOUNTER = 2040;
|
||||
const int NWNX_UTIL_RESREF_TYPE_DOOR = 2042;
|
||||
const int NWNX_UTIL_RESREF_TYPE_PLACEABLE = 2044;
|
||||
const int NWNX_UTIL_RESREF_TYPE_STORE = 2051;
|
||||
const int NWNX_UTIL_RESREF_TYPE_WAYPOINT = 2058;
|
||||
///@}
|
||||
|
||||
/// @brief A world time struct
|
||||
struct NWNX_Util_WorldTime
|
||||
{
|
||||
int nCalendarDay; ///< The calendar day
|
||||
int nTimeOfDay; ///< The time of day
|
||||
};
|
||||
|
||||
/// @brief Gets the name of the currently executing script.
|
||||
/// @note If depth is > 0, it will return the name of the script that called this one via ExecuteScript().
|
||||
/// @param depth to seek the executing script.
|
||||
/// @return The name of the currently executing script.
|
||||
string NWNX_Util_GetCurrentScriptName(int depth = 0);
|
||||
|
||||
/// @brief Gets a string that contains the ascii table.
|
||||
/// @note The character at index 0 is a space.
|
||||
/// @return A string that contains all characters at their position (e.g. 'A' at 65).
|
||||
string NWNX_Util_GetAsciiTableString();
|
||||
|
||||
/// @brief Gets an integer hash of a string.
|
||||
/// @param str The string to hash.
|
||||
/// @return The hashed string as an integer.
|
||||
int NWNX_Util_Hash(string str);
|
||||
|
||||
/// @brief Gets the value of customTokenNumber.
|
||||
/// @param customTokenNumber The token number to query.
|
||||
/// @return The string representation of the token value.
|
||||
string NWNX_Util_GetCustomToken(int customTokenNumber);
|
||||
|
||||
/// @brief Convert an effect type to an itemproperty type.
|
||||
/// @param e The effect to convert to an itemproperty.
|
||||
/// @return The converted itemproperty.
|
||||
itemproperty NWNX_Util_EffectToItemProperty(effect e);
|
||||
|
||||
///
|
||||
/// @brief Convert an itemproperty type to an effect type.
|
||||
/// @param ip The itemproperty to convert to an effect.
|
||||
/// @return The converted effect.
|
||||
effect NWNX_Util_ItemPropertyToEffect(itemproperty ip);
|
||||
|
||||
/// @brief Strip any color codes from a string.
|
||||
/// @param str The string to strip of color.
|
||||
/// @return The new string without any color codes.
|
||||
string NWNX_Util_StripColors(string str);
|
||||
|
||||
/// @brief Determines if the supplied resref exists.
|
||||
/// @param resref The resref to check.
|
||||
/// @param type The @ref resref_types "Resref Type".
|
||||
/// @return TRUE/FALSE
|
||||
int NWNX_Util_IsValidResRef(string resref, int type = NWNX_UTIL_RESREF_TYPE_CREATURE);
|
||||
|
||||
/// @brief Retrieves an environment variable.
|
||||
/// @param sVarname The environment variable to query.
|
||||
/// @return The value of the environment variable.
|
||||
string NWNX_Util_GetEnvironmentVariable(string sVarname);
|
||||
|
||||
/// @brief Gets the module real life minutes per in game hour.
|
||||
/// @return The minutes per hour.
|
||||
int NWNX_Util_GetMinutesPerHour();
|
||||
|
||||
/// @brief Set module real life minutes per in game hour.
|
||||
/// @param minutes The minutes per hour.
|
||||
void NWNX_Util_SetMinutesPerHour(int minutes);
|
||||
|
||||
/// @anchor util_encode_url
|
||||
/// @brief Encodes a string for usage in a URL.
|
||||
/// @param str The string to encode for a URL.
|
||||
/// @return The url encoded string.
|
||||
string NWNX_Util_EncodeStringForURL(string str);
|
||||
|
||||
/// @anchor twoda_row_count
|
||||
/// @brief Gets the row count for a 2da.
|
||||
/// @param str The 2da to check (do not include the .2da).
|
||||
/// @return The amount of rows in the 2da.
|
||||
int NWNX_Util_Get2DARowCount(string str);
|
||||
|
||||
/// @brief Get the first resref of nType.
|
||||
/// @param nType A @ref resref_types "Resref Type".
|
||||
/// @param sRegexFilter Lets you filter out resrefs using a regexfilter.
|
||||
/// For example: **nwnx_.\*** gets you all scripts prefixed with nwnx_
|
||||
/// when using the NSS resref type.
|
||||
/// @param bModuleResourcesOnly If TRUE only custom resources will be returned.
|
||||
/// @return The first resref found or "" if none is found.
|
||||
string NWNX_Util_GetFirstResRef(int nType, string sRegexFilter = "", int bModuleResourcesOnly = TRUE);
|
||||
|
||||
/// @brief Get the next resref.
|
||||
/// @return The next resref found or "" if none is found.
|
||||
string NWNX_Util_GetNextResRef();
|
||||
|
||||
/// @brief Get the ticks per second of the server.
|
||||
/// @remark Useful to dynamically detect lag and adjust behavior accordingly.
|
||||
/// @return The ticks per second.
|
||||
int NWNX_Util_GetServerTicksPerSecond();
|
||||
|
||||
/// @brief Get the last created object.
|
||||
/// @param nObjectType Does not take the NWScript OBJECT_TYPE_* constants.
|
||||
/// Use NWNX_Consts_TranslateNWScriptObjectType() to get their NWNX equivalent.
|
||||
/// @param nNthLast The nth last object created.
|
||||
/// @return The last created object. On error, this returns OBJECT_INVALID.
|
||||
object NWNX_Util_GetLastCreatedObject(int nObjectType, int nNthLast = 1);
|
||||
|
||||
/// @brief Compiles and adds a script to the UserDirectory/nwnx folder, or to the location of sAlias.
|
||||
/// @note Will override existing scripts that are in the module.
|
||||
/// @param sFileName The script filename without extension, 16 or less characters.
|
||||
/// @param sScriptData The script data to compile
|
||||
/// @param bWrapIntoMain Set to TRUE to wrap sScriptData into void main(){}.
|
||||
/// @param sAlias The alias of the resource directory to add the ncs file to. Default: UserDirectory/nwnx
|
||||
/// @return "" on success, or the compilation error.
|
||||
string NWNX_Util_AddScript(string sFileName, string sScriptData, int bWrapIntoMain = FALSE, string sAlias = "NWNX");
|
||||
|
||||
/// @brief Gets the contents of a .nss script file as a string.
|
||||
/// @param sScriptName The name of the script to get the contents of.
|
||||
/// @param nMaxLength The max length of the return string, -1 to get everything
|
||||
/// @return The script file contents or "" on error.
|
||||
string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1);
|
||||
|
||||
/// @brief Adds a nss file to the UserDirectory/nwnx folder, or to the location of sAlias.
|
||||
/// @note Will override existing nss files that are in the module
|
||||
/// @param sFileName The script filename without extension, 16 or less characters.
|
||||
/// @param sContents The contents of the nss file
|
||||
/// @param sAlias The alias of the resource directory to add the nss file to. Default: UserDirectory/nwnx
|
||||
/// @return TRUE on success.
|
||||
int NWNX_Util_AddNSSFile(string sFileName, string sContents, string sAlias = "NWNX");
|
||||
|
||||
/// @brief Remove sFileName of nType from the UserDirectory/nwnx folder, or from the location of sAlias.
|
||||
/// @param sFileName The filename without extension, 16 or less characters.
|
||||
/// @param nType The @ref resref_types "Resref Type".
|
||||
/// @param sAlias The alias of the resource directory to remove the file from. Default: UserDirectory/nwnx
|
||||
/// @return TRUE on success.
|
||||
int NWNX_Util_RemoveNWNXResourceFile(string sFileName, int nType, string sAlias = "NWNX");
|
||||
|
||||
/// @brief Set the NWScript instruction limit.
|
||||
/// @param nInstructionLimit The new limit or -1 to reset to default.
|
||||
void NWNX_Util_SetInstructionLimit(int nInstructionLimit);
|
||||
|
||||
/// @brief Get the NWScript instruction limit.
|
||||
int NWNX_Util_GetInstructionLimit();
|
||||
|
||||
/// @brief Set the number of NWScript instructions currently executed.
|
||||
/// @param nInstructions The number of instructions, must be >= 0.
|
||||
void NWNX_Util_SetInstructionsExecuted(int nInstructions);
|
||||
|
||||
/// @brief Get the number of NWScript instructions currently executed.
|
||||
int NWNX_Util_GetInstructionsExecuted();
|
||||
|
||||
/// @brief Register a server console command that will execute a script chunk.
|
||||
/// @note Example usage: NWNX_Util_RegisterServerConsoleCommand("test", "PrintString(\"Test Command -> Args: $args\");");
|
||||
/// @param sCommand The name of the command.
|
||||
/// @param sScriptChunk The script chunk to run. You can use $args to get the console command arguments.
|
||||
/// @return TRUE on success.
|
||||
int NWNX_Util_RegisterServerConsoleCommand(string sCommand, string sScriptChunk);
|
||||
|
||||
/// @brief Unregister a server console command that was registered with NWNX_Util_RegisterServerConsoleCommand().
|
||||
/// @param sCommand The name of the command.
|
||||
void NWNX_Util_UnregisterServerConsoleCommand(string sCommand);
|
||||
|
||||
/// @brief Determines if the given plugin exists and is enabled.
|
||||
/// @param sPlugin The name of the plugin to check. This is the case sensitive plugin name as used by NWNX_CallFunction, NWNX_PushArgumentX
|
||||
/// @note Example usage: NWNX_Util_PluginExists("NWNX_Creature");
|
||||
/// @return TRUE if the plugin exists and is enabled, otherwise FALSE.
|
||||
int NWNX_Util_PluginExists(string sPlugin);
|
||||
|
||||
/// @brief Gets the server's current working user folder.
|
||||
/// @return The absolute path of the server's home directory (-userDirectory)
|
||||
string NWNX_Util_GetUserDirectory();
|
||||
|
||||
/// @brief Get the return value of the last run script with a StartingConditional
|
||||
/// @return Return value of the last run script.
|
||||
int NWNX_Util_GetScriptReturnValue();
|
||||
|
||||
/// @brief Create a door.
|
||||
/// @param sResRef The ResRef of the door.
|
||||
/// @param locLocation The location to create the door at.
|
||||
/// @param sNewTag An optional new tag for the door.
|
||||
/// @param nAppearanceType An optional index into doortypes.2da for appearance.
|
||||
/// @return The door, or OBJECT_INVALID on failure.
|
||||
object NWNX_Util_CreateDoor(string sResRef, location locLocation, string sNewTag = "", int nAppearanceType = -1);
|
||||
|
||||
/// @brief Set the object that will be returned by GetItemActivator.
|
||||
/// @param oObject An object.
|
||||
void NWNX_Util_SetItemActivator(object oObject);
|
||||
|
||||
/// @brief Get the world time as calendar day and time of day.
|
||||
/// @note This function is useful for calculating effect expiry times.
|
||||
/// @param fAdjustment An adjustment in seconds, 0.0f will return the current world time,
|
||||
/// positive or negative values will return a world time in the future or past.
|
||||
/// @return A NWNX_Util_WorldTime struct with the calendar day and time of day.
|
||||
struct NWNX_Util_WorldTime NWNX_Util_GetWorldTime(float fAdjustment = 0.0f);
|
||||
|
||||
/// @brief Set a server-side resource override.
|
||||
/// @param nResType A @ref resref_types "Resref Type".
|
||||
/// @param sOldName The old resource name, 16 characters or less.
|
||||
/// @param sNewName The new resource name or "" to clear a previous override, 16 characters or less.
|
||||
void NWNX_Util_SetResourceOverride(int nResType, string sOldName, string sNewName);
|
||||
|
||||
/// @brief Get a server-side resource override.
|
||||
/// @param nResType A @ref resref_types "Resref Type".
|
||||
/// @param sName The name of the resource, 16 characters or less.
|
||||
/// @return The resource override, or "" if one is not set.
|
||||
string NWNX_Util_GetResourceOverride(int nResType, string sName);
|
||||
|
||||
/// @brief Get if a script param is set.
|
||||
/// @param sParamName The script parameter name to check.
|
||||
/// @return TRUE if the script param is set, FALSE if not or on error.
|
||||
int NWNX_Util_GetScriptParamIsSet(string sParamName);
|
||||
|
||||
/// @brief Set the module dawn hour.
|
||||
/// @param nDawnHour The new dawn hour
|
||||
void NWNX_Util_SetDawnHour(int nDawnHour);
|
||||
|
||||
/// @brief Set the module dusk hour.
|
||||
/// @param nDuskHour The new dusk hour
|
||||
void NWNX_Util_SetDuskHour(int nDuskHour);
|
||||
|
||||
/// @}
|
||||
|
||||
string NWNX_Util_GetCurrentScriptName(int depth = 0)
|
||||
{
|
||||
string sFunc = "GetCurrentScriptName";
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, depth);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetAsciiTableString()
|
||||
{
|
||||
string sFunc = "GetAsciiTableString";
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_Hash(string str)
|
||||
{
|
||||
string sFunc = "Hash";
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, str);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetCustomToken(int customTokenNumber)
|
||||
{
|
||||
string sFunc = "GetCustomToken";
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, customTokenNumber);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
itemproperty NWNX_Util_EffectToItemProperty(effect e)
|
||||
{
|
||||
string sFunc = "EffectTypeCast";
|
||||
NWNX_PushArgumentEffect(NWNX_Util, sFunc, e);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueItemProperty(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
effect NWNX_Util_ItemPropertyToEffect(itemproperty ip)
|
||||
{
|
||||
string sFunc = "EffectTypeCast";
|
||||
NWNX_PushArgumentItemProperty(NWNX_Util, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueEffect(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_StripColors(string str)
|
||||
{
|
||||
string sFunc = "StripColors";
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, str);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_IsValidResRef(string resref, int type = NWNX_UTIL_RESREF_TYPE_CREATURE)
|
||||
{
|
||||
string sFunc = "IsValidResRef";
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, type);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, resref);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetEnvironmentVariable(string sVarname)
|
||||
{
|
||||
string sFunc = "GetEnvironmentVariable";
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sVarname);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetMinutesPerHour()
|
||||
{
|
||||
string sFunc = "GetMinutesPerHour";
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetMinutesPerHour(int minutes)
|
||||
{
|
||||
string sFunc = "SetMinutesPerHour";
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, minutes);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_EncodeStringForURL(string sURL)
|
||||
{
|
||||
string sFunc = "EncodeStringForURL";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sURL);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_Get2DARowCount(string str)
|
||||
{
|
||||
string sFunc = "Get2DARowCount";
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, str);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetFirstResRef(int nType, string sRegexFilter = "", int bModuleResourcesOnly = TRUE)
|
||||
{
|
||||
string sFunc = "GetFirstResRef";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, bModuleResourcesOnly);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sRegexFilter);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nType);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetNextResRef()
|
||||
{
|
||||
string sFunc = "GetNextResRef";
|
||||
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetServerTicksPerSecond()
|
||||
{
|
||||
string sFunc = "GetServerTicksPerSecond";
|
||||
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Util_GetLastCreatedObject(int nObjectType, int nNthLast = 1)
|
||||
{
|
||||
string sFunc = "GetLastCreatedObject";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nNthLast);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nObjectType);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_AddScript(string sFileName, string sScriptData, int bWrapIntoMain = FALSE, string sAlias = "NWNX")
|
||||
{
|
||||
string sFunc = "AddScript";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sAlias);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, bWrapIntoMain);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sScriptData);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sFileName);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1)
|
||||
{
|
||||
string sFunc = "GetNSSContents";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nMaxLength);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sScriptName);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_AddNSSFile(string sFileName, string sContents, string sAlias = "NWNX")
|
||||
{
|
||||
string sFunc = "AddNSSFile";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sAlias);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sContents);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sFileName);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_RemoveNWNXResourceFile(string sFileName, int nType, string sAlias = "NWNX")
|
||||
{
|
||||
string sFunc = "RemoveNWNXResourceFile";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sAlias);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nType);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sFileName);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetInstructionLimit(int nInstructionLimit)
|
||||
{
|
||||
string sFunc = "SetInstructionLimit";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nInstructionLimit);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetInstructionLimit()
|
||||
{
|
||||
string sFunc = "GetInstructionLimit";
|
||||
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetInstructionsExecuted(int nInstructions)
|
||||
{
|
||||
string sFunc = "SetInstructionsExecuted";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nInstructions);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetInstructionsExecuted()
|
||||
{
|
||||
string sFunc = "GetInstructionsExecuted";
|
||||
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_RegisterServerConsoleCommand(string sCommand, string sScriptChunk)
|
||||
{
|
||||
string sFunc = "RegisterServerConsoleCommand";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sScriptChunk);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sCommand);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_UnregisterServerConsoleCommand(string sCommand)
|
||||
{
|
||||
string sFunc = "UnregisterServerConsoleCommand";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sCommand);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_PluginExists(string sPlugin)
|
||||
{
|
||||
string sFunc = "PluginExists";
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sPlugin);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetUserDirectory()
|
||||
{
|
||||
string sFunc = "GetUserDirectory";
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetScriptReturnValue()
|
||||
{
|
||||
string sFunc = "GetScriptReturnValue";
|
||||
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
object NWNX_Util_CreateDoor(string sResRef, location locLocation, string sNewTag = "", int nAppearanceType = -1)
|
||||
{
|
||||
string sFunc = "CreateDoor";
|
||||
|
||||
vector vPosition = GetPositionFromLocation(locLocation);
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nAppearanceType);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sNewTag);
|
||||
NWNX_PushArgumentFloat(NWNX_Util, sFunc, GetFacingFromLocation(locLocation));
|
||||
NWNX_PushArgumentFloat(NWNX_Util, sFunc, vPosition.z);
|
||||
NWNX_PushArgumentFloat(NWNX_Util, sFunc, vPosition.y);
|
||||
NWNX_PushArgumentFloat(NWNX_Util, sFunc, vPosition.x);
|
||||
NWNX_PushArgumentObject(NWNX_Util, sFunc, GetAreaFromLocation(locLocation));
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sResRef);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueObject(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetItemActivator(object oObject)
|
||||
{
|
||||
string sFunc = "SetItemActivator";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Util, sFunc, oObject);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Util_WorldTime NWNX_Util_GetWorldTime(float fAdjustment = 0.0f)
|
||||
{
|
||||
string sFunc = "GetWorldTime";
|
||||
|
||||
NWNX_PushArgumentFloat(NWNX_Util, sFunc, fAdjustment);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
struct NWNX_Util_WorldTime strWorldTime;
|
||||
strWorldTime.nTimeOfDay = NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
strWorldTime.nCalendarDay = NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
|
||||
return strWorldTime;
|
||||
}
|
||||
|
||||
void NWNX_Util_SetResourceOverride(int nResType, string sOldName, string sNewName)
|
||||
{
|
||||
string sFunc = "SetResourceOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sNewName);
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sOldName);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nResType);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Util_GetResourceOverride(int nResType, string sName)
|
||||
{
|
||||
string sFunc = "GetResourceOverride";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sName);
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nResType);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueString(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Util_GetScriptParamIsSet(string sParamName)
|
||||
{
|
||||
string sFunc = "GetScriptParamIsSet";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Util, sFunc, sParamName);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetDawnHour(int nDawnHour)
|
||||
{
|
||||
string sFunc = "SetDawnHour";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nDawnHour);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Util_SetDuskHour(int nDuskHour)
|
||||
{
|
||||
string sFunc = "SetDuskHour";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Util, sFunc, nDuskHour);
|
||||
NWNX_CallFunction(NWNX_Util, sFunc);
|
||||
}
|
77
_module/nss/nwnx_visibility.nss
Normal file
77
_module/nss/nwnx_visibility.nss
Normal file
@ -0,0 +1,77 @@
|
||||
/// @addtogroup visibility Visibility
|
||||
/// @brief Functions to manipulate visibility of objects both globally or per observer
|
||||
/// @{
|
||||
/// @file nwnx_visibility.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Visibility = "NWNX_Visibility"; ///< @private
|
||||
|
||||
/// @name Visibility Types
|
||||
/// @anchor vis_types
|
||||
/// @{
|
||||
const int NWNX_VISIBILITY_DEFAULT = -1;
|
||||
const int NWNX_VISIBILITY_VISIBLE = 0;
|
||||
const int NWNX_VISIBILITY_HIDDEN = 1;
|
||||
const int NWNX_VISIBILITY_DM_ONLY = 2;
|
||||
const int NWNX_VISIBILITY_ALWAYS_VISIBLE = 3;
|
||||
const int NWNX_VISIBILITY_ALWAYS_VISIBLE_DM_ONLY = 4;
|
||||
///@}
|
||||
|
||||
/// @brief Queries the existing visibility override for given (oPlayer, oTarget) pair.
|
||||
/// If oPlayer is OBJECT_INVALID, the global visibility override will be returned.
|
||||
///
|
||||
/// * NWNX_VISIBILITY_DEFAULT = Override not set.
|
||||
/// * NWNX_VISIBILITY_VISIBLE = Target is visible but still adheres to default visibility rules.
|
||||
/// * NWNX_VISIBILITY_HIDDEN = Target is always hidden.
|
||||
/// * NWNX_VISIBILITY_DM_ONLY = Target is only visible to DMs but still adheres to default visibility rules.
|
||||
/// * NWNX_VISIBILITY_ALWAYS_VISIBLE = Target is always visible in all circumstances.
|
||||
/// * NWNX_VISIBILITY_ALWAYS_VISIBLE_DM_ONLY = Target is always visible only to DMs in all circumstances.
|
||||
///
|
||||
/// @param oPlayer The PC Object or OBJECT_INVALID.
|
||||
/// @param oTarget The object for which we're querying the visibility override.
|
||||
/// @return The @ref vis_types "Visibility Type".
|
||||
int NWNX_Visibility_GetVisibilityOverride(object oPlayer, object oTarget);
|
||||
|
||||
/// @brief Overrides the default visibility rules about how oPlayer perceives oTarget.
|
||||
/// If oPlayer is OBJECT_INVALID, the global visibility override will be set.
|
||||
///
|
||||
/// * NWNX_VISIBILITY_DEFAULT = Remove a set override.
|
||||
/// * NWNX_VISIBILITY_VISIBLE = Target is visible but still adheres to default visibility rules.
|
||||
/// * NWNX_VISIBILITY_HIDDEN = Target is always hidden.
|
||||
/// * NWNX_VISIBILITY_DM_ONLY = Target is only visible to DMs but still adheres to default visibility rules.
|
||||
/// * NWNX_VISIBILITY_ALWAYS_VISIBLE = Target is always visible in all circumstances.
|
||||
/// * NWNX_VISIBILITY_ALWAYS_VISIBLE_DM_ONLY = Target is always visible to DMs in all circumstances.
|
||||
///
|
||||
/// @warning Setting too many objects to ALWAYS_VISIBLE in an area will impact the performance of your players. Use sparingly.
|
||||
///
|
||||
/// @note Player state overrides the global state which means if a global state is set
|
||||
/// to NWNX_VISIBILITY_HIDDEN or NWNX_VISIBILITY_DM_ONLY but the player's state is
|
||||
/// set to NWNX_VISIBILITY_VISIBLE for the target, the object will be visible to the player.
|
||||
///
|
||||
/// @param oPlayer The PC Object or OBJECT_INVALID.
|
||||
/// @param oTarget The object for which we're altering the visibility.
|
||||
/// @param nOverride The visibility type from @ref vis_types "Visibility Types".
|
||||
void NWNX_Visibility_SetVisibilityOverride(object oPlayer, object oTarget, int nOverride);
|
||||
|
||||
/// @}
|
||||
|
||||
int NWNX_Visibility_GetVisibilityOverride(object oPlayer, object oTarget)
|
||||
{
|
||||
string sFunc = "GetVisibilityOverride";
|
||||
|
||||
NWNX_PushArgumentObject(NWNX_Visibility, sFunc, oTarget);
|
||||
NWNX_PushArgumentObject(NWNX_Visibility, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Visibility, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Visibility, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Visibility_SetVisibilityOverride(object oPlayer, object oTarget, int nOverride)
|
||||
{
|
||||
string sFunc = "SetVisibilityOverride";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Visibility, sFunc, nOverride);
|
||||
NWNX_PushArgumentObject(NWNX_Visibility, sFunc, oTarget);
|
||||
NWNX_PushArgumentObject(NWNX_Visibility, sFunc, oPlayer);
|
||||
NWNX_CallFunction(NWNX_Visibility, sFunc);
|
||||
}
|
330
_module/nss/nwnx_weapon.nss
Normal file
330
_module/nss/nwnx_weapon.nss
Normal file
@ -0,0 +1,330 @@
|
||||
/// @addtogroup weapon Weapon
|
||||
/// @brief Functions exposing additional weapon properties.
|
||||
/// @{
|
||||
/// @file nwnx_weapon.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Weapon = "NWNX_Weapon"; ///< @private
|
||||
|
||||
/// @name Weapons Options
|
||||
/// @anchor wpn_opts
|
||||
///
|
||||
/// Options constants to be used with NWNX_Weapon_SetOption function.
|
||||
/// @{
|
||||
const int NWNX_WEAPON_OPT_GRTFOCUS_AB_BONUS = 0; ///< Greater Focus Attack Bonus
|
||||
const int NWNX_WEAPON_OPT_GRTSPEC_DAM_BONUS = 1; ///< Greater Specialization Damage Bonus
|
||||
///@}
|
||||
|
||||
// Get Event Data Constants
|
||||
const int NWNX_WEAPON_GETDATA_DC = 0; ///< Get Devastating Critical Data
|
||||
|
||||
// Set Event Data Constants
|
||||
const int NWNX_WEAPON_SETDATA_DC_BYPASS = 0; ///< Set Devastating Critical Bypass
|
||||
|
||||
/// Devastating critical event data
|
||||
struct NWNX_Weapon_DevastatingCriticalEvent_Data
|
||||
{
|
||||
object oWeapon; ///< The weapon used to cause the event.
|
||||
object oTarget; ///< The target hit with a devastating critical.
|
||||
int nDamage; ///< The damage points delivered.
|
||||
};
|
||||
|
||||
/// @brief Set nFeat as weapon focus feat for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetWeaponFocusFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set required creature size for a weapon base item to be finessable.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nSize The creature size minimum to consider this weapon finessable.
|
||||
void NWNX_Weapon_SetWeaponFinesseSize(int nBaseItem, int nSize);
|
||||
|
||||
/// @brief Get required creature size for a weapon base item to be finessable.
|
||||
/// @param nBaseItem The base item id.
|
||||
int NWNX_Weapon_GetWeaponFinesseSize(int nBaseItem);
|
||||
|
||||
/// @brief Set weapon base item to be considered as unarmed for weapon finesse feat.
|
||||
/// @param nBaseItem The base item id.
|
||||
void NWNX_Weapon_SetWeaponUnarmed(int nBaseItem);
|
||||
|
||||
/// @brief Set a feat as weapon improved critical for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetWeaponImprovedCriticalFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as weapon specialization for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetWeaponSpecializationFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as epic weapon focus for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetEpicWeaponFocusFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as epic weapon specialization for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetEpicWeaponSpecializationFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as epic weapon overwhelming critical for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetEpicWeaponOverwhelmingCriticalFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as epic weapon devastating critical for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetEpicWeaponDevastatingCriticalFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as weapon of choice for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetWeaponOfChoiceFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as greater weapon specialization for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetGreaterWeaponSpecializationFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set a feat as greater weapon focus for a base item.
|
||||
/// @param nBaseItem The base item id.
|
||||
/// @param nFeat The feat to set.
|
||||
void NWNX_Weapon_SetGreaterWeaponFocusFeat(int nBaseItem, int nFeat);
|
||||
|
||||
/// @brief Set base item as monk weapon.
|
||||
/// @note Requires activation of CombatModes plugin for Flurry of Blows.
|
||||
/// @param nBaseItem The base item id.
|
||||
void NWNX_Weapon_SetWeaponIsMonkWeapon(int nBaseItem);
|
||||
|
||||
/// @brief Set plugin options.
|
||||
/// @param nOption The option to change from @ref wpn_opts "Weapon Options".
|
||||
/// @param nVal The new value of the option.
|
||||
void NWNX_Weapon_SetOption(int nOption, int nVal);
|
||||
|
||||
/// @brief Set Devastating Critical Event Script.
|
||||
/// @param sScript The script to call when a Devastating Critical occurs.
|
||||
void NWNX_Weapon_SetDevastatingCriticalEventScript(string sScript);
|
||||
|
||||
/// @brief Get Devastating Critical Event Data.
|
||||
/// @note This is only for use with the Devastating Critical Event Script.
|
||||
/// @return An NWNX_Weapon_DevastatingCriticalEvent_Data struct.
|
||||
struct NWNX_Weapon_DevastatingCriticalEvent_Data NWNX_Weapon_GetDevastatingCriticalEventData();
|
||||
|
||||
/// @brief Bypass Devastating Critical.
|
||||
/// @note This is only for use with the Devastating Critical Event Script.
|
||||
void NWNX_Weapon_BypassDevastatingCritical();
|
||||
|
||||
/// @brief Sets weapon to gain .5 strength bonus.
|
||||
/// @param oWeapon Should be a melee weapon.
|
||||
/// @param nEnable TRUE for bonus. FALSE to turn off bonus.
|
||||
/// @param bPersist whether the two hand state should persist to the gff file.
|
||||
void NWNX_Weapon_SetOneHalfStrength(object oWeapon, int nEnable, int bPersist = FALSE);
|
||||
|
||||
/// @brief Gets if the weapon is set to gain addition .5 strength bonus
|
||||
/// @param oWeapon the weapon
|
||||
/// @return FALSE/0 if weapon is not receiving the bonus. TRUE/1 if it does.
|
||||
int NWNX_Weapon_GetOneHalfStrength(object oWeapon);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_Weapon_SetWeaponFocusFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetWeaponFocusFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetEpicWeaponFocusFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetEpicWeaponFocusFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetGreaterWeaponFocusFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetGreaterWeaponFocusFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponFinesseSize(int nBaseItem, int nSize)
|
||||
{
|
||||
string sFunc = "SetWeaponFinesseSize";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nSize);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Weapon_GetWeaponFinesseSize(int nBaseItem)
|
||||
{
|
||||
string sFunc = "GetWeaponFinesseSize";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponUnarmed(int nBaseItem)
|
||||
{
|
||||
string sFunc = "SetWeaponUnarmed";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponIsMonkWeapon(int nBaseItem)
|
||||
{
|
||||
string sFunc = "SetWeaponIsMonkWeapon";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponImprovedCriticalFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetWeaponImprovedCriticalFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponSpecializationFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetWeaponSpecializationFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetGreaterWeaponSpecializationFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetGreaterWeaponSpecializationFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetEpicWeaponSpecializationFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetEpicWeaponSpecializationFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetEpicWeaponOverwhelmingCriticalFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetEpicWeaponOverwhelmingCriticalFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetEpicWeaponDevastatingCriticalFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetEpicWeaponDevastatingCriticalFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetWeaponOfChoiceFeat(int nBaseItem, int nFeat)
|
||||
{
|
||||
string sFunc = "SetWeaponOfChoiceFeat";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nFeat);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nBaseItem);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetOption(int nOption, int nVal)
|
||||
{
|
||||
string sFunc = "SetOption";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nVal);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nOption);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetDevastatingCriticalEventScript(string sScript)
|
||||
{
|
||||
string sFunc = "SetDevastatingCriticalEventScript";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Weapon, sFunc, sScript);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Weapon_BypassDevastatingCritical()
|
||||
{
|
||||
string sFunc = "SetEventData";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, 1);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, NWNX_WEAPON_SETDATA_DC_BYPASS);
|
||||
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
struct NWNX_Weapon_DevastatingCriticalEvent_Data NWNX_Weapon_GetDevastatingCriticalEventData()
|
||||
{
|
||||
string sFunc = "GetEventData";
|
||||
struct NWNX_Weapon_DevastatingCriticalEvent_Data data;
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, NWNX_WEAPON_GETDATA_DC);
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
|
||||
data.oWeapon = NWNX_GetReturnValueObject(NWNX_Weapon, sFunc);
|
||||
data.oTarget = NWNX_GetReturnValueObject(NWNX_Weapon, sFunc);
|
||||
data.nDamage = NWNX_GetReturnValueInt(NWNX_Weapon, sFunc);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void NWNX_Weapon_SetOneHalfStrength(object oWeapon, int nEnable, int bPersist = FALSE)
|
||||
{
|
||||
string sFunc = "SetOneHalfStrength";
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, bPersist);
|
||||
NWNX_PushArgumentInt(NWNX_Weapon, sFunc, nEnable);
|
||||
NWNX_PushArgumentObject(NWNX_Weapon, sFunc, oWeapon);
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Weapon_GetOneHalfStrength(object oWeapon)
|
||||
{
|
||||
string sFunc = "GetOneHalfStrength";
|
||||
NWNX_PushArgumentObject(NWNX_Weapon, sFunc, oWeapon);
|
||||
NWNX_CallFunction(NWNX_Weapon, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Weapon, sFunc);
|
||||
}
|
43
_module/nss/nwnx_webhook.nss
Normal file
43
_module/nss/nwnx_webhook.nss
Normal file
@ -0,0 +1,43 @@
|
||||
/// @addtogroup webhook Webhook
|
||||
/// @brief Send messages to external entities through web hooks.
|
||||
/// @{
|
||||
/// @file nwnx_webhook.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_WebHook = "NWNX_WebHook"; ///< @private
|
||||
|
||||
/// @brief Send a slack compatible webhook.
|
||||
/// @param host The web server to send the hook.
|
||||
/// @param path The path to the hook.
|
||||
/// @param message The message to dispatch.
|
||||
/// @param username The username to display as the originator of the hook.
|
||||
/// @param mrkdwn Set to false if you do not wish your message's markdown be parsed.
|
||||
void NWNX_WebHook_SendWebHookHTTPS(string host, string path, string message, string username = "", int mrkdwn = 1);
|
||||
|
||||
/// @brief Resends a webhook message after a defined delay.
|
||||
///
|
||||
/// Handy when a submission is rate limited, since the message that the event sends in NWNX_Events_GetEventData
|
||||
/// is already constructed. So it just resends the WebHook with an optional delay.
|
||||
/// @param host The web server to send the hook.
|
||||
/// @param path The path to the hook.
|
||||
/// @param sMessage The message to dispatch.
|
||||
/// @param delay The delay in seconds to send the message again.
|
||||
void NWNX_WebHook_ResendWebHookHTTPS(string host, string path, string sMessage, float delay = 0.0f);
|
||||
|
||||
/// @}
|
||||
|
||||
void NWNX_WebHook_SendWebHookHTTPS(string host, string path, string message, string username = "", int mrkdwn = 1)
|
||||
{
|
||||
string sFunc = "SendWebHookHTTPS";
|
||||
NWNX_PushArgumentInt(NWNX_WebHook, sFunc, mrkdwn);
|
||||
NWNX_PushArgumentString(NWNX_WebHook, sFunc, username);
|
||||
NWNX_PushArgumentString(NWNX_WebHook, sFunc, message);
|
||||
NWNX_PushArgumentString(NWNX_WebHook, sFunc, path);
|
||||
NWNX_PushArgumentString(NWNX_WebHook, sFunc, host);
|
||||
NWNX_CallFunction(NWNX_WebHook, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_WebHook_ResendWebHookHTTPS(string host, string path, string sMessage, float delay = 0.0f)
|
||||
{
|
||||
DelayCommand(delay, NWNX_WebHook_SendWebHookHTTPS(host, path, sMessage));
|
||||
}
|
159
_module/nss/nwnx_webhook_rch.nss
Normal file
159
_module/nss/nwnx_webhook_rch.nss
Normal file
@ -0,0 +1,159 @@
|
||||
/// @ingroup webhook
|
||||
/// @file nwnx_webhook_rch.nss
|
||||
/// @brief Create richer webhook messages suitable for Discord
|
||||
#include "nwnx_webhook"
|
||||
|
||||
/// @ingroup webhook
|
||||
/// @brief For more information on these fields see https://birdie0.github.io/discord-webhooks-guide/
|
||||
/// @note URL fields may require NWNX_Util_EncodeStringForURL().
|
||||
struct NWNX_WebHook_Message {
|
||||
string sUsername; ///< https://birdie0.github.io/discord-webhooks-guide/structure/username.html
|
||||
string sText; ///< https://birdie0.github.io/discord-webhooks-guide/structure/content.html
|
||||
string sAvatarURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/avatar_url.html
|
||||
string sColor; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/color.html
|
||||
string sAuthorName; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
|
||||
string sAuthorURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
|
||||
string sAuthorIconURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
|
||||
string sTitle; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/title.html
|
||||
string sURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/url.html
|
||||
string sDescription; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/description.html
|
||||
string sThumbnailURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/thumbnail.html
|
||||
string sImageURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/image.html
|
||||
string sFooterText; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/footer.html
|
||||
string sFooterURL; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/footer.html
|
||||
int iTimestamp; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/timestamp.html
|
||||
string sField1Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField1Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField1Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField2Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField2Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField2Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField3Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField3Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField3Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField4Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField4Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField4Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField5Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField5Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField5Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField6Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField6Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField6Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField7Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField7Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField7Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField8Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField8Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField8Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField9Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField9Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField9Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField10Name; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
string sField10Value; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
int iField10Inline; ///< https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
|
||||
};
|
||||
|
||||
/// @private We don't need this to be a part of the docs.
|
||||
/// @brief Helper function to convert 0 or 1 to false or true.
|
||||
/// @param iBool The integer representation of the boolean.
|
||||
/// @return The string representation (true or false) of the boolean.
|
||||
string IntToBoolString(int iBool);
|
||||
|
||||
/// @ingroup webhook
|
||||
/// @brief Builds and sends a rich webhook message based on the constructed NWNX_WebHook_Message.
|
||||
/// @param host The web server to send the hook.
|
||||
/// @param path The path to the hook.
|
||||
/// @param stMessage A constructed NWNX_Webhook_Message.
|
||||
/// @param mrkdwn Set to false if you do not wish your message's markdown be parsed.
|
||||
/// @warning Your path must end with /slack if using a Discord webhook.
|
||||
string NWNX_WebHook_BuildMessageForWebHook(string host, string path, struct NWNX_WebHook_Message stMessage, int mrkdwn = 1);
|
||||
|
||||
string IntToBoolString(int iBool)
|
||||
{
|
||||
return iBool == 0 ? "false" : "true";
|
||||
}
|
||||
|
||||
string NWNX_WebHook_BuildMessageForWebHook(string host, string path, struct NWNX_WebHook_Message stMessage, int mrkdwn = 1)
|
||||
{
|
||||
if (host == "discordapp.com" && GetStringRight(path, 6) != "/slack")
|
||||
{
|
||||
PrintString("Discord WebHook specified but path does not end with /slack");
|
||||
return "";
|
||||
}
|
||||
|
||||
// Open JSON
|
||||
string message = "{";
|
||||
|
||||
string sMainText = "";
|
||||
|
||||
// The only way to turn off markdown for discord is to surround the text in backticks
|
||||
if (stMessage.sText != "")
|
||||
{
|
||||
if (host == "discordapp.com" && !mrkdwn)
|
||||
sMainText = "```text\\n" + stMessage.sText + "```";
|
||||
else
|
||||
sMainText = stMessage.sText;
|
||||
}
|
||||
message = message + "\"text\": \"" + sMainText + "\"";
|
||||
|
||||
// Slack will turn off markdown
|
||||
if (host != "discordapp.com" && !mrkdwn)
|
||||
message = message + ",\"mrkdwn\": false";
|
||||
|
||||
// Set the user attributes for the poster
|
||||
if (stMessage.sUsername != "")
|
||||
message = message + ",\"username\": \"" + stMessage.sUsername + "\"";
|
||||
if (stMessage.sAvatarURL != "")
|
||||
message = message + ",\"icon_url\": \"" + stMessage.sAvatarURL + "\"";
|
||||
|
||||
// We need to construct an attachment (embed) object
|
||||
if (stMessage.sAuthorName != "" || stMessage.sAuthorURL != "" || stMessage.sAuthorIconURL != "" ||
|
||||
stMessage.sTitle != "" || stMessage.sURL != "" || stMessage.sDescription != "" ||
|
||||
stMessage.sFooterText != "" || stMessage.sFooterURL != "" || stMessage.iTimestamp > 0 ||
|
||||
stMessage.sColor != "" || stMessage.sThumbnailURL != "" || stMessage.sImageURL != "" || stMessage.sField1Name != "")
|
||||
{
|
||||
message = message + ",\"attachments\": [{\"author_name\": \"" + stMessage.sAuthorName + "\",\"author_link\": \"" + stMessage.sAuthorURL +
|
||||
"\",\"author_icon\": \"" + stMessage.sAuthorIconURL + "\",\"title\": \"" + stMessage.sTitle + "\",\"title_link\": \"" + stMessage.sURL +
|
||||
"\",\"text\": \"" + stMessage.sDescription + "\",\"footer\": \"" + stMessage.sFooterText + "\",\"footer_icon\": \"" + stMessage.sFooterURL +
|
||||
"\",\"color\": \"" + stMessage.sColor + "\",\"thumb_url\": \"" + stMessage.sThumbnailURL +
|
||||
"\",\"image_url\": \"" + stMessage.sImageURL + "\"";
|
||||
|
||||
// Dont post an empty timestamp
|
||||
if (stMessage.iTimestamp > 0)
|
||||
message = message + ",\"ts\": \"" + IntToString(stMessage.iTimestamp) + "\"";
|
||||
|
||||
// Fields to handle
|
||||
if (stMessage.sField1Name != "")
|
||||
{
|
||||
message = message + ",\"fields\": [";
|
||||
message = message + "{\"title\": \"" + stMessage.sField1Name + "\",\"value\": \"" + stMessage.sField1Value + "\",\"short\": " + IntToBoolString(stMessage.iField1Inline) + "}";
|
||||
if (stMessage.sField2Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField2Name + "\",\"value\": \"" + stMessage.sField2Value + "\",\"short\": " + IntToBoolString(stMessage.iField2Inline) + "}";
|
||||
if (stMessage.sField3Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField3Name + "\",\"value\": \"" + stMessage.sField3Value + "\",\"short\": " + IntToBoolString(stMessage.iField3Inline) + "}";
|
||||
if (stMessage.sField4Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField4Name + "\",\"value\": \"" + stMessage.sField4Value + "\",\"short\": " + IntToBoolString(stMessage.iField4Inline) + "}";
|
||||
if (stMessage.sField5Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField5Name + "\",\"value\": \"" + stMessage.sField5Value + "\",\"short\": " + IntToBoolString(stMessage.iField5Inline) + "}";
|
||||
if (stMessage.sField6Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField6Name + "\",\"value\": \"" + stMessage.sField6Value + "\",\"short\": " + IntToBoolString(stMessage.iField6Inline) + "}";
|
||||
if (stMessage.sField7Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField7Name + "\",\"value\": \"" + stMessage.sField7Value + "\",\"short\": " + IntToBoolString(stMessage.iField7Inline) + "}";
|
||||
if (stMessage.sField8Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField8Name + "\",\"value\": \"" + stMessage.sField8Value + "\",\"short\": " + IntToBoolString(stMessage.iField8Inline) + "}";
|
||||
if (stMessage.sField9Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField9Name + "\",\"value\": \"" + stMessage.sField9Value + "\",\"short\": " + IntToBoolString(stMessage.iField9Inline) + "}";
|
||||
if (stMessage.sField10Name != "")
|
||||
message = message + ",{\"title\": \"" + stMessage.sField10Name + "\",\"value\": \"" + stMessage.sField10Value + "\",\"short\": " + IntToBoolString(stMessage.iField10Inline) + "}";
|
||||
// Close fields array
|
||||
message = message + "]";
|
||||
}
|
||||
// Close attachments array
|
||||
message = message + "}]";
|
||||
}
|
||||
// Close JSON
|
||||
message = message + "}";
|
||||
|
||||
return message;
|
||||
}
|
14
_module/nss/on_pubsub.nss
Normal file
14
_module/nss/on_pubsub.nss
Normal file
@ -0,0 +1,14 @@
|
||||
/// @ingroup redis
|
||||
/// @brief Script to handle PubSub event
|
||||
/// @{
|
||||
/// @file on_pubsub.nss
|
||||
#include "nwnx_redis_ps"
|
||||
|
||||
void main()
|
||||
{
|
||||
struct NWNX_Redis_PubSubMessageData data = NWNX_Redis_GetPubSubMessageData();
|
||||
|
||||
WriteTimestampedLogEntry("Pubsub Event: channel=" + data.channel +
|
||||
" message=" + data.message);
|
||||
}
|
||||
/// @}
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user