ff_i_stringify

Value-to-string conversion functions.

Converts NWScript engine types to human-readable strings for logging and debug output: objects, locations, vectors, effects, and item properties.

string EventScriptToString(int nEvent)
Parameters:
  • nEvent – An EVENT_SCRIPT_* constant.

Returns the literal string for the event script handler (EVENT_SCRIPT_*)

int EventToEventScript(object oObject, string sEvent)
Parameters:
  • oObject – An object (type determines which EVENT_SCRIPT_* constants are tried).

  • sEvent – An ON_DEFAULT_* or ON_* event name string.

Returns the event script (EVENT_SCRIPT_*) for the event ON_*.

string EventScriptToEvent(int nHandler)
Parameters:
  • nHandler – An EVENT_SCRIPT_* constant.

Return the event name (eg: ON_DEFAULT_*) for EVENT_SCRIPT_*.

string GetBaseItemTypeString(int nBaseItemType)
Parameters:
  • nBaseItemType – A BASE_ITEM_* value

Get the string representation of item base type.

Source code

// @code

#include "ff_i_console"
#include "ff_i_events_c"

// =============================================================================
// EVENT_SCRIPT_* to STRING
// =============================================================================

//! @brief Returns the literal string for the event script handler (EVENT_SCRIPT_*)
//! @param nEvent An EVENT_SCRIPT_* constant.
string EventScriptToString(int nEvent);
string EventScriptToString(int nEvent)
{
  switch (nEvent)
  {
    case 0: return "NWNX_EVENT";

    case EVENT_SCRIPT_AREAOFEFFECT_ON_HEARTBEAT:        return "EVENT_SCRIPT_AREAOFEFFECT_ON_HEARTBEAT";
    case EVENT_SCRIPT_AREAOFEFFECT_ON_OBJECT_ENTER:     return "EVENT_SCRIPT_AREAOFEFFECT_ON_OBJECT_ENTER";
    case EVENT_SCRIPT_AREAOFEFFECT_ON_OBJECT_EXIT:      return "EVENT_SCRIPT_AREAOFEFFECT_ON_OBJECT_EXIT";

    case EVENT_SCRIPT_AREA_ON_ENTER:                    return "EVENT_SCRIPT_AREA_ON_ENTER";
    case EVENT_SCRIPT_AREA_ON_EXIT:                     return "EVENT_SCRIPT_AREA_ON_EXIT";
    case EVENT_SCRIPT_AREA_ON_HEARTBEAT:                return "EVENT_SCRIPT_AREA_ON_HEARTBEAT";
    case EVENT_SCRIPT_AREA_ON_USER_DEFINED_EVENT:       return "EVENT_SCRIPT_AREA_ON_USER_DEFINED_EVENT";

    case EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR:      return "EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR";
    case EVENT_SCRIPT_CREATURE_ON_DAMAGED:              return "EVENT_SCRIPT_CREATURE_ON_DAMAGED";
    case EVENT_SCRIPT_CREATURE_ON_DEATH:                return "EVENT_SCRIPT_CREATURE_ON_DEATH";
    case EVENT_SCRIPT_CREATURE_ON_DIALOGUE:             return "EVENT_SCRIPT_CREATURE_ON_DIALOGUE";
    case EVENT_SCRIPT_CREATURE_ON_DISTURBED:            return "EVENT_SCRIPT_CREATURE_ON_DISTURBED";
    case EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND:      return "EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND";
    case EVENT_SCRIPT_CREATURE_ON_HEARTBEAT:            return "EVENT_SCRIPT_CREATURE_ON_HEARTBEAT";
    case EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED:       return "EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED";
    case EVENT_SCRIPT_CREATURE_ON_NOTICE:               return "EVENT_SCRIPT_CREATURE_ON_NOTICE";
    case EVENT_SCRIPT_CREATURE_ON_RESTED:               return "EVENT_SCRIPT_CREATURE_ON_RESTED";
    case EVENT_SCRIPT_CREATURE_ON_SPAWN_IN:             return "EVENT_SCRIPT_CREATURE_ON_SPAWN_IN";
    case EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT:          return "EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT";

    case EVENT_SCRIPT_DOOR_ON_CLICKED:                  return "EVENT_SCRIPT_DOOR_ON_CLICKED";
    case EVENT_SCRIPT_DOOR_ON_CLOSE:                    return "EVENT_SCRIPT_DOOR_ON_CLOSE";
    case EVENT_SCRIPT_DOOR_ON_DAMAGE:                   return "EVENT_SCRIPT_DOOR_ON_DAMAGE";
    case EVENT_SCRIPT_DOOR_ON_DEATH:                    return "EVENT_SCRIPT_DOOR_ON_DEATH";
    case EVENT_SCRIPT_DOOR_ON_DIALOGUE:                 return "EVENT_SCRIPT_DOOR_ON_DIALOGUE";
    case EVENT_SCRIPT_DOOR_ON_DISARM:                   return "EVENT_SCRIPT_DOOR_ON_DISARM";
    case EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN:             return "EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN";
    case EVENT_SCRIPT_DOOR_ON_HEARTBEAT:                return "EVENT_SCRIPT_DOOR_ON_HEARTBEAT";
    case EVENT_SCRIPT_DOOR_ON_LOCK:                     return "EVENT_SCRIPT_DOOR_ON_LOCK";
    case EVENT_SCRIPT_DOOR_ON_MELEE_ATTACKED:           return "EVENT_SCRIPT_DOOR_ON_MELEE_ATTACKED";
    case EVENT_SCRIPT_DOOR_ON_OPEN:                     return "EVENT_SCRIPT_DOOR_ON_OPEN";
    case EVENT_SCRIPT_DOOR_ON_SPELLCASTAT:              return "EVENT_SCRIPT_DOOR_ON_SPELLCASTAT";
    case EVENT_SCRIPT_DOOR_ON_TRAPTRIGGERED:            return "EVENT_SCRIPT_DOOR_ON_TRAPTRIGGERED";
    case EVENT_SCRIPT_DOOR_ON_UNLOCK:                   return "EVENT_SCRIPT_DOOR_ON_UNLOCK";

    case EVENT_SCRIPT_ENCOUNTER_ON_ENCOUNTER_EXHAUSTED: return "EVENT_SCRIPT_ENCOUNTER_ON_ENCOUNTER_EXHAUSTED";
    case EVENT_SCRIPT_ENCOUNTER_ON_OBJECT_ENTER:        return "EVENT_SCRIPT_ENCOUNTER_ON_OBJECT_ENTER";
    case EVENT_SCRIPT_ENCOUNTER_ON_OBJECT_EXIT:         return "EVENT_SCRIPT_ENCOUNTER_ON_OBJECT_EXIT";
    case EVENT_SCRIPT_ENCOUNTER_ON_USER_DEFINED_EVENT:  return "EVENT_SCRIPT_ENCOUNTER_ON_USER_DEFINED_EVENT";

    case EVENT_SCRIPT_MODULE_ON_ACQUIRE_ITEM:           return "EVENT_SCRIPT_MODULE_ON_ACQUIRE_ITEM";
    case EVENT_SCRIPT_MODULE_ON_ACTIVATE_ITEM:          return "EVENT_SCRIPT_MODULE_ON_ACTIVATE_ITEM";
    case EVENT_SCRIPT_MODULE_ON_CLIENT_ENTER:           return "EVENT_SCRIPT_MODULE_ON_CLIENT_ENTER";
    case EVENT_SCRIPT_MODULE_ON_CLIENT_EXIT:            return "EVENT_SCRIPT_MODULE_ON_CLIENT_EXIT";
    case EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM:             return "EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM";
    case EVENT_SCRIPT_MODULE_ON_HEARTBEAT:              return "EVENT_SCRIPT_MODULE_ON_HEARTBEAT";
    case EVENT_SCRIPT_MODULE_ON_LOSE_ITEM:              return "EVENT_SCRIPT_MODULE_ON_LOSE_ITEM";
    case EVENT_SCRIPT_MODULE_ON_MODULE_LOAD:            return "EVENT_SCRIPT_MODULE_ON_MODULE_LOAD";
    case EVENT_SCRIPT_MODULE_ON_MODULE_START:           return "EVENT_SCRIPT_MODULE_ON_MODULE_START";
    case EVENT_SCRIPT_MODULE_ON_NUI_EVENT:              return "EVENT_SCRIPT_MODULE_ON_NUI_EVENT";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_CANCEL_CUTSCENE: return "EVENT_SCRIPT_MODULE_ON_PLAYER_CANCEL_CUTSCENE";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_CHAT:            return "EVENT_SCRIPT_MODULE_ON_PLAYER_CHAT";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_DEATH:           return "EVENT_SCRIPT_MODULE_ON_PLAYER_DEATH";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_DYING:           return "EVENT_SCRIPT_MODULE_ON_PLAYER_DYING";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT:        return "EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_LEVEL_UP:        return "EVENT_SCRIPT_MODULE_ON_PLAYER_LEVEL_UP";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_REST:            return "EVENT_SCRIPT_MODULE_ON_PLAYER_REST";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET:          return "EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET";
    case EVENT_SCRIPT_MODULE_ON_PLAYER_TILE_ACTION:     return "EVENT_SCRIPT_MODULE_ON_PLAYER_TILE_ACTION";
    case EVENT_SCRIPT_MODULE_ON_RESPAWN_BUTTON_PRESSED: return "EVENT_SCRIPT_MODULE_ON_RESPAWN_BUTTON_PRESSED";
    case EVENT_SCRIPT_MODULE_ON_UNEQUIP_ITEM:           return "EVENT_SCRIPT_MODULE_ON_UNEQUIP_ITEM";
    case EVENT_SCRIPT_MODULE_ON_USER_DEFINED_EVENT:     return "EVENT_SCRIPT_MODULE_ON_USER_DEFINED_EVENT";

    case EVENT_SCRIPT_PLACEABLE_ON_CLOSED:              return "EVENT_SCRIPT_PLACEABLE_ON_CLOSED";
    case EVENT_SCRIPT_PLACEABLE_ON_DAMAGED:             return "EVENT_SCRIPT_PLACEABLE_ON_DAMAGED";
    case EVENT_SCRIPT_PLACEABLE_ON_DEATH:               return "EVENT_SCRIPT_PLACEABLE_ON_DEATH";
    case EVENT_SCRIPT_PLACEABLE_ON_DIALOGUE:            return "EVENT_SCRIPT_PLACEABLE_ON_DIALOGUE";
    case EVENT_SCRIPT_PLACEABLE_ON_DISARM:              return "EVENT_SCRIPT_PLACEABLE_ON_DISARM";
    case EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT:           return "EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT";
    case EVENT_SCRIPT_PLACEABLE_ON_INVENTORYDISTURBED:  return "EVENT_SCRIPT_PLACEABLE_ON_INVENTORYDISTURBED";
    case EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK:          return "EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK";
    case EVENT_SCRIPT_PLACEABLE_ON_LOCK:                return "EVENT_SCRIPT_PLACEABLE_ON_LOCK";
    case EVENT_SCRIPT_PLACEABLE_ON_MELEEATTACKED:       return "EVENT_SCRIPT_PLACEABLE_ON_MELEEATTACKED";
    case EVENT_SCRIPT_PLACEABLE_ON_OPEN:                return "EVENT_SCRIPT_PLACEABLE_ON_OPEN";
    case EVENT_SCRIPT_PLACEABLE_ON_SPELLCASTAT:         return "EVENT_SCRIPT_PLACEABLE_ON_SPELLCASTAT";
    case EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED:       return "EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED";
    case EVENT_SCRIPT_PLACEABLE_ON_UNLOCK:              return "EVENT_SCRIPT_PLACEABLE_ON_UNLOCK";
    case EVENT_SCRIPT_PLACEABLE_ON_USED:                return "EVENT_SCRIPT_PLACEABLE_ON_USED";

    case EVENT_SCRIPT_STORE_ON_CLOSE:                   return "EVENT_SCRIPT_STORE_ON_CLOSE";
    case EVENT_SCRIPT_STORE_ON_OPEN:                    return "EVENT_SCRIPT_STORE_ON_OPEN";

    case EVENT_SCRIPT_TRIGGER_ON_CLICKED:               return "EVENT_SCRIPT_TRIGGER_ON_CLICKED";
    case EVENT_SCRIPT_TRIGGER_ON_DISARMED:              return "EVENT_SCRIPT_TRIGGER_ON_DISARMED";
    case EVENT_SCRIPT_TRIGGER_ON_HEARTBEAT:             return "EVENT_SCRIPT_TRIGGER_ON_HEARTBEAT";
    case EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER:          return "EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER";
    case EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT:           return "EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT";
    case EVENT_SCRIPT_TRIGGER_ON_TRAPTRIGGERED:         return "EVENT_SCRIPT_TRIGGER_ON_TRAPTRIGGERED";
  }
  LogError(__FILE__ + "::" + __FUNCTION__ + ", event " + IntToString(nEvent) + " not mapped");
  LogStackTrace(__FILE__, __FUNCTION__, __LINE__);
  return "";
}



