Use configurations for attackables calcMagicSuccess method.
This commit is contained in:
parent
c905853551
commit
c578bd43c1
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ EnableRandomEnchantEffect = False
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForDmgPenalty = 78
|
||||
|
||||
@ -62,7 +62,7 @@ SkillDmgPenaltyForLvLDifferences = 0.8, 0.6, 0.5, 0.42, 0.36, 0.32, 0.28, 0.25
|
||||
# The minimum NPC level for the Gracia Epilogue rule:
|
||||
# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
|
||||
# Notes:
|
||||
# If you want to disable this feature then set it 99
|
||||
# If you want to disable this feature then set it to max player level.
|
||||
# Default: 78
|
||||
MinNPCLevelForMagicPenalty = 78
|
||||
|
||||
|
@ -18,8 +18,6 @@ package handlers.effecthandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.Party;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
@ -30,6 +28,7 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -44,22 +43,7 @@ public final class Plunder extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.Creature;
|
||||
@ -25,6 +23,7 @@ import com.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
@ -40,22 +39,7 @@ public final class Spoil extends AbstractEffect
|
||||
@Override
|
||||
public boolean calcSuccess(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final int lvlDifference = (effected.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : effector.getLevel()));
|
||||
final double lvlModifier = Math.pow(1.3, lvlDifference);
|
||||
float targetModifier = 1;
|
||||
if (effected.isAttackable() && !effected.isRaid() && !effected.isRaidMinion() && (effected.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (effector.getActingPlayer() != null) && ((effected.getLevel() - effector.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = effected.getLevel() - effector.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
return Rnd.get(100) < (100 - Math.round((float) (lvlModifier * targetModifier)));
|
||||
return Formulas.calcMagicSuccess(effector, effected, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -749,41 +749,51 @@ public final class Formulas
|
||||
|
||||
public static boolean calcMagicSuccess(Creature attacker, Creature target, Skill skill)
|
||||
{
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
int mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
double lvlModifier = 1;
|
||||
float targetModifier = 1;
|
||||
int mAccModifier = 1;
|
||||
if (attacker.isAttackable() || target.isAttackable())
|
||||
{
|
||||
mAccModifier = 2;
|
||||
lvlModifier = Math.pow(1.3, target.getLevel() - (skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()));
|
||||
|
||||
if ((attacker.getActingPlayer() != null) && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
else
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
final int mAccDiff = attacker.getMagicAccuracy() - target.getMagicEvasionRate();
|
||||
mAccModifier = 100;
|
||||
if (mAccDiff > -20)
|
||||
{
|
||||
mAccModifier = 2;
|
||||
}
|
||||
else if (mAccDiff > -25)
|
||||
{
|
||||
mAccModifier = 30;
|
||||
}
|
||||
else if (mAccDiff > -30)
|
||||
{
|
||||
mAccModifier = 60;
|
||||
}
|
||||
else if (mAccDiff > -35)
|
||||
{
|
||||
mAccModifier = 90;
|
||||
}
|
||||
}
|
||||
|
||||
float targetModifier = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_MAGIC_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 3))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 2;
|
||||
if (lvlDiff >= Config.NPC_SKILL_CHANCE_PENALTY.size())
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(Config.NPC_SKILL_CHANCE_PENALTY.size() - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetModifier = Config.NPC_SKILL_CHANCE_PENALTY.get(lvlDiff);
|
||||
}
|
||||
}
|
||||
// general magic resist
|
||||
final double resModifier = target.getStat().getValue(Stats.MAGIC_SUCCESS_RES, 1);
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * targetModifier * resModifier));
|
||||
final int rate = 100 - Math.round((float) (mAccModifier * lvlModifier * targetModifier * resModifier));
|
||||
|
||||
return (Rnd.get(100) < rate);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user