ff_u_pc_lvl_mult

Prevent multiclassing to 3 classes.

Prevent multiclassing to 3 classes if one is not the favored class

Variables

ENABLE__FF_U_PC_LVL_MULTI: (int) (opt-in) Set to “Y” on module to enable unit.

Source code

// @code

#include "ff_i_core"

const string ENABLE__FF_U_PC_LVL_MULTI = "ENABLE__FF_U_PC_LVL_MULTI";

const string MESSAGE = "To have 3 classes, one must be your favored class.";


// -----------------------------------------------------------------------------

void OnClientLevel(object oPC)
{
  if (!GetIsPC(oPC))
    return;

  int nRace = GetRacialType(oPC);
  int nLevel1 = GetClassByPosition(1, oPC);

  int nLevel2 = GetClassByPosition(2, oPC);
  if (nLevel2 == CLASS_TYPE_INVALID)
    return;

  int nLevel3 = GetClassByPosition(3, oPC);
  if (nLevel3 == CLASS_TYPE_INVALID)
    return;

  if (nRace == RACIAL_TYPE_HUMAN)
    return;
  if (nRace == RACIAL_TYPE_HALFELF)
    return;
  if (nRace == RACIAL_TYPE_ELF && (nLevel1 == CLASS_TYPE_WIZARD || nLevel2 == CLASS_TYPE_WIZARD || nLevel3 == CLASS_TYPE_WIZARD))
    return;
  if (nRace == RACIAL_TYPE_DWARF && (nLevel1 == CLASS_TYPE_FIGHTER || nLevel2 == CLASS_TYPE_FIGHTER || nLevel3 == CLASS_TYPE_FIGHTER))
    return;
  if (nRace == RACIAL_TYPE_HALFLING && (nLevel1 == CLASS_TYPE_ROGUE || nLevel2 == CLASS_TYPE_ROGUE || nLevel3 == CLASS_TYPE_ROGUE))
    return;
  if (nRace == RACIAL_TYPE_GNOME && (nLevel1 == CLASS_TYPE_WIZARD || nLevel2 == CLASS_TYPE_WIZARD || nLevel3 == CLASS_TYPE_WIZARD))
    return;
  if (nRace == RACIAL_TYPE_HALFORC && (nLevel1 == CLASS_TYPE_BARBARIAN || nLevel2 == CLASS_TYPE_BARBARIAN || nLevel3 == CLASS_TYPE_BARBARIAN))
    return;

  FloatingTextStringOnCreature(MESSAGE, oPC, FALSE, TRUE);
  SendMessageToPC(oPC, MESSAGE);

  CancelLevelUp(oPC, MESSAGE);
}


// -----------------------------------------------------------------------------

void main()
{
  if (!GetModuleFlag(ENABLE__FF_U_PC_LVL_MULTI, 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()));
}