Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P aCis_datapack
- Index: data/html/admin/server_menu.htm
- ===================================================================
- --- data/html/admin/server_menu.htm (revision 16)
- +++ data/html/admin/server_menu.htm (working copy)
- @@ -18,7 +18,7 @@
- Reload
- <table width=240>
- <tr>
- - <td><combobox width=120 height=21 var="cb" list=admin;announcement;config;crest;cw;door;htm;item;merchant;multisell;npc;npcwalker;skill;teleport;zone;></td>
- + <td><combobox width=120 height=21 var="cb" list=admin;announcement;balance;config;crest;cw;door;htm;item;merchant;multisell;npc;npcwalker;skill;teleport;zone;></td>
- <td><button value="Reload" action="bypass -h admin_reload $cb" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td>
- </tr>
- </table><br>
- Index: data/xml/classBalance.xml
- ===================================================================
- --- data/xml/classBalance.xml (revision 0)
- +++ data/xml/classBalance.xml (working copy)
- @@ -0,0 +1,5 @@
- +<?xml version='1.0' encoding='utf-8'?>
- +<list>
- + <!-- Type List : NORMAL, MAGIC, CRITICAL, M_CRITICAL, BLOW, PHYSICAL_SKILL_DAMAGE, PHYSICAL_SKILL_CRITICAL -->
- + <balance type="NORMAL" class="SHILLIEN_TEMPLAR" target="CARDINAL" value="1.0"/>
- +</list>
- \ No newline at end of file
- #P aCis_gameserver
- Index: java/net/sf/l2j/gameserver/GameServer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/GameServer.java (revision 20)
- +++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
- @@ -25,6 +25,7 @@
- import net.sf.l2j.gameserver.data.manager.CastleManager;
- import net.sf.l2j.gameserver.data.manager.CastleManorManager;
- import net.sf.l2j.gameserver.data.manager.ClanHallManager;
- +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
- import net.sf.l2j.gameserver.data.manager.CoupleManager;
- import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
- import net.sf.l2j.gameserver.data.manager.DayNightManager;
- @@ -179,6 +180,7 @@
- PlayerData.getInstance();
- PlayerInfoTable.getInstance();
- PlayerLevelData.getInstance();
- + ClassBalanceManager.getInstance();
- OfflineTradersTable.getInstance();
- NewbieBuffData.getInstance();
- TeleportLocationData.getInstance();
- Index: java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java (revision 0)
- +++ java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java (working copy)
- @@ -0,0 +1,113 @@
- +package net.sf.l2j.gameserver.data.manager;
- +
- +import java.nio.file.Path;
- +import java.util.List;
- +import java.util.concurrent.CopyOnWriteArrayList;
- +
- +import net.sf.l2j.commons.data.xml.IXmlReader;
- +import net.sf.l2j.commons.util.StatsSet;
- +
- +import net.sf.l2j.gameserver.enums.actors.ClassId;
- +import net.sf.l2j.gameserver.model.actor.Creature;
- +
- +import org.w3c.dom.Document;
- +
- +/**
- + * @author StinkyMadness
- + */
- +public class ClassBalanceManager implements IXmlReader
- +{
- + private final List<ClassBalanceHolder> _data = new CopyOnWriteArrayList<>();
- +
- + public enum ClassBalanceType
- + {
- + NORMAL,
- + MAGIC,
- + CRITICAL,
- + M_CRITICAL,
- + BLOW,
- + PHYSICAL_SKILL_DAMAGE,
- + PHYSICAL_SKILL_CRITICAL;
- + }
- +
- + public ClassBalanceManager()
- + {
- + load();
- + }
- +
- + @Override
- + public void load()
- + {
- + parseFile("./data/xml/classBalance.xml");
- + LOGGER.info("Loaded {} class balance data.", _data.size());
- + }
- +
- + public void reload()
- + {
- + _data.clear();
- + load();
- + }
- +
- + @Override
- + public void parseDocument(Document doc, Path path)
- + {
- + forEach(doc, "list", listNode -> forEach(listNode, "balance", balanceNode -> _data.add(new ClassBalanceHolder(parseAttributes(balanceNode)))));
- + }
- +
- + public double getValueFor(ClassBalanceType type, Creature attacker, Creature target)
- + {
- + ClassBalanceHolder holder = _data.stream().filter(data -> data.getType() == type && data.getClassId().getId() == attacker.getActingPlayer().getClassId().getId() && data.getTargetId().getId() == target.getActingPlayer().getClassId().getId()).findFirst().orElse(null);
- + return holder == null ? 1.0 : holder.getValue();
- + }
- +
- + public List<ClassBalanceHolder> getData()
- + {
- + return _data;
- + }
- +
- + public class ClassBalanceHolder
- + {
- + private ClassBalanceType _type;
- + private ClassId _classId;
- + private ClassId _targetId;
- + private double _value;
- +
- + public ClassBalanceHolder(StatsSet set)
- + {
- + _type = ClassBalanceType.valueOf(set.getString("type", "NORMAL"));
- + _classId = ClassId.valueOf(set.getString("class"));
- + _targetId = ClassId.valueOf(set.getString("target"));
- + _value = set.getDouble("value", 1.0);
- + }
- +
- + public ClassBalanceType getType()
- + {
- + return _type;
- + }
- +
- + public ClassId getClassId()
- + {
- + return _classId;
- + }
- +
- + public ClassId getTargetId()
- + {
- + return _targetId;
- + }
- +
- + public double getValue()
- + {
- + return _value;
- + }
- + }
- +
- + public static ClassBalanceManager getInstance()
- + {
- + return SingletonHolder.INSTANCE;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final ClassBalanceManager INSTANCE = new ClassBalanceManager();
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (revision 20)
- +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (working copy)
- @@ -9,6 +9,7 @@
- import net.sf.l2j.gameserver.data.cache.CrestCache;
- import net.sf.l2j.gameserver.data.cache.HtmCache;
- import net.sf.l2j.gameserver.data.manager.BuyListManager;
- +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
- import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
- import net.sf.l2j.gameserver.data.manager.ZoneManager;
- import net.sf.l2j.gameserver.data.xml.AdminData;
- @@ -168,6 +169,11 @@
- AnnouncementData.getInstance().reload();
- activeChar.sendMessage("The content of announcements.xml has been reloaded.");
- }
- + else if (type.startsWith("balance"))
- + {
- + ClassBalanceManager.getInstance().reload();
- + activeChar.sendMessage("The content of classBalance.xml has been reloaded.");
- + }
- else if (type.startsWith("config"))
- {
- Config.loadGameServer();
- Index: java/net/sf/l2j/gameserver/skills/Formulas.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/skills/Formulas.java (revision 20)
- +++ java/net/sf/l2j/gameserver/skills/Formulas.java (working copy)
- @@ -7,6 +7,8 @@
- import net.sf.l2j.Config;
- import net.sf.l2j.gameserver.data.manager.CastleManager;
- import net.sf.l2j.gameserver.data.manager.ClanHallManager;
- +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
- +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager.ClassBalanceType;
- import net.sf.l2j.gameserver.data.manager.ZoneManager;
- import net.sf.l2j.gameserver.data.xml.PlayerLevelData;
- import net.sf.l2j.gameserver.enums.SiegeSide;
- @@ -338,6 +340,9 @@
- // Random weapon damage
- damage *= attacker.getRandomDamageMultiplier();
- + if (attacker instanceof Player && target instanceof Player)
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.BLOW, attacker, target);
- +
- // Dmg bonusses in PvP fight
- if (isPvP)
- damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
- @@ -456,6 +461,24 @@
- if (skill == null || skill.getEffectType() != L2SkillType.CHARGEDAM)
- damage *= attacker.getRandomDamageMultiplier();
- + if (attacker instanceof Player && target instanceof Player)
- + {
- + if (crit)
- + {
- + if (skill != null && skill.getSkillType() == L2SkillType.PDAM)
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.PHYSICAL_SKILL_CRITICAL, attacker, target);
- + else
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.CRITICAL, attacker, target);
- + }
- + else
- + {
- + if (skill != null && skill.getSkillType() == L2SkillType.PDAM)
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.PHYSICAL_SKILL_DAMAGE, attacker, target);
- + else
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.NORMAL, attacker, target);
- + }
- + }
- +
- if (target instanceof Npc)
- {
- double multiplier;
- @@ -579,6 +602,14 @@
- else if (mcrit)
- damage *= 4;
- + if (attacker instanceof Player && target instanceof Player)
- + {
- + if (mcrit)
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.M_CRITICAL, attacker, target);
- + else
- + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.MAGIC, attacker, target);
- + }
- +
- // Pvp bonuses for dmg
- if (attacker instanceof Playable && target instanceof Playable)
- {
Add Comment
Please, Sign In to add comment