From c0d84f833ea535bcd73b0d36406c8aa1cb446c34 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 24 Dec 2019 10:31:03 +0000 Subject: [PATCH] Fixing ClassMaster and preliminary drop of PlayerClass. --- .../actor/instance/ClassMasterInstance.java | 39 +++++++++---------- .../model/actor/instance/PlayerInstance.java | 4 +- .../actor/instance/VillageMasterInstance.java | 2 - .../model/actor/stat/PlayerStat.java | 12 ++---- .../gameserver/model/base/PlayerClass.java | 33 +++++++++++++++- .../gameserver/model/base/SubClass.java | 12 +++--- .../network/clientpackets/EnterWorld.java | 11 ++---- .../clientpackets/RequestBypassToServer.java | 16 +++----- 8 files changed, 70 insertions(+), 59 deletions(-) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java index 43c7bbaff2..857bc9ea7d 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java @@ -22,8 +22,6 @@ import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable; import org.l2jmobius.gameserver.datatables.xml.ItemTable; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.base.ClassId; -import org.l2jmobius.gameserver.model.base.ClassLevel; -import org.l2jmobius.gameserver.model.base.PlayerClass; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -84,20 +82,20 @@ public class ClassMasterInstance extends FolkInstance final ClassId classId = player.getClassId(); int jobLevel = 0; final int level = player.getLevel(); - final ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel(); + final int lvl = classId.level(); switch (lvl) { - case FIRST: + case 0: { jobLevel = 1; break; } - case SECOND: + case 1: { jobLevel = 2; break; } - case THIRD: + case 2: { jobLevel = 3; break; @@ -123,7 +121,7 @@ public class ClassMasterInstance extends FolkInstance { final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final StringBuilder sb = new StringBuilder(); - sb.append("Class Manager





"); + sb.append("Class Manager





"); if (((level >= 20) && (jobLevel == 1) && Config.ALLOW_CLASS_MASTERS_FIRST_CLASS) || ((level >= 40) && (jobLevel == 2) && Config.ALLOW_CLASS_MASTERS_SECOND_CLASS) || ((level >= 76) && (jobLevel == 3) && Config.ALLOW_CLASS_MASTERS_THIRD_CLASS)) { @@ -153,7 +151,7 @@ public class ClassMasterInstance extends FolkInstance { sb.append("

Upgrade Hatchling to Strider
"); } - sb.append("
"); + sb.append("
"); html.setHtml(sb.toString()); player.sendPacket(html); } @@ -244,8 +242,7 @@ public class ClassMasterInstance extends FolkInstance player.setTarget(player); - final ClassLevel lvlnow = PlayerClass.values()[classId.getId()].getLevel(); - + final int lvlnow = classId.level(); if (player.isGM()) { changeClass(player, val); @@ -262,9 +259,9 @@ public class ClassMasterInstance extends FolkInstance final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final StringBuilder sb = new StringBuilder(); - sb.append("Class Manager





"); + sb.append("Class Manager





"); sb.append("You have now become a " + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "."); - sb.append("
"); + sb.append("
"); html.setHtml(sb.toString()); player.sendPacket(html); @@ -272,17 +269,17 @@ public class ClassMasterInstance extends FolkInstance } switch (lvlnow) { - case FIRST: + case 0: { jobLevel = 1; break; } - case SECOND: + case 1: { jobLevel = 2; break; } - case THIRD: + case 2: { jobLevel = 3; break; @@ -298,20 +295,20 @@ public class ClassMasterInstance extends FolkInstance return; // no more job changes } - final ClassLevel lvlnext = PlayerClass.values()[val].getLevel(); + final int lvlnext = ClassId.getClassId(val).level(); switch (lvlnext) { - case FIRST: + case 0: { newJobLevel = 1; break; } - case SECOND: + case 1: { newJobLevel = 2; break; } - case THIRD: + case 2: { newJobLevel = 3; break; @@ -403,9 +400,9 @@ public class ClassMasterInstance extends FolkInstance final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final StringBuilder sb = new StringBuilder(); - sb.append("Class Manager





"); + sb.append("Class Manager





"); sb.append("You have now become a " + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "."); - sb.append("
"); + sb.append("
"); html.setHtml(sb.toString()); player.sendPacket(html); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 2cd667acd3..64b1d1fc9a 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -129,8 +129,6 @@ import org.l2jmobius.gameserver.model.actor.stat.PlayerStat; import org.l2jmobius.gameserver.model.actor.status.PlayerStatus; import org.l2jmobius.gameserver.model.actor.templates.PlayerTemplate; import org.l2jmobius.gameserver.model.base.ClassId; -import org.l2jmobius.gameserver.model.base.ClassLevel; -import org.l2jmobius.gameserver.model.base.PlayerClass; import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.ClanMember; @@ -2918,7 +2916,7 @@ public class PlayerInstance extends Playable */ public void setClassId(int id) { - if ((getLvlJoinedAcademy() != 0) && (_clan != null) && (PlayerClass.values()[id].getLevel() == ClassLevel.THIRD)) + if ((getLvlJoinedAcademy() != 0) && (_clan != null) && (ClassId.getClassId(id).level() == 2)) { if (getLvlJoinedAcademy() <= 16) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/VillageMasterInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/VillageMasterInstance.java index 6f439fce29..50a12a7db6 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/VillageMasterInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/VillageMasterInstance.java @@ -963,9 +963,7 @@ public class VillageMasterInstance extends FolkInstance * follows: Treasure Hunter, Plainswalker and Abyss Walker Hawkeye, Silver Ranger and Phantom Ranger Paladin, Dark Avenger, Temple Knight and Shillien Knight Warlocks, Elemental Summoner and Phantom Summoner Elder and Shillien Elder Swordsinger and Bladedancer Sorcerer, Spellsinger and * Spellhowler */ - final Set availSubs = currClass.getAvailableSubclasses(player); - if (availSubs != null) { for (PlayerClass availSub : availSubs) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/PlayerStat.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/PlayerStat.java index bb0b741510..17070bce66 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/PlayerStat.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/PlayerStat.java @@ -23,8 +23,6 @@ import org.l2jmobius.gameserver.datatables.xml.ExperienceData; import org.l2jmobius.gameserver.model.actor.instance.ClassMasterInstance; import org.l2jmobius.gameserver.model.actor.instance.PetInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; -import org.l2jmobius.gameserver.model.base.ClassLevel; -import org.l2jmobius.gameserver.model.base.PlayerClass; import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.entity.event.TvT; import org.l2jmobius.gameserver.model.quest.QuestState; @@ -178,24 +176,22 @@ public class PlayerStat extends PlayableStat if (Config.ALLOW_CLASS_MASTERS && Config.ALLOW_REMOTE_CLASS_MASTERS) { final ClassMasterInstance masterInstance = ClassMasterInstance.getInstance(); - if (masterInstance != null) { - final ClassLevel curLevel = PlayerClass.values()[getActiveChar().getClassId().getId()].getLevel(); - if ((getLevel() >= 20) && (curLevel == ClassLevel.FIRST)) + final int curLevel = getActiveChar().getClassId().level(); + if ((getLevel() >= 20) && (curLevel == 0)) { ClassMasterInstance.getInstance().onAction(getActiveChar()); } - else if ((getLevel() >= 40) && (curLevel == ClassLevel.SECOND)) + else if ((getLevel() >= 40) && (curLevel == 1)) { ClassMasterInstance.getInstance().onAction(getActiveChar()); } - else if ((getLevel() >= 76) && (curLevel == ClassLevel.THIRD)) + else if ((getLevel() >= 76) && (curLevel == 2)) { ClassMasterInstance.getInstance().onAction(getActiveChar()); } - } else { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/PlayerClass.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/PlayerClass.java index 5eead5862e..cac15d45b4 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/PlayerClass.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/PlayerClass.java @@ -99,6 +99,38 @@ public enum PlayerClass DwarvenArtisan(Race.DWARF, Fighter, SECOND), Warsmith(Race.DWARF, Fighter, THIRD), + // TODO: Diminish the use of PlayerClass.values() and drop this class. + dummyEntry1(null, null, null), + dummyEntry2(null, null, null), + dummyEntry3(null, null, null), + dummyEntry4(null, null, null), + dummyEntry5(null, null, null), + dummyEntry6(null, null, null), + dummyEntry7(null, null, null), + dummyEntry8(null, null, null), + dummyEntry9(null, null, null), + dummyEntry10(null, null, null), + dummyEntry11(null, null, null), + dummyEntry12(null, null, null), + dummyEntry13(null, null, null), + dummyEntry14(null, null, null), + dummyEntry15(null, null, null), + dummyEntry16(null, null, null), + dummyEntry17(null, null, null), + dummyEntry18(null, null, null), + dummyEntry19(null, null, null), + dummyEntry20(null, null, null), + dummyEntry21(null, null, null), + dummyEntry22(null, null, null), + dummyEntry23(null, null, null), + dummyEntry24(null, null, null), + dummyEntry25(null, null, null), + dummyEntry26(null, null, null), + dummyEntry27(null, null, null), + dummyEntry28(null, null, null), + dummyEntry29(null, null, null), + dummyEntry30(null, null, null), + /* * (3rd classes) */ @@ -152,7 +184,6 @@ public enum PlayerClass private static final Set subclasseSet5 = EnumSet.of(Sorceror, Spellsinger, Spellhowler); private static final EnumMap> subclassSetMap = new EnumMap<>(PlayerClass.class); - static { final Set subclasses = getSet(null, THIRD); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/SubClass.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/SubClass.java index dec104ae9c..618d33e373 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/SubClass.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/base/SubClass.java @@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.datatables.xml.ExperienceData; */ public class SubClass { - private PlayerClass _class; + private ClassId _class; private long _exp = ExperienceData.getInstance().getExpForLevel(Config.BASE_SUBCLASS_LEVEL); private int _sp = 0; private int _level = Config.BASE_SUBCLASS_LEVEL; @@ -34,7 +34,7 @@ public class SubClass public SubClass(int classId, long exp, int sp, byte level, int classIndex) { - _class = PlayerClass.values()[classId]; + _class = ClassId.getClassId(classId); _exp = exp; _sp = sp; _level = level; @@ -44,7 +44,7 @@ public class SubClass public SubClass(int classId, int classIndex) { // Used for defining a sub class using default values for XP, SP and player level. - _class = PlayerClass.values()[classId]; + _class = ClassId.getClassId(classId); _classIndex = classIndex; } @@ -53,14 +53,14 @@ public class SubClass // Used for specifying ALL attributes of a sub class directly, using the preset default values. } - public PlayerClass getClassDefinition() + public ClassId getClassDefinition() { return _class; } public int getClassId() { - return _class.ordinal(); + return _class.getId(); } public long getExp() @@ -85,7 +85,7 @@ public class SubClass public void setClassId(int classId) { - _class = PlayerClass.values()[classId]; + _class = ClassId.getClassId(classId); } public void setExp(long expValue) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 68bcb74a3f..266910a17a 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -49,8 +49,6 @@ import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.ClassMasterInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; -import org.l2jmobius.gameserver.model.base.ClassLevel; -import org.l2jmobius.gameserver.model.base.PlayerClass; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.entity.Announcements; import org.l2jmobius.gameserver.model.entity.ClanHall; @@ -465,17 +463,16 @@ public class EnterWorld extends GameClientPacket final ClassMasterInstance master = ClassMasterInstance.getInstance(); if (master != null) { - final ClassLevel lvlnow = PlayerClass.values()[player.getClassId().getId()].getLevel(); - - if ((player.getLevel() >= 20) && (lvlnow == ClassLevel.FIRST)) + final int lvlnow = player.getClassId().level(); + if ((player.getLevel() >= 20) && (lvlnow == 0)) { ClassMasterInstance.getInstance().onAction(player); } - else if ((player.getLevel() >= 40) && (lvlnow == ClassLevel.SECOND)) + else if ((player.getLevel() >= 40) && (lvlnow == 1)) { ClassMasterInstance.getInstance().onAction(player); } - else if ((player.getLevel() >= 76) && (lvlnow == ClassLevel.THIRD)) + else if ((player.getLevel() >= 76) && (lvlnow == 2)) { ClassMasterInstance.getInstance().onAction(player); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java index 67e2de99f3..ad9cba7c18 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java @@ -125,9 +125,8 @@ public class RequestBypassToServer extends GameClientPacket return; } - final int endOfId = _command.indexOf('_', 5); String id; - + final int endOfId = _command.indexOf('_', 5); if (endOfId > 0) { id = _command.substring(4, endOfId); @@ -139,8 +138,6 @@ public class RequestBypassToServer extends GameClientPacket try { - final WorldObject object = World.getInstance().findObject(Integer.parseInt(id)); - if (_command.substring(endOfId + 1).startsWith("event_participate")) { GameEvent.inscribePlayer(player); @@ -158,7 +155,6 @@ public class RequestBypassToServer extends GameClientPacket player.sendMessage("The event is already started. You can not join now!"); } } - else if (_command.substring(endOfId + 1).startsWith("tvt_player_leave")) { if (TvT.isJoining()) @@ -170,7 +166,6 @@ public class RequestBypassToServer extends GameClientPacket player.sendMessage("The event is already started. You can not leave now!"); } } - else if (_command.substring(endOfId + 1).startsWith("dmevent_player_join")) { if (DM.isJoining()) @@ -182,7 +177,6 @@ public class RequestBypassToServer extends GameClientPacket player.sendMessage("The event is already started. You can't join now!"); } } - else if (_command.substring(endOfId + 1).startsWith("dmevent_player_leave")) { if (DM.isJoining()) @@ -194,7 +188,6 @@ public class RequestBypassToServer extends GameClientPacket player.sendMessage("The event is already started. You can't leave now!"); } } - else if (_command.substring(endOfId + 1).startsWith("ctf_player_join ")) { final String teamName = _command.substring(endOfId + 1).substring(16); @@ -207,7 +200,6 @@ public class RequestBypassToServer extends GameClientPacket player.sendMessage("The event is already started. You can't join now!"); } } - else if (_command.substring(endOfId + 1).startsWith("ctf_player_leave")) { if (CTF.isJoining()) @@ -240,9 +232,11 @@ public class RequestBypassToServer extends GameClientPacket GameEvent.inscribePlayer(player); } - else if ((Config.ALLOW_CLASS_MASTERS && Config.ALLOW_REMOTE_CLASS_MASTERS && (object instanceof ClassMasterInstance)) || ((object instanceof NpcInstance) && (endOfId > 0) && player.isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false))) + final WorldObject object = World.getInstance().findObject(Integer.parseInt(id)); + if ((Config.ALLOW_CLASS_MASTERS && Config.ALLOW_REMOTE_CLASS_MASTERS && (object instanceof ClassMasterInstance)) // + || ((object instanceof NpcInstance) && (endOfId > 0) && player.isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false))) { - ((NpcInstance) object).onBypassFeedback(player, _command.substring(endOfId + 1)); + ((NpcInstance) object).onBypassFeedback(player, _command.replace("npc_" + object.getObjectId() + "_", "")); } player.sendPacket(ActionFailed.STATIC_PACKET);