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