Players Custom Scripts
Sinfar Supporters can make their own scripts for inside their house.
- The NWScript virtual machine use this 2da: pf_nwscript.2da (Supporter Login Required) ... to validate each function call.
Here's what each column are for:
**** = The function call will do nothing and return an empty value.
|After the validation, instead of calling the internal code, this script will be executed as an event with the same parameters.
|Since the default behaviour of GetFirst/Next functions may return invalid objects and so break make it inefficient/impossible to loop through all objects, when this field is set, the engine will automatically call this next function until it can return a valid object or if it has really reached the last object.
|This are the restriction of each parameter and the caller. If the restriction check fails, the function call will do nothing and return an empty value. The parameter depends on the value type
NO_PC = The object must have been created by a player script.
NO_MODULE = The object can't be the module.
string/any value (often "P_") = What the string must start by.
- Only the module and objects that are in the house (any area of the house) are accessible. Functions may return external objects but then GetIsObjectValid(oExternalObject) will return false and calling any function with those objects as parameter will fail.
- Only Players Blueprints can be created with the CreateObject function.
- The events script field of Player Blueprints must start by "p_".
- Players Dialogs must start by "p_".
- Players Blueprints Tag must always start by "_P_".
- Local variables and Campaign variables must start by "P_".
- Only Sinfar Supporters can create Players Blueprints/Scripts and upload a house that uses them. Any Sinfar Supporter can use any of the Players Scripts or Bluprints, but they can only be changed by the owner (the player id of the owner is in the ResRef: p_<hex_player_id>_). All resources are listed here: https://nwn.sinfar.net/res_list.php?erf_id=2
Using Sinfar Spawning System
Sinfar's spawning system is documented here: Sinfar Spawning System and it can be used inside houses with a few differences.
- The tag must have the additional prefix "_P_", for example: _P_SPAWN_C_P_25_SERVANT:
- The variables must have the additional prefix "P_", for example P_SPAWN_CHANCE:
How It Was Enabled
Simply by adding those 2 lines:
RegisterVariableEvent(oArea, "EVENT_WOKEUP", "p_x_wokeupare");
RegisterVariableEvent(oArea, "EVENT_SUSPEND", "p_x_suspendare");
When an house area is created (SetupHomeArea in home_include). You could do the same by setting variables on your areas (Variable Based Events) and create your own system, but for Sinfar Spawn System, it is done automatically.
You can look at those 2 scripts: p_x_wokeupare and p_x_suspendare: they basically call the same functions but of course in the context of an house script (p_) so GetLocalString automatically ensure that the variable name is prefixed by P_ and the tag check expect the _P_ prefix because it is also mandatory for a player blueprint.
Using the Module Events
How to Register a Module Event
Similar to the module events, you can register "Global" events with variables on the area containing the
Using the Variable Based Events
You can use Variable Based Events but under a few conditons.
How to Register a Variable Event
In addition to variables with the "P_" prefix, you are allowed (on the Blueprints only) to the EVENT_ prefix, as long as the value starts by "p_".
You can also call the UnregisterVariableEvent/RegisterVariableEvent functions, as long as the script parameter starts by "p_".
You can only bypass (using BypassVariableEvent) your own varible events (that starts by "P_" : pf_bypassvarevnt).
How to Trigger a Variable Event
The name of variable events from players scripts must start by P_, for example "P_EVENT_WANTS_HELP".