Addition of custom class balance configurations.
This commit is contained in:
@@ -43,6 +43,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -114,6 +115,7 @@ public final class Config
|
||||
private static final String CUSTOM_BANKING_CONFIG_FILE = "./config/Custom/Banking.ini";
|
||||
private static final String CUSTOM_CHAMPION_MONSTERS_CONFIG_FILE = "./config/Custom/ChampionMonsters.ini";
|
||||
private static final String CUSTOM_CHAT_MODERATION_CONFIG_FILE = "./config/Custom/ChatModeration.ini";
|
||||
private static final String CUSTOM_CLASS_BALANCE_CONFIG_FILE = "./config/Custom/ClassBalance.ini";
|
||||
private static final String CUSTOM_COMMUNITY_BOARD_CONFIG_FILE = "./config/Custom/CommunityBoard.ini";
|
||||
private static final String CUSTOM_CUSTOM_MAIL_MANAGER_CONFIG_FILE = "./config/Custom/CustomMailManager.ini";
|
||||
private static final String CUSTOM_DUALBOX_CHECK_CONFIG_FILE = "./config/Custom/DualboxCheck.ini";
|
||||
@@ -1119,6 +1121,18 @@ public final class Config
|
||||
public static String TITLE_FOR_PVP_AMOUNT4;
|
||||
public static String TITLE_FOR_PVP_AMOUNT5;
|
||||
public static boolean CHAT_ADMIN;
|
||||
public static Map<Integer, Float> PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static Map<Integer, Float> PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>();
|
||||
public static boolean MULTILANG_ENABLE;
|
||||
public static List<String> MULTILANG_ALLOWED = new ArrayList<>();
|
||||
public static String MULTILANG_DEFAULT;
|
||||
@@ -2610,6 +2624,166 @@ public final class Config
|
||||
|
||||
CHAT_ADMIN = ChatModeration.getBoolean("ChatAdmin", true);
|
||||
|
||||
// Load ClassBalance config file (if exists)
|
||||
final PropertiesParser ClassBalance = new PropertiesParser(CUSTOM_CLASS_BALANCE_CONFIG_FILE);
|
||||
|
||||
final String[] pveMagicalSkillDamageMultipiers = ClassBalance.getString("PveMagicalSkillDamageMultipiers", "").trim().split(";");
|
||||
PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pveMagicalSkillDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pveMagicalSkillDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpMagicalSkillDamageMultipiers = ClassBalance.getString("PvpMagicalSkillDamageMultipiers", "").trim().split(";");
|
||||
PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pvpMagicalSkillDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpMagicalSkillDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pveMagicalSkillDefenceMultipiers = ClassBalance.getString("PveMagicalSkillDefenceMultipiers", "").trim().split(";");
|
||||
PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pveMagicalSkillDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pveMagicalSkillDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpMagicalSkillDefenceMultipiers = ClassBalance.getString("PvpMagicalSkillDefenceMultipiers", "").trim().split(";");
|
||||
PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pvpMagicalSkillDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpMagicalSkillDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvePhysicalSkillDamageMultipiers = ClassBalance.getString("PvePhysicalSkillDamageMultipiers", "").trim().split(";");
|
||||
PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pvePhysicalSkillDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvePhysicalSkillDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpPhysicalSkillDamageMultipiers = ClassBalance.getString("PvpPhysicalSkillDamageMultipiers", "").trim().split(";");
|
||||
PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pvpPhysicalSkillDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpPhysicalSkillDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvePhysicalSkillDefenceMultipiers = ClassBalance.getString("PvePhysicalSkillDefenceMultipiers", "").trim().split(";");
|
||||
PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pvePhysicalSkillDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvePhysicalSkillDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpPhysicalSkillDefenceMultipiers = ClassBalance.getString("PvpPhysicalSkillDefenceMultipiers", "").trim().split(";");
|
||||
PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pvpPhysicalSkillDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpPhysicalSkillDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvePhysicalAttackDamageMultipiers = ClassBalance.getString("PvePhysicalAttackDamageMultipiers", "").trim().split(";");
|
||||
PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pvePhysicalAttackDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvePhysicalAttackDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpPhysicalAttackDamageMultipiers = ClassBalance.getString("PvpPhysicalAttackDamageMultipiers", "").trim().split(";");
|
||||
PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.clear();
|
||||
if (pvpPhysicalAttackDamageMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpPhysicalAttackDamageMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvePhysicalAttackDefenceMultipiers = ClassBalance.getString("PvePhysicalAttackDefenceMultipiers", "").trim().split(";");
|
||||
PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pvePhysicalAttackDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvePhysicalAttackDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
final String[] pvpPhysicalAttackDefenceMultipiers = ClassBalance.getString("PvpPhysicalAttackDefenceMultipiers", "").trim().split(";");
|
||||
PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.clear();
|
||||
if (pvpPhysicalAttackDefenceMultipiers.length > 0)
|
||||
{
|
||||
for (String info : pvpPhysicalAttackDefenceMultipiers)
|
||||
{
|
||||
final String[] classInfo = info.trim().split(",");
|
||||
if (classInfo.length == 2)
|
||||
{
|
||||
PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.put(Integer.parseInt(classInfo[0].trim()), Float.parseFloat(classInfo[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load CommunityBoard config file (if exists)
|
||||
final PropertiesParser CommunityBoard = new PropertiesParser(CUSTOM_COMMUNITY_BOARD_CONFIG_FILE);
|
||||
|
||||
|
@@ -1527,6 +1527,8 @@ public final class Formulas
|
||||
|
||||
public static double calculatePvpPveBonus(Creature attacker, Creature target, Skill skill, boolean crit)
|
||||
{
|
||||
final PlayerInstance player = attacker.getActingPlayer();
|
||||
|
||||
// PvP bonus
|
||||
if (attacker.isPlayable() && target.isPlayable())
|
||||
{
|
||||
@@ -1537,21 +1539,21 @@ public final class Formulas
|
||||
if (skill.isMagic())
|
||||
{
|
||||
// Magical Skill PvP
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_MAGICAL_SKILL_DAMAGE, 1);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_MAGICAL_SKILL_DEFENCE, 1);
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_MAGICAL_SKILL_DAMAGE, 1) * Config.PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_MAGICAL_SKILL_DEFENCE, 1) * Config.PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Physical Skill PvP
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_PHYSICAL_SKILL_DAMAGE, 1);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_PHYSICAL_SKILL_DEFENCE, 1);
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_PHYSICAL_SKILL_DAMAGE, 1) * Config.PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_PHYSICAL_SKILL_DEFENCE, 1) * Config.PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Autoattack PvP
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_PHYSICAL_ATTACK_DAMAGE, 1);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_PHYSICAL_ATTACK_DEFENCE, 1);
|
||||
pvpAttack = attacker.getStat().getValue(Stats.PVP_PHYSICAL_ATTACK_DAMAGE, 1) * Config.PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
pvpDefense = target.getStat().getValue(Stats.PVP_PHYSICAL_ATTACK_DEFENCE, 1) * Config.PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f);
|
||||
}
|
||||
|
||||
return 1 + (pvpAttack - pvpDefense);
|
||||
@@ -1565,9 +1567,9 @@ public final class Formulas
|
||||
final double pveRaidDefense;
|
||||
|
||||
double pvePenalty = 1;
|
||||
if (!target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_DMG_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 2))
|
||||
if (!target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_DMG_PENALTY) && (player != null) && ((target.getLevel() - player.getLevel()) >= 2))
|
||||
{
|
||||
final int lvlDiff = target.getLevel() - attacker.getActingPlayer().getLevel() - 1;
|
||||
final int lvlDiff = target.getLevel() - player.getLevel() - 1;
|
||||
if (lvlDiff >= Config.NPC_SKILL_DMG_PENALTY.size())
|
||||
{
|
||||
pvePenalty = Config.NPC_SKILL_DMG_PENALTY.get(Config.NPC_SKILL_DMG_PENALTY.size() - 1);
|
||||
@@ -1583,23 +1585,23 @@ public final class Formulas
|
||||
if (skill.isMagic())
|
||||
{
|
||||
// Magical Skill PvE
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_MAGICAL_SKILL_DAMAGE, 1);
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_MAGICAL_SKILL_DEFENCE, 1);
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_MAGICAL_SKILL_DAMAGE, 1) * (player == null ? 1 : Config.PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_MAGICAL_SKILL_DEFENCE, 1) * (player == null ? 1 : Config.PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveRaidDefense = attacker.isRaid() ? attacker.getStat().getValue(Stats.PVE_RAID_MAGICAL_SKILL_DEFENCE, 1) : 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Physical Skill PvE
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_PHYSICAL_SKILL_DAMAGE, 1);
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_PHYSICAL_SKILL_DEFENCE, 1);
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_PHYSICAL_SKILL_DAMAGE, 1) * (player == null ? 1 : Config.PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_PHYSICAL_SKILL_DEFENCE, 1) * (player == null ? 1 : Config.PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveRaidDefense = attacker.isRaid() ? attacker.getStat().getValue(Stats.PVE_RAID_PHYSICAL_SKILL_DEFENCE, 1) : 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Autoattack PvE
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_PHYSICAL_ATTACK_DAMAGE, 1);
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_PHYSICAL_ATTACK_DEFENCE, 1);
|
||||
pveAttack = attacker.getStat().getValue(Stats.PVE_PHYSICAL_ATTACK_DAMAGE, 1) * (player == null ? 1 : Config.PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveDefense = target.getStat().getValue(Stats.PVE_PHYSICAL_ATTACK_DEFENCE, 1) * (player == null ? 1 : Config.PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS.getOrDefault(player.getClassId().getId(), 1f));
|
||||
pveRaidDefense = attacker.isRaid() ? attacker.getStat().getValue(Stats.PVE_RAID_PHYSICAL_ATTACK_DEFENCE, 1) : 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user