Attempt to fix revelation skill list issue.
This commit is contained in:
parent
fe3783f992
commit
7f8a736aba
@ -3934,6 +3934,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3966,6 +3967,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3998,6 +4000,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -4030,6 +4033,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
|
@ -698,6 +698,7 @@
|
||||
<value level="2">icon.alchemy_mix_cube</value>
|
||||
</icon>
|
||||
<operateType>P</operateType>
|
||||
<displayInList>false</displayInList>
|
||||
</skill>
|
||||
<skill id="17944" toLevel="1" name="Scroll of Escape: Talking Island Village">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
|
@ -2348,9 +2348,6 @@
|
||||
<xs:element name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="ON_MAGIC_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_CRITICAL_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_EQUIP" />
|
||||
<xs:element minOccurs="0" name="slot" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="rate" type="xs:unsignedByte" />
|
||||
<xs:element minOccurs="0" name="max" type="xs:unsignedByte" />
|
||||
@ -2642,6 +2639,7 @@
|
||||
<xs:element name="isSharedWithSummon" type="xs:boolean" />
|
||||
<xs:element name="halfKillRate" type="xs:unsignedByte" />
|
||||
<xs:element name="reuseDelayGroup" type="xs:unsignedShort" />
|
||||
<xs:element name="displayInList" type="xs:boolean" />
|
||||
<xs:element name="isSuicideAttack" type="xs:boolean" />
|
||||
<xs:element name="toggleGroupId" type="xs:unsignedByte" />
|
||||
<xs:element name="abnormallVL" type="xs:unsignedByte" />
|
||||
|
@ -1695,12 +1695,6 @@ public final class SkillTreesData implements IGameXmlReader
|
||||
return true;
|
||||
}
|
||||
|
||||
// Exclude Revelation Skills from this check.
|
||||
if (getRevelationSkill(player.isDualClassActive() ? SubclassType.DUALCLASS : SubclassType.BASECLASS, skill.getId(), Math.min(skill.getLevel(), maxLvl)) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11705,6 +11705,34 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Include transformation skills and those skills that are allowed during transformation.
|
||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||
|
||||
// Revelation skills.
|
||||
if (isDualClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
else if (!isSubClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Include transformation skills.
|
||||
currentSkills.addAll(transformSkills.values());
|
||||
@ -11716,6 +11744,7 @@ public final class L2PcInstance extends L2Playable
|
||||
.filter(Objects::nonNull)
|
||||
.filter(s -> !s.isBlockActionUseSkill()) // Skills that are blocked from player use are not shown in skill list.
|
||||
.filter(s -> !SkillTreesData.getInstance().isAlchemySkill(s.getId(), s.getLevel()))
|
||||
.filter(s -> s.isDisplayInList())
|
||||
.collect(Collectors.toList());
|
||||
//@formatter:on
|
||||
}
|
||||
|
@ -209,6 +209,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
private final double _magicCriticalRate;
|
||||
private final SkillBuffType _buffType;
|
||||
private final boolean _displayInList;
|
||||
|
||||
public Skill(StatsSet set)
|
||||
{
|
||||
@ -441,6 +442,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
_magicCriticalRate = set.getDouble("magicCriticalRate", 0);
|
||||
_buffType = isTriggeredSkill() ? SkillBuffType.TRIGGER : isToggle() ? SkillBuffType.TOGGLE : isDance() ? SkillBuffType.DANCE : isDebuff() ? SkillBuffType.DEBUFF : !isHealingPotionSkill() ? SkillBuffType.BUFF : SkillBuffType.NONE;
|
||||
_displayInList = set.getBoolean("displayInList", true);
|
||||
}
|
||||
|
||||
public TraitType getTraitType()
|
||||
@ -1805,6 +1807,11 @@ public final class Skill implements IIdentifiable
|
||||
return _irreplacableBuff;
|
||||
}
|
||||
|
||||
public boolean isDisplayInList()
|
||||
{
|
||||
return _displayInList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if skill could not be requested for use by players.
|
||||
*/
|
||||
|
@ -3934,6 +3934,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3966,6 +3967,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3998,6 +4000,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -4030,6 +4033,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
|
@ -698,6 +698,7 @@
|
||||
<value level="2">icon.alchemy_mix_cube</value>
|
||||
</icon>
|
||||
<operateType>P</operateType>
|
||||
<displayInList>false</displayInList>
|
||||
</skill>
|
||||
<skill id="17944" toLevel="1" name="Scroll of Escape: Talking Island Village">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
|
@ -2471,9 +2471,6 @@
|
||||
<xs:element name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="ON_MAGIC_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_CRITICAL_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_EQUIP" />
|
||||
<xs:element minOccurs="0" name="slot" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="rate" type="xs:unsignedByte" />
|
||||
<xs:element minOccurs="0" name="max" type="xs:unsignedByte" />
|
||||
@ -2765,6 +2762,7 @@
|
||||
<xs:element name="isSharedWithSummon" type="xs:boolean" />
|
||||
<xs:element name="halfKillRate" type="xs:unsignedByte" />
|
||||
<xs:element name="reuseDelayGroup" type="xs:unsignedShort" />
|
||||
<xs:element name="displayInList" type="xs:boolean" />
|
||||
<xs:element name="isSuicideAttack" type="xs:boolean" />
|
||||
<xs:element name="toggleGroupId" type="xs:unsignedByte" />
|
||||
<xs:element name="abnormallVL" type="xs:unsignedByte" />
|
||||
|
@ -1695,12 +1695,6 @@ public final class SkillTreesData implements IGameXmlReader
|
||||
return true;
|
||||
}
|
||||
|
||||
// Exclude Revelation Skills from this check.
|
||||
if (getRevelationSkill(player.isDualClassActive() ? SubclassType.DUALCLASS : SubclassType.BASECLASS, skill.getId(), Math.min(skill.getLevel(), maxLvl)) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11706,6 +11706,34 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Include transformation skills and those skills that are allowed during transformation.
|
||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||
|
||||
// Revelation skills.
|
||||
if (isDualClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
else if (!isSubClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Include transformation skills.
|
||||
currentSkills.addAll(transformSkills.values());
|
||||
@ -11717,6 +11745,7 @@ public final class L2PcInstance extends L2Playable
|
||||
.filter(Objects::nonNull)
|
||||
.filter(s -> !s.isBlockActionUseSkill()) // Skills that are blocked from player use are not shown in skill list.
|
||||
.filter(s -> !SkillTreesData.getInstance().isAlchemySkill(s.getId(), s.getLevel()))
|
||||
.filter(s -> s.isDisplayInList())
|
||||
.collect(Collectors.toList());
|
||||
//@formatter:on
|
||||
}
|
||||
|
@ -209,6 +209,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
private final double _magicCriticalRate;
|
||||
private final SkillBuffType _buffType;
|
||||
private final boolean _displayInList;
|
||||
|
||||
public Skill(StatsSet set)
|
||||
{
|
||||
@ -441,6 +442,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
_magicCriticalRate = set.getDouble("magicCriticalRate", 0);
|
||||
_buffType = isTriggeredSkill() ? SkillBuffType.TRIGGER : isToggle() ? SkillBuffType.TOGGLE : isDance() ? SkillBuffType.DANCE : isDebuff() ? SkillBuffType.DEBUFF : !isHealingPotionSkill() ? SkillBuffType.BUFF : SkillBuffType.NONE;
|
||||
_displayInList = set.getBoolean("displayInList", true);
|
||||
}
|
||||
|
||||
public TraitType getTraitType()
|
||||
@ -1805,6 +1807,11 @@ public final class Skill implements IIdentifiable
|
||||
return _irreplacableBuff;
|
||||
}
|
||||
|
||||
public boolean isDisplayInList()
|
||||
{
|
||||
return _displayInList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if skill could not be requested for use by players.
|
||||
*/
|
||||
|
@ -3934,6 +3934,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3966,6 +3967,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3998,6 +4000,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -4030,6 +4033,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
|
@ -698,6 +698,7 @@
|
||||
<value level="2">icon.alchemy_mix_cube</value>
|
||||
</icon>
|
||||
<operateType>P</operateType>
|
||||
<displayInList>false</displayInList>
|
||||
</skill>
|
||||
<skill id="17944" toLevel="1" name="Scroll of Escape: Talking Island Village">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
|
@ -2503,9 +2503,6 @@
|
||||
<xs:element name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="ON_MAGIC_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_CRITICAL_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_EQUIP" />
|
||||
<xs:element minOccurs="0" name="slot" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="rate" type="xs:unsignedByte" />
|
||||
<xs:element minOccurs="0" name="max" type="xs:unsignedByte" />
|
||||
@ -2803,6 +2800,7 @@
|
||||
<xs:element name="isSharedWithSummon" type="xs:boolean" />
|
||||
<xs:element name="halfKillRate" type="xs:unsignedByte" />
|
||||
<xs:element name="reuseDelayGroup" type="xs:unsignedShort" />
|
||||
<xs:element name="displayInList" type="xs:boolean" />
|
||||
<xs:element name="isSuicideAttack" type="xs:boolean" />
|
||||
<xs:element name="toggleGroupId" type="xs:unsignedByte" />
|
||||
<xs:element name="abnormallVL" type="xs:unsignedByte" />
|
||||
|
@ -1695,12 +1695,6 @@ public final class SkillTreesData implements IGameXmlReader
|
||||
return true;
|
||||
}
|
||||
|
||||
// Exclude Revelation Skills from this check.
|
||||
if (getRevelationSkill(player.isDualClassActive() ? SubclassType.DUALCLASS : SubclassType.BASECLASS, skill.getId(), Math.min(skill.getLevel(), maxLvl)) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11716,6 +11716,34 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Include transformation skills and those skills that are allowed during transformation.
|
||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||
|
||||
// Revelation skills.
|
||||
if (isDualClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
else if (!isSubClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Include transformation skills.
|
||||
currentSkills.addAll(transformSkills.values());
|
||||
@ -11727,6 +11755,7 @@ public final class L2PcInstance extends L2Playable
|
||||
.filter(Objects::nonNull)
|
||||
.filter(s -> !s.isBlockActionUseSkill()) // Skills that are blocked from player use are not shown in skill list.
|
||||
.filter(s -> !SkillTreesData.getInstance().isAlchemySkill(s.getId(), s.getLevel()))
|
||||
.filter(s -> s.isDisplayInList())
|
||||
.collect(Collectors.toList());
|
||||
//@formatter:on
|
||||
}
|
||||
|
@ -209,6 +209,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
private final double _magicCriticalRate;
|
||||
private final SkillBuffType _buffType;
|
||||
private final boolean _displayInList;
|
||||
|
||||
public Skill(StatsSet set)
|
||||
{
|
||||
@ -441,6 +442,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
_magicCriticalRate = set.getDouble("magicCriticalRate", 0);
|
||||
_buffType = isTriggeredSkill() ? SkillBuffType.TRIGGER : isToggle() ? SkillBuffType.TOGGLE : isDance() ? SkillBuffType.DANCE : isDebuff() ? SkillBuffType.DEBUFF : !isHealingPotionSkill() ? SkillBuffType.BUFF : SkillBuffType.NONE;
|
||||
_displayInList = set.getBoolean("displayInList", true);
|
||||
}
|
||||
|
||||
public TraitType getTraitType()
|
||||
@ -1805,6 +1807,11 @@ public final class Skill implements IIdentifiable
|
||||
return _irreplacableBuff;
|
||||
}
|
||||
|
||||
public boolean isDisplayInList()
|
||||
{
|
||||
return _displayInList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if skill could not be requested for use by players.
|
||||
*/
|
||||
|
@ -3934,6 +3934,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3966,6 +3967,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -3998,6 +4000,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
@ -4030,6 +4033,7 @@
|
||||
<reuseDelayGroup>1566</reuseDelayGroup>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<displayInList>false</displayInList>
|
||||
<conditions>
|
||||
<condition name="OpEncumbered">
|
||||
<weightPercent>10</weightPercent>
|
||||
|
@ -698,6 +698,7 @@
|
||||
<value level="2">icon.alchemy_mix_cube</value>
|
||||
</icon>
|
||||
<operateType>P</operateType>
|
||||
<displayInList>false</displayInList>
|
||||
</skill>
|
||||
<skill id="17944" toLevel="1" name="Scroll of Escape: Talking Island Village">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
|
@ -2477,9 +2477,6 @@
|
||||
<xs:element name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="ON_MAGIC_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_CRITICAL_SKILL" />
|
||||
<xs:element minOccurs="0" name="ON_EQUIP" />
|
||||
<xs:element minOccurs="0" name="slot" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="rate" type="xs:unsignedByte" />
|
||||
<xs:element minOccurs="0" name="max" type="xs:unsignedByte" />
|
||||
@ -2818,6 +2815,7 @@
|
||||
<xs:element name="isSharedWithSummon" type="xs:boolean" />
|
||||
<xs:element name="halfKillRate" type="xs:unsignedByte" />
|
||||
<xs:element name="reuseDelayGroup" type="xs:unsignedShort" />
|
||||
<xs:element name="displayInList" type="xs:boolean" />
|
||||
<xs:element name="isSuicideAttack" type="xs:boolean" />
|
||||
<xs:element name="toggleGroupId" type="xs:unsignedByte" />
|
||||
<xs:element name="abnormallVL" type="xs:unsignedByte" />
|
||||
|
@ -1695,12 +1695,6 @@ public final class SkillTreesData implements IGameXmlReader
|
||||
return true;
|
||||
}
|
||||
|
||||
// Exclude Revelation Skills from this check.
|
||||
if (getRevelationSkill(player.isDualClassActive() ? SubclassType.DUALCLASS : SubclassType.BASECLASS, skill.getId(), Math.min(skill.getLevel(), maxLvl)) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11699,6 +11699,34 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Include transformation skills and those skills that are allowed during transformation.
|
||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||
|
||||
// Revelation skills.
|
||||
if (isDualClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
else if (!isSubClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Include transformation skills.
|
||||
currentSkills.addAll(transformSkills.values());
|
||||
@ -11710,6 +11738,7 @@ public final class L2PcInstance extends L2Playable
|
||||
.filter(Objects::nonNull)
|
||||
.filter(s -> !s.isBlockActionUseSkill()) // Skills that are blocked from player use are not shown in skill list.
|
||||
.filter(s -> !SkillTreesData.getInstance().isAlchemySkill(s.getId(), s.getLevel()))
|
||||
.filter(s -> s.isDisplayInList())
|
||||
.collect(Collectors.toList());
|
||||
//@formatter:on
|
||||
}
|
||||
|
@ -209,6 +209,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
private final double _magicCriticalRate;
|
||||
private final SkillBuffType _buffType;
|
||||
private final boolean _displayInList;
|
||||
|
||||
public Skill(StatsSet set)
|
||||
{
|
||||
@ -441,6 +442,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
_magicCriticalRate = set.getDouble("magicCriticalRate", 0);
|
||||
_buffType = isTriggeredSkill() ? SkillBuffType.TRIGGER : isToggle() ? SkillBuffType.TOGGLE : isDance() ? SkillBuffType.DANCE : isDebuff() ? SkillBuffType.DEBUFF : !isHealingPotionSkill() ? SkillBuffType.BUFF : SkillBuffType.NONE;
|
||||
_displayInList = set.getBoolean("displayInList", true);
|
||||
}
|
||||
|
||||
public TraitType getTraitType()
|
||||
@ -1805,6 +1807,11 @@ public final class Skill implements IIdentifiable
|
||||
return _irreplacableBuff;
|
||||
}
|
||||
|
||||
public boolean isDisplayInList()
|
||||
{
|
||||
return _displayInList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if skill could not be requested for use by players.
|
||||
*/
|
||||
|
@ -1695,12 +1695,6 @@ public final class SkillTreesData implements IGameXmlReader
|
||||
return true;
|
||||
}
|
||||
|
||||
// Exclude Revelation Skills from this check.
|
||||
if (getRevelationSkill(player.isDualClassActive() ? SubclassType.DUALCLASS : SubclassType.BASECLASS, skill.getId(), Math.min(skill.getLevel(), maxLvl)) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11639,6 +11639,34 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Include transformation skills and those skills that are allowed during transformation.
|
||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||
|
||||
// Revelation skills.
|
||||
if (isDualClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
else if (!isSubClassActive())
|
||||
{
|
||||
int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_MAIN_CLASS, 0);
|
||||
if (revelationSkill != 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(revelationSkill, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Include transformation skills.
|
||||
currentSkills.addAll(transformSkills.values());
|
||||
@ -11650,6 +11678,7 @@ public final class L2PcInstance extends L2Playable
|
||||
.filter(Objects::nonNull)
|
||||
.filter(s -> !s.isBlockActionUseSkill()) // Skills that are blocked from player use are not shown in skill list.
|
||||
.filter(s -> !SkillTreesData.getInstance().isAlchemySkill(s.getId(), s.getLevel()))
|
||||
.filter(s -> s.isDisplayInList())
|
||||
.collect(Collectors.toList());
|
||||
//@formatter:on
|
||||
}
|
||||
|
@ -209,6 +209,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
private final double _magicCriticalRate;
|
||||
private final SkillBuffType _buffType;
|
||||
private final boolean _displayInList;
|
||||
|
||||
public Skill(StatsSet set)
|
||||
{
|
||||
@ -441,6 +442,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
_magicCriticalRate = set.getDouble("magicCriticalRate", 0);
|
||||
_buffType = isTriggeredSkill() ? SkillBuffType.TRIGGER : isToggle() ? SkillBuffType.TOGGLE : isDance() ? SkillBuffType.DANCE : isDebuff() ? SkillBuffType.DEBUFF : !isHealingPotionSkill() ? SkillBuffType.BUFF : SkillBuffType.NONE;
|
||||
_displayInList = set.getBoolean("displayInList", true);
|
||||
}
|
||||
|
||||
public TraitType getTraitType()
|
||||
@ -1805,6 +1807,11 @@ public final class Skill implements IIdentifiable
|
||||
return _irreplacableBuff;
|
||||
}
|
||||
|
||||
public boolean isDisplayInList()
|
||||
{
|
||||
return _displayInList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if skill could not be requested for use by players.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user