Fixing ClassMaster and preliminary drop of PlayerClass.

This commit is contained in:
MobiusDevelopment 2019-12-24 10:31:03 +00:00
parent 14602f5e47
commit c0d84f833e
8 changed files with 70 additions and 59 deletions

View File

@ -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("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32></center><br><br>");
sb.append("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
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("<br><br><a action=\"bypass -h npc_" + getObjectId() + "_upgrade_hatchling\">Upgrade Hatchling to Strider</a><br>");
}
sb.append("<br><center><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
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("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32></center><br><br>");
sb.append("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "</font>.");
sb.append("<br><center><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
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("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32></center><br><br>");
sb.append("<html><title>Class Manager</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "</font>.");
sb.append("<br><center><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32></center></body></html>");
html.setHtml(sb.toString());
player.sendPacket(html);

View File

@ -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)
{

View File

@ -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<PlayerClass> availSubs = currClass.getAvailableSubclasses(player);
if (availSubs != null)
{
for (PlayerClass availSub : availSubs)

View File

@ -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
{

View File

@ -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<PlayerClass> subclasseSet5 = EnumSet.of(Sorceror, Spellsinger, Spellhowler);
private static final EnumMap<PlayerClass, Set<PlayerClass>> subclassSetMap = new EnumMap<>(PlayerClass.class);
static
{
final Set<PlayerClass> subclasses = getSet(null, THIRD);

View File

@ -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)

View File

@ -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);
}

View File

@ -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);