ff_u_pc_skin
On PC creation, add a creature skin to be able to add feats.
Variables
ENABLE__FF_U_PC_SKIN: (string) (opt-out) Set to “N” on module to disable.
Source code
// @code
#include "ff_i_core"
const string ENABLE__FF_U_PC_SKIN = "ENABLE__FF_U_PC_SKIN";
const string CREATURE_SKIN = "x2_it_emptyskin";
const string SKIN_OBJECT = "__FF_U_PC_SKIN__OBJECT";
// -----------------------------------------------------------------------------
//! @brief Equip the empty creature skin on oPC, creating it if absent.
//! @param oPC A player character.
object Equip(object oPC)
{
object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);
if (GetIsObjectValid(oSkin))
{
LogNotice("PC " + GetPCInfo(oPC) + " already has a skin/hide.");
return oSkin;
}
oSkin = CreateItemOnObject(CREATURE_SKIN, oPC);
if (!GetIsObjectValid(oSkin))
{
LogError("Failed to create/load chest skin/hide item on PC: " + GetPCInfo(oPC));
return OBJECT_INVALID;
}
SetIdentified(oSkin, TRUE);
SetHiddenWhenEquipped(oSkin, TRUE);
NWNX_Creature_RunEquip(oPC, oSkin, INVENTORY_SLOT_CARMOUR);
LogNotice("Created skin/hide item on PC: " + GetPCInfo(oPC));
return oSkin;
}
// -----------------------------------------------------------------------------
//! @brief Equip the skin on login and fire ON_DEFAULT_PC_SKIN_EQUIPPED.
//! @param oPC The entering player character.
void OnClientEnter(object oPC)
{
if (!GetIsPC(oPC))
return;
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_ITEM_RECEIVED, TRUE, oPC);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_ITEM_LOST, TRUE, oPC);
object oSkin = Equip(oPC);
SendEvent(ON_DEFAULT_PC_SKIN_EQUIPPED, oPC);
// Use AFTER event
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_ITEM_RECEIVED, FALSE, oPC);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_ITEM_LOST, FALSE, oPC);
}
// =============================================================================
void main()
{
if (!GetModuleFlag(ENABLE__FF_U_PC_SKIN, TRUE))
return;
string sEvent = GetCurrentEvent();
if (sEvent == ON_REGISTER)
SubscribeToEvent(ON_DEFAULT_CLIENT_ENTER, __FILE__);
else if (sEvent == ON_DEFAULT_CLIENT_ENTER)
OnClientEnter(GetEnteringObject());
}