ff_u_pc_lvl_by3
Require 3 levels in a class before switch class.
Prevent multiclassing if any class is not at least level 3. Prevents multiclassing to a single level per class.
Variables
ENABLE__FF_U_PC_LVL_BY3: (string) (opt-in) Set to “Y” on module to enable.
Source code
// @code
#include "ff_i_core"
const string ENABLE__FF_U_PC_LVL_BY3 = "ENABLE__FF_U_PC_LVL_BY3";
const string MESSAGE = "You must have at least 3 levels per class before choosing a new class.";
// -----------------------------------------------------------------------------
void Reset(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);
}
void OnClientLevel(object oPC)
{
if (!GetIsPC(oPC))
return;
int nLevel1 = GetLevelByClass(GetClassByPosition(1, oPC));
int nLevel2 = GetLevelByClass(GetClassByPosition(2, oPC));
int nLevel3 = GetLevelByClass(GetClassByPosition(3, oPC));
if (nLevel1 >= 3 && nLevel2 >= 3 && nLevel3 >= 3)
return;
if (nLevel1 >= 3 && nLevel2 >= 3 && nLevel3 == 0)
return;
if (nLevel2 == 0 && nLevel3 == 0)
return;
CancelLevelUp(oPC, MESSAGE);
}
// -----------------------------------------------------------------------------
void main()
{
if (!GetModuleFlag(ENABLE__FF_U_PC_LVL_BY3, FALSE))
return;
string sEvent = GetCurrentEvent();
if (sEvent == ON_REGISTER)
SubscribeToEvent(ON_AFTER_PC_LEVELUP, __FILE__);
else if (sEvent == ON_AFTER_PC_LEVELUP)
DelayCommand(0.2f, OnClientLevel(GetPCLevellingUp()));
}