// =============================================================================
// EVENT_* to EVENT_SCRIPT
// =============================================================================

//! @brief Returns the event script (EVENT_SCRIPT_*) for the event ON_*
//! @param oObject An object (type determines which EVENT_SCRIPT_* constants are tried).
//! @param sEvent An ON_DEFAULT_* or ON_* event name string.
int EventToEventScript(object oObject, string sEvent);
int EventToEventScript(object oObject, string sEvent)
{
  int nType = NWNX_Object_GetInternalObjectType(oObject);

  switch (nType)
  {
    case NWNX_OBJECT_TYPE_INTERNAL_AREA:
      if (FALSE) {}
      else if (sEvent == ON_DEFAULT_AREA_ENTER) return EVENT_SCRIPT_AREA_ON_ENTER;
      else if (sEvent == ON_DEFAULT_AREA_EXIT)  return EVENT_SCRIPT_AREA_ON_EXIT;
      break;

    case NWNX_OBJECT_TYPE_INTERNAL_TRIGGER:
      if (FALSE) {}
      else if (sEvent == ON_DEFAULT_TRIGGER_ENTER) return EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER;
      else if (sEvent == ON_DEFAULT_TRIGGER_EXIT)  return EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT;
      break;

    case NWNX_OBJECT_TYPE_INTERNAL_PLACEABLE:
      if (FALSE) {}
      else if (sEvent == ON_DEFAULT_OBJECT_CLOSED)  return EVENT_SCRIPT_PLACEABLE_ON_CLOSED;
      else if (sEvent == ON_DEFAULT_OBJECT_OPENED)  return EVENT_SCRIPT_PLACEABLE_ON_OPEN;
      else if (sEvent == ON_DEFAULT_OBJECT_DEATH)   return EVENT_SCRIPT_PLACEABLE_ON_DEATH;
      else if (sEvent == ON_DEFAULT_OBJECT_USED)    return EVENT_SCRIPT_PLACEABLE_ON_USED;
      else if (sEvent == ON_DEFAULT_OBJECT_CLICKED) return EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK;
      break;

    case NWNX_OBJECT_TYPE_INTERNAL_DOOR:
      if (FALSE) {}
      else if (sEvent == ON_DEFAULT_OBJECT_FAIL_TO_OPEN) return EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN;
      else if (sEvent == ON_DEFAULT_OBJECT_OPENED)       return EVENT_SCRIPT_DOOR_ON_OPEN;
      else if (sEvent == ON_DEFAULT_OBJECT_DEATH)        return EVENT_SCRIPT_DOOR_ON_DEATH;
      else if (sEvent == ON_DEFAULT_OBJECT_USED)         return EVENT_SCRIPT_DOOR_ON_CLICKED;
      break;

    case NWNX_OBJECT_TYPE_INTERNAL_STORE:
      break;
  }

  if (FALSE) {}
  else if (sEvent == ON_NUI_EVENT)                      return EVENT_SCRIPT_MODULE_ON_NUI_EVENT;
  else if (sEvent == NWNX_ON_INVENTORY_ADD_GOLD_BEFORE) return 0;
  else if (sEvent == NWNX_ON_INVENTORY_ADD_ITEM_BEFORE) return 0;

  LogError(__FILE__ + "::" + __FUNCTION__ + ":" + IntToString(__LINE__) + ", event " + sEvent + " not mapped for object type " + IntToString(nType));
  LogStackTrace(__FILE__, __FUNCTION__, __LINE__);
  return 0;
}



