Extra checks for trigger skills by attack.

This commit is contained in:
MobiusDev 2017-09-21 22:04:12 +00:00
parent 99897b17c9
commit 23d3883d34
11 changed files with 151 additions and 55 deletions

View File

@ -151,7 +151,11 @@ public final class TriggerSkillByAttack extends AbstractEffect
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
final BuffInfo info = ((L2Character) target).getEffectList().getBuffInfoBySkillId(triggerSkill.getId());
if ((info == null) || (info.getSkill().getLevel() < triggerSkill.getLevel()))
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
}
}
}

View File

@ -199,17 +199,6 @@
<value level="10">110</value>
</magicLvl>
<effects>
<effect name="TriggerSkillByAttack">
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>50</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<skillLevel>1</skillLevel>
</effect>
<effect name="SkillCritical">
<stat>STR</stat>
</effect>
@ -529,6 +518,17 @@
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
</effect>
<effect name="TriggerSkillByAttack">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<chance>50</chance>
<targetType>SELF</targetType>
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>1</skillLevel>
</effect>
</effects>
</skill>
<skill id="10256" toLevel="10" name="Superior HP Mastery">
@ -2319,27 +2319,35 @@
<isMagic>4</isMagic>
<targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope>
<isTriggeredSkill>true</isTriggeredSkill>
<effects>
<effect name="DispelBySlotProbability">
<dispel>WEAPON_MASTER_SPECIAL</dispel>
<rate>100</rate>
</effect>
<effect name="BlockAbnormalSlot" fromLevel="3" toLevel="3">
<slot>WEAPON_MASTER_SPECIAL</slot>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="1" toLevel="1">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>20</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>2</skillLevel>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="2" toLevel="2">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>10</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>3</skillLevel>
</effect>
<effect name="PAtk">

View File

@ -1109,6 +1109,20 @@ public final class CharEffectList
return;
}
// Fix for stacking trigger skills
if (skill.isTriggeredSkill())
{
final BuffInfo triggerInfo = info.getEffected().getEffectList().getBuffInfoBySkillId(skill.getId());
if (triggerInfo != null)
{
if (triggerInfo.getSkill().getLevel() >= skill.getLevel())
{
return;
}
stopAndRemove(triggerInfo);
}
}
// Passive effects are treated specially
if (skill.isPassive())
{

View File

@ -151,7 +151,11 @@ public final class TriggerSkillByAttack extends AbstractEffect
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
final BuffInfo info = ((L2Character) target).getEffectList().getBuffInfoBySkillId(triggerSkill.getId());
if ((info == null) || (info.getSkill().getLevel() < triggerSkill.getLevel()))
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
}
}
}

View File

@ -199,17 +199,6 @@
<value level="10">110</value>
</magicLvl>
<effects>
<effect name="TriggerSkillByAttack">
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>50</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<skillLevel>1</skillLevel>
</effect>
<effect name="SkillCritical">
<stat>STR</stat>
</effect>
@ -529,6 +518,17 @@
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
</effect>
<effect name="TriggerSkillByAttack">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<chance>50</chance>
<targetType>SELF</targetType>
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>1</skillLevel>
</effect>
</effects>
</skill>
<skill id="10256" toLevel="10" name="Superior HP Mastery">
@ -2342,27 +2342,35 @@
<isMagic>4</isMagic>
<targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope>
<isTriggeredSkill>true</isTriggeredSkill>
<effects>
<effect name="DispelBySlotProbability">
<dispel>WEAPON_MASTER_SPECIAL</dispel>
<rate>100</rate>
</effect>
<effect name="BlockAbnormalSlot" fromLevel="3" toLevel="3">
<slot>WEAPON_MASTER_SPECIAL</slot>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="1" toLevel="1">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>20</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>2</skillLevel>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="2" toLevel="2">
<isCritical>true</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>10</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>3</skillLevel>
</effect>
<effect name="PAtk">

View File

