From d0c5cfe4c789494f74bb0fdd3ce735547668616c Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 28 Oct 2021 07:18:20 +0000 Subject: [PATCH] ClassChange effect using a small delay. --- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 85 ++++++----- .../handlers/effecthandlers/ClassChange.java | 143 +++++++++--------- .../handlers/effecthandlers/ClassChange.java | 143 +++++++++--------- .../handlers/effecthandlers/ClassChange.java | 143 +++++++++--------- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 139 +++++++++-------- .../handlers/effecthandlers/ClassChange.java | 83 +++++----- .../handlers/effecthandlers/ClassChange.java | 139 +++++++++-------- .../handlers/effecthandlers/ClassChange.java | 139 +++++++++-------- 19 files changed, 1017 insertions(+), 922 deletions(-) diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index df5b6f1285..bcf46ad751 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index c878dd2b9d..d6ab93895e 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.updateSymbolSealSkills(); - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.updateSymbolSealSkills(); + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } } diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index c878dd2b9d..d6ab93895e 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.updateSymbolSealSkills(); - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.updateSymbolSealSkills(); + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index c878dd2b9d..d6ab93895e 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.updateSymbolSealSkills(); - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - player.sendPacket(new ExAcquireAPSkillList(player)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.updateSymbolSealSkills(); + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + player.sendPacket(new ExAcquireAPSkillList(player)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index b97cec09f5..10c6fc9499 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } } diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 960dc82bf2..8b7d1a17bf 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.StatSet; @@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) + player.sendMessage("You cannot switch your class right now!"); + return; + } + + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } + + if (OlympiadManager.getInstance().isRegisteredInComp(player)) + { + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + // And re-add + if (member != player) + { + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); + } } } - } + }, 500); } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index b97cec09f5..10c6fc9499 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index b97cec09f5..10c6fc9499 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -16,6 +16,7 @@ */ package handlers.effecthandlers; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.model.Shortcut; @@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect return; } - final PlayerInstance player = effected.getActingPlayer(); - if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) + // Executing later otherwise interrupted exception during storeCharBase. + ThreadPool.schedule(() -> { - player.sendMessage("You cannot switch your class right now!"); - return; - } - - final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); - if (identityCrisis != null) - { - identityCrisis.applyEffects(player, player); - } - - if (OlympiadManager.getInstance().isRegisteredInComp(player)) - { - OlympiadManager.getInstance().unRegisterNoble(player); - } - - final int activeClass = player.getClassId().getId(); - player.setActiveClass(_index); - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); - msg.addClassId(activeClass); - msg.addClassId(player.getClassId().getId()); - player.sendPacket(msg); - - player.broadcastUserInfo(); - player.sendPacket(new ExStorageMaxCount(player)); - player.sendPacket(new AcquireSkillList(player)); - player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); - - if (player.isInParty()) - { - // Delete party window for other party members - player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); - for (PlayerInstance member : player.getParty().getMembers()) + final PlayerInstance player = effected.getActingPlayer(); + if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) { - // And re-add - if (member != player) - { - member.sendPacket(new PartySmallWindowAll(member, player.getParty())); - } - } - } - - // Stop auto use. - for (Shortcut shortcut : player.getAllShortCuts()) - { - if (!shortcut.isAutoUse()) - { - continue; + player.sendMessage("You cannot switch your class right now!"); + return; } - player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1); + if (identityCrisis != null) + { + identityCrisis.applyEffects(player, player); + } - if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + if (OlympiadManager.getInstance().isRegisteredInComp(player)) { - final Skill knownSkill = player.getKnownSkill(shortcut.getId()); - if (knownSkill != null) + OlympiadManager.getInstance().unRegisterNoble(player); + } + + final int activeClass = player.getClassId().getId(); + player.setActiveClass(_index); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_SUCCESSFULLY_SWITCHED_S1_TO_S2); + msg.addClassId(activeClass); + msg.addClassId(player.getClassId().getId()); + player.sendPacket(msg); + + player.broadcastUserInfo(); + player.sendPacket(new ExStorageMaxCount(player)); + player.sendPacket(new AcquireSkillList(player)); + player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); + + if (player.isInParty()) + { + // Delete party window for other party members + player.getParty().broadcastToPartyMembers(player, PartySmallWindowDeleteAll.STATIC_PACKET); + for (PlayerInstance member : player.getParty().getMembers()) { - if (knownSkill.isBad()) + // And re-add + if (member != player) { - AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); - } - else - { - AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + member.sendPacket(new PartySmallWindowAll(member, player.getParty())); } } } - else + + // Stop auto use. + for (Shortcut shortcut : player.getAllShortCuts()) { - final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); - if (knownItem != null) + if (!shortcut.isAutoUse()) { - if (knownItem.isPotion()) + continue; + } + + player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + + if (player.getAutoUseSettings().isAutoSkill(shortcut.getId())) + { + final Skill knownSkill = player.getKnownSkill(shortcut.getId()); + if (knownSkill != null) { - AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId()); + } } - else + } + else + { + final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); + if (knownItem != null) { - AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + if (knownItem.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, knownItem.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, knownItem.getId()); + } } } } - } + }, 500); } }