// =============================================================================
// EVENT_SCRIPT to string EVENT
// =============================================================================

// Gets the Event Name for the corresponding Event Script

//! @brief Return the event name (eg: ON_DEFAULT_*) for EVENT_SCRIPT_*
//! @param nHandler An EVENT_SCRIPT_* constant.
string EventScriptToEvent(int nHandler);
string EventScriptToEvent(int nHandler)
{
  switch (nHandler)
  {
    case EVENT_SCRIPT_AREA_ON_ENTER:                    return ON_DEFAULT_AREA_ENTER;
    case EVENT_SCRIPT_AREA_ON_EXIT:                     return ON_DEFAULT_AREA_EXIT;

    case EVENT_SCRIPT_DOOR_ON_CLICKED:                  return ON_DEFAULT_OBJECT_CLICKED;
    case EVENT_SCRIPT_DOOR_ON_CLOSE:                    return ON_DEFAULT_OBJECT_CLOSED;
    case EVENT_SCRIPT_DOOR_ON_DAMAGE:                   return ON_DEFAULT_OBJECT_DAMAGE;
    case EVENT_SCRIPT_DOOR_ON_DEATH:                    return ON_DEFAULT_OBJECT_DEATH;
    case EVENT_SCRIPT_DOOR_ON_DIALOGUE:                 return ON_DEFAULT_OBJECT_DIALOGUE;
    case EVENT_SCRIPT_DOOR_ON_DISARM:                   return ON_DEFAULT_OBJECT_DISARM;
    case EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN:             return ON_DEFAULT_OBJECT_FAIL_TO_OPEN;
    case EVENT_SCRIPT_DOOR_ON_LOCK:                     return ON_DEFAULT_OBJECT_LOCK;
    case EVENT_SCRIPT_DOOR_ON_MELEE_ATTACKED:           return ON_DEFAULT_OBJECT_MELEE_ATTACKED;
    case EVENT_SCRIPT_DOOR_ON_OPEN:                     return ON_DEFAULT_OBJECT_OPENED;
    case EVENT_SCRIPT_DOOR_ON_SPELLCASTAT:              return ON_DEFAULT_OBJECT_SPELLCASTAT;
    case EVENT_SCRIPT_DOOR_ON_TRAPTRIGGERED:            return ON_DEFAULT_OBJECT_TRAPTRIGGERED;
    case EVENT_SCRIPT_DOOR_ON_UNLOCK:                   return ON_DEFAULT_OBJECT_UNLOCK;

    case EVENT_SCRIPT_MODULE_ON_ACQUIRE_ITEM:           return ON_DEFAULT_ITEM_ACQUIRE;
    case EVENT_SCRIPT_MODULE_ON_ACTIVATE_ITEM:          return ON_DEFAULT_ITEM_ACTIVATE;
    case EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM:             return ON_DEFAULT_ITEM_EQUIP;
    case EVENT_SCRIPT_MODULE_ON_LOSE_ITEM:              return ON_DEFAULT_ITEM_LOST;
    case EVENT_SCRIPT_MODULE_ON_UNEQUIP_ITEM:           return ON_DEFAULT_ITEM_UNEQUIP;

    case EVENT_SCRIPT_MODULE_ON_CLIENT_ENTER:           return ON_DEFAULT_CLIENT_ENTER;
    case EVENT_SCRIPT_MODULE_ON_CLIENT_EXIT:            return ON_DEFAULT_CLIENT_EXIT;

    case EVENT_SCRIPT_MODULE_ON_MODULE_LOAD:            return ON_MODULE_LOAD;
    case EVENT_SCRIPT_MODULE_ON_MODULE_START:           return ON_MODULE_START;
    case EVENT_SCRIPT_MODULE_ON_NUI_EVENT:              return ON_NUI_EVENT;

    case EVENT_SCRIPT_PLACEABLE_ON_CLOSED:              return ON_DEFAULT_OBJECT_CLOSED;
    case EVENT_SCRIPT_PLACEABLE_ON_DAMAGED:             return ON_DEFAULT_OBJECT_DAMAGE;
    case EVENT_SCRIPT_PLACEABLE_ON_DEATH:               return ON_DEFAULT_OBJECT_DEATH;
    case EVENT_SCRIPT_PLACEABLE_ON_DIALOGUE:            return ON_DEFAULT_OBJECT_DIALOGUE;
    case EVENT_SCRIPT_PLACEABLE_ON_DISARM:              return ON_DEFAULT_OBJECT_DISARM;
    case EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK:          return ON_DEFAULT_OBJECT_CLICKED;
    case EVENT_SCRIPT_PLACEABLE_ON_LOCK:                return ON_DEFAULT_OBJECT_LOCK;
    case EVENT_SCRIPT_PLACEABLE_ON_MELEEATTACKED:       return ON_DEFAULT_OBJECT_MELEE_ATTACKED;
    case EVENT_SCRIPT_PLACEABLE_ON_OPEN:                return ON_DEFAULT_OBJECT_OPENED;
    case EVENT_SCRIPT_PLACEABLE_ON_USED:                return ON_DEFAULT_OBJECT_USED;

    case EVENT_SCRIPT_STORE_ON_CLOSE:                   return ON_DEFAULT_STORE_CLOSED;
    case EVENT_SCRIPT_STORE_ON_OPEN:                    return ON_DEFAULT_STORE_OPENED;

    case EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER:          return ON_DEFAULT_TRIGGER_ENTER;
    case EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT:           return ON_DEFAULT_TRIGGER_EXIT;
  }
  string sEvent = EventScriptToString(nHandler);
  if (sEvent == "NWNX_EVENT")
    return sEvent;

  LogError(__FILE__ + "::" + __FUNCTION__ + ":" + IntToString(__LINE__) + ", event " + sEvent + " not mapped");
  LogStackTrace(__FILE__, __FUNCTION__, __LINE__);
  return "";
}


