/*
* Copyright (C) 2004-2014 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.base;
import static com.l2jserver.gameserver.model.base.ClassLevel.Awaken; // 603
import static com.l2jserver.gameserver.model.base.ClassLevel.First;
import static com.l2jserver.gameserver.model.base.ClassLevel.Fourth;
import static com.l2jserver.gameserver.model.base.ClassLevel.Second;
import static com.l2jserver.gameserver.model.base.ClassLevel.Third;
import static com.l2jserver.gameserver.model.base.ClassType.Fighter;
import static com.l2jserver.gameserver.model.base.ClassType.Mystic;
import static com.l2jserver.gameserver.model.base.ClassType.Priest;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Set;
import com.l2jserver.Config;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
* @author luisantonioa
*/
public enum PlayerClass
{
HumanFighter(Race.HUMAN, Fighter, First, 0),
Warrior(Race.HUMAN, Fighter, Second, 0),
Gladiator(Race.HUMAN, Fighter, Third, 2),
Warlord(Race.HUMAN, Fighter, Third, 2),
HumanKnight(Race.HUMAN, Fighter, Second, 0),
Paladin(Race.HUMAN, Fighter, Third, 1),
DarkAvenger(Race.HUMAN, Fighter, Third, 1),
Rogue(Race.HUMAN, Fighter, Second, 0),
TreasureHunter(Race.HUMAN, Fighter, Third, 3),
Hawkeye(Race.HUMAN, Fighter, Third, 4),
HumanMystic(Race.HUMAN, Mystic, First, 0),
HumanWizard(Race.HUMAN, Mystic, Second, 0),
Sorceror(Race.HUMAN, Mystic, Third, 5),
Necromancer(Race.HUMAN, Mystic, Third, 5),
Warlock(Race.HUMAN, Mystic, Third, 7),
Cleric(Race.HUMAN, Priest, Second, 0),
Bishop(Race.HUMAN, Priest, Third, 8),
Prophet(Race.HUMAN, Priest, Third, 6),
ElvenFighter(Race.ELF, Fighter, First, 0),
ElvenKnight(Race.ELF, Fighter, Second, 0),
TempleKnight(Race.ELF, Fighter, Third, 1),
Swordsinger(Race.ELF, Fighter, Third, 6),
ElvenScout(Race.ELF, Fighter, Second, 0),
Plainswalker(Race.ELF, Fighter, Third, 3),
SilverRanger(Race.ELF, Fighter, Third, 4),
ElvenMystic(Race.ELF, Mystic, First, 0),
ElvenWizard(Race.ELF, Mystic, Second, 0),
Spellsinger(Race.ELF, Mystic, Third, 5),
ElementalSummoner(Race.ELF, Mystic, Third, 7),
ElvenOracle(Race.ELF, Priest, Second, 0),
ElvenElder(Race.ELF, Priest, Third, 8),
DarkElvenFighter(Race.DARK_ELF, Fighter, First, 0),
PalusKnight(Race.DARK_ELF, Fighter, Second, 0),
ShillienKnight(Race.DARK_ELF, Fighter, Third, 1),
Bladedancer(Race.DARK_ELF, Fighter, Third, 6),
Assassin(Race.DARK_ELF, Fighter, Second, 0),
AbyssWalker(Race.DARK_ELF, Fighter, Third, 3),
PhantomRanger(Race.DARK_ELF, Fighter, Third, 4),
DarkElvenMystic(Race.DARK_ELF, Mystic, First, 0),
DarkElvenWizard(Race.DARK_ELF, Mystic, Second, 0),
Spellhowler(Race.DARK_ELF, Mystic, Third, 5),
PhantomSummoner(Race.DARK_ELF, Mystic, Third, 7),
ShillienOracle(Race.DARK_ELF, Priest, Second, 0),
ShillienElder(Race.DARK_ELF, Priest, Third, 8),
OrcFighter(Race.ORC, Fighter, First, 0),
OrcRaider(Race.ORC, Fighter, Second, 0),
Destroyer(Race.ORC, Fighter, Third, 2),
OrcMonk(Race.ORC, Fighter, Second, 0),
Tyrant(Race.ORC, Fighter, Third, 2),
OrcMystic(Race.ORC, Mystic, First, 0),
OrcShaman(Race.ORC, Mystic, Second, 0),
Overlord(Race.ORC, Mystic, Third, 6),
Warcryer(Race.ORC, Mystic, Third, 6),
DwarvenFighter(Race.DWARF, Fighter, First, 0),
DwarvenScavenger(Race.DWARF, Fighter, Second, 0),
BountyHunter(Race.DWARF, Fighter, Third, 3),
DwarvenArtisan(Race.DWARF, Fighter, Second, 0),
Warsmith(Race.DWARF, Fighter, Third, 2),
dummyEntry1(null, null, null, 0),
dummyEntry2(null, null, null, 0),
dummyEntry3(null, null, null, 0),
dummyEntry4(null, null, null, 0),
dummyEntry5(null, null, null, 0),
dummyEntry6(null, null, null, 0),
dummyEntry7(null, null, null, 0),
dummyEntry8(null, null, null, 0),
dummyEntry9(null, null, null, 0),
dummyEntry10(null, null, null, 0),
dummyEntry11(null, null, null, 0),
dummyEntry12(null, null, null, 0),
dummyEntry13(null, null, null, 0),
dummyEntry14(null, null, null, 0),
dummyEntry15(null, null, null, 0),
dummyEntry16(null, null, null, 0),
dummyEntry17(null, null, null, 0),
dummyEntry18(null, null, null, 0),
dummyEntry19(null, null, null, 0),
dummyEntry20(null, null, null, 0),
dummyEntry21(null, null, null, 0),
dummyEntry22(null, null, null, 0),
dummyEntry23(null, null, null, 0),
dummyEntry24(null, null, null, 0),
dummyEntry25(null, null, null, 0),
dummyEntry26(null, null, null, 0),
dummyEntry27(null, null, null, 0),
dummyEntry28(null, null, null, 0),
dummyEntry29(null, null, null, 0),
dummyEntry30(null, null, null, 0),
/*
* (3rd classes)
*/
duelist(Race.HUMAN, Fighter, Fourth, 2),
dreadnought(Race.HUMAN, Fighter, Fourth, 2),
phoenixKnight(Race.HUMAN, Fighter, Fourth, 1),
hellKnight(Race.HUMAN, Fighter, Fourth, 1),
sagittarius(Race.HUMAN, Fighter, Fourth, 4),
adventurer(Race.HUMAN, Fighter, Fourth, 3),
archmage(Race.HUMAN, Mystic, Fourth, 5),
soultaker(Race.HUMAN, Mystic, Fourth, 5),
arcanaLord(Race.HUMAN, Mystic, Fourth, 7),
cardinal(Race.HUMAN, Priest, Fourth, 8),
hierophant(Race.HUMAN, Priest, Fourth, 6),
evaTemplar(Race.ELF, Fighter, Fourth, 1),
swordMuse(Race.ELF, Fighter, Fourth, 6),
windRider(Race.ELF, Fighter, Fourth, 3),
moonlightSentinel(Race.ELF, Fighter, Fourth, 4),
mysticMuse(Race.ELF, Mystic, Fourth, 5),
elementalMaster(Race.ELF, Mystic, Fourth, 7),
evaSaint(Race.ELF, Priest, Fourth, 8),
shillienTemplar(Race.DARK_ELF, Fighter, Fourth, 1),
spectralDancer(Race.DARK_ELF, Fighter, Fourth, 6),
ghostHunter(Race.DARK_ELF, Fighter, Fourth, 3),
ghostSentinel(Race.DARK_ELF, Fighter, Fourth, 4),
stormScreamer(Race.DARK_ELF, Mystic, Fourth, 5),
spectralMaster(Race.DARK_ELF, Mystic, Fourth, 7),
shillienSaint(Race.DARK_ELF, Priest, Fourth, 8),
titan(Race.ORC, Fighter, Fourth, 2),
grandKhavatari(Race.ORC, Fighter, Fourth, 2),
dominator(Race.ORC, Mystic, Fourth, 6),
doomcryer(Race.ORC, Mystic, Fourth, 6),
fortuneSeeker(Race.DWARF, Fighter, Fourth, 3),
maestro(Race.DWARF, Fighter, Fourth, 2),
dummyEntry31(null, null, null, 0),
dummyEntry32(null, null, null, 0),
dummyEntry33(null, null, null, 0),
dummyEntry34(null, null, null, 0),
maleSoldier(Race.KAMAEL, Fighter, First, 0),
femaleSoldier(Race.KAMAEL, Fighter, First, 0),
trooper(Race.KAMAEL, Fighter, Second, 0),
warder(Race.KAMAEL, Fighter, Second, 0),
berserker(Race.KAMAEL, Fighter, Third, 2),
maleSoulbreaker(Race.KAMAEL, Fighter, Third, 5),
femaleSoulbreaker(Race.KAMAEL, Fighter, Third, 5),
arbalester(Race.KAMAEL, Fighter, Third, 4),
doombringer(Race.KAMAEL, Fighter, Fourth, 2),
maleSoulhound(Race.KAMAEL, Fighter, Fourth, 5),
femaleSoulhound(Race.KAMAEL, Fighter, Fourth, 5),
trickster(Race.KAMAEL, Fighter, Fourth, 4),
inspector(Race.KAMAEL, Fighter, Third, 6),
judicator(Race.KAMAEL, Fighter, Fourth, 6),
dummyEntry35(null, null, null, 0),
dummyEntry36(null, null, null, 0),
// Awakening
sigelKnight(Race.HUMAN, Fighter, Awaken, 1),
tyrrWarrior(Race.HUMAN, Fighter, Awaken, 2),
othellRogue(Race.HUMAN, Fighter, Awaken, 3),
yulArcher(Race.HUMAN, Fighter, Awaken, 4),
feohWizard(Race.HUMAN, Mystic, Awaken, 5),
issEnchanter(Race.KAMAEL, Fighter, Awaken, 6),
wynnSummoner(Race.HUMAN, Mystic, Awaken, 7),
aeoreHealer(Race.HUMAN, Priest, Awaken, 8),
dummyEntry37(null, null, null, 0),
SigelPhoenixKnight(Race.HUMAN, Fighter, Awaken, 1),
SigelHellKnight(Race.HUMAN, Fighter, Awaken, 1),
SigelEvaTemplar(Race.ELF, Fighter, Awaken, 1),
SigelShillienTemplar(Race.DARK_ELF, Fighter, Awaken, 1),
TyrrDuelist(Race.HUMAN, Fighter, Awaken, 2),
TyrrDreadnought(Race.HUMAN, Fighter, Awaken, 2),
TyrrTitan(Race.ORC, Fighter, Awaken, 2),
TyrrGrandKhavatari(Race.ORC, Fighter, Awaken, 2),
TyrrMaestro(Race.DWARF, Fighter, Awaken, 2),
TyrrDoombringer(Race.KAMAEL, Fighter, Awaken, 2),
OthellAdventurer(Race.HUMAN, Fighter, Awaken, 3),
OthellWindRider(Race.ELF, Fighter, Awaken, 3),
OthellGhostHunter(Race.DARK_ELF, Fighter, Awaken, 3),
OthellFortuneSeeker(Race.DWARF, Fighter, Awaken, 3),
YulSagittarius(Race.HUMAN, Fighter, Awaken, 4),
YulMoonlightSentinel(Race.ELF, Fighter, Awaken, 4),
YulGhostSentinel(Race.DARK_ELF, Fighter, Awaken, 4),
YulTrickster(Race.KAMAEL, Fighter, Awaken, 4),
FeohArchmage(Race.HUMAN, Mystic, Awaken, 5),
FeohSoultaker(Race.HUMAN, Mystic, Awaken, 5),
FeohMysticMuse(Race.ELF, Mystic, Awaken, 5),
FeohStormScreamer(Race.DARK_ELF, Mystic, Awaken, 5),
FeohSoulhound(Race.KAMAEL, Mystic, Awaken, 5),
IssHierophant(Race.HUMAN, Fighter, Awaken, 6),
IssSwordMuse(Race.ELF, Fighter, Awaken, 6),
IssSpectralDancer(Race.DARK_ELF, Fighter, Awaken, 6),
IssDominator(Race.ORC, Fighter, Awaken, 6),
IssDoomcryer(Race.ORC, Fighter, Awaken, 6),
WynnArcanaLord(Race.HUMAN, Mystic, Awaken, 7),
WynnElementalMaster(Race.ELF, Mystic, Awaken, 7),
WynnSpectralMaster(Race.DARK_ELF, Mystic, Awaken, 7),
AeoreCardinal(Race.HUMAN, Priest, Awaken, 8),
AeoreEvaSaint(Race.ELF, Priest, Awaken, 8),
AeoreShillienSaint(Race.DARK_ELF, Priest, Awaken, 8),
ErtheiaFighter(Race.ERTHEIA, Fighter, First, 0),
ErtheiaWizard(Race.ERTHEIA, Mystic, First, 0),
Marauder(Race.ERTHEIA, Fighter, Third, 0),
CloudBreaker(Race.ERTHEIA, Mystic, Third, 0),
Ripper(Race.ERTHEIA, Fighter, Fourth, 0),
Stratomancer(Race.ERTHEIA, Mystic, Fourth, 0),
Eviscerator(Race.ERTHEIA, Fighter, Awaken, 0),
SayhaSeer(Race.ERTHEIA, Mystic, Awaken, 0);
private Race _race;
private ClassLevel _level;
private ClassType _type;
private int _classtype2; // 603
private static final Set<PlayerClass> mainSubclassSet;
/* 603
private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith);
*/
private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith, Marauder, CloudBreaker);
/* 603 start
private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(DarkAvenger, Paladin, TempleKnight, ShillienKnight);
private static final Set<PlayerClass> subclasseSet2 = EnumSet.of(TreasureHunter, AbyssWalker, Plainswalker);
private static final Set<PlayerClass> subclasseSet3 = EnumSet.of(Hawkeye, SilverRanger, PhantomRanger);
private static final Set<PlayerClass> subclasseSet4 = EnumSet.of(Warlock, ElementalSummoner, PhantomSummoner);
private static final Set<PlayerClass> subclasseSet5 = EnumSet.of(Sorceror, Spellsinger, Spellhowler);
*/
private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(Paladin, DarkAvenger, TempleKnight, ShillienKnight, phoenixKnight, hellKnight, evaTemplar, shillienTemplar);
private static final Set<PlayerClass> subclasseSet2 = EnumSet.of(Gladiator, Warlord, Warsmith, Destroyer, Tyrant, berserker, doombringer, duelist, dreadnought, titan, grandKhavatari, maestro);
private static final Set<PlayerClass> subclasseSet3 = EnumSet.of(TreasureHunter, Plainswalker, AbyssWalker, BountyHunter, adventurer, windRider, ghostHunter, fortuneSeeker);
private static final Set<PlayerClass> subclasseSet4 = EnumSet.of(Hawkeye, SilverRanger, PhantomRanger, arbalester, trickster, sagittarius, moonlightSentinel, ghostSentinel);
private static final Set<PlayerClass> subclasseSet5 = EnumSet.of(Sorceror, Necromancer, Spellsinger, Spellhowler, maleSoulbreaker, femaleSoulbreaker, maleSoulhound, femaleSoulhound, archmage, soultaker, mysticMuse, stormScreamer);
private static final Set<PlayerClass> subclasseSet6 = EnumSet.of(Prophet, Swordsinger, Bladedancer, Overlord, Warcryer, inspector, judicator, hierophant, swordMuse, spectralDancer, dominator, doomcryer);
private static final Set<PlayerClass> subclasseSet7 = EnumSet.of(Warlock, ElementalSummoner, PhantomSummoner, arcanaLord, elementalMaster, spectralMaster);
private static final Set<PlayerClass> subclasseSet8 = EnumSet.of(Bishop, ElvenElder, ShillienElder, cardinal, evaSaint, shillienSaint);
// 603 end
private static final EnumMap<PlayerClass, Set<PlayerClass>> subclassSetMap = new EnumMap<>(PlayerClass.class);
static
{
Set<PlayerClass> subclasses = getSet(null, Third);
subclasses.removeAll(neverSubclassed);
mainSubclassSet = subclasses;
/* 603 start
subclassSetMap.put(DarkAvenger, subclasseSet1);
subclassSetMap.put(Paladin, subclasseSet1);
subclassSetMap.put(TempleKnight, subclasseSet1);
subclassSetMap.put(ShillienKnight, subclasseSet1);
subclassSetMap.put(TreasureHunter, subclasseSet2);
subclassSetMap.put(AbyssWalker, subclasseSet2);
subclassSetMap.put(Plainswalker, subclasseSet2);
subclassSetMap.put(Hawkeye, subclasseSet3);
subclassSetMap.put(SilverRanger, subclasseSet3);
subclassSetMap.put(PhantomRanger, subclasseSet3);
subclassSetMap.put(Warlock, subclasseSet4);
subclassSetMap.put(ElementalSummoner, subclasseSet4);
subclassSetMap.put(PhantomSummoner, subclasseSet4);
subclassSetMap.put(Sorceror, subclasseSet5);
subclassSetMap.put(Spellsinger, subclasseSet5);
subclassSetMap.put(Spellhowler, subclasseSet5);
*/
subclassSetMap.put(Paladin, subclasseSet1);
subclassSetMap.put(DarkAvenger, subclasseSet1);
subclassSetMap.put(TempleKnight, subclasseSet1);
subclassSetMap.put(ShillienKnight, subclasseSet1);
subclassSetMap.put(phoenixKnight, subclasseSet1);
subclassSetMap.put(hellKnight, subclasseSet1);
subclassSetMap.put(evaTemplar, subclasseSet1);
subclassSetMap.put(shillienTemplar, subclasseSet1);
subclassSetMap.put(Gladiator, subclasseSet2);
subclassSetMap.put(Warlord, subclasseSet2);
subclassSetMap.put(Warsmith, subclasseSet2);
subclassSetMap.put(Destroyer, subclasseSet2);
subclassSetMap.put(Tyrant, subclasseSet2);
subclassSetMap.put(berserker, subclasseSet2);
subclassSetMap.put(duelist, subclasseSet2);
subclassSetMap.put(dreadnought, subclasseSet2);
subclassSetMap.put(titan, subclasseSet2);
subclassSetMap.put(grandKhavatari, subclasseSet2);
subclassSetMap.put(maestro, subclasseSet2);
subclassSetMap.put(TreasureHunter, subclasseSet3);
subclassSetMap.put(Plainswalker, subclasseSet3);
subclassSetMap.put(AbyssWalker, subclasseSet3);
subclassSetMap.put(BountyHunter, subclasseSet3);
subclassSetMap.put(adventurer, subclasseSet3);
subclassSetMap.put(windRider, subclasseSet3);
subclassSetMap.put(ghostHunter, subclasseSet3);
subclassSetMap.put(fortuneSeeker, subclasseSet3);
subclassSetMap.put(Hawkeye, subclasseSet4);
subclassSetMap.put(SilverRanger, subclasseSet4);
subclassSetMap.put(PhantomRanger, subclasseSet4);
subclassSetMap.put(arbalester, subclasseSet4);
subclassSetMap.put(sagittarius, subclasseSet4);
subclassSetMap.put(moonlightSentinel, subclasseSet4);
subclassSetMap.put(ghostSentinel, subclasseSet4);
subclassSetMap.put(Sorceror, subclasseSet5);
subclassSetMap.put(Necromancer, subclasseSet5);
subclassSetMap.put(Spellsinger, subclasseSet5);
subclassSetMap.put(Spellhowler, subclasseSet5);
subclassSetMap.put(maleSoulbreaker, subclasseSet5);
subclassSetMap.put(femaleSoulbreaker, subclasseSet5);
subclassSetMap.put(archmage, subclasseSet5);
subclassSetMap.put(soultaker, subclasseSet5);
subclassSetMap.put(mysticMuse, subclasseSet5);
subclassSetMap.put(stormScreamer, subclasseSet5);
subclassSetMap.put(Prophet, subclasseSet6);
subclassSetMap.put(Swordsinger, subclasseSet6);
subclassSetMap.put(Bladedancer, subclasseSet6);
subclassSetMap.put(Overlord, subclasseSet6);
subclassSetMap.put(Warcryer, subclasseSet6);
subclassSetMap.put(inspector, subclasseSet6);
subclassSetMap.put(hierophant, subclasseSet6);
subclassSetMap.put(swordMuse, subclasseSet6);
subclassSetMap.put(spectralDancer, subclasseSet6);
subclassSetMap.put(dominator, subclasseSet6);
subclassSetMap.put(doomcryer, subclasseSet6);
subclassSetMap.put(Warlock, subclasseSet7);
subclassSetMap.put(ElementalSummoner, subclasseSet7);
subclassSetMap.put(PhantomSummoner, subclasseSet7);
subclassSetMap.put(arcanaLord, subclasseSet7);
subclassSetMap.put(elementalMaster, subclasseSet7);
subclassSetMap.put(spectralMaster, subclasseSet7);
subclassSetMap.put(Bishop, subclasseSet8);
subclassSetMap.put(ElvenElder, subclasseSet8);
subclassSetMap.put(ShillienElder, subclasseSet8);
subclassSetMap.put(cardinal, subclasseSet8);
subclassSetMap.put(evaSaint, subclasseSet8);
subclassSetMap.put(shillienSaint, subclasseSet8);
// 603 end
}
/* 603
PlayerClass(Race race, ClassType pType, ClassLevel pLevel)
*/
PlayerClass(Race race, ClassType pType, ClassLevel pLevel, int ClassType2)
{
_race = race;
_level = pLevel;
_type = pType;
_classtype2 = ClassType2; // 603
}
public final Set<PlayerClass> getAvailableSubclasses(L2PcInstance player)
{
Set<PlayerClass> subclasses = null;
/* l2jtw add
if (_level == Third)
*/
if (_level == Third || _level == Awaken)
{
if (player.getRace() != Race.KAMAEL)
{
subclasses = EnumSet.copyOf(mainSubclassSet);
subclasses.remove(this);
/* 603 start
switch (player.getRace())
{
case ELF:
subclasses.removeAll(getSet(Race.DARK_ELF, Third));
break;
case DARK_ELF:
subclasses.removeAll(getSet(Race.ELF, Third));
break;
}
*/
subclasses.removeAll(getSet(Race.KAMAEL, Third));
Set<PlayerClass> unavailableClasses = subclassSetMap.get(this);
if (unavailableClasses != null)
{
subclasses.removeAll(unavailableClasses);
}
// 603 start
if (player.getSubClasses().size() > 0)
{
for (SubClass subClass : player.getSubClasses().values())
{
int classtype2 = 0;
classtype2 = subClass.getClassDefinition().ClassType2();
switch (classtype2)
{
case 1:
if (subclasseSet1 != null)
subclasses.removeAll(subclasseSet1);
break;
case 2:
if (subclasseSet2 != null)
subclasses.removeAll(subclasseSet2);
break;
case 3:
if (subclasseSet3 != null)
subclasses.removeAll(subclasseSet3);
break;
case 4:
if (subclasseSet4 != null)
subclasses.removeAll(subclasseSet4);
break;
case 5:
if (subclasseSet5 != null)
subclasses.removeAll(subclasseSet5);
break;
case 6:
if (subclasseSet6 != null)
subclasses.removeAll(subclasseSet6);
break;
case 7:
if (subclasseSet7 != null)
subclasses.removeAll(subclasseSet7);
break;
case 8:
if (subclasseSet8 != null)
subclasses.removeAll(subclasseSet8);
break;
default:
break;
}
}
}
// 603 end
}
else
{
/* 603
subclasses = getSet(Race.KAMAEL, Third);
*/
subclasses = EnumSet.copyOf(mainSubclassSet); // 603
subclasses.remove(this);
// Check sex, male subclasses female and vice versa
// If server owner set MaxSubclass > 3 some kamael's cannot take 4 sub
// So, in that situation we must skip sex check
if (Config.MAX_SUBCLASS <= 3)
{
if (player.getAppearance().getSex())
{
subclasses.removeAll(EnumSet.of(femaleSoulbreaker));
}
else
{
subclasses.removeAll(EnumSet.of(maleSoulbreaker));
}
}
if (!player.getSubClasses().containsKey(2) || (player.getSubClasses().get(2).getLevel() < 75))
{
subclasses.removeAll(EnumSet.of(inspector));
}
}
}
return subclasses;
}
public static final EnumSet<PlayerClass> getSet(Race race, ClassLevel level)
{
EnumSet<PlayerClass> allOf = EnumSet.noneOf(PlayerClass.class);
for (PlayerClass playerClass : EnumSet.allOf(PlayerClass.class))
{
if ((race == null) || playerClass.isOfRace(race))
{
if ((level == null) || playerClass.isOfLevel(level))
{
allOf.add(playerClass);
}
}
}
return allOf;
}
public final boolean isOfRace(Race pRace)
{
return _race == pRace;
}
public final boolean isOfType(ClassType pType)
{
return _type == pType;
}
public final boolean isOfLevel(ClassLevel pLevel)
{
return _level == pLevel;
}
// 603 Start
public final int ClassType2()
{
return _classtype2;
}
// 603 End
public final ClassLevel getLevel()
{
return _level;
}
}