Sync with L2JServer Jan 24th 2015.
This commit is contained in:
@ -26,12 +26,9 @@ 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.gameserver.enums.Race;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
/**
|
||||
* @author luisantonioa
|
||||
@ -208,20 +205,20 @@ public enum PlayerClass
|
||||
sigelHellKnight(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
sigelEvasTemplar(Race.ELF, Fighter, ClassLevel.AWAKEN),
|
||||
sigelShilenTemplar(Race.DARK_ELF, Fighter, ClassLevel.AWAKEN),
|
||||
tyrDuelist(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
tyrDreadnought(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
tyrTitan(Race.ORC, Fighter, ClassLevel.AWAKEN),
|
||||
tyrGrandKhavatari(Race.ORC, Fighter, ClassLevel.AWAKEN),
|
||||
tyrMaestro(Race.DWARF, Fighter, ClassLevel.AWAKEN),
|
||||
tyrDoombringer(Race.KAMAEL, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrDuelist(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrDreadnought(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrTitan(Race.ORC, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrGrandKhavatari(Race.ORC, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrMaestro(Race.DWARF, Fighter, ClassLevel.AWAKEN),
|
||||
tyrrDoombringer(Race.KAMAEL, Fighter, ClassLevel.AWAKEN),
|
||||
othellAdventurer(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
othellWindRider(Race.ELF, Fighter, ClassLevel.AWAKEN),
|
||||
othellGhostHunter(Race.DARK_ELF, Fighter, ClassLevel.AWAKEN),
|
||||
othellFortuneSeeker(Race.DWARF, Fighter, ClassLevel.AWAKEN),
|
||||
yrSagittarius(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
yrMoonlightSentinel(Race.ELF, Fighter, ClassLevel.AWAKEN),
|
||||
yrGhostSentinel(Race.DARK_ELF, Fighter, ClassLevel.AWAKEN),
|
||||
yrTrickster(Race.KAMAEL, Fighter, ClassLevel.AWAKEN),
|
||||
yulSagittarius(Race.HUMAN, Fighter, ClassLevel.AWAKEN),
|
||||
yulMoonlightSentinel(Race.ELF, Fighter, ClassLevel.AWAKEN),
|
||||
yulGhostSentinel(Race.DARK_ELF, Fighter, ClassLevel.AWAKEN),
|
||||
yulTrickster(Race.KAMAEL, Fighter, ClassLevel.AWAKEN),
|
||||
feohArchmage(Race.HUMAN, Mystic, ClassLevel.AWAKEN),
|
||||
feohSoultaker(Race.HUMAN, Mystic, ClassLevel.AWAKEN),
|
||||
feohMysticMuse(Race.ELF, Mystic, ClassLevel.AWAKEN),
|
||||
@ -235,9 +232,9 @@ public enum PlayerClass
|
||||
wynnArcanaLord(Race.HUMAN, Mystic, ClassLevel.AWAKEN),
|
||||
wynnElementalMaster(Race.ELF, Mystic, ClassLevel.AWAKEN),
|
||||
wynnSpectralMaster(Race.DARK_ELF, Mystic, ClassLevel.AWAKEN),
|
||||
eolhCardinal(Race.HUMAN, Priest, ClassLevel.AWAKEN),
|
||||
eolhEvaSaint(Race.ELF, Priest, ClassLevel.AWAKEN),
|
||||
eolhShillienSaint(Race.DARK_ELF, Priest, ClassLevel.AWAKEN),
|
||||
aeoreCardinal(Race.HUMAN, Priest, ClassLevel.AWAKEN),
|
||||
aeoreEvaSaint(Race.ELF, Priest, ClassLevel.AWAKEN),
|
||||
aeoreShillienSaint(Race.DARK_ELF, Priest, ClassLevel.AWAKEN),
|
||||
|
||||
ertheiaFighter(Race.ERTHEIA, Fighter, ClassLevel.FIRST),
|
||||
ertheiaWizzard(Race.ERTHEIA, Mystic, ClassLevel.FIRST),
|
||||
@ -255,46 +252,6 @@ public enum PlayerClass
|
||||
private ClassLevel _level;
|
||||
private ClassType _type;
|
||||
|
||||
private static final Set<PlayerClass> mainSubclassSet;
|
||||
private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith);
|
||||
|
||||
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 EnumMap<PlayerClass, Set<PlayerClass>> subclassSetMap = new EnumMap<>(PlayerClass.class);
|
||||
|
||||
static
|
||||
{
|
||||
Set<PlayerClass> subclasses = getSet(null, THIRD);
|
||||
subclasses.removeAll(neverSubclassed);
|
||||
|
||||
mainSubclassSet = subclasses;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
private PlayerClass(Race race, ClassType pType, ClassLevel pLevel)
|
||||
{
|
||||
_race = race;
|
||||
@ -302,50 +259,6 @@ public enum PlayerClass
|
||||
_type = pType;
|
||||
}
|
||||
|
||||
public final Set<PlayerClass> getAvailableSubclasses(L2PcInstance player)
|
||||
{
|
||||
Set<PlayerClass> subclasses = null;
|
||||
|
||||
if (_level == THIRD)
|
||||
{
|
||||
subclasses = EnumSet.copyOf(mainSubclassSet);
|
||||
|
||||
subclasses.remove(this);
|
||||
|
||||
subclasses.removeAll(getSet(Race.ERTHEIA, THIRD));
|
||||
|
||||
if (player.getRace() == Race.KAMAEL)
|
||||
{
|
||||
if (player.getAppearance().getSex())
|
||||
{
|
||||
subclasses.remove(femaleSoulbreaker);
|
||||
}
|
||||
else
|
||||
{
|
||||
subclasses.remove(maleSoulbreaker);
|
||||
}
|
||||
|
||||
if (!player.getSubClasses().containsKey(2) || (player.getSubClasses().get(2).getLevel() < 75))
|
||||
{
|
||||
subclasses.remove(inspector);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only Kamael can take Kamael classes as subclasses.
|
||||
subclasses.removeAll(getSet(Race.KAMAEL, THIRD));
|
||||
}
|
||||
|
||||
Set<PlayerClass> unavailableClasses = subclassSetMap.get(this);
|
||||
|
||||
if (unavailableClasses != null)
|
||||
{
|
||||
subclasses.removeAll(unavailableClasses);
|
||||
}
|
||||
}
|
||||
return subclasses;
|
||||
}
|
||||
|
||||
public static final EnumSet<PlayerClass> getSet(Race race, ClassLevel level)
|
||||
{
|
||||
EnumSet<PlayerClass> allOf = EnumSet.noneOf(PlayerClass.class);
|
||||
|
@ -19,7 +19,7 @@
|
||||
package com.l2jserver.gameserver.model.base;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.datatables.ExperienceTable;
|
||||
import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
|
||||
|
||||
/**
|
||||
* Character Sub-Class Definition <BR>
|
||||
@ -28,10 +28,10 @@ import com.l2jserver.gameserver.datatables.ExperienceTable;
|
||||
*/
|
||||
public final class SubClass
|
||||
{
|
||||
private static final byte _maxLevel = Config.MAX_SUBCLASS_LEVEL < ExperienceTable.getInstance().getMaxLevel() ? Config.MAX_SUBCLASS_LEVEL : (byte) (ExperienceTable.getInstance().getMaxLevel() - 1);
|
||||
private static final byte _maxLevel = Config.MAX_SUBCLASS_LEVEL < ExperienceData.getInstance().getMaxLevel() ? Config.MAX_SUBCLASS_LEVEL : (byte) (ExperienceData.getInstance().getMaxLevel() - 1);
|
||||
|
||||
private PlayerClass _class;
|
||||
private long _exp = ExperienceTable.getInstance().getExpForLevel(Config.BASE_SUBCLASS_LEVEL);
|
||||
private long _exp = ExperienceData.getInstance().getExpForLevel(Config.BASE_SUBCLASS_LEVEL);
|
||||
private long _sp = 0;
|
||||
private byte _level = Config.BASE_SUBCLASS_LEVEL;
|
||||
private int _classIndex = 1;
|
||||
@ -84,9 +84,9 @@ public final class SubClass
|
||||
|
||||
public void setExp(long expValue)
|
||||
{
|
||||
if (expValue > (ExperienceTable.getInstance().getExpForLevel(_maxLevel + 1) - 1))
|
||||
if (!_dualClass && (expValue > (ExperienceData.getInstance().getExpForLevel(_maxLevel + 1) - 1)))
|
||||
{
|
||||
expValue = ExperienceTable.getInstance().getExpForLevel(_maxLevel + 1) - 1;
|
||||
expValue = ExperienceData.getInstance().getExpForLevel(_maxLevel + 1) - 1;
|
||||
}
|
||||
|
||||
_exp = expValue;
|
||||
@ -134,7 +134,7 @@ public final class SubClass
|
||||
}
|
||||
|
||||
_level++;
|
||||
setExp(ExperienceTable.getInstance().getExpForLevel(getLevel()));
|
||||
setExp(ExperienceData.getInstance().getExpForLevel(getLevel()));
|
||||
}
|
||||
|
||||
public void decLevel()
|
||||
@ -145,6 +145,6 @@ public final class SubClass
|
||||
}
|
||||
|
||||
_level--;
|
||||
setExp(ExperienceTable.getInstance().getExpForLevel(getLevel()));
|
||||
setExp(ExperienceData.getInstance().getExpForLevel(getLevel()));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user