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.

Bitmask

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);
}