@ -1109,6 +1109,20 @@ public final class CharEffectList
return;
}
// Fix for stacking trigger skills
if (skill.isTriggeredSkill())
{
final BuffInfo triggerInfo = info.getEffected().getEffectList().getBuffInfoBySkillId(skill.getId());
if (triggerInfo != null)
{
if (triggerInfo.getSkill().getLevel() >= skill.getLevel())
{
return;
}
stopAndRemove(triggerInfo);
}
}
// Passive effects are treated specially
if (skill.isPassive())
{

View File

@ -151,7 +151,11 @@ public final class TriggerSkillByAttack extends AbstractEffect
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
final BuffInfo info = ((L2Character) target).getEffectList().getBuffInfoBySkillId(triggerSkill.getId());
if ((info == null) || (info.getSkill().getLevel() < triggerSkill.getLevel()))
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
}
}
}

View File

@ -199,17 +199,6 @@
<value level="10">110</value>
</magicLvl>
<effects>
<effect name="TriggerSkillByAttack">
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>50</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<skillLevel>1</skillLevel>
</effect>
<effect name="SkillCritical">
<stat>STR</stat>
</effect>
@ -529,6 +518,17 @@
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
</effect>
<effect name="TriggerSkillByAttack">
<isCritical>false</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<chance>50</chance>
<targetType>SELF</targetType>
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>1</skillLevel>
</effect>
</effects>
</skill>
<skill id="10256" toLevel="10" name="Superior HP Mastery">
@ -2347,27 +2347,35 @@
<isMagic>4</isMagic>
<targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope>
<isTriggeredSkill>true</isTriggeredSkill>
<effects>
<effect name="DispelBySlotProbability">
<dispel>WEAPON_MASTER_SPECIAL</dispel>
<rate>100</rate>
</effect>
<effect name="BlockAbnormalSlot" fromLevel="3" toLevel="3">
<slot>WEAPON_MASTER_SPECIAL</slot>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="1" toLevel="1">
<isCritical>false</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>20</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>2</skillLevel>
</effect>
<effect name="TriggerSkillByAttack" fromLevel="2" toLevel="2">
<isCritical>false</isCritical>
<attackerType>L2Character</attackerType>
<minAttackerLevel>1</minAttackerLevel>
<maxAttackerLevel>107</maxAttackerLevel>
<minDamage>1</minDamage>
<chance>10</chance>
<targetType>SELF</targetType>
<isCritical>true</isCritical>
<skillId>10284</skillId> <!-- Lightning Force -->
<minDamage>1</minDamage>
<skillId>10284</skillId>
<skillLevel>3</skillLevel>
</effect>
<effect name="PAtk">

View File

@ -1109,6 +1109,20 @@ public final class CharEffectList
return;
}
// Fix for stacking trigger skills
if (skill.isTriggeredSkill())
{
final BuffInfo triggerInfo = info.getEffected().getEffectList().getBuffInfoBySkillId(skill.getId());
if (triggerInfo != null)
{
if (triggerInfo.getSkill().getLevel() >= skill.getLevel())
{
return;
}
stopAndRemove(triggerInfo);
}
}
// Passive effects are treated specially
if (skill.isPassive())
{

View File

@ -151,7 +151,11 @@ public final class TriggerSkillByAttack extends AbstractEffect
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
final BuffInfo info = ((L2Character) target).getEffectList().getBuffInfoBySkillId(triggerSkill.getId());
if ((info == null) || (info.getSkill().getLevel() < triggerSkill.getLevel()))
{
SkillCaster.triggerCast(event.getAttacker(), (L2Character) target, triggerSkill);
}
}
}

View File

@ -1109,6 +1109,20 @@ public final class CharEffectList
return;
}
// Fix for stacking trigger skills
if (skill.isTriggeredSkill())
{
final BuffInfo triggerInfo = info.getEffected().getEffectList().getBuffInfoBySkillId(skill.getId());
if (triggerInfo != null)
{
if (triggerInfo.getSkill().getLevel() >= skill.getLevel())
{
return;
}
stopAndRemove(triggerInfo);
}
}
// Passive effects are treated specially
if (skill.isPassive())
{