ff_u_v_discovery
Set SetObjectUiDiscoveryMask on the object to prevent highlighting.
Useful for example on doors that are plot, locked, but only for cosmetic.
name |
value |
|---|---|
OBJECT_UI_DISCOVERY_DEFAULT |
1 |
OBJECT_UI_DISCOVERY_NONE |
0 |
OBJECT_UI_DISCOVERY_HILITE_MOUSEOVER |
1 |
OBJECT_UI_DISCOVERY_HILITE_TAB |
2 |
OBJECT_UI_DISCOVERY_TEXTBUBBLE_MOUSEOVER |
4 |
OBJECT_UI_DISCOVERY_TEXTBUBBLE_TAB |
8 |
Variables
ENABLE__FF_U_V_DISCOVERY: (string) (opt-out) Set to “N” on module to disable.
UI_DISCOVERY: (string) Set to “” (skips the event), or DEFAULT, HILITE_MOUSEOVER, HILITE_TAB, NONE, TEXTBUBBLE_MOUSEOVER, TEXTBUBBLE_TAB, or directly the int value (as a int). cf: OBJECT_UI_ constants
Source code
// @code
#include "ff_i_core"
const string UI_DISCOVERY = "UI_DISCOVERY";
const string ENABLE__FF_U_V_DISCOVERY = "ENABLE__FF_U_V_DISCOVERY";
// =============================================================================
//! @brief Internal: apply nDiscovery mask on oObject at the given nObjectType scope.
//! @param oObject Module, area, or individual object.
//! @param nDiscovery An OBJECT_UI_DISCOVERY_* value.
//! @param nObjectType OBJECT_TYPE_* scope for area/module-level overrides.
void _SetDiscovery(object oObject, int nDiscovery, int nObjectType);
void _SetDiscovery(object oObject, int nDiscovery, int nObjectType)
{
int nType = NWNX_Object_GetInternalObjectType(oObject);
if (nType == NWNX_OBJECT_TYPE_INTERNAL_MODULE)
NWNX_Area_SetDefaultObjectUiDiscoveryMask(OBJECT_INVALID, nObjectType, nDiscovery, TRUE);
else if (nType == NWNX_OBJECT_TYPE_INTERNAL_AREA)
NWNX_Area_SetDefaultObjectUiDiscoveryMask(oObject, nObjectType, nDiscovery, TRUE);
else
SetObjectUiDiscoveryMask(oObject, nDiscovery);
}
// -----------------------------------------------------------------------------
//! @brief Apply the UI discovery mask stored in sVariableName on oObject.
//! @param oObject Module, area, or individual object.
//! @param sVariableName Local variable holding the discovery value (string or int).
//! @param nObjectType OBJECT_TYPE_* scope for area/module-level overrides.
void SetDiscoveryFor(object oObject, string sVariableName, int nObjectType);
void SetDiscoveryFor(object oObject, string sVariableName, int nObjectType)
{
// If it's already an int, use it as such
int nValue = GetLocalInt(oObject, sVariableName);
if (nValue)
{
_SetDiscovery(oObject, nValue, nObjectType);
return;
}
string sValue = GetLocalString(oObject, sVariableName);
if (GetStringIsInt(sValue))
{
nValue = StringToInt(sValue);
_SetDiscovery(oObject, nValue, nObjectType);
return;
}
sValue = GetStringUpperCase(sValue);
sValue = GetStringReplace(sValue, "OBJECT_UI_DISCOVERY_", "");
if (sValue == "") { return; }
else if (sValue == "DEFAULT") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_DEFAULT, nObjectType); }
else if (sValue == "HILITE_MOUSEOVER") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_HILITE_MOUSEOVER, nObjectType); }
else if (sValue == "HILITE_TAB") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_HILITE_TAB, nObjectType); }
else if (sValue == "NONE") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_NONE, nObjectType); }
else if (sValue == "TEXTBUBBLE_MOUSEOVER") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_TEXTBUBBLE_MOUSEOVER, nObjectType); }
else if (sValue == "TEXTBUBBLE_TAB") { _SetDiscovery(oObject, OBJECT_UI_DISCOVERY_TEXTBUBBLE_TAB, nObjectType); }
else
LogError("Object " + GetObjectInfo(oObject) + "UI discovery mask (variable: '" + sVariableName + "', value: '" + sValue + "') is invalid");
}
// -----------------------------------------------------------------------------
//! @brief Apply all UI_DISCOVERY_* variable masks on oObject.
//! @param oObject Module, area, or individual object.
void SetDiscovery(object oObject);
void SetDiscovery(object oObject)
{
// Creatures, Doors (Hilite only), Items and Usable Placeables
SetDiscoveryFor(oObject, UI_DISCOVERY, OBJECT_TYPE_ALL);
SetDiscoveryFor(oObject, UI_DISCOVERY + "_CREATURES", OBJECT_TYPE_CREATURE);
SetDiscoveryFor(oObject, UI_DISCOVERY + "_DOORS", OBJECT_TYPE_DOOR);
SetDiscoveryFor(oObject, UI_DISCOVERY + "_ITEMS", OBJECT_TYPE_ITEM);
SetDiscoveryFor(oObject, UI_DISCOVERY + "_PLACEABLES", OBJECT_TYPE_PLACEABLE);
}
// -----------------------------------------------------------------------------
void main()
{
if (!GetModuleFlag(ENABLE__FF_U_V_DISCOVERY, TRUE))
return;
string sEvent = GetCurrentEvent();
if (sEvent == ON_REGISTER)
{
SetDiscovery(GetModule());
SubscribeToEvent(ON_AREA_CREATED, __FILE__);
SubscribeToEvent(ON_OBJECT_CREATED, __FILE__);
}
else if (sEvent == ON_AREA_CREATED)
SetDiscovery(OBJECT_SELF);
else if (sEvent == ON_OBJECT_CREATED)
SetDiscovery(OBJECT_SELF);
}