ff_i_pc
PC functions.
Helpers for player character management: level checks, ability scores, character export, and first-login detection.
Source code
// @code
#include "nwnx_admin"
#include "nwnx_player"
#include "nwnx_feedback"
#include "ff_i_message"
// -----------------------------------------------------------------------------
// TODO/FIXME: GetIsPC with GetMaster check
//! @brief Get brief information on the PC
//! @param oPC A player character.
string GetPCInfo(object oPC);
string GetPCInfo(object oPC)
{
return GetName(oPC) + " (" + GetPCPublicCDKey(oPC) + ")";
}
// -----------------------------------------------------------------------------
//! @brief Get XP required for level
//! @param nLevel Level from 1 to 40
//! @returns 2da value from exptable.2da
int GetXPForLevel(int nLevel);
int GetXPForLevel(int nLevel)
{
return StringToInt(Get2DAString("exptable", "XP", nLevel - 1));
}
// -----------------------------------------------------------------------------
//! @brief Get the PC level
//! @param oPC A player character. Sums levels from all three class positions.
int GetPCLevel(object oPC);
int GetPCLevel(object oPC)
{
return GetLevelByPosition(1, oPC) + GetLevelByPosition(2, oPC) + GetLevelByPosition(3, oPC);
}
// -----------------------------------------------------------------------------
void _CancelLevelUp(object oPC)
{
NWNX_Player_SetTlkOverride(oPC, 53242, "", FALSE);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_EXPERIENCE_LOST, FALSE, oPC);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_EXPERIENCE_GAINNED, FALSE, oPC);
}
//! @brief Cancel a level up
//! @param oPC The PC whose level-up to cancel.
//! @param sMessage If non-empty, overrides the "Level Up!" TLK string and is shown in red. Defaults to "".
void CancelLevelUp(object oPC, string sMessage = "");
void CancelLevelUp(object oPC, string sMessage = "")
{
if (sMessage != "")
{
// 53242 => "Level Up!"
NWNX_Player_SetTlkOverride(oPC, 53242, sMessage, FALSE);
SendMessage(oPC, sMessage, STRING_COLOR_RED);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_EXPERIENCE_LOST, TRUE, oPC);
NWNX_Feedback_SetFeedbackMessageHidden(NWNX_FEEDBACK_EXPERIENCE_GAINNED, TRUE, oPC);
DelayCommand(0.6f, _CancelLevelUp(oPC));
}
int nPreviousXP = GetXP(oPC);
int nLevelXP = GetXPForLevel(GetHitDice(oPC)) - 1;
SetXP(oPC, nLevelXP);
DelayCommand(0.4f, SetXP(oPC, nPreviousXP));
}
// -----------------------------------------------------------------------------
//! @brief Delete the PC from server vault
//! @param oPC The PC to permanently delete.
//! @param sMessage Boot message shown to the player.
void EradicatePC(object oPC, string sMessage);
void EradicatePC(object oPC, string sMessage)
{
NWNX_Administration_DeleteTURD(GetPCPlayerName(oPC), GetName(oPC));
NWNX_Administration_DeletePlayerCharacter(oPC, TRUE, sMessage);
BootPC(oPC, sMessage);
}