// =============================================================================
// BASE ITEMS
// =============================================================================

//! @brief Get the string representation of item base type
//! @param nBaseItemType A `BASE_ITEM_*` value
string GetBaseItemTypeString(int nBaseItemType);
string GetBaseItemTypeString(int nBaseItemType)
{
  switch (nBaseItemType)
  {
    case BASE_ITEM_AMULET: return "BASE_ITEM_AMULET";
    case BASE_ITEM_ARMOR: return "BASE_ITEM_ARMOR";
    case BASE_ITEM_ARROW: return "BASE_ITEM_ARROW";
    case BASE_ITEM_BASTARDSWORD: return "BASE_ITEM_BASTARDSWORD";
    case BASE_ITEM_BATTLEAXE: return "BASE_ITEM_BATTLEAXE";
    case BASE_ITEM_BELT: return "BASE_ITEM_BELT";
    case BASE_ITEM_BLANK_POTION: return "BASE_ITEM_BLANK_POTION";
    case BASE_ITEM_BLANK_SCROLL: return "BASE_ITEM_BLANK_SCROLL";
    case BASE_ITEM_BLANK_WAND: return "BASE_ITEM_BLANK_WAND";
    case BASE_ITEM_BOLT: return "BASE_ITEM_BOLT";
    case BASE_ITEM_BOOK: return "BASE_ITEM_BOOK";
    case BASE_ITEM_BOOTS: return "BASE_ITEM_BOOTS";
    case BASE_ITEM_BRACER: return "BASE_ITEM_BRACER";
    case BASE_ITEM_BULLET: return "BASE_ITEM_BULLET";
    case BASE_ITEM_CBLUDGWEAPON: return "BASE_ITEM_CBLUDGWEAPON";
    case BASE_ITEM_CLOAK: return "BASE_ITEM_CLOAK";
    case BASE_ITEM_CLUB: return "BASE_ITEM_CLUB";
    case BASE_ITEM_CPIERCWEAPON: return "BASE_ITEM_CPIERCWEAPON";
    case BASE_ITEM_CRAFTMATERIALMED: return "BASE_ITEM_CRAFTMATERIALMED";
    case BASE_ITEM_CRAFTMATERIALSML: return "BASE_ITEM_CRAFTMATERIALSML";
    case BASE_ITEM_CREATUREITEM: return "BASE_ITEM_CREATUREITEM";
    case BASE_ITEM_CSLASHWEAPON: return "BASE_ITEM_CSLASHWEAPON";
    case BASE_ITEM_CSLSHPRCWEAP: return "BASE_ITEM_CSLSHPRCWEAP";
    case BASE_ITEM_DAGGER: return "BASE_ITEM_DAGGER";
    case BASE_ITEM_DART: return "BASE_ITEM_DART";
    case BASE_ITEM_DIREMACE: return "BASE_ITEM_DIREMACE";
    case BASE_ITEM_DOUBLEAXE: return "BASE_ITEM_DOUBLEAXE";
    case BASE_ITEM_DWARVENWARAXE: return "BASE_ITEM_DWARVENWARAXE";
    case BASE_ITEM_ENCHANTED_POTION: return "BASE_ITEM_ENCHANTED_POTION";
    case BASE_ITEM_ENCHANTED_SCROLL: return "BASE_ITEM_ENCHANTED_SCROLL";
    case BASE_ITEM_ENCHANTED_WAND: return "BASE_ITEM_ENCHANTED_WAND";
    case BASE_ITEM_GEM: return "BASE_ITEM_GEM";
    case BASE_ITEM_GLOVES: return "BASE_ITEM_GLOVES";
    case BASE_ITEM_GOLD: return "BASE_ITEM_GOLD";
    case BASE_ITEM_GREATAXE: return "BASE_ITEM_GREATAXE";
    case BASE_ITEM_GREATSWORD: return "BASE_ITEM_GREATSWORD";
    case BASE_ITEM_GRENADE: return "BASE_ITEM_GRENADE";
    case BASE_ITEM_HALBERD: return "BASE_ITEM_HALBERD";
    case BASE_ITEM_HANDAXE: return "BASE_ITEM_HANDAXE";
    case BASE_ITEM_HEALERSKIT: return "BASE_ITEM_HEALERSKIT";
    case BASE_ITEM_HEAVYCROSSBOW: return "BASE_ITEM_HEAVYCROSSBOW";
    case BASE_ITEM_HEAVYFLAIL: return "BASE_ITEM_HEAVYFLAIL";
    case BASE_ITEM_HELMET: return "BASE_ITEM_HELMET";
    case BASE_ITEM_INVALID: return "BASE_ITEM_INVALID";
    case BASE_ITEM_KAMA: return "BASE_ITEM_KAMA";
    case BASE_ITEM_KATANA: return "BASE_ITEM_KATANA";
    case BASE_ITEM_KEY: return "BASE_ITEM_KEY";
    case BASE_ITEM_KUKRI: return "BASE_ITEM_KUKRI";
    case BASE_ITEM_LARGEBOX: return "BASE_ITEM_LARGEBOX";
    case BASE_ITEM_LARGESHIELD: return "BASE_ITEM_LARGESHIELD";
    case BASE_ITEM_LIGHTCROSSBOW: return "BASE_ITEM_LIGHTCROSSBOW";
    case BASE_ITEM_LIGHTFLAIL: return "BASE_ITEM_LIGHTFLAIL";
    case BASE_ITEM_LIGHTHAMMER: return "BASE_ITEM_LIGHTHAMMER";
    case BASE_ITEM_LIGHTMACE: return "BASE_ITEM_LIGHTMACE";
    case BASE_ITEM_LONGBOW: return "BASE_ITEM_LONGBOW";
    case BASE_ITEM_LONGSWORD: return "BASE_ITEM_LONGSWORD";
    case BASE_ITEM_MAGICROD: return "BASE_ITEM_MAGICROD";
    case BASE_ITEM_MAGICSTAFF: return "BASE_ITEM_MAGICSTAFF";
    case BASE_ITEM_MAGICWAND: return "BASE_ITEM_MAGICWAND";
    case BASE_ITEM_MISCLARGE: return "BASE_ITEM_MISCLARGE";
    case BASE_ITEM_MISCMEDIUM: return "BASE_ITEM_MISCMEDIUM";
    case BASE_ITEM_MISCSMALL: return "BASE_ITEM_MISCSMALL";
    case BASE_ITEM_MISCTALL: return "BASE_ITEM_MISCTALL";
    case BASE_ITEM_MISCTHIN: return "BASE_ITEM_MISCTHIN";
    case BASE_ITEM_MISCWIDE: return "BASE_ITEM_MISCWIDE";
    case BASE_ITEM_MORNINGSTAR: return "BASE_ITEM_MORNINGSTAR";
    case BASE_ITEM_POTIONS: return "BASE_ITEM_POTIONS";
    case BASE_ITEM_QUARTERSTAFF: return "BASE_ITEM_QUARTERSTAFF";
    case BASE_ITEM_RAPIER: return "BASE_ITEM_RAPIER";
    case BASE_ITEM_RING: return "BASE_ITEM_RING";
    case BASE_ITEM_SCIMITAR: return "BASE_ITEM_SCIMITAR";
    case BASE_ITEM_SCROLL: return "BASE_ITEM_SCROLL";
    case BASE_ITEM_SCYTHE: return "BASE_ITEM_SCYTHE";
    case BASE_ITEM_SHORTBOW: return "BASE_ITEM_SHORTBOW";
    case BASE_ITEM_SHORTSPEAR: return "BASE_ITEM_SHORTSPEAR";
    case BASE_ITEM_SHORTSWORD: return "BASE_ITEM_SHORTSWORD";
    case BASE_ITEM_SHURIKEN: return "BASE_ITEM_SHURIKEN";
    case BASE_ITEM_SICKLE: return "BASE_ITEM_SICKLE";
    case BASE_ITEM_SLING: return "BASE_ITEM_SLING";
    case BASE_ITEM_SMALLSHIELD: return "BASE_ITEM_SMALLSHIELD";
    case BASE_ITEM_SPELLSCROLL: return "BASE_ITEM_SPELLSCROLL";
    case BASE_ITEM_THIEVESTOOLS: return "BASE_ITEM_THIEVESTOOLS";
    case BASE_ITEM_THROWINGAXE: return "BASE_ITEM_THROWINGAXE";
    case BASE_ITEM_TORCH: return "BASE_ITEM_TORCH";
    case BASE_ITEM_TOWERSHIELD: return "BASE_ITEM_TOWERSHIELD";
    case BASE_ITEM_TRAPKIT: return "BASE_ITEM_TRAPKIT";
    case BASE_ITEM_TWOBLADEDSWORD: return "BASE_ITEM_TWOBLADEDSWORD";
    case BASE_ITEM_WARHAMMER: return "BASE_ITEM_WARHAMMER";
    case BASE_ITEM_WHIP: return "BASE_ITEM_WHIP";
  }
  LogError(__FILE__ + "::" + __FUNCTION__ + ", event " + IntToString(nBaseItemType) + " not mapped");
  LogStackTrace(__FILE__, __FUNCTION__, __LINE__);
  return "";
}