Lucasdesigner

Untitled

May 7th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.93 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P aCis_datapack
  3. Index: data/html/admin/server_menu.htm
  4. ===================================================================
  5. --- data/html/admin/server_menu.htm (revision 16)
  6. +++ data/html/admin/server_menu.htm (working copy)
  7. @@ -18,7 +18,7 @@
  8. Reload
  9. <table width=240>
  10. <tr>
  11. - <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>
  12. + <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>
  13. <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>
  14. </tr>
  15. </table><br>
  16. Index: data/xml/classBalance.xml
  17. ===================================================================
  18. --- data/xml/classBalance.xml (revision 0)
  19. +++ data/xml/classBalance.xml (working copy)
  20. @@ -0,0 +1,5 @@
  21. +<?xml version='1.0' encoding='utf-8'?>
  22. +<list>
  23. + <!-- Type List : NORMAL, MAGIC, CRITICAL, M_CRITICAL, BLOW, PHYSICAL_SKILL_DAMAGE, PHYSICAL_SKILL_CRITICAL -->
  24. + <balance type="NORMAL" class="SHILLIEN_TEMPLAR" target="CARDINAL" value="1.0"/>
  25. +</list>
  26. \ No newline at end of file
  27. #P aCis_gameserver
  28. Index: java/net/sf/l2j/gameserver/GameServer.java
  29. ===================================================================
  30. --- java/net/sf/l2j/gameserver/GameServer.java (revision 20)
  31. +++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
  32. @@ -25,6 +25,7 @@
  33. import net.sf.l2j.gameserver.data.manager.CastleManager;
  34. import net.sf.l2j.gameserver.data.manager.CastleManorManager;
  35. import net.sf.l2j.gameserver.data.manager.ClanHallManager;
  36. +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
  37. import net.sf.l2j.gameserver.data.manager.CoupleManager;
  38. import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
  39. import net.sf.l2j.gameserver.data.manager.DayNightManager;
  40. @@ -179,6 +180,7 @@
  41. PlayerData.getInstance();
  42. PlayerInfoTable.getInstance();
  43. PlayerLevelData.getInstance();
  44. + ClassBalanceManager.getInstance();
  45. OfflineTradersTable.getInstance();
  46. NewbieBuffData.getInstance();
  47. TeleportLocationData.getInstance();
  48. Index: java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java
  49. ===================================================================
  50. --- java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java (revision 0)
  51. +++ java/net/sf/l2j/gameserver/data/manager/ClassBalanceManager.java (working copy)
  52. @@ -0,0 +1,113 @@
  53. +package net.sf.l2j.gameserver.data.manager;
  54. +
  55. +import java.nio.file.Path;
  56. +import java.util.List;
  57. +import java.util.concurrent.CopyOnWriteArrayList;
  58. +
  59. +import net.sf.l2j.commons.data.xml.IXmlReader;
  60. +import net.sf.l2j.commons.util.StatsSet;
  61. +
  62. +import net.sf.l2j.gameserver.enums.actors.ClassId;
  63. +import net.sf.l2j.gameserver.model.actor.Creature;
  64. +
  65. +import org.w3c.dom.Document;
  66. +
  67. +/**
  68. + * @author StinkyMadness
  69. + */
  70. +public class ClassBalanceManager implements IXmlReader
  71. +{
  72. + private final List<ClassBalanceHolder> _data = new CopyOnWriteArrayList<>();
  73. +
  74. + public enum ClassBalanceType
  75. + {
  76. + NORMAL,
  77. + MAGIC,
  78. + CRITICAL,
  79. + M_CRITICAL,
  80. + BLOW,
  81. + PHYSICAL_SKILL_DAMAGE,
  82. + PHYSICAL_SKILL_CRITICAL;
  83. + }
  84. +
  85. + public ClassBalanceManager()
  86. + {
  87. + load();
  88. + }
  89. +
  90. + @Override
  91. + public void load()
  92. + {
  93. + parseFile("./data/xml/classBalance.xml");
  94. + LOGGER.info("Loaded {} class balance data.", _data.size());
  95. + }
  96. +
  97. + public void reload()
  98. + {
  99. + _data.clear();
  100. + load();
  101. + }
  102. +
  103. + @Override
  104. + public void parseDocument(Document doc, Path path)
  105. + {
  106. + forEach(doc, "list", listNode -> forEach(listNode, "balance", balanceNode -> _data.add(new ClassBalanceHolder(parseAttributes(balanceNode)))));
  107. + }
  108. +
  109. + public double getValueFor(ClassBalanceType type, Creature attacker, Creature target)
  110. + {
  111. + 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);
  112. + return holder == null ? 1.0 : holder.getValue();
  113. + }
  114. +
  115. + public List<ClassBalanceHolder> getData()
  116. + {
  117. + return _data;
  118. + }
  119. +
  120. + public class ClassBalanceHolder
  121. + {
  122. + private ClassBalanceType _type;
  123. + private ClassId _classId;
  124. + private ClassId _targetId;
  125. + private double _value;
  126. +
  127. + public ClassBalanceHolder(StatsSet set)
  128. + {
  129. + _type = ClassBalanceType.valueOf(set.getString("type", "NORMAL"));
  130. + _classId = ClassId.valueOf(set.getString("class"));
  131. + _targetId = ClassId.valueOf(set.getString("target"));
  132. + _value = set.getDouble("value", 1.0);
  133. + }
  134. +
  135. + public ClassBalanceType getType()
  136. + {
  137. + return _type;
  138. + }
  139. +
  140. + public ClassId getClassId()
  141. + {
  142. + return _classId;
  143. + }
  144. +
  145. + public ClassId getTargetId()
  146. + {
  147. + return _targetId;
  148. + }
  149. +
  150. + public double getValue()
  151. + {
  152. + return _value;
  153. + }
  154. + }
  155. +
  156. + public static ClassBalanceManager getInstance()
  157. + {
  158. + return SingletonHolder.INSTANCE;
  159. + }
  160. +
  161. + private static class SingletonHolder
  162. + {
  163. + protected static final ClassBalanceManager INSTANCE = new ClassBalanceManager();
  164. + }
  165. +}
  166. \ No newline at end of file
  167. Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
  168. ===================================================================
  169. --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (revision 20)
  170. +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (working copy)
  171. @@ -9,6 +9,7 @@
  172. import net.sf.l2j.gameserver.data.cache.CrestCache;
  173. import net.sf.l2j.gameserver.data.cache.HtmCache;
  174. import net.sf.l2j.gameserver.data.manager.BuyListManager;
  175. +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
  176. import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
  177. import net.sf.l2j.gameserver.data.manager.ZoneManager;
  178. import net.sf.l2j.gameserver.data.xml.AdminData;
  179. @@ -168,6 +169,11 @@
  180. AnnouncementData.getInstance().reload();
  181. activeChar.sendMessage("The content of announcements.xml has been reloaded.");
  182. }
  183. + else if (type.startsWith("balance"))
  184. + {
  185. + ClassBalanceManager.getInstance().reload();
  186. + activeChar.sendMessage("The content of classBalance.xml has been reloaded.");
  187. + }
  188. else if (type.startsWith("config"))
  189. {
  190. Config.loadGameServer();
  191. Index: java/net/sf/l2j/gameserver/skills/Formulas.java
  192. ===================================================================
  193. --- java/net/sf/l2j/gameserver/skills/Formulas.java (revision 20)
  194. +++ java/net/sf/l2j/gameserver/skills/Formulas.java (working copy)
  195. @@ -7,6 +7,8 @@
  196. import net.sf.l2j.Config;
  197. import net.sf.l2j.gameserver.data.manager.CastleManager;
  198. import net.sf.l2j.gameserver.data.manager.ClanHallManager;
  199. +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager;
  200. +import net.sf.l2j.gameserver.data.manager.ClassBalanceManager.ClassBalanceType;
  201. import net.sf.l2j.gameserver.data.manager.ZoneManager;
  202. import net.sf.l2j.gameserver.data.xml.PlayerLevelData;
  203. import net.sf.l2j.gameserver.enums.SiegeSide;
  204. @@ -338,6 +340,9 @@
  205. // Random weapon damage
  206. damage *= attacker.getRandomDamageMultiplier();
  207.  
  208. + if (attacker instanceof Player && target instanceof Player)
  209. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.BLOW, attacker, target);
  210. +
  211. // Dmg bonusses in PvP fight
  212. if (isPvP)
  213. damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
  214. @@ -456,6 +461,24 @@
  215. if (skill == null || skill.getEffectType() != L2SkillType.CHARGEDAM)
  216. damage *= attacker.getRandomDamageMultiplier();
  217.  
  218. + if (attacker instanceof Player && target instanceof Player)
  219. + {
  220. + if (crit)
  221. + {
  222. + if (skill != null && skill.getSkillType() == L2SkillType.PDAM)
  223. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.PHYSICAL_SKILL_CRITICAL, attacker, target);
  224. + else
  225. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.CRITICAL, attacker, target);
  226. + }
  227. + else
  228. + {
  229. + if (skill != null && skill.getSkillType() == L2SkillType.PDAM)
  230. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.PHYSICAL_SKILL_DAMAGE, attacker, target);
  231. + else
  232. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.NORMAL, attacker, target);
  233. + }
  234. + }
  235. +
  236. if (target instanceof Npc)
  237. {
  238. double multiplier;
  239. @@ -579,6 +602,14 @@
  240. else if (mcrit)
  241. damage *= 4;
  242.  
  243. + if (attacker instanceof Player && target instanceof Player)
  244. + {
  245. + if (mcrit)
  246. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.M_CRITICAL, attacker, target);
  247. + else
  248. + damage *= ClassBalanceManager.getInstance().getValueFor(ClassBalanceType.MAGIC, attacker, target);
  249. + }
  250. +
  251. // Pvp bonuses for dmg
  252. if (attacker instanceof Playable && target instanceof Playable)
  253. {
Add Comment
Please, Sign In